gridjs-spreadsheet 26.7.1 → 26.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{1f345d060b26fa53bc9d78c36441afd6.svg → 544d1ebaa4cddf566b9f3c24186b9873.svg} +59 -7
- package/angular.d.ts +3 -1
- package/angular.js +4 -0
- package/example/pom.xml +1 -1
- package/index.d.ts +150 -0
- package/package.json +1 -1
- package/react.d.ts +2 -1
- package/react.js +3 -1
- package/readme.md +14 -1
- package/shared.d.ts +2 -1
- package/shared.js +1 -0
- package/vue.d.ts +2 -1
- package/vue.js +3 -0
- package/xspreadsheet.css +987 -1
- package/xspreadsheet.js +5 -5
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
inkscape:pageopacity="0.0"
|
|
27
27
|
inkscape:pagecheckerboard="0"
|
|
28
28
|
showgrid="false"
|
|
29
|
-
inkscape:zoom="
|
|
30
|
-
inkscape:cx="118.
|
|
31
|
-
inkscape:cy="
|
|
29
|
+
inkscape:zoom="2.9236653"
|
|
30
|
+
inkscape:cx="118.68663"
|
|
31
|
+
inkscape:cy="116.80543"
|
|
32
32
|
inkscape:window-width="1296"
|
|
33
33
|
inkscape:window-height="732"
|
|
34
|
-
inkscape:window-x="
|
|
35
|
-
inkscape:window-y="
|
|
34
|
+
inkscape:window-x="234"
|
|
35
|
+
inkscape:window-y="30"
|
|
36
36
|
inkscape:window-maximized="0"
|
|
37
37
|
inkscape:current-layer="g48"
|
|
38
38
|
inkscape:showpageshadow="2"
|
|
@@ -999,7 +999,14 @@
|
|
|
999
999
|
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAQAElEQVR4AezdAXbbutUuUPVNLH9H 1nZkbUfWpy+5TOxYdkSKAHGAnRVEsiQCOPtA4CF9V/v/bv4QIECAAAECywkoAJZLuYAJECBAgMDt pgCwCggQIECAwIICCoAFky5kAgQIEFhbINErAKKgESBAgACBxQQUAIslXLgECBAgsLrAj/gVAD8c /EuAAAECBJYSUAAslW7BEiBAgMDqAlv8CoBNwiMBAgQIEFhIQAGwULKFSoAAAQKrC/yKXwHwy8Iz AgQIECCwjIACYJlUC5QAAQIEVhd4G78C4K2G5wQIECBAYBEBBcAiiRYmAQIECKwu8D5+BcB7Dz8R IECAAIElBBQAS6RZkAQIECCwusDv8SsAfhfxMwECBAgQWEBAAbBAkoVIgAABAqsLfIxfAfDRxCsE CBAgQGB6AQXA9CkWIAECBAisLvAofgXAIxWvESBAgACByQUUAJMnWHgECBAgsLrA4/gVAI9dvEqA AAECBKYWUABMnV7BESBAgMDqAp/FrwD4TMbrBAgQIEBgYgEFwMTJFRoBAgQIrC7wefwKgM9tvEOA AAECBKYVUABMm1qBESBAgMDqAl/FrwD4Ssd7BAgQIEBgUgEFwKSJFRYBAgQIrC7wdfwKgK99vEuA AAECBKYUUABMmVZBESBAgMDqAn+KXwHwJyHvEyBAgACBCQUUABMmVUgECBAgsLrAn+NXAPzZyCcI ECBAgMB0AgqA6VIqIAIECBBYXeCZ+BUAzyj5DAECBAgQmExAATBZQoVDgAABAqsLPBe/AuA5J58i QIAAAQJTCSgApkqnYAgQIEBgdYFn41cAPCvlcwQIECBAYCIBBcBEyRQKAQIECKwu8Hz8KxcA/3dn 0m63agY3fwgMLFDt+2S+Ay+m1lNbpQDIIv/3HXNr/3vzfHvN4+1WwSC5S8tc/3nPY9r9wV8CXQWy p2TtZR2mZU2m5blWYy/Z8pS8bS2vJa/Jb9cFddZge/qZvQBIEpPQtDzf2h4jnx1TILn8x31qafny 5kt7/9FfAk0Fsu6yn6Rl7eXntKaD6rybQHKZvCa/aVPvK7MWAElaTgpJYBLabfUY6DKBfGmT8+Q+ 7bKJGHhKgewj2U/S8nzKIAX1TiB5fruvvHtzzB/2zWq2AiAJyxc0Sdsn4dOzCCT3aYqAWTJ6fRxZ S9lXsr9cPxszuEIge0rWwBVjNxtzpgIgX84kKI/NwHRcRmDKL2wZ/Xkmmj0la2meiERyVCDnlu0u 49E+mh63t/NZCoCtQt8bv8/PLbB9YfM4d6SiO1sgayYn/zye3bf+agukIMw5p3YU99nPUAAkEUnI PRx/CTwUsJE/ZPHiJwI56Vszn+B4+btAzjk593z/YYx/9s+iegGQBCQR+yN3xGoCNvTVMn483qyV 40c7chWBnHtSLJaNt3oBkASUxTfx7gLWS3fycgPmoqLcpE34MoEUi0MUAUcEKhcAgT8Ss2PWFcgX NW1dAZF/JZCTvyLxKyHvPRIou2aqFgD5otrIHy1Fr/1JQOH4J6F13y+7ka+bsiEiz7ko56QLJ3Ns 6KoFgC/qsXw76oeAIuCHg39/CZTcwH9N37OLBUqekyoWAL6oF6/0CYZPxZ42QShCOEEga6HkBn5C 7Lo4TyDr6LzedvR09KMVC4BvR4N1HAECBB4IlNu4H8TgpesFyhWR1QqAfFHTrk+1GVQXKPdlrQ4+ 8PxdVAycnEJTy7kprfOUjw9XsQA4Hq0jCfwSKPVF/TVtzxoIWAsNUBftstSFRbUCQKW+6LeqUdg2 /kawhbr13xQVSpapfhR45ZVqBYAN+5VsO/Z3gVLV+u+T9zMBAgReEahWALwSq2MJECDwu4C7ir+L +PkVgc4Xqa9M9XZTALzm52gCBAgQIPBWoEwRUKkAKIP6diV4ToAAAQIEWgi82melAuDVWB1PgAAB AgQI/CWgAPgLwgMBAgQIEKgj8PpMFQCvG+qBAAECBAiUE1AAlEuZCZ8o8N8T+9IVAQIEugmcMZAC 4AxFfRAgUFXgX1Unbt4EXhVQALwq6PjKAv5X4Cpn75y5/+ecbvRCoKfAOWMpAM5x1Es9ARt/vZy1 mrG10EpWv0MLKACGTo/JNRTw+/+GuMW69muAYglbfbpnxa8AOEtSP9UEXPVVy5j5EiBwqoAC4FRO nRURyBWfAqBIsjpMM2shrcNQhiDwqsB5xysAzrPUUx0B//FfnVz1munfew1kHAKjCCgARsmEefQS yNV/r7GMU0tAEVArX0vO9sygFQBnauprdIGc/F39j56l6+aXXwOkXTcDIxPoKKAA6IhtqMsFnPwv T8HwE0iROPwkTXBVgXPjVgCc66m3cQXc3h03NyPNLHcArJWRMmIuzQQUAM1odTyIwLah53GQKZnG 4AJZK4qAwZO04vTOjlkBcLao/kYS2DbyPI40L3MZXyBr5m/3aebx/uAvgfkEFADz5VREPwTyu1xX cT8s/HtcIGsoa+l4D44kcIrA+Z0oAM431eO1Arliy6btP/i7Ng8zjZ61lCIgbaa4xLK4gAJg8QUw UfjbiT8n/zyfKDShDCCQIiAtvxZQCAyQkNWm0CJeBUALVX32EMhJPi2bcU76afm5x9jGWFvgbSGQ 9Wfdrb0eykavAGiTumwKOSFpt9vZBrkCS9v6zWZsA26zjvX6tUDWXlrWYtZkWp5r53/vs6d+nY2p 320TnAKgjWtOSNrt1sLg5g+BgQVarHl9/thLBk57zakpAGrmzawJECBAYBGBVmEqAFrJ6pcAAQIE CAwsoAAYODmmRoAAAQKrC7SLXwHQzlbPBAgQIEBgWAEFwLCpMTECBAgQWF2gZfwKgJa6+iZAgAAB AoMKKAAGTYxpESBAgMDqAm3jVwC09dU7AQIECBAYUkABMGRaTIoAAQIEVhdoHb8CoLWw/gkQIECA wIACCoABk2JKBAgQILC6QPv4FQDtjY1AgAABAgSGE1AADJcSEyJAgACB1QV6xK8A6KFsDAIECBAg MJiAAmCwhJgOAQIECKwu0Cd+BUAfZ6MQIECAAIGhBBQAQ6XDZAgQIEBgdYFe8SsAekkbhwABAgQI DCSgABgoGaZCgAABAqsL9ItfAdDP2kgECBAgQGAYAQXAMKkwEQIECBBYXaBn/AqAntrGIkCAAAEC gwgoAAZJhGkQIECAwOoCfeNXAPT1NhoBAgQIEBhCQAEwRBpMggABAgRWF+gdvwKgt7jxCBAgQIDA AAIKgAGSYAoECBAgsLpA//gVAP3NjUiAAAECBC4XUABcngITIECAAIHVBa6IXwFwhboxCRAgQIDA xQIKgIsTYHgCBAgQWF3gmvgVANe4G5UAAQIECFwqoAC4lN/gBAgQILC6wFXxKwCukjcuAQIECBC4 UEABcCG+oQkQIEBgdYHr4lcAXGdvZAIECBAgcJmAAuAyegMTIECAwOoCV8avALhS39gECBAgQOAi AQXARfCGJUCAAIHVBa6NXwFwrb/RCRAgQIDAJQIKgEvYDUqAAAECqwtcHb8C4OoMGJ8AAQIECFwg oAC4AN2QBAgQILC6wPXxKwCuz4EZECBAgACB7gIKgO7kBiRAgACB1QVGiF8BMEIWzIEAAQIECHQW UAB0BjccAQIECKwuMEb8CoAx8mAWBAgQIECgq4ACoCu3wQgQIEBgdYFR4lcAjJIJ8yBAgAABAh0F FAAdsQ1FgAABAqsLjBO/AmCcXJgJAQIECBDoJqAA6EZtIAIECBBYXWCk+BUAI2XDXAgQIECAQCcB BUAnaMMQIECAwOoCY8WvABgrH2ZDgAABAgS6CCgAujAbhAABAgRWFxgtfgXAaBkxHwIECBAg0EFA AdAB2RAECBAgsLrAePErAMbLiRkRIECAAIHmAgqA5sQGIECAAIHVBUaMXwEwYlbMiQABAgQINBZQ ADQG1j2BwQT+7z6ftH/eH/99b3lMy2tp95f8JUDgXIExe1MAjJkXsyJwlkBO6jnRp/3v3mke0/5x f5738piW19LymbQUBfeP+EuAwKwCCoBZMyuu1QVycs8JPS3P0/aYpCjYCoG9x+4Zx2cJTC8waoAK gFEzY14EjgnkZJ2TflqeH+vl11EpBNJX7gik/XrHMwIESgsoAEqnz+QJvBPICTon6zNO/O86vv+Q QiAtY9x/9JcAgecExv2UAmDc3JgZgT0COTHnBL3nmCOfzRgZ68ixjiFAYCABBcBAyTAVAgcFckLO ifng4bsPy1gZc/eBDiCwmsDI8SoARs6OuRH4s0Bu+eeE/OdPnvuJjJmxz+1VbwQIdBNQAHSjNhCB 0wVyFd7i9/3PTjRjKwKe1fK5BQXGDlkBMHZ+zI7AZwI5+ecq/LP3e72eIiCt13jGIUDgJAEFwEmQ uiHQWWCEk/8W8khz2ebkkcDlAqNPQAEweobMj8BHgVz9f3z1uldyB2C0OV2nYWQCRQQUAEUSZZoE /hLIyXbEK+7MKXP7a5oeCKwuMH78CoDxc2SGBN4KjHySTRHwdq6eEyAwsIACYODkmBqBBwIjn2RT nKQ9mLaXCKwlUCFaBUCFLJkjgR8CFX7PPnKB8kPRvwQIfBdQAHxn8A+BEgIVTq7uAJRYSibZVqBG 7wqAGnkySwIVrv63LFWa6zZnjwSWE1AALJdyARcVqHD1v9F+2554JLCiQJWYFQBVMmWeKwtUu6LO rwHSVs6Z2AkML6AAGD5FJkigpEClOxYlgU16VIE681IA1MmVma4pkKv/iifT3AFIWzNroiZQQKBS AfCfAp7bFCvNdZuzRwJnC1QsXM420N85AmX21Hu4ZeZaqQC4u/pLYDmByifR3AFIWy5pAiZQQUAB UCFL5riqQG7/V49dAVA9g+a/Q6DWR6sVAGVurdRaBmY7qEDlq/+NdIYYtlg8Xitg/z/Zv1oBcHL4 Tbr7V5NedbqawAxX/1vO3AXYJDxOLXAPrtT+X60AKIV7Xwz+EjgqMNOV80yxHM2n414XsP+/bviu h2oFQIVbQDNdub1bLH7oJjDbGsodgLRugAaaUmDw/f+7eanvbrUCIMIjLwIVajKkEfgo4C7ARxOv 7Bew/+83+/SIigWAk+yn6fTGJAIznixzByBtkhQJ4yKBYff/izxeGrZiAZAKMO2lwBscnIVZ6vZP AwNdvi4w8xqasbB5PeN62COQvT9tzzE9Plty/69YACSZwc7jSG3ERTmSj7k8JzDzSdIdgOfWgE99 LTDg/n8ruf9XLQCCPdIiyFwyp5s/BF4QmPnqf2NZIcYtVo9tBLLXZs9t0/v+XjOXzGn/kRcfUbUA CFs2khHQM4fMJXPSCLwiMPPV/+bybXvikcALAtlzs/e+0MUph2YO/zylpws6qVwAhCuVVx6vbP+9 cnBjTyOQDW2aYL4IJL8GSPviI94i8JSA/f8pps8/VL0ASPX198/Da/5Oxl5l426OaYBlBFa407FM Mi8MdJD9/0KBF4euXgAk/CyCv92f5PH+0OVvxsrJP49dwFyH4gAAEABJREFUBjTI1AIpIlc6KeYO QNrUSRVcF4Hswfb/g9QzFABb6L1OyFlwvcbaYvNIYDaBlQqe2XI3Yjy99uQP+/+IGM/OaaYCIDFn EbT8vVD6zhgZSyNwlsCKJ8PcAUg7y1A/BLI3Z49uJZG+M0ar/rv3O1sBEMDcTs0toSQrP5/R0lcS n77P6E8fBDaBldeUAmBbBR7PEsj3qeP+f9a0r+lnxgJgk3x1IeRWT078WUzpKz9vfXskcJbAilf/ m93KsW8GHtsIZM/O3p09/MgI2e9zbPpIX/n5SD9DHzNzAbDBJ3lJYq7gk9CtvU1onqflvXxuazl2 68cjgbMFrK/bzV2Amz8NBfIda7b/N5x3l65XKAA2yJzgsxi2lpN8FkZanqflvXwubTvOI4FWAq6A bzcGrVaXft8KZE/P/r617PfZ+9PyPC3v5XNpb4+d9vlKBcC0SRRYSYFsNiUnfvKkcwcg7eRudUeg tUD9/hUA9XMoAgLVBdwFqJ5B8y8poAAomTaTnkDASe9XEnMHIO3XK54RGFxghukpAGbIohiqCbj9 /zFjCqKPJl4h0FRAAdCUV+cEHgo42X1kcQfgo4lXhhWYY2IKgDnyKIo6Aq7+P88Vm89tvEPgdAEF wOmkOiTwpYCr/895vn3+lncIjCMwy0wUALNkUhwVBFzhfp2l/Bog7etPeZcAgVMEFACnMOqEAIGT BNwhOQlSN60E5ulXATBPLkUytkCu/p3c/pyj3AFI+/MnfYIAgZcEFAAv8TmYAIEGAgqlBqi6PEdg pl4UADNlUywjCzipPZ+d3AFIe/4InyRAYLeAAmA3mQMI7BbI7f/dBy1+gAJg8QUwZvhzzUoBMFc+ RTOmgKv//Xlhtt/MEQR2CSgAdnH5MIHdAq7+d5P9PMBdgJ8UnowgMNscFACzZVQ8owm4kj2eEXbH 7RxJ4I8CCoA/EvkAgcMCrv4P030/MHcA0r7/4B8C1wrMN7oCYL6ciojATALuAsyUTbEMJaAAGCod JjOZgJPX6wnNHYC013vSA4EXBGY8VAEwY1bFNIKA2//nZUEhdZ6lngj8FFAA/KTwhMCpAk5a53G6 A3CepZ4OCcx5kAJgzryK6loBV//n+zM931SPiwsoABZfAMJvIuDq/3zWb+d3qUcCzwnM+ikFwKyZ FddVAq5U28jn1wBpbXrXK4EFBRQACyZdyASKCrizUjRxtac97+wVAPPmVmT9BXKF6iTVzj2+ae1G 0DOBhQQUAAslW6jNBZycmhPfFFjtjY3wRmDmpwqAmbMrtt4CTk7txVNkpbUfyQgEJhdQAEyeYOF1 E/Af/3WjvikAbv70EZh7FAXA3PkVXT8BV/+s+wkYicAJAgqAExB1sbyAq//+S8BdgP7my404e8AK gNkzLL4eAlWv/v91x/nPvVX8W9W8orU5TyqgAJg0scLqJlD96j9FQDesEwfKHYC0E7vUFYG3AvM/ VwDMn2MREvhMIMVL7gCkffaZkV93F2Dk7Jjb8AIKgOFTZIKDC1Q9Cb298n/7fHDud9PLHYC0dy/6 gcAZAiv0oQBYIctibCWQK+hWfbfu9+3cq94BiFHVAixz1whcKqAAuJTf4MUFqp58Hl3xVy0C3AEo /iUac/przEoBsEaeRXm+wNsr6PN7b9vjo7k/KgrazuK83h/Fc17veiIwqYACYNLECqu5wExX/8HK HYC0PK/WvlWbsPmOLbDK7BQAq2RanGcKzHrFWfUuQH4NkHZmjvVFYHoBBcD0KRYggZ8CucL/qnjJ +2k/Dyj0pOodmULEq0x1nTgVAOvkWqTnCORKs+rJ5r9PELgL8ASSjxCYQUABMEMWxdBTIAVAz/HO HOurq/9tnNwBSNt+rvRYtTCrZDz9XFcKUAGwUrbFeoZA1ZPMniv7Z+4UnGF5dh8pztLO7ld/BKYU UABMmVZBNRJ45gq60dAvd7tn7ns++/LETu5AAXAy6FrdrRWtAmCtfIv2NYEVrv43Ib8G2CQ8EphU QAEwaWKFdbpA5aviI3Pf8yuD07Ff7NBdgBcBVz18tbgVAKtlXLxHBVa6+o9R7gCk5Xm1VjVX1ZzN t7iAAqB4Ak2/i8CRK+guE2s8SNW7ALkDkNaYR/dzCawXjQJgvZyLeC2BV4qX3AFIqyjmLkDFrJlz VwEFQFdugxUVqHoyOeMK/ow+rkh77gCkXTG2MQsKrDhlBcCKWRfzHoFXrqD3jNPis2fMveodgHhW Ldwyd41AcwEFQHNiAxQXqHoSOfPKvWoR4A5A8S9fv+mvOZICYM28i/o5gTOuoJ8b6fxPnTn3M4uJ 8yP9usczHb4eybsEigkoAIolzHS7Crj6/8GdOwBpP36q9e+3WtM12ysEVh1TAbBq5sX9JwFXju+F qt4FyK8B0t5H4ycCBG4KAIuAwFwCuVJvUbyk37SKWlXv5FS0LjjndaesAFg39yL/XCBXjFVPGi3/ n/zcBfh8zXiHQDkBBUC5lJlwB4EUAB2GaTJEi6v/baK5A5C2/VzpsWpBV8m45FxXnrQCYOXsi/0z gaonix5X6C3vMHyWjzNeT1GXdkZf+iAwhYACYIo0CuJEgZZX0CdO82FXPebeY4yHwZ3wogLgBMS5 ulg7GgXA2vkX/UcBV/8fTX5/xa8BfhfxM4GCAgqAgkkz5WYCla9ue869x68aWiXZXYBWsgX7XX3K CoDVV4D43wq4+n+r8fnz3AFI+/wT475TNcfjippZWQEFQNnUmfjJAj2voE+e+iXdVb0LkDsAaZeg GXQkAXNRAFgDBOoLXFG85A5AWkU9dwEqZs2cTxdQAJxOqsOiAlVPCldeiV859ivLLHcA0l7pw7HF BUz/5n8K2CIgcBe44gr6Puwpf6+ce9U7AIGvWvBl7hqBUwTcATiFUSfFBaqeDEa4Aq9aBLgDUPxL +9r0HR0BBUAUtJUFrryCftV9hLmPUIQcdRzB7+jcHUfgZQEFwMuEOigu4Or/tQTmDkDaa71cc/S3 a4Y16tUCxv8hoAD44eDfNQVcAZ6T96p3AfJrgLRzFPRCoJiAAqBYwkyXwF0gV9wjFS+ZT9p9auX+ Vr0DVA56nAmbySagANgkPK4mkCu/ypt/5j9S8/8SuNo3SLzlBRQA5VMogIMCOXkePPTywzL3f99n MVKrXExVnvt9Gfi7R8BnfwkoAH5ZeLaWgE1/rXx/FW0KqrSvPuM9AtMJKACmS6mAnhAY6ffnT0zX RzoIKAA6IF8/hBm8FVAAvNXwfBUBV/+rZPr5OK2J5618chIBBcAkiRTG0wKu/p+mWu6D7gJMnnLh vRdQALz38NP8Aq705s/x0QitjaNyjispoAAomTaTPijg6v8g3CKH5Q5A2iLhrhameH8XUAD8LuJn AgRWFnAXYOXsLxa7AmCxhC8ers198QXwRPi5A5D2xEd9pJKAuX4UUAB8NPHKnAJu/8+Z1xZRKRRb qOpzOAEFwHApMaFGAjb1RrATdusOwHRJFdAjAQXAIxWvzSbg6n+2jLaPx5ppb2yEiwUUABcnwPBd BFz9d2GeapBvU0WzeDDCfyygAHjs4tV5BFzJzZPLnpHk1wBpPcc0FoGuAgqArtwGI0CgkIA7R4WS 9flUvfOZgALgMxmvzyCQKzib+AyZvCaGrJ+0a0Y3KoHGAgqAxsC6v1TA5n0p/xSDKyCLp9H0PxdQ AHxu4536Ajbv+jm8OoIUkWlXz8P4BE4XUACcTqrDQQT8x3+DJGKCaSgAyibRxL8SUAB8peO9ygKu /itnb6y5W0tj5cNsThJQAJwEqZuhBFz9D5WOKSbjLkDBNJry1wIKgK99vFtTwBVbzbyNPGtrauTs mNshAQXAITYHDSzg6n/g5BSeWu4ApBUOYbWpi/dPAgqAPwl5nwABAj8E3AX44eDfSQQUAJMkUhg/ BWzSPyk8OVkgdwDSTu5Wdy0E9PlnAQXAn418oo6A2/91clV1pgrMqpkz7w8CCoAPJF4oLGBzLpy8 IlN3B6BEokzyGQEFwDNKPlNBwNV/hSzNMUdrbY48Lh+FAmD5JTANgKv/aVI5fCDfhp/h4hMU/nMC CoDnnHxqbAFXZGPnZ7bZ5dcAabPFJZ7FBBQAiyVcuAQInCLgjtMpjC060eezAgqAZ6V8blSBXInZ jEfNzrzzyrpLmzdCkU0voACYPsXTB2gTnj7Fwwao8BwwNab0vIAC4HkrnxxTwCY8Zl5WmFWKz7QV YhXjhAIKgAmTulBI/uO/hZI9aKgKgKESYzJ7BBQAe7R8djQBV/+jZWS9+ViD6+V8mogVANOkcrlA XP0vl/JhA3YXYJDUmMY+AQXAPi+fHkfAldc4uVh9Jtbi6iugaPwKgKKJW3zarv4XXwCDhZ87AGmD TWu16Yh3r4ACYK+YzxMgQOCjgLsAH028MriAAmDwBJneQwGb7UMWL14okDsAaRdOYe2hRb9fQAGw 38wR1wq4/X+tv9E/F1CYfm7jnQEFFAADJsWUvhSousn+6x7V37XbMwb/uTtV/OsOwGVZM/ARAQXA ETXHXCVQ+eo/c8+JTbvd/mSQYulW9E/yXHTqpr2agAJgtYzXjrfy1X9t+b6z3wqEvqOeM9q3c7rR yx4Bnz0moAA45uao/gKurPqbXzli1bsA+TVA2pV2xibwlIAC4CkmHyJwWCBXs4qX/XxxS9t/5PVH VL1Tdb3coRk46KiAAuConON6CuSKquqm+t+eUJON5S7AZAkVzlgCCoCx8mE2jwVSADx+Z/xXXf0f z1HuAKQd7+G6I6sWrNeJHRzZYccFFADH7RzZT6DqZlr1CrZfZv88UtU7KCla0/4coU8QuEhAAXAR vGGfFqh8BV157k8nqPEHKxsqABovjtvNAK8IKABe0XNsDwFX/z2Uxx7DrwHGzo/ZFRVQABRN3CLT rnz1V3nuoy2vyr9KcReg4WrS9WsCKxUA+SKmZWP+950t7X/3x7Q8z+tby+fub/l7sYCr/4sTMMjw uQOQNsh0dk2j6hreFWSBD2dPT8sen/0+LXt/Wp7n9a3lcwVCen2KKxQASWoSvLV8IZPgtE0wz/P6 1vLZLIwcu33GY18B9n29Rx+t6l2A7C1po/sWnN9TU84+kv18a9njk4+0rYM8z+tby2eX2P9nLQCS 0CQ+SUxS8/OW7D2POTZ9pK89x/ns2gLWy/n5zx2AtPN7bt9j9pH2oxhhE8h+n+9g9u7Y5+ftvT2P OTZ9pK89x5X57IwFQJKVCi7JOysR6WvqhXAW1In9xPzE7rp1VfVKtRvQCwNVtc0JKO2F0B36u8An P9v/P4F59PJsBcDZJ/7fzXJSyhi/v+7ncwXyJT63x369VZ57P6VjI1W9A5Bos3fkUWsnkL25pXP6 zhjtIujc8ywFQKrrJCaPrQkzRsZqPc7K/eeLVjH+qleolayrFgHZNyo5Dz7Xd9OLbfbkPL57o8EP GSNjNei6f5czFABbQvLYSzBj5VcCeew15irjVL6Crjz3Kuurcm7zBRkAABAASURBVJFlfZy/yrIH 54Scx/N7f9xjxppi/69eAOQLleQ/TlP7VzN2FkP7kdYZwdX/Ork+EmnuAKQdOfbqY75dPYFZxv8r Dvv/XxBHH6oXACN8oaqesI6umZbH5Qvdsn99zyFQ9S5ALhbS5sjC9VHY/1/MQeUCICeLEb5MmUPm 8mIqHF5YIFek1kC/BMY7rd+I543kguFly+8d5PuWvff7Dxf+kzlkLhdO4fjQVQuAoI/0RcpcMqfj mXBkvkRxrChR9f+xrqL1Nmd3ATaJ9R6z1460V2QumVO5TFQuAEbDziIYbU7m00cgxUufkYyyCeQO QNr2c6VHe8UL2bofOuLJtmROKxYA2WxHxM6iTLuvT38PCIyY02fCqHol+kxso3+m6p2X7BNpo/uO OD/7/4lZqVgAnBj+6V1VPYmdDrGzw3ypdx4yzMcrz30YxIMTYX8Qru5hQ8+83P5fsQAYGVlVP/T3 8/TJufo/nXR3h34NsJus9AH2/xPTV60AqFDxKwL2L9CRv9RfRVNhPX41/xneq1qE2Sf2r75/7j+k +xGl8lqtAOiezQMDVj2ZHQj1lENKfWHeRFz1xPMmhCme5g5AWsVgqq79ita95lxq/69WAJTC7bXi io9jEyyewAGmX7UYs5/tWjw3Xvu8/vjpagXAHwMa4ANOaPuSMML/mte+Gf/4tNv/PxxG+Dd3ANJG mIs5rC1Qav9XAKy9WEV/TKDqFeexaGscJSc18nR4lg48X0ABcL6pHucXcPU/Xo7dARgvJ2Y0uECl AqDSrZVKcx18iQ43PVeaw6Xk54QUAT8pZntyq7SnlplrpQLg5g+BAQRc/Q+QhE+moDj7BMbLBB4J KAAeqXiNwGMBJ5jHLqO8mjsAaaPMxzxOEtBNGwEFQBtXvRIgcI2AIu0ad6MWFFAAFEzaZFOusmHn ytLt//EXX/KUNv5Mb7eq/2dGnW0N10pAAdBKVr+zCdis62S0SlGpoKyzpqacqQJgyrSWCipXa2mj T9pmPXqGfs0v6ynt1yuelRUw8XYCCoB2tnqeR6DKFeU84q9HMvodG2vq9Rzr4UUBBcCLgA4/RWD0 zdDV/ylp7tqJnHXlbjWYflsKKABa6ur7WYHcrk179vM9Pzd6cdLTotpYI+dOgVJtNU04XwXAhEkt GtKom7WNuuiCuk87uRuxsBx1rd/JxvprNm0FFABtffX+vEA26tE2xtHm87ymT24Co+Uw80lhss3P I4HLBBQAl9Eb+IFANsYUAg/e6v6Sjbo7eZMBs57SmnR+oNOs8QOHrXiImFsLKABaC+t/r0BOvHuP afF5G3UL1Wv6/Ps1w34YdZS1/WFiXlhTQAGwZt5HjjpXa1dvlKOcMEbOU7W5XZ3TrGlF5Y5V46Pt BRQA7Y2NsF8gG2U2zP1Hvn5EThQpQl7vSQ8jCSSnye0Vc8pazpq+YmxjEvhUQAHwKY03LhbIhpmN s9c0coL4232wPN4f/J1QILntneMUHVnLE3K2DEnfPQQUAD2UjXFUIBtnNtCjxz97XE4MPcZ5dj4+ 11Ygue5RXGacrK220eidwEEBBcBBOId1E8gGmqu2Fht2+s4mndYtIAMNIZDissWaSnDbuspjftZ2 Cvh4HwEFQB9no7wukA37rEIgG3NO+ml5/vrs9FBR4O2aOmMdpKDIGrWuKq6GBeesAFgw6cVDfmXT ziafzTktz4tTmP5JAllTWRM5gaft6TbrKMfmxJ9+9hzrsw8FvNhLQAHQS9o4Zwtks9023my+eZ7N Oy2bch7zWlreT8vzvHf2XPQ3h0DWVFrWSlrWS9bR25bXtrZ9xpqaI//LRaEAWC7l0wacTTibd1o2 6DzmtbRpgxZYU4Gsnayjty2vba3p4Kt2Lu5+AgqAftZGIkCAAAECwwgoAIZJhYkQIEBgdQHx9xRQ APTUNhYBAgQIEBhEQAEwSCJMgwABAqsLiL+vgAKgr7fRCBAgQIDAEAIKgCHSYBIECBBYXUD8vQUU AL3FjUeAAAECBAYQUAAMkARTIECAwOoC4u8voADob25EAgQIECBwuYAC4PIUmAABAgRWFxD/FQIK gCvUjUmAAAECBC4WUABcnADDEyBAYHUB8V8joAC4xt2oBAgQIEDgUgEFwKX8BidAgMDqAuK/SkAB cJW8cQkQIECAwIUCCoAL8Q1NgACB1QXEf52AAuA6eyMTIECAAIHLBBQAl9EbmAABAqsLiP9KAQXA lfrGJkCAAAECFwkoAC6CNywBAgRWFxD/tQIKgGv9jU6AAAECBC4RUABcwm5QAgQIrC4g/qsFFABX Z8D4BAgQIEDgAgEFwAXohiRAgMDqAuK/XkABcH0OzIAAAQIECHQXUAB0JzcgAQIEVhcQ/wgCCoAR smAOBAgQIECgs4ACoDO44QgQILC6gPjHEFAAjJEHsyBAgAABAl0FFABduQ1GgACB1QXEP4qAAmCU TJgHAQIECBDoKKAA6IhtKAIECKwuIP5xBBQA4+TCTAgQIECAQDcBBUA3agMRIEBgdQHxjySgABgp G+ZCgAABAgQ6CSgAOkEbhgABAqsLiH8sAQXAWPkwGwIECBAg0EVAAdCF2SAECBBYXUD8owkoAEbL iPkQIECAAIEOAgqADsiGIECAwOoC4h9PQAEwXk7MiAABAgQINBdQADQnNgABAgRWFxD/iAIKgBGz Yk4ECBAgQKCxgAKgMbDuCRAgsLqA+McUUACMmRezIkCAAAECTQUUAE15dU6AAIHVBcQ/qoACYNTM mBcBAgQIEGgooABoiKtrAgQIrC4g/nEFFADj5sbMCBAgQIBAMwEFQDNaHRMgQGB1AfGPLKAAGDk7 5kaAAAECBBoJKAAaweqWAAECqwuIf2wBBcDY+TE7AgQIECDQREAB0IRVpwQIEFhdQPyjCygARs+Q +REgQIAAgQYCCoAGqLokQIDA6gLiH19AATB+jsyQAAECBAicLqAAOJ1UhwQIEFhdQPwVBBQAFbJk jgQIECBA4GQBBcDJoLojQIDA6gLiryGgAKiRJ7MkQIAAAQKnCigATuXUGQECBFYXEH8VAQVAm0z9 371b7XZrYXDzh8DAAi3WvD5/7CUDp73m1BQAbfL2j3u3/9ZuLQz+d3dNS9//vD9Puz/4S6CrQE7K WXtZh2lZk2l5vnS7Z6FF/NlT7137e6aAAuBMTX31FMgGnE0hLRtvNuOe4xtrTYGsu+0El7WXn9PW 1BB1aQEFQOn0mfwbgWzGWyGgGHgD4+kpAjnJbyf+PD+l0/k6EVElAQVApWyZ6zMCKQTSFAHPaPnM MwJZSzn5O/E/o+UzZQQUAGVSZaI7BVIEZNPeeZiPE3gnkDWUtfTuRT88FvBqLQEFQK18me0+gVyx 5dcCedx3pE+vLpA1k5N/Hle3EP+kAgqASRMrrHcCNvJ3HH74g0BO+tbMH5A+vu2VagIKgGoZM9+j Ajb0o3LrHZe1sl7UIl5OQAGwXMqXDtjvcpdO/1PB5z/4e+qDPvRewE/1BBQA9XJmxscFcms37XgP jpxZICd/ReLMGRbbOwEFwDsOPywg4PbuAkk+GKKT/0G4282BFQUUABWzZs6vCigCXhWc7/hc/c8X lYgIfCGgAPgCx1vTCuTXAGnTBiiwXQJZC67+d5G9/7CfagooAGrmzawJEDhPIAXAeb3piUARAQVA kUSZ5ukCrvhOJy3b4beyMx9i4iZRVUABUDVz5v2qgKu+VwXnOd5amCeXItkhoADYgeWj0wnY+KdL 6e6A/Md/u8neH+CnugIKgLq5M/PXBfwa4HVDPRAgUFRAAVA0caZNgMApAn7//xKjgysLKAAqZ8/c CRAgQIDAQQEFwEE4hxEgQGB1AfHXFlAA1M6f2RMgQIAAgUMCCoBDbA4iQIDA6gLi/0TgP5+8PtzL lQqAMqjDZdmECBAgQIDAbwKVCoBMXREQBe0sgf+e1ZF+CKwmIN76AtUKgPriIiBAYCSBf400GXMp L1DqIlUBUH69CeAFAf8rcC/gTXJoqQ17HHMz+USg1F3FagWAav2TVefl3QI2/t1k0x5gLUyb2u6B lVpL1QqA4KZ1z6oBpxMoValPpz9WQC4sdubDxx8K5NyU9vDNEV+sVgDE0Jc1CtqrAqW+qK8G63gC BJoLlLuoqFgA2Libr+PpB0gRaR1Nn+anA8xaSHv6gLU/KPpPBMr9N0UVC4DYZwPPo0bgiEC5L+qR IB2zS+Dvuz7twwTeC5Q8J1UtALKBq9jfL0A/PSdQ8ov6XGg+9aKAIuAJQB/5IJBzUc5JH94Y/YWq BUBcbeRR0PYIZM2U/KLuCdJnDwtkI0873IEDlxQoWzhWLgDyRS0Lv+TX5Pqgnfyvz8HoM0iROPoc L5yfoX8TKL1eKhcAyUOKgNIJSBBaFwHFYhfm8oNkT7FWyqexSwA595S+qKheACTLSUASkecagd8F tg09j7+/52cCjwSyVhQBD2S89FMg55yce36+UPHJDAVA3JOIJCTPNQKbwLaR53F7zSOBZwSyZv52 /2Ae7w/+EvgpkOIw55yfL1R9MksBEP8kxBc2EloEUhDmi5rnGoGjAllDWUtHj5/ouOVDSTGY9ZDH KTBmKgC2hCRBvrCbxnqP+XJmDaQgXC96EbcQyFrKnpLWon99ji+Q3Gdfyf4y/myfnOGMBUBCzxc2 dwOStKkSluC0hwLJc76gaXn+8ENeJHBQIHtK2ravHOym7mELzjz7SPaT5Dy5n45g1gJgS1SSlgSm KQY2lTke8+VMS16T37T8PEd0ohhZIPtKTgpZe2nW3cjZen5uyePWsp+k5efneyj2ydkLgC0dSWK+ tElovrhby8/a7VbJ4PfcJa/J75ZrjwR6CWTtpeX78/u6zGsTtVJ7xBH35O/tcUvsKasUAJ9tCEmy drtVMrj5Q2BggUrfJXP9tfcNvKTaTW31AqCdrJ4JECAwiYAw5hRQAMyZV1ERIECAAIEvBRQAX/J4 kwABAqsLiH9WAQXArJkVFwECBAgQ+EJAAfAFjrcIECCwuoD45xVQAMybW5ERIECAAIFPBRQAn9J4 gwABAqsLiH9mAQXAzNkVGwECBAgQ+ERAAfAJjJcJECCwuoD45xZQAMydX9ERIECAAIGHAgqAhyxe JECAwOoC4p9dQAEwe4bFR4AAAQIEHggoAB6geIkAAQKrC4h/fgEFwPw5FiEBAgQIEPggoAD4QOIF AgQIrC4g/hUEFAArZFmMBAgQIEDgNwEFwG8gfiRAgMDqAuJfQ0ABsEaeRUmAAAECBN4JKADecfiB AAECqwuIfxUBBcAqmRYnAQIECBB4I6AAeIPhKQECBFYXEP86AgqAdXItUgIECBAg8FNAAfCTwhMC BAisLiD+lQQUACtlW6wECBAgQOAvAQXAXxAeCBAgsLqA+NcSUACslW/REiBAgACB7wIKgO8M/iFA gMDqAuJfTUABsFrGxUuAAAECBO4CCoA7gr8ECBBYXUD86wkoANbLuYjJCF62AAAAn0lEQVQJECBA gMBNAWARECBAYHkBACsKKABWzLqYCRAgQGB5AQXA8ksAAAECqwuIf00BBcCaeRc1AQIECCwuoABY fAEInwCB1QXEv6qAAmDVzIubAAECBJYWUAAsnX7BEyCwuoD41xVQAKybe5ETIECAwMICCoCFky90 AgRWFxD/ygIKgJWzL3YCBAgQWFZAAbBs6gVOgMDqAuJfW+D/AwAA//9otut5AAAABklEQVQDAFBH klu3dJ9tAAAAAElFTkSuQmCC "
|
|
1000
1000
|
id="image1-0"
|
|
1001
1001
|
x="-58.971634"
|
|
1002
|
-
y="32.29039"
|
|
1002
|
+
y="32.29039" /><image
|
|
1003
|
+
width="16.223984"
|
|
1004
|
+
height="9.5827017"
|
|
1005
|
+
preserveAspectRatio="none"
|
|
1006
|
+
xlink:href="data:image/png;base64,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 +yIAAAAASUVORK5CYII= "
|
|
1007
|
+
id="image1-03"
|
|
1008
|
+
x="-37.960953"
|
|
1009
|
+
y="32.470234" /></g> <g
|
|
1003
1010
|
id="gchecksyntax"
|
|
1004
1011
|
transform="matrix(0.0135 ,0,0,0.0135 ,18.5,108)"> <path
|
|
1005
1012
|
d="M189.44 5.632c-37.888 6.144-96.256 35.328-122.368 61.44-26.624 27.136-55.296 84.992-61.44 126.464-10.24 64.512 10.24 127.488 58.88 179.712 49.152 53.248 108.544 76.8 176.64 70.144 107.008-9.728 185.344-83.968 200.704-189.44C462.848 108.544 334.848-17.408 189.44 5.632z m-5.12 115.712l40.96 38.912 40.448-38.912c34.304-33.792 43.008-39.424 57.856-39.424 31.232 0 51.712 35.84 35.84 64-3.072 5.632-20.48 25.088-38.912 43.008l-33.28 33.28 37.888 39.424c20.48 21.504 38.4 45.056 39.424 51.712 5.12 31.232-20.48 56.832-51.2 51.2-7.168-1.536-30.72-19.456-52.224-39.936l-38.912-37.376-33.28 33.28c-17.92 18.432-37.376 35.84-43.008 38.912-28.16 15.872-64-4.608-64-35.84 0-14.848 5.632-23.552 39.424-57.856l38.912-40.448-38.912-40.96C87.04 148.992 81.92 140.8 81.92 125.44c0-24.064 19.968-43.52 44.544-43.52 14.336 0 23.552 6.144 57.856 39.424zM512 119.808v53.248l119.296 2.048c118.784 1.536 118.784 1.536 148.48 15.872C838.656 220.16 849.92 254.976 849.92 405.504V512h107.52V372.736c0-157.184-3.072-176.64-34.816-224.256-11.264-16.896-30.208-35.84-47.104-47.104-47.616-31.744-67.072-34.816-224.256-34.816H512v53.248zM66.56 651.264c0 157.184 3.072 176.64 34.816 224.256 11.264 16.896 30.208 35.84 47.104 47.104 47.616 31.744 67.072 34.816 224.256 34.816H512v-107.52H406.016c-151.04 0-185.856-11.264-215.04-70.144-14.336-29.696-14.336-29.696-15.872-148.992l-2.048-118.784H66.56v139.264zM752.64 584.192c-29.184 5.632-79.872 31.232-100.864 51.2-40.448 37.376-66.048 90.112-71.168 147.456-6.144 65.536 18.432 128 70.144 177.152 68.608 65.536 160.256 78.848 248.32 35.84 46.08-22.528 74.24-50.688 96.768-96.768 82.432-168.96-57.856-350.72-243.2-314.88z m193.024 118.272c14.336 16.384 17.408 27.648 11.264 44.032-7.168 18.944-156.672 168.96-177.152 178.176-25.088 10.752-42.496 1.024-94.72-52.736-50.176-51.712-53.76-61.952-31.744-88.064 10.24-12.288 17.408-15.872 31.232-15.872 14.336 0 23.04 5.12 48.128 29.184l30.72 29.184 68.096-67.584c60.928-60.928 69.632-67.584 86.016-67.584 11.776 0 20.992 3.584 28.16 11.264z"
|
|
@@ -1167,4 +1174,49 @@
|
|
|
1167
1174
|
stroke="#FF0000"
|
|
1168
1175
|
stroke-width="4"
|
|
1169
1176
|
stroke-linecap="round"
|
|
1170
|
-
id="line58" /> </g>
|
|
1177
|
+
id="line58" /> </g>
|
|
1178
|
+
|
|
1179
|
+
<g id="RedactionEntireSheet" transform="matrix(0.3333,0,0,0.3333,162,126)">
|
|
1180
|
+
|
|
1181
|
+
<rect x="4" y="4" width="46" height="46" fill="none" stroke="#607D8B" stroke-width="3" rx="3" ry="3" id="worksheet-bg" />
|
|
1182
|
+
|
|
1183
|
+
|
|
1184
|
+
<line x1="4" y1="19" x2="50" y2="19" stroke="#607D8B" stroke-width="2" id="grid-h1" />
|
|
1185
|
+
<line x1="4" y1="35" x2="50" y2="35" stroke="#607D8B" stroke-width="2" id="grid-h2" />
|
|
1186
|
+
<line x1="19" y1="4" x2="19" y2="50" stroke="#607D8B" stroke-width="2" id="grid-v1" />
|
|
1187
|
+
<line x1="35" y1="4" x2="35" y2="50" stroke="#607D8B" stroke-width="2" id="grid-v2" />
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
<g transform="translate(27, 27) scale(0.65) translate(-27, -27)">
|
|
1191
|
+
<rect x="9" y="9" width="36" height="36" fill="#E53935" rx="4" ry="4" id="redact-rect" />
|
|
1192
|
+
<line x1="9" y1="9" x2="45" y2="45" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" id="redact-line" />
|
|
1193
|
+
<rect x="17" y="24" width="20" height="6" fill="#FFFFFF" id="redact-plus-h" />
|
|
1194
|
+
<rect x="24" y="17" width="6" height="20" fill="#FFFFFF" id="redact-plus-v" />
|
|
1195
|
+
</g>
|
|
1196
|
+
</g>
|
|
1197
|
+
|
|
1198
|
+
<g id="RedactionSearchResult" transform="matrix(0.3033,0,0,0.3033,180,126)">
|
|
1199
|
+
|
|
1200
|
+
|
|
1201
|
+
|
|
1202
|
+
<!-- Unified blue-grey rounded background to indicate 'search' context -->
|
|
1203
|
+
<rect x="4" y="4" width="54" height="54" fill="#56754B" rx="4" ry="4" id="bg-rect" />
|
|
1204
|
+
<!-- Search results list: two white horizontal lines representing the searched content -->
|
|
1205
|
+
<rect x="10" y="10" width="14" height="3" fill="#FFFFFF" rx="1.5" id="search-line-1" />
|
|
1206
|
+
<rect x="10" y="16" width="14" height="3" fill="#FFFFFF" rx="1.5" id="search-line-2" />
|
|
1207
|
+
|
|
1208
|
+
<!-- Magnifying glass: represents the 'search' action, positioned on the right side of the list -->
|
|
1209
|
+
<circle cx="35" cy="18" r="7" fill="none" stroke="#FFFFFF" stroke-width="2.5" id="search-glass" />
|
|
1210
|
+
<line x1="42" y1="23" x2="47" y2="28" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" id="search-handle" />
|
|
1211
|
+
|
|
1212
|
+
<g transform="translate(27, 27) scale(0.66) translate(-32, -16)">
|
|
1213
|
+
<rect x="9" y="9" width="36" height="36" fill="#E53935" rx="4" ry="4" id="redact-rect" />
|
|
1214
|
+
<line x1="9" y1="9" x2="45" y2="45" stroke="#FFFFFF" stroke-width="4" stroke-linecap="round" id="redact-line" />
|
|
1215
|
+
<rect x="17" y="24" width="20" height="6" fill="#FFFFFF" id="redact-plus-h" />
|
|
1216
|
+
<rect x="24" y="17" width="6" height="20" fill="#FFFFFF" id="redact-plus-v" />
|
|
1217
|
+
</g>
|
|
1218
|
+
|
|
1219
|
+
|
|
1220
|
+
</g>
|
|
1221
|
+
|
|
1222
|
+
</svg>
|
package/angular.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type {
|
|
|
8
8
|
SimpleChanges,
|
|
9
9
|
} from '@angular/core';
|
|
10
10
|
import type * as i0 from '@angular/core';
|
|
11
|
-
import type Spreadsheet from 'gridjs-spreadsheet';
|
|
11
|
+
import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
|
|
12
12
|
import type { GridJsAdapter } from './shared';
|
|
13
13
|
|
|
14
14
|
export declare class GridJsSpreadsheetComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
@@ -21,6 +21,7 @@ export declare class GridJsSpreadsheetComponent implements AfterViewInit, OnChan
|
|
|
21
21
|
height: string;
|
|
22
22
|
showToolbar: boolean;
|
|
23
23
|
showContextmenu: boolean;
|
|
24
|
+
semanticAutomation: SemanticAutomationOptions | null;
|
|
24
25
|
ready: EventEmitter<{ instance: Spreadsheet; adapter: GridJsAdapter }>;
|
|
25
26
|
change: EventEmitter<any[]>;
|
|
26
27
|
error: EventEmitter<any>;
|
|
@@ -47,6 +48,7 @@ export declare class GridJsSpreadsheetComponent implements AfterViewInit, OnChan
|
|
|
47
48
|
height: { alias: 'height'; required: false };
|
|
48
49
|
showToolbar: { alias: 'showToolbar'; required: false };
|
|
49
50
|
showContextmenu: { alias: 'showContextmenu'; required: false };
|
|
51
|
+
semanticAutomation: { alias: 'semanticAutomation'; required: false };
|
|
50
52
|
},
|
|
51
53
|
{
|
|
52
54
|
ready: 'ready';
|
package/angular.js
CHANGED
|
@@ -29,6 +29,7 @@ export class GridJsSpreadsheetComponent {
|
|
|
29
29
|
height = 'calc(100vh - 96px)';
|
|
30
30
|
showToolbar = true;
|
|
31
31
|
showContextmenu = true;
|
|
32
|
+
semanticAutomation = null;
|
|
32
33
|
|
|
33
34
|
ready = new EventEmitter();
|
|
34
35
|
change = new EventEmitter();
|
|
@@ -80,6 +81,7 @@ export class GridJsSpreadsheetComponent {
|
|
|
80
81
|
this.locale,
|
|
81
82
|
String(this.showToolbar),
|
|
82
83
|
String(this.showContextmenu),
|
|
84
|
+
JSON.stringify(this.semanticAutomation || null),
|
|
83
85
|
].join('|');
|
|
84
86
|
|
|
85
87
|
if (mountKey === this.lastMountKey && this.adapter) return;
|
|
@@ -100,6 +102,7 @@ export class GridJsSpreadsheetComponent {
|
|
|
100
102
|
token: this.token,
|
|
101
103
|
showToolbar: this.showToolbar,
|
|
102
104
|
showContextmenu: this.showContextmenu,
|
|
105
|
+
semanticAutomation: this.semanticAutomation,
|
|
103
106
|
callbacks: {
|
|
104
107
|
ready: (instance, activeAdapter) => this.zone.run(() => this.ready.emit({ instance, adapter: activeAdapter })),
|
|
105
108
|
change: (...args) => this.zone.run(() => this.change.emit(args)),
|
|
@@ -154,6 +157,7 @@ GridJsSpreadsheetComponent.ɵcmp = /* @__PURE__ */ i0.ɵɵngDeclareComponent({
|
|
|
154
157
|
height: 'height',
|
|
155
158
|
showToolbar: 'showToolbar',
|
|
156
159
|
showContextmenu: 'showContextmenu',
|
|
160
|
+
semanticAutomation: 'semanticAutomation',
|
|
157
161
|
},
|
|
158
162
|
outputs: {
|
|
159
163
|
ready: 'ready',
|
package/example/pom.xml
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</repositories>
|
|
18
18
|
<groupId>com.aspose.gridjs</groupId>
|
|
19
19
|
<artifactId>gridjsdemo</artifactId>
|
|
20
|
-
<version>26.
|
|
20
|
+
<version>26.8</version>
|
|
21
21
|
<name>gridjsdemo</name>
|
|
22
22
|
<description>GridJs Demo project for Spring Boot</description>
|
|
23
23
|
<properties>
|
package/index.d.ts
CHANGED
|
@@ -41,6 +41,16 @@ declare module 'gridjs-spreadsheet' {
|
|
|
41
41
|
italic: false;
|
|
42
42
|
};
|
|
43
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Shared canvas render font for both column headers (A, B, C, ...)
|
|
46
|
+
* and row headers (1, 2, 3, ...).
|
|
47
|
+
* Fields in colHeaderFont / rowHeaderFont override it field by field.
|
|
48
|
+
*/
|
|
49
|
+
headerFont?: HeaderFont;
|
|
50
|
+
/** Canvas render font for column headers (A, B, C, ...), overrides headerFont */
|
|
51
|
+
colHeaderFont?: HeaderFont;
|
|
52
|
+
/** Canvas render font for row headers (1, 2, 3, ...), overrides headerFont */
|
|
53
|
+
rowHeaderFont?: HeaderFont;
|
|
44
54
|
/** Enable redaction feature */
|
|
45
55
|
enableRedactionShape?: boolean;
|
|
46
56
|
/** Predefined redaction reasons */
|
|
@@ -59,6 +69,123 @@ declare module 'gridjs-spreadsheet' {
|
|
|
59
69
|
* @returns Promise<string> for the new reason, or null to cancel
|
|
60
70
|
*/
|
|
61
71
|
onRedactionAddReason?: (existingReasons: string[]) => Promise<string | null>;
|
|
72
|
+
/** Versioned Object API for AI Agent and automated tests. Disabled by default. */
|
|
73
|
+
semanticAutomation?: SemanticAutomationOptions;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface SemanticAutomationOptions {
|
|
77
|
+
enabled?: boolean;
|
|
78
|
+
instanceId?: string;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export type SemanticRuntimePhase =
|
|
82
|
+
| 'disabled'
|
|
83
|
+
| 'initializing'
|
|
84
|
+
| 'loading'
|
|
85
|
+
| 'rendering'
|
|
86
|
+
| 'ready'
|
|
87
|
+
| 'updating'
|
|
88
|
+
| 'failed'
|
|
89
|
+
| 'destroyed';
|
|
90
|
+
|
|
91
|
+
export interface SemanticRuntimeState {
|
|
92
|
+
contractVersion: string;
|
|
93
|
+
instanceId: string;
|
|
94
|
+
instanceGeneration: string;
|
|
95
|
+
workbookSessionId: string | null;
|
|
96
|
+
phase: SemanticRuntimePhase;
|
|
97
|
+
revision: number;
|
|
98
|
+
failure: { code: string; message: string; retryable: boolean } | null;
|
|
99
|
+
activeOperationIds: string[];
|
|
100
|
+
lastOperationId: string | null;
|
|
101
|
+
activeSheetId: string | null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface SemanticOperation {
|
|
105
|
+
operationId: string;
|
|
106
|
+
kind: string;
|
|
107
|
+
action: string;
|
|
108
|
+
instanceGeneration: string;
|
|
109
|
+
workbookSessionId: string | null;
|
|
110
|
+
parentOperationId: string | null;
|
|
111
|
+
phase: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
112
|
+
progress: number;
|
|
113
|
+
revision: number | null;
|
|
114
|
+
result: Record<string, any> | null;
|
|
115
|
+
error: { code: string; message: string; retryable: boolean } | null;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface SemanticStateRequest {
|
|
119
|
+
kind: 'workbook' | 'sheets' | 'sheet' | 'cell' | 'range' | 'selection';
|
|
120
|
+
sheetId?: string;
|
|
121
|
+
address?: string;
|
|
122
|
+
range?: string;
|
|
123
|
+
offset?: number;
|
|
124
|
+
limit?: number;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export interface SemanticStateSnapshot {
|
|
128
|
+
contractVersion: string;
|
|
129
|
+
instanceId: string;
|
|
130
|
+
instanceGeneration: string;
|
|
131
|
+
workbookSessionId: string;
|
|
132
|
+
revision: number;
|
|
133
|
+
target: Record<string, any>;
|
|
134
|
+
state: Record<string, any>;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export type SemanticCellValue =
|
|
138
|
+
| { kind: 'blank' }
|
|
139
|
+
| { kind: 'text'; value: string }
|
|
140
|
+
| { kind: 'number'; value: number }
|
|
141
|
+
| { kind: 'boolean'; value: boolean };
|
|
142
|
+
|
|
143
|
+
export type SemanticEditableCellValue =
|
|
144
|
+
| { kind: 'blank' }
|
|
145
|
+
| { kind: 'text'; value: string };
|
|
146
|
+
|
|
147
|
+
export type SemanticActionRequest =
|
|
148
|
+
| { action: 'sheet.activate'; parameters: { sheetId: string }; invocationId?: string }
|
|
149
|
+
| { action: 'cell.activate'; parameters: { sheetId: string; address: string }; invocationId?: string }
|
|
150
|
+
| { action: 'range.select'; parameters: { sheetId: string; address?: string; range?: string }; invocationId?: string }
|
|
151
|
+
| { action: 'cell.setValue'; parameters: { sheetId: string; address: string; value: SemanticEditableCellValue }; invocationId?: string };
|
|
152
|
+
|
|
153
|
+
export interface SemanticActionReceipt {
|
|
154
|
+
operationId: string;
|
|
155
|
+
action: string;
|
|
156
|
+
instanceGeneration: string;
|
|
157
|
+
workbookSessionId: string;
|
|
158
|
+
phase: 'running';
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export interface SemanticFacade {
|
|
162
|
+
describeContract(): Record<string, any>;
|
|
163
|
+
getCapabilities(): Record<string, any>;
|
|
164
|
+
getContract(): Record<string, any>;
|
|
165
|
+
getRuntimeState(): SemanticRuntimeState;
|
|
166
|
+
waitForRuntime(options?: { phase?: SemanticRuntimePhase; timeoutMs?: number; signal?: AbortSignal }): Promise<SemanticRuntimeState>;
|
|
167
|
+
subscribe(options: { event?: 'runtimechange' | 'operationchange' | 'sheetchange' | 'selectionchange' | 'cellchange' | '*'; fromRevision?: number; onEvent: (event: Record<string, any>) => void }): { unsubscribe(): void };
|
|
168
|
+
getOperation(operationId: string): SemanticOperation;
|
|
169
|
+
listOperations(): SemanticOperation[];
|
|
170
|
+
waitForOperation(options: { operationId: string; timeoutMs?: number; signal?: AbortSignal }): Promise<SemanticOperation>;
|
|
171
|
+
getState(request: SemanticStateRequest): SemanticStateSnapshot;
|
|
172
|
+
query(request: SemanticStateRequest): SemanticStateSnapshot;
|
|
173
|
+
getAvailableActions(request?: Pick<SemanticStateRequest, 'kind' | 'sheetId'>): ReadonlyArray<{ action: string; capability: string }>;
|
|
174
|
+
perform(request: SemanticActionRequest): SemanticActionReceipt;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface SemanticInstanceDescriptor {
|
|
178
|
+
instanceId: string;
|
|
179
|
+
instanceGeneration: string;
|
|
180
|
+
contractVersion: string;
|
|
181
|
+
runtimePhase: SemanticRuntimePhase;
|
|
182
|
+
workbookSessionId: string | null;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export interface GridJSSemanticAutomationRegistry {
|
|
186
|
+
readonly version: '1.0.0';
|
|
187
|
+
listInstances(): SemanticInstanceDescriptor[];
|
|
188
|
+
getInstance(instanceId: string): SemanticFacade | null;
|
|
62
189
|
}
|
|
63
190
|
|
|
64
191
|
export type CELL_SELECTED = 'cell-selected';
|
|
@@ -82,12 +209,28 @@ declare module 'gridjs-spreadsheet' {
|
|
|
82
209
|
export type REDACTION_UPDATED = 'redaction-updated';
|
|
83
210
|
export type REDACTION_REASON_INSERTED = 'redactionReason-inserted';
|
|
84
211
|
export type REDACTION_TRANSPARENCY_TOGGLED = 'redactionTransparency-toggled';
|
|
212
|
+
export type SEARCH_REDACTED = 'search-redacted';
|
|
85
213
|
export type CUSTOM_BUTTON = 'custom-button';
|
|
86
214
|
export type UPDATE_SERVER_ERROR = 'updateServerError';
|
|
87
215
|
export type UPDATE_CELL_ERROR = 'updateCellError';
|
|
88
216
|
|
|
89
217
|
export type CellMerge = [number, number];
|
|
90
218
|
|
|
219
|
+
/** Font setting for fixed headers rendered on canvas */
|
|
220
|
+
export interface HeaderFont {
|
|
221
|
+
/** Font family name, e.g. 'Arial' */
|
|
222
|
+
name?: string;
|
|
223
|
+
/** Font size in px (canvas font size before dpr scaling) */
|
|
224
|
+
size?: number;
|
|
225
|
+
/** Font weight, e.g. 400 | 500 | 'bold' */
|
|
226
|
+
weight?: number | 'normal' | 'bold' | 'lighter' | 'bolder';
|
|
227
|
+
/** Shorthand for weight: 'bold' */
|
|
228
|
+
bold?: boolean;
|
|
229
|
+
italic?: boolean;
|
|
230
|
+
/** Text color */
|
|
231
|
+
color?: string;
|
|
232
|
+
}
|
|
233
|
+
|
|
91
234
|
export interface CellRange {
|
|
92
235
|
sri: number;
|
|
93
236
|
sci: number;
|
|
@@ -254,6 +397,10 @@ declare module 'gridjs-spreadsheet' {
|
|
|
254
397
|
envt: REDACTION_TRANSPARENCY_TOGGLED,
|
|
255
398
|
callback: (isTransparent: boolean) => void
|
|
256
399
|
): void;
|
|
400
|
+
(
|
|
401
|
+
envt: SEARCH_REDACTED,
|
|
402
|
+
callback: (sheetNames: string[], detail: { keywords: string, isCaseSensitive: boolean, matchWholeCell: boolean, reason: string, color: string, baseId: string }) => void
|
|
403
|
+
): void;
|
|
257
404
|
(
|
|
258
405
|
envt: CUSTOM_BUTTON,
|
|
259
406
|
callback: (tag: string, button: CustomToolbarButton) => void
|
|
@@ -341,6 +488,8 @@ declare module 'gridjs-spreadsheet' {
|
|
|
341
488
|
constructor(container: string | HTMLElement, opts?: Options);
|
|
342
489
|
/** Build version string (injected at compile time) */
|
|
343
490
|
readonly version: string;
|
|
491
|
+
/** Public Semantic Automation facade. */
|
|
492
|
+
semantic: SemanticFacade;
|
|
344
493
|
on: SpreadsheetEventHandler;
|
|
345
494
|
/**
|
|
346
495
|
* retrieve cell
|
|
@@ -523,6 +672,7 @@ declare module 'gridjs-spreadsheet' {
|
|
|
523
672
|
global {
|
|
524
673
|
interface Window {
|
|
525
674
|
x_spreadsheet(container: string | HTMLElement, opts?: Options): Spreadsheet;
|
|
675
|
+
GridJSSemanticAutomation?: GridJSSemanticAutomationRegistry;
|
|
526
676
|
}
|
|
527
677
|
}
|
|
528
678
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gridjs-spreadsheet",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.8.1",
|
|
4
4
|
"description": "Lightweight, high-performance JavaScript spreadsheet component for building online Excel editors and web spreadsheet apps. Supports React, Vue 3, and Angular with TypeScript declarations. Features include formulas, charts, formatting, data validation, copy/paste from Excel, and server-side integration.",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"main": "xspreadsheet.js",
|
package/react.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CSSProperties } from 'react';
|
|
2
|
-
import type Spreadsheet from 'gridjs-spreadsheet';
|
|
2
|
+
import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
|
|
3
3
|
import type { GridJsAdapter } from './shared';
|
|
4
4
|
|
|
5
5
|
export interface GridJsSpreadsheetProps {
|
|
@@ -12,6 +12,7 @@ export interface GridJsSpreadsheetProps {
|
|
|
12
12
|
height?: string | number;
|
|
13
13
|
showToolbar?: boolean;
|
|
14
14
|
showContextmenu?: boolean;
|
|
15
|
+
semanticAutomation?: SemanticAutomationOptions;
|
|
15
16
|
className?: string;
|
|
16
17
|
style?: CSSProperties;
|
|
17
18
|
onReady?: (instance: Spreadsheet, adapter: GridJsAdapter) => void;
|
package/react.js
CHANGED
|
@@ -22,6 +22,7 @@ export function GridJsSpreadsheet({
|
|
|
22
22
|
height = 'calc(100vh - 96px)',
|
|
23
23
|
showToolbar = true,
|
|
24
24
|
showContextmenu = true,
|
|
25
|
+
semanticAutomation,
|
|
25
26
|
className = 'gridjs-react-host',
|
|
26
27
|
style,
|
|
27
28
|
onReady,
|
|
@@ -54,6 +55,7 @@ export function GridJsSpreadsheet({
|
|
|
54
55
|
token,
|
|
55
56
|
showToolbar,
|
|
56
57
|
showContextmenu,
|
|
58
|
+
semanticAutomation,
|
|
57
59
|
callbacks: {
|
|
58
60
|
ready: onReady,
|
|
59
61
|
change: onChange,
|
|
@@ -88,7 +90,7 @@ export function GridJsSpreadsheet({
|
|
|
88
90
|
adapterRef.current = null;
|
|
89
91
|
if (hostRef.current) hostRef.current.innerHTML = '';
|
|
90
92
|
};
|
|
91
|
-
}, [apiBase, dataKey, loader, mode, locale, token, showToolbar, showContextmenu]);
|
|
93
|
+
}, [apiBase, dataKey, loader, mode, locale, token, showToolbar, showContextmenu, semanticAutomation]);
|
|
92
94
|
|
|
93
95
|
useEffect(() => {
|
|
94
96
|
if (adapterRef.current && token) {
|
package/readme.md
CHANGED
|
@@ -371,7 +371,7 @@ The adapters use the standard Aspose.Cells GridJs endpoints:
|
|
|
371
371
|
|
|
372
372
|
## Example Project
|
|
373
373
|
|
|
374
|
-
|
|
374
|
+
The package includes a complete `example/` directory with a Spring Boot backend and five independent frontend demos (React, Vue 3, Angular, Vanilla npm, Vanilla CDN).
|
|
375
375
|
|
|
376
376
|
```bash
|
|
377
377
|
cp -R node_modules/gridjs-spreadsheet/example ./gridjs-example
|
|
@@ -393,6 +393,19 @@ Modern browsers — Chrome, Firefox, Safari, Edge.
|
|
|
393
393
|
|
|
394
394
|
## Version History
|
|
395
395
|
|
|
396
|
+
<details>
|
|
397
|
+
<summary><strong>v26.8.1</strong> — Support redaction for search matches</summary>
|
|
398
|
+
|
|
399
|
+
- Support redaction for search matches
|
|
400
|
+
</details>
|
|
401
|
+
|
|
402
|
+
<details>
|
|
403
|
+
<summary><strong>v26.8</strong> — Support redaction for entire sheet</summary>
|
|
404
|
+
|
|
405
|
+
- Support redaction for entire sheet
|
|
406
|
+
- Support redaction for sheet name
|
|
407
|
+
</details>
|
|
408
|
+
|
|
396
409
|
<details>
|
|
397
410
|
<summary><strong>v26.7.1</strong> — Improve performance for redaction</summary>
|
|
398
411
|
|
package/shared.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type Spreadsheet from 'gridjs-spreadsheet';
|
|
1
|
+
import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
|
|
2
2
|
|
|
3
3
|
export interface GridJsEndpoints {
|
|
4
4
|
updateCell: string;
|
|
@@ -48,6 +48,7 @@ export interface GridJsAdapterConfig {
|
|
|
48
48
|
fileName?: string;
|
|
49
49
|
basicZorder?: number;
|
|
50
50
|
view?: Record<string, any>;
|
|
51
|
+
semanticAutomation?: SemanticAutomationOptions;
|
|
51
52
|
callbacks?: GridJsAdapterCallbacks;
|
|
52
53
|
dependencies?: GridJsAdapterDependencies;
|
|
53
54
|
}
|
package/shared.js
CHANGED
|
@@ -119,6 +119,7 @@ function buildSpreadsheetOptions(config, endpoints) {
|
|
|
119
119
|
...(config.token ? { token: config.token } : {}),
|
|
120
120
|
...(config.loadingGif ? { loadingGif: config.loadingGif } : {}),
|
|
121
121
|
...(config.view ? { view: config.view } : {}),
|
|
122
|
+
...(config.semanticAutomation ? { semanticAutomation: config.semanticAutomation } : {}),
|
|
122
123
|
};
|
|
123
124
|
}
|
|
124
125
|
|
package/vue.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DefineComponent } from 'vue';
|
|
2
|
-
import type Spreadsheet from 'gridjs-spreadsheet';
|
|
2
|
+
import type Spreadsheet, { SemanticAutomationOptions } from 'gridjs-spreadsheet';
|
|
3
3
|
import type { GridJsAdapter } from './shared';
|
|
4
4
|
|
|
5
5
|
export interface GridJsSpreadsheetProps {
|
|
@@ -12,6 +12,7 @@ export interface GridJsSpreadsheetProps {
|
|
|
12
12
|
height?: string | number;
|
|
13
13
|
showToolbar?: boolean;
|
|
14
14
|
showContextmenu?: boolean;
|
|
15
|
+
semanticAutomation?: SemanticAutomationOptions;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
export declare const GridJsSpreadsheet: DefineComponent<GridJsSpreadsheetProps, {}, any>;
|
package/vue.js
CHANGED
|
@@ -30,6 +30,7 @@ export const GridJsSpreadsheet = defineComponent({
|
|
|
30
30
|
height: { type: [String, Number], default: 'calc(100vh - 96px)' },
|
|
31
31
|
showToolbar: { type: Boolean, default: true },
|
|
32
32
|
showContextmenu: { type: Boolean, default: true },
|
|
33
|
+
semanticAutomation: { type: Object, default: null },
|
|
33
34
|
},
|
|
34
35
|
emits: [
|
|
35
36
|
'ready',
|
|
@@ -59,6 +60,7 @@ export const GridJsSpreadsheet = defineComponent({
|
|
|
59
60
|
token: props.token,
|
|
60
61
|
showToolbar: props.showToolbar,
|
|
61
62
|
showContextmenu: props.showContextmenu,
|
|
63
|
+
semanticAutomation: props.semanticAutomation,
|
|
62
64
|
callbacks: {
|
|
63
65
|
ready: (instance, activeAdapter) => emit('ready', instance, activeAdapter),
|
|
64
66
|
change: (...args) => emit('change', ...args),
|
|
@@ -84,6 +86,7 @@ export const GridJsSpreadsheet = defineComponent({
|
|
|
84
86
|
props.locale,
|
|
85
87
|
props.showToolbar,
|
|
86
88
|
props.showContextmenu,
|
|
89
|
+
props.semanticAutomation,
|
|
87
90
|
],
|
|
88
91
|
() => {
|
|
89
92
|
mountGridJs().catch(error => emit('error', { type: 'mountError', error }));
|