Commit bd2e0c2f36 for handsontable.com

commit bd2e0c2f3633b150dfdcbbd6b165f018c6b2bfea
Author: Jan Siegel <js.ziggle@gmail.com>
Date:   Tue Oct 15 16:01:51 2024 +0200

    14.6.1

diff --git a/.changelogs/11218.json b/.changelogs/11218.json
deleted file mode 100644
index c760a28c72..0000000000
--- a/.changelogs/11218.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "issuesOrigin": "private",
-  "title": "Removed `aria-hidden` from the TextEditor and PasswordEditor's `TEXTAREA` elements. ",
-  "type": "removed",
-  "issueOrPR": 11218,
-  "breaking": false,
-  "framework": "none"
-}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 537517c441..e879b8eccf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,11 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

 <!-- UNVERSIONED -->

+## [14.6.1] - 2024-10-17
+
+### Removed
+- Removed `aria-hidden` from the TextEditor and PasswordEditor's `TEXTAREA` elements.  [#11218](https://github.com/handsontable/handsontable/pull/11218)
+
 ## [14.6.0] - 2024-10-01

 ### Added
diff --git a/examples/next/docs/angular-17/basic-example/angular.json b/examples/next/docs/angular-17/basic-example/angular.json
index 5f52314eb0..082ab60f5a 100644
--- a/examples/next/docs/angular-17/basic-example/angular.json
+++ b/examples/next/docs/angular-17/basic-example/angular.json
@@ -87,5 +87,8 @@
       }
     }
   },
-  "defaultProject": "angular"
+  "defaultProject": "angular",
+  "cli": {
+    "analytics": false
+  }
 }
diff --git a/examples/next/docs/angular-17/package-lock.json b/examples/next/docs/angular-17/package-lock.json
index 2c80bb3675..1251176a02 100644
--- a/examples/next/docs/angular-17/package-lock.json
+++ b/examples/next/docs/angular-17/package-lock.json
@@ -95,13 +95,13 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1703.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.9.tgz",
-      "integrity": "sha512-kEPfTOVnzrJxPGTvaXy8653HU9Fucxttx9gVfQR1yafs+yIEGx3fKGKe89YPmaEay32bIm7ZUpxDF1FO14nkdQ==",
+      "version": "0.1703.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.10.tgz",
+      "integrity": "sha512-wmjx5GspSPprdUGryK5+9vNawbEO7p8h9dxgX3uoeFwPAECcHC+/KK3qPhX2NiGcM6MDsyt25SrbSktJp6PRsA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "17.3.9",
+        "@angular-devkit/core": "17.3.10",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -121,16 +121,16 @@
       }
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.9.tgz",
-      "integrity": "sha512-EuAPSC4c2DSJLlL4ieviKLx1faTyY+ymWycq6KFwoxu1FgWly/dqBeWyXccYinLhPVZmoh6+A/5S4YWXlOGSnA==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.10.tgz",
+      "integrity": "sha512-syz7xgzmp8/0tPJWwQIKZt7KNJfp9U7hkqNacXz4XTYz6YM0oyBXlqk2claSxywWBEkc0eJVSMD9e2ArusZBuA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1703.9",
-        "@angular-devkit/build-webpack": "0.1703.9",
-        "@angular-devkit/core": "17.3.9",
+        "@angular-devkit/architect": "0.1703.10",
+        "@angular-devkit/build-webpack": "0.1703.10",
+        "@angular-devkit/core": "17.3.10",
         "@babel/core": "7.24.0",
         "@babel/generator": "7.23.6",
         "@babel/helper-annotate-as-pure": "7.22.5",
@@ -141,7 +141,7 @@
         "@babel/preset-env": "7.24.0",
         "@babel/runtime": "7.24.0",
         "@discoveryjs/json-ext": "0.5.7",
-        "@ngtools/webpack": "17.3.9",
+        "@ngtools/webpack": "17.3.10",
         "@vitejs/plugin-basic-ssl": "1.1.0",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.18",
@@ -183,7 +183,7 @@
         "tree-kill": "1.2.2",
         "tslib": "2.6.2",
         "undici": "6.11.1",
-        "vite": "5.1.7",
+        "vite": "5.1.8",
         "watchpack": "2.4.0",
         "webpack": "5.94.0",
         "webpack-dev-middleware": "6.1.2",
@@ -642,9 +642,9 @@
       }
     },
     "node_modules/@angular-devkit/build-angular/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -684,9 +684,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular-devkit/build-angular/node_modules/vite": {
-      "version": "5.1.7",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz",
-      "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==",
+      "version": "5.1.8",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.8.tgz",
+      "integrity": "sha512-mB8ToUuSmzODSpENgvpFk2fTiU/YQ1tmcVJJ4WZbq4fPdGJkFNVcmVL5k7iDug6xzWjjuGDKAuSievIsD6H7Xw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -779,13 +779,13 @@
       }
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1703.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.9.tgz",
-      "integrity": "sha512-3b0LND39Nc+DwCQ0N7Tbsd7RAFWTeIc4VDwk/7RO8EMYTP5Kfgr/TK66nwTBypHsjmD69IMKHZZaZuiDfGfx2A==",
+      "version": "0.1703.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.10.tgz",
+      "integrity": "sha512-m6dDgzKLW+c3z9/TUxYmbJEtEhrdYNQ4ogdtAgEYA/FRrKueDU0WztLNr+dVbvwNP99Skovtr8sAQfN6twproQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1703.9",
+        "@angular-devkit/architect": "0.1703.10",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -809,9 +809,9 @@
       }
     },
     "node_modules/@angular-devkit/core": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.9.tgz",
-      "integrity": "sha512-/iKyn5YT7NW5ylrg9yufUydS8byExeQ2HHIwFC4Ebwb/JYYCz+k4tBf2LdP+zXpemDpLznXTQGWia0/yJjG8Vg==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz",
+      "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -847,13 +847,13 @@
       }
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.9.tgz",
-      "integrity": "sha512-9qg+uWywgAtaQlvbnCQv47hcL6ZuA+d9ucgZ0upZftBllZ2vp5WIthCPb2mB0uBkj84Csmtz9MsErFjOQtTj4g==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.10.tgz",
+      "integrity": "sha512-FHcNa1ktYRd0SKExCsNJpR75RffsyuPIV8kvBXzXnLHmXMqvl25G2te3yYJ9yYqy9OLy/58HZznZTxWRyUdHOg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "17.3.9",
+        "@angular-devkit/core": "17.3.10",
         "jsonc-parser": "3.2.1",
         "magic-string": "0.30.8",
         "ora": "5.4.1",
@@ -897,16 +897,16 @@
       "license": "0BSD"
     },
     "node_modules/@angular/cli": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.9.tgz",
-      "integrity": "sha512-b5RGu5RO4VKZlMQDatwABAn1qocgD9u4IrGN2dvHDcrz5apTKYftUdGyG42vngyDNBCg1mWkSDQEWK4f2HfuGg==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.10.tgz",
+      "integrity": "sha512-lA0kf4Cpo8Jcuennq6wGyBTP/UG1oX4xsM9uLRZ2vkPoisjHCk46rWaVP7vfAqdUH39vbATFXftpy1SiEmAI4w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1703.9",
-        "@angular-devkit/core": "17.3.9",
-        "@angular-devkit/schematics": "17.3.9",
-        "@schematics/angular": "17.3.9",
+        "@angular-devkit/architect": "0.1703.10",
+        "@angular-devkit/core": "17.3.10",
+        "@angular-devkit/schematics": "17.3.10",
+        "@schematics/angular": "17.3.10",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.3",
         "ini": "4.1.2",
@@ -1286,13 +1286,13 @@
       "license": "0BSD"
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -1300,9 +1300,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1387,29 +1387,29 @@
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -1428,18 +1428,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -1450,13 +1450,13 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1473,14 +1473,14 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -1491,13 +1491,13 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1544,44 +1544,44 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1591,22 +1591,22 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1614,15 +1614,15 @@
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1632,28 +1632,28 @@
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1663,28 +1663,28 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1704,9 +1704,9 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1714,9 +1714,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1724,9 +1724,9 @@
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1734,42 +1734,42 @@
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -1779,13 +1779,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -1795,13 +1795,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1811,15 +1811,15 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1829,14 +1829,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1927,13 +1927,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1943,13 +1943,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
-      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz",
+      "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2112,13 +2112,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2165,13 +2165,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2181,13 +2181,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2197,14 +2197,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2214,15 +2214,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2232,17 +2231,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -2253,27 +2252,27 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2283,13 +2282,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2299,14 +2298,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2316,13 +2315,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2332,14 +2331,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2349,14 +2347,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2366,14 +2364,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2383,14 +2380,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2400,15 +2397,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2418,14 +2415,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2435,13 +2431,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2451,14 +2447,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2468,13 +2463,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2484,14 +2479,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2501,15 +2496,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2519,16 +2514,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2538,14 +2533,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2555,14 +2550,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2572,13 +2567,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2588,14 +2583,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2605,14 +2599,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2622,16 +2615,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2641,14 +2633,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2658,14 +2650,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2675,15 +2666,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2693,13 +2683,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2709,14 +2699,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2726,16 +2716,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2745,26 +2734,26 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2774,13 +2763,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -2791,13 +2780,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2838,13 +2827,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2854,14 +2843,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2871,13 +2860,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2887,13 +2876,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2903,13 +2892,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2919,13 +2908,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2935,14 +2924,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2952,14 +2941,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2969,14 +2958,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3105,13 +3094,6 @@
         "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
       "version": "7.24.0",
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
@@ -3126,32 +3108,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -3160,30 +3142,43 @@
       }
     },
     "node_modules/@babel/traverse/node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/traverse/node_modules/jsesc": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -3592,9 +3587,9 @@
       }
     },
     "node_modules/@handsontable/angular": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/@handsontable/angular/-/angular-14.5.0.tgz",
-      "integrity": "sha512-uQn86NeOOLpSu4GjAiC9A5qzEr+HG8TtytfNMGLmN/T3lAofBl+ZGwu8qWGdO/N/azcUeP7elyD4HxPy2dVdvg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/@handsontable/angular/-/angular-14.6.0.tgz",
+      "integrity": "sha512-iMnr5qPSDiRiDpjlXFrCQgJIgxrwEgE2H+EqPdrpVNMIZGkyy2dSfFM9HySbXY1UVx58dheej1Uc/zuHWl5cgw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "optionalDependencies": {
         "tslib": "^2.3.0"
@@ -3839,9 +3834,9 @@
       }
     },
     "node_modules/@ngtools/webpack": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.9.tgz",
-      "integrity": "sha512-2+NvEQuYKRWdZaJbRJWEnR48tpW0uYbhwfHBHLDI9Kazb3mb0oAwYBVXdq+TtDLBypXnMsFpCewjRHTvkVx4/A==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.10.tgz",
+      "integrity": "sha512-yPKmdbTJzxROAl2NS8P8eHB2mU0BqV2I0ZiKmX6oTetY2Ea4i2WzlTK39pPpG7atmdF2NPWYLXdJWAup+JxSyw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4133,9 +4128,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
-      "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
+      "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==",
       "cpu": [
         "arm"
       ],
@@ -4147,9 +4142,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
-      "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz",
+      "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==",
       "cpu": [
         "arm64"
       ],
@@ -4161,9 +4156,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
-      "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz",
+      "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==",
       "cpu": [
         "arm64"
       ],
@@ -4175,9 +4170,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
-      "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
+      "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
       "cpu": [
         "x64"
       ],
@@ -4189,9 +4184,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
-      "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz",
+      "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==",
       "cpu": [
         "arm"
       ],
@@ -4203,9 +4198,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
-      "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz",
+      "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==",
       "cpu": [
         "arm"
       ],
@@ -4217,9 +4212,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
-      "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz",
+      "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==",
       "cpu": [
         "arm64"
       ],
@@ -4231,9 +4226,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
-      "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz",
+      "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==",
       "cpu": [
         "arm64"
       ],
@@ -4245,9 +4240,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
-      "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz",
+      "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==",
       "cpu": [
         "ppc64"
       ],
@@ -4259,9 +4254,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
-      "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz",
+      "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==",
       "cpu": [
         "riscv64"
       ],
@@ -4273,9 +4268,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
-      "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz",
+      "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==",
       "cpu": [
         "s390x"
       ],
@@ -4287,9 +4282,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
-      "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz",
+      "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==",
       "cpu": [
         "x64"
       ],
@@ -4301,9 +4296,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
-      "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz",
+      "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==",
       "cpu": [
         "x64"
       ],
@@ -4315,9 +4310,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
-      "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz",
+      "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==",
       "cpu": [
         "arm64"
       ],
@@ -4329,9 +4324,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
-      "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz",
+      "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==",
       "cpu": [
         "ia32"
       ],
@@ -4343,9 +4338,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
-      "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz",
+      "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==",
       "cpu": [
         "x64"
       ],
@@ -4357,14 +4352,14 @@
       ]
     },
     "node_modules/@schematics/angular": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.9.tgz",
-      "integrity": "sha512-q6N8mbcYC6cgPyjTrMH7ehULQoUUwEYN4g7uo4ylZ/PFklSLJvpSp4BuuxANgW449qHSBvQfdIoui9ayAUXQzA==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.10.tgz",
+      "integrity": "sha512-cI+VB/WXlOeAMamni932lE/AZgui8o81dMyEXNXqCuYagNAMuKXliW79Mi5BwYQEABv/BUb4hB4zYtbQqHyACA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "17.3.9",
-        "@angular-devkit/schematics": "17.3.9",
+        "@angular-devkit/core": "17.3.10",
+        "@angular-devkit/schematics": "17.3.10",
         "jsonc-parser": "3.2.1"
       },
       "engines": {
@@ -4621,9 +4616,22 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5569,9 +5577,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "dev": true,
       "funding": [
         {
@@ -5589,8 +5597,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -5772,9 +5780,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "dev": true,
       "funding": [
         {
@@ -6158,9 +6166,9 @@
       "license": "MIT"
     },
     "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -6711,9 +6719,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -6746,9 +6754,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "dev": true,
       "license": "ISC"
     },
@@ -7135,9 +7143,9 @@
       "license": "Apache-2.0"
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7146,7 +7154,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -7710,9 +7718,9 @@
       "license": "MIT"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -10365,9 +10373,9 @@
       }
     },
     "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
       "dev": true,
       "license": "BlueOak-1.0.0"
     },
@@ -10454,13 +10462,13 @@
       }
     },
     "node_modules/parse5": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.0.tgz",
+      "integrity": "sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "entities": "^4.4.0"
+        "entities": "^4.5.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -11346,16 +11354,16 @@
       "optional": true
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -11363,26 +11371,37 @@
         "node": ">=4"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
     "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
     "node_modules/require-directory": {
@@ -11535,13 +11554,13 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
-      "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz",
+      "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/estree": "1.0.5"
+        "@types/estree": "1.0.6"
       },
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -11551,32 +11570,25 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.22.4",
-        "@rollup/rollup-android-arm64": "4.22.4",
-        "@rollup/rollup-darwin-arm64": "4.22.4",
-        "@rollup/rollup-darwin-x64": "4.22.4",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
-        "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
-        "@rollup/rollup-linux-arm64-gnu": "4.22.4",
-        "@rollup/rollup-linux-arm64-musl": "4.22.4",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
-        "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
-        "@rollup/rollup-linux-s390x-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-musl": "4.22.4",
-        "@rollup/rollup-win32-arm64-msvc": "4.22.4",
-        "@rollup/rollup-win32-ia32-msvc": "4.22.4",
-        "@rollup/rollup-win32-x64-msvc": "4.22.4",
+        "@rollup/rollup-android-arm-eabi": "4.24.0",
+        "@rollup/rollup-android-arm64": "4.24.0",
+        "@rollup/rollup-darwin-arm64": "4.24.0",
+        "@rollup/rollup-darwin-x64": "4.24.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.24.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.24.0",
+        "@rollup/rollup-linux-arm64-musl": "4.24.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.24.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-musl": "4.24.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.24.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.24.0",
+        "@rollup/rollup-win32-x64-msvc": "4.24.0",
         "fsevents": "~2.3.2"
       }
     },
-    "node_modules/rollup/node_modules/@types/estree": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/run-async": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
@@ -12950,9 +12962,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "dev": true,
       "funding": [
         {
@@ -12970,8 +12982,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
diff --git a/examples/next/docs/angular/basic-example/angular.json b/examples/next/docs/angular/basic-example/angular.json
index 5f52314eb0..082ab60f5a 100644
--- a/examples/next/docs/angular/basic-example/angular.json
+++ b/examples/next/docs/angular/basic-example/angular.json
@@ -87,5 +87,8 @@
       }
     }
   },
-  "defaultProject": "angular"
+  "defaultProject": "angular",
+  "cli": {
+    "analytics": false
+  }
 }
diff --git a/examples/next/docs/angular/package-lock.json b/examples/next/docs/angular/package-lock.json
index 36652bd968..e05ff5d630 100644
--- a/examples/next/docs/angular/package-lock.json
+++ b/examples/next/docs/angular/package-lock.json
@@ -95,13 +95,13 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1802.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.5.tgz",
-      "integrity": "sha512-c7sVoW85Yqj7IYvNKxtNSGS5I7gWpORorg/xxLZX3OkHWXDrwYbb5LN/2p5/Aytxyb0aXl4o5fFOu6CUwcaLUw==",
+      "version": "0.1802.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.8.tgz",
+      "integrity": "sha512-/rtFQEKgS7LlB9oHr4NCBSdKnvP5kr8L5Hbd3Vl8hZOYK9QWjxKPEXnryA2d5+PCE98bBzZswCNXqELZCPTgIQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.5",
+        "@angular-devkit/core": "18.2.8",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -121,17 +121,17 @@
       }
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.5.tgz",
-      "integrity": "sha512-dIvb0AHoRIMM6tLuG4t6lDDslSAYP77wqytodsN317UzFOuuCPernXbO8NJs+QHxj09nPsem1T5vnvpO2E/PVQ==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.8.tgz",
+      "integrity": "sha512-qK/iLk7A8vQp1CyiJV4DpwfLjPKoiOlTtFqoO5vD8Tyxmc+R06FQp6GJTsZ7JtrTLYSiH+QAWiY6NgF/Rj/hHg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.5",
-        "@angular-devkit/build-webpack": "0.1802.5",
-        "@angular-devkit/core": "18.2.5",
-        "@angular/build": "18.2.5",
+        "@angular-devkit/architect": "0.1802.8",
+        "@angular-devkit/build-webpack": "0.1802.8",
+        "@angular-devkit/core": "18.2.8",
+        "@angular/build": "18.2.8",
         "@babel/core": "7.25.2",
         "@babel/generator": "7.25.0",
         "@babel/helper-annotate-as-pure": "7.24.7",
@@ -142,7 +142,7 @@
         "@babel/preset-env": "7.25.3",
         "@babel/runtime": "7.25.0",
         "@discoveryjs/json-ext": "0.6.1",
-        "@ngtools/webpack": "18.2.5",
+        "@ngtools/webpack": "18.2.8",
         "@vitejs/plugin-basic-ssl": "1.1.0",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.20",
@@ -641,9 +641,9 @@
       }
     },
     "node_modules/@angular-devkit/build-angular/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -811,13 +811,13 @@
       }
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1802.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.5.tgz",
-      "integrity": "sha512-6qkcrWBdkxojCVHGWcdJaz4G+7QTjFvmc+3g8xvLc9sYvJq1I059gfXhDnC0FxiA0MT4cY/26ECYWUHTD5CJLQ==",
+      "version": "0.1802.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.8.tgz",
+      "integrity": "sha512-uPpopkXkO66SSdjtVr7xCyQCPs/x6KUC76xkDc4j0b8EEHifTbi/fNpbkcZ6wBmoAfjKLWXfKvtkh0TqKK5Hkw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1802.5",
+        "@angular-devkit/architect": "0.1802.8",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -841,9 +841,9 @@
       }
     },
     "node_modules/@angular-devkit/core": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.5.tgz",
-      "integrity": "sha512-r9TumPlJ8PvA2+yz4sp+bUHgtznaVKzhvXTN5qL1k4YP8LJ7iZWMR2FOP+HjukHZOTsenzmV9pszbogabqwoZQ==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.8.tgz",
+      "integrity": "sha512-4o2T6wsmXGE/v53+F8L7kGoN2+qzt03C9rtjLVQpOljzpJVttQ8bhvfWxyYLWwcl04RWqRa+82fpIZtBkOlZJw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -879,13 +879,13 @@
       }
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.5.tgz",
-      "integrity": "sha512-NUmz2UQ1Xl4cf4j1AgkwIfsCjBzAPgfeC3IBrD29hSOBE1Y3j6auqjBkvw50v6mbSPxESND995Xy13HpK1Xflw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.8.tgz",
+      "integrity": "sha512-i/h2Oji5FhJMC7wDSnIl5XUe/qym+C1ZwScaATJwDyRLCUIynZkj5rLgdG/uK6l+H0PgvxigkF+akWpokkwW6w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.5",
+        "@angular-devkit/core": "18.2.8",
         "jsonc-parser": "3.3.1",
         "magic-string": "0.30.11",
         "ora": "5.4.1",
@@ -908,9 +908,9 @@
       }
     },
     "node_modules/@angular/animations": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.5.tgz",
-      "integrity": "sha512-IlXtW/Nj48ZzjHUzH1TykZcSR64ScJx39T3IHnjV2z/bVATzZ36JGoadQHdqpJNKBodYJNgtJCGLCbgAvGWY2g==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.8.tgz",
+      "integrity": "sha512-dMSn2hg70siv3lhP+vqhMbgc923xw6XBUvnpCPEzhZqFHvPXfh/LubmsD5RtqHmjWebXtgVcgS+zg3Gq3jB2lg==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -919,7 +919,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.5"
+        "@angular/core": "18.2.8"
       }
     },
     "node_modules/@angular/animations/node_modules/tslib": {
@@ -929,14 +929,14 @@
       "license": "0BSD"
     },
     "node_modules/@angular/build": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.5.tgz",
-      "integrity": "sha512-XWkmjzgeUga0SJ0lYSYcTuYOWTyqcln2mNfBp7Ae/GZ+/7+APbedsIZEiZGZwveOIyOpTM5wguNSoe9khDl5Ig==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.8.tgz",
+      "integrity": "sha512-ufuA4vHJSrL9SQW7bKV61DOoN1mm0t0ILTHaxSoCG3YF70cZJOX7+HNp3cK2uoldRMwbTOKSvCWBw54KKDRd5Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.5",
+        "@angular-devkit/architect": "0.1802.8",
         "@babel/core": "7.25.2",
         "@babel/helper-annotate-as-pure": "7.24.7",
         "@babel/helper-split-export-declaration": "7.24.7",
@@ -955,7 +955,7 @@
         "parse5-html-rewriting-stream": "7.0.0",
         "picomatch": "4.0.2",
         "piscina": "4.6.1",
-        "rollup": "4.20.0",
+        "rollup": "4.22.4",
         "sass": "1.77.6",
         "semver": "7.6.3",
         "vite": "5.4.6",
@@ -1389,9 +1389,9 @@
       }
     },
     "node_modules/@angular/build/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -1542,18 +1542,18 @@
       }
     },
     "node_modules/@angular/cli": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.5.tgz",
-      "integrity": "sha512-97uNs0HsOdnMaTlNJKFjIBUXw0wz43uYvSSKmIpBt7eq1LaPLju1G/qpDIHx2YwhMClPrXXrW2H/xdvqZiIw+w==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.8.tgz",
+      "integrity": "sha512-GKXG7F7z5rxwZ8/bnW/Bp8/zsfE/BpHmIP/icLfUIOwv2kaY5OD2tfQssWXPEuqZzYq2AYz+wjVSbWjxGoja8A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1802.5",
-        "@angular-devkit/core": "18.2.5",
-        "@angular-devkit/schematics": "18.2.5",
+        "@angular-devkit/architect": "0.1802.8",
+        "@angular-devkit/core": "18.2.8",
+        "@angular-devkit/schematics": "18.2.8",
         "@inquirer/prompts": "5.3.8",
         "@listr2/prompt-adapter-inquirer": "2.0.15",
-        "@schematics/angular": "18.2.5",
+        "@schematics/angular": "18.2.8",
         "@yarnpkg/lockfile": "1.1.0",
         "ini": "4.1.3",
         "jsonc-parser": "3.3.1",
@@ -1576,9 +1576,9 @@
       }
     },
     "node_modules/@angular/common": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.5.tgz",
-      "integrity": "sha512-m+KJrtbFXTE36jP/po6UAMeUR/enQxRHpVGLCRcIcE7VWVH1ZcOvoW1yqh2A6k+KxWXeajlq/Z04nnMhcoxMRw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.8.tgz",
+      "integrity": "sha512-TYsKtE5nVaIScWSLGSO34Skc+s3hB/BujSddnfQHoNFvPT/WR0dfmdlpVCTeLj+f50htFoMhW11tW99PbK+whQ==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1587,7 +1587,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.5",
+        "@angular/core": "18.2.8",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1598,9 +1598,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/compiler": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.5.tgz",
-      "integrity": "sha512-vcqe9x4dGGAnMfPhEpcZyiSVgAiqJeK80LqP1vWoAmBR+HeOqAilSv6SflcLAtuTzwgzMMAvD2T+SMCgUvaqww==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.8.tgz",
+      "integrity": "sha512-JRedHNfK1CCPVyeGQB5w3WBYqMA6X8Q240CkvjlGfn0pVXihf9DWk3nkSQJVgYxpvpHfxdgjaYZ5IpMzlkmkhw==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1609,7 +1609,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.5"
+        "@angular/core": "18.2.8"
       },
       "peerDependenciesMeta": {
         "@angular/core": {
@@ -1618,15 +1618,15 @@
       }
     },
     "node_modules/@angular/compiler-cli": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.5.tgz",
-      "integrity": "sha512-CCCtZobUTUfId/RTYtuDCw5R1oK0w65hdAUMRP1MdGmd8bb8DKJA86u1QCWwozL3rbXlIIX4ognQ6urQ43k/Gw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.8.tgz",
+      "integrity": "sha512-OksDE4LWQUCcIvMjtZF7eiDCdIMrcMMpC1+Q0PIYi7KmnqXFGs4/Y0NdJvtn/LrQznzz5WaKM3ZDVNZTRX4wmw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/core": "7.25.2",
         "@jridgewell/sourcemap-codec": "^1.4.14",
-        "chokidar": "^3.0.0",
+        "chokidar": "^4.0.0",
         "convert-source-map": "^1.5.1",
         "reflect-metadata": "^0.2.0",
         "semver": "^7.0.0",
@@ -1642,7 +1642,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "18.2.5",
+        "@angular/compiler": "18.2.8",
         "typescript": ">=5.4 <5.6"
       }
     },
@@ -1660,9 +1660,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/core": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.5.tgz",
-      "integrity": "sha512-5BLVc5gXxzanQkADNS9WPsor3vNF5nQcyIHBi5VScErwM5vVZ7ATH1iZwaOg1ykDEVTFVhKDwD0X1aaqGDbhmQ==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.8.tgz",
+      "integrity": "sha512-NwIuX/Iby1jT6Iv1/s6S3wOFf8xfuQR3MPGvKhGgNtjXLbHG+TXceK9+QPZC0s9/Z8JR/hz+li34B79GrIKgUg==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1682,9 +1682,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/forms": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.5.tgz",
-      "integrity": "sha512-ohKeH+EZCCIyGSiFYlraWLzssGAZc13P92cuYpXB62322PkcA5u0IT72mML9JWGKRqF2zteVsw4koWHVxXM5mA==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.8.tgz",
+      "integrity": "sha512-JCLki7KC6D5vF6dE6yGlBmW33khIgpHs8N9SzuiJtkQqNDTIQA8cPsGV6qpLpxflxASynQOX5lDkWYdQyfm77Q==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1693,9 +1693,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5",
-        "@angular/platform-browser": "18.2.5",
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8",
+        "@angular/platform-browser": "18.2.8",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1706,9 +1706,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/localize": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-18.2.5.tgz",
-      "integrity": "sha512-kteBBkSmmmpMrHAIlxFK/PB9HemJ8OBo/qAGOqCGbvPHLMHdR7cxaMGL+Lkya/QhwhqlhoxUcE5zFWXl7UslNg==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-18.2.8.tgz",
+      "integrity": "sha512-1T7aXEdgVyeYnHOfQUuIDO8Lsamg1ZLrJrA5zUv61asPJp6HCcMjXy9vDQ1XvHm5+CdDjKk/rczlN4lSMZ0QRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1726,14 +1726,14 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "18.2.5",
-        "@angular/compiler-cli": "18.2.5"
+        "@angular/compiler": "18.2.8",
+        "@angular/compiler-cli": "18.2.8"
       }
     },
     "node_modules/@angular/platform-browser": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.5.tgz",
-      "integrity": "sha512-PoX9idwnOpTJBlujzZ2nFGOsmCnZzOH7uNSWIR7trdoq0b1AFXfrxlCQ36qWamk7bbhJI4H28L8YTmKew/nXDA==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.8.tgz",
+      "integrity": "sha512-EPai4ZPqSq3ilLJUC85kPi9wo5j5suQovwtgRyjM/75D9Qy4TV19g8hkVM5Co/zrltO8a2G6vDscCNI5BeGw2A==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1742,9 +1742,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/animations": "18.2.5",
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5"
+        "@angular/animations": "18.2.8",
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8"
       },
       "peerDependenciesMeta": {
         "@angular/animations": {
@@ -1753,9 +1753,9 @@
       }
     },
     "node_modules/@angular/platform-browser-dynamic": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.5.tgz",
-      "integrity": "sha512-5u0IuAt1r5e2u2vSKhp3phnaf6hH89B/q7GErfPse1sdDfNI6wHVppxai28PAfAj9gwooJun6MjFWhJFLzS44A==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.8.tgz",
+      "integrity": "sha512-poZoapDqyN/rxGKQ3C6esdPiPLMkSpP2v12hoEa12KHgfPk7T1e+a+NMyJjV8HeOY3WyvL7tGRhW0NPTajTkhw==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1764,10 +1764,10 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/compiler": "18.2.5",
-        "@angular/core": "18.2.5",
-        "@angular/platform-browser": "18.2.5"
+        "@angular/common": "18.2.8",
+        "@angular/compiler": "18.2.8",
+        "@angular/core": "18.2.8",
+        "@angular/platform-browser": "18.2.8"
       }
     },
     "node_modules/@angular/platform-browser-dynamic/node_modules/tslib": {
@@ -1783,9 +1783,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/router": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.5.tgz",
-      "integrity": "sha512-OjZV1PTiSwT0ytmR0ykveLYzs4uQWf0EuIclZmWqM/bb8Q4P+gJl7/sya05nGnZsj6nHGOL0e/LhSZ3N+5p6qg==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.8.tgz",
+      "integrity": "sha512-L+olYgxIiBq+tbfayVI0cv1yOuymsw33msnGC2l/vpc9sSVfqGzESFnB4yMVU3vHtE9v6v2Y6O+iV44/b79W/g==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1794,9 +1794,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5",
-        "@angular/platform-browser": "18.2.5",
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8",
+        "@angular/platform-browser": "18.2.8",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1807,9 +1807,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/service-worker": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.5.tgz",
-      "integrity": "sha512-MoF2n7z/X+yqK89mIRHQutVHIBTyEUo/fDEL8LcuBP4KOZmX9cRoCEt+vqH49BkArsgOM0jNFMYCM8yt0jg7pw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.8.tgz",
+      "integrity": "sha512-LQktgS2Hn845ASWNyjde18V+CHkkPeCzORfh0ChYKiOmXYFtj/myEik5o/QI/G13Kaymy+vcuwQKiUuZjZiD1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1822,8 +1822,8 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5"
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8"
       }
     },
     "node_modules/@angular/service-worker/node_modules/tslib": {
@@ -1834,13 +1834,13 @@
       "license": "0BSD"
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -1848,9 +1848,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1935,29 +1935,29 @@
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -1976,18 +1976,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -1997,6 +1997,19 @@
         "@babel/core": "^7.0.0"
       }
     },
+    "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
       "version": "6.3.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -2008,14 +2021,14 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -2025,6 +2038,19 @@
         "@babel/core": "^7.0.0"
       }
     },
+    "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
       "version": "6.3.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -2053,44 +2079,44 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2100,22 +2126,22 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2123,15 +2149,15 @@
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2140,16 +2166,29 @@
         "@babel/core": "^7.0.0"
       }
     },
+    "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2159,28 +2198,28 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2200,9 +2239,9 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2210,9 +2249,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2220,9 +2259,9 @@
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2230,42 +2269,42 @@
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -2275,13 +2314,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -2291,14 +2330,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
-      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz",
+      "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2308,13 +2347,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
-      "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz",
+      "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2324,13 +2363,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2340,15 +2379,15 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2358,14 +2397,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2456,13 +2495,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2641,13 +2680,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2694,13 +2733,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2710,13 +2749,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2726,14 +2765,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2743,15 +2782,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2761,17 +2799,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -2781,15 +2819,28 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2799,13 +2850,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2815,14 +2866,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2832,13 +2883,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2848,14 +2899,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
-      "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2865,14 +2916,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2882,14 +2932,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2899,14 +2949,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2916,14 +2965,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2933,15 +2982,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2951,14 +3000,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2968,13 +3016,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2984,14 +3032,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3001,13 +3048,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3017,14 +3064,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3034,15 +3081,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3052,16 +3099,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3071,14 +3118,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3088,14 +3135,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3105,13 +3152,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3121,14 +3168,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3138,14 +3184,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3155,16 +3200,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3174,14 +3218,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3191,14 +3235,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3208,15 +3251,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3226,13 +3268,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3242,14 +3284,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3259,16 +3301,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3277,14 +3318,27 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3294,13 +3348,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -3311,13 +3365,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3358,13 +3412,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3374,14 +3428,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3391,13 +3445,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3407,13 +3461,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3423,13 +3477,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3439,13 +3493,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3455,14 +3509,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3472,14 +3526,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3489,14 +3543,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3628,13 +3682,6 @@
         "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
       "version": "7.25.0",
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
@@ -3649,32 +3696,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -3683,30 +3730,43 @@
       }
     },
     "node_modules/@babel/traverse/node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/traverse/node_modules/jsesc": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -4132,9 +4192,9 @@
       }
     },
     "node_modules/@handsontable/angular": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/@handsontable/angular/-/angular-14.5.0.tgz",
-      "integrity": "sha512-uQn86NeOOLpSu4GjAiC9A5qzEr+HG8TtytfNMGLmN/T3lAofBl+ZGwu8qWGdO/N/azcUeP7elyD4HxPy2dVdvg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/@handsontable/angular/-/angular-14.6.0.tgz",
+      "integrity": "sha512-iMnr5qPSDiRiDpjlXFrCQgJIgxrwEgE2H+EqPdrpVNMIZGkyy2dSfFM9HySbXY1UVx58dheej1Uc/zuHWl5cgw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "optionalDependencies": {
         "tslib": "^2.3.0"
@@ -4233,9 +4293,9 @@
       }
     },
     "node_modules/@inquirer/core/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4273,9 +4333,9 @@
       }
     },
     "node_modules/@inquirer/figures": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz",
-      "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz",
+      "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4626,9 +4686,9 @@
       }
     },
     "node_modules/@jsonjoy.com/util": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz",
-      "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz",
+      "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -4834,9 +4894,9 @@
       ]
     },
     "node_modules/@ngtools/webpack": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.5.tgz",
-      "integrity": "sha512-L0n4eHObeqEOYRfSP+e4SeF/dmwxOIFy9xYvYCOUwOLrW4b3+a1+kkT30pqyfL72LFtpf0cmUwaWEFIcWl5PCg==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.8.tgz",
+      "integrity": "sha512-sq0kI8gEen4QlM6X8XqOYy7j4B8iLCYNo+iKxatV36ts4AXH0MuVkP56+oMaoH5oZNoSqd0RlfnotEHfvJAr8A==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -5099,9 +5159,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
-      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
+      "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
       "cpu": [
         "arm"
       ],
@@ -5113,9 +5173,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
-      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
+      "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
       "cpu": [
         "arm64"
       ],
@@ -5127,9 +5187,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
-      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
+      "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
       "cpu": [
         "arm64"
       ],
@@ -5141,9 +5201,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
-      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
+      "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
       "cpu": [
         "x64"
       ],
@@ -5155,9 +5215,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
-      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
+      "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
       "cpu": [
         "arm"
       ],
@@ -5169,9 +5229,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
-      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
+      "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
       "cpu": [
         "arm"
       ],
@@ -5183,9 +5243,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
-      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
+      "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
       "cpu": [
         "arm64"
       ],
@@ -5197,9 +5257,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
-      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
+      "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
       "cpu": [
         "arm64"
       ],
@@ -5211,9 +5271,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
-      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
+      "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
       "cpu": [
         "ppc64"
       ],
@@ -5225,9 +5285,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
-      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
+      "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
       "cpu": [
         "riscv64"
       ],
@@ -5239,9 +5299,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
-      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
+      "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
       "cpu": [
         "s390x"
       ],
@@ -5253,9 +5313,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
-      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
+      "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
       "cpu": [
         "x64"
       ],
@@ -5267,9 +5327,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
-      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
+      "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
       "cpu": [
         "x64"
       ],
@@ -5281,9 +5341,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
-      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
+      "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
       "cpu": [
         "arm64"
       ],
@@ -5295,9 +5355,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
-      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
+      "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
       "cpu": [
         "ia32"
       ],
@@ -5309,9 +5369,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
-      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
+      "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
       "cpu": [
         "x64"
       ],
@@ -5323,14 +5383,14 @@
       ]
     },
     "node_modules/@schematics/angular": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.5.tgz",
-      "integrity": "sha512-tBXhk9OGT4U6VsBNbuCNl2ITDOF3NYdGrEieIHU+lHSkpJNGZUIGxCgXCETXkmXDq1pe4wFZSKelWjeqYDfX0g==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.8.tgz",
+      "integrity": "sha512-62Sr7/j/dlhZorxH4GzQgpJy0s162BVts0Q7knZuEacP4VL+IWOUE1NS9OFkh/cbomoyXBdoewkZ5Zd1dVX78w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.5",
-        "@angular-devkit/schematics": "18.2.5",
+        "@angular-devkit/core": "18.2.8",
+        "@angular-devkit/schematics": "18.2.8",
         "jsonc-parser": "3.3.1"
       },
       "engines": {
@@ -5590,9 +5650,22 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6501,9 +6574,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "dev": true,
       "funding": [
         {
@@ -6521,8 +6594,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -6710,9 +6783,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "dev": true,
       "funding": [
         {
@@ -6763,28 +6836,19 @@
       }
     },
     "node_modules/chokidar": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
-      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
+      "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "anymatch": "~3.1.2",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.2",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.6.0"
+        "readdirp": "^4.0.1"
       },
       "engines": {
-        "node": ">= 8.10.0"
+        "node": ">= 14.16.0"
       },
       "funding": {
         "url": "https://paulmillr.com/funding/"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
       }
     },
     "node_modules/chownr": {
@@ -7148,9 +7212,9 @@
       "license": "MIT"
     },
     "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7202,19 +7266,6 @@
         "webpack": "^5.1.0"
       }
     },
-    "node_modules/copy-webpack-plugin/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,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
     "node_modules/core-js": {
       "version": "3.38.1",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz",
@@ -7711,9 +7762,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -7746,9 +7797,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "dev": true,
       "license": "ISC"
     },
@@ -8157,9 +8208,9 @@
       "license": "Apache-2.0"
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8168,7 +8219,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -8276,6 +8327,19 @@
         "node": ">=8.6.0"
       }
     },
+    "node_modules/fast-glob/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,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "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",
@@ -8284,9 +8348,9 @@
       "license": "MIT"
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+      "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
       "dev": true,
       "license": "MIT"
     },
@@ -8561,9 +8625,9 @@
       }
     },
     "node_modules/get-east-asian-width": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
-      "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+      "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -8632,16 +8696,16 @@
       }
     },
     "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==",
+      "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,
       "license": "ISC",
       "dependencies": {
-        "is-glob": "^4.0.1"
+        "is-glob": "^4.0.3"
       },
       "engines": {
-        "node": ">= 6"
+        "node": ">=10.13.0"
       }
     },
     "node_modules/glob-to-regexp": {
@@ -8710,9 +8774,9 @@
       "license": "MIT"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -10411,9 +10475,9 @@
       }
     },
     "node_modules/memfs": {
-      "version": "4.12.0",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.12.0.tgz",
-      "integrity": "sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==",
+      "version": "4.14.0",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz",
+      "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -11547,9 +11611,9 @@
       }
     },
     "node_modules/ordered-binary": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz",
-      "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==",
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.2.tgz",
+      "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==",
       "dev": true,
       "license": "MIT"
     },
@@ -11650,9 +11714,9 @@
       }
     },
     "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
       "dev": true,
       "license": "BlueOak-1.0.0"
     },
@@ -11738,13 +11802,13 @@
       }
     },
     "node_modules/parse5": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.0.tgz",
+      "integrity": "sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "entities": "^4.4.0"
+        "entities": "^4.5.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -12462,29 +12526,17 @@
       }
     },
     "node_modules/readdirp": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
-    "node_modules/readdirp/node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
+      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8.6"
+        "node": ">= 14.16.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
       }
     },
     "node_modules/reflect-metadata": {
@@ -12546,16 +12598,16 @@
       "optional": true
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -12563,26 +12615,37 @@
         "node": ">=4"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
     "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
     "node_modules/require-directory": {
@@ -12745,9 +12808,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
-      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
+      "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12761,22 +12824,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.20.0",
-        "@rollup/rollup-android-arm64": "4.20.0",
-        "@rollup/rollup-darwin-arm64": "4.20.0",
-        "@rollup/rollup-darwin-x64": "4.20.0",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
-        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
-        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
-        "@rollup/rollup-linux-arm64-musl": "4.20.0",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
-        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
-        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-musl": "4.20.0",
-        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
-        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
-        "@rollup/rollup-win32-x64-msvc": "4.20.0",
+        "@rollup/rollup-android-arm-eabi": "4.22.4",
+        "@rollup/rollup-android-arm64": "4.22.4",
+        "@rollup/rollup-darwin-arm64": "4.22.4",
+        "@rollup/rollup-darwin-x64": "4.22.4",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
+        "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
+        "@rollup/rollup-linux-arm64-gnu": "4.22.4",
+        "@rollup/rollup-linux-arm64-musl": "4.22.4",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
+        "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
+        "@rollup/rollup-linux-s390x-gnu": "4.22.4",
+        "@rollup/rollup-linux-x64-gnu": "4.22.4",
+        "@rollup/rollup-linux-x64-musl": "4.22.4",
+        "@rollup/rollup-win32-arm64-msvc": "4.22.4",
+        "@rollup/rollup-win32-ia32-msvc": "4.22.4",
+        "@rollup/rollup-win32-x64-msvc": "4.22.4",
         "fsevents": "~2.3.2"
       }
     },
@@ -12922,6 +12985,70 @@
         }
       }
     },
+    "node_modules/sass/node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/sass/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,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/sass/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/sass/node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
     "node_modules/sax": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
@@ -14252,9 +14379,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "dev": true,
       "funding": [
         {
@@ -14272,8 +14399,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -14545,6 +14672,31 @@
         "balanced-match": "^1.0.0"
       }
     },
+    "node_modules/webpack-dev-server/node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/glob": {
       "version": "10.4.5",
       "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -14566,10 +14718,23 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/webpack-dev-server/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,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-      "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+      "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14607,6 +14772,32 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/webpack-dev-server/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/webpack-dev-server/node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/rimraf": {
       "version": "5.0.10",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
diff --git a/examples/next/docs/js/package-lock.json b/examples/next/docs/js/package-lock.json
index 7ad4893efe..3b05574466 100644
--- a/examples/next/docs/js/package-lock.json
+++ b/examples/next/docs/js/package-lock.json
@@ -558,9 +558,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -882,9 +882,9 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/end-of-stream": {
@@ -1058,9 +1058,9 @@
       }
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
diff --git a/examples/next/docs/react/package-lock.json b/examples/next/docs/react/package-lock.json
index 370a9a0676..0a50dfc36d 100644
--- a/examples/next/docs/react/package-lock.json
+++ b/examples/next/docs/react/package-lock.json
@@ -338,12 +338,12 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -351,30 +351,30 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz",
+      "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==",
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helpers": "^7.25.7",
+        "@babel/parser": "^7.25.8",
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.8",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -399,9 +399,9 @@
       }
     },
     "node_modules/@babel/eslint-parser": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
-      "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz",
+      "integrity": "sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==",
       "license": "MIT",
       "dependencies": {
         "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -435,54 +435,54 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -500,17 +500,17 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -530,13 +530,13 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -572,41 +572,41 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -616,35 +616,35 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -654,14 +654,14 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -671,92 +671,92 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -766,12 +766,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -781,13 +781,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
-      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz",
+      "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -797,12 +797,12 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
-      "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz",
+      "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -812,12 +812,12 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -827,14 +827,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -844,13 +844,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -877,14 +877,14 @@
       }
     },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
-      "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz",
+      "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-decorators": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-decorators": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1026,12 +1026,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
-      "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz",
+      "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1040,37 +1040,13 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-dynamic-import": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-export-namespace-from": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.3"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-flow": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz",
-      "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.7.tgz",
+      "integrity": "sha512-fyoj6/YdVtlv2ROig/J0fP7hh/wNO1MJGm1NR70Pg7jbkF+jOUL9joorqaCOQh06Y+LfgTagHzC8KqZ3MF782w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1080,12 +1056,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1095,12 +1071,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
-      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz",
+      "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1134,12 +1110,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
-      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz",
+      "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1251,12 +1227,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz",
-      "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz",
+      "integrity": "sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1282,12 +1258,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1297,15 +1273,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
-      "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz",
+      "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-remap-async-to-generator": "^7.25.0",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.4"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1315,14 +1290,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
-      "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-remap-async-to-generator": "^7.24.7"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1332,12 +1307,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1347,12 +1322,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1362,13 +1337,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1378,14 +1353,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1395,16 +1369,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1415,13 +1389,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1431,12 +1405,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1446,13 +1420,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1462,12 +1436,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1477,13 +1451,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
-      "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1493,13 +1467,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1509,13 +1482,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1525,13 +1498,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1541,13 +1513,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-flow-strip-types": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz",
-      "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz",
+      "integrity": "sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/plugin-syntax-flow": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-flow": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1557,13 +1529,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1573,14 +1545,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1590,13 +1562,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1606,12 +1577,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1621,13 +1592,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1637,12 +1607,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1652,13 +1622,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1668,14 +1638,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1685,15 +1655,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1703,13 +1673,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1719,13 +1689,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1735,12 +1705,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1750,13 +1720,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1766,13 +1735,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1782,15 +1750,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1800,13 +1767,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1816,13 +1783,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1832,14 +1798,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1849,12 +1814,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1864,13 +1829,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1880,15 +1845,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1898,12 +1862,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1913,12 +1877,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-constant-elements": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz",
-      "integrity": "sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.7.tgz",
+      "integrity": "sha512-/qXt69Em8HgsjCLu7G3zdIQn7A2QwmYND7Wa0LTp09Na+Zn8L5d0A7wSXrKi18TJRc/Q5S1i1De/SU1LzVkSvA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1928,12 +1892,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-display-name": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz",
-      "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz",
+      "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1943,16 +1907,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz",
-      "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz",
+      "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/plugin-syntax-jsx": "^7.24.7",
-        "@babel/types": "^7.25.2"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-jsx": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1962,12 +1926,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx-development": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz",
-      "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz",
+      "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/plugin-transform-react-jsx": "^7.24.7"
+        "@babel/plugin-transform-react-jsx": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1977,13 +1941,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx-self": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz",
-      "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz",
+      "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1993,13 +1957,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx-source": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz",
-      "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz",
+      "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2009,13 +1973,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz",
-      "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz",
+      "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2025,12 +1989,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -2041,12 +2005,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2056,13 +2020,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz",
-      "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz",
+      "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
@@ -2085,12 +2049,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2100,13 +2064,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2116,12 +2080,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2131,12 +2095,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2146,12 +2110,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2161,16 +2125,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz",
-      "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz",
+      "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-typescript": "^7.24.7"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-syntax-typescript": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2180,12 +2144,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2195,13 +2159,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2211,13 +2175,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2227,13 +2191,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2243,93 +2207,78 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
-      "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/compat-data": "^7.25.4",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
-        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz",
+      "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.25.8",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7",
+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7",
         "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-class-properties": "^7.12.13",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-import-assertions": "^7.24.7",
-        "@babel/plugin-syntax-import-attributes": "^7.24.7",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-import-assertions": "^7.25.7",
+        "@babel/plugin-syntax-import-attributes": "^7.25.7",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.4",
-        "@babel/plugin-transform-async-to-generator": "^7.24.7",
-        "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
-        "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.25.4",
-        "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.4",
-        "@babel/plugin-transform-computed-properties": "^7.24.7",
-        "@babel/plugin-transform-destructuring": "^7.24.8",
-        "@babel/plugin-transform-dotall-regex": "^7.24.7",
-        "@babel/plugin-transform-duplicate-keys": "^7.24.7",
-        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
-        "@babel/plugin-transform-dynamic-import": "^7.24.7",
-        "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
-        "@babel/plugin-transform-export-namespace-from": "^7.24.7",
-        "@babel/plugin-transform-for-of": "^7.24.7",
-        "@babel/plugin-transform-function-name": "^7.25.1",
-        "@babel/plugin-transform-json-strings": "^7.24.7",
-        "@babel/plugin-transform-literals": "^7.25.2",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
-        "@babel/plugin-transform-member-expression-literals": "^7.24.7",
-        "@babel/plugin-transform-modules-amd": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.8",
-        "@babel/plugin-transform-modules-systemjs": "^7.25.0",
-        "@babel/plugin-transform-modules-umd": "^7.24.7",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
-        "@babel/plugin-transform-new-target": "^7.24.7",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
-        "@babel/plugin-transform-numeric-separator": "^7.24.7",
-        "@babel/plugin-transform-object-rest-spread": "^7.24.7",
-        "@babel/plugin-transform-object-super": "^7.24.7",
-        "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.8",
-        "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.25.4",
-        "@babel/plugin-transform-private-property-in-object": "^7.24.7",
-        "@babel/plugin-transform-property-literals": "^7.24.7",
-        "@babel/plugin-transform-regenerator": "^7.24.7",
-        "@babel/plugin-transform-reserved-words": "^7.24.7",
-        "@babel/plugin-transform-shorthand-properties": "^7.24.7",
-        "@babel/plugin-transform-spread": "^7.24.7",
-        "@babel/plugin-transform-sticky-regex": "^7.24.7",
-        "@babel/plugin-transform-template-literals": "^7.24.7",
-        "@babel/plugin-transform-typeof-symbol": "^7.24.8",
-        "@babel/plugin-transform-unicode-escapes": "^7.24.7",
-        "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
+        "@babel/plugin-transform-arrow-functions": "^7.25.7",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.8",
+        "@babel/plugin-transform-async-to-generator": "^7.25.7",
+        "@babel/plugin-transform-block-scoped-functions": "^7.25.7",
+        "@babel/plugin-transform-block-scoping": "^7.25.7",
+        "@babel/plugin-transform-class-properties": "^7.25.7",
+        "@babel/plugin-transform-class-static-block": "^7.25.8",
+        "@babel/plugin-transform-classes": "^7.25.7",
+        "@babel/plugin-transform-computed-properties": "^7.25.7",
+        "@babel/plugin-transform-destructuring": "^7.25.7",
+        "@babel/plugin-transform-dotall-regex": "^7.25.7",
+        "@babel/plugin-transform-duplicate-keys": "^7.25.7",
+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-dynamic-import": "^7.25.8",
+        "@babel/plugin-transform-exponentiation-operator": "^7.25.7",
+        "@babel/plugin-transform-export-namespace-from": "^7.25.8",
+        "@babel/plugin-transform-for-of": "^7.25.7",
+        "@babel/plugin-transform-function-name": "^7.25.7",
+        "@babel/plugin-transform-json-strings": "^7.25.8",
+        "@babel/plugin-transform-literals": "^7.25.7",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.25.8",
+        "@babel/plugin-transform-member-expression-literals": "^7.25.7",
+        "@babel/plugin-transform-modules-amd": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-modules-systemjs": "^7.25.7",
+        "@babel/plugin-transform-modules-umd": "^7.25.7",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-new-target": "^7.25.7",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8",
+        "@babel/plugin-transform-numeric-separator": "^7.25.8",
+        "@babel/plugin-transform-object-rest-spread": "^7.25.8",
+        "@babel/plugin-transform-object-super": "^7.25.7",
+        "@babel/plugin-transform-optional-catch-binding": "^7.25.8",
+        "@babel/plugin-transform-optional-chaining": "^7.25.8",
+        "@babel/plugin-transform-parameters": "^7.25.7",
+        "@babel/plugin-transform-private-methods": "^7.25.7",
+        "@babel/plugin-transform-private-property-in-object": "^7.25.8",
+        "@babel/plugin-transform-property-literals": "^7.25.7",
+        "@babel/plugin-transform-regenerator": "^7.25.7",
+        "@babel/plugin-transform-reserved-words": "^7.25.7",
+        "@babel/plugin-transform-shorthand-properties": "^7.25.7",
+        "@babel/plugin-transform-spread": "^7.25.7",
+        "@babel/plugin-transform-sticky-regex": "^7.25.7",
+        "@babel/plugin-transform-template-literals": "^7.25.7",
+        "@babel/plugin-transform-typeof-symbol": "^7.25.7",
+        "@babel/plugin-transform-unicode-escapes": "^7.25.7",
+        "@babel/plugin-transform-unicode-property-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.7",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "core-js-compat": "^3.37.1",
+        "core-js-compat": "^3.38.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -2363,17 +2312,17 @@
       }
     },
     "node_modules/@babel/preset-react": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz",
-      "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz",
+      "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-validator-option": "^7.24.7",
-        "@babel/plugin-transform-react-display-name": "^7.24.7",
-        "@babel/plugin-transform-react-jsx": "^7.24.7",
-        "@babel/plugin-transform-react-jsx-development": "^7.24.7",
-        "@babel/plugin-transform-react-pure-annotations": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-transform-react-display-name": "^7.25.7",
+        "@babel/plugin-transform-react-jsx": "^7.25.7",
+        "@babel/plugin-transform-react-jsx-development": "^7.25.7",
+        "@babel/plugin-transform-react-pure-annotations": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2383,16 +2332,16 @@
       }
     },
     "node_modules/@babel/preset-typescript": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz",
-      "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz",
+      "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-validator-option": "^7.24.7",
-        "@babel/plugin-syntax-jsx": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.7",
-        "@babel/plugin-transform-typescript": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-syntax-jsx": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-typescript": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2401,16 +2350,10 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
-      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz",
+      "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==",
       "license": "MIT",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -2420,30 +2363,30 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2452,13 +2395,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -3261,9 +3204,9 @@
       "license": "(0BSD OR MIT)"
     },
     "node_modules/@handsontable/react": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/@handsontable/react/-/react-14.5.0.tgz",
-      "integrity": "sha512-Z6weZTELY1hqgW8TDno000xScd+I1sQ0DcswX2AdnCCwvvQkmC74xmIREalwtFE9CCi0Y/kiSvq/G0bYgl//pQ==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/@handsontable/react/-/react-14.6.0.tgz",
+      "integrity": "sha512-Er30Z+H/vq/4FY1avTJnZMqdbRFV5Tv4H1hkJYTPGGHLXBbMykEFHA1xt4X4ejX2K30paouDZ+JeiCGGo6Q9LQ==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "peerDependencies": {
         "handsontable": ">=14.0.0"
@@ -4678,9 +4621,21 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "license": "MIT",
       "dependencies": {
         "@types/node": "*",
@@ -4762,9 +4717,9 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -4826,9 +4781,9 @@
       "license": "MIT"
     },
     "node_modules/@types/react": {
-      "version": "18.3.8",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz",
-      "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==",
+      "version": "18.3.11",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz",
+      "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4837,9 +4792,9 @@
       }
     },
     "node_modules/@types/react-dom": {
-      "version": "18.3.0",
-      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
-      "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
+      "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5350,15 +5305,15 @@
       "license": "ISC"
     },
     "node_modules/@vitejs/plugin-react": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz",
-      "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz",
+      "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/core": "^7.24.5",
-        "@babel/plugin-transform-react-jsx-self": "^7.24.5",
-        "@babel/plugin-transform-react-jsx-source": "^7.24.1",
+        "@babel/core": "^7.25.2",
+        "@babel/plugin-transform-react-jsx-self": "^7.24.7",
+        "@babel/plugin-transform-react-jsx-source": "^7.24.7",
         "@types/babel__core": "^7.20.5",
         "react-refresh": "^0.14.2"
       },
@@ -6617,9 +6572,9 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "funding": [
         {
           "type": "opencollective",
@@ -6636,8 +6591,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -6791,9 +6746,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "funding": [
         {
           "type": "opencollective",
@@ -7184,9 +7139,9 @@
       "license": "MIT"
     },
     "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.6"
@@ -8122,9 +8077,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -8200,9 +8155,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "license": "ISC"
     },
     "node_modules/emittery": {
@@ -8399,9 +8354,9 @@
       }
     },
     "node_modules/es-iterator-helpers": {
-      "version": "1.0.19",
-      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
-      "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz",
+      "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==",
       "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.7",
@@ -8411,12 +8366,12 @@
         "es-set-tostringtag": "^2.0.3",
         "function-bind": "^1.1.2",
         "get-intrinsic": "^1.2.4",
-        "globalthis": "^1.0.3",
+        "globalthis": "^1.0.4",
         "has-property-descriptors": "^1.0.2",
         "has-proto": "^1.0.3",
         "has-symbols": "^1.0.3",
         "internal-slot": "^1.0.7",
-        "iterator.prototype": "^1.1.2",
+        "iterator.prototype": "^1.1.3",
         "safe-array-concat": "^1.1.2"
       },
       "engines": {
@@ -8578,6 +8533,7 @@
       "version": "8.57.1",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
       "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
@@ -8924,9 +8880,9 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.11.1",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.1.tgz",
-      "integrity": "sha512-EwcbfLOhwVMAfatfqLecR2yv3dE5+kQ8kx+Rrt0DvDXEVwW86KQ/xbMDQhtp5l42VXukD5SOF8mQQHbaNtO0CQ==",
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
       "license": "MIT",
       "dependencies": {
         "debug": "^3.2.7"
@@ -8968,9 +8924,9 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.30.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
-      "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
+      "version": "2.31.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
       "license": "MIT",
       "dependencies": {
         "@rtsao/scc": "^1.1.0",
@@ -8981,7 +8937,7 @@
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.9.0",
+        "eslint-module-utils": "^2.12.0",
         "hasown": "^2.0.2",
         "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
@@ -8990,13 +8946,14 @@
         "object.groupby": "^1.0.3",
         "object.values": "^1.2.0",
         "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.8",
         "tsconfig-paths": "^3.15.0"
       },
       "engines": {
         "node": ">=4"
       },
       "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
       }
     },
     "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
@@ -9104,9 +9061,9 @@
       }
     },
     "node_modules/eslint-plugin-react": {
-      "version": "7.36.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz",
-      "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==",
+      "version": "7.37.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz",
+      "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==",
       "license": "MIT",
       "dependencies": {
         "array-includes": "^3.1.8",
@@ -9816,9 +9773,9 @@
       }
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "license": "MIT",
       "dependencies": {
         "accepts": "~1.3.8",
@@ -9826,7 +9783,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -9956,9 +9913,9 @@
       "license": "MIT"
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+      "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
       "license": "MIT"
     },
     "node_modules/fastq": {
@@ -10435,9 +10392,9 @@
       }
     },
     "node_modules/form-data": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
-      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz",
+      "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==",
       "license": "MIT",
       "dependencies": {
         "asynckit": "^0.4.0",
@@ -10833,9 +10790,9 @@
       "license": "MIT"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -11166,9 +11123,9 @@
       }
     },
     "node_modules/http-proxy-middleware": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-      "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+      "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
       "license": "MIT",
       "dependencies": {
         "@types/http-proxy": "^1.17.8",
@@ -12045,9 +12002,9 @@
       }
     },
     "node_modules/iterator.prototype": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
-      "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz",
+      "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==",
       "license": "MIT",
       "dependencies": {
         "define-properties": "^1.2.1",
@@ -12055,6 +12012,9 @@
         "has-symbols": "^1.0.3",
         "reflect.getprototypeof": "^1.0.4",
         "set-function-name": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/jackspeak": {
@@ -14382,15 +14342,15 @@
       }
     },
     "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/json-buffer": {
@@ -15183,9 +15143,9 @@
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.12",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
-      "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==",
+      "version": "2.2.13",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
+      "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==",
       "license": "MIT"
     },
     "node_modules/object-assign": {
@@ -15521,9 +15481,9 @@
       }
     },
     "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
       "license": "BlueOak-1.0.0"
     },
     "node_modules/param-case": {
@@ -16336,9 +16296,9 @@
       }
     },
     "node_modules/postcss-load-config/node_modules/yaml": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
-      "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
+      "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
       "license": "ISC",
       "bin": {
         "yaml": "bin.mjs"
@@ -17853,15 +17813,15 @@
       "optional": true
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
-      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+      "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.6",
+        "call-bind": "^1.0.7",
         "define-properties": "^1.2.1",
         "es-errors": "^1.3.0",
-        "set-function-name": "^2.0.1"
+        "set-function-name": "^2.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -17871,15 +17831,15 @@
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -17887,26 +17847,24 @@
         "node": ">=4"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
-    },
     "node_modules/relateurl": {
       "version": "0.2.7",
       "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -18998,13 +18956,17 @@
       "license": "MIT"
     },
     "node_modules/string.prototype.includes": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz",
-      "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+      "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
       "license": "MIT",
       "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/string.prototype.matchall": {
@@ -19426,9 +19388,9 @@
       "license": "MIT"
     },
     "node_modules/tailwindcss": {
-      "version": "3.4.13",
-      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz",
-      "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==",
+      "version": "3.4.14",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
+      "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
       "license": "MIT",
       "dependencies": {
         "@alloc/quick-lru": "^5.2.0",
@@ -19557,9 +19519,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.33.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz",
-      "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==",
+      "version": "5.34.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz",
+      "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==",
       "license": "BSD-2-Clause",
       "dependencies": {
         "@jridgewell/source-map": "^0.3.3",
@@ -20007,9 +19969,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "license": "Apache-2.0",
       "bin": {
         "tsc": "bin/tsc",
@@ -20144,9 +20106,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "funding": [
         {
           "type": "opencollective",
@@ -20163,8 +20125,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -20395,9 +20357,9 @@
       }
     },
     "node_modules/webpack": {
-      "version": "5.94.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
-      "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+      "version": "5.95.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz",
+      "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==",
       "license": "MIT",
       "dependencies": {
         "@types/estree": "^1.0.5",
@@ -21027,9 +20989,9 @@
       "license": "MIT"
     },
     "node_modules/workbox-build/node_modules/rollup": {
-      "version": "2.79.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
-      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+      "version": "2.79.2",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
+      "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
       "license": "MIT",
       "bin": {
         "rollup": "dist/bin/rollup"
diff --git a/examples/next/docs/ts/package-lock.json b/examples/next/docs/ts/package-lock.json
index d92c2158d1..328c9c6bf7 100644
--- a/examples/next/docs/ts/package-lock.json
+++ b/examples/next/docs/ts/package-lock.json
@@ -420,9 +420,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/esbuild": {
@@ -477,9 +477,9 @@
       }
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
diff --git a/examples/next/docs/vue/package-lock.json b/examples/next/docs/vue/package-lock.json
index ba0675d708..e45cb9810d 100644
--- a/examples/next/docs/vue/package-lock.json
+++ b/examples/next/docs/vue/package-lock.json
@@ -368,13 +368,13 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -382,9 +382,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -392,22 +392,22 @@
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz",
+      "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helpers": "^7.25.7",
+        "@babel/parser": "^7.25.8",
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.8",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -423,58 +423,58 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -483,18 +483,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -505,14 +505,14 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -540,44 +540,44 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -587,22 +587,22 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -610,15 +610,15 @@
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -628,15 +628,15 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -646,55 +646,55 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -702,42 +702,42 @@
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -747,12 +747,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -762,14 +762,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
-      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz",
+      "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -779,13 +779,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
-      "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz",
+      "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -795,13 +795,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -811,15 +811,15 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -829,14 +829,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -864,15 +864,15 @@
       }
     },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
-      "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz",
+      "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-decorators": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-decorators": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -894,56 +894,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-async-generators": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-class-properties": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.12.13"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-class-static-block": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
-      "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
-      "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz",
+      "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -965,27 +923,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-export-namespace-from": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.3"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -995,13 +940,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
-      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz",
+      "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1010,150 +955,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-import-meta": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
-      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz",
+      "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-optional-chaining": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-private-property-in-object": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
-      "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-top-level-await": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1180,13 +989,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1196,16 +1005,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
-      "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz",
+      "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-remap-async-to-generator": "^7.25.0",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.4"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1215,15 +1023,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
-      "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-remap-async-to-generator": "^7.24.7"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1233,13 +1041,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1249,13 +1057,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1265,14 +1073,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1282,15 +1090,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1300,17 +1107,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1321,14 +1128,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1338,13 +1145,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1354,14 +1161,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1371,13 +1178,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1387,14 +1194,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
-      "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1404,14 +1211,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1421,14 +1227,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1438,14 +1244,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1455,14 +1260,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1472,15 +1277,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1490,14 +1295,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1507,13 +1311,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1523,14 +1327,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1540,13 +1343,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1556,14 +1359,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1573,15 +1376,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1591,16 +1394,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1610,14 +1413,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1627,14 +1430,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1644,13 +1447,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1660,14 +1463,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1677,14 +1479,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1694,16 +1495,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1713,14 +1513,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1730,14 +1530,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1747,15 +1546,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1765,13 +1563,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1781,14 +1579,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1798,16 +1596,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1817,13 +1614,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1833,13 +1630,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -1850,13 +1647,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1866,14 +1663,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz",
-      "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz",
+      "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
@@ -1887,13 +1684,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1903,14 +1700,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1920,13 +1717,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1936,13 +1733,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1952,13 +1749,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1968,13 +1765,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1984,14 +1781,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2001,14 +1798,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2018,14 +1815,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2035,94 +1832,79 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
-      "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz",
+      "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.4",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
-        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
+        "@babel/compat-data": "^7.25.8",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7",
+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7",
         "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-class-properties": "^7.12.13",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-import-assertions": "^7.24.7",
-        "@babel/plugin-syntax-import-attributes": "^7.24.7",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-import-assertions": "^7.25.7",
+        "@babel/plugin-syntax-import-attributes": "^7.25.7",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.4",
-        "@babel/plugin-transform-async-to-generator": "^7.24.7",
-        "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
-        "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.25.4",
-        "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.4",
-        "@babel/plugin-transform-computed-properties": "^7.24.7",
-        "@babel/plugin-transform-destructuring": "^7.24.8",
-        "@babel/plugin-transform-dotall-regex": "^7.24.7",
-        "@babel/plugin-transform-duplicate-keys": "^7.24.7",
-        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
-        "@babel/plugin-transform-dynamic-import": "^7.24.7",
-        "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
-        "@babel/plugin-transform-export-namespace-from": "^7.24.7",
-        "@babel/plugin-transform-for-of": "^7.24.7",
-        "@babel/plugin-transform-function-name": "^7.25.1",
-        "@babel/plugin-transform-json-strings": "^7.24.7",
-        "@babel/plugin-transform-literals": "^7.25.2",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
-        "@babel/plugin-transform-member-expression-literals": "^7.24.7",
-        "@babel/plugin-transform-modules-amd": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.8",
-        "@babel/plugin-transform-modules-systemjs": "^7.25.0",
-        "@babel/plugin-transform-modules-umd": "^7.24.7",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
-        "@babel/plugin-transform-new-target": "^7.24.7",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
-        "@babel/plugin-transform-numeric-separator": "^7.24.7",
-        "@babel/plugin-transform-object-rest-spread": "^7.24.7",
-        "@babel/plugin-transform-object-super": "^7.24.7",
-        "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.8",
-        "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.25.4",
-        "@babel/plugin-transform-private-property-in-object": "^7.24.7",
-        "@babel/plugin-transform-property-literals": "^7.24.7",
-        "@babel/plugin-transform-regenerator": "^7.24.7",
-        "@babel/plugin-transform-reserved-words": "^7.24.7",
-        "@babel/plugin-transform-shorthand-properties": "^7.24.7",
-        "@babel/plugin-transform-spread": "^7.24.7",
-        "@babel/plugin-transform-sticky-regex": "^7.24.7",
-        "@babel/plugin-transform-template-literals": "^7.24.7",
-        "@babel/plugin-transform-typeof-symbol": "^7.24.8",
-        "@babel/plugin-transform-unicode-escapes": "^7.24.7",
-        "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
+        "@babel/plugin-transform-arrow-functions": "^7.25.7",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.8",
+        "@babel/plugin-transform-async-to-generator": "^7.25.7",
+        "@babel/plugin-transform-block-scoped-functions": "^7.25.7",
+        "@babel/plugin-transform-block-scoping": "^7.25.7",
+        "@babel/plugin-transform-class-properties": "^7.25.7",
+        "@babel/plugin-transform-class-static-block": "^7.25.8",
+        "@babel/plugin-transform-classes": "^7.25.7",
+        "@babel/plugin-transform-computed-properties": "^7.25.7",
+        "@babel/plugin-transform-destructuring": "^7.25.7",
+        "@babel/plugin-transform-dotall-regex": "^7.25.7",
+        "@babel/plugin-transform-duplicate-keys": "^7.25.7",
+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-dynamic-import": "^7.25.8",
+        "@babel/plugin-transform-exponentiation-operator": "^7.25.7",
+        "@babel/plugin-transform-export-namespace-from": "^7.25.8",
+        "@babel/plugin-transform-for-of": "^7.25.7",
+        "@babel/plugin-transform-function-name": "^7.25.7",
+        "@babel/plugin-transform-json-strings": "^7.25.8",
+        "@babel/plugin-transform-literals": "^7.25.7",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.25.8",
+        "@babel/plugin-transform-member-expression-literals": "^7.25.7",
+        "@babel/plugin-transform-modules-amd": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-modules-systemjs": "^7.25.7",
+        "@babel/plugin-transform-modules-umd": "^7.25.7",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-new-target": "^7.25.7",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8",
+        "@babel/plugin-transform-numeric-separator": "^7.25.8",
+        "@babel/plugin-transform-object-rest-spread": "^7.25.8",
+        "@babel/plugin-transform-object-super": "^7.25.7",
+        "@babel/plugin-transform-optional-catch-binding": "^7.25.8",
+        "@babel/plugin-transform-optional-chaining": "^7.25.8",
+        "@babel/plugin-transform-parameters": "^7.25.7",
+        "@babel/plugin-transform-private-methods": "^7.25.7",
+        "@babel/plugin-transform-private-property-in-object": "^7.25.8",
+        "@babel/plugin-transform-property-literals": "^7.25.7",
+        "@babel/plugin-transform-regenerator": "^7.25.7",
+        "@babel/plugin-transform-reserved-words": "^7.25.7",
+        "@babel/plugin-transform-shorthand-properties": "^7.25.7",
+        "@babel/plugin-transform-spread": "^7.25.7",
+        "@babel/plugin-transform-sticky-regex": "^7.25.7",
+        "@babel/plugin-transform-template-literals": "^7.25.7",
+        "@babel/plugin-transform-typeof-symbol": "^7.25.7",
+        "@babel/plugin-transform-unicode-escapes": "^7.25.7",
+        "@babel/plugin-transform-unicode-property-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.7",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "core-js-compat": "^3.37.1",
+        "core-js-compat": "^3.38.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -2147,17 +1929,10 @@
         "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
-      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz",
+      "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2168,32 +1943,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2202,13 +1977,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -2292,9 +2067,9 @@
       "license": "(0BSD OR MIT)"
     },
     "node_modules/@handsontable/vue": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/@handsontable/vue/-/vue-14.5.0.tgz",
-      "integrity": "sha512-ifq/LKV1QsE4q4jwXZzJLhJ+0a2Zy+TEhX+imbn7Dn3k/oeoWG7l58fQA4J0J9HVYmdfvHcgO8TMQJCrX0g2DQ==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/@handsontable/vue/-/vue-14.6.0.tgz",
+      "integrity": "sha512-YW3oGQRZ2Ty5ge0gd8epyrXt6Wz3RYb4l+WiNz5McTJRIIVxi5rr+qm/8Dp8BbfGXzoP0ANgSq18ybjlItjdzA==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "peerDependencies": {
         "handsontable": ">=14.0.0",
@@ -2678,9 +2453,22 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2736,9 +2524,9 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3615,42 +3403,42 @@
       "license": "ISC"
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.8.tgz",
-      "integrity": "sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz",
+      "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.8",
+        "@vue/shared": "3.5.12",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.8.tgz",
-      "integrity": "sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz",
+      "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-core": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.8.tgz",
-      "integrity": "sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz",
+      "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.8",
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/compiler-ssr": "3.5.8",
-        "@vue/shared": "3.5.8",
+        "@vue/compiler-core": "3.5.12",
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/compiler-ssr": "3.5.12",
+        "@vue/shared": "3.5.12",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.47",
@@ -3658,14 +3446,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.8.tgz",
-      "integrity": "sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz",
+      "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/component-compiler-utils": {
@@ -3739,9 +3527,9 @@
       "license": "ISC"
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.8.tgz",
-      "integrity": "sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz",
+      "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==",
       "dev": true,
       "license": "MIT"
     },
@@ -4609,9 +4397,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "dev": true,
       "funding": [
         {
@@ -4629,8 +4417,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -4758,9 +4546,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "dev": true,
       "funding": [
         {
@@ -5230,9 +5018,9 @@
       "license": "MIT"
     },
     "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -6022,9 +5810,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -6095,9 +5883,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "dev": true,
       "license": "ISC"
     },
@@ -6283,6 +6071,7 @@
       "version": "7.32.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
       "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6993,9 +6782,9 @@
       }
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7004,7 +6793,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -7141,9 +6930,9 @@
       "license": "MIT"
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+      "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
       "dev": true,
       "license": "MIT"
     },
@@ -7613,9 +7402,9 @@
       "license": "MIT"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -7952,9 +7741,9 @@
       }
     },
     "node_modules/http-proxy-middleware": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-      "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+      "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8585,16 +8374,16 @@
       }
     },
     "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
       "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/json-buffer": {
@@ -9094,9 +8883,9 @@
       }
     },
     "node_modules/magic-string": {
-      "version": "0.30.11",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
-      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+      "version": "0.30.12",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+      "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11241,16 +11030,16 @@
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -11258,28 +11047,26 @@
         "node": ">=4"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
-    },
     "node_modules/relateurl": {
       "version": "0.2.7",
       "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -12307,9 +12094,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.33.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz",
-      "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==",
+      "version": "5.34.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz",
+      "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -12833,9 +12620,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "dev": true,
       "funding": [
         {
@@ -12853,8 +12640,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -13211,9 +12998,9 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/webpack": {
-      "version": "5.94.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
-      "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+      "version": "5.95.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz",
+      "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/examples/next/visual-tests/angular/basic-example/angular.json b/examples/next/visual-tests/angular/basic-example/angular.json
index 05344e9083..0fad5b148a 100644
--- a/examples/next/visual-tests/angular/basic-example/angular.json
+++ b/examples/next/visual-tests/angular/basic-example/angular.json
@@ -87,5 +87,8 @@
       }
     }
   },
-  "defaultProject": "angular"
+  "defaultProject": "angular",
+  "cli": {
+    "analytics": false
+  }
 }
diff --git a/examples/next/visual-tests/angular/package-lock.json b/examples/next/visual-tests/angular/package-lock.json
index 37bb3818b9..fa78ebd474 100644
--- a/examples/next/visual-tests/angular/package-lock.json
+++ b/examples/next/visual-tests/angular/package-lock.json
@@ -98,13 +98,13 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1802.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.5.tgz",
-      "integrity": "sha512-c7sVoW85Yqj7IYvNKxtNSGS5I7gWpORorg/xxLZX3OkHWXDrwYbb5LN/2p5/Aytxyb0aXl4o5fFOu6CUwcaLUw==",
+      "version": "0.1802.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.8.tgz",
+      "integrity": "sha512-/rtFQEKgS7LlB9oHr4NCBSdKnvP5kr8L5Hbd3Vl8hZOYK9QWjxKPEXnryA2d5+PCE98bBzZswCNXqELZCPTgIQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.5",
+        "@angular-devkit/core": "18.2.8",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -124,17 +124,17 @@
       }
     },
     "node_modules/@angular-devkit/build-angular": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.5.tgz",
-      "integrity": "sha512-dIvb0AHoRIMM6tLuG4t6lDDslSAYP77wqytodsN317UzFOuuCPernXbO8NJs+QHxj09nPsem1T5vnvpO2E/PVQ==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.8.tgz",
+      "integrity": "sha512-qK/iLk7A8vQp1CyiJV4DpwfLjPKoiOlTtFqoO5vD8Tyxmc+R06FQp6GJTsZ7JtrTLYSiH+QAWiY6NgF/Rj/hHg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.5",
-        "@angular-devkit/build-webpack": "0.1802.5",
-        "@angular-devkit/core": "18.2.5",
-        "@angular/build": "18.2.5",
+        "@angular-devkit/architect": "0.1802.8",
+        "@angular-devkit/build-webpack": "0.1802.8",
+        "@angular-devkit/core": "18.2.8",
+        "@angular/build": "18.2.8",
         "@babel/core": "7.25.2",
         "@babel/generator": "7.25.0",
         "@babel/helper-annotate-as-pure": "7.24.7",
@@ -145,7 +145,7 @@
         "@babel/preset-env": "7.25.3",
         "@babel/runtime": "7.25.0",
         "@discoveryjs/json-ext": "0.6.1",
-        "@ngtools/webpack": "18.2.5",
+        "@ngtools/webpack": "18.2.8",
         "@vitejs/plugin-basic-ssl": "1.1.0",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.20",
@@ -644,9 +644,9 @@
       }
     },
     "node_modules/@angular-devkit/build-angular/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -814,13 +814,13 @@
       }
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1802.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.5.tgz",
-      "integrity": "sha512-6qkcrWBdkxojCVHGWcdJaz4G+7QTjFvmc+3g8xvLc9sYvJq1I059gfXhDnC0FxiA0MT4cY/26ECYWUHTD5CJLQ==",
+      "version": "0.1802.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.8.tgz",
+      "integrity": "sha512-uPpopkXkO66SSdjtVr7xCyQCPs/x6KUC76xkDc4j0b8EEHifTbi/fNpbkcZ6wBmoAfjKLWXfKvtkh0TqKK5Hkw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1802.5",
+        "@angular-devkit/architect": "0.1802.8",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -844,9 +844,9 @@
       }
     },
     "node_modules/@angular-devkit/core": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.5.tgz",
-      "integrity": "sha512-r9TumPlJ8PvA2+yz4sp+bUHgtznaVKzhvXTN5qL1k4YP8LJ7iZWMR2FOP+HjukHZOTsenzmV9pszbogabqwoZQ==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.8.tgz",
+      "integrity": "sha512-4o2T6wsmXGE/v53+F8L7kGoN2+qzt03C9rtjLVQpOljzpJVttQ8bhvfWxyYLWwcl04RWqRa+82fpIZtBkOlZJw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -882,13 +882,13 @@
       }
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.5.tgz",
-      "integrity": "sha512-NUmz2UQ1Xl4cf4j1AgkwIfsCjBzAPgfeC3IBrD29hSOBE1Y3j6auqjBkvw50v6mbSPxESND995Xy13HpK1Xflw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.8.tgz",
+      "integrity": "sha512-i/h2Oji5FhJMC7wDSnIl5XUe/qym+C1ZwScaATJwDyRLCUIynZkj5rLgdG/uK6l+H0PgvxigkF+akWpokkwW6w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.5",
+        "@angular-devkit/core": "18.2.8",
         "jsonc-parser": "3.3.1",
         "magic-string": "0.30.11",
         "ora": "5.4.1",
@@ -911,9 +911,9 @@
       }
     },
     "node_modules/@angular/animations": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.5.tgz",
-      "integrity": "sha512-IlXtW/Nj48ZzjHUzH1TykZcSR64ScJx39T3IHnjV2z/bVATzZ36JGoadQHdqpJNKBodYJNgtJCGLCbgAvGWY2g==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.8.tgz",
+      "integrity": "sha512-dMSn2hg70siv3lhP+vqhMbgc923xw6XBUvnpCPEzhZqFHvPXfh/LubmsD5RtqHmjWebXtgVcgS+zg3Gq3jB2lg==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -922,7 +922,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.5"
+        "@angular/core": "18.2.8"
       }
     },
     "node_modules/@angular/animations/node_modules/tslib": {
@@ -932,14 +932,14 @@
       "license": "0BSD"
     },
     "node_modules/@angular/build": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.5.tgz",
-      "integrity": "sha512-XWkmjzgeUga0SJ0lYSYcTuYOWTyqcln2mNfBp7Ae/GZ+/7+APbedsIZEiZGZwveOIyOpTM5wguNSoe9khDl5Ig==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.8.tgz",
+      "integrity": "sha512-ufuA4vHJSrL9SQW7bKV61DOoN1mm0t0ILTHaxSoCG3YF70cZJOX7+HNp3cK2uoldRMwbTOKSvCWBw54KKDRd5Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1802.5",
+        "@angular-devkit/architect": "0.1802.8",
         "@babel/core": "7.25.2",
         "@babel/helper-annotate-as-pure": "7.24.7",
         "@babel/helper-split-export-declaration": "7.24.7",
@@ -958,7 +958,7 @@
         "parse5-html-rewriting-stream": "7.0.0",
         "picomatch": "4.0.2",
         "piscina": "4.6.1",
-        "rollup": "4.20.0",
+        "rollup": "4.22.4",
         "sass": "1.77.6",
         "semver": "7.6.3",
         "vite": "5.4.6",
@@ -1392,9 +1392,9 @@
       }
     },
     "node_modules/@angular/build/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -1545,18 +1545,18 @@
       }
     },
     "node_modules/@angular/cli": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.5.tgz",
-      "integrity": "sha512-97uNs0HsOdnMaTlNJKFjIBUXw0wz43uYvSSKmIpBt7eq1LaPLju1G/qpDIHx2YwhMClPrXXrW2H/xdvqZiIw+w==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.8.tgz",
+      "integrity": "sha512-GKXG7F7z5rxwZ8/bnW/Bp8/zsfE/BpHmIP/icLfUIOwv2kaY5OD2tfQssWXPEuqZzYq2AYz+wjVSbWjxGoja8A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1802.5",
-        "@angular-devkit/core": "18.2.5",
-        "@angular-devkit/schematics": "18.2.5",
+        "@angular-devkit/architect": "0.1802.8",
+        "@angular-devkit/core": "18.2.8",
+        "@angular-devkit/schematics": "18.2.8",
         "@inquirer/prompts": "5.3.8",
         "@listr2/prompt-adapter-inquirer": "2.0.15",
-        "@schematics/angular": "18.2.5",
+        "@schematics/angular": "18.2.8",
         "@yarnpkg/lockfile": "1.1.0",
         "ini": "4.1.3",
         "jsonc-parser": "3.3.1",
@@ -1579,9 +1579,9 @@
       }
     },
     "node_modules/@angular/common": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.5.tgz",
-      "integrity": "sha512-m+KJrtbFXTE36jP/po6UAMeUR/enQxRHpVGLCRcIcE7VWVH1ZcOvoW1yqh2A6k+KxWXeajlq/Z04nnMhcoxMRw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.8.tgz",
+      "integrity": "sha512-TYsKtE5nVaIScWSLGSO34Skc+s3hB/BujSddnfQHoNFvPT/WR0dfmdlpVCTeLj+f50htFoMhW11tW99PbK+whQ==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1590,7 +1590,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.5",
+        "@angular/core": "18.2.8",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1601,9 +1601,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/compiler": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.5.tgz",
-      "integrity": "sha512-vcqe9x4dGGAnMfPhEpcZyiSVgAiqJeK80LqP1vWoAmBR+HeOqAilSv6SflcLAtuTzwgzMMAvD2T+SMCgUvaqww==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.8.tgz",
+      "integrity": "sha512-JRedHNfK1CCPVyeGQB5w3WBYqMA6X8Q240CkvjlGfn0pVXihf9DWk3nkSQJVgYxpvpHfxdgjaYZ5IpMzlkmkhw==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1612,7 +1612,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/core": "18.2.5"
+        "@angular/core": "18.2.8"
       },
       "peerDependenciesMeta": {
         "@angular/core": {
@@ -1621,15 +1621,15 @@
       }
     },
     "node_modules/@angular/compiler-cli": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.5.tgz",
-      "integrity": "sha512-CCCtZobUTUfId/RTYtuDCw5R1oK0w65hdAUMRP1MdGmd8bb8DKJA86u1QCWwozL3rbXlIIX4ognQ6urQ43k/Gw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.8.tgz",
+      "integrity": "sha512-OksDE4LWQUCcIvMjtZF7eiDCdIMrcMMpC1+Q0PIYi7KmnqXFGs4/Y0NdJvtn/LrQznzz5WaKM3ZDVNZTRX4wmw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/core": "7.25.2",
         "@jridgewell/sourcemap-codec": "^1.4.14",
-        "chokidar": "^3.0.0",
+        "chokidar": "^4.0.0",
         "convert-source-map": "^1.5.1",
         "reflect-metadata": "^0.2.0",
         "semver": "^7.0.0",
@@ -1645,7 +1645,7 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "18.2.5",
+        "@angular/compiler": "18.2.8",
         "typescript": ">=5.4 <5.6"
       }
     },
@@ -1663,9 +1663,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/core": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.5.tgz",
-      "integrity": "sha512-5BLVc5gXxzanQkADNS9WPsor3vNF5nQcyIHBi5VScErwM5vVZ7ATH1iZwaOg1ykDEVTFVhKDwD0X1aaqGDbhmQ==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.8.tgz",
+      "integrity": "sha512-NwIuX/Iby1jT6Iv1/s6S3wOFf8xfuQR3MPGvKhGgNtjXLbHG+TXceK9+QPZC0s9/Z8JR/hz+li34B79GrIKgUg==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1685,9 +1685,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/forms": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.5.tgz",
-      "integrity": "sha512-ohKeH+EZCCIyGSiFYlraWLzssGAZc13P92cuYpXB62322PkcA5u0IT72mML9JWGKRqF2zteVsw4koWHVxXM5mA==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.8.tgz",
+      "integrity": "sha512-JCLki7KC6D5vF6dE6yGlBmW33khIgpHs8N9SzuiJtkQqNDTIQA8cPsGV6qpLpxflxASynQOX5lDkWYdQyfm77Q==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1696,9 +1696,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5",
-        "@angular/platform-browser": "18.2.5",
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8",
+        "@angular/platform-browser": "18.2.8",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1709,9 +1709,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/localize": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-18.2.5.tgz",
-      "integrity": "sha512-kteBBkSmmmpMrHAIlxFK/PB9HemJ8OBo/qAGOqCGbvPHLMHdR7cxaMGL+Lkya/QhwhqlhoxUcE5zFWXl7UslNg==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-18.2.8.tgz",
+      "integrity": "sha512-1T7aXEdgVyeYnHOfQUuIDO8Lsamg1ZLrJrA5zUv61asPJp6HCcMjXy9vDQ1XvHm5+CdDjKk/rczlN4lSMZ0QRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1729,14 +1729,14 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/compiler": "18.2.5",
-        "@angular/compiler-cli": "18.2.5"
+        "@angular/compiler": "18.2.8",
+        "@angular/compiler-cli": "18.2.8"
       }
     },
     "node_modules/@angular/platform-browser": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.5.tgz",
-      "integrity": "sha512-PoX9idwnOpTJBlujzZ2nFGOsmCnZzOH7uNSWIR7trdoq0b1AFXfrxlCQ36qWamk7bbhJI4H28L8YTmKew/nXDA==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.8.tgz",
+      "integrity": "sha512-EPai4ZPqSq3ilLJUC85kPi9wo5j5suQovwtgRyjM/75D9Qy4TV19g8hkVM5Co/zrltO8a2G6vDscCNI5BeGw2A==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1745,9 +1745,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/animations": "18.2.5",
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5"
+        "@angular/animations": "18.2.8",
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8"
       },
       "peerDependenciesMeta": {
         "@angular/animations": {
@@ -1756,9 +1756,9 @@
       }
     },
     "node_modules/@angular/platform-browser-dynamic": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.5.tgz",
-      "integrity": "sha512-5u0IuAt1r5e2u2vSKhp3phnaf6hH89B/q7GErfPse1sdDfNI6wHVppxai28PAfAj9gwooJun6MjFWhJFLzS44A==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.8.tgz",
+      "integrity": "sha512-poZoapDqyN/rxGKQ3C6esdPiPLMkSpP2v12hoEa12KHgfPk7T1e+a+NMyJjV8HeOY3WyvL7tGRhW0NPTajTkhw==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1767,10 +1767,10 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/compiler": "18.2.5",
-        "@angular/core": "18.2.5",
-        "@angular/platform-browser": "18.2.5"
+        "@angular/common": "18.2.8",
+        "@angular/compiler": "18.2.8",
+        "@angular/core": "18.2.8",
+        "@angular/platform-browser": "18.2.8"
       }
     },
     "node_modules/@angular/platform-browser-dynamic/node_modules/tslib": {
@@ -1786,9 +1786,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/router": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.5.tgz",
-      "integrity": "sha512-OjZV1PTiSwT0ytmR0ykveLYzs4uQWf0EuIclZmWqM/bb8Q4P+gJl7/sya05nGnZsj6nHGOL0e/LhSZ3N+5p6qg==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.8.tgz",
+      "integrity": "sha512-L+olYgxIiBq+tbfayVI0cv1yOuymsw33msnGC2l/vpc9sSVfqGzESFnB4yMVU3vHtE9v6v2Y6O+iV44/b79W/g==",
       "license": "MIT",
       "dependencies": {
         "tslib": "^2.3.0"
@@ -1797,9 +1797,9 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5",
-        "@angular/platform-browser": "18.2.5",
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8",
+        "@angular/platform-browser": "18.2.8",
         "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
@@ -1810,9 +1810,9 @@
       "license": "0BSD"
     },
     "node_modules/@angular/service-worker": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.5.tgz",
-      "integrity": "sha512-MoF2n7z/X+yqK89mIRHQutVHIBTyEUo/fDEL8LcuBP4KOZmX9cRoCEt+vqH49BkArsgOM0jNFMYCM8yt0jg7pw==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.8.tgz",
+      "integrity": "sha512-LQktgS2Hn845ASWNyjde18V+CHkkPeCzORfh0ChYKiOmXYFtj/myEik5o/QI/G13Kaymy+vcuwQKiUuZjZiD1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1825,8 +1825,8 @@
         "node": "^18.19.1 || ^20.11.1 || >=22.0.0"
       },
       "peerDependencies": {
-        "@angular/common": "18.2.5",
-        "@angular/core": "18.2.5"
+        "@angular/common": "18.2.8",
+        "@angular/core": "18.2.8"
       }
     },
     "node_modules/@angular/service-worker/node_modules/tslib": {
@@ -1837,13 +1837,13 @@
       "license": "0BSD"
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -1851,9 +1851,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1938,29 +1938,29 @@
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -1979,18 +1979,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -2000,6 +2000,19 @@
         "@babel/core": "^7.0.0"
       }
     },
+    "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
       "version": "6.3.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -2011,14 +2024,14 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -2028,6 +2041,19 @@
         "@babel/core": "^7.0.0"
       }
     },
+    "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
       "version": "6.3.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -2056,44 +2082,44 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2103,22 +2129,22 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2126,15 +2152,15 @@
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2143,16 +2169,29 @@
         "@babel/core": "^7.0.0"
       }
     },
+    "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2162,28 +2201,28 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2203,9 +2242,9 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2213,9 +2252,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2223,9 +2262,9 @@
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2233,42 +2272,42 @@
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -2278,13 +2317,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -2294,14 +2333,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
-      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz",
+      "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2311,13 +2350,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
-      "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz",
+      "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2327,13 +2366,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2343,15 +2382,15 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2361,14 +2400,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2459,13 +2498,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2644,13 +2683,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2697,13 +2736,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2713,13 +2752,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2729,14 +2768,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2746,15 +2785,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2764,17 +2802,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -2784,15 +2822,28 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2802,13 +2853,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2818,14 +2869,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2835,13 +2886,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2851,14 +2902,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
-      "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2868,14 +2919,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2885,14 +2935,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2902,14 +2952,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2919,14 +2968,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2936,15 +2985,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2954,14 +3003,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2971,13 +3019,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2987,14 +3035,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3004,13 +3051,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3020,14 +3067,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3037,15 +3084,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3055,16 +3102,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3074,14 +3121,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3091,14 +3138,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3108,13 +3155,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3124,14 +3171,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3141,14 +3187,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3158,16 +3203,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3177,14 +3221,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3194,14 +3238,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3211,15 +3254,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3229,13 +3271,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3245,14 +3287,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3262,16 +3304,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3280,14 +3321,27 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3297,13 +3351,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -3314,13 +3368,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3361,13 +3415,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3377,14 +3431,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3394,13 +3448,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3410,13 +3464,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3426,13 +3480,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3442,13 +3496,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3458,14 +3512,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3475,14 +3529,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3492,14 +3546,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3631,13 +3685,6 @@
         "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
       "version": "7.25.0",
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
@@ -3652,32 +3699,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -3686,30 +3733,43 @@
       }
     },
     "node_modules/@babel/traverse/node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/traverse/node_modules/jsesc": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -4135,9 +4195,9 @@
       }
     },
     "node_modules/@handsontable/angular": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/@handsontable/angular/-/angular-14.5.0.tgz",
-      "integrity": "sha512-uQn86NeOOLpSu4GjAiC9A5qzEr+HG8TtytfNMGLmN/T3lAofBl+ZGwu8qWGdO/N/azcUeP7elyD4HxPy2dVdvg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/@handsontable/angular/-/angular-14.6.0.tgz",
+      "integrity": "sha512-iMnr5qPSDiRiDpjlXFrCQgJIgxrwEgE2H+EqPdrpVNMIZGkyy2dSfFM9HySbXY1UVx58dheej1Uc/zuHWl5cgw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "optionalDependencies": {
         "tslib": "^2.3.0"
@@ -4236,9 +4296,9 @@
       }
     },
     "node_modules/@inquirer/core/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4276,9 +4336,9 @@
       }
     },
     "node_modules/@inquirer/figures": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz",
-      "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz",
+      "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4629,9 +4689,9 @@
       }
     },
     "node_modules/@jsonjoy.com/util": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz",
-      "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz",
+      "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
@@ -4848,9 +4908,9 @@
       }
     },
     "node_modules/@ngtools/webpack": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.5.tgz",
-      "integrity": "sha512-L0n4eHObeqEOYRfSP+e4SeF/dmwxOIFy9xYvYCOUwOLrW4b3+a1+kkT30pqyfL72LFtpf0cmUwaWEFIcWl5PCg==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.8.tgz",
+      "integrity": "sha512-sq0kI8gEen4QlM6X8XqOYy7j4B8iLCYNo+iKxatV36ts4AXH0MuVkP56+oMaoH5oZNoSqd0RlfnotEHfvJAr8A==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -5113,9 +5173,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
-      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
+      "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
       "cpu": [
         "arm"
       ],
@@ -5127,9 +5187,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
-      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
+      "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
       "cpu": [
         "arm64"
       ],
@@ -5141,9 +5201,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
-      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
+      "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
       "cpu": [
         "arm64"
       ],
@@ -5155,9 +5215,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
-      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
+      "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
       "cpu": [
         "x64"
       ],
@@ -5169,9 +5229,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
-      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
+      "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
       "cpu": [
         "arm"
       ],
@@ -5183,9 +5243,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
-      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
+      "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
       "cpu": [
         "arm"
       ],
@@ -5197,9 +5257,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
-      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
+      "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
       "cpu": [
         "arm64"
       ],
@@ -5211,9 +5271,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
-      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
+      "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
       "cpu": [
         "arm64"
       ],
@@ -5225,9 +5285,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
-      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
+      "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
       "cpu": [
         "ppc64"
       ],
@@ -5239,9 +5299,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
-      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
+      "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
       "cpu": [
         "riscv64"
       ],
@@ -5253,9 +5313,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
-      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
+      "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
       "cpu": [
         "s390x"
       ],
@@ -5267,9 +5327,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
-      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
+      "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
       "cpu": [
         "x64"
       ],
@@ -5281,9 +5341,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
-      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
+      "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
       "cpu": [
         "x64"
       ],
@@ -5295,9 +5355,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
-      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
+      "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
       "cpu": [
         "arm64"
       ],
@@ -5309,9 +5369,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
-      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
+      "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
       "cpu": [
         "ia32"
       ],
@@ -5323,9 +5383,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
-      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
+      "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
       "cpu": [
         "x64"
       ],
@@ -5337,14 +5397,14 @@
       ]
     },
     "node_modules/@schematics/angular": {
-      "version": "18.2.5",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.5.tgz",
-      "integrity": "sha512-tBXhk9OGT4U6VsBNbuCNl2ITDOF3NYdGrEieIHU+lHSkpJNGZUIGxCgXCETXkmXDq1pe4wFZSKelWjeqYDfX0g==",
+      "version": "18.2.8",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.8.tgz",
+      "integrity": "sha512-62Sr7/j/dlhZorxH4GzQgpJy0s162BVts0Q7knZuEacP4VL+IWOUE1NS9OFkh/cbomoyXBdoewkZ5Zd1dVX78w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "18.2.5",
-        "@angular-devkit/schematics": "18.2.5",
+        "@angular-devkit/core": "18.2.8",
+        "@angular-devkit/schematics": "18.2.8",
         "jsonc-parser": "3.3.1"
       },
       "engines": {
@@ -5604,9 +5664,22 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6530,9 +6603,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "dev": true,
       "funding": [
         {
@@ -6550,8 +6623,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -6737,9 +6810,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "dev": true,
       "funding": [
         {
@@ -6790,28 +6863,19 @@
       }
     },
     "node_modules/chokidar": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
-      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
+      "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "anymatch": "~3.1.2",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.2",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.6.0"
+        "readdirp": "^4.0.1"
       },
       "engines": {
-        "node": ">= 8.10.0"
+        "node": ">= 14.16.0"
       },
       "funding": {
         "url": "https://paulmillr.com/funding/"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
       }
     },
     "node_modules/chownr": {
@@ -7182,9 +7246,9 @@
       "license": "MIT"
     },
     "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.6"
@@ -7234,19 +7298,6 @@
         "webpack": "^5.1.0"
       }
     },
-    "node_modules/copy-webpack-plugin/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,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
     "node_modules/core-js": {
       "version": "3.38.1",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz",
@@ -7750,9 +7801,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -7784,9 +7835,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "dev": true,
       "license": "ISC"
     },
@@ -8190,9 +8241,9 @@
       "license": "Apache-2.0"
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "license": "MIT",
       "dependencies": {
         "accepts": "~1.3.8",
@@ -8200,7 +8251,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -8306,6 +8357,19 @@
         "node": ">=8.6.0"
       }
     },
+    "node_modules/fast-glob/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,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "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",
@@ -8314,9 +8378,9 @@
       "license": "MIT"
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+      "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
       "dev": true,
       "license": "MIT"
     },
@@ -8585,9 +8649,9 @@
       }
     },
     "node_modules/get-east-asian-width": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
-      "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz",
+      "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -8655,16 +8719,16 @@
       }
     },
     "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==",
+      "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,
       "license": "ISC",
       "dependencies": {
-        "is-glob": "^4.0.1"
+        "is-glob": "^4.0.3"
       },
       "engines": {
-        "node": ">= 6"
+        "node": ">=10.13.0"
       }
     },
     "node_modules/glob-to-regexp": {
@@ -8732,9 +8796,9 @@
       "license": "MIT"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -10551,9 +10615,9 @@
       }
     },
     "node_modules/memfs": {
-      "version": "4.12.0",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.12.0.tgz",
-      "integrity": "sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==",
+      "version": "4.14.0",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz",
+      "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -11698,9 +11762,9 @@
       }
     },
     "node_modules/ordered-binary": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz",
-      "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==",
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.2.tgz",
+      "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==",
       "dev": true,
       "license": "MIT"
     },
@@ -11801,9 +11865,9 @@
       }
     },
     "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
       "dev": true,
       "license": "BlueOak-1.0.0"
     },
@@ -11889,13 +11953,13 @@
       }
     },
     "node_modules/parse5": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.0.tgz",
+      "integrity": "sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "entities": "^4.4.0"
+        "entities": "^4.5.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -12612,29 +12676,17 @@
       }
     },
     "node_modules/readdirp": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
-    "node_modules/readdirp/node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
+      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8.6"
+        "node": ">= 14.16.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
       }
     },
     "node_modules/reflect-metadata": {
@@ -12696,16 +12748,16 @@
       "optional": true
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -12713,26 +12765,37 @@
         "node": ">=4"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
     "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
     "node_modules/require-directory": {
@@ -12895,9 +12958,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
-      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
+      "version": "4.22.4",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
+      "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12911,22 +12974,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.20.0",
-        "@rollup/rollup-android-arm64": "4.20.0",
-        "@rollup/rollup-darwin-arm64": "4.20.0",
-        "@rollup/rollup-darwin-x64": "4.20.0",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
-        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
-        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
-        "@rollup/rollup-linux-arm64-musl": "4.20.0",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
-        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
-        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-musl": "4.20.0",
-        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
-        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
-        "@rollup/rollup-win32-x64-msvc": "4.20.0",
+        "@rollup/rollup-android-arm-eabi": "4.22.4",
+        "@rollup/rollup-android-arm64": "4.22.4",
+        "@rollup/rollup-darwin-arm64": "4.22.4",
+        "@rollup/rollup-darwin-x64": "4.22.4",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
+        "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
+        "@rollup/rollup-linux-arm64-gnu": "4.22.4",
+        "@rollup/rollup-linux-arm64-musl": "4.22.4",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
+        "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
+        "@rollup/rollup-linux-s390x-gnu": "4.22.4",
+        "@rollup/rollup-linux-x64-gnu": "4.22.4",
+        "@rollup/rollup-linux-x64-musl": "4.22.4",
+        "@rollup/rollup-win32-arm64-msvc": "4.22.4",
+        "@rollup/rollup-win32-ia32-msvc": "4.22.4",
+        "@rollup/rollup-win32-x64-msvc": "4.22.4",
         "fsevents": "~2.3.2"
       }
     },
@@ -13070,6 +13133,70 @@
         }
       }
     },
+    "node_modules/sass/node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/sass/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,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/sass/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/sass/node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
     "node_modules/sax": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
@@ -14427,9 +14554,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "dev": true,
       "funding": [
         {
@@ -14447,8 +14574,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -14725,6 +14852,31 @@
         "balanced-match": "^1.0.0"
       }
     },
+    "node_modules/webpack-dev-server/node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/glob": {
       "version": "10.4.5",
       "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
@@ -14746,10 +14898,23 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/webpack-dev-server/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,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-      "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+      "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14797,6 +14962,32 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/webpack-dev-server/node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/webpack-dev-server/node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/rimraf": {
       "version": "5.0.10",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
diff --git a/examples/next/visual-tests/js/package-lock.json b/examples/next/visual-tests/js/package-lock.json
index 07ac3bf822..de5797b926 100644
--- a/examples/next/visual-tests/js/package-lock.json
+++ b/examples/next/visual-tests/js/package-lock.json
@@ -551,9 +551,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
-      "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
+      "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==",
       "cpu": [
         "arm"
       ],
@@ -565,9 +565,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
-      "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz",
+      "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==",
       "cpu": [
         "arm64"
       ],
@@ -579,9 +579,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
-      "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz",
+      "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==",
       "cpu": [
         "arm64"
       ],
@@ -593,9 +593,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
-      "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
+      "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
       "cpu": [
         "x64"
       ],
@@ -607,9 +607,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
-      "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz",
+      "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==",
       "cpu": [
         "arm"
       ],
@@ -621,9 +621,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
-      "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz",
+      "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==",
       "cpu": [
         "arm"
       ],
@@ -635,9 +635,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
-      "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz",
+      "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==",
       "cpu": [
         "arm64"
       ],
@@ -649,9 +649,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
-      "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz",
+      "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==",
       "cpu": [
         "arm64"
       ],
@@ -663,9 +663,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
-      "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz",
+      "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==",
       "cpu": [
         "ppc64"
       ],
@@ -677,9 +677,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
-      "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz",
+      "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==",
       "cpu": [
         "riscv64"
       ],
@@ -691,9 +691,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
-      "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz",
+      "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==",
       "cpu": [
         "s390x"
       ],
@@ -705,9 +705,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
-      "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz",
+      "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==",
       "cpu": [
         "x64"
       ],
@@ -719,9 +719,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
-      "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz",
+      "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==",
       "cpu": [
         "x64"
       ],
@@ -733,9 +733,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
-      "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz",
+      "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==",
       "cpu": [
         "arm64"
       ],
@@ -747,9 +747,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
-      "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz",
+      "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==",
       "cpu": [
         "ia32"
       ],
@@ -761,9 +761,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
-      "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz",
+      "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==",
       "cpu": [
         "x64"
       ],
@@ -775,9 +775,9 @@
       ]
     },
     "node_modules/@types/estree": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+      "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
       "dev": true,
       "license": "MIT"
     },
@@ -810,9 +810,9 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1172,9 +1172,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/end-of-stream": {
@@ -1444,9 +1444,9 @@
       "license": "ISC"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -2145,13 +2145,13 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
-      "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz",
+      "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/estree": "1.0.5"
+        "@types/estree": "1.0.6"
       },
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -2161,22 +2161,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.22.4",
-        "@rollup/rollup-android-arm64": "4.22.4",
-        "@rollup/rollup-darwin-arm64": "4.22.4",
-        "@rollup/rollup-darwin-x64": "4.22.4",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
-        "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
-        "@rollup/rollup-linux-arm64-gnu": "4.22.4",
-        "@rollup/rollup-linux-arm64-musl": "4.22.4",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
-        "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
-        "@rollup/rollup-linux-s390x-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-musl": "4.22.4",
-        "@rollup/rollup-win32-arm64-msvc": "4.22.4",
-        "@rollup/rollup-win32-ia32-msvc": "4.22.4",
-        "@rollup/rollup-win32-x64-msvc": "4.22.4",
+        "@rollup/rollup-android-arm-eabi": "4.24.0",
+        "@rollup/rollup-android-arm64": "4.24.0",
+        "@rollup/rollup-darwin-arm64": "4.24.0",
+        "@rollup/rollup-darwin-x64": "4.24.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.24.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.24.0",
+        "@rollup/rollup-linux-arm64-musl": "4.24.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.24.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-musl": "4.24.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.24.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.24.0",
+        "@rollup/rollup-win32-x64-msvc": "4.24.0",
         "fsevents": "~2.3.2"
       }
     },
diff --git a/examples/next/visual-tests/react/package-lock.json b/examples/next/visual-tests/react/package-lock.json
index 79c50268d2..e7b2ecb3af 100644
--- a/examples/next/visual-tests/react/package-lock.json
+++ b/examples/next/visual-tests/react/package-lock.json
@@ -83,12 +83,12 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -96,30 +96,30 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz",
+      "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==",
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helpers": "^7.25.7",
+        "@babel/parser": "^7.25.8",
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.8",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -167,9 +167,9 @@
       }
     },
     "node_modules/@babel/eslint-parser": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
-      "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz",
+      "integrity": "sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==",
       "license": "MIT",
       "dependencies": {
         "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -203,54 +203,54 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -268,17 +268,17 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -298,13 +298,13 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -363,41 +363,41 @@
       "license": "MIT"
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -407,35 +407,35 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -445,14 +445,14 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -462,92 +462,92 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -628,12 +628,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -643,13 +643,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
-      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz",
+      "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -659,12 +659,12 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
-      "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz",
+      "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -674,12 +674,12 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -689,14 +689,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -706,13 +706,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -739,14 +739,14 @@
       }
     },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
-      "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz",
+      "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-decorators": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-decorators": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -888,12 +888,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
-      "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz",
+      "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -902,37 +902,13 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-dynamic-import": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-export-namespace-from": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.3"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-flow": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz",
-      "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.7.tgz",
+      "integrity": "sha512-fyoj6/YdVtlv2ROig/J0fP7hh/wNO1MJGm1NR70Pg7jbkF+jOUL9joorqaCOQh06Y+LfgTagHzC8KqZ3MF782w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -942,12 +918,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -957,12 +933,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
-      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz",
+      "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -996,12 +972,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
-      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz",
+      "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1113,12 +1089,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz",
-      "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz",
+      "integrity": "sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1144,12 +1120,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1159,15 +1135,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
-      "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz",
+      "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-remap-async-to-generator": "^7.25.0",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.4"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1177,14 +1152,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
-      "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-remap-async-to-generator": "^7.24.7"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1194,12 +1169,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1209,12 +1184,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1224,13 +1199,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1240,14 +1215,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1257,16 +1231,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1277,13 +1251,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1293,12 +1267,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1308,13 +1282,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1324,12 +1298,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1339,13 +1313,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
-      "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1355,13 +1329,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1371,13 +1344,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1387,13 +1360,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1403,13 +1375,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-flow-strip-types": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz",
-      "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz",
+      "integrity": "sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/plugin-syntax-flow": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-flow": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1419,13 +1391,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1435,14 +1407,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1452,13 +1424,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1468,12 +1439,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1483,13 +1454,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1499,12 +1469,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1514,13 +1484,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1530,14 +1500,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1547,15 +1517,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1565,13 +1535,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1581,13 +1551,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1597,12 +1567,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1612,13 +1582,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1628,13 +1597,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1644,15 +1612,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1662,13 +1629,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1678,13 +1645,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1694,14 +1660,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1711,12 +1676,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1726,13 +1691,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1742,15 +1707,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1760,12 +1724,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1775,12 +1739,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-constant-elements": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz",
-      "integrity": "sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.7.tgz",
+      "integrity": "sha512-/qXt69Em8HgsjCLu7G3zdIQn7A2QwmYND7Wa0LTp09Na+Zn8L5d0A7wSXrKi18TJRc/Q5S1i1De/SU1LzVkSvA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1790,12 +1754,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-display-name": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz",
-      "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz",
+      "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1805,16 +1769,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz",
-      "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz",
+      "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/plugin-syntax-jsx": "^7.24.7",
-        "@babel/types": "^7.25.2"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-jsx": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1824,12 +1788,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx-development": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz",
-      "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz",
+      "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/plugin-transform-react-jsx": "^7.24.7"
+        "@babel/plugin-transform-react-jsx": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1839,13 +1803,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz",
-      "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz",
+      "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1855,12 +1819,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -1871,12 +1835,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1886,13 +1850,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz",
-      "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz",
+      "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
@@ -1915,12 +1879,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1930,13 +1894,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1946,12 +1910,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1961,12 +1925,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1976,12 +1940,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1991,16 +1955,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz",
-      "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz",
+      "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-typescript": "^7.24.7"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-syntax-typescript": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2010,12 +1974,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2025,13 +1989,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2041,13 +2005,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2057,13 +2021,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2073,93 +2037,78 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
-      "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/compat-data": "^7.25.4",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
-        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz",
+      "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.25.8",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7",
+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7",
         "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-class-properties": "^7.12.13",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-import-assertions": "^7.24.7",
-        "@babel/plugin-syntax-import-attributes": "^7.24.7",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-import-assertions": "^7.25.7",
+        "@babel/plugin-syntax-import-attributes": "^7.25.7",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.4",
-        "@babel/plugin-transform-async-to-generator": "^7.24.7",
-        "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
-        "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.25.4",
-        "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.4",
-        "@babel/plugin-transform-computed-properties": "^7.24.7",
-        "@babel/plugin-transform-destructuring": "^7.24.8",
-        "@babel/plugin-transform-dotall-regex": "^7.24.7",
-        "@babel/plugin-transform-duplicate-keys": "^7.24.7",
-        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
-        "@babel/plugin-transform-dynamic-import": "^7.24.7",
-        "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
-        "@babel/plugin-transform-export-namespace-from": "^7.24.7",
-        "@babel/plugin-transform-for-of": "^7.24.7",
-        "@babel/plugin-transform-function-name": "^7.25.1",
-        "@babel/plugin-transform-json-strings": "^7.24.7",
-        "@babel/plugin-transform-literals": "^7.25.2",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
-        "@babel/plugin-transform-member-expression-literals": "^7.24.7",
-        "@babel/plugin-transform-modules-amd": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.8",
-        "@babel/plugin-transform-modules-systemjs": "^7.25.0",
-        "@babel/plugin-transform-modules-umd": "^7.24.7",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
-        "@babel/plugin-transform-new-target": "^7.24.7",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
-        "@babel/plugin-transform-numeric-separator": "^7.24.7",
-        "@babel/plugin-transform-object-rest-spread": "^7.24.7",
-        "@babel/plugin-transform-object-super": "^7.24.7",
-        "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.8",
-        "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.25.4",
-        "@babel/plugin-transform-private-property-in-object": "^7.24.7",
-        "@babel/plugin-transform-property-literals": "^7.24.7",
-        "@babel/plugin-transform-regenerator": "^7.24.7",
-        "@babel/plugin-transform-reserved-words": "^7.24.7",
-        "@babel/plugin-transform-shorthand-properties": "^7.24.7",
-        "@babel/plugin-transform-spread": "^7.24.7",
-        "@babel/plugin-transform-sticky-regex": "^7.24.7",
-        "@babel/plugin-transform-template-literals": "^7.24.7",
-        "@babel/plugin-transform-typeof-symbol": "^7.24.8",
-        "@babel/plugin-transform-unicode-escapes": "^7.24.7",
-        "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
+        "@babel/plugin-transform-arrow-functions": "^7.25.7",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.8",
+        "@babel/plugin-transform-async-to-generator": "^7.25.7",
+        "@babel/plugin-transform-block-scoped-functions": "^7.25.7",
+        "@babel/plugin-transform-block-scoping": "^7.25.7",
+        "@babel/plugin-transform-class-properties": "^7.25.7",
+        "@babel/plugin-transform-class-static-block": "^7.25.8",
+        "@babel/plugin-transform-classes": "^7.25.7",
+        "@babel/plugin-transform-computed-properties": "^7.25.7",
+        "@babel/plugin-transform-destructuring": "^7.25.7",
+        "@babel/plugin-transform-dotall-regex": "^7.25.7",
+        "@babel/plugin-transform-duplicate-keys": "^7.25.7",
+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-dynamic-import": "^7.25.8",
+        "@babel/plugin-transform-exponentiation-operator": "^7.25.7",
+        "@babel/plugin-transform-export-namespace-from": "^7.25.8",
+        "@babel/plugin-transform-for-of": "^7.25.7",
+        "@babel/plugin-transform-function-name": "^7.25.7",
+        "@babel/plugin-transform-json-strings": "^7.25.8",
+        "@babel/plugin-transform-literals": "^7.25.7",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.25.8",
+        "@babel/plugin-transform-member-expression-literals": "^7.25.7",
+        "@babel/plugin-transform-modules-amd": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-modules-systemjs": "^7.25.7",
+        "@babel/plugin-transform-modules-umd": "^7.25.7",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-new-target": "^7.25.7",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8",
+        "@babel/plugin-transform-numeric-separator": "^7.25.8",
+        "@babel/plugin-transform-object-rest-spread": "^7.25.8",
+        "@babel/plugin-transform-object-super": "^7.25.7",
+        "@babel/plugin-transform-optional-catch-binding": "^7.25.8",
+        "@babel/plugin-transform-optional-chaining": "^7.25.8",
+        "@babel/plugin-transform-parameters": "^7.25.7",
+        "@babel/plugin-transform-private-methods": "^7.25.7",
+        "@babel/plugin-transform-private-property-in-object": "^7.25.8",
+        "@babel/plugin-transform-property-literals": "^7.25.7",
+        "@babel/plugin-transform-regenerator": "^7.25.7",
+        "@babel/plugin-transform-reserved-words": "^7.25.7",
+        "@babel/plugin-transform-shorthand-properties": "^7.25.7",
+        "@babel/plugin-transform-spread": "^7.25.7",
+        "@babel/plugin-transform-sticky-regex": "^7.25.7",
+        "@babel/plugin-transform-template-literals": "^7.25.7",
+        "@babel/plugin-transform-typeof-symbol": "^7.25.7",
+        "@babel/plugin-transform-unicode-escapes": "^7.25.7",
+        "@babel/plugin-transform-unicode-property-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.7",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "core-js-compat": "^3.37.1",
+        "core-js-compat": "^3.38.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -2193,17 +2142,17 @@
       }
     },
     "node_modules/@babel/preset-react": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz",
-      "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz",
+      "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-validator-option": "^7.24.7",
-        "@babel/plugin-transform-react-display-name": "^7.24.7",
-        "@babel/plugin-transform-react-jsx": "^7.24.7",
-        "@babel/plugin-transform-react-jsx-development": "^7.24.7",
-        "@babel/plugin-transform-react-pure-annotations": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-transform-react-display-name": "^7.25.7",
+        "@babel/plugin-transform-react-jsx": "^7.25.7",
+        "@babel/plugin-transform-react-jsx-development": "^7.25.7",
+        "@babel/plugin-transform-react-pure-annotations": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2213,16 +2162,16 @@
       }
     },
     "node_modules/@babel/preset-typescript": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz",
-      "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz",
+      "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-validator-option": "^7.24.7",
-        "@babel/plugin-syntax-jsx": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.7",
-        "@babel/plugin-transform-typescript": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-syntax-jsx": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-typescript": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2231,16 +2180,10 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
-      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz",
+      "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==",
       "license": "MIT",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -2250,30 +2193,30 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2305,13 +2248,13 @@
       "license": "MIT"
     },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -2741,9 +2684,9 @@
       "license": "(0BSD OR MIT)"
     },
     "node_modules/@handsontable/react": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/@handsontable/react/-/react-14.5.0.tgz",
-      "integrity": "sha512-Z6weZTELY1hqgW8TDno000xScd+I1sQ0DcswX2AdnCCwvvQkmC74xmIREalwtFE9CCi0Y/kiSvq/G0bYgl//pQ==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/@handsontable/react/-/react-14.6.0.tgz",
+      "integrity": "sha512-Er30Z+H/vq/4FY1avTJnZMqdbRFV5Tv4H1hkJYTPGGHLXBbMykEFHA1xt4X4ejX2K30paouDZ+JeiCGGo6Q9LQ==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "peerDependencies": {
         "handsontable": ">=14.0.0"
@@ -3428,9 +3371,9 @@
       }
     },
     "node_modules/@remix-run/router": {
-      "version": "1.19.2",
-      "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz",
-      "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==",
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz",
+      "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3911,9 +3854,21 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "license": "MIT",
       "dependencies": {
         "@types/node": "*",
@@ -3995,9 +3950,9 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -4059,9 +4014,9 @@
       "license": "MIT"
     },
     "node_modules/@types/react": {
-      "version": "18.3.8",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz",
-      "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==",
+      "version": "18.3.11",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz",
+      "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4070,9 +4025,9 @@
       }
     },
     "node_modules/@types/react-dom": {
-      "version": "18.3.0",
-      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
-      "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
+      "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5728,9 +5683,9 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "funding": [
         {
           "type": "opencollective",
@@ -5747,8 +5702,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -5902,9 +5857,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "funding": [
         {
           "type": "opencollective",
@@ -6377,9 +6332,9 @@
       "license": "MIT"
     },
     "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.6"
@@ -7328,9 +7283,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -7406,9 +7361,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "license": "ISC"
     },
     "node_modules/emittery": {
@@ -7605,9 +7560,9 @@
       }
     },
     "node_modules/es-iterator-helpers": {
-      "version": "1.0.19",
-      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz",
-      "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz",
+      "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==",
       "license": "MIT",
       "dependencies": {
         "call-bind": "^1.0.7",
@@ -7617,12 +7572,12 @@
         "es-set-tostringtag": "^2.0.3",
         "function-bind": "^1.1.2",
         "get-intrinsic": "^1.2.4",
-        "globalthis": "^1.0.3",
+        "globalthis": "^1.0.4",
         "has-property-descriptors": "^1.0.2",
         "has-proto": "^1.0.3",
         "has-symbols": "^1.0.3",
         "internal-slot": "^1.0.7",
-        "iterator.prototype": "^1.1.2",
+        "iterator.prototype": "^1.1.3",
         "safe-array-concat": "^1.1.2"
       },
       "engines": {
@@ -7749,6 +7704,7 @@
       "version": "8.57.1",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
       "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
@@ -7855,9 +7811,9 @@
       "license": "MIT"
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.11.1",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.1.tgz",
-      "integrity": "sha512-EwcbfLOhwVMAfatfqLecR2yv3dE5+kQ8kx+Rrt0DvDXEVwW86KQ/xbMDQhtp5l42VXukD5SOF8mQQHbaNtO0CQ==",
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
       "license": "MIT",
       "dependencies": {
         "debug": "^3.2.7"
@@ -7905,9 +7861,9 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.30.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
-      "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
+      "version": "2.31.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
       "license": "MIT",
       "dependencies": {
         "@rtsao/scc": "^1.1.0",
@@ -7918,7 +7874,7 @@
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.9.0",
+        "eslint-module-utils": "^2.12.0",
         "hasown": "^2.0.2",
         "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
@@ -7927,13 +7883,14 @@
         "object.groupby": "^1.0.3",
         "object.values": "^1.2.0",
         "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.8",
         "tsconfig-paths": "^3.15.0"
       },
       "engines": {
         "node": ">=4"
       },
       "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
       }
     },
     "node_modules/eslint-plugin-import/node_modules/debug": {
@@ -8027,9 +7984,9 @@
       }
     },
     "node_modules/eslint-plugin-react": {
-      "version": "7.36.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz",
-      "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==",
+      "version": "7.37.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz",
+      "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==",
       "license": "MIT",
       "dependencies": {
         "array-includes": "^3.1.8",
@@ -8507,9 +8464,9 @@
       }
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "license": "MIT",
       "dependencies": {
         "accepts": "~1.3.8",
@@ -8517,7 +8474,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -8641,9 +8598,9 @@
       "license": "MIT"
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+      "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
       "license": "MIT"
     },
     "node_modules/fastq": {
@@ -9022,9 +8979,9 @@
       }
     },
     "node_modules/form-data": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
-      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz",
+      "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==",
       "license": "MIT",
       "dependencies": {
         "asynckit": "^0.4.0",
@@ -9402,9 +9359,9 @@
       "license": "MIT"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -9759,9 +9716,9 @@
       "license": "MIT"
     },
     "node_modules/http-proxy-middleware": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-      "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+      "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
       "license": "MIT",
       "dependencies": {
         "@types/http-proxy": "^1.17.8",
@@ -10691,9 +10648,9 @@
       }
     },
     "node_modules/iterator.prototype": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz",
-      "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz",
+      "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==",
       "license": "MIT",
       "dependencies": {
         "define-properties": "^1.2.1",
@@ -10701,6 +10658,9 @@
         "has-symbols": "^1.0.3",
         "reflect.getprototypeof": "^1.0.4",
         "set-function-name": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/jackspeak": {
@@ -11959,15 +11919,15 @@
       }
     },
     "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/json-buffer": {
@@ -12809,9 +12769,9 @@
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.12",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
-      "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==",
+      "version": "2.2.13",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
+      "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==",
       "license": "MIT"
     },
     "node_modules/object-assign": {
@@ -13212,9 +13172,9 @@
       }
     },
     "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
       "license": "BlueOak-1.0.0"
     },
     "node_modules/param-case": {
@@ -14059,9 +14019,9 @@
       }
     },
     "node_modules/postcss-load-config/node_modules/yaml": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
-      "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
+      "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
       "license": "ISC",
       "bin": {
         "yaml": "bin.mjs"
@@ -15334,13 +15294,13 @@
       }
     },
     "node_modules/react-router": {
-      "version": "6.26.2",
-      "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz",
-      "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==",
+      "version": "6.27.0",
+      "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz",
+      "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@remix-run/router": "1.19.2"
+        "@remix-run/router": "1.20.0"
       },
       "engines": {
         "node": ">=14.0.0"
@@ -15350,14 +15310,14 @@
       }
     },
     "node_modules/react-router-dom": {
-      "version": "6.26.2",
-      "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz",
-      "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==",
+      "version": "6.27.0",
+      "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz",
+      "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@remix-run/router": "1.19.2",
-        "react-router": "6.26.2"
+        "@remix-run/router": "1.20.0",
+        "react-router": "6.27.0"
       },
       "engines": {
         "node": ">=14.0.0"
@@ -15567,15 +15527,15 @@
       "optional": true
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
-      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+      "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.6",
+        "call-bind": "^1.0.7",
         "define-properties": "^1.2.1",
         "es-errors": "^1.3.0",
-        "set-function-name": "^2.0.1"
+        "set-function-name": "^2.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -15585,15 +15545,15 @@
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -15601,26 +15561,24 @@
         "node": ">=4"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
-    },
     "node_modules/relateurl": {
       "version": "0.2.7",
       "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -15865,9 +15823,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "2.79.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
-      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+      "version": "2.79.2",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
+      "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
       "license": "MIT",
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -16839,13 +16797,17 @@
       }
     },
     "node_modules/string.prototype.includes": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz",
-      "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+      "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
       "license": "MIT",
       "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
     "node_modules/string.prototype.matchall": {
@@ -17337,9 +17299,9 @@
       "license": "MIT"
     },
     "node_modules/tailwindcss": {
-      "version": "3.4.13",
-      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz",
-      "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==",
+      "version": "3.4.14",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
+      "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
       "license": "MIT",
       "dependencies": {
         "@alloc/quick-lru": "^5.2.0",
@@ -17468,9 +17430,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.33.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz",
-      "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==",
+      "version": "5.34.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz",
+      "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==",
       "license": "BSD-2-Clause",
       "dependencies": {
         "@jridgewell/source-map": "^0.3.3",
@@ -18027,9 +17989,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "funding": [
         {
           "type": "opencollective",
@@ -18046,8 +18008,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -18229,9 +18191,9 @@
       }
     },
     "node_modules/webpack": {
-      "version": "5.94.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
-      "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+      "version": "5.95.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz",
+      "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==",
       "license": "MIT",
       "dependencies": {
         "@types/estree": "^1.0.5",
diff --git a/examples/next/visual-tests/vue/package-lock.json b/examples/next/visual-tests/vue/package-lock.json
index 92eafca8dd..6e8fe4d42d 100644
--- a/examples/next/visual-tests/vue/package-lock.json
+++ b/examples/next/visual-tests/vue/package-lock.json
@@ -369,13 +369,13 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -383,9 +383,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -393,22 +393,22 @@
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz",
+      "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helpers": "^7.25.7",
+        "@babel/parser": "^7.25.8",
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.8",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -424,58 +424,58 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -484,18 +484,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -506,14 +506,14 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -541,44 +541,44 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -588,22 +588,22 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -611,15 +611,15 @@
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -629,15 +629,15 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -647,55 +647,55 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -703,42 +703,42 @@
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -748,12 +748,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -763,14 +763,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
-      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz",
+      "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -780,13 +780,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
-      "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz",
+      "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -796,13 +796,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -812,15 +812,15 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -830,14 +830,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -865,15 +865,15 @@
       }
     },
     "node_modules/@babel/plugin-proposal-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz",
-      "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz",
+      "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-decorators": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-decorators": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -895,56 +895,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-async-generators": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-class-properties": {
-      "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.12.13"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-class-static-block": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
-      "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-decorators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz",
-      "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz",
+      "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -966,27 +924,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-export-namespace-from": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.3"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -996,13 +941,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
-      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz",
+      "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1011,150 +956,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-syntax-import-meta": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
-      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-numeric-separator": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.10.4"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz",
+      "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-optional-chaining": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.8.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-private-property-in-object": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
-      "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      },
-      "peerDependencies": {
-        "@babel/core": "^7.0.0-0"
-      }
-    },
-    "node_modules/@babel/plugin-syntax-top-level-await": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1181,13 +990,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1197,16 +1006,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
-      "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz",
+      "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-remap-async-to-generator": "^7.25.0",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.4"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1216,15 +1024,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
-      "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-remap-async-to-generator": "^7.24.7"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1234,13 +1042,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1250,13 +1058,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1266,14 +1074,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1283,15 +1091,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1301,17 +1108,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1322,14 +1129,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1339,13 +1146,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1355,14 +1162,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1372,13 +1179,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1388,14 +1195,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
-      "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1405,14 +1212,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1422,14 +1228,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1439,14 +1245,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1456,14 +1261,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1473,15 +1278,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1491,14 +1296,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1508,13 +1312,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1524,14 +1328,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1541,13 +1344,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1557,14 +1360,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1574,15 +1377,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1592,16 +1395,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1611,14 +1414,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1628,14 +1431,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1645,13 +1448,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1661,14 +1464,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1678,14 +1480,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1695,16 +1496,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1714,14 +1514,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1731,14 +1531,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1748,15 +1547,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1766,13 +1564,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1782,14 +1580,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1799,16 +1597,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1818,13 +1615,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1834,13 +1631,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -1851,13 +1648,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1867,14 +1664,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz",
-      "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz",
+      "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
@@ -1888,13 +1685,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1904,14 +1701,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1921,13 +1718,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1937,13 +1734,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1953,13 +1750,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1969,13 +1766,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1985,14 +1782,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2002,14 +1799,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2019,14 +1816,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2036,94 +1833,79 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
-      "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz",
+      "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.4",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
-        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
+        "@babel/compat-data": "^7.25.8",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7",
+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7",
         "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-class-properties": "^7.12.13",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-import-assertions": "^7.24.7",
-        "@babel/plugin-syntax-import-attributes": "^7.24.7",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-import-assertions": "^7.25.7",
+        "@babel/plugin-syntax-import-attributes": "^7.25.7",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.4",
-        "@babel/plugin-transform-async-to-generator": "^7.24.7",
-        "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
-        "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.25.4",
-        "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.4",
-        "@babel/plugin-transform-computed-properties": "^7.24.7",
-        "@babel/plugin-transform-destructuring": "^7.24.8",
-        "@babel/plugin-transform-dotall-regex": "^7.24.7",
-        "@babel/plugin-transform-duplicate-keys": "^7.24.7",
-        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
-        "@babel/plugin-transform-dynamic-import": "^7.24.7",
-        "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
-        "@babel/plugin-transform-export-namespace-from": "^7.24.7",
-        "@babel/plugin-transform-for-of": "^7.24.7",
-        "@babel/plugin-transform-function-name": "^7.25.1",
-        "@babel/plugin-transform-json-strings": "^7.24.7",
-        "@babel/plugin-transform-literals": "^7.25.2",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
-        "@babel/plugin-transform-member-expression-literals": "^7.24.7",
-        "@babel/plugin-transform-modules-amd": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.8",
-        "@babel/plugin-transform-modules-systemjs": "^7.25.0",
-        "@babel/plugin-transform-modules-umd": "^7.24.7",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
-        "@babel/plugin-transform-new-target": "^7.24.7",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
-        "@babel/plugin-transform-numeric-separator": "^7.24.7",
-        "@babel/plugin-transform-object-rest-spread": "^7.24.7",
-        "@babel/plugin-transform-object-super": "^7.24.7",
-        "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.8",
-        "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.25.4",
-        "@babel/plugin-transform-private-property-in-object": "^7.24.7",
-        "@babel/plugin-transform-property-literals": "^7.24.7",
-        "@babel/plugin-transform-regenerator": "^7.24.7",
-        "@babel/plugin-transform-reserved-words": "^7.24.7",
-        "@babel/plugin-transform-shorthand-properties": "^7.24.7",
-        "@babel/plugin-transform-spread": "^7.24.7",
-        "@babel/plugin-transform-sticky-regex": "^7.24.7",
-        "@babel/plugin-transform-template-literals": "^7.24.7",
-        "@babel/plugin-transform-typeof-symbol": "^7.24.8",
-        "@babel/plugin-transform-unicode-escapes": "^7.24.7",
-        "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
+        "@babel/plugin-transform-arrow-functions": "^7.25.7",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.8",
+        "@babel/plugin-transform-async-to-generator": "^7.25.7",
+        "@babel/plugin-transform-block-scoped-functions": "^7.25.7",
+        "@babel/plugin-transform-block-scoping": "^7.25.7",
+        "@babel/plugin-transform-class-properties": "^7.25.7",
+        "@babel/plugin-transform-class-static-block": "^7.25.8",
+        "@babel/plugin-transform-classes": "^7.25.7",
+        "@babel/plugin-transform-computed-properties": "^7.25.7",
+        "@babel/plugin-transform-destructuring": "^7.25.7",
+        "@babel/plugin-transform-dotall-regex": "^7.25.7",
+        "@babel/plugin-transform-duplicate-keys": "^7.25.7",
+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-dynamic-import": "^7.25.8",
+        "@babel/plugin-transform-exponentiation-operator": "^7.25.7",
+        "@babel/plugin-transform-export-namespace-from": "^7.25.8",
+        "@babel/plugin-transform-for-of": "^7.25.7",
+        "@babel/plugin-transform-function-name": "^7.25.7",
+        "@babel/plugin-transform-json-strings": "^7.25.8",
+        "@babel/plugin-transform-literals": "^7.25.7",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.25.8",
+        "@babel/plugin-transform-member-expression-literals": "^7.25.7",
+        "@babel/plugin-transform-modules-amd": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-modules-systemjs": "^7.25.7",
+        "@babel/plugin-transform-modules-umd": "^7.25.7",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-new-target": "^7.25.7",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8",
+        "@babel/plugin-transform-numeric-separator": "^7.25.8",
+        "@babel/plugin-transform-object-rest-spread": "^7.25.8",
+        "@babel/plugin-transform-object-super": "^7.25.7",
+        "@babel/plugin-transform-optional-catch-binding": "^7.25.8",
+        "@babel/plugin-transform-optional-chaining": "^7.25.8",
+        "@babel/plugin-transform-parameters": "^7.25.7",
+        "@babel/plugin-transform-private-methods": "^7.25.7",
+        "@babel/plugin-transform-private-property-in-object": "^7.25.8",
+        "@babel/plugin-transform-property-literals": "^7.25.7",
+        "@babel/plugin-transform-regenerator": "^7.25.7",
+        "@babel/plugin-transform-reserved-words": "^7.25.7",
+        "@babel/plugin-transform-shorthand-properties": "^7.25.7",
+        "@babel/plugin-transform-spread": "^7.25.7",
+        "@babel/plugin-transform-sticky-regex": "^7.25.7",
+        "@babel/plugin-transform-template-literals": "^7.25.7",
+        "@babel/plugin-transform-typeof-symbol": "^7.25.7",
+        "@babel/plugin-transform-unicode-escapes": "^7.25.7",
+        "@babel/plugin-transform-unicode-property-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.7",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "core-js-compat": "^3.37.1",
+        "core-js-compat": "^3.38.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -2148,17 +1930,10 @@
         "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
-      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz",
+      "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2169,32 +1944,32 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2203,13 +1978,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -2293,9 +2068,9 @@
       "license": "(0BSD OR MIT)"
     },
     "node_modules/@handsontable/vue": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/@handsontable/vue/-/vue-14.5.0.tgz",
-      "integrity": "sha512-ifq/LKV1QsE4q4jwXZzJLhJ+0a2Zy+TEhX+imbn7Dn3k/oeoWG7l58fQA4J0J9HVYmdfvHcgO8TMQJCrX0g2DQ==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/@handsontable/vue/-/vue-14.6.0.tgz",
+      "integrity": "sha512-YW3oGQRZ2Ty5ge0gd8epyrXt6Wz3RYb4l+WiNz5McTJRIIVxi5rr+qm/8Dp8BbfGXzoP0ANgSq18ybjlItjdzA==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "peerDependencies": {
         "handsontable": ">=14.0.0",
@@ -2690,9 +2465,22 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2748,9 +2536,9 @@
       "license": "MIT"
     },
     "node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3627,42 +3415,42 @@
       "license": "ISC"
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.8.tgz",
-      "integrity": "sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz",
+      "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.8",
+        "@vue/shared": "3.5.12",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.8.tgz",
-      "integrity": "sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz",
+      "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-core": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.8.tgz",
-      "integrity": "sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz",
+      "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.8",
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/compiler-ssr": "3.5.8",
-        "@vue/shared": "3.5.8",
+        "@vue/compiler-core": "3.5.12",
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/compiler-ssr": "3.5.12",
+        "@vue/shared": "3.5.12",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.47",
@@ -3670,14 +3458,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.8.tgz",
-      "integrity": "sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz",
+      "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/component-compiler-utils": {
@@ -3770,9 +3558,9 @@
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.8.tgz",
-      "integrity": "sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz",
+      "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==",
       "dev": true,
       "license": "MIT"
     },
@@ -4640,9 +4428,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "dev": true,
       "funding": [
         {
@@ -4660,8 +4448,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -4789,9 +4577,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "dev": true,
       "funding": [
         {
@@ -5261,9 +5049,9 @@
       "license": "MIT"
     },
     "node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -6053,9 +5841,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -6126,9 +5914,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "dev": true,
       "license": "ISC"
     },
@@ -6314,6 +6102,7 @@
       "version": "7.32.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
       "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7024,9 +6813,9 @@
       }
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7035,7 +6824,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -7172,9 +6961,9 @@
       "license": "MIT"
     },
     "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+      "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
       "dev": true,
       "license": "MIT"
     },
@@ -7644,9 +7433,9 @@
       "license": "MIT"
     },
     "node_modules/handsontable": {
-      "version": "14.5.0",
-      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz",
-      "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==",
+      "version": "14.6.0",
+      "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.6.0.tgz",
+      "integrity": "sha512-zsjDZrnwKIOKJEcRgwKHQrjlCV5pKVPCBjl3mSXJLocDHFiyz9Zx0elPIu4Zei6G56FAN6otrSYPTV4j1P70Yw==",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -7983,9 +7772,9 @@
       }
     },
     "node_modules/http-proxy-middleware": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-      "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+      "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8609,16 +8398,16 @@
       }
     },
     "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
       "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/json-buffer": {
@@ -9118,9 +8907,9 @@
       }
     },
     "node_modules/magic-string": {
-      "version": "0.30.11",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
-      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+      "version": "0.30.12",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+      "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11265,16 +11054,16 @@
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -11282,28 +11071,26 @@
         "node": ">=4"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
-    },
     "node_modules/relateurl": {
       "version": "0.2.7",
       "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -12282,9 +12069,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.33.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz",
-      "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==",
+      "version": "5.34.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz",
+      "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -12808,9 +12595,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "dev": true,
       "funding": [
         {
@@ -12828,8 +12615,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -13193,9 +12980,9 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/webpack": {
-      "version": "5.94.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
-      "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+      "version": "5.95.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz",
+      "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/examples/package.json b/examples/package.json
index d4ea1266e4..cb7899edeb 100644
--- a/examples/package.json
+++ b/examples/package.json
@@ -1,7 +1,7 @@
 {
   "name": "handsontable-examples-internal",
   "private": true,
-  "version": "14.6.0",
+  "version": "14.6.1",
   "scripts": {
     "clean": "node ./scripts/clean-subpackages.mjs",
     "test": "cd .. && npm run examples:test next",
diff --git a/handsontable/dist/dompurify/purify.js b/handsontable/dist/dompurify/purify.js
index 280debae91..8a9049d21f 100644
--- a/handsontable/dist/dompurify/purify.js
+++ b/handsontable/dist/dompurify/purify.js
@@ -1,2 +1,2 @@
-/*! @license DOMPurify 2.5.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.6/LICENSE */
-!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).DOMPurify=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,n){return t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(e,n)}function n(e,r,o){return n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var a=new(Function.bind.apply(e,o));return r&&t(a,r.prototype),a},n.apply(null,arguments)}function r(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var a=Object.hasOwnProperty,i=Object.setPrototypeOf,l=Object.isFrozen,c=Object.getPrototypeOf,u=Object.getOwnPropertyDescriptor,s=Object.freeze,m=Object.seal,f=Object.create,p="undefined"!=typeof Reflect&&Reflect,d=p.apply,h=p.construct;d||(d=function(e,t,n){return e.apply(t,n)}),s||(s=function(e){return e}),m||(m=function(e){return e}),h||(h=function(e,t){return n(e,r(t))});var g,y=O(Array.prototype.forEach),b=O(Array.prototype.pop),T=O(Array.prototype.push),v=O(String.prototype.toLowerCase),N=O(String.prototype.toString),E=O(String.prototype.match),A=O(String.prototype.replace),S=O(String.prototype.indexOf),_=O(String.prototype.trim),w=O(RegExp.prototype.test),x=(g=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return h(g,t)});function O(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return d(e,t,r)}}function k(e,t,n){var r;n=null!==(r=n)&&void 0!==r?r:v,i&&i(e,null);for(var o=t.length;o--;){var a=t[o];if("string"==typeof a){var c=n(a);c!==a&&(l(t)||(t[o]=c),a=c)}e[a]=!0}return e}function L(e){var t,n=f(null);for(t in e)!0===d(a,e,[t])&&(n[t]=e[t]);return n}function C(e,t){for(;null!==e;){var n=u(e,t);if(n){if(n.get)return O(n.get);if("function"==typeof n.value)return O(n.value)}e=c(e)}return function(e){return console.warn("fallback value for",e),null}}var D=s(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),R=s(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),M=s(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),I=s(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),F=s(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),U=s(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),H=s(["#text"]),z=s(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),P=s(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),j=s(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),B=s(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),G=m(/\{\{[\w\W]*|[\w\W]*\}\}/gm),W=m(/<%[\w\W]*|[\w\W]*%>/gm),q=m(/\${[\w\W]*}/gm),Y=m(/^data-[\-\w.\u00B7-\uFFFF]/),$=m(/^aria-[\-\w]+$/),K=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),V=m(/^(?:\w+script|data):/i),X=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Z=m(/^html$/i),J=m(/^[a-z][.\w]*(-[.\w]+)+$/i),Q=function(){return"undefined"==typeof window?null:window};var ee=function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Q(),o=function(e){return t(e)};if(o.version="2.5.6",o.removed=[],!n||!n.document||9!==n.document.nodeType)return o.isSupported=!1,o;var a=n.document,i=n.document,l=n.DocumentFragment,c=n.HTMLTemplateElement,u=n.Node,m=n.Element,f=n.NodeFilter,p=n.NamedNodeMap,d=void 0===p?n.NamedNodeMap||n.MozNamedAttrMap:p,h=n.HTMLFormElement,g=n.DOMParser,O=n.trustedTypes,ee=m.prototype,te=C(ee,"cloneNode"),ne=C(ee,"nextSibling"),re=C(ee,"childNodes"),oe=C(ee,"parentNode");if("function"==typeof c){var ae=i.createElement("template");ae.content&&ae.content.ownerDocument&&(i=ae.content.ownerDocument)}var ie=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var a="dompurify"+(r?"#"+r:"");try{return t.createPolicy(a,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+a+" could not be created."),null}}(O,a),le=ie?ie.createHTML(""):"",ce=i,ue=ce.implementation,se=ce.createNodeIterator,me=ce.createDocumentFragment,fe=ce.getElementsByTagName,pe=a.importNode,de={};try{de=L(i).documentMode?i.documentMode:{}}catch(e){}var he={};o.isSupported="function"==typeof oe&&ue&&void 0!==ue.createHTMLDocument&&9!==de;var ge,ye,be=G,Te=W,ve=q,Ne=Y,Ee=$,Ae=V,Se=X,_e=J,we=K,xe=null,Oe=k({},[].concat(r(D),r(R),r(M),r(F),r(H))),ke=null,Le=k({},[].concat(r(z),r(P),r(j),r(B))),Ce=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),De=null,Re=null,Me=!0,Ie=!0,Fe=!1,Ue=!0,He=!1,ze=!0,Pe=!1,je=!1,Be=!1,Ge=!1,We=!1,qe=!1,Ye=!0,$e=!1,Ke=!0,Ve=!1,Xe={},Ze=null,Je=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Qe=null,et=k({},["audio","video","img","source","image","track"]),tt=null,nt=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),rt="http://www.w3.org/1998/Math/MathML",ot="http://www.w3.org/2000/svg",at="http://www.w3.org/1999/xhtml",it=at,lt=!1,ct=null,ut=k({},[rt,ot,at],N),st=["application/xhtml+xml","text/html"],mt=null,ft=i.createElement("form"),pt=function(e){return e instanceof RegExp||e instanceof Function},dt=function(t){mt&&mt===t||(t&&"object"===e(t)||(t={}),t=L(t),ge=ge=-1===st.indexOf(t.PARSER_MEDIA_TYPE)?"text/html":t.PARSER_MEDIA_TYPE,ye="application/xhtml+xml"===ge?N:v,xe="ALLOWED_TAGS"in t?k({},t.ALLOWED_TAGS,ye):Oe,ke="ALLOWED_ATTR"in t?k({},t.ALLOWED_ATTR,ye):Le,ct="ALLOWED_NAMESPACES"in t?k({},t.ALLOWED_NAMESPACES,N):ut,tt="ADD_URI_SAFE_ATTR"in t?k(L(nt),t.ADD_URI_SAFE_ATTR,ye):nt,Qe="ADD_DATA_URI_TAGS"in t?k(L(et),t.ADD_DATA_URI_TAGS,ye):et,Ze="FORBID_CONTENTS"in t?k({},t.FORBID_CONTENTS,ye):Je,De="FORBID_TAGS"in t?k({},t.FORBID_TAGS,ye):{},Re="FORBID_ATTR"in t?k({},t.FORBID_ATTR,ye):{},Xe="USE_PROFILES"in t&&t.USE_PROFILES,Me=!1!==t.ALLOW_ARIA_ATTR,Ie=!1!==t.ALLOW_DATA_ATTR,Fe=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ue=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,He=t.SAFE_FOR_TEMPLATES||!1,ze=!1!==t.SAFE_FOR_XML,Pe=t.WHOLE_DOCUMENT||!1,Ge=t.RETURN_DOM||!1,We=t.RETURN_DOM_FRAGMENT||!1,qe=t.RETURN_TRUSTED_TYPE||!1,Be=t.FORCE_BODY||!1,Ye=!1!==t.SANITIZE_DOM,$e=t.SANITIZE_NAMED_PROPS||!1,Ke=!1!==t.KEEP_CONTENT,Ve=t.IN_PLACE||!1,we=t.ALLOWED_URI_REGEXP||we,it=t.NAMESPACE||at,Ce=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ce.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ce.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Ce.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),He&&(Ie=!1),We&&(Ge=!0),Xe&&(xe=k({},r(H)),ke=[],!0===Xe.html&&(k(xe,D),k(ke,z)),!0===Xe.svg&&(k(xe,R),k(ke,P),k(ke,B)),!0===Xe.svgFilters&&(k(xe,M),k(ke,P),k(ke,B)),!0===Xe.mathMl&&(k(xe,F),k(ke,j),k(ke,B))),t.ADD_TAGS&&(xe===Oe&&(xe=L(xe)),k(xe,t.ADD_TAGS,ye)),t.ADD_ATTR&&(ke===Le&&(ke=L(ke)),k(ke,t.ADD_ATTR,ye)),t.ADD_URI_SAFE_ATTR&&k(tt,t.ADD_URI_SAFE_ATTR,ye),t.FORBID_CONTENTS&&(Ze===Je&&(Ze=L(Ze)),k(Ze,t.FORBID_CONTENTS,ye)),Ke&&(xe["#text"]=!0),Pe&&k(xe,["html","head","body"]),xe.table&&(k(xe,["tbody"]),delete De.tbody),s&&s(t),mt=t)},ht=k({},["mi","mo","mn","ms","mtext"]),gt=k({},["foreignobject","annotation-xml"]),yt=k({},["title","style","font","a","script"]),bt=k({},R);k(bt,M),k(bt,I);var Tt=k({},F);k(Tt,U);var vt=function(e){T(o.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=le}catch(t){e.remove()}}},Nt=function(e,t){try{T(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){T(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!ke[e])if(Ge||We)try{vt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Et=function(e){var t,n;if(Be)e="<remove></remove>"+e;else{var r=E(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===ge&&it===at&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var o=ie?ie.createHTML(e):e;if(it===at)try{t=(new g).parseFromString(o,ge)}catch(e){}if(!t||!t.documentElement){t=ue.createDocument(it,"template",null);try{t.documentElement.innerHTML=lt?le:o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),it===at?fe.call(t,Pe?"html":"body")[0]:Pe?t.documentElement:a},At=function(e){return se.call(e.ownerDocument||e,e,f.SHOW_ELEMENT|f.SHOW_COMMENT|f.SHOW_TEXT|f.SHOW_PROCESSING_INSTRUCTION|f.SHOW_CDATA_SECTION,null,!1)},St=function(e){return e instanceof h&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof d)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},_t=function(t){return"object"===e(u)?t instanceof u:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},wt=function(e,t,n){he[e]&&y(he[e],(function(e){e.call(o,t,n,mt)}))},xt=function(e){var t;if(wt("beforeSanitizeElements",e,null),St(e))return vt(e),!0;if(w(/[\u0080-\uFFFF]/,e.nodeName))return vt(e),!0;var n=ye(e.nodeName);if(wt("uponSanitizeElement",e,{tagName:n,allowedTags:xe}),e.hasChildNodes()&&!_t(e.firstElementChild)&&(!_t(e.content)||!_t(e.content.firstElementChild))&&w(/<[/\w]/g,e.innerHTML)&&w(/<[/\w]/g,e.textContent))return vt(e),!0;if("select"===n&&w(/<template/i,e.innerHTML))return vt(e),!0;if(7===e.nodeType)return vt(e),!0;if(ze&&8===e.nodeType&&w(/<[/\w]/g,e.data))return vt(e),!0;if(!xe[n]||De[n]){if(!De[n]&&kt(n)){if(Ce.tagNameCheck instanceof RegExp&&w(Ce.tagNameCheck,n))return!1;if(Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(n))return!1}if(Ke&&!Ze[n]){var r=oe(e)||e.parentNode,a=re(e)||e.childNodes;if(a&&r)for(var i=a.length-1;i>=0;--i){var l=te(a[i],!0);l.__removalCount=(e.__removalCount||0)+1,r.insertBefore(l,ne(e))}}return vt(e),!0}return e instanceof m&&!function(e){var t=oe(e);t&&t.tagName||(t={namespaceURI:it,tagName:"template"});var n=v(e.tagName),r=v(t.tagName);return!!ct[e.namespaceURI]&&(e.namespaceURI===ot?t.namespaceURI===at?"svg"===n:t.namespaceURI===rt?"svg"===n&&("annotation-xml"===r||ht[r]):Boolean(bt[n]):e.namespaceURI===rt?t.namespaceURI===at?"math"===n:t.namespaceURI===ot?"math"===n&&gt[r]:Boolean(Tt[n]):e.namespaceURI===at?!(t.namespaceURI===ot&&!gt[r])&&!(t.namespaceURI===rt&&!ht[r])&&!Tt[n]&&(yt[n]||!bt[n]):!("application/xhtml+xml"!==ge||!ct[e.namespaceURI]))}(e)?(vt(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!w(/<\/no(script|embed|frames)/i,e.innerHTML)?(He&&3===e.nodeType&&(t=e.textContent,t=A(t,be," "),t=A(t,Te," "),t=A(t,ve," "),e.textContent!==t&&(T(o.removed,{element:e.cloneNode()}),e.textContent=t)),wt("afterSanitizeElements",e,null),!1):(vt(e),!0)},Ot=function(e,t,n){if(Ye&&("id"===t||"name"===t)&&(n in i||n in ft))return!1;if(Ie&&!Re[t]&&w(Ne,t));else if(Me&&w(Ee,t));else if(!ke[t]||Re[t]){if(!(kt(e)&&(Ce.tagNameCheck instanceof RegExp&&w(Ce.tagNameCheck,e)||Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(e))&&(Ce.attributeNameCheck instanceof RegExp&&w(Ce.attributeNameCheck,t)||Ce.attributeNameCheck instanceof Function&&Ce.attributeNameCheck(t))||"is"===t&&Ce.allowCustomizedBuiltInElements&&(Ce.tagNameCheck instanceof RegExp&&w(Ce.tagNameCheck,n)||Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(n))))return!1}else if(tt[t]);else if(w(we,A(n,Se,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==S(n,"data:")||!Qe[e]){if(Fe&&!w(Ae,A(n,Se,"")));else if(n)return!1}else;return!0},kt=function(e){return"annotation-xml"!==e&&E(e,_e)},Lt=function(t){var n,r,a,i;wt("beforeSanitizeAttributes",t,null);var l=t.attributes;if(l){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ke};for(i=l.length;i--;){var u=n=l[i],s=u.name,m=u.namespaceURI;if(r="value"===s?n.value:_(n.value),a=ye(s),c.attrName=a,c.attrValue=r,c.keepAttr=!0,c.forceKeepAttr=void 0,wt("uponSanitizeAttribute",t,c),r=c.attrValue,ze&&w(/((--!?|])>)|<\/(style|title)/i,r))Nt(s,t);else if(!c.forceKeepAttr&&(Nt(s,t),c.keepAttr))if(Ue||!w(/\/>/i,r)){He&&(r=A(r,be," "),r=A(r,Te," "),r=A(r,ve," "));var f=ye(t.nodeName);if(Ot(f,a,r)){if(!$e||"id"!==a&&"name"!==a||(Nt(s,t),r="user-content-"+r),ie&&"object"===e(O)&&"function"==typeof O.getAttributeType)if(m);else switch(O.getAttributeType(f,a)){case"TrustedHTML":r=ie.createHTML(r);break;case"TrustedScriptURL":r=ie.createScriptURL(r)}try{m?t.setAttributeNS(m,s,r):t.setAttribute(s,r),St(t)?vt(t):b(o.removed)}catch(e){}}}else Nt(s,t)}wt("afterSanitizeAttributes",t,null)}},Ct=function e(t){var n,r=At(t);for(wt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)wt("uponSanitizeShadowNode",n,null),xt(n)||(n.content instanceof l&&e(n.content),Lt(n));wt("afterSanitizeShadowDOM",t,null)};return o.sanitize=function(t){var r,i,c,s,m,f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((lt=!t)&&(t="\x3c!--\x3e"),"string"!=typeof t&&!_t(t)){if("function"!=typeof t.toString)throw x("toString is not a function");if("string"!=typeof(t=t.toString()))throw x("dirty is not a string, aborting")}if(!o.isSupported){if("object"===e(n.toStaticHTML)||"function"==typeof n.toStaticHTML){if("string"==typeof t)return n.toStaticHTML(t);if(_t(t))return n.toStaticHTML(t.outerHTML)}return t}if(je||dt(f),o.removed=[],"string"==typeof t&&(Ve=!1),Ve){if(t.nodeName){var p=ye(t.nodeName);if(!xe[p]||De[p])throw x("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof u)1===(i=(r=Et("\x3c!----\x3e")).ownerDocument.importNode(t,!0)).nodeType&&"BODY"===i.nodeName||"HTML"===i.nodeName?r=i:r.appendChild(i);else{if(!Ge&&!He&&!Pe&&-1===t.indexOf("<"))return ie&&qe?ie.createHTML(t):t;if(!(r=Et(t)))return Ge?null:qe?le:""}r&&Be&&vt(r.firstChild);for(var d=At(Ve?t:r);c=d.nextNode();)3===c.nodeType&&c===s||xt(c)||(c.content instanceof l&&Ct(c.content),Lt(c),s=c);if(s=null,Ve)return t;if(Ge){if(We)for(m=me.call(r.ownerDocument);r.firstChild;)m.appendChild(r.firstChild);else m=r;return(ke.shadowroot||ke.shadowrootmod)&&(m=pe.call(a,m,!0)),m}var h=Pe?r.outerHTML:r.innerHTML;return Pe&&xe["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&w(Z,r.ownerDocument.doctype.name)&&(h="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+h),He&&(h=A(h,be," "),h=A(h,Te," "),h=A(h,ve," ")),ie&&qe?ie.createHTML(h):h},o.setConfig=function(e){dt(e),je=!0},o.clearConfig=function(){mt=null,je=!1},o.isValidAttribute=function(e,t,n){mt||dt({});var r=ye(e),o=ye(t);return Ot(r,o,n)},o.addHook=function(e,t){"function"==typeof t&&(he[e]=he[e]||[],T(he[e],t))},o.removeHook=function(e){if(he[e])return b(he[e])},o.removeHooks=function(e){he[e]&&(he[e]=[])},o.removeAllHooks=function(){he={}},o}();return ee}));
\ No newline at end of file
+/*! @license DOMPurify 2.5.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.7/LICENSE */
+!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).DOMPurify=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,n){return t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(e,n)}function n(e,r,o){return n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var a=new(Function.bind.apply(e,o));return r&&t(a,r.prototype),a},n.apply(null,arguments)}function r(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var a=Object.hasOwnProperty,i=Object.setPrototypeOf,l=Object.isFrozen,c=Object.getPrototypeOf,u=Object.getOwnPropertyDescriptor,s=Object.freeze,m=Object.seal,f=Object.create,p="undefined"!=typeof Reflect&&Reflect,d=p.apply,h=p.construct;d||(d=function(e,t,n){return e.apply(t,n)}),s||(s=function(e){return e}),m||(m=function(e){return e}),h||(h=function(e,t){return n(e,r(t))});var g,y=O(Array.prototype.forEach),b=O(Array.prototype.pop),T=O(Array.prototype.push),v=O(String.prototype.toLowerCase),N=O(String.prototype.toString),E=O(String.prototype.match),A=O(String.prototype.replace),S=O(String.prototype.indexOf),_=O(String.prototype.trim),w=O(RegExp.prototype.test),x=(g=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return h(g,t)});function O(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return d(e,t,r)}}function k(e,t,n){var r;n=null!==(r=n)&&void 0!==r?r:v,i&&i(e,null);for(var o=t.length;o--;){var a=t[o];if("string"==typeof a){var c=n(a);c!==a&&(l(t)||(t[o]=c),a=c)}e[a]=!0}return e}function L(e){var t,n=f(null);for(t in e)!0===d(a,e,[t])&&(n[t]=e[t]);return n}function C(e,t){for(;null!==e;){var n=u(e,t);if(n){if(n.get)return O(n.get);if("function"==typeof n.value)return O(n.value)}e=c(e)}return function(e){return console.warn("fallback value for",e),null}}var D=s(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),R=s(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),M=s(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),I=s(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),F=s(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),U=s(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),H=s(["#text"]),z=s(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),P=s(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),B=s(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),j=s(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),G=m(/\{\{[\w\W]*|[\w\W]*\}\}/gm),W=m(/<%[\w\W]*|[\w\W]*%>/gm),q=m(/\${[\w\W]*}/gm),Y=m(/^data-[\-\w.\u00B7-\uFFFF]/),$=m(/^aria-[\-\w]+$/),K=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),V=m(/^(?:\w+script|data):/i),X=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Z=m(/^html$/i),J=m(/^[a-z][.\w]*(-[.\w]+)+$/i),Q=function(){return"undefined"==typeof window?null:window};var ee=function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Q(),o=function(e){return t(e)};if(o.version="2.5.7",o.removed=[],!n||!n.document||9!==n.document.nodeType)return o.isSupported=!1,o;var a=n.document,i=n.document,l=n.DocumentFragment,c=n.HTMLTemplateElement,u=n.Node,m=n.Element,f=n.NodeFilter,p=n.NamedNodeMap,d=void 0===p?n.NamedNodeMap||n.MozNamedAttrMap:p,h=n.HTMLFormElement,g=n.DOMParser,O=n.trustedTypes,ee=m.prototype,te=C(ee,"cloneNode"),ne=C(ee,"nextSibling"),re=C(ee,"childNodes"),oe=C(ee,"parentNode");if("function"==typeof c){var ae=i.createElement("template");ae.content&&ae.content.ownerDocument&&(i=ae.content.ownerDocument)}var ie=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var a="dompurify"+(r?"#"+r:"");try{return t.createPolicy(a,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+a+" could not be created."),null}}(O,a),le=ie?ie.createHTML(""):"",ce=i,ue=ce.implementation,se=ce.createNodeIterator,me=ce.createDocumentFragment,fe=ce.getElementsByTagName,pe=a.importNode,de={};try{de=L(i).documentMode?i.documentMode:{}}catch(e){}var he={};o.isSupported="function"==typeof oe&&ue&&void 0!==ue.createHTMLDocument&&9!==de;var ge,ye,be=G,Te=W,ve=q,Ne=Y,Ee=$,Ae=V,Se=X,_e=J,we=K,xe=null,Oe=k({},[].concat(r(D),r(R),r(M),r(F),r(H))),ke=null,Le=k({},[].concat(r(z),r(P),r(B),r(j))),Ce=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),De=null,Re=null,Me=!0,Ie=!0,Fe=!1,Ue=!0,He=!1,ze=!0,Pe=!1,Be=!1,je=!1,Ge=!1,We=!1,qe=!1,Ye=!0,$e=!1,Ke=!0,Ve=!1,Xe={},Ze=null,Je=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Qe=null,et=k({},["audio","video","img","source","image","track"]),tt=null,nt=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),rt="http://www.w3.org/1998/Math/MathML",ot="http://www.w3.org/2000/svg",at="http://www.w3.org/1999/xhtml",it=at,lt=!1,ct=null,ut=k({},[rt,ot,at],N),st=["application/xhtml+xml","text/html"],mt=null,ft=i.createElement("form"),pt=function(e){return e instanceof RegExp||e instanceof Function},dt=function(t){mt&&mt===t||(t&&"object"===e(t)||(t={}),t=L(t),ge=ge=-1===st.indexOf(t.PARSER_MEDIA_TYPE)?"text/html":t.PARSER_MEDIA_TYPE,ye="application/xhtml+xml"===ge?N:v,xe="ALLOWED_TAGS"in t?k({},t.ALLOWED_TAGS,ye):Oe,ke="ALLOWED_ATTR"in t?k({},t.ALLOWED_ATTR,ye):Le,ct="ALLOWED_NAMESPACES"in t?k({},t.ALLOWED_NAMESPACES,N):ut,tt="ADD_URI_SAFE_ATTR"in t?k(L(nt),t.ADD_URI_SAFE_ATTR,ye):nt,Qe="ADD_DATA_URI_TAGS"in t?k(L(et),t.ADD_DATA_URI_TAGS,ye):et,Ze="FORBID_CONTENTS"in t?k({},t.FORBID_CONTENTS,ye):Je,De="FORBID_TAGS"in t?k({},t.FORBID_TAGS,ye):{},Re="FORBID_ATTR"in t?k({},t.FORBID_ATTR,ye):{},Xe="USE_PROFILES"in t&&t.USE_PROFILES,Me=!1!==t.ALLOW_ARIA_ATTR,Ie=!1!==t.ALLOW_DATA_ATTR,Fe=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ue=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,He=t.SAFE_FOR_TEMPLATES||!1,ze=!1!==t.SAFE_FOR_XML,Pe=t.WHOLE_DOCUMENT||!1,Ge=t.RETURN_DOM||!1,We=t.RETURN_DOM_FRAGMENT||!1,qe=t.RETURN_TRUSTED_TYPE||!1,je=t.FORCE_BODY||!1,Ye=!1!==t.SANITIZE_DOM,$e=t.SANITIZE_NAMED_PROPS||!1,Ke=!1!==t.KEEP_CONTENT,Ve=t.IN_PLACE||!1,we=t.ALLOWED_URI_REGEXP||we,it=t.NAMESPACE||at,Ce=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ce.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&pt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ce.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Ce.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),He&&(Ie=!1),We&&(Ge=!0),Xe&&(xe=k({},r(H)),ke=[],!0===Xe.html&&(k(xe,D),k(ke,z)),!0===Xe.svg&&(k(xe,R),k(ke,P),k(ke,j)),!0===Xe.svgFilters&&(k(xe,M),k(ke,P),k(ke,j)),!0===Xe.mathMl&&(k(xe,F),k(ke,B),k(ke,j))),t.ADD_TAGS&&(xe===Oe&&(xe=L(xe)),k(xe,t.ADD_TAGS,ye)),t.ADD_ATTR&&(ke===Le&&(ke=L(ke)),k(ke,t.ADD_ATTR,ye)),t.ADD_URI_SAFE_ATTR&&k(tt,t.ADD_URI_SAFE_ATTR,ye),t.FORBID_CONTENTS&&(Ze===Je&&(Ze=L(Ze)),k(Ze,t.FORBID_CONTENTS,ye)),Ke&&(xe["#text"]=!0),Pe&&k(xe,["html","head","body"]),xe.table&&(k(xe,["tbody"]),delete De.tbody),s&&s(t),mt=t)},ht=k({},["mi","mo","mn","ms","mtext"]),gt=k({},["annotation-xml"]),yt=k({},["title","style","font","a","script"]),bt=k({},R);k(bt,M),k(bt,I);var Tt=k({},F);k(Tt,U);var vt=function(e){T(o.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=le}catch(t){e.remove()}}},Nt=function(e,t){try{T(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){T(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!ke[e])if(Ge||We)try{vt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Et=function(e){var t,n;if(je)e="<remove></remove>"+e;else{var r=E(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===ge&&it===at&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var o=ie?ie.createHTML(e):e;if(it===at)try{t=(new g).parseFromString(o,ge)}catch(e){}if(!t||!t.documentElement){t=ue.createDocument(it,"template",null);try{t.documentElement.innerHTML=lt?le:o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),it===at?fe.call(t,Pe?"html":"body")[0]:Pe?t.documentElement:a},At=function(e){return se.call(e.ownerDocument||e,e,f.SHOW_ELEMENT|f.SHOW_COMMENT|f.SHOW_TEXT|f.SHOW_PROCESSING_INSTRUCTION|f.SHOW_CDATA_SECTION,null,!1)},St=function(e){return e instanceof h&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof d)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},_t=function(t){return"object"===e(u)?t instanceof u:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},wt=function(e,t,n){he[e]&&y(he[e],(function(e){e.call(o,t,n,mt)}))},xt=function(e){var t;if(wt("beforeSanitizeElements",e,null),St(e))return vt(e),!0;if(w(/[\u0080-\uFFFF]/,e.nodeName))return vt(e),!0;var n=ye(e.nodeName);if(wt("uponSanitizeElement",e,{tagName:n,allowedTags:xe}),e.hasChildNodes()&&!_t(e.firstElementChild)&&(!_t(e.content)||!_t(e.content.firstElementChild))&&w(/<[/\w]/g,e.innerHTML)&&w(/<[/\w]/g,e.textContent))return vt(e),!0;if("select"===n&&w(/<template/i,e.innerHTML))return vt(e),!0;if(7===e.nodeType)return vt(e),!0;if(ze&&8===e.nodeType&&w(/<[/\w]/g,e.data))return vt(e),!0;if(!xe[n]||De[n]){if(!De[n]&&kt(n)){if(Ce.tagNameCheck instanceof RegExp&&w(Ce.tagNameCheck,n))return!1;if(Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(n))return!1}if(Ke&&!Ze[n]){var r=oe(e)||e.parentNode,a=re(e)||e.childNodes;if(a&&r)for(var i=a.length-1;i>=0;--i){var l=te(a[i],!0);l.__removalCount=(e.__removalCount||0)+1,r.insertBefore(l,ne(e))}}return vt(e),!0}return e instanceof m&&!function(e){var t=oe(e);t&&t.tagName||(t={namespaceURI:it,tagName:"template"});var n=v(e.tagName),r=v(t.tagName);return!!ct[e.namespaceURI]&&(e.namespaceURI===ot?t.namespaceURI===at?"svg"===n:t.namespaceURI===rt?"svg"===n&&("annotation-xml"===r||ht[r]):Boolean(bt[n]):e.namespaceURI===rt?t.namespaceURI===at?"math"===n:t.namespaceURI===ot?"math"===n&&gt[r]:Boolean(Tt[n]):e.namespaceURI===at?!(t.namespaceURI===ot&&!gt[r])&&!(t.namespaceURI===rt&&!ht[r])&&!Tt[n]&&(yt[n]||!bt[n]):!("application/xhtml+xml"!==ge||!ct[e.namespaceURI]))}(e)?(vt(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!w(/<\/no(script|embed|frames)/i,e.innerHTML)?(He&&3===e.nodeType&&(t=e.textContent,t=A(t,be," "),t=A(t,Te," "),t=A(t,ve," "),e.textContent!==t&&(T(o.removed,{element:e.cloneNode()}),e.textContent=t)),wt("afterSanitizeElements",e,null),!1):(vt(e),!0)},Ot=function(e,t,n){if(Ye&&("id"===t||"name"===t)&&(n in i||n in ft))return!1;if(Ie&&!Re[t]&&w(Ne,t));else if(Me&&w(Ee,t));else if(!ke[t]||Re[t]){if(!(kt(e)&&(Ce.tagNameCheck instanceof RegExp&&w(Ce.tagNameCheck,e)||Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(e))&&(Ce.attributeNameCheck instanceof RegExp&&w(Ce.attributeNameCheck,t)||Ce.attributeNameCheck instanceof Function&&Ce.attributeNameCheck(t))||"is"===t&&Ce.allowCustomizedBuiltInElements&&(Ce.tagNameCheck instanceof RegExp&&w(Ce.tagNameCheck,n)||Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(n))))return!1}else if(tt[t]);else if(w(we,A(n,Se,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==S(n,"data:")||!Qe[e]){if(Fe&&!w(Ae,A(n,Se,"")));else if(n)return!1}else;return!0},kt=function(e){return"annotation-xml"!==e&&E(e,_e)},Lt=function(t){var n,r,a,i;wt("beforeSanitizeAttributes",t,null);var l=t.attributes;if(l){var c={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ke};for(i=l.length;i--;){var u=n=l[i],s=u.name,m=u.namespaceURI;if(r="value"===s?n.value:_(n.value),a=ye(s),c.attrName=a,c.attrValue=r,c.keepAttr=!0,c.forceKeepAttr=void 0,wt("uponSanitizeAttribute",t,c),r=c.attrValue,!c.forceKeepAttr&&(Nt(s,t),c.keepAttr))if(Ue||!w(/\/>/i,r)){He&&(r=A(r,be," "),r=A(r,Te," "),r=A(r,ve," "));var f=ye(t.nodeName);if(Ot(f,a,r))if(!$e||"id"!==a&&"name"!==a||(Nt(s,t),r="user-content-"+r),ze&&w(/((--!?|])>)|<\/(style|title)/i,r))Nt(s,t);else{if(ie&&"object"===e(O)&&"function"==typeof O.getAttributeType)if(m);else switch(O.getAttributeType(f,a)){case"TrustedHTML":r=ie.createHTML(r);break;case"TrustedScriptURL":r=ie.createScriptURL(r)}try{m?t.setAttributeNS(m,s,r):t.setAttribute(s,r),St(t)?vt(t):b(o.removed)}catch(e){}}}else Nt(s,t)}wt("afterSanitizeAttributes",t,null)}},Ct=function e(t){var n,r=At(t);for(wt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)wt("uponSanitizeShadowNode",n,null),xt(n)||(n.content instanceof l&&e(n.content),Lt(n));wt("afterSanitizeShadowDOM",t,null)};return o.sanitize=function(t){var r,i,c,s,m,f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((lt=!t)&&(t="\x3c!--\x3e"),"string"!=typeof t&&!_t(t)){if("function"!=typeof t.toString)throw x("toString is not a function");if("string"!=typeof(t=t.toString()))throw x("dirty is not a string, aborting")}if(!o.isSupported){if("object"===e(n.toStaticHTML)||"function"==typeof n.toStaticHTML){if("string"==typeof t)return n.toStaticHTML(t);if(_t(t))return n.toStaticHTML(t.outerHTML)}return t}if(Be||dt(f),o.removed=[],"string"==typeof t&&(Ve=!1),Ve){if(t.nodeName){var p=ye(t.nodeName);if(!xe[p]||De[p])throw x("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof u)1===(i=(r=Et("\x3c!----\x3e")).ownerDocument.importNode(t,!0)).nodeType&&"BODY"===i.nodeName||"HTML"===i.nodeName?r=i:r.appendChild(i);else{if(!Ge&&!He&&!Pe&&-1===t.indexOf("<"))return ie&&qe?ie.createHTML(t):t;if(!(r=Et(t)))return Ge?null:qe?le:""}r&&je&&vt(r.firstChild);for(var d=At(Ve?t:r);c=d.nextNode();)3===c.nodeType&&c===s||xt(c)||(c.content instanceof l&&Ct(c.content),Lt(c),s=c);if(s=null,Ve)return t;if(Ge){if(We)for(m=me.call(r.ownerDocument);r.firstChild;)m.appendChild(r.firstChild);else m=r;return(ke.shadowroot||ke.shadowrootmod)&&(m=pe.call(a,m,!0)),m}var h=Pe?r.outerHTML:r.innerHTML;return Pe&&xe["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&w(Z,r.ownerDocument.doctype.name)&&(h="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+h),He&&(h=A(h,be," "),h=A(h,Te," "),h=A(h,ve," ")),ie&&qe?ie.createHTML(h):h},o.setConfig=function(e){dt(e),Be=!0},o.clearConfig=function(){mt=null,Be=!1},o.isValidAttribute=function(e,t,n){mt||dt({});var r=ye(e),o=ye(t);return Ot(r,o,n)},o.addHook=function(e,t){"function"==typeof t&&(he[e]=he[e]||[],T(he[e],t))},o.removeHook=function(e){if(he[e])return b(he[e])},o.removeHooks=function(e){he[e]&&(he[e]=[])},o.removeAllHooks=function(){he={}},o}();return ee}));
\ No newline at end of file
diff --git a/handsontable/dist/dompurify/purify.js.map b/handsontable/dist/dompurify/purify.js.map
index a2aa37cfda..a3480292b5 100644
--- a/handsontable/dist/dompurify/purify.js.map
+++ b/handsontable/dist/dompurify/purify.js.map
@@ -1 +1 @@
-{"version":3,"file":"purify.js","sources":["../src/utils.js","../src/tags.js","../src/attrs.js","../src/regexp.js","../src/purify.js"],"sourcesContent":["const {\n  hasOwnProperty,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n  apply = function (fun, thisValue, args) {\n    return fun.apply(thisValue, args);\n  };\n}\n\nif (!freeze) {\n  freeze = function (x) {\n    return x;\n  };\n}\n\nif (!seal) {\n  seal = function (x) {\n    return x;\n  };\n}\n\nif (!construct) {\n  construct = function (Func, args) {\n    return new Func(...args);\n  };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n  return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n  return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array, transformCaseFunc) {\n  transformCaseFunc = transformCaseFunc ?? stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n\n        element = lcElement;\n      }\n    }\n\n    set[element] = true;\n  }\n\n  return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n  const newObject = create(null);\n\n  let property;\n  for (property in object) {\n    if (apply(hasOwnProperty, object, [property]) === true) {\n      newObject[property] = object[property];\n    }\n  }\n\n  return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n\n    object = getPrototypeOf(object);\n  }\n\n  function fallbackValue(element) {\n    console.warn('fallback value for', element);\n    return null;\n  }\n\n  return fallbackValue;\n}\n\nexport {\n  // Array\n  arrayForEach,\n  arrayIndexOf,\n  arrayPop,\n  arrayPush,\n  arraySlice,\n  // Object\n  freeze,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n  hasOwnProperty,\n  isFrozen,\n  setPrototypeOf,\n  seal,\n  // RegExp\n  regExpTest,\n  // String\n  stringIndexOf,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringTrim,\n  // Errors\n  typeErrorCreate,\n  // Other\n  lookupGetter,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'a',\n  'abbr',\n  'acronym',\n  'address',\n  'area',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'bdi',\n  'bdo',\n  'big',\n  'blink',\n  'blockquote',\n  'body',\n  'br',\n  'button',\n  'canvas',\n  'caption',\n  'center',\n  'cite',\n  'code',\n  'col',\n  'colgroup',\n  'content',\n  'data',\n  'datalist',\n  'dd',\n  'decorator',\n  'del',\n  'details',\n  'dfn',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'element',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'font',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hgroup',\n  'hr',\n  'html',\n  'i',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'map',\n  'mark',\n  'marquee',\n  'menu',\n  'menuitem',\n  'meter',\n  'nav',\n  'nobr',\n  'ol',\n  'optgroup',\n  'option',\n  'output',\n  'p',\n  'picture',\n  'pre',\n  'progress',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'section',\n  'select',\n  'shadow',\n  'small',\n  'source',\n  'spacer',\n  'span',\n  'strike',\n  'strong',\n  'style',\n  'sub',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'template',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'track',\n  'tt',\n  'u',\n  'ul',\n  'var',\n  'video',\n  'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n  'svg',\n  'a',\n  'altglyph',\n  'altglyphdef',\n  'altglyphitem',\n  'animatecolor',\n  'animatemotion',\n  'animatetransform',\n  'circle',\n  'clippath',\n  'defs',\n  'desc',\n  'ellipse',\n  'filter',\n  'font',\n  'g',\n  'glyph',\n  'glyphref',\n  'hkern',\n  'image',\n  'line',\n  'lineargradient',\n  'marker',\n  'mask',\n  'metadata',\n  'mpath',\n  'path',\n  'pattern',\n  'polygon',\n  'polyline',\n  'radialgradient',\n  'rect',\n  'stop',\n  'style',\n  'switch',\n  'symbol',\n  'text',\n  'textpath',\n  'title',\n  'tref',\n  'tspan',\n  'view',\n  'vkern',\n]);\n\nexport const svgFilters = freeze([\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDistantLight',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n  'animate',\n  'color-profile',\n  'cursor',\n  'discard',\n  'fedropshadow',\n  'font-face',\n  'font-face-format',\n  'font-face-name',\n  'font-face-src',\n  'font-face-uri',\n  'foreignobject',\n  'hatch',\n  'hatchpath',\n  'mesh',\n  'meshgradient',\n  'meshpatch',\n  'meshrow',\n  'missing-glyph',\n  'script',\n  'set',\n  'solidcolor',\n  'unknown',\n  'use',\n]);\n\nexport const mathMl = freeze([\n  'math',\n  'menclose',\n  'merror',\n  'mfenced',\n  'mfrac',\n  'mglyph',\n  'mi',\n  'mlabeledtr',\n  'mmultiscripts',\n  'mn',\n  'mo',\n  'mover',\n  'mpadded',\n  'mphantom',\n  'mroot',\n  'mrow',\n  'ms',\n  'mspace',\n  'msqrt',\n  'mstyle',\n  'msub',\n  'msup',\n  'msubsup',\n  'mtable',\n  'mtd',\n  'mtext',\n  'mtr',\n  'munder',\n  'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n  'maction',\n  'maligngroup',\n  'malignmark',\n  'mlongdiv',\n  'mscarries',\n  'mscarry',\n  'msgroup',\n  'mstack',\n  'msline',\n  'msrow',\n  'semantics',\n  'annotation',\n  'annotation-xml',\n  'mprescripts',\n  'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'accept',\n  'action',\n  'align',\n  'alt',\n  'autocapitalize',\n  'autocomplete',\n  'autopictureinpicture',\n  'autoplay',\n  'background',\n  'bgcolor',\n  'border',\n  'capture',\n  'cellpadding',\n  'cellspacing',\n  'checked',\n  'cite',\n  'class',\n  'clear',\n  'color',\n  'cols',\n  'colspan',\n  'controls',\n  'controlslist',\n  'coords',\n  'crossorigin',\n  'datetime',\n  'decoding',\n  'default',\n  'dir',\n  'disabled',\n  'disablepictureinpicture',\n  'disableremoteplayback',\n  'download',\n  'draggable',\n  'enctype',\n  'enterkeyhint',\n  'face',\n  'for',\n  'headers',\n  'height',\n  'hidden',\n  'high',\n  'href',\n  'hreflang',\n  'id',\n  'inputmode',\n  'integrity',\n  'ismap',\n  'kind',\n  'label',\n  'lang',\n  'list',\n  'loading',\n  'loop',\n  'low',\n  'max',\n  'maxlength',\n  'media',\n  'method',\n  'min',\n  'minlength',\n  'multiple',\n  'muted',\n  'name',\n  'nonce',\n  'noshade',\n  'novalidate',\n  'nowrap',\n  'open',\n  'optimum',\n  'pattern',\n  'placeholder',\n  'playsinline',\n  'poster',\n  'preload',\n  'pubdate',\n  'radiogroup',\n  'readonly',\n  'rel',\n  'required',\n  'rev',\n  'reversed',\n  'role',\n  'rows',\n  'rowspan',\n  'spellcheck',\n  'scope',\n  'selected',\n  'shape',\n  'size',\n  'sizes',\n  'span',\n  'srclang',\n  'start',\n  'src',\n  'srcset',\n  'step',\n  'style',\n  'summary',\n  'tabindex',\n  'title',\n  'translate',\n  'type',\n  'usemap',\n  'valign',\n  'value',\n  'width',\n  'xmlns',\n  'slot',\n]);\n\nexport const svg = freeze([\n  'accent-height',\n  'accumulate',\n  'additive',\n  'alignment-baseline',\n  'ascent',\n  'attributename',\n  'attributetype',\n  'azimuth',\n  'basefrequency',\n  'baseline-shift',\n  'begin',\n  'bias',\n  'by',\n  'class',\n  'clip',\n  'clippathunits',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'cx',\n  'cy',\n  'd',\n  'dx',\n  'dy',\n  'diffuseconstant',\n  'direction',\n  'display',\n  'divisor',\n  'dur',\n  'edgemode',\n  'elevation',\n  'end',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'filterunits',\n  'flood-color',\n  'flood-opacity',\n  'font-family',\n  'font-size',\n  'font-size-adjust',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'fx',\n  'fy',\n  'g1',\n  'g2',\n  'glyph-name',\n  'glyphref',\n  'gradientunits',\n  'gradienttransform',\n  'height',\n  'href',\n  'id',\n  'image-rendering',\n  'in',\n  'in2',\n  'k',\n  'k1',\n  'k2',\n  'k3',\n  'k4',\n  'kerning',\n  'keypoints',\n  'keysplines',\n  'keytimes',\n  'lang',\n  'lengthadjust',\n  'letter-spacing',\n  'kernelmatrix',\n  'kernelunitlength',\n  'lighting-color',\n  'local',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'markerheight',\n  'markerunits',\n  'markerwidth',\n  'maskcontentunits',\n  'maskunits',\n  'max',\n  'mask',\n  'media',\n  'method',\n  'mode',\n  'min',\n  'name',\n  'numoctaves',\n  'offset',\n  'operator',\n  'opacity',\n  'order',\n  'orient',\n  'orientation',\n  'origin',\n  'overflow',\n  'paint-order',\n  'path',\n  'pathlength',\n  'patterncontentunits',\n  'patterntransform',\n  'patternunits',\n  'points',\n  'preservealpha',\n  'preserveaspectratio',\n  'primitiveunits',\n  'r',\n  'rx',\n  'ry',\n  'radius',\n  'refx',\n  'refy',\n  'repeatcount',\n  'repeatdur',\n  'restart',\n  'result',\n  'rotate',\n  'scale',\n  'seed',\n  'shape-rendering',\n  'specularconstant',\n  'specularexponent',\n  'spreadmethod',\n  'startoffset',\n  'stddeviation',\n  'stitchtiles',\n  'stop-color',\n  'stop-opacity',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke',\n  'stroke-width',\n  'style',\n  'surfacescale',\n  'systemlanguage',\n  'tabindex',\n  'targetx',\n  'targety',\n  'transform',\n  'transform-origin',\n  'text-anchor',\n  'text-decoration',\n  'text-rendering',\n  'textlength',\n  'type',\n  'u1',\n  'u2',\n  'unicode',\n  'values',\n  'viewbox',\n  'visibility',\n  'version',\n  'vert-adv-y',\n  'vert-origin-x',\n  'vert-origin-y',\n  'width',\n  'word-spacing',\n  'wrap',\n  'writing-mode',\n  'xchannelselector',\n  'ychannelselector',\n  'x',\n  'x1',\n  'x2',\n  'xmlns',\n  'y',\n  'y1',\n  'y2',\n  'z',\n  'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n  'accent',\n  'accentunder',\n  'align',\n  'bevelled',\n  'close',\n  'columnsalign',\n  'columnlines',\n  'columnspan',\n  'denomalign',\n  'depth',\n  'dir',\n  'display',\n  'displaystyle',\n  'encoding',\n  'fence',\n  'frame',\n  'height',\n  'href',\n  'id',\n  'largeop',\n  'length',\n  'linethickness',\n  'lspace',\n  'lquote',\n  'mathbackground',\n  'mathcolor',\n  'mathsize',\n  'mathvariant',\n  'maxsize',\n  'minsize',\n  'movablelimits',\n  'notation',\n  'numalign',\n  'open',\n  'rowalign',\n  'rowlines',\n  'rowspacing',\n  'rowspan',\n  'rspace',\n  'rquote',\n  'scriptlevel',\n  'scriptminsize',\n  'scriptsizemultiplier',\n  'selection',\n  'separator',\n  'separators',\n  'stretchy',\n  'subscriptshift',\n  'supscriptshift',\n  'symmetric',\n  'voffset',\n  'width',\n  'xmlns',\n]);\n\nexport const xml = freeze([\n  'xlink:href',\n  'xml:id',\n  'xlink:title',\n  'xml:space',\n  'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n  /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n  /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n  addToSet,\n  clone,\n  freeze,\n  arrayForEach,\n  arrayPop,\n  arrayPush,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringIndexOf,\n  stringTrim,\n  regExpTest,\n  typeErrorCreate,\n  lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n  if (\n    typeof trustedTypes !== 'object' ||\n    typeof trustedTypes.createPolicy !== 'function'\n  ) {\n    return null;\n  }\n\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (\n    document.currentScript &&\n    document.currentScript.hasAttribute(ATTR_NAME)\n  ) {\n    suffix = document.currentScript.getAttribute(ATTR_NAME);\n  }\n\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      },\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn(\n      'TrustedTypes policy ' + policyName + ' could not be created.'\n    );\n    return null;\n  }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n  const DOMPurify = (root) => createDOMPurify(root);\n\n  /**\n   * Version label, exposed for easier checks\n   * if DOMPurify is up to date or not\n   */\n  DOMPurify.version = VERSION;\n\n  /**\n   * Array of elements that DOMPurify removed during sanitation.\n   * Empty if nothing was removed.\n   */\n  DOMPurify.removed = [];\n\n  if (!window || !window.document || window.document.nodeType !== 9) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n\n    return DOMPurify;\n  }\n\n  const originalDocument = window.document;\n\n  let { document } = window;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes,\n  } = window;\n\n  const ElementPrototype = Element.prototype;\n\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n\n  const trustedTypesPolicy = _createTrustedTypesPolicy(\n    trustedTypes,\n    originalDocument\n  );\n  const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName,\n  } = document;\n  const { importNode } = originalDocument;\n\n  let documentMode = {};\n  try {\n    documentMode = clone(document).documentMode ? document.documentMode : {};\n  } catch (_) {}\n\n  let hooks = {};\n\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported =\n    typeof getParentNode === 'function' &&\n    implementation &&\n    implementation.createHTMLDocument !== undefined &&\n    documentMode !== 9;\n\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT,\n  } = EXPRESSIONS;\n\n  let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n    ...TAGS.html,\n    ...TAGS.svg,\n    ...TAGS.svgFilters,\n    ...TAGS.mathMl,\n    ...TAGS.text,\n  ]);\n\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n    ...ATTRS.html,\n    ...ATTRS.svg,\n    ...ATTRS.mathMl,\n    ...ATTRS.xml,\n  ]);\n\n  /*\n   * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(\n    Object.create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false,\n      },\n    })\n  );\n\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n    'annotation-xml',\n    'audio',\n    'colgroup',\n    'desc',\n    'foreignobject',\n    'head',\n    'iframe',\n    'math',\n    'mi',\n    'mn',\n    'mo',\n    'ms',\n    'mtext',\n    'noembed',\n    'noframes',\n    'noscript',\n    'plaintext',\n    'script',\n    'style',\n    'svg',\n    'template',\n    'thead',\n    'title',\n    'video',\n    'xmp',\n  ]);\n\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n    'audio',\n    'video',\n    'img',\n    'source',\n    'image',\n    'track',\n  ]);\n\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n    'alt',\n    'class',\n    'for',\n    'id',\n    'label',\n    'name',\n    'pattern',\n    'placeholder',\n    'role',\n    'summary',\n    'title',\n    'value',\n    'style',\n    'xmlns',\n  ]);\n\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n    {},\n    [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n    stringToString\n  );\n\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc;\n\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n\n  const formElement = document.createElement('form');\n\n  const isRegexOrFunction = function (testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n\n  /**\n   * _parseConfig\n   *\n   * @param  {Object} cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function (cfg) {\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n\n    PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n        ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n        : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc =\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n        ? stringToString\n        : stringToLowerCase;\n\n    /* Set configuration parameters */\n    ALLOWED_TAGS =\n      'ALLOWED_TAGS' in cfg\n        ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n        : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR =\n      'ALLOWED_ATTR' in cfg\n        ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n        : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES =\n      'ALLOWED_NAMESPACES' in cfg\n        ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n        : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES =\n      'ADD_URI_SAFE_ATTR' in cfg\n        ? addToSet(\n            clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n            cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n            transformCaseFunc // eslint-disable-line indent\n          ) // eslint-disable-line indent\n        : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS =\n      'ADD_DATA_URI_TAGS' in cfg\n        ? addToSet(\n            clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n            cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n            transformCaseFunc // eslint-disable-line indent\n          ) // eslint-disable-line indent\n        : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS =\n      'FORBID_CONTENTS' in cfg\n        ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n        : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS =\n      'FORBID_TAGS' in cfg\n        ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n        : {};\n    FORBID_ATTR =\n      'FORBID_ATTR' in cfg\n        ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n        : {};\n    USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n        'boolean'\n    ) {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n        cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, TAGS.html);\n        addToSet(ALLOWED_ATTR, ATTRS.html);\n      }\n\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, TAGS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n    }\n\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n        ALLOWED_TAGS = clone(ALLOWED_TAGS);\n      }\n\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n    }\n\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n    }\n\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n\n    CONFIG = cfg;\n  };\n\n  const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n    'mi',\n    'mo',\n    'mn',\n    'ms',\n    'mtext',\n  ]);\n\n  const HTML_INTEGRATION_POINTS = addToSet({}, [\n    'foreignobject',\n    'annotation-xml',\n  ]);\n\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n    'title',\n    'style',\n    'font',\n    'a',\n    'script',\n  ]);\n\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n  addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n  addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n  const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n  addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n  /**\n   *\n   *\n   * @param  {Element} element a DOM element whose namespace is being checked\n   * @returns {boolean} Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function (element) {\n    let parent = getParentNode(element);\n\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template',\n      };\n    }\n\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return (\n          tagName === 'svg' &&\n          (parentTagName === 'annotation-xml' ||\n            MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n        );\n      }\n\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (\n        parent.namespaceURI === SVG_NAMESPACE &&\n        !HTML_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      if (\n        parent.namespaceURI === MATHML_NAMESPACE &&\n        !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return (\n        !ALL_MATHML_TAGS[tagName] &&\n        (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n      );\n    }\n\n    // For XHTML and XML documents that support custom namespaces\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      ALLOWED_NAMESPACES[element.namespaceURI]\n    ) {\n      return true;\n    }\n\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n\n  /**\n   * _forceRemove\n   *\n   * @param  {Node} node a DOM node\n   */\n  const _forceRemove = function (node) {\n    arrayPush(DOMPurify.removed, { element: node });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      node.parentNode.removeChild(node);\n    } catch (_) {\n      try {\n        node.outerHTML = emptyHTML;\n      } catch (_) {\n        node.remove();\n      }\n    }\n  };\n\n  /**\n   * _removeAttribute\n   *\n   * @param  {String} name an Attribute name\n   * @param  {Node} node a DOM node\n   */\n  const _removeAttribute = function (name, node) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: node.getAttributeNode(name),\n        from: node,\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: node,\n      });\n    }\n\n    node.removeAttribute(name);\n\n    // We void attribute values for unremovable \"is\"\" attributes\n    if (name === 'is' && !ALLOWED_ATTR[name]) {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(node);\n        } catch (_) {}\n      } else {\n        try {\n          node.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n\n  /**\n   * _initDocument\n   *\n   * @param  {String} dirty a string of dirty markup\n   * @return {Document} a DOM, filled with the dirty markup\n   */\n  const _initDocument = function (dirty) {\n    /* Create a HTML document */\n    let doc;\n    let leadingWhitespace;\n\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      NAMESPACE === HTML_NAMESPACE\n    ) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty =\n        '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n        dirty +\n        '</body></html>';\n    }\n\n    const dirtyPayload = trustedTypesPolicy\n      ? trustedTypesPolicy.createHTML(dirty)\n      : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT\n          ? emptyHTML\n          : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n\n    const body = doc.body || doc.documentElement;\n\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(\n        document.createTextNode(leadingWhitespace),\n        body.childNodes[0] || null\n      );\n    }\n\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(\n        doc,\n        WHOLE_DOCUMENT ? 'html' : 'body'\n      )[0];\n    }\n\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n\n  /**\n   * _createIterator\n   *\n   * @param  {Document} root document/fragment to create iterator for\n   * @return {Iterator} iterator instance\n   */\n  const _createIterator = function (root) {\n    return createNodeIterator.call(\n      root.ownerDocument || root,\n      root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT |\n        NodeFilter.SHOW_COMMENT |\n        NodeFilter.SHOW_TEXT |\n        NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n        NodeFilter.SHOW_CDATA_SECTION,\n      null,\n      false\n    );\n  };\n\n  /**\n   * _isClobbered\n   *\n   * @param  {Node} elm element to check for clobbering attacks\n   * @return {Boolean} true if clobbered, false if safe\n   */\n  const _isClobbered = function (elm) {\n    return (\n      elm instanceof HTMLFormElement &&\n      (typeof elm.nodeName !== 'string' ||\n        typeof elm.textContent !== 'string' ||\n        typeof elm.removeChild !== 'function' ||\n        !(elm.attributes instanceof NamedNodeMap) ||\n        typeof elm.removeAttribute !== 'function' ||\n        typeof elm.setAttribute !== 'function' ||\n        typeof elm.namespaceURI !== 'string' ||\n        typeof elm.insertBefore !== 'function' ||\n        typeof elm.hasChildNodes !== 'function')\n    );\n  };\n\n  /**\n   * _isNode\n   *\n   * @param  {Node} obj object to check whether it's a DOM node\n   * @return {Boolean} true is object is a DOM node\n   */\n  const _isNode = function (object) {\n    return typeof Node === 'object'\n      ? object instanceof Node\n      : object &&\n          typeof object === 'object' &&\n          typeof object.nodeType === 'number' &&\n          typeof object.nodeName === 'string';\n  };\n\n  /**\n   * _executeHook\n   * Execute user configurable hooks\n   *\n   * @param  {String} entryPoint  Name of the hook's entry point\n   * @param  {Node} currentNode node to work on with the hook\n   * @param  {Object} data additional hook parameters\n   */\n  const _executeHook = function (entryPoint, currentNode, data) {\n    if (!hooks[entryPoint]) {\n      return;\n    }\n\n    arrayForEach(hooks[entryPoint], (hook) => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  };\n\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   *\n   * @param   {Node} currentNode to check for permission to exist\n   * @return  {Boolean} true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function (currentNode) {\n    let content;\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeElements', currentNode, null);\n\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check if tagname contains Unicode */\n    if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n\n    /* Execute a hook if present */\n    _executeHook('uponSanitizeElement', currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS,\n    });\n\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (\n      currentNode.hasChildNodes() &&\n      !_isNode(currentNode.firstElementChild) &&\n      (!_isNode(currentNode.content) ||\n        !_isNode(currentNode.content.firstElementChild)) &&\n      regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n      regExpTest(/<[/\\w]/g, currentNode.textContent)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Mitigate a problem with templates inside select */\n    if (\n      tagName === 'select' &&\n      regExpTest(/<template/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any ocurrence of processing instructions */\n    if (currentNode.nodeType === 7) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any kind of possibly harmful comments */\n    if (\n      SAFE_FOR_XML &&\n      currentNode.nodeType === 8 &&\n      regExpTest(/<[/\\w]/g, currentNode.data)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove element if anything forbids its presence */\n    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n          regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n        )\n          return false;\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n        )\n          return false;\n      }\n\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if (\n      (tagName === 'noscript' ||\n        tagName === 'noembed' ||\n        tagName === 'noframes') &&\n      regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      content = stringReplace(content, MUSTACHE_EXPR, ' ');\n      content = stringReplace(content, ERB_EXPR, ' ');\n      content = stringReplace(content, TMPLIT_EXPR, ' ');\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n        currentNode.textContent = content;\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeElements', currentNode, null);\n\n    return false;\n  };\n\n  /**\n   * _isValidAttribute\n   *\n   * @param  {string} lcTag Lowercase tag name of containing element.\n   * @param  {string} lcName Lowercase attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function (lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (\n      SANITIZE_DOM &&\n      (lcName === 'id' || lcName === 'name') &&\n      (value in document || value in formElement)\n    ) {\n      return false;\n    }\n\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (\n      ALLOW_DATA_ATTR &&\n      !FORBID_ATTR[lcName] &&\n      regExpTest(DATA_ATTR, lcName)\n    ) {\n      // This attribute is safe\n    } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n      // This attribute is safe\n      /* Otherwise, check the name is permitted */\n    } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n        // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        (_basicCustomElementTest(lcTag) &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n          ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n            (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) ||\n        // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        (lcName === 'is' &&\n          CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n      ) {\n        // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n        // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n      } else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n      // This attribute is safe\n      /* Check no script, data or unknown possibly unsafe URI\n        unless we know URI values are safe for that attribute */\n    } else if (\n      regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Keep image data URIs alive if src/xlink:href is allowed */\n      /* Further prevent gadget XSS for dynamically built script tags */\n    } else if (\n      (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n      lcTag !== 'script' &&\n      stringIndexOf(value, 'data:') === 0 &&\n      DATA_URI_TAGS[lcTag]\n    ) {\n      // This attribute is safe\n      /* Allow unknown protocols: This provides support for links that\n        are handled by protocol handlers which may be unknown ahead of\n        time, e.g. fb:, spotify: */\n    } else if (\n      ALLOW_UNKNOWN_PROTOCOLS &&\n      !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Check for binary attributes */\n    } else if (value) {\n      return false;\n    } else {\n      // Binary attributes are safe at this point\n      /* Anything else, presume unsafe, do not add it back */\n    }\n\n    return true;\n  };\n\n  /**\n   * _basicCustomElementCheck\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   * @param {string} tagName name of the tag of the node to sanitize\n   */\n  const _basicCustomElementTest = function (tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param  {Node} currentNode to sanitize\n   */\n  const _sanitizeAttributes = function (currentNode) {\n    let attr;\n    let value;\n    let lcName;\n    let l;\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n    const { attributes } = currentNode;\n\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes) {\n      return;\n    }\n\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n    };\n    l = attributes.length;\n\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      attr = attributes[l];\n      const { name, namespaceURI } = attr;\n      value = name === 'value' ? attr.value : stringTrim(attr.value);\n      lcName = transformCaseFunc(name);\n\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n      value = hookEvent.attrValue;\n\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n\n      /* Remove attribute */\n      _removeAttribute(name, currentNode);\n\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        continue;\n      }\n\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        value = stringReplace(value, MUSTACHE_EXPR, ' ');\n        value = stringReplace(value, ERB_EXPR, ' ');\n        value = stringReplace(value, TMPLIT_EXPR, ' ');\n      }\n\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        continue;\n      }\n\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n\n      /* Handle attributes that require Trusted Types */\n      if (\n        trustedTypesPolicy &&\n        typeof trustedTypes === 'object' &&\n        typeof trustedTypes.getAttributeType === 'function'\n      ) {\n        if (namespaceURI) {\n          /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n        } else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML': {\n              value = trustedTypesPolicy.createHTML(value);\n              break;\n            }\n\n            case 'TrustedScriptURL': {\n              value = trustedTypesPolicy.createScriptURL(value);\n              break;\n            }\n\n            default: {\n              break;\n            }\n          }\n        }\n      }\n\n      /* Handle invalid data-* attribute set by try-catching it */\n      try {\n        if (namespaceURI) {\n          currentNode.setAttributeNS(namespaceURI, name, value);\n        } else {\n          /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n          currentNode.setAttribute(name, value);\n        }\n\n        if (_isClobbered(currentNode)) {\n          _forceRemove(currentNode);\n        } else {\n          arrayPop(DOMPurify.removed);\n        }\n      } catch (_) {}\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeAttributes', currentNode, null);\n  };\n\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param  {DocumentFragment} fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function (fragment) {\n    let shadowNode;\n    const shadowIterator = _createIterator(fragment);\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n    while ((shadowNode = shadowIterator.nextNode())) {\n      /* Execute a hook if present */\n      _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(shadowNode)) {\n        continue;\n      }\n\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(shadowNode);\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeShadowDOM', fragment, null);\n  };\n\n  /**\n   * Sanitize\n   * Public method providing core sanitation functionality\n   *\n   * @param {String|Node} dirty string or DOM node\n   * @param {Object} configuration object\n   */\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty, cfg = {}) {\n    let body;\n    let importedNode;\n    let currentNode;\n    let oldNode;\n    let returnNode;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n\n    /* Check we can run. Otherwise fall back or ignore */\n    if (!DOMPurify.isSupported) {\n      if (\n        typeof window.toStaticHTML === 'object' ||\n        typeof window.toStaticHTML === 'function'\n      ) {\n        if (typeof dirty === 'string') {\n          return window.toStaticHTML(dirty);\n        }\n\n        if (_isNode(dirty)) {\n          return window.toStaticHTML(dirty.outerHTML);\n        }\n      }\n\n      return dirty;\n    }\n\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate(\n            'root node is forbidden and cannot be sanitized in-place'\n          );\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (\n        !RETURN_DOM &&\n        !SAFE_FOR_TEMPLATES &&\n        !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1\n      ) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n          ? trustedTypesPolicy.createHTML(dirty)\n          : dirty;\n      }\n\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n\n    /* Get node iterator */\n    const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n    /* Now start iterating over the created document */\n    while ((currentNode = nodeIterator.nextNode())) {\n      /* Fix IE's strange behavior with manipulated textNodes #89 */\n      if (currentNode.nodeType === 3 && currentNode === oldNode) {\n        continue;\n      }\n\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(currentNode)) {\n        continue;\n      }\n\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(currentNode);\n\n      oldNode = currentNode;\n    }\n\n    oldNode = null;\n\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmod) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n\n      return returnNode;\n    }\n\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n    /* Serialize doctype if allowed */\n    if (\n      WHOLE_DOCUMENT &&\n      ALLOWED_TAGS['!doctype'] &&\n      body.ownerDocument &&\n      body.ownerDocument.doctype &&\n      body.ownerDocument.doctype.name &&\n      regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n    ) {\n      serializedHTML =\n        '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n      serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n      serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');\n    }\n\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n      ? trustedTypesPolicy.createHTML(serializedHTML)\n      : serializedHTML;\n  };\n\n  /**\n   * Public method to set the configuration once\n   * setConfig\n   *\n   * @param {Object} cfg configuration object\n   */\n  DOMPurify.setConfig = function (cfg) {\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n\n  /**\n   * Public method to remove the configuration\n   * clearConfig\n   *\n   */\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n\n  /**\n   * Public method to check if an attribute value is valid.\n   * Uses last set config, if any. Otherwise, uses config defaults.\n   * isValidAttribute\n   *\n   * @param  {string} tag Tag name of containing element.\n   * @param  {string} attr Attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n   */\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n\n  /**\n   * AddHook\n   * Public method to add DOMPurify hooks\n   *\n   * @param {String} entryPoint entry point for the hook to add\n   * @param {Function} hookFunction function to execute\n   */\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n\n    hooks[entryPoint] = hooks[entryPoint] || [];\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n\n  /**\n   * RemoveHook\n   * Public method to remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if more are present)\n   *\n   * @param {String} entryPoint entry point for the hook to remove\n   * @return {Function} removed(popped) hook\n   */\n  DOMPurify.removeHook = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      return arrayPop(hooks[entryPoint]);\n    }\n  };\n\n  /**\n   * RemoveHooks\n   * Public method to remove all DOMPurify hooks at a given entryPoint\n   *\n   * @param  {String} entryPoint entry point for the hooks to remove\n   */\n  DOMPurify.removeHooks = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      hooks[entryPoint] = [];\n    }\n  };\n\n  /**\n   * RemoveAllHooks\n   * Public method to remove all DOMPurify hooks\n   *\n   */\n  DOMPurify.removeAllHooks = function () {\n    hooks = {};\n  };\n\n  return DOMPurify;\n}\n\nexport default createDOMPurify();\n"],"names":["hasOwnProperty","Object","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","_ref","Reflect","apply","construct","fun","thisValue","args","x","Func","_construct","_toConsumableArray","arrayForEach","unapply","Array","prototype","forEach","arrayPop","pop","arrayPush","push","stringToLowerCase","String","toLowerCase","stringToString","toString","stringMatch","match","stringReplace","replace","stringIndexOf","indexOf","stringTrim","trim","regExpTest","RegExp","test","typeErrorCreate","unconstruct","TypeError","func","thisArg","_len","arguments","length","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","_transformCaseFunc","l","element","lcElement","clone","object","newObject","property","lookupGetter","prop","desc","get","value","fallbackValue","console","warn","html","svg","svgFilters","svgDisallowed","mathMl","mathMlDisallowed","text","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","getGlobal","window","_createTrustedTypesPolicy","trustedTypes","document","_typeof","createPolicy","suffix","ATTR_NAME","currentScript","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","_","createDOMPurify","undefined","DOMPurify","root","version","VERSION","removed","nodeType","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","documentMode","hooks","createHTMLDocument","EXPRESSIONS","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","concat","TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","ATTRS","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","Function","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","parentNode","removeChild","outerHTML","remove","_removeAttribute","name","attribute","getAttributeNode","from","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","call","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","nodeName","textContent","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","data","hook","_sanitizeElements","allowedTags","firstElementChild","_basicCustomElementTest","childCount","i","childClone","__removalCount","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attr","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","oldNode","returnNode","toStaticHTML","appendChild","firstChild","nodeIterator","shadowroot","shadowrootmod","serializedHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"purify.js","sources":["../src/utils.js","../src/tags.js","../src/attrs.js","../src/regexp.js","../src/purify.js"],"sourcesContent":["const {\n  hasOwnProperty,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!apply) {\n  apply = function (fun, thisValue, args) {\n    return fun.apply(thisValue, args);\n  };\n}\n\nif (!freeze) {\n  freeze = function (x) {\n    return x;\n  };\n}\n\nif (!seal) {\n  seal = function (x) {\n    return x;\n  };\n}\n\nif (!construct) {\n  construct = function (Func, args) {\n    return new Func(...args);\n  };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\nexport function unapply(func) {\n  return (thisArg, ...args) => apply(func, thisArg, args);\n}\n\nexport function unconstruct(func) {\n  return (...args) => construct(func, args);\n}\n\n/* Add properties to a lookup table */\nexport function addToSet(set, array, transformCaseFunc) {\n  transformCaseFunc = transformCaseFunc ?? stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n\n        element = lcElement;\n      }\n    }\n\n    set[element] = true;\n  }\n\n  return set;\n}\n\n/* Shallow clone an object */\nexport function clone(object) {\n  const newObject = create(null);\n\n  let property;\n  for (property in object) {\n    if (apply(hasOwnProperty, object, [property]) === true) {\n      newObject[property] = object[property];\n    }\n  }\n\n  return newObject;\n}\n\n/* IE10 doesn't support __lookupGetter__ so lets'\n * simulate it. It also automatically checks\n * if the prop is function or getter and behaves\n * accordingly. */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n\n    object = getPrototypeOf(object);\n  }\n\n  function fallbackValue(element) {\n    console.warn('fallback value for', element);\n    return null;\n  }\n\n  return fallbackValue;\n}\n\nexport {\n  // Array\n  arrayForEach,\n  arrayIndexOf,\n  arrayPop,\n  arrayPush,\n  arraySlice,\n  // Object\n  freeze,\n  getPrototypeOf,\n  getOwnPropertyDescriptor,\n  hasOwnProperty,\n  isFrozen,\n  setPrototypeOf,\n  seal,\n  // RegExp\n  regExpTest,\n  // String\n  stringIndexOf,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringTrim,\n  // Errors\n  typeErrorCreate,\n  // Other\n  lookupGetter,\n};\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'a',\n  'abbr',\n  'acronym',\n  'address',\n  'area',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'bdi',\n  'bdo',\n  'big',\n  'blink',\n  'blockquote',\n  'body',\n  'br',\n  'button',\n  'canvas',\n  'caption',\n  'center',\n  'cite',\n  'code',\n  'col',\n  'colgroup',\n  'content',\n  'data',\n  'datalist',\n  'dd',\n  'decorator',\n  'del',\n  'details',\n  'dfn',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'element',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'font',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hgroup',\n  'hr',\n  'html',\n  'i',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'map',\n  'mark',\n  'marquee',\n  'menu',\n  'menuitem',\n  'meter',\n  'nav',\n  'nobr',\n  'ol',\n  'optgroup',\n  'option',\n  'output',\n  'p',\n  'picture',\n  'pre',\n  'progress',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'section',\n  'select',\n  'shadow',\n  'small',\n  'source',\n  'spacer',\n  'span',\n  'strike',\n  'strong',\n  'style',\n  'sub',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'template',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'track',\n  'tt',\n  'u',\n  'ul',\n  'var',\n  'video',\n  'wbr',\n]);\n\n// SVG\nexport const svg = freeze([\n  'svg',\n  'a',\n  'altglyph',\n  'altglyphdef',\n  'altglyphitem',\n  'animatecolor',\n  'animatemotion',\n  'animatetransform',\n  'circle',\n  'clippath',\n  'defs',\n  'desc',\n  'ellipse',\n  'filter',\n  'font',\n  'g',\n  'glyph',\n  'glyphref',\n  'hkern',\n  'image',\n  'line',\n  'lineargradient',\n  'marker',\n  'mask',\n  'metadata',\n  'mpath',\n  'path',\n  'pattern',\n  'polygon',\n  'polyline',\n  'radialgradient',\n  'rect',\n  'stop',\n  'style',\n  'switch',\n  'symbol',\n  'text',\n  'textpath',\n  'title',\n  'tref',\n  'tspan',\n  'view',\n  'vkern',\n]);\n\nexport const svgFilters = freeze([\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDistantLight',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n]);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n  'animate',\n  'color-profile',\n  'cursor',\n  'discard',\n  'fedropshadow',\n  'font-face',\n  'font-face-format',\n  'font-face-name',\n  'font-face-src',\n  'font-face-uri',\n  'foreignobject',\n  'hatch',\n  'hatchpath',\n  'mesh',\n  'meshgradient',\n  'meshpatch',\n  'meshrow',\n  'missing-glyph',\n  'script',\n  'set',\n  'solidcolor',\n  'unknown',\n  'use',\n]);\n\nexport const mathMl = freeze([\n  'math',\n  'menclose',\n  'merror',\n  'mfenced',\n  'mfrac',\n  'mglyph',\n  'mi',\n  'mlabeledtr',\n  'mmultiscripts',\n  'mn',\n  'mo',\n  'mover',\n  'mpadded',\n  'mphantom',\n  'mroot',\n  'mrow',\n  'ms',\n  'mspace',\n  'msqrt',\n  'mstyle',\n  'msub',\n  'msup',\n  'msubsup',\n  'mtable',\n  'mtd',\n  'mtext',\n  'mtr',\n  'munder',\n  'munderover',\n]);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n  'maction',\n  'maligngroup',\n  'malignmark',\n  'mlongdiv',\n  'mscarries',\n  'mscarry',\n  'msgroup',\n  'mstack',\n  'msline',\n  'msrow',\n  'semantics',\n  'annotation',\n  'annotation-xml',\n  'mprescripts',\n  'none',\n]);\n\nexport const text = freeze(['#text']);\n","import { freeze } from './utils.js';\n\nexport const html = freeze([\n  'accept',\n  'action',\n  'align',\n  'alt',\n  'autocapitalize',\n  'autocomplete',\n  'autopictureinpicture',\n  'autoplay',\n  'background',\n  'bgcolor',\n  'border',\n  'capture',\n  'cellpadding',\n  'cellspacing',\n  'checked',\n  'cite',\n  'class',\n  'clear',\n  'color',\n  'cols',\n  'colspan',\n  'controls',\n  'controlslist',\n  'coords',\n  'crossorigin',\n  'datetime',\n  'decoding',\n  'default',\n  'dir',\n  'disabled',\n  'disablepictureinpicture',\n  'disableremoteplayback',\n  'download',\n  'draggable',\n  'enctype',\n  'enterkeyhint',\n  'face',\n  'for',\n  'headers',\n  'height',\n  'hidden',\n  'high',\n  'href',\n  'hreflang',\n  'id',\n  'inputmode',\n  'integrity',\n  'ismap',\n  'kind',\n  'label',\n  'lang',\n  'list',\n  'loading',\n  'loop',\n  'low',\n  'max',\n  'maxlength',\n  'media',\n  'method',\n  'min',\n  'minlength',\n  'multiple',\n  'muted',\n  'name',\n  'nonce',\n  'noshade',\n  'novalidate',\n  'nowrap',\n  'open',\n  'optimum',\n  'pattern',\n  'placeholder',\n  'playsinline',\n  'poster',\n  'preload',\n  'pubdate',\n  'radiogroup',\n  'readonly',\n  'rel',\n  'required',\n  'rev',\n  'reversed',\n  'role',\n  'rows',\n  'rowspan',\n  'spellcheck',\n  'scope',\n  'selected',\n  'shape',\n  'size',\n  'sizes',\n  'span',\n  'srclang',\n  'start',\n  'src',\n  'srcset',\n  'step',\n  'style',\n  'summary',\n  'tabindex',\n  'title',\n  'translate',\n  'type',\n  'usemap',\n  'valign',\n  'value',\n  'width',\n  'xmlns',\n  'slot',\n]);\n\nexport const svg = freeze([\n  'accent-height',\n  'accumulate',\n  'additive',\n  'alignment-baseline',\n  'ascent',\n  'attributename',\n  'attributetype',\n  'azimuth',\n  'basefrequency',\n  'baseline-shift',\n  'begin',\n  'bias',\n  'by',\n  'class',\n  'clip',\n  'clippathunits',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'color-interpolation',\n  'color-interpolation-filters',\n  'color-profile',\n  'color-rendering',\n  'cx',\n  'cy',\n  'd',\n  'dx',\n  'dy',\n  'diffuseconstant',\n  'direction',\n  'display',\n  'divisor',\n  'dur',\n  'edgemode',\n  'elevation',\n  'end',\n  'fill',\n  'fill-opacity',\n  'fill-rule',\n  'filter',\n  'filterunits',\n  'flood-color',\n  'flood-opacity',\n  'font-family',\n  'font-size',\n  'font-size-adjust',\n  'font-stretch',\n  'font-style',\n  'font-variant',\n  'font-weight',\n  'fx',\n  'fy',\n  'g1',\n  'g2',\n  'glyph-name',\n  'glyphref',\n  'gradientunits',\n  'gradienttransform',\n  'height',\n  'href',\n  'id',\n  'image-rendering',\n  'in',\n  'in2',\n  'k',\n  'k1',\n  'k2',\n  'k3',\n  'k4',\n  'kerning',\n  'keypoints',\n  'keysplines',\n  'keytimes',\n  'lang',\n  'lengthadjust',\n  'letter-spacing',\n  'kernelmatrix',\n  'kernelunitlength',\n  'lighting-color',\n  'local',\n  'marker-end',\n  'marker-mid',\n  'marker-start',\n  'markerheight',\n  'markerunits',\n  'markerwidth',\n  'maskcontentunits',\n  'maskunits',\n  'max',\n  'mask',\n  'media',\n  'method',\n  'mode',\n  'min',\n  'name',\n  'numoctaves',\n  'offset',\n  'operator',\n  'opacity',\n  'order',\n  'orient',\n  'orientation',\n  'origin',\n  'overflow',\n  'paint-order',\n  'path',\n  'pathlength',\n  'patterncontentunits',\n  'patterntransform',\n  'patternunits',\n  'points',\n  'preservealpha',\n  'preserveaspectratio',\n  'primitiveunits',\n  'r',\n  'rx',\n  'ry',\n  'radius',\n  'refx',\n  'refy',\n  'repeatcount',\n  'repeatdur',\n  'restart',\n  'result',\n  'rotate',\n  'scale',\n  'seed',\n  'shape-rendering',\n  'specularconstant',\n  'specularexponent',\n  'spreadmethod',\n  'startoffset',\n  'stddeviation',\n  'stitchtiles',\n  'stop-color',\n  'stop-opacity',\n  'stroke-dasharray',\n  'stroke-dashoffset',\n  'stroke-linecap',\n  'stroke-linejoin',\n  'stroke-miterlimit',\n  'stroke-opacity',\n  'stroke',\n  'stroke-width',\n  'style',\n  'surfacescale',\n  'systemlanguage',\n  'tabindex',\n  'targetx',\n  'targety',\n  'transform',\n  'transform-origin',\n  'text-anchor',\n  'text-decoration',\n  'text-rendering',\n  'textlength',\n  'type',\n  'u1',\n  'u2',\n  'unicode',\n  'values',\n  'viewbox',\n  'visibility',\n  'version',\n  'vert-adv-y',\n  'vert-origin-x',\n  'vert-origin-y',\n  'width',\n  'word-spacing',\n  'wrap',\n  'writing-mode',\n  'xchannelselector',\n  'ychannelselector',\n  'x',\n  'x1',\n  'x2',\n  'xmlns',\n  'y',\n  'y1',\n  'y2',\n  'z',\n  'zoomandpan',\n]);\n\nexport const mathMl = freeze([\n  'accent',\n  'accentunder',\n  'align',\n  'bevelled',\n  'close',\n  'columnsalign',\n  'columnlines',\n  'columnspan',\n  'denomalign',\n  'depth',\n  'dir',\n  'display',\n  'displaystyle',\n  'encoding',\n  'fence',\n  'frame',\n  'height',\n  'href',\n  'id',\n  'largeop',\n  'length',\n  'linethickness',\n  'lspace',\n  'lquote',\n  'mathbackground',\n  'mathcolor',\n  'mathsize',\n  'mathvariant',\n  'maxsize',\n  'minsize',\n  'movablelimits',\n  'notation',\n  'numalign',\n  'open',\n  'rowalign',\n  'rowlines',\n  'rowspacing',\n  'rowspan',\n  'rspace',\n  'rquote',\n  'scriptlevel',\n  'scriptminsize',\n  'scriptsizemultiplier',\n  'selection',\n  'separator',\n  'separators',\n  'stretchy',\n  'subscriptshift',\n  'supscriptshift',\n  'symmetric',\n  'voffset',\n  'width',\n  'xmlns',\n]);\n\nexport const xml = freeze([\n  'xlink:href',\n  'xml:id',\n  'xlink:title',\n  'xml:space',\n  'xmlns:xlink',\n]);\n","import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n  /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n  /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n","import * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n  addToSet,\n  clone,\n  freeze,\n  arrayForEach,\n  arrayPop,\n  arrayPush,\n  stringMatch,\n  stringReplace,\n  stringToLowerCase,\n  stringToString,\n  stringIndexOf,\n  stringTrim,\n  regExpTest,\n  typeErrorCreate,\n  lookupGetter,\n} from './utils.js';\n\nconst getGlobal = () => (typeof window === 'undefined' ? null : window);\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {Document} document The document object (to determine policy name suffix)\n * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported).\n */\nconst _createTrustedTypesPolicy = function (trustedTypes, document) {\n  if (\n    typeof trustedTypes !== 'object' ||\n    typeof trustedTypes.createPolicy !== 'function'\n  ) {\n    return null;\n  }\n\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (\n    document.currentScript &&\n    document.currentScript.hasAttribute(ATTR_NAME)\n  ) {\n    suffix = document.currentScript.getAttribute(ATTR_NAME);\n  }\n\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      },\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn(\n      'TrustedTypes policy ' + policyName + ' could not be created.'\n    );\n    return null;\n  }\n};\n\nfunction createDOMPurify(window = getGlobal()) {\n  const DOMPurify = (root) => createDOMPurify(root);\n\n  /**\n   * Version label, exposed for easier checks\n   * if DOMPurify is up to date or not\n   */\n  DOMPurify.version = VERSION;\n\n  /**\n   * Array of elements that DOMPurify removed during sanitation.\n   * Empty if nothing was removed.\n   */\n  DOMPurify.removed = [];\n\n  if (!window || !window.document || window.document.nodeType !== 9) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n\n    return DOMPurify;\n  }\n\n  const originalDocument = window.document;\n\n  let { document } = window;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes,\n  } = window;\n\n  const ElementPrototype = Element.prototype;\n\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n\n  const trustedTypesPolicy = _createTrustedTypesPolicy(\n    trustedTypes,\n    originalDocument\n  );\n  const emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName,\n  } = document;\n  const { importNode } = originalDocument;\n\n  let documentMode = {};\n  try {\n    documentMode = clone(document).documentMode ? document.documentMode : {};\n  } catch (_) {}\n\n  let hooks = {};\n\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported =\n    typeof getParentNode === 'function' &&\n    implementation &&\n    implementation.createHTMLDocument !== undefined &&\n    documentMode !== 9;\n\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT,\n  } = EXPRESSIONS;\n\n  let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n    ...TAGS.html,\n    ...TAGS.svg,\n    ...TAGS.svgFilters,\n    ...TAGS.mathMl,\n    ...TAGS.text,\n  ]);\n\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n    ...ATTRS.html,\n    ...ATTRS.svg,\n    ...ATTRS.mathMl,\n    ...ATTRS.xml,\n  ]);\n\n  /*\n   * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(\n    Object.create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null,\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false,\n      },\n    })\n  );\n\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n    'annotation-xml',\n    'audio',\n    'colgroup',\n    'desc',\n    'foreignobject',\n    'head',\n    'iframe',\n    'math',\n    'mi',\n    'mn',\n    'mo',\n    'ms',\n    'mtext',\n    'noembed',\n    'noframes',\n    'noscript',\n    'plaintext',\n    'script',\n    'style',\n    'svg',\n    'template',\n    'thead',\n    'title',\n    'video',\n    'xmp',\n  ]);\n\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n    'audio',\n    'video',\n    'img',\n    'source',\n    'image',\n    'track',\n  ]);\n\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n    'alt',\n    'class',\n    'for',\n    'id',\n    'label',\n    'name',\n    'pattern',\n    'placeholder',\n    'role',\n    'summary',\n    'title',\n    'value',\n    'style',\n    'xmlns',\n  ]);\n\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n    {},\n    [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n    stringToString\n  );\n\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc;\n\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n\n  const formElement = document.createElement('form');\n\n  const isRegexOrFunction = function (testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n\n  /**\n   * _parseConfig\n   *\n   * @param  {Object} cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function (cfg) {\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n\n    PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n        ? (PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE)\n        : (PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE);\n\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc =\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n        ? stringToString\n        : stringToLowerCase;\n\n    /* Set configuration parameters */\n    ALLOWED_TAGS =\n      'ALLOWED_TAGS' in cfg\n        ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n        : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR =\n      'ALLOWED_ATTR' in cfg\n        ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n        : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES =\n      'ALLOWED_NAMESPACES' in cfg\n        ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n        : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES =\n      'ADD_URI_SAFE_ATTR' in cfg\n        ? addToSet(\n            clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n            cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n            transformCaseFunc // eslint-disable-line indent\n          ) // eslint-disable-line indent\n        : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS =\n      'ADD_DATA_URI_TAGS' in cfg\n        ? addToSet(\n            clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n            cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n            transformCaseFunc // eslint-disable-line indent\n          ) // eslint-disable-line indent\n        : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS =\n      'FORBID_CONTENTS' in cfg\n        ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n        : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS =\n      'FORBID_TAGS' in cfg\n        ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n        : {};\n    FORBID_ATTR =\n      'FORBID_ATTR' in cfg\n        ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n        : {};\n    USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n    ) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n        cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n\n    if (\n      cfg.CUSTOM_ELEMENT_HANDLING &&\n      typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n        'boolean'\n    ) {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n        cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, [...TAGS.text]);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, TAGS.html);\n        addToSet(ALLOWED_ATTR, ATTRS.html);\n      }\n\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n        addToSet(ALLOWED_ATTR, ATTRS.svg);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, TAGS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n        addToSet(ALLOWED_ATTR, ATTRS.xml);\n      }\n    }\n\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n        ALLOWED_TAGS = clone(ALLOWED_TAGS);\n      }\n\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n    }\n\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n    }\n\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n\n    CONFIG = cfg;\n  };\n\n  const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n    'mi',\n    'mo',\n    'mn',\n    'ms',\n    'mtext',\n  ]);\n\n  const HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n    'title',\n    'style',\n    'font',\n    'a',\n    'script',\n  ]);\n\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, TAGS.svg);\n  addToSet(ALL_SVG_TAGS, TAGS.svgFilters);\n  addToSet(ALL_SVG_TAGS, TAGS.svgDisallowed);\n\n  const ALL_MATHML_TAGS = addToSet({}, TAGS.mathMl);\n  addToSet(ALL_MATHML_TAGS, TAGS.mathMlDisallowed);\n\n  /**\n   *\n   *\n   * @param  {Element} element a DOM element whose namespace is being checked\n   * @returns {boolean} Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function (element) {\n    let parent = getParentNode(element);\n\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template',\n      };\n    }\n\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return (\n          tagName === 'svg' &&\n          (parentTagName === 'annotation-xml' ||\n            MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n        );\n      }\n\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (\n        parent.namespaceURI === SVG_NAMESPACE &&\n        !HTML_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      if (\n        parent.namespaceURI === MATHML_NAMESPACE &&\n        !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n      ) {\n        return false;\n      }\n\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return (\n        !ALL_MATHML_TAGS[tagName] &&\n        (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n      );\n    }\n\n    // For XHTML and XML documents that support custom namespaces\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      ALLOWED_NAMESPACES[element.namespaceURI]\n    ) {\n      return true;\n    }\n\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n\n  /**\n   * _forceRemove\n   *\n   * @param  {Node} node a DOM node\n   */\n  const _forceRemove = function (node) {\n    arrayPush(DOMPurify.removed, { element: node });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      node.parentNode.removeChild(node);\n    } catch (_) {\n      try {\n        node.outerHTML = emptyHTML;\n      } catch (_) {\n        node.remove();\n      }\n    }\n  };\n\n  /**\n   * _removeAttribute\n   *\n   * @param  {String} name an Attribute name\n   * @param  {Node} node a DOM node\n   */\n  const _removeAttribute = function (name, node) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: node.getAttributeNode(name),\n        from: node,\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: node,\n      });\n    }\n\n    node.removeAttribute(name);\n\n    // We void attribute values for unremovable \"is\"\" attributes\n    if (name === 'is' && !ALLOWED_ATTR[name]) {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(node);\n        } catch (_) {}\n      } else {\n        try {\n          node.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n\n  /**\n   * _initDocument\n   *\n   * @param  {String} dirty a string of dirty markup\n   * @return {Document} a DOM, filled with the dirty markup\n   */\n  const _initDocument = function (dirty) {\n    /* Create a HTML document */\n    let doc;\n    let leadingWhitespace;\n\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n\n    if (\n      PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n      NAMESPACE === HTML_NAMESPACE\n    ) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty =\n        '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' +\n        dirty +\n        '</body></html>';\n    }\n\n    const dirtyPayload = trustedTypesPolicy\n      ? trustedTypesPolicy.createHTML(dirty)\n      : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT\n          ? emptyHTML\n          : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n\n    const body = doc.body || doc.documentElement;\n\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(\n        document.createTextNode(leadingWhitespace),\n        body.childNodes[0] || null\n      );\n    }\n\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(\n        doc,\n        WHOLE_DOCUMENT ? 'html' : 'body'\n      )[0];\n    }\n\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n\n  /**\n   * _createIterator\n   *\n   * @param  {Document} root document/fragment to create iterator for\n   * @return {Iterator} iterator instance\n   */\n  const _createIterator = function (root) {\n    return createNodeIterator.call(\n      root.ownerDocument || root,\n      root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT |\n        NodeFilter.SHOW_COMMENT |\n        NodeFilter.SHOW_TEXT |\n        NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n        NodeFilter.SHOW_CDATA_SECTION,\n      null,\n      false\n    );\n  };\n\n  /**\n   * _isClobbered\n   *\n   * @param  {Node} elm element to check for clobbering attacks\n   * @return {Boolean} true if clobbered, false if safe\n   */\n  const _isClobbered = function (elm) {\n    return (\n      elm instanceof HTMLFormElement &&\n      (typeof elm.nodeName !== 'string' ||\n        typeof elm.textContent !== 'string' ||\n        typeof elm.removeChild !== 'function' ||\n        !(elm.attributes instanceof NamedNodeMap) ||\n        typeof elm.removeAttribute !== 'function' ||\n        typeof elm.setAttribute !== 'function' ||\n        typeof elm.namespaceURI !== 'string' ||\n        typeof elm.insertBefore !== 'function' ||\n        typeof elm.hasChildNodes !== 'function')\n    );\n  };\n\n  /**\n   * _isNode\n   *\n   * @param  {Node} obj object to check whether it's a DOM node\n   * @return {Boolean} true is object is a DOM node\n   */\n  const _isNode = function (object) {\n    return typeof Node === 'object'\n      ? object instanceof Node\n      : object &&\n          typeof object === 'object' &&\n          typeof object.nodeType === 'number' &&\n          typeof object.nodeName === 'string';\n  };\n\n  /**\n   * _executeHook\n   * Execute user configurable hooks\n   *\n   * @param  {String} entryPoint  Name of the hook's entry point\n   * @param  {Node} currentNode node to work on with the hook\n   * @param  {Object} data additional hook parameters\n   */\n  const _executeHook = function (entryPoint, currentNode, data) {\n    if (!hooks[entryPoint]) {\n      return;\n    }\n\n    arrayForEach(hooks[entryPoint], (hook) => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  };\n\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   *\n   * @param   {Node} currentNode to check for permission to exist\n   * @return  {Boolean} true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function (currentNode) {\n    let content;\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeElements', currentNode, null);\n\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check if tagname contains Unicode */\n    if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n\n    /* Execute a hook if present */\n    _executeHook('uponSanitizeElement', currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS,\n    });\n\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (\n      currentNode.hasChildNodes() &&\n      !_isNode(currentNode.firstElementChild) &&\n      (!_isNode(currentNode.content) ||\n        !_isNode(currentNode.content.firstElementChild)) &&\n      regExpTest(/<[/\\w]/g, currentNode.innerHTML) &&\n      regExpTest(/<[/\\w]/g, currentNode.textContent)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Mitigate a problem with templates inside select */\n    if (\n      tagName === 'select' &&\n      regExpTest(/<template/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any ocurrence of processing instructions */\n    if (currentNode.nodeType === 7) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any kind of possibly harmful comments */\n    if (\n      SAFE_FOR_XML &&\n      currentNode.nodeType === 8 &&\n      regExpTest(/<[/\\w]/g, currentNode.data)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove element if anything forbids its presence */\n    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n          regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n        )\n          return false;\n        if (\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n          CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n        )\n          return false;\n      }\n\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if (\n      (tagName === 'noscript' ||\n        tagName === 'noembed' ||\n        tagName === 'noframes') &&\n      regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n    ) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      content = stringReplace(content, MUSTACHE_EXPR, ' ');\n      content = stringReplace(content, ERB_EXPR, ' ');\n      content = stringReplace(content, TMPLIT_EXPR, ' ');\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n        currentNode.textContent = content;\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeElements', currentNode, null);\n\n    return false;\n  };\n\n  /**\n   * _isValidAttribute\n   *\n   * @param  {string} lcTag Lowercase tag name of containing element.\n   * @param  {string} lcName Lowercase attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function (lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (\n      SANITIZE_DOM &&\n      (lcName === 'id' || lcName === 'name') &&\n      (value in document || value in formElement)\n    ) {\n      return false;\n    }\n\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (\n      ALLOW_DATA_ATTR &&\n      !FORBID_ATTR[lcName] &&\n      regExpTest(DATA_ATTR, lcName)\n    ) {\n      // This attribute is safe\n    } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n      // This attribute is safe\n      /* Otherwise, check the name is permitted */\n    } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n        // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        (_basicCustomElementTest(lcTag) &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n          ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n            (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) ||\n        // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        (lcName === 'is' &&\n          CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n          ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n            regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n            (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n              CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n      ) {\n        // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n        // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n      } else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n      // This attribute is safe\n      /* Check no script, data or unknown possibly unsafe URI\n        unless we know URI values are safe for that attribute */\n    } else if (\n      regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Keep image data URIs alive if src/xlink:href is allowed */\n      /* Further prevent gadget XSS for dynamically built script tags */\n    } else if (\n      (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n      lcTag !== 'script' &&\n      stringIndexOf(value, 'data:') === 0 &&\n      DATA_URI_TAGS[lcTag]\n    ) {\n      // This attribute is safe\n      /* Allow unknown protocols: This provides support for links that\n        are handled by protocol handlers which may be unknown ahead of\n        time, e.g. fb:, spotify: */\n    } else if (\n      ALLOW_UNKNOWN_PROTOCOLS &&\n      !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n    ) {\n      // This attribute is safe\n      /* Check for binary attributes */\n    } else if (value) {\n      return false;\n    } else {\n      // Binary attributes are safe at this point\n      /* Anything else, presume unsafe, do not add it back */\n    }\n\n    return true;\n  };\n\n  /**\n   * _basicCustomElementCheck\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   * @param {string} tagName name of the tag of the node to sanitize\n   */\n  const _basicCustomElementTest = function (tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param  {Node} currentNode to sanitize\n   */\n  const _sanitizeAttributes = function (currentNode) {\n    let attr;\n    let value;\n    let lcName;\n    let l;\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n    const { attributes } = currentNode;\n\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes) {\n      return;\n    }\n\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n    };\n    l = attributes.length;\n\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      attr = attributes[l];\n      const { name, namespaceURI } = attr;\n      value = name === 'value' ? attr.value : stringTrim(attr.value);\n      lcName = transformCaseFunc(name);\n\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n      value = hookEvent.attrValue;\n\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n\n      /* Remove attribute */\n      _removeAttribute(name, currentNode);\n\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        continue;\n      }\n\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        value = stringReplace(value, MUSTACHE_EXPR, ' ');\n        value = stringReplace(value, ERB_EXPR, ' ');\n        value = stringReplace(value, TMPLIT_EXPR, ' ');\n      }\n\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        continue;\n      }\n\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Handle attributes that require Trusted Types */\n      if (\n        trustedTypesPolicy &&\n        typeof trustedTypes === 'object' &&\n        typeof trustedTypes.getAttributeType === 'function'\n      ) {\n        if (namespaceURI) {\n          /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n        } else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML': {\n              value = trustedTypesPolicy.createHTML(value);\n              break;\n            }\n\n            case 'TrustedScriptURL': {\n              value = trustedTypesPolicy.createScriptURL(value);\n              break;\n            }\n\n            default: {\n              break;\n            }\n          }\n        }\n      }\n\n      /* Handle invalid data-* attribute set by try-catching it */\n      try {\n        if (namespaceURI) {\n          currentNode.setAttributeNS(namespaceURI, name, value);\n        } else {\n          /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n          currentNode.setAttribute(name, value);\n        }\n\n        if (_isClobbered(currentNode)) {\n          _forceRemove(currentNode);\n        } else {\n          arrayPop(DOMPurify.removed);\n        }\n      } catch (_) {}\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeAttributes', currentNode, null);\n  };\n\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param  {DocumentFragment} fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function (fragment) {\n    let shadowNode;\n    const shadowIterator = _createIterator(fragment);\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n    while ((shadowNode = shadowIterator.nextNode())) {\n      /* Execute a hook if present */\n      _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(shadowNode)) {\n        continue;\n      }\n\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(shadowNode);\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeShadowDOM', fragment, null);\n  };\n\n  /**\n   * Sanitize\n   * Public method providing core sanitation functionality\n   *\n   * @param {String|Node} dirty string or DOM node\n   * @param {Object} configuration object\n   */\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty, cfg = {}) {\n    let body;\n    let importedNode;\n    let currentNode;\n    let oldNode;\n    let returnNode;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n\n    /* Check we can run. Otherwise fall back or ignore */\n    if (!DOMPurify.isSupported) {\n      if (\n        typeof window.toStaticHTML === 'object' ||\n        typeof window.toStaticHTML === 'function'\n      ) {\n        if (typeof dirty === 'string') {\n          return window.toStaticHTML(dirty);\n        }\n\n        if (_isNode(dirty)) {\n          return window.toStaticHTML(dirty.outerHTML);\n        }\n      }\n\n      return dirty;\n    }\n\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate(\n            'root node is forbidden and cannot be sanitized in-place'\n          );\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (\n        !RETURN_DOM &&\n        !SAFE_FOR_TEMPLATES &&\n        !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1\n      ) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n          ? trustedTypesPolicy.createHTML(dirty)\n          : dirty;\n      }\n\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n\n    /* Get node iterator */\n    const nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n\n    /* Now start iterating over the created document */\n    while ((currentNode = nodeIterator.nextNode())) {\n      /* Fix IE's strange behavior with manipulated textNodes #89 */\n      if (currentNode.nodeType === 3 && currentNode === oldNode) {\n        continue;\n      }\n\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(currentNode)) {\n        continue;\n      }\n\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(currentNode);\n\n      oldNode = currentNode;\n    }\n\n    oldNode = null;\n\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmod) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n\n      return returnNode;\n    }\n\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n    /* Serialize doctype if allowed */\n    if (\n      WHOLE_DOCUMENT &&\n      ALLOWED_TAGS['!doctype'] &&\n      body.ownerDocument &&\n      body.ownerDocument.doctype &&\n      body.ownerDocument.doctype.name &&\n      regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n    ) {\n      serializedHTML =\n        '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');\n      serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');\n      serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');\n    }\n\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n      ? trustedTypesPolicy.createHTML(serializedHTML)\n      : serializedHTML;\n  };\n\n  /**\n   * Public method to set the configuration once\n   * setConfig\n   *\n   * @param {Object} cfg configuration object\n   */\n  DOMPurify.setConfig = function (cfg) {\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n\n  /**\n   * Public method to remove the configuration\n   * clearConfig\n   *\n   */\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n\n  /**\n   * Public method to check if an attribute value is valid.\n   * Uses last set config, if any. Otherwise, uses config defaults.\n   * isValidAttribute\n   *\n   * @param  {string} tag Tag name of containing element.\n   * @param  {string} attr Attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n   */\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n\n  /**\n   * AddHook\n   * Public method to add DOMPurify hooks\n   *\n   * @param {String} entryPoint entry point for the hook to add\n   * @param {Function} hookFunction function to execute\n   */\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n\n    hooks[entryPoint] = hooks[entryPoint] || [];\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n\n  /**\n   * RemoveHook\n   * Public method to remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if more are present)\n   *\n   * @param {String} entryPoint entry point for the hook to remove\n   * @return {Function} removed(popped) hook\n   */\n  DOMPurify.removeHook = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      return arrayPop(hooks[entryPoint]);\n    }\n  };\n\n  /**\n   * RemoveHooks\n   * Public method to remove all DOMPurify hooks at a given entryPoint\n   *\n   * @param  {String} entryPoint entry point for the hooks to remove\n   */\n  DOMPurify.removeHooks = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      hooks[entryPoint] = [];\n    }\n  };\n\n  /**\n   * RemoveAllHooks\n   * Public method to remove all DOMPurify hooks\n   *\n   */\n  DOMPurify.removeAllHooks = function () {\n    hooks = {};\n  };\n\n  return DOMPurify;\n}\n\nexport default createDOMPurify();\n"],"names":["hasOwnProperty","Object","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","_ref","Reflect","apply","construct","fun","thisValue","args","x","Func","_construct","_toConsumableArray","arrayForEach","unapply","Array","prototype","forEach","arrayPop","pop","arrayPush","push","stringToLowerCase","String","toLowerCase","stringToString","toString","stringMatch","match","stringReplace","replace","stringIndexOf","indexOf","stringTrim","trim","regExpTest","RegExp","test","typeErrorCreate","unconstruct","TypeError","func","thisArg","_len","arguments","length","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","_transformCaseFunc","l","element","lcElement","clone","object","newObject","property","lookupGetter","prop","desc","get","value","fallbackValue","console","warn","html","svg","svgFilters","svgDisallowed","mathMl","mathMlDisallowed","text","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","getGlobal","window","_createTrustedTypesPolicy","trustedTypes","document","_typeof","createPolicy","suffix","ATTR_NAME","currentScript","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","_","createDOMPurify","undefined","DOMPurify","root","version","VERSION","removed","nodeType","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","documentMode","hooks","createHTMLDocument","EXPRESSIONS","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","concat","TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","ATTRS","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","Function","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","parentNode","removeChild","outerHTML","remove","_removeAttribute","name","attribute","getAttributeNode","from","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","call","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","nodeName","textContent","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","data","hook","_sanitizeElements","allowedTags","firstElementChild","_basicCustomElementTest","childCount","i","childClone","__removalCount","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attr","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","oldNode","returnNode","toStaticHTML","appendChild","firstChild","nodeIterator","shadowroot","shadowrootmod","serializedHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks"],"mappings":"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"}
\ No newline at end of file
diff --git a/handsontable/dist/handsontable.css b/handsontable/dist/handsontable.css
index f58dd8a40b..462bdd8d34 100644
--- a/handsontable/dist/handsontable.css
+++ b/handsontable/dist/handsontable.css
@@ -25,8 +25,8 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:33:19)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:30)
  */
 /**
  * Fix for bootstrap styles
diff --git a/handsontable/dist/handsontable.full.css b/handsontable/dist/handsontable.full.css
index 0a5aa92e72..e0b37d5c21 100644
--- a/handsontable/dist/handsontable.full.css
+++ b/handsontable/dist/handsontable.full.css
@@ -25,8 +25,8 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:33:19)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:30)
  */
 /**
  * Fix for bootstrap styles
diff --git a/handsontable/dist/handsontable.full.js b/handsontable/dist/handsontable.full.js
index 0113969943..da99105f33 100644
--- a/handsontable/dist/handsontable.full.js
+++ b/handsontable/dist/handsontable.full.js
@@ -25,8 +25,8 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:33:19)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:30)
  */
 (function webpackUniversalModuleDefinition(root, factory) {
 	if(typeof exports === 'object' && typeof module === 'object')
@@ -42679,8 +42679,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
 Handsontable.CellCoords = _src.CellCoords;
 Handsontable.CellRange = _src.CellRange;
 Handsontable.packageName = 'handsontable';
-Handsontable.buildDate = "30/09/2024 12:33:19";
-Handsontable.version = "14.6.0";
+Handsontable.buildDate = "15/10/2024 15:43:30";
+Handsontable.version = "14.6.1";
 Handsontable.languages = {
   dictionaryKeys: _registry.dictionaryKeys,
   getLanguageDictionary: _registry.getLanguageDictionary,
@@ -51665,7 +51665,7 @@ function sanitize(string, options) {
 /* 329 */
 /***/ (function(module, __unused_webpack_exports, __webpack_require__) {

-/*! @license DOMPurify 2.5.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.6/LICENSE */
+/*! @license DOMPurify 2.5.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.5.7/LICENSE */

 (function (global, factory) {
    true ? module.exports = factory() :
@@ -51953,7 +51953,7 @@ function sanitize(string, options) {
      * Version label, exposed for easier checks
      * if DOMPurify is up to date or not
      */
-    DOMPurify.version = '2.5.6';
+    DOMPurify.version = '2.5.7';

     /**
      * Array of elements that DOMPurify removed during sanitation.
@@ -52340,7 +52340,7 @@ function sanitize(string, options) {
       CONFIG = cfg;
     };
     var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);
-    var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'annotation-xml']);
+    var HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);

     // Certain elements are allowed in both SVG and HTML
     // namespace. We need to specify them explicitly
@@ -52816,12 +52816,6 @@ function sanitize(string, options) {
         _executeHook('uponSanitizeAttribute', currentNode, hookEvent);
         value = hookEvent.attrValue;

-        /* Work around a security issue with comments inside attributes */
-        if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value)) {
-          _removeAttribute(name, currentNode);
-          continue;
-        }
-
         /* Did the hooks approve of the attribute? */
         if (hookEvent.forceKeepAttr) {
           continue;
@@ -52865,6 +52859,12 @@ function sanitize(string, options) {
           value = SANITIZE_NAMED_PROPS_PREFIX + value;
         }

+        /* Work around a security issue with comments inside attributes */
+        if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value)) {
+          _removeAttribute(name, currentNode);
+          continue;
+        }
+
         /* Handle attributes that require Trusted Types */
         if (trustedTypesPolicy && _typeof(trustedTypes) === 'object' && typeof trustedTypes.getAttributeType === 'function') {
           if (namespaceURI) ; else {
@@ -53354,7 +53354,7 @@ const domMessages = {
 function _injectProductInfo(key, element) {
   const hasValidType = !isEmpty(key);
   const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
-  const hotVersion = "14.6.0";
+  const hotVersion = "14.6.1";
   let keyValidityDate;
   let consoleMessageState = 'invalid';
   let domMessageState = 'invalid';
@@ -53362,7 +53362,7 @@ function _injectProductInfo(key, element) {
   const schemaValidity = _checkKeySchema(key);
   if (hasValidType || isNonCommercial || schemaValidity) {
     if (schemaValidity) {
-      const releaseDate = (0, _moment.default)("01/10/2024", 'DD/MM/YYYY');
+      const releaseDate = (0, _moment.default)("17/10/2024", 'DD/MM/YYYY');
       const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
       const keyValidityDays = _extractTime(key);
       keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
@@ -99315,9 +99315,6 @@ class TextEditor extends _baseEditor.BaseEditor {
     // Makes the element recognizable by Hot as its own
     // component's element.
     (0, _element.setAttribute)(this.TEXTAREA, [['data-hot-input', ''], (0, _a11y.A11Y_TABINDEX)(-1)]);
-    if (this.hot.getSettings().ariaTags) {
-      (0, _element.setAttribute)(this.TEXTAREA, [(0, _a11y.A11Y_HIDDEN)()]);
-    }
     (0, _element.addClass)(this.TEXTAREA, 'handsontableInput');
     this.textareaStyle = this.TEXTAREA.style;
     this.textareaStyle.width = 0;
@@ -102360,7 +102357,6 @@ exports.PasswordEditor = _passwordEditor.PasswordEditor;
 exports.__esModule = true;
 var _textEditor = __webpack_require__(718);
 var _element = __webpack_require__(327);
-var _a11y = __webpack_require__(472);
 const EDITOR_TYPE = exports.EDITOR_TYPE = 'password';

 /**
@@ -102380,9 +102376,6 @@ class PasswordEditor extends _textEditor.TextEditor {
     this.textareaStyle = this.TEXTAREA.style;
     this.textareaStyle.width = 0;
     this.textareaStyle.height = 0;
-    if (this.hot.getSettings().ariaTags) {
-      (0, _element.setAttribute)(this.TEXTAREA, [(0, _a11y.A11Y_HIDDEN)()]);
-    }
     (0, _element.empty)(this.TEXTAREA_PARENT);
     this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);
   }
diff --git a/handsontable/dist/handsontable.full.min.css b/handsontable/dist/handsontable.full.min.css
index 4951ae536e..8f8b6a0a34 100644
--- a/handsontable/dist/handsontable.full.min.css
+++ b/handsontable/dist/handsontable.full.min.css
@@ -25,8 +25,8 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:35:03)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:38)
  */.handsontable .table td,.handsontable .table th{border-top:none}.handsontable tr{background:#fff}.handsontable td{background-color:inherit}.handsontable .table caption+thead tr:first-child td,.handsontable .table caption+thead tr:first-child th,.handsontable .table colgroup+thead tr:first-child td,.handsontable .table colgroup+thead tr:first-child th,.handsontable .table thead:first-child tr:first-child td,.handsontable .table thead:first-child tr:first-child th{border-top:1px solid #ccc}.handsontable .table-bordered{border:0;border-collapse:separate}.handsontable .table-bordered td,.handsontable .table-bordered th{border-left:none}.handsontable .table-bordered td:first-child,.handsontable .table-bordered th:first-child{border-left:1px solid #ccc}.handsontable .table>tbody>tr>td,.handsontable .table>tbody>tr>th,.handsontable .table>tfoot>tr>td,.handsontable .table>tfoot>tr>th,.handsontable .table>thead>tr>td,.handsontable .table>thead>tr>th{line-height:21px;padding:0}.col-lg-1.handsontable,.col-lg-10.handsontable,.col-lg-11.handsontable,.col-lg-12.handsontable,.col-lg-2.handsontable,.col-lg-3.handsontable,.col-lg-4.handsontable,.col-lg-5.handsontable,.col-lg-6.handsontable,.col-lg-7.handsontable,.col-lg-8.handsontable,.col-lg-9.handsontable,.col-md-1.handsontable,.col-md-10.handsontable,.col-md-11.handsontable,.col-md-12.handsontable,.col-md-2.handsontable,.col-md-3.handsontable,.col-md-4.handsontable,.col-md-5.handsontable,.col-md-6.handsontable,.col-md-7.handsontable,.col-md-8.handsontable,.col-md-9.handsontable .col-sm-1.handsontable,.col-sm-10.handsontable,.col-sm-11.handsontable,.col-sm-12.handsontable,.col-sm-2.handsontable,.col-sm-3.handsontable,.col-sm-4.handsontable,.col-sm-5.handsontable,.col-sm-6.handsontable,.col-sm-7.handsontable,.col-sm-8.handsontable,.col-sm-9.handsontable .col-xs-1.handsontable,.col-xs-10.handsontable,.col-xs-11.handsontable,.col-xs-12.handsontable,.col-xs-2.handsontable,.col-xs-3.handsontable,.col-xs-4.handsontable,.col-xs-5.handsontable,.col-xs-6.handsontable,.col-xs-7.handsontable,.col-xs-8.handsontable,.col-xs-9.handsontable{padding-left:0;padding-right:0}.handsontable .table-striped>tbody>tr:nth-of-type(2n){background-color:#fff}.handsontable{position:relative}.handsontable .hide{display:none}.handsontable .relative{position:relative}.handsontable .wtHider{width:0}.handsontable .wtSpreader{height:auto;position:relative;width:0}.handsontable div,.handsontable input,.handsontable table,.handsontable tbody,.handsontable td,.handsontable textarea,.handsontable th,.handsontable thead{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}.handsontable input,.handsontable textarea{min-height:auto}.handsontable table.htCore{border-collapse:separate;border-spacing:0;border-width:0;cursor:default;margin:0;max-height:none;max-width:none;outline-width:0;table-layout:fixed;width:0}.handsontable col,.handsontable col.rowHeader{width:50px}.handsontable td,.handsontable th{background-color:#fff;border-bottom:1px solid #ccc;border-left-width:0;border-right:1px solid #ccc;border-top-width:0;empty-cells:show;height:22px;line-height:21px;outline:none;outline-width:0;overflow:hidden;padding:0 4px;vertical-align:top;white-space:pre-wrap}[dir=rtl].handsontable td,[dir=rtl].handsontable th{border-left:1px solid #ccc;border-right-width:0}.handsontable th:last-child{border-bottom:1px solid #ccc;border-left:none;border-right:1px solid #ccc}[dir=rtl].handsontable th:last-child{border-left:1px solid #ccc;border-right:none}.handsontable td:first-of-type,.handsontable th:first-child{border-left:1px solid #ccc}[dir=rtl].handsontable td:first-of-type,[dir=rtl].handsontable th:first-child{border-right:1px solid #ccc}.handsontable .ht_clone_top th:nth-child(2){border-left-width:0;border-right:1px solid #ccc}[dir=rtl].handsontable .ht_clone_top th:nth-child(2){border-left:1px solid #ccc;border-right-width:0}.handsontable.htRowHeaders thead tr th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable.htRowHeaders thead tr th:nth-child(2){border-right:1px solid #ccc}.handsontable tr:first-child td,.handsontable tr:first-child th{border-top:1px solid #ccc}.ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child{border-left:1px solid #ccc;border-right-width:0}[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child{border-left-width:0;border-right:1px solid #ccc}.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr:last-child th{border-bottom-width:0}.handsontable th{background-color:#f0f0f0;color:#222;font-weight:400;text-align:center;white-space:nowrap}.handsontable thead th{padding:0}.handsontable th.active{background-color:#ccc}.handsontable thead th .relative{padding:2px 4px}.handsontable span.colHeader{display:inline-block;line-height:1.1}.handsontable .wtBorder{font-size:0;position:absolute}.handsontable .wtBorder.hidden{display:none!important}.handsontable .wtBorder.current{z-index:10}.handsontable .wtBorder.area{z-index:8}.handsontable .wtBorder.fill{z-index:6}.handsontable .wtBorder.corner{cursor:crosshair;font-size:0}.ht_clone_master{z-index:100}.ht_clone_inline_start{z-index:120}.ht_clone_bottom{z-index:130}.ht_clone_bottom_inline_start_corner{z-index:150}.ht_clone_top{z-index:160}.ht_clone_top_inline_start_corner{z-index:180}.handsontable col.hidden{width:0!important}.handsontable tr.hidden,.handsontable tr.hidden td,.handsontable tr.hidden th{display:none}.ht_clone_bottom,.ht_clone_inline_start,.ht_clone_top,.ht_master{overflow:hidden}.ht_master .wtHolder{overflow:auto}.handsontable .ht_clone_inline_start table.htCore>thead,.handsontable .ht_master table.htCore>tbody>tr>th,.handsontable .ht_master table.htCore>thead{visibility:hidden}.ht_clone_bottom .wtHolder,.ht_clone_inline_start .wtHolder,.ht_clone_top .wtHolder{overflow:hidden}.handsontable{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;touch-action:manipulation}.handsontable a{color:#104acc}.handsontable.htAutoSize{left:-99000px;position:absolute;top:-99000px;visibility:hidden}.handsontable td.htInvalid{background-color:#ffbeba!important}.handsontable td.htNoWrap{white-space:nowrap}.handsontable td.invisibleSelection,.handsontable th.invisibleSelection{outline:none}.handsontable td.invisibleSelection::selection,.handsontable th.invisibleSelection::selection{background:hsla(0,0%,100%,0)}.hot-display-license-info{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:10px;font-weight:400;padding:5px 0 3px;text-align:left}.hot-display-license-info a{color:#104acc;font-size:10px}.handsontable .htFocusCatcher{border:0;height:0;margin:0;opacity:0;padding:0;position:absolute;width:0;z-index:-1}.handsontable .manualColumnResizer{cursor:col-resize;height:25px;position:absolute;top:0;width:5px;z-index:210}.handsontable .manualRowResizer{cursor:row-resize;height:5px;left:0;position:absolute;width:50px;z-index:210}.handsontable .manualColumnResizer.active,.handsontable .manualColumnResizer:hover,.handsontable .manualRowResizer.active,.handsontable .manualRowResizer:hover{background-color:#34a9db}.handsontable .manualColumnResizerGuide{background-color:#34a9db;border-left:none;border-right:1px dashed #777;display:none;margin-left:5px;margin-right:unset;position:absolute;right:unset;top:0;width:0}[dir=rtl].handsontable .manualColumnResizerGuide{border-left:1px dashed #777;border-right:none;left:unset;margin-left:unset;margin-right:5px}.handsontable .manualRowResizerGuide{background-color:#34a9db;border-bottom:1px dashed #777;bottom:0;display:none;height:0;left:0;margin-top:5px;position:absolute}.handsontable .manualColumnResizerGuide.active,.handsontable .manualRowResizerGuide.active{display:block;z-index:209}.handsontable td.area,.handsontable td.area-1,.handsontable td.area-2,.handsontable td.area-3,.handsontable td.area-4,.handsontable td.area-5,.handsontable td.area-6,.handsontable td.area-7{position:relative}.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{background:#005eff;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.handsontable td.area:before{opacity:.1}.handsontable td.area-1:before{opacity:.2}.handsontable td.area-2:before{opacity:.27}.handsontable td.area-3:before{opacity:.35}.handsontable td.area-4:before{opacity:.41}.handsontable td.area-5:before{opacity:.47}.handsontable td.area-6:before{opacity:.54}.handsontable td.area-7:before{opacity:.58}.handsontable tbody th.current,.handsontable thead th.current{box-shadow:inset 0 0 0 2px #4b89ff}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:#dcdcdc}.handsontable tbody th.ht__active_highlight,.handsontable thead th.ht__active_highlight{background-color:#8eb0e7;color:#000}.handsontableInput{background-color:#fff;border:none;border-radius:0;box-shadow:inset 0 0 0 2px #5292f7;color:#000;display:block;font-family:inherit;font-size:inherit;line-height:21px;margin:0;outline-width:0;padding:1px 5px 0;resize:none}.handsontableInput:focus{outline:none}.handsontableInputHolder{left:0;position:absolute;top:0}.htSelectEditor{-webkit-appearance:menulist-button!important;border:2px solid #4b89ff;position:absolute;width:auto}.htSelectEditor:focus{outline:none}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{color:#777;content:"▶";font-size:9px;position:absolute;right:5px}[dir=rtl].handsontable .htSubmenu :after{content:""}[dir=rtl].handsontable .htSubmenu :before{color:#777;content:"◀";font-size:9px;left:5px;position:absolute}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable.listbox{margin:0}.handsontable.listbox .ht_master table{background:#fff;border:1px solid #ccc;border-collapse:separate}.handsontable.listbox td,.handsontable.listbox th,.handsontable.listbox tr:first-child td,.handsontable.listbox tr:first-child th,.handsontable.listbox tr:last-child th{border-color:transparent!important}.handsontable.listbox td,.handsontable.listbox th{text-overflow:ellipsis;white-space:nowrap}.handsontable.listbox td.htDimmed{color:inherit;cursor:default;font-style:inherit}.handsontable.listbox .wtBorder{visibility:hidden}.handsontable.listbox tr td.current,.handsontable.listbox tr:hover td{background:#eee}.ht_editor_hidden{z-index:-1}.ht_editor_visible{z-index:200}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.handsontable.mobile,.handsontable.mobile .wtHolder{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-overflow-scrolling:touch}.handsontable.mobile .handsontableInput:focus{-webkit-appearance:none;-webkit-box-shadow:inset 0 0 0 2px #5292f7;-moz-box-shadow:inset 0 0 0 2px #5292f7;box-shadow:inset 0 0 0 2px #5292f7}.handsontable .bottomSelectionHandle,.handsontable .bottomSelectionHandle-HitArea,.handsontable .topSelectionHandle,.handsontable .topSelectionHandle-HitArea{left:-10000px;right:unset;top:-10000px;z-index:9999}[dir=rtl].handsontable .bottomSelectionHandle,[dir=rtl].handsontable .bottomSelectionHandle-HitArea,[dir=rtl].handsontable .topSelectionHandle,[dir=rtl].handsontable .topSelectionHandle-HitArea{left:unset;right:-10000px}.handsontable.hide-tween{-webkit-animation:opacity-hide .3s;animation:opacity-hide .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable.show-tween{-webkit-animation:opacity-show .3s;animation:opacity-show .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}
 /*!
  * Pikaday
diff --git a/handsontable/dist/handsontable.full.min.js b/handsontable/dist/handsontable.full.min.js
index 4b91e4d54e..812a071f64 100644
--- a/handsontable/dist/handsontable.full.min.js
+++ b/handsontable/dist/handsontable.full.min.js
@@ -25,8 +25,8 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:35:03)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:38)
  */
 !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Handsontable",[],t):"object"==typeof exports?exports.Handsontable=t():e.Handsontable=t()}("undefined"!=typeof self?self:this,(()=>(()=>{var e={44820:(e,t,r)=>{"use strict";r.d(t,{iz:()=>lt,Ay:()=>ah});var n,s,i={};r.r(i),r.d(i,{AbsPlugin:()=>Xi,AddressPlugin:()=>$i,ArrayPlugin:()=>Ki,BitShiftPlugin:()=>qi,BitwiseLogicOperationsPlugin:()=>eo,BooleanPlugin:()=>to,CharPlugin:()=>ro,CodePlugin:()=>no,ComplexPlugin:()=>Gl,ConditionalAggregationPlugin:()=>ua,CountBlankPlugin:()=>so,CountUniquePlugin:()=>io,DateTimePlugin:()=>oo,DegreesPlugin:()=>co,DeltaPlugin:()=>po,ExpPlugin:()=>go,FinancialPlugin:()=>fo,FormulaTextPlugin:()=>vo,HyperlinkPlugin:()=>Ro,InformationPlugin:()=>So,IsEvenPlugin:()=>To,IsOddPlugin:()=>No,LogarithmPlugin:()=>Mo,LookupPlugin:()=>fa,MathConstantsPlugin:()=>bo,MathPlugin:()=>Bl,MatrixPlugin:()=>Io,MedianPlugin:()=>xo,ModuloPlugin:()=>Po,NumericAggregationPlugin:()=>ko,PowerPlugin:()=>Uo,RadiansPlugin:()=>Vo,RadixConversionPlugin:()=>Wo,RandomPlugin:()=>Xo,RomanPlugin:()=>ma,RoundingPlugin:()=>Zo,SimpleArithmerticPlugin:()=>wa,SqrtPlugin:()=>Jo,StatisticalAggregationPlugin:()=>nh,StatisticalPlugin:()=>Vl,SumprodPlugin:()=>ca,TextPlugin:()=>da,TrigonometryPlugin:()=>pa}),function(e){e.RELATIVE="RELATIVE",e.ABSOLUTE="ABSOLUTE"}(n||(n={}));class o{constructor(e,t,r){this.type=e,this.col=t,this.sheet=r}static absolute(e,t){return new o(n.ABSOLUTE,e,t)}static relative(e,t){return new o(n.RELATIVE,e,t)}static compareByAbsoluteAddress(e){return(t,r)=>t.toSimpleColumnAddress(e).col-r.toSimpleColumnAddress(e).col}isColumnAbsolute(){return this.type===n.ABSOLUTE}isColumnRelative(){return this.type===n.RELATIVE}isAbsolute(){return this.type===n.ABSOLUTE&&void 0!==this.sheet}moved(e,t,r){const n=void 0===this.sheet?void 0:e;return new o(this.type,this.col+t,n)}shiftedByColumns(e){return new o(this.type,this.col+e,this.sheet)}toSimpleColumnAddress(e){const t=Lr(this,e);let r=this.col;return this.isColumnRelative()&&(r=e.col+this.col),_r(t,r)}shiftRelativeDimensions(e,t){const r=this.isColumnRelative()?this.col+e:this.col;return new o(this.type,r,this.sheet)}shiftAbsoluteDimensions(e,t){const r=this.isColumnAbsolute()?this.col+e:this.col;return new o(this.type,r,this.sheet)}withSheet(e){return new o(this.type,this.col,e)}isInvalid(e){return this.toSimpleColumnAddress(e).col<0}hash(e){const t=e&&void 0!==this.sheet?`#${this.sheet}`:"";switch(this.type){case n.RELATIVE:return`${t}#COLR${this.col}`;case n.ABSOLUTE:return`${t}#COLA${this.col}`}}unparse(e){const t=this.toSimpleColumnAddress(e);if(br(t))return;const r=P(t.col);return`${this.type===n.ABSOLUTE?"$":""}${r}`}exceedsSheetSizeLimits(e){return this.col>=e}}
 /**
@@ -914,13 +914,13 @@ class nh extends un{avedev(e,t){return this.runFunction(e.args,t,this.metadata("
  * @license
  * Copyright (c) 2024 Handsoncode. All rights reserved.
  */
-class ih extends Bi{}ih.HyperFormula=Bi,ih.ErrorType=ir,ih.CellError=Tr,ih.CellType=or,ih.CellValueType=Er,ih.CellValueDetailedType=wr,ih.DetailedCellError=pn,ih.ExportedCellChange=hi,ih.ExportedNamedExpressionChange=ui,ih.ConfigValueTooBigError=_t,ih.ConfigValueTooSmallError=Mt,ih.EvaluationSuspendedError=At,ih.ExpectedOneOfValuesError=bt,ih.ExpectedValueOfTypeError=Tt,ih.ArraySize=cn,ih.SimpleRangeValue=rt,ih.EmptyValue=Ye,ih.FunctionPlugin=un,ih.FunctionArgumentType=hn,ih.FunctionPluginValidationError=Lt,ih.InvalidAddressError=pt,ih.InvalidArgumentsError=gt,ih.LanguageNotRegisteredError=xt,ih.LanguageAlreadyRegisteredError=Pt,ih.MissingTranslationError=Ot,ih.NamedExpressionDoesNotExistError=Et,ih.NamedExpressionNameIsAlreadyTakenError=mt,ih.NamedExpressionNameIsInvalidError=yt,ih.NoOperationToRedoError=Ct,ih.NoOperationToUndoError=wt,ih.NoRelativeAddressesAllowedError=Ft,ih.NoSheetWithIdError=lt,ih.NoSheetWithNameError=ht,ih.NotAFormulaError=dt,ih.NothingToPasteError=vt,ih.ProtectedFunctionTranslationError=It,ih.SheetNameAlreadyTakenError=ut,ih.SheetSizeLimitExceededError=ct,ih.SourceLocationHasArrayError=kt,ih.TargetLocationHasArrayError=Ht,ih.UnableToParseError=St;const oh=Yi.defaultConfig.language;Bi.registerLanguage(oh,Gi),Bi.languages[Gi.langCode]=Gi;for(const e of Object.getOwnPropertyNames(i))e.startsWith("_")||Bi.registerFunctionPlugin(i[e]);const ah=ih;window.HyperFormula=r(44820).Ay},14130:function(e,t,r){e.exports=function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,r){return t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(e,r)}function r(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function n(e,s,i){return n=r()?Reflect.construct:function(e,r,n){var s=[null];s.push.apply(s,r);var i=new(Function.bind.apply(e,s));return n&&t(i,n.prototype),i},n.apply(null,arguments)}function s(e){return i(e)||o(e)||a(e)||h()}function i(e){if(Array.isArray(e))return l(e)}function o(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function a(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function h(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u=Object.hasOwnProperty,c=Object.setPrototypeOf,d=Object.isFrozen,p=Object.getPrototypeOf,g=Object.getOwnPropertyDescriptor,f=Object.freeze,m=Object.seal,y=Object.create,E="undefined"!=typeof Reflect&&Reflect,w=E.apply,C=E.construct;w||(w=function(e,t,r){return e.apply(t,r)}),f||(f=function(e){return e}),m||(m=function(e){return e}),C||(C=function(e,t){return n(e,s(t))});var v=x(Array.prototype.forEach),R=x(Array.prototype.pop),S=x(Array.prototype.push),T=x(String.prototype.toLowerCase),N=x(String.prototype.toString),M=x(String.prototype.match),_=x(String.prototype.replace),b=x(String.prototype.indexOf),A=x(String.prototype.trim),O=x(RegExp.prototype.test),I=P(TypeError);function x(e){return function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),s=1;s<r;s++)n[s-1]=arguments[s];return w(e,t,n)}}function P(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return C(e,r)}}function L(e,t,r){var n;r=null!==(n=r)&&void 0!==n?n:T,c&&c(e,null);for(var s=t.length;s--;){var i=t[s];if("string"==typeof i){var o=r(i);o!==i&&(d(t)||(t[s]=o),i=o)}e[i]=!0}return e}function D(e){var t,r=y(null);for(t in e)!0===w(u,e,[t])&&(r[t]=e[t]);return r}function k(e,t){for(;null!==e;){var r=g(e,t);if(r){if(r.get)return x(r.get);if("function"==typeof r.value)return x(r.value)}e=p(e)}function n(e){return console.warn("fallback value for",e),null}return n}var H=f(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),F=f(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),U=f(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),V=f(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),B=f(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),W=f(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Y=f(["#text"]),j=f(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),G=f(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),z=f(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),$=f(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),K=m(/\{\{[\w\W]*|[\w\W]*\}\}/gm),X=m(/<%[\w\W]*|[\w\W]*%>/gm),q=m(/\${[\w\W]*}/gm),Q=m(/^data-[\-\w.\u00B7-\uFFFF]/),Z=m(/^aria-[\-\w]+$/),J=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ee=m(/^(?:\w+script|data):/i),te=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),re=m(/^html$/i),ne=m(/^[a-z][.\w]*(-[.\w]+)+$/i),se=function(){return"undefined"==typeof window?null:window},ie=function(t,r){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var n=null,s="data-tt-policy-suffix";r.currentScript&&r.currentScript.hasAttribute(s)&&(n=r.currentScript.getAttribute(s));var i="dompurify"+(n?"#"+n:"");try{return t.createPolicy(i,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+i+" could not be created."),null}};function oe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:se(),r=function(e){return oe(e)};if(r.version="2.5.6",r.removed=[],!t||!t.document||9!==t.document.nodeType)return r.isSupported=!1,r;var n=t.document,i=t.document,o=t.DocumentFragment,a=t.HTMLTemplateElement,l=t.Node,h=t.Element,u=t.NodeFilter,c=t.NamedNodeMap,d=void 0===c?t.NamedNodeMap||t.MozNamedAttrMap:c,p=t.HTMLFormElement,g=t.DOMParser,m=t.trustedTypes,y=h.prototype,E=k(y,"cloneNode"),w=k(y,"nextSibling"),C=k(y,"childNodes"),x=k(y,"parentNode");if("function"==typeof a){var P=i.createElement("template");P.content&&P.content.ownerDocument&&(i=P.content.ownerDocument)}var ae=ie(m,n),le=ae?ae.createHTML(""):"",he=i,ue=he.implementation,ce=he.createNodeIterator,de=he.createDocumentFragment,pe=he.getElementsByTagName,ge=n.importNode,fe={};try{fe=D(i).documentMode?i.documentMode:{}}catch(e){}var me={};r.isSupported="function"==typeof x&&ue&&void 0!==ue.createHTMLDocument&&9!==fe;var ye,Ee,we=K,Ce=X,ve=q,Re=Q,Se=Z,Te=ee,Ne=te,Me=ne,_e=J,be=null,Ae=L({},[].concat(s(H),s(F),s(U),s(B),s(Y))),Oe=null,Ie=L({},[].concat(s(j),s(G),s(z),s($))),xe=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Pe=null,Le=null,De=!0,ke=!0,He=!1,Fe=!0,Ue=!1,Ve=!0,Be=!1,We=!1,Ye=!1,je=!1,Ge=!1,ze=!1,$e=!0,Ke=!1,Xe="user-content-",qe=!0,Qe=!1,Ze={},Je=null,et=L({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),tt=null,rt=L({},["audio","video","img","source","image","track"]),nt=null,st=L({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),it="http://www.w3.org/1998/Math/MathML",ot="http://www.w3.org/2000/svg",at="http://www.w3.org/1999/xhtml",lt=at,ht=!1,ut=null,ct=L({},[it,ot,at],N),dt=["application/xhtml+xml","text/html"],pt="text/html",gt=null,ft=i.createElement("form"),mt=function(e){return e instanceof RegExp||e instanceof Function},yt=function(t){gt&&gt===t||(t&&"object"===e(t)||(t={}),t=D(t),ye=ye=-1===dt.indexOf(t.PARSER_MEDIA_TYPE)?pt:t.PARSER_MEDIA_TYPE,Ee="application/xhtml+xml"===ye?N:T,be="ALLOWED_TAGS"in t?L({},t.ALLOWED_TAGS,Ee):Ae,Oe="ALLOWED_ATTR"in t?L({},t.ALLOWED_ATTR,Ee):Ie,ut="ALLOWED_NAMESPACES"in t?L({},t.ALLOWED_NAMESPACES,N):ct,nt="ADD_URI_SAFE_ATTR"in t?L(D(st),t.ADD_URI_SAFE_ATTR,Ee):st,tt="ADD_DATA_URI_TAGS"in t?L(D(rt),t.ADD_DATA_URI_TAGS,Ee):rt,Je="FORBID_CONTENTS"in t?L({},t.FORBID_CONTENTS,Ee):et,Pe="FORBID_TAGS"in t?L({},t.FORBID_TAGS,Ee):{},Le="FORBID_ATTR"in t?L({},t.FORBID_ATTR,Ee):{},Ze="USE_PROFILES"in t&&t.USE_PROFILES,De=!1!==t.ALLOW_ARIA_ATTR,ke=!1!==t.ALLOW_DATA_ATTR,He=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Ue=t.SAFE_FOR_TEMPLATES||!1,Ve=!1!==t.SAFE_FOR_XML,Be=t.WHOLE_DOCUMENT||!1,je=t.RETURN_DOM||!1,Ge=t.RETURN_DOM_FRAGMENT||!1,ze=t.RETURN_TRUSTED_TYPE||!1,Ye=t.FORCE_BODY||!1,$e=!1!==t.SANITIZE_DOM,Ke=t.SANITIZE_NAMED_PROPS||!1,qe=!1!==t.KEEP_CONTENT,Qe=t.IN_PLACE||!1,_e=t.ALLOWED_URI_REGEXP||_e,lt=t.NAMESPACE||at,xe=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&mt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(xe.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&mt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(xe.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(xe.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ue&&(ke=!1),Ge&&(je=!0),Ze&&(be=L({},s(Y)),Oe=[],!0===Ze.html&&(L(be,H),L(Oe,j)),!0===Ze.svg&&(L(be,F),L(Oe,G),L(Oe,$)),!0===Ze.svgFilters&&(L(be,U),L(Oe,G),L(Oe,$)),!0===Ze.mathMl&&(L(be,B),L(Oe,z),L(Oe,$))),t.ADD_TAGS&&(be===Ae&&(be=D(be)),L(be,t.ADD_TAGS,Ee)),t.ADD_ATTR&&(Oe===Ie&&(Oe=D(Oe)),L(Oe,t.ADD_ATTR,Ee)),t.ADD_URI_SAFE_ATTR&&L(nt,t.ADD_URI_SAFE_ATTR,Ee),t.FORBID_CONTENTS&&(Je===et&&(Je=D(Je)),L(Je,t.FORBID_CONTENTS,Ee)),qe&&(be["#text"]=!0),Be&&L(be,["html","head","body"]),be.table&&(L(be,["tbody"]),delete Pe.tbody),f&&f(t),gt=t)},Et=L({},["mi","mo","mn","ms","mtext"]),wt=L({},["foreignobject","annotation-xml"]),Ct=L({},["title","style","font","a","script"]),vt=L({},F);L(vt,U),L(vt,V);var Rt=L({},B);L(Rt,W);var St=function(e){var t=x(e);t&&t.tagName||(t={namespaceURI:lt,tagName:"template"});var r=T(e.tagName),n=T(t.tagName);return!!ut[e.namespaceURI]&&(e.namespaceURI===ot?t.namespaceURI===at?"svg"===r:t.namespaceURI===it?"svg"===r&&("annotation-xml"===n||Et[n]):Boolean(vt[r]):e.namespaceURI===it?t.namespaceURI===at?"math"===r:t.namespaceURI===ot?"math"===r&&wt[n]:Boolean(Rt[r]):e.namespaceURI===at?!(t.namespaceURI===ot&&!wt[n])&&!(t.namespaceURI===it&&!Et[n])&&!Rt[r]&&(Ct[r]||!vt[r]):!("application/xhtml+xml"!==ye||!ut[e.namespaceURI]))},Tt=function(e){S(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=le}catch(t){e.remove()}}},Nt=function(e,t){try{S(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){S(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Oe[e])if(je||Ge)try{Tt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Mt=function(e){var t,r;if(Ye)e="<remove></remove>"+e;else{var n=M(e,/^[\r\n\t ]+/);r=n&&n[0]}"application/xhtml+xml"===ye&&lt===at&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var s=ae?ae.createHTML(e):e;if(lt===at)try{t=(new g).parseFromString(s,ye)}catch(e){}if(!t||!t.documentElement){t=ue.createDocument(lt,"template",null);try{t.documentElement.innerHTML=ht?le:s}catch(e){}}var o=t.body||t.documentElement;return e&&r&&o.insertBefore(i.createTextNode(r),o.childNodes[0]||null),lt===at?pe.call(t,Be?"html":"body")[0]:Be?t.documentElement:o},_t=function(e){return ce.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null,!1)},bt=function(e){return e instanceof p&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof d)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},At=function(t){return"object"===e(l)?t instanceof l:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},Ot=function(e,t,n){me[e]&&v(me[e],(function(e){e.call(r,t,n,gt)}))},It=function(e){var t;if(Ot("beforeSanitizeElements",e,null),bt(e))return Tt(e),!0;if(O(/[\u0080-\uFFFF]/,e.nodeName))return Tt(e),!0;var n=Ee(e.nodeName);if(Ot("uponSanitizeElement",e,{tagName:n,allowedTags:be}),e.hasChildNodes()&&!At(e.firstElementChild)&&(!At(e.content)||!At(e.content.firstElementChild))&&O(/<[/\w]/g,e.innerHTML)&&O(/<[/\w]/g,e.textContent))return Tt(e),!0;if("select"===n&&O(/<template/i,e.innerHTML))return Tt(e),!0;if(7===e.nodeType)return Tt(e),!0;if(Ve&&8===e.nodeType&&O(/<[/\w]/g,e.data))return Tt(e),!0;if(!be[n]||Pe[n]){if(!Pe[n]&&Pt(n)){if(xe.tagNameCheck instanceof RegExp&&O(xe.tagNameCheck,n))return!1;if(xe.tagNameCheck instanceof Function&&xe.tagNameCheck(n))return!1}if(qe&&!Je[n]){var s=x(e)||e.parentNode,i=C(e)||e.childNodes;if(i&&s)for(var o=i.length-1;o>=0;--o){var a=E(i[o],!0);a.__removalCount=(e.__removalCount||0)+1,s.insertBefore(a,w(e))}}return Tt(e),!0}return e instanceof h&&!St(e)?(Tt(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!O(/<\/no(script|embed|frames)/i,e.innerHTML)?(Ue&&3===e.nodeType&&(t=e.textContent,t=_(t,we," "),t=_(t,Ce," "),t=_(t,ve," "),e.textContent!==t&&(S(r.removed,{element:e.cloneNode()}),e.textContent=t)),Ot("afterSanitizeElements",e,null),!1):(Tt(e),!0)},xt=function(e,t,r){if($e&&("id"===t||"name"===t)&&(r in i||r in ft))return!1;if(ke&&!Le[t]&&O(Re,t));else if(De&&O(Se,t));else if(!Oe[t]||Le[t]){if(!(Pt(e)&&(xe.tagNameCheck instanceof RegExp&&O(xe.tagNameCheck,e)||xe.tagNameCheck instanceof Function&&xe.tagNameCheck(e))&&(xe.attributeNameCheck instanceof RegExp&&O(xe.attributeNameCheck,t)||xe.attributeNameCheck instanceof Function&&xe.attributeNameCheck(t))||"is"===t&&xe.allowCustomizedBuiltInElements&&(xe.tagNameCheck instanceof RegExp&&O(xe.tagNameCheck,r)||xe.tagNameCheck instanceof Function&&xe.tagNameCheck(r))))return!1}else if(nt[t]);else if(O(_e,_(r,Ne,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==b(r,"data:")||!tt[e])if(He&&!O(Te,_(r,Ne,"")));else if(r)return!1;return!0},Pt=function(e){return"annotation-xml"!==e&&M(e,Me)},Lt=function(t){var n,s,i,o;Ot("beforeSanitizeAttributes",t,null);var a=t.attributes;if(a){var l={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Oe};for(o=a.length;o--;){var h=n=a[o],u=h.name,c=h.namespaceURI;if(s="value"===u?n.value:A(n.value),i=Ee(u),l.attrName=i,l.attrValue=s,l.keepAttr=!0,l.forceKeepAttr=void 0,Ot("uponSanitizeAttribute",t,l),s=l.attrValue,Ve&&O(/((--!?|])>)|<\/(style|title)/i,s))Nt(u,t);else if(!l.forceKeepAttr&&(Nt(u,t),l.keepAttr))if(Fe||!O(/\/>/i,s)){Ue&&(s=_(s,we," "),s=_(s,Ce," "),s=_(s,ve," "));var d=Ee(t.nodeName);if(xt(d,i,s)){if(!Ke||"id"!==i&&"name"!==i||(Nt(u,t),s=Xe+s),ae&&"object"===e(m)&&"function"==typeof m.getAttributeType)if(c);else switch(m.getAttributeType(d,i)){case"TrustedHTML":s=ae.createHTML(s);break;case"TrustedScriptURL":s=ae.createScriptURL(s)}try{c?t.setAttributeNS(c,u,s):t.setAttribute(u,s),bt(t)?Tt(t):R(r.removed)}catch(e){}}}else Nt(u,t)}Ot("afterSanitizeAttributes",t,null)}},Dt=function e(t){var r,n=_t(t);for(Ot("beforeSanitizeShadowDOM",t,null);r=n.nextNode();)Ot("uponSanitizeShadowNode",r,null),It(r)||(r.content instanceof o&&e(r.content),Lt(r));Ot("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(s){var i,a,h,u,c,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((ht=!s)&&(s="\x3c!--\x3e"),"string"!=typeof s&&!At(s)){if("function"!=typeof s.toString)throw I("toString is not a function");if("string"!=typeof(s=s.toString()))throw I("dirty is not a string, aborting")}if(!r.isSupported){if("object"===e(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof s)return t.toStaticHTML(s);if(At(s))return t.toStaticHTML(s.outerHTML)}return s}if(We||yt(d),r.removed=[],"string"==typeof s&&(Qe=!1),Qe){if(s.nodeName){var p=Ee(s.nodeName);if(!be[p]||Pe[p])throw I("root node is forbidden and cannot be sanitized in-place")}}else if(s instanceof l)1===(a=(i=Mt("\x3c!----\x3e")).ownerDocument.importNode(s,!0)).nodeType&&"BODY"===a.nodeName||"HTML"===a.nodeName?i=a:i.appendChild(a);else{if(!je&&!Ue&&!Be&&-1===s.indexOf("<"))return ae&&ze?ae.createHTML(s):s;if(!(i=Mt(s)))return je?null:ze?le:""}i&&Ye&&Tt(i.firstChild);for(var g=_t(Qe?s:i);h=g.nextNode();)3===h.nodeType&&h===u||It(h)||(h.content instanceof o&&Dt(h.content),Lt(h),u=h);if(u=null,Qe)return s;if(je){if(Ge)for(c=de.call(i.ownerDocument);i.firstChild;)c.appendChild(i.firstChild);else c=i;return(Oe.shadowroot||Oe.shadowrootmod)&&(c=ge.call(n,c,!0)),c}var f=Be?i.outerHTML:i.innerHTML;return Be&&be["!doctype"]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&O(re,i.ownerDocument.doctype.name)&&(f="<!DOCTYPE "+i.ownerDocument.doctype.name+">\n"+f),Ue&&(f=_(f,we," "),f=_(f,Ce," "),f=_(f,ve," ")),ae&&ze?ae.createHTML(f):f},r.setConfig=function(e){yt(e),We=!0},r.clearConfig=function(){gt=null,We=!1},r.isValidAttribute=function(e,t,r){gt||yt({});var n=Ee(e),s=Ee(t);return xt(n,s,r)},r.addHook=function(e,t){"function"==typeof t&&(me[e]=me[e]||[],S(me[e],t))},r.removeHook=function(e){if(me[e])return R(me[e])},r.removeHooks=function(e){me[e]&&(me[e]=[])},r.removeAllHooks=function(){me={}},r}return oe()}(),window.DOMPurify=r(14130)},98979:()=>{},57938:()=>{},44738:()=>{},58247:()=>{},79566:()=>{},59981:()=>{},80460:()=>{},56158:()=>{},34103:()=>{},42847:()=>{},95065:()=>{},64503:()=>{},73729:()=>{},39107:()=>{},54984:()=>{},73247:()=>{},90268:()=>{},45731:()=>{},53180:()=>{},95062:()=>{},81273:()=>{},83636:()=>{},71495:()=>{},21753:()=>{},1223:()=>{},21987:()=>{},82230:()=>{},15073:()=>{},23550:()=>{},9636:()=>{},45801:()=>{},30614:()=>{},83133:()=>{},18715:()=>{},61904:()=>{},60626:()=>{},84936:()=>{},15984:()=>{},33928:()=>{},27457:()=>{},70748:()=>{},61737:()=>{},91226:()=>{},99409:()=>{},99241:()=>{},22513:()=>{},40931:()=>{},92217:()=>{},88722:()=>{},57128:()=>{},71033:()=>{},3880:()=>{},36027:()=>{},25043:()=>{},55606:()=>{},26417:()=>{},6084:()=>{},54375:()=>{},88363:()=>{},72054:()=>{},46935:()=>{},81738:()=>{},70813:()=>{},37400:()=>{},24249:()=>{},78253:()=>{},6989:()=>{},80200:()=>{},43220:()=>{},38294:()=>{},6560:()=>{},24505:()=>{},54250:()=>{},91655:()=>{},21656:()=>{},96412:()=>{},8178:()=>{},17525:()=>{},76676:()=>{},91598:()=>{},44354:()=>{},83590:()=>{},55772:()=>{},12073:()=>{},60743:()=>{},2107:()=>{},15255:()=>{},54164:()=>{},39233:()=>{},97654:()=>{},94384:()=>{},94885:()=>{},14346:()=>{},19246:()=>{},46852:()=>{},43136:()=>{},54383:()=>{},85632:()=>{},89353:()=>{},728:()=>{},91535:()=>{},66809:()=>{},1335:()=>{},2560:()=>{},15924:()=>{},4126:()=>{},91743:()=>{},69116:()=>{},59340:()=>{},33541:()=>{},2822:()=>{},17577:()=>{},70362:()=>{},88503:()=>{},91635:()=>{},9335:()=>{},90229:()=>{},44296:()=>{},74433:()=>{},31409:()=>{},33222:()=>{},57530:()=>{},11068:()=>{},80981:()=>{},92707:()=>{},63372:()=>{},18692:()=>{},21299:()=>{},53389:()=>{},55579:()=>{},3321:()=>{},57865:()=>{},51548:()=>{},28454:()=>{},85754:()=>{},7791:()=>{},5186:()=>{},1314:function(e,t,r){(e=r.nmd(e)).exports=function(){"use strict";var t,n;function s(){return t.apply(null,arguments)}function i(e){t=e}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function a(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function h(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(l(e,t))return!1;return!0}function u(e){return void 0===e}function c(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function p(e,t){var r,n=[],s=e.length;for(r=0;r<s;++r)n.push(t(e[r],r));return n}function g(e,t){for(var r in t)l(t,r)&&(e[r]=t[r]);return l(t,"toString")&&(e.toString=t.toString),l(t,"valueOf")&&(e.valueOf=t.valueOf),e}function f(e,t,r,n){return Kr(e,t,r,n,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function y(e){return null==e._pf&&(e._pf=m()),e._pf}function E(e){var t=null,r=!1,s=e._d&&!isNaN(e._d.getTime());return s&&(t=y(e),r=n.call(t.parsedDateParts,(function(e){return null!=e})),s=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&r),e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour)),null!=Object.isFrozen&&Object.isFrozen(e)?s:(e._isValid=s,e._isValid)}function w(e){var t=f(NaN);return null!=e?g(y(t),e):y(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){var t,r=Object(this),n=r.length>>>0;for(t=0;t<n;t++)if(t in r&&e.call(this,r[t],t,r))return!0;return!1};var C=s.momentProperties=[],v=!1;function R(e,t){var r,n,s,i=C.length;if(u(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),u(t._i)||(e._i=t._i),u(t._f)||(e._f=t._f),u(t._l)||(e._l=t._l),u(t._strict)||(e._strict=t._strict),u(t._tzm)||(e._tzm=t._tzm),u(t._isUTC)||(e._isUTC=t._isUTC),u(t._offset)||(e._offset=t._offset),u(t._pf)||(e._pf=y(t)),u(t._locale)||(e._locale=t._locale),i>0)for(r=0;r<i;r++)u(s=t[n=C[r]])||(e[n]=s);return e}function S(e){R(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,s.updateOffset(this),v=!1)}function T(e){return e instanceof S||null!=e&&null!=e._isAMomentObject}function N(e){!1===s.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function M(e,t){var r=!0;return g((function(){if(null!=s.deprecationHandler&&s.deprecationHandler(null,e),r){var n,i,o,a=[],h=arguments.length;for(i=0;i<h;i++){if(n="","object"==typeof arguments[i]){for(o in n+="\n["+i+"] ",arguments[0])l(arguments[0],o)&&(n+=o+": "+arguments[0][o]+", ");n=n.slice(0,-2)}else n=arguments[i];a.push(n)}N(e+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),r=!1}return t.apply(this,arguments)}),t)}var _,b={};function A(e,t){null!=s.deprecationHandler&&s.deprecationHandler(e,t),b[e]||(N(t),b[e]=!0)}function O(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function I(e){var t,r;for(r in e)l(e,r)&&(O(t=e[r])?this[r]=t:this["_"+r]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function x(e,t){var r,n=g({},e);for(r in t)l(t,r)&&(a(e[r])&&a(t[r])?(n[r]={},g(n[r],e[r]),g(n[r],t[r])):null!=t[r]?n[r]=t[r]:delete n[r]);for(r in e)l(e,r)&&!l(t,r)&&a(e[r])&&(n[r]=g({},n[r]));return n}function P(e){null!=e&&this.set(e)}s.suppressDeprecationWarnings=!1,s.deprecationHandler=null,_=Object.keys?Object.keys:function(e){var t,r=[];for(t in e)l(e,t)&&r.push(t);return r};var L={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function D(e,t,r){var n=this._calendar[e]||this._calendar.sameElse;return O(n)?n.call(t,r):n}function k(e,t,r){var n=""+Math.abs(e),s=t-n.length;return(e>=0?r?"+":"":"-")+Math.pow(10,Math.max(0,s)).toString().substr(1)+n}var H=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,F=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,U={},V={};function B(e,t,r,n){var s=n;"string"==typeof n&&(s=function(){return this[n]()}),e&&(V[e]=s),t&&(V[t[0]]=function(){return k(s.apply(this,arguments),t[1],t[2])}),r&&(V[r]=function(){return this.localeData().ordinal(s.apply(this,arguments),e)})}function W(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function Y(e){var t,r,n=e.match(H);for(t=0,r=n.length;t<r;t++)V[n[t]]?n[t]=V[n[t]]:n[t]=W(n[t]);return function(t){var s,i="";for(s=0;s<r;s++)i+=O(n[s])?n[s].call(t,e):n[s];return i}}function j(e,t){return e.isValid()?(t=G(t,e.localeData()),U[t]=U[t]||Y(t),U[t](e)):e.localeData().invalidDate()}function G(e,t){var r=5;function n(e){return t.longDateFormat(e)||e}for(F.lastIndex=0;r>=0&&F.test(e);)e=e.replace(F,n),F.lastIndex=0,r-=1;return e}var z={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function $(e){var t=this._longDateFormat[e],r=this._longDateFormat[e.toUpperCase()];return t||!r?t:(this._longDateFormat[e]=r.match(H).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var K="Invalid date";function X(){return this._invalidDate}var q="%d",Q=/\d{1,2}/;function Z(e){return this._ordinal.replace("%d",e)}var J={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function ee(e,t,r,n){var s=this._relativeTime[r];return O(s)?s(e,t,r,n):s.replace(/%d/i,e)}function te(e,t){var r=this._relativeTime[e>0?"future":"past"];return O(r)?r(t):r.replace(/%s/i,t)}var re={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function ne(e){return"string"==typeof e?re[e]||re[e.toLowerCase()]:void 0}function se(e){var t,r,n={};for(r in e)l(e,r)&&(t=ne(r))&&(n[t]=e[r]);return n}var ie={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function oe(e){var t,r=[];for(t in e)l(e,t)&&r.push({unit:t,priority:ie[t]});return r.sort((function(e,t){return e.priority-t.priority})),r}var ae,le=/\d/,he=/\d\d/,ue=/\d{3}/,ce=/\d{4}/,de=/[+-]?\d{6}/,pe=/\d\d?/,ge=/\d\d\d\d?/,fe=/\d\d\d\d\d\d?/,me=/\d{1,3}/,ye=/\d{1,4}/,Ee=/[+-]?\d{1,6}/,we=/\d+/,Ce=/[+-]?\d+/,ve=/Z|[+-]\d\d:?\d\d/gi,Re=/Z|[+-]\d\d(?::?\d\d)?/gi,Se=/[+-]?\d+(\.\d{1,3})?/,Te=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Ne=/^[1-9]\d?/,Me=/^([1-9]\d|\d)/;function _e(e,t,r){ae[e]=O(t)?t:function(e,n){return e&&r?r:t}}function be(e,t){return l(ae,e)?ae[e](t._strict,t._locale):new RegExp(Ae(e))}function Ae(e){return Oe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,r,n,s){return t||r||n||s})))}function Oe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Ie(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function xe(e){var t=+e,r=0;return 0!==t&&isFinite(t)&&(r=Ie(t)),r}ae={};var Pe={};function Le(e,t){var r,n,s=t;for("string"==typeof e&&(e=[e]),c(t)&&(s=function(e,r){r[t]=xe(e)}),n=e.length,r=0;r<n;r++)Pe[e[r]]=s}function De(e,t){Le(e,(function(e,r,n,s){n._w=n._w||{},t(e,n._w,n,s)}))}function ke(e,t,r){null!=t&&l(Pe,e)&&Pe[e](t,r._a,r,e)}function He(e){return e%4==0&&e%100!=0||e%400==0}var Fe=0,Ue=1,Ve=2,Be=3,We=4,Ye=5,je=6,Ge=7,ze=8;function $e(e){return He(e)?366:365}B("Y",0,0,(function(){var e=this.year();return e<=9999?k(e,4):"+"+e})),B(0,["YY",2],0,(function(){return this.year()%100})),B(0,["YYYY",4],0,"year"),B(0,["YYYYY",5],0,"year"),B(0,["YYYYYY",6,!0],0,"year"),_e("Y",Ce),_e("YY",pe,he),_e("YYYY",ye,ce),_e("YYYYY",Ee,de),_e("YYYYYY",Ee,de),Le(["YYYYY","YYYYYY"],Fe),Le("YYYY",(function(e,t){t[Fe]=2===e.length?s.parseTwoDigitYear(e):xe(e)})),Le("YY",(function(e,t){t[Fe]=s.parseTwoDigitYear(e)})),Le("Y",(function(e,t){t[Fe]=parseInt(e,10)})),s.parseTwoDigitYear=function(e){return xe(e)+(xe(e)>68?1900:2e3)};var Ke,Xe=Qe("FullYear",!0);function qe(){return He(this.year())}function Qe(e,t){return function(r){return null!=r?(Je(this,e,r),s.updateOffset(this,t),this):Ze(this,e)}}function Ze(e,t){if(!e.isValid())return NaN;var r=e._d,n=e._isUTC;switch(t){case"Milliseconds":return n?r.getUTCMilliseconds():r.getMilliseconds();case"Seconds":return n?r.getUTCSeconds():r.getSeconds();case"Minutes":return n?r.getUTCMinutes():r.getMinutes();case"Hours":return n?r.getUTCHours():r.getHours();case"Date":return n?r.getUTCDate():r.getDate();case"Day":return n?r.getUTCDay():r.getDay();case"Month":return n?r.getUTCMonth():r.getMonth();case"FullYear":return n?r.getUTCFullYear():r.getFullYear();default:return NaN}}function Je(e,t,r){var n,s,i,o,a;if(e.isValid()&&!isNaN(r)){switch(n=e._d,s=e._isUTC,t){case"Milliseconds":return void(s?n.setUTCMilliseconds(r):n.setMilliseconds(r));case"Seconds":return void(s?n.setUTCSeconds(r):n.setSeconds(r));case"Minutes":return void(s?n.setUTCMinutes(r):n.setMinutes(r));case"Hours":return void(s?n.setUTCHours(r):n.setHours(r));case"Date":return void(s?n.setUTCDate(r):n.setDate(r));case"FullYear":break;default:return}i=r,o=e.month(),a=29!==(a=e.date())||1!==o||He(i)?a:28,s?n.setUTCFullYear(i,o,a):n.setFullYear(i,o,a)}}function et(e){return O(this[e=ne(e)])?this[e]():this}function tt(e,t){if("object"==typeof e){var r,n=oe(e=se(e)),s=n.length;for(r=0;r<s;r++)this[n[r].unit](e[n[r].unit])}else if(O(this[e=ne(e)]))return this[e](t);return this}function rt(e,t){return(e%t+t)%t}function nt(e,t){if(isNaN(e)||isNaN(t))return NaN;var r=rt(t,12);return e+=(t-r)/12,1===r?He(e)?29:28:31-r%7%2}Ke=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},B("M",["MM",2],"Mo",(function(){return this.month()+1})),B("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),B("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),_e("M",pe,Ne),_e("MM",pe,he),_e("MMM",(function(e,t){return t.monthsShortRegex(e)})),_e("MMMM",(function(e,t){return t.monthsRegex(e)})),Le(["M","MM"],(function(e,t){t[Ue]=xe(e)-1})),Le(["MMM","MMMM"],(function(e,t,r,n){var s=r._locale.monthsParse(e,n,r._strict);null!=s?t[Ue]=s:y(r).invalidMonth=e}));var st="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),it="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ot=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,at=Te,lt=Te;function ht(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||ot).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone}function ut(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[ot.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ct(e,t,r){var n,s,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)i=f([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(i,"").toLocaleLowerCase();return r?"MMM"===t?-1!==(s=Ke.call(this._shortMonthsParse,o))?s:null:-1!==(s=Ke.call(this._longMonthsParse,o))?s:null:"MMM"===t?-1!==(s=Ke.call(this._shortMonthsParse,o))||-1!==(s=Ke.call(this._longMonthsParse,o))?s:null:-1!==(s=Ke.call(this._longMonthsParse,o))||-1!==(s=Ke.call(this._shortMonthsParse,o))?s:null}function dt(e,t,r){var n,s,i;if(this._monthsParseExact)return ct.call(this,e,t,r);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(s=f([2e3,n]),r&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(s,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(s,"").replace(".","")+"$","i")),r||this._monthsParse[n]||(i="^"+this.months(s,"")+"|^"+this.monthsShort(s,""),this._monthsParse[n]=new RegExp(i.replace(".",""),"i")),r&&"MMMM"===t&&this._longMonthsParse[n].test(e))return n;if(r&&"MMM"===t&&this._shortMonthsParse[n].test(e))return n;if(!r&&this._monthsParse[n].test(e))return n}}function pt(e,t){if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=xe(t);else if(!c(t=e.localeData().monthsParse(t)))return e;var r=t,n=e.date();return n=n<29?n:Math.min(n,nt(e.year(),r)),e._isUTC?e._d.setUTCMonth(r,n):e._d.setMonth(r,n),e}function gt(e){return null!=e?(pt(this,e),s.updateOffset(this,!0),this):Ze(this,"Month")}function ft(){return nt(this.year(),this.month())}function mt(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Et.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=at),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function yt(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Et.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=lt),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function Et(){function e(e,t){return t.length-e.length}var t,r,n,s,i=[],o=[],a=[];for(t=0;t<12;t++)r=f([2e3,t]),n=Oe(this.monthsShort(r,"")),s=Oe(this.months(r,"")),i.push(n),o.push(s),a.push(s),a.push(n);i.sort(e),o.sort(e),a.sort(e),this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function wt(e,t,r,n,s,i,o){var a;return e<100&&e>=0?(a=new Date(e+400,t,r,n,s,i,o),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,r,n,s,i,o),a}function Ct(e){var t,r;return e<100&&e>=0?((r=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,r)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function vt(e,t,r){var n=7+t-r;return-(7+Ct(e,0,n).getUTCDay()-t)%7+n-1}function Rt(e,t,r,n,s){var i,o,a=1+7*(t-1)+(7+r-n)%7+vt(e,n,s);return a<=0?o=$e(i=e-1)+a:a>$e(e)?(i=e+1,o=a-$e(e)):(i=e,o=a),{year:i,dayOfYear:o}}function St(e,t,r){var n,s,i=vt(e.year(),t,r),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?n=o+Tt(s=e.year()-1,t,r):o>Tt(e.year(),t,r)?(n=o-Tt(e.year(),t,r),s=e.year()+1):(s=e.year(),n=o),{week:n,year:s}}function Tt(e,t,r){var n=vt(e,t,r),s=vt(e+1,t,r);return($e(e)-n+s)/7}function Nt(e){return St(e,this._week.dow,this._week.doy).week}B("w",["ww",2],"wo","week"),B("W",["WW",2],"Wo","isoWeek"),_e("w",pe,Ne),_e("ww",pe,he),_e("W",pe,Ne),_e("WW",pe,he),De(["w","ww","W","WW"],(function(e,t,r,n){t[n.substr(0,1)]=xe(e)}));var Mt={dow:0,doy:6};function _t(){return this._week.dow}function bt(){return this._week.doy}function At(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Ot(e){var t=St(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function It(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function xt(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Pt(e,t){return e.slice(t,7).concat(e.slice(0,t))}B("d",0,"do","day"),B("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),B("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),B("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),B("e",0,0,"weekday"),B("E",0,0,"isoWeekday"),_e("d",pe),_e("e",pe),_e("E",pe),_e("dd",(function(e,t){return t.weekdaysMinRegex(e)})),_e("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),_e("dddd",(function(e,t){return t.weekdaysRegex(e)})),De(["dd","ddd","dddd"],(function(e,t,r,n){var s=r._locale.weekdaysParse(e,n,r._strict);null!=s?t.d=s:y(r).invalidWeekday=e})),De(["d","e","E"],(function(e,t,r,n){t[n]=xe(e)}));var Lt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Dt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),kt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ht=Te,Ft=Te,Ut=Te;function Vt(e,t){var r=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Pt(r,this._week.dow):e?r[e.day()]:r}function Bt(e){return!0===e?Pt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Wt(e){return!0===e?Pt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Yt(e,t,r){var n,s,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)i=f([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(i,"").toLocaleLowerCase();return r?"dddd"===t?-1!==(s=Ke.call(this._weekdaysParse,o))?s:null:"ddd"===t?-1!==(s=Ke.call(this._shortWeekdaysParse,o))?s:null:-1!==(s=Ke.call(this._minWeekdaysParse,o))?s:null:"dddd"===t?-1!==(s=Ke.call(this._weekdaysParse,o))||-1!==(s=Ke.call(this._shortWeekdaysParse,o))||-1!==(s=Ke.call(this._minWeekdaysParse,o))?s:null:"ddd"===t?-1!==(s=Ke.call(this._shortWeekdaysParse,o))||-1!==(s=Ke.call(this._weekdaysParse,o))||-1!==(s=Ke.call(this._minWeekdaysParse,o))?s:null:-1!==(s=Ke.call(this._minWeekdaysParse,o))||-1!==(s=Ke.call(this._weekdaysParse,o))||-1!==(s=Ke.call(this._shortWeekdaysParse,o))?s:null}function jt(e,t,r){var n,s,i;if(this._weekdaysParseExact)return Yt.call(this,e,t,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(s=f([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(s,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(s,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(s,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(i="^"+this.weekdays(s,"")+"|^"+this.weekdaysShort(s,"")+"|^"+this.weekdaysMin(s,""),this._weekdaysParse[n]=new RegExp(i.replace(".",""),"i")),r&&"dddd"===t&&this._fullWeekdaysParse[n].test(e))return n;if(r&&"ddd"===t&&this._shortWeekdaysParse[n].test(e))return n;if(r&&"dd"===t&&this._minWeekdaysParse[n].test(e))return n;if(!r&&this._weekdaysParse[n].test(e))return n}}function Gt(e){if(!this.isValid())return null!=e?this:NaN;var t=Ze(this,"Day");return null!=e?(e=It(e,this.localeData()),this.add(e-t,"d")):t}function zt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function $t(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=xt(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Kt(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Ht),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Xt(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ft),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function qt(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ut),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qt(){function e(e,t){return t.length-e.length}var t,r,n,s,i,o=[],a=[],l=[],h=[];for(t=0;t<7;t++)r=f([2e3,1]).day(t),n=Oe(this.weekdaysMin(r,"")),s=Oe(this.weekdaysShort(r,"")),i=Oe(this.weekdays(r,"")),o.push(n),a.push(s),l.push(i),h.push(n),h.push(s),h.push(i);o.sort(e),a.sort(e),l.sort(e),h.sort(e),this._weekdaysRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Zt(){return this.hours()%12||12}function Jt(){return this.hours()||24}function er(e,t){B(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function tr(e,t){return t._meridiemParse}function rr(e){return"p"===(e+"").toLowerCase().charAt(0)}B("H",["HH",2],0,"hour"),B("h",["hh",2],0,Zt),B("k",["kk",2],0,Jt),B("hmm",0,0,(function(){return""+Zt.apply(this)+k(this.minutes(),2)})),B("hmmss",0,0,(function(){return""+Zt.apply(this)+k(this.minutes(),2)+k(this.seconds(),2)})),B("Hmm",0,0,(function(){return""+this.hours()+k(this.minutes(),2)})),B("Hmmss",0,0,(function(){return""+this.hours()+k(this.minutes(),2)+k(this.seconds(),2)})),er("a",!0),er("A",!1),_e("a",tr),_e("A",tr),_e("H",pe,Me),_e("h",pe,Ne),_e("k",pe,Ne),_e("HH",pe,he),_e("hh",pe,he),_e("kk",pe,he),_e("hmm",ge),_e("hmmss",fe),_e("Hmm",ge),_e("Hmmss",fe),Le(["H","HH"],Be),Le(["k","kk"],(function(e,t,r){var n=xe(e);t[Be]=24===n?0:n})),Le(["a","A"],(function(e,t,r){r._isPm=r._locale.isPM(e),r._meridiem=e})),Le(["h","hh"],(function(e,t,r){t[Be]=xe(e),y(r).bigHour=!0})),Le("hmm",(function(e,t,r){var n=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n)),y(r).bigHour=!0})),Le("hmmss",(function(e,t,r){var n=e.length-4,s=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n,2)),t[Ye]=xe(e.substr(s)),y(r).bigHour=!0})),Le("Hmm",(function(e,t,r){var n=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n))})),Le("Hmmss",(function(e,t,r){var n=e.length-4,s=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n,2)),t[Ye]=xe(e.substr(s))}));var nr=/[ap]\.?m?\.?/i,sr=Qe("Hours",!0);function ir(e,t,r){return e>11?r?"pm":"PM":r?"am":"AM"}var or,ar={calendar:L,longDateFormat:z,invalidDate:K,ordinal:q,dayOfMonthOrdinalParse:Q,relativeTime:J,months:st,monthsShort:it,week:Mt,weekdays:Lt,weekdaysMin:kt,weekdaysShort:Dt,meridiemParse:nr},lr={},hr={};function ur(e,t){var r,n=Math.min(e.length,t.length);for(r=0;r<n;r+=1)if(e[r]!==t[r])return r;return n}function cr(e){return e?e.toLowerCase().replace("_","-"):e}function dr(e){for(var t,r,n,s,i=0;i<e.length;){for(t=(s=cr(e[i]).split("-")).length,r=(r=cr(e[i+1]))?r.split("-"):null;t>0;){if(n=gr(s.slice(0,t).join("-")))return n;if(r&&r.length>=t&&ur(s,r)>=t-1)break;t--}i++}return or}function pr(e){return!(!e||!e.match("^[^/\\\\]*$"))}function gr(t){var n=null;if(void 0===lr[t]&&e&&e.exports&&pr(t))try{n=or._abbr,r(35358)("./"+t),fr(n)}catch(e){lr[t]=null}return lr[t]}function fr(e,t){var r;return e&&((r=u(t)?Er(e):mr(e,t))?or=r:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),or._abbr}function mr(e,t){if(null!==t){var r,n=ar;if(t.abbr=e,null!=lr[e])A("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=lr[e]._config;else if(null!=t.parentLocale)if(null!=lr[t.parentLocale])n=lr[t.parentLocale]._config;else{if(null==(r=gr(t.parentLocale)))return hr[t.parentLocale]||(hr[t.parentLocale]=[]),hr[t.parentLocale].push({name:e,config:t}),null;n=r._config}return lr[e]=new P(x(n,t)),hr[e]&&hr[e].forEach((function(e){mr(e.name,e.config)})),fr(e),lr[e]}return delete lr[e],null}function yr(e,t){if(null!=t){var r,n,s=ar;null!=lr[e]&&null!=lr[e].parentLocale?lr[e].set(x(lr[e]._config,t)):(null!=(n=gr(e))&&(s=n._config),t=x(s,t),null==n&&(t.abbr=e),(r=new P(t)).parentLocale=lr[e],lr[e]=r),fr(e)}else null!=lr[e]&&(null!=lr[e].parentLocale?(lr[e]=lr[e].parentLocale,e===fr()&&fr(e)):null!=lr[e]&&delete lr[e]);return lr[e]}function Er(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return or;if(!o(e)){if(t=gr(e))return t;e=[e]}return dr(e)}function wr(){return _(lr)}function Cr(e){var t,r=e._a;return r&&-2===y(e).overflow&&(t=r[Ue]<0||r[Ue]>11?Ue:r[Ve]<1||r[Ve]>nt(r[Fe],r[Ue])?Ve:r[Be]<0||r[Be]>24||24===r[Be]&&(0!==r[We]||0!==r[Ye]||0!==r[je])?Be:r[We]<0||r[We]>59?We:r[Ye]<0||r[Ye]>59?Ye:r[je]<0||r[je]>999?je:-1,y(e)._overflowDayOfYear&&(t<Fe||t>Ve)&&(t=Ve),y(e)._overflowWeeks&&-1===t&&(t=Ge),y(e)._overflowWeekday&&-1===t&&(t=ze),y(e).overflow=t),e}var vr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Rr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Sr=/Z|[+-]\d\d(?::?\d\d)?/,Tr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Nr=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Mr=/^\/?Date\((-?\d+)/i,_r=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,br={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Ar(e){var t,r,n,s,i,o,a=e._i,l=vr.exec(a)||Rr.exec(a),h=Tr.length,u=Nr.length;if(l){for(y(e).iso=!0,t=0,r=h;t<r;t++)if(Tr[t][1].exec(l[1])){s=Tr[t][0],n=!1!==Tr[t][2];break}if(null==s)return void(e._isValid=!1);if(l[3]){for(t=0,r=u;t<r;t++)if(Nr[t][1].exec(l[3])){i=(l[2]||" ")+Nr[t][0];break}if(null==i)return void(e._isValid=!1)}if(!n&&null!=i)return void(e._isValid=!1);if(l[4]){if(!Sr.exec(l[4]))return void(e._isValid=!1);o="Z"}e._f=s+(i||"")+(o||""),Br(e)}else e._isValid=!1}function Or(e,t,r,n,s,i){var o=[Ir(e),it.indexOf(t),parseInt(r,10),parseInt(n,10),parseInt(s,10)];return i&&o.push(parseInt(i,10)),o}function Ir(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function xr(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Pr(e,t,r){return!e||Dt.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(y(r).weekdayMismatch=!0,r._isValid=!1,!1)}function Lr(e,t,r){if(e)return br[e];if(t)return 0;var n=parseInt(r,10),s=n%100;return(n-s)/100*60+s}function Dr(e){var t,r=_r.exec(xr(e._i));if(r){if(t=Or(r[4],r[3],r[2],r[5],r[6],r[7]),!Pr(r[1],t,e))return;e._a=t,e._tzm=Lr(r[8],r[9],r[10]),e._d=Ct.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),y(e).rfc2822=!0}else e._isValid=!1}function kr(e){var t=Mr.exec(e._i);null===t?(Ar(e),!1===e._isValid&&(delete e._isValid,Dr(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:s.createFromInputFallback(e)))):e._d=new Date(+t[1])}function Hr(e,t,r){return null!=e?e:null!=t?t:r}function Fr(e){var t=new Date(s.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function Ur(e){var t,r,n,s,i,o=[];if(!e._d){for(n=Fr(e),e._w&&null==e._a[Ve]&&null==e._a[Ue]&&Vr(e),null!=e._dayOfYear&&(i=Hr(e._a[Fe],n[Fe]),(e._dayOfYear>$e(i)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),r=Ct(i,0,e._dayOfYear),e._a[Ue]=r.getUTCMonth(),e._a[Ve]=r.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=o[t]=n[t];for(;t<7;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Be]&&0===e._a[We]&&0===e._a[Ye]&&0===e._a[je]&&(e._nextDay=!0,e._a[Be]=0),e._d=(e._useUTC?Ct:wt).apply(null,o),s=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Be]=24),e._w&&void 0!==e._w.d&&e._w.d!==s&&(y(e).weekdayMismatch=!0)}}function Vr(e){var t,r,n,s,i,o,a,l,h;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,o=4,r=Hr(t.GG,e._a[Fe],St(Xr(),1,4).year),n=Hr(t.W,1),((s=Hr(t.E,1))<1||s>7)&&(l=!0)):(i=e._locale._week.dow,o=e._locale._week.doy,h=St(Xr(),i,o),r=Hr(t.gg,e._a[Fe],h.year),n=Hr(t.w,h.week),null!=t.d?((s=t.d)<0||s>6)&&(l=!0):null!=t.e?(s=t.e+i,(t.e<0||t.e>6)&&(l=!0)):s=i),n<1||n>Tt(r,i,o)?y(e)._overflowWeeks=!0:null!=l?y(e)._overflowWeekday=!0:(a=Rt(r,n,s,i,o),e._a[Fe]=a.year,e._dayOfYear=a.dayOfYear)}function Br(e){if(e._f!==s.ISO_8601)if(e._f!==s.RFC_2822){e._a=[],y(e).empty=!0;var t,r,n,i,o,a,l,h=""+e._i,u=h.length,c=0;for(l=(n=G(e._f,e._locale).match(H)||[]).length,t=0;t<l;t++)i=n[t],(r=(h.match(be(i,e))||[])[0])&&((o=h.substr(0,h.indexOf(r))).length>0&&y(e).unusedInput.push(o),h=h.slice(h.indexOf(r)+r.length),c+=r.length),V[i]?(r?y(e).empty=!1:y(e).unusedTokens.push(i),ke(i,r,e)):e._strict&&!r&&y(e).unusedTokens.push(i);y(e).charsLeftOver=u-c,h.length>0&&y(e).unusedInput.push(h),e._a[Be]<=12&&!0===y(e).bigHour&&e._a[Be]>0&&(y(e).bigHour=void 0),y(e).parsedDateParts=e._a.slice(0),y(e).meridiem=e._meridiem,e._a[Be]=Wr(e._locale,e._a[Be],e._meridiem),null!==(a=y(e).era)&&(e._a[Fe]=e._locale.erasConvertYear(a,e._a[Fe])),Ur(e),Cr(e)}else Dr(e);else Ar(e)}function Wr(e,t,r){var n;return null==r?t:null!=e.meridiemHour?e.meridiemHour(t,r):null!=e.isPM?((n=e.isPM(r))&&t<12&&(t+=12),n||12!==t||(t=0),t):t}function Yr(e){var t,r,n,s,i,o,a=!1,l=e._f.length;if(0===l)return y(e).invalidFormat=!0,void(e._d=new Date(NaN));for(s=0;s<l;s++)i=0,o=!1,t=R({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[s],Br(t),E(t)&&(o=!0),i+=y(t).charsLeftOver,i+=10*y(t).unusedTokens.length,y(t).score=i,a?i<n&&(n=i,r=t):(null==n||i<n||o)&&(n=i,r=t,o&&(a=!0));g(e,r||t)}function jr(e){if(!e._d){var t=se(e._i),r=void 0===t.day?t.date:t.day;e._a=p([t.year,t.month,r,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),Ur(e)}}function Gr(e){var t=new S(Cr(zr(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function zr(e){var t=e._i,r=e._f;return e._locale=e._locale||Er(e._l),null===t||void 0===r&&""===t?w({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),T(t)?new S(Cr(t)):(d(t)?e._d=t:o(r)?Yr(e):r?Br(e):$r(e),E(e)||(e._d=null),e))}function $r(e){var t=e._i;u(t)?e._d=new Date(s.now()):d(t)?e._d=new Date(t.valueOf()):"string"==typeof t?kr(e):o(t)?(e._a=p(t.slice(0),(function(e){return parseInt(e,10)})),Ur(e)):a(t)?jr(e):c(t)?e._d=new Date(t):s.createFromInputFallback(e)}function Kr(e,t,r,n,s){var i={};return!0!==t&&!1!==t||(n=t,t=void 0),!0!==r&&!1!==r||(n=r,r=void 0),(a(e)&&h(e)||o(e)&&0===e.length)&&(e=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=s,i._l=r,i._i=e,i._f=t,i._strict=n,Gr(i)}function Xr(e,t,r,n){return Kr(e,t,r,n,!1)}s.createFromInputFallback=M("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),s.ISO_8601=function(){},s.RFC_2822=function(){};var qr=M("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xr.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:w()})),Qr=M("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xr.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:w()}));function Zr(e,t){var r,n;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Xr();for(r=t[0],n=1;n<t.length;++n)t[n].isValid()&&!t[n][e](r)||(r=t[n]);return r}function Jr(){return Zr("isBefore",[].slice.call(arguments,0))}function en(){return Zr("isAfter",[].slice.call(arguments,0))}var tn=function(){return Date.now?Date.now():+new Date},rn=["year","quarter","month","week","day","hour","minute","second","millisecond"];function nn(e){var t,r,n=!1,s=rn.length;for(t in e)if(l(e,t)&&(-1===Ke.call(rn,t)||null!=e[t]&&isNaN(e[t])))return!1;for(r=0;r<s;++r)if(e[rn[r]]){if(n)return!1;parseFloat(e[rn[r]])!==xe(e[rn[r]])&&(n=!0)}return!0}function sn(){return this._isValid}function on(){return An(NaN)}function an(e){var t=se(e),r=t.year||0,n=t.quarter||0,s=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,a=t.hour||0,l=t.minute||0,h=t.second||0,u=t.millisecond||0;this._isValid=nn(t),this._milliseconds=+u+1e3*h+6e4*l+1e3*a*60*60,this._days=+o+7*i,this._months=+s+3*n+12*r,this._data={},this._locale=Er(),this._bubble()}function ln(e){return e instanceof an}function hn(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function un(e,t,r){var n,s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(n=0;n<s;n++)(r&&e[n]!==t[n]||!r&&xe(e[n])!==xe(t[n]))&&o++;return o+i}function cn(e,t){B(e,0,0,(function(){var e=this.utcOffset(),r="+";return e<0&&(e=-e,r="-"),r+k(~~(e/60),2)+t+k(~~e%60,2)}))}cn("Z",":"),cn("ZZ",""),_e("Z",Re),_e("ZZ",Re),Le(["Z","ZZ"],(function(e,t,r){r._useUTC=!0,r._tzm=pn(Re,e)}));var dn=/([\+\-]|\d\d)/gi;function pn(e,t){var r,n,s=(t||"").match(e);return null===s?null:0===(n=60*(r=((s[s.length-1]||[])+"").match(dn)||["-",0,0])[1]+xe(r[2]))?0:"+"===r[0]?n:-n}function gn(e,t){var r,n;return t._isUTC?(r=t.clone(),n=(T(e)||d(e)?e.valueOf():Xr(e).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+n),s.updateOffset(r,!1),r):Xr(e).local()}function fn(e){return-Math.round(e._d.getTimezoneOffset())}function mn(e,t,r){var n,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=pn(Re,e)))return this}else Math.abs(e)<16&&!r&&(e*=60);return!this._isUTC&&t&&(n=fn(this)),this._offset=e,this._isUTC=!0,null!=n&&this.add(n,"m"),i!==e&&(!t||this._changeInProgress?Ln(this,An(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,s.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:fn(this)}function yn(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function En(e){return this.utcOffset(0,e)}function wn(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(fn(this),"m")),this}function Cn(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=pn(ve,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function vn(e){return!!this.isValid()&&(e=e?Xr(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Rn(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Sn(){if(!u(this._isDSTShifted))return this._isDSTShifted;var e,t={};return R(t,this),(t=zr(t))._a?(e=t._isUTC?f(t._a):Xr(t._a),this._isDSTShifted=this.isValid()&&un(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Tn(){return!!this.isValid()&&!this._isUTC}function Nn(){return!!this.isValid()&&this._isUTC}function Mn(){return!!this.isValid()&&this._isUTC&&0===this._offset}s.updateOffset=function(){};var _n=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,bn=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function An(e,t){var r,n,s,i=e,o=null;return ln(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:c(e)||!isNaN(+e)?(i={},t?i[t]=+e:i.milliseconds=+e):(o=_n.exec(e))?(r="-"===o[1]?-1:1,i={y:0,d:xe(o[Ve])*r,h:xe(o[Be])*r,m:xe(o[We])*r,s:xe(o[Ye])*r,ms:xe(hn(1e3*o[je]))*r}):(o=bn.exec(e))?(r="-"===o[1]?-1:1,i={y:On(o[2],r),M:On(o[3],r),w:On(o[4],r),d:On(o[5],r),h:On(o[6],r),m:On(o[7],r),s:On(o[8],r)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(s=xn(Xr(i.from),Xr(i.to)),(i={}).ms=s.milliseconds,i.M=s.months),n=new an(i),ln(e)&&l(e,"_locale")&&(n._locale=e._locale),ln(e)&&l(e,"_isValid")&&(n._isValid=e._isValid),n}function On(e,t){var r=e&&parseFloat(e.replace(",","."));return(isNaN(r)?0:r)*t}function In(e,t){var r={};return r.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(r.months,"M").isAfter(t)&&--r.months,r.milliseconds=+t-+e.clone().add(r.months,"M"),r}function xn(e,t){var r;return e.isValid()&&t.isValid()?(t=gn(t,e),e.isBefore(t)?r=In(e,t):((r=In(t,e)).milliseconds=-r.milliseconds,r.months=-r.months),r):{milliseconds:0,months:0}}function Pn(e,t){return function(r,n){var s;return null===n||isNaN(+n)||(A(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=r,r=n,n=s),Ln(this,An(r,n),e),this}}function Ln(e,t,r,n){var i=t._milliseconds,o=hn(t._days),a=hn(t._months);e.isValid()&&(n=null==n||n,a&&pt(e,Ze(e,"Month")+a*r),o&&Je(e,"Date",Ze(e,"Date")+o*r),i&&e._d.setTime(e._d.valueOf()+i*r),n&&s.updateOffset(e,o||a))}An.fn=an.prototype,An.invalid=on;var Dn=Pn(1,"add"),kn=Pn(-1,"subtract");function Hn(e){return"string"==typeof e||e instanceof String}function Fn(e){return T(e)||d(e)||Hn(e)||c(e)||Vn(e)||Un(e)||null==e}function Un(e){var t,r,n=a(e)&&!h(e),s=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],o=i.length;for(t=0;t<o;t+=1)r=i[t],s=s||l(e,r);return n&&s}function Vn(e){var t=o(e),r=!1;return t&&(r=0===e.filter((function(t){return!c(t)&&Hn(e)})).length),t&&r}function Bn(e){var t,r,n=a(e)&&!h(e),s=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)r=i[t],s=s||l(e,r);return n&&s}function Wn(e,t){var r=e.diff(t,"days",!0);return r<-6?"sameElse":r<-1?"lastWeek":r<0?"lastDay":r<1?"sameDay":r<2?"nextDay":r<7?"nextWeek":"sameElse"}function Yn(e,t){1===arguments.length&&(arguments[0]?Fn(arguments[0])?(e=arguments[0],t=void 0):Bn(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var r=e||Xr(),n=gn(r,this).startOf("day"),i=s.calendarFormat(this,n)||"sameElse",o=t&&(O(t[i])?t[i].call(this,r):t[i]);return this.format(o||this.localeData().calendar(i,this,Xr(r)))}function jn(){return new S(this)}function Gn(e,t){var r=T(e)?e:Xr(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()>r.valueOf():r.valueOf()<this.clone().startOf(t).valueOf())}function zn(e,t){var r=T(e)?e:Xr(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()<r.valueOf():this.clone().endOf(t).valueOf()<r.valueOf())}function $n(e,t,r,n){var s=T(e)?e:Xr(e),i=T(t)?t:Xr(t);return!!(this.isValid()&&s.isValid()&&i.isValid())&&("("===(n=n||"()")[0]?this.isAfter(s,r):!this.isBefore(s,r))&&(")"===n[1]?this.isBefore(i,r):!this.isAfter(i,r))}function Kn(e,t){var r,n=T(e)?e:Xr(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()===n.valueOf():(r=n.valueOf(),this.clone().startOf(t).valueOf()<=r&&r<=this.clone().endOf(t).valueOf()))}function Xn(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function qn(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Qn(e,t,r){var n,s,i;if(!this.isValid())return NaN;if(!(n=gn(e,this)).isValid())return NaN;switch(s=6e4*(n.utcOffset()-this.utcOffset()),t=ne(t)){case"year":i=Zn(this,n)/12;break;case"month":i=Zn(this,n);break;case"quarter":i=Zn(this,n)/3;break;case"second":i=(this-n)/1e3;break;case"minute":i=(this-n)/6e4;break;case"hour":i=(this-n)/36e5;break;case"day":i=(this-n-s)/864e5;break;case"week":i=(this-n-s)/6048e5;break;default:i=this-n}return r?i:Ie(i)}function Zn(e,t){if(e.date()<t.date())return-Zn(t,e);var r=12*(t.year()-e.year())+(t.month()-e.month()),n=e.clone().add(r,"months");return-(r+(t-n<0?(t-n)/(n-e.clone().add(r-1,"months")):(t-n)/(e.clone().add(r+1,"months")-n)))||0}function Jn(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function es(e){if(!this.isValid())return null;var t=!0!==e,r=t?this.clone().utc():this;return r.year()<0||r.year()>9999?j(r,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):O(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",j(r,"Z")):j(r,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ts(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,r,n,s="moment",i="";return this.isLocal()||(s=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+s+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r="-MM-DD[T]HH:mm:ss.SSS",n=i+'[")]',this.format(e+t+r+n)}function rs(e){e||(e=this.isUtc()?s.defaultFormatUtc:s.defaultFormat);var t=j(this,e);return this.localeData().postformat(t)}function ns(e,t){return this.isValid()&&(T(e)&&e.isValid()||Xr(e).isValid())?An({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ss(e){return this.from(Xr(),e)}function is(e,t){return this.isValid()&&(T(e)&&e.isValid()||Xr(e).isValid())?An({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function os(e){return this.to(Xr(),e)}function as(e){var t;return void 0===e?this._locale._abbr:(null!=(t=Er(e))&&(this._locale=t),this)}s.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",s.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ls=M("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function hs(){return this._locale}var us=1e3,cs=60*us,ds=60*cs,ps=3506328*ds;function gs(e,t){return(e%t+t)%t}function fs(e,t,r){return e<100&&e>=0?new Date(e+400,t,r)-ps:new Date(e,t,r).valueOf()}function ms(e,t,r){return e<100&&e>=0?Date.UTC(e+400,t,r)-ps:Date.UTC(e,t,r)}function ys(e){var t,r;if(void 0===(e=ne(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ms:fs,e){case"year":t=r(this.year(),0,1);break;case"quarter":t=r(this.year(),this.month()-this.month()%3,1);break;case"month":t=r(this.year(),this.month(),1);break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=r(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=gs(t+(this._isUTC?0:this.utcOffset()*cs),ds);break;case"minute":t=this._d.valueOf(),t-=gs(t,cs);break;case"second":t=this._d.valueOf(),t-=gs(t,us)}return this._d.setTime(t),s.updateOffset(this,!0),this}function Es(e){var t,r;if(void 0===(e=ne(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ms:fs,e){case"year":t=r(this.year()+1,0,1)-1;break;case"quarter":t=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=r(this.year(),this.month()+1,1)-1;break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=ds-gs(t+(this._isUTC?0:this.utcOffset()*cs),ds)-1;break;case"minute":t=this._d.valueOf(),t+=cs-gs(t,cs)-1;break;case"second":t=this._d.valueOf(),t+=us-gs(t,us)-1}return this._d.setTime(t),s.updateOffset(this,!0),this}function ws(){return this._d.valueOf()-6e4*(this._offset||0)}function Cs(){return Math.floor(this.valueOf()/1e3)}function vs(){return new Date(this.valueOf())}function Rs(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Ss(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function Ts(){return this.isValid()?this.toISOString():null}function Ns(){return E(this)}function Ms(){return g({},y(this))}function _s(){return y(this).overflow}function bs(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function As(e,t){var r,n,i,o=this._eras||Er("en")._eras;for(r=0,n=o.length;r<n;++r)switch("string"==typeof o[r].since&&(i=s(o[r].since).startOf("day"),o[r].since=i.valueOf()),typeof o[r].until){case"undefined":o[r].until=1/0;break;case"string":i=s(o[r].until).startOf("day").valueOf(),o[r].until=i.valueOf()}return o}function Os(e,t,r){var n,s,i,o,a,l=this.eras();for(e=e.toUpperCase(),n=0,s=l.length;n<s;++n)if(i=l[n].name.toUpperCase(),o=l[n].abbr.toUpperCase(),a=l[n].narrow.toUpperCase(),r)switch(t){case"N":case"NN":case"NNN":if(o===e)return l[n];break;case"NNNN":if(i===e)return l[n];break;case"NNNNN":if(a===e)return l[n]}else if([i,o,a].indexOf(e)>=0)return l[n]}function Is(e,t){var r=e.since<=e.until?1:-1;return void 0===t?s(e.since).year():s(e.since).year()+(t-e.offset)*r}function xs(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].name;if(n[e].until<=r&&r<=n[e].since)return n[e].name}return""}function Ps(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].narrow;if(n[e].until<=r&&r<=n[e].since)return n[e].narrow}return""}function Ls(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].abbr;if(n[e].until<=r&&r<=n[e].since)return n[e].abbr}return""}function Ds(){var e,t,r,n,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(r=i[e].since<=i[e].until?1:-1,n=this.clone().startOf("day").valueOf(),i[e].since<=n&&n<=i[e].until||i[e].until<=n&&n<=i[e].since)return(this.year()-s(i[e].since).year())*r+i[e].offset;return this.year()}function ks(e){return l(this,"_erasNameRegex")||Ys.call(this),e?this._erasNameRegex:this._erasRegex}function Hs(e){return l(this,"_erasAbbrRegex")||Ys.call(this),e?this._erasAbbrRegex:this._erasRegex}function Fs(e){return l(this,"_erasNarrowRegex")||Ys.call(this),e?this._erasNarrowRegex:this._erasRegex}function Us(e,t){return t.erasAbbrRegex(e)}function Vs(e,t){return t.erasNameRegex(e)}function Bs(e,t){return t.erasNarrowRegex(e)}function Ws(e,t){return t._eraYearOrdinalRegex||we}function Ys(){var e,t,r,n,s,i=[],o=[],a=[],l=[],h=this.eras();for(e=0,t=h.length;e<t;++e)r=Oe(h[e].name),n=Oe(h[e].abbr),s=Oe(h[e].narrow),o.push(r),i.push(n),a.push(s),l.push(r),l.push(n),l.push(s);this._erasRegex=new RegExp("^("+l.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function js(e,t){B(0,[e,e.length],0,t)}function Gs(e){return Qs.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function zs(e){return Qs.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function $s(){return Tt(this.year(),1,4)}function Ks(){return Tt(this.isoWeekYear(),1,4)}function Xs(){var e=this.localeData()._week;return Tt(this.year(),e.dow,e.doy)}function qs(){var e=this.localeData()._week;return Tt(this.weekYear(),e.dow,e.doy)}function Qs(e,t,r,n,s){var i;return null==e?St(this,n,s).year:(t>(i=Tt(e,n,s))&&(t=i),Zs.call(this,e,t,r,n,s))}function Zs(e,t,r,n,s){var i=Rt(e,t,r,n,s),o=Ct(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Js(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}B("N",0,0,"eraAbbr"),B("NN",0,0,"eraAbbr"),B("NNN",0,0,"eraAbbr"),B("NNNN",0,0,"eraName"),B("NNNNN",0,0,"eraNarrow"),B("y",["y",1],"yo","eraYear"),B("y",["yy",2],0,"eraYear"),B("y",["yyy",3],0,"eraYear"),B("y",["yyyy",4],0,"eraYear"),_e("N",Us),_e("NN",Us),_e("NNN",Us),_e("NNNN",Vs),_e("NNNNN",Bs),Le(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,r,n){var s=r._locale.erasParse(e,n,r._strict);s?y(r).era=s:y(r).invalidEra=e})),_e("y",we),_e("yy",we),_e("yyy",we),_e("yyyy",we),_e("yo",Ws),Le(["y","yy","yyy","yyyy"],Fe),Le(["yo"],(function(e,t,r,n){var s;r._locale._eraYearOrdinalRegex&&(s=e.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?t[Fe]=r._locale.eraYearOrdinalParse(e,s):t[Fe]=parseInt(e,10)})),B(0,["gg",2],0,(function(){return this.weekYear()%100})),B(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),js("gggg","weekYear"),js("ggggg","weekYear"),js("GGGG","isoWeekYear"),js("GGGGG","isoWeekYear"),_e("G",Ce),_e("g",Ce),_e("GG",pe,he),_e("gg",pe,he),_e("GGGG",ye,ce),_e("gggg",ye,ce),_e("GGGGG",Ee,de),_e("ggggg",Ee,de),De(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,r,n){t[n.substr(0,2)]=xe(e)})),De(["gg","GG"],(function(e,t,r,n){t[n]=s.parseTwoDigitYear(e)})),B("Q",0,"Qo","quarter"),_e("Q",le),Le("Q",(function(e,t){t[Ue]=3*(xe(e)-1)})),B("D",["DD",2],"Do","date"),_e("D",pe,Ne),_e("DD",pe,he),_e("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Le(["D","DD"],Ve),Le("Do",(function(e,t){t[Ve]=xe(e.match(pe)[0])}));var ei=Qe("Date",!0);function ti(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}B("DDD",["DDDD",3],"DDDo","dayOfYear"),_e("DDD",me),_e("DDDD",ue),Le(["DDD","DDDD"],(function(e,t,r){r._dayOfYear=xe(e)})),B("m",["mm",2],0,"minute"),_e("m",pe,Me),_e("mm",pe,he),Le(["m","mm"],We);var ri=Qe("Minutes",!1);B("s",["ss",2],0,"second"),_e("s",pe,Me),_e("ss",pe,he),Le(["s","ss"],Ye);var ni,si,ii=Qe("Seconds",!1);for(B("S",0,0,(function(){return~~(this.millisecond()/100)})),B(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),B(0,["SSS",3],0,"millisecond"),B(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),B(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),B(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),B(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),B(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),B(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),_e("S",me,le),_e("SS",me,he),_e("SSS",me,ue),ni="SSSS";ni.length<=9;ni+="S")_e(ni,we);function oi(e,t){t[je]=xe(1e3*("0."+e))}for(ni="S";ni.length<=9;ni+="S")Le(ni,oi);function ai(){return this._isUTC?"UTC":""}function li(){return this._isUTC?"Coordinated Universal Time":""}si=Qe("Milliseconds",!1),B("z",0,0,"zoneAbbr"),B("zz",0,0,"zoneName");var hi=S.prototype;function ui(e){return Xr(1e3*e)}function ci(){return Xr.apply(null,arguments).parseZone()}function di(e){return e}hi.add=Dn,hi.calendar=Yn,hi.clone=jn,hi.diff=Qn,hi.endOf=Es,hi.format=rs,hi.from=ns,hi.fromNow=ss,hi.to=is,hi.toNow=os,hi.get=et,hi.invalidAt=_s,hi.isAfter=Gn,hi.isBefore=zn,hi.isBetween=$n,hi.isSame=Kn,hi.isSameOrAfter=Xn,hi.isSameOrBefore=qn,hi.isValid=Ns,hi.lang=ls,hi.locale=as,hi.localeData=hs,hi.max=Qr,hi.min=qr,hi.parsingFlags=Ms,hi.set=tt,hi.startOf=ys,hi.subtract=kn,hi.toArray=Rs,hi.toObject=Ss,hi.toDate=vs,hi.toISOString=es,hi.inspect=ts,"undefined"!=typeof Symbol&&null!=Symbol.for&&(hi[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),hi.toJSON=Ts,hi.toString=Jn,hi.unix=Cs,hi.valueOf=ws,hi.creationData=bs,hi.eraName=xs,hi.eraNarrow=Ps,hi.eraAbbr=Ls,hi.eraYear=Ds,hi.year=Xe,hi.isLeapYear=qe,hi.weekYear=Gs,hi.isoWeekYear=zs,hi.quarter=hi.quarters=Js,hi.month=gt,hi.daysInMonth=ft,hi.week=hi.weeks=At,hi.isoWeek=hi.isoWeeks=Ot,hi.weeksInYear=Xs,hi.weeksInWeekYear=qs,hi.isoWeeksInYear=$s,hi.isoWeeksInISOWeekYear=Ks,hi.date=ei,hi.day=hi.days=Gt,hi.weekday=zt,hi.isoWeekday=$t,hi.dayOfYear=ti,hi.hour=hi.hours=sr,hi.minute=hi.minutes=ri,hi.second=hi.seconds=ii,hi.millisecond=hi.milliseconds=si,hi.utcOffset=mn,hi.utc=En,hi.local=wn,hi.parseZone=Cn,hi.hasAlignedHourOffset=vn,hi.isDST=Rn,hi.isLocal=Tn,hi.isUtcOffset=Nn,hi.isUtc=Mn,hi.isUTC=Mn,hi.zoneAbbr=ai,hi.zoneName=li,hi.dates=M("dates accessor is deprecated. Use date instead.",ei),hi.months=M("months accessor is deprecated. Use month instead",gt),hi.years=M("years accessor is deprecated. Use year instead",Xe),hi.zone=M("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",yn),hi.isDSTShifted=M("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Sn);var pi=P.prototype;function gi(e,t,r,n){var s=Er(),i=f().set(n,t);return s[r](i,e)}function fi(e,t,r){if(c(e)&&(t=e,e=void 0),e=e||"",null!=t)return gi(e,t,r,"month");var n,s=[];for(n=0;n<12;n++)s[n]=gi(e,n,r,"month");return s}function mi(e,t,r,n){"boolean"==typeof e?(c(t)&&(r=t,t=void 0),t=t||""):(r=t=e,e=!1,c(t)&&(r=t,t=void 0),t=t||"");var s,i=Er(),o=e?i._week.dow:0,a=[];if(null!=r)return gi(t,(r+o)%7,n,"day");for(s=0;s<7;s++)a[s]=gi(t,(s+o)%7,n,"day");return a}function yi(e,t){return fi(e,t,"months")}function Ei(e,t){return fi(e,t,"monthsShort")}function wi(e,t,r){return mi(e,t,r,"weekdays")}function Ci(e,t,r){return mi(e,t,r,"weekdaysShort")}function vi(e,t,r){return mi(e,t,r,"weekdaysMin")}pi.calendar=D,pi.longDateFormat=$,pi.invalidDate=X,pi.ordinal=Z,pi.preparse=di,pi.postformat=di,pi.relativeTime=ee,pi.pastFuture=te,pi.set=I,pi.eras=As,pi.erasParse=Os,pi.erasConvertYear=Is,pi.erasAbbrRegex=Hs,pi.erasNameRegex=ks,pi.erasNarrowRegex=Fs,pi.months=ht,pi.monthsShort=ut,pi.monthsParse=dt,pi.monthsRegex=yt,pi.monthsShortRegex=mt,pi.week=Nt,pi.firstDayOfYear=bt,pi.firstDayOfWeek=_t,pi.weekdays=Vt,pi.weekdaysMin=Wt,pi.weekdaysShort=Bt,pi.weekdaysParse=jt,pi.weekdaysRegex=Kt,pi.weekdaysShortRegex=Xt,pi.weekdaysMinRegex=qt,pi.isPM=rr,pi.meridiem=ir,fr("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===xe(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),s.lang=M("moment.lang is deprecated. Use moment.locale instead.",fr),s.langData=M("moment.langData is deprecated. Use moment.localeData instead.",Er);var Ri=Math.abs;function Si(){var e=this._data;return this._milliseconds=Ri(this._milliseconds),this._days=Ri(this._days),this._months=Ri(this._months),e.milliseconds=Ri(e.milliseconds),e.seconds=Ri(e.seconds),e.minutes=Ri(e.minutes),e.hours=Ri(e.hours),e.months=Ri(e.months),e.years=Ri(e.years),this}function Ti(e,t,r,n){var s=An(t,r);return e._milliseconds+=n*s._milliseconds,e._days+=n*s._days,e._months+=n*s._months,e._bubble()}function Ni(e,t){return Ti(this,e,t,1)}function Mi(e,t){return Ti(this,e,t,-1)}function _i(e){return e<0?Math.floor(e):Math.ceil(e)}function bi(){var e,t,r,n,s,i=this._milliseconds,o=this._days,a=this._months,l=this._data;return i>=0&&o>=0&&a>=0||i<=0&&o<=0&&a<=0||(i+=864e5*_i(Oi(a)+o),o=0,a=0),l.milliseconds=i%1e3,e=Ie(i/1e3),l.seconds=e%60,t=Ie(e/60),l.minutes=t%60,r=Ie(t/60),l.hours=r%24,o+=Ie(r/24),a+=s=Ie(Ai(o)),o-=_i(Oi(s)),n=Ie(a/12),a%=12,l.days=o,l.months=a,l.years=n,this}function Ai(e){return 4800*e/146097}function Oi(e){return 146097*e/4800}function Ii(e){if(!this.isValid())return NaN;var t,r,n=this._milliseconds;if("month"===(e=ne(e))||"quarter"===e||"year"===e)switch(t=this._days+n/864e5,r=this._months+Ai(t),e){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(t=this._days+Math.round(Oi(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return 24*t+n/36e5;case"minute":return 1440*t+n/6e4;case"second":return 86400*t+n/1e3;case"millisecond":return Math.floor(864e5*t)+n;default:throw new Error("Unknown unit "+e)}}function xi(e){return function(){return this.as(e)}}var Pi=xi("ms"),Li=xi("s"),Di=xi("m"),ki=xi("h"),Hi=xi("d"),Fi=xi("w"),Ui=xi("M"),Vi=xi("Q"),Bi=xi("y"),Wi=Pi;function Yi(){return An(this)}function ji(e){return e=ne(e),this.isValid()?this[e+"s"]():NaN}function Gi(e){return function(){return this.isValid()?this._data[e]:NaN}}var zi=Gi("milliseconds"),$i=Gi("seconds"),Ki=Gi("minutes"),Xi=Gi("hours"),qi=Gi("days"),Qi=Gi("months"),Zi=Gi("years");function Ji(){return Ie(this.days()/7)}var eo=Math.round,to={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ro(e,t,r,n,s){return s.relativeTime(t||1,!!r,e,n)}function no(e,t,r,n){var s=An(e).abs(),i=eo(s.as("s")),o=eo(s.as("m")),a=eo(s.as("h")),l=eo(s.as("d")),h=eo(s.as("M")),u=eo(s.as("w")),c=eo(s.as("y")),d=i<=r.ss&&["s",i]||i<r.s&&["ss",i]||o<=1&&["m"]||o<r.m&&["mm",o]||a<=1&&["h"]||a<r.h&&["hh",a]||l<=1&&["d"]||l<r.d&&["dd",l];return null!=r.w&&(d=d||u<=1&&["w"]||u<r.w&&["ww",u]),(d=d||h<=1&&["M"]||h<r.M&&["MM",h]||c<=1&&["y"]||["yy",c])[2]=t,d[3]=+e>0,d[4]=n,ro.apply(null,d)}function so(e){return void 0===e?eo:"function"==typeof e&&(eo=e,!0)}function io(e,t){return void 0!==to[e]&&(void 0===t?to[e]:(to[e]=t,"s"===e&&(to.ss=t-1),!0))}function oo(e,t){if(!this.isValid())return this.localeData().invalidDate();var r,n,s=!1,i=to;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(s=e),"object"==typeof t&&(i=Object.assign({},to,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),n=no(this,!s,i,r=this.localeData()),s&&(n=r.pastFuture(+this,n)),r.postformat(n)}var ao=Math.abs;function lo(e){return(e>0)-(e<0)||+e}function ho(){if(!this.isValid())return this.localeData().invalidDate();var e,t,r,n,s,i,o,a,l=ao(this._milliseconds)/1e3,h=ao(this._days),u=ao(this._months),c=this.asSeconds();return c?(e=Ie(l/60),t=Ie(e/60),l%=60,e%=60,r=Ie(u/12),u%=12,n=l?l.toFixed(3).replace(/\.?0+$/,""):"",s=c<0?"-":"",i=lo(this._months)!==lo(c)?"-":"",o=lo(this._days)!==lo(c)?"-":"",a=lo(this._milliseconds)!==lo(c)?"-":"",s+"P"+(r?i+r+"Y":"")+(u?i+u+"M":"")+(h?o+h+"D":"")+(t||e||l?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(l?a+n+"S":"")):"P0D"}var uo=an.prototype;return uo.isValid=sn,uo.abs=Si,uo.add=Ni,uo.subtract=Mi,uo.as=Ii,uo.asMilliseconds=Pi,uo.asSeconds=Li,uo.asMinutes=Di,uo.asHours=ki,uo.asDays=Hi,uo.asWeeks=Fi,uo.asMonths=Ui,uo.asQuarters=Vi,uo.asYears=Bi,uo.valueOf=Wi,uo._bubble=bi,uo.clone=Yi,uo.get=ji,uo.milliseconds=zi,uo.seconds=$i,uo.minutes=Ki,uo.hours=Xi,uo.days=qi,uo.weeks=Ji,uo.months=Qi,uo.years=Zi,uo.humanize=oo,uo.toISOString=ho,uo.toString=ho,uo.toJSON=ho,uo.locale=as,uo.localeData=hs,uo.toIsoString=M("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ho),uo.lang=ls,B("X",0,0,"unix"),B("x",0,0,"valueOf"),_e("x",Ce),_e("X",Se),Le("X",(function(e,t,r){r._d=new Date(1e3*parseFloat(e))})),Le("x",(function(e,t,r){r._d=new Date(xe(e))})),
+class ih extends Bi{}ih.HyperFormula=Bi,ih.ErrorType=ir,ih.CellError=Tr,ih.CellType=or,ih.CellValueType=Er,ih.CellValueDetailedType=wr,ih.DetailedCellError=pn,ih.ExportedCellChange=hi,ih.ExportedNamedExpressionChange=ui,ih.ConfigValueTooBigError=_t,ih.ConfigValueTooSmallError=Mt,ih.EvaluationSuspendedError=At,ih.ExpectedOneOfValuesError=bt,ih.ExpectedValueOfTypeError=Tt,ih.ArraySize=cn,ih.SimpleRangeValue=rt,ih.EmptyValue=Ye,ih.FunctionPlugin=un,ih.FunctionArgumentType=hn,ih.FunctionPluginValidationError=Lt,ih.InvalidAddressError=pt,ih.InvalidArgumentsError=gt,ih.LanguageNotRegisteredError=xt,ih.LanguageAlreadyRegisteredError=Pt,ih.MissingTranslationError=Ot,ih.NamedExpressionDoesNotExistError=Et,ih.NamedExpressionNameIsAlreadyTakenError=mt,ih.NamedExpressionNameIsInvalidError=yt,ih.NoOperationToRedoError=Ct,ih.NoOperationToUndoError=wt,ih.NoRelativeAddressesAllowedError=Ft,ih.NoSheetWithIdError=lt,ih.NoSheetWithNameError=ht,ih.NotAFormulaError=dt,ih.NothingToPasteError=vt,ih.ProtectedFunctionTranslationError=It,ih.SheetNameAlreadyTakenError=ut,ih.SheetSizeLimitExceededError=ct,ih.SourceLocationHasArrayError=kt,ih.TargetLocationHasArrayError=Ht,ih.UnableToParseError=St;const oh=Yi.defaultConfig.language;Bi.registerLanguage(oh,Gi),Bi.languages[Gi.langCode]=Gi;for(const e of Object.getOwnPropertyNames(i))e.startsWith("_")||Bi.registerFunctionPlugin(i[e]);const ah=ih;window.HyperFormula=r(44820).Ay},14130:function(e,t,r){e.exports=function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,r){return t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(e,r)}function r(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function n(e,s,i){return n=r()?Reflect.construct:function(e,r,n){var s=[null];s.push.apply(s,r);var i=new(Function.bind.apply(e,s));return n&&t(i,n.prototype),i},n.apply(null,arguments)}function s(e){return i(e)||o(e)||a(e)||h()}function i(e){if(Array.isArray(e))return l(e)}function o(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function a(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function h(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var u=Object.hasOwnProperty,c=Object.setPrototypeOf,d=Object.isFrozen,p=Object.getPrototypeOf,g=Object.getOwnPropertyDescriptor,f=Object.freeze,m=Object.seal,y=Object.create,E="undefined"!=typeof Reflect&&Reflect,w=E.apply,C=E.construct;w||(w=function(e,t,r){return e.apply(t,r)}),f||(f=function(e){return e}),m||(m=function(e){return e}),C||(C=function(e,t){return n(e,s(t))});var v=x(Array.prototype.forEach),R=x(Array.prototype.pop),S=x(Array.prototype.push),T=x(String.prototype.toLowerCase),N=x(String.prototype.toString),M=x(String.prototype.match),_=x(String.prototype.replace),b=x(String.prototype.indexOf),A=x(String.prototype.trim),O=x(RegExp.prototype.test),I=P(TypeError);function x(e){return function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),s=1;s<r;s++)n[s-1]=arguments[s];return w(e,t,n)}}function P(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return C(e,r)}}function L(e,t,r){var n;r=null!==(n=r)&&void 0!==n?n:T,c&&c(e,null);for(var s=t.length;s--;){var i=t[s];if("string"==typeof i){var o=r(i);o!==i&&(d(t)||(t[s]=o),i=o)}e[i]=!0}return e}function D(e){var t,r=y(null);for(t in e)!0===w(u,e,[t])&&(r[t]=e[t]);return r}function k(e,t){for(;null!==e;){var r=g(e,t);if(r){if(r.get)return x(r.get);if("function"==typeof r.value)return x(r.value)}e=p(e)}function n(e){return console.warn("fallback value for",e),null}return n}var H=f(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),F=f(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),U=f(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),V=f(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),B=f(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),W=f(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Y=f(["#text"]),j=f(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),G=f(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),z=f(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),$=f(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),K=m(/\{\{[\w\W]*|[\w\W]*\}\}/gm),X=m(/<%[\w\W]*|[\w\W]*%>/gm),q=m(/\${[\w\W]*}/gm),Q=m(/^data-[\-\w.\u00B7-\uFFFF]/),Z=m(/^aria-[\-\w]+$/),J=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ee=m(/^(?:\w+script|data):/i),te=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),re=m(/^html$/i),ne=m(/^[a-z][.\w]*(-[.\w]+)+$/i),se=function(){return"undefined"==typeof window?null:window},ie=function(t,r){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var n=null,s="data-tt-policy-suffix";r.currentScript&&r.currentScript.hasAttribute(s)&&(n=r.currentScript.getAttribute(s));var i="dompurify"+(n?"#"+n:"");try{return t.createPolicy(i,{createHTML:function(e){return e},createScriptURL:function(e){return e}})}catch(e){return console.warn("TrustedTypes policy "+i+" could not be created."),null}};function oe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:se(),r=function(e){return oe(e)};if(r.version="2.5.7",r.removed=[],!t||!t.document||9!==t.document.nodeType)return r.isSupported=!1,r;var n=t.document,i=t.document,o=t.DocumentFragment,a=t.HTMLTemplateElement,l=t.Node,h=t.Element,u=t.NodeFilter,c=t.NamedNodeMap,d=void 0===c?t.NamedNodeMap||t.MozNamedAttrMap:c,p=t.HTMLFormElement,g=t.DOMParser,m=t.trustedTypes,y=h.prototype,E=k(y,"cloneNode"),w=k(y,"nextSibling"),C=k(y,"childNodes"),x=k(y,"parentNode");if("function"==typeof a){var P=i.createElement("template");P.content&&P.content.ownerDocument&&(i=P.content.ownerDocument)}var ae=ie(m,n),le=ae?ae.createHTML(""):"",he=i,ue=he.implementation,ce=he.createNodeIterator,de=he.createDocumentFragment,pe=he.getElementsByTagName,ge=n.importNode,fe={};try{fe=D(i).documentMode?i.documentMode:{}}catch(e){}var me={};r.isSupported="function"==typeof x&&ue&&void 0!==ue.createHTMLDocument&&9!==fe;var ye,Ee,we=K,Ce=X,ve=q,Re=Q,Se=Z,Te=ee,Ne=te,Me=ne,_e=J,be=null,Ae=L({},[].concat(s(H),s(F),s(U),s(B),s(Y))),Oe=null,Ie=L({},[].concat(s(j),s(G),s(z),s($))),xe=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Pe=null,Le=null,De=!0,ke=!0,He=!1,Fe=!0,Ue=!1,Ve=!0,Be=!1,We=!1,Ye=!1,je=!1,Ge=!1,ze=!1,$e=!0,Ke=!1,Xe="user-content-",qe=!0,Qe=!1,Ze={},Je=null,et=L({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),tt=null,rt=L({},["audio","video","img","source","image","track"]),nt=null,st=L({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),it="http://www.w3.org/1998/Math/MathML",ot="http://www.w3.org/2000/svg",at="http://www.w3.org/1999/xhtml",lt=at,ht=!1,ut=null,ct=L({},[it,ot,at],N),dt=["application/xhtml+xml","text/html"],pt="text/html",gt=null,ft=i.createElement("form"),mt=function(e){return e instanceof RegExp||e instanceof Function},yt=function(t){gt&&gt===t||(t&&"object"===e(t)||(t={}),t=D(t),ye=ye=-1===dt.indexOf(t.PARSER_MEDIA_TYPE)?pt:t.PARSER_MEDIA_TYPE,Ee="application/xhtml+xml"===ye?N:T,be="ALLOWED_TAGS"in t?L({},t.ALLOWED_TAGS,Ee):Ae,Oe="ALLOWED_ATTR"in t?L({},t.ALLOWED_ATTR,Ee):Ie,ut="ALLOWED_NAMESPACES"in t?L({},t.ALLOWED_NAMESPACES,N):ct,nt="ADD_URI_SAFE_ATTR"in t?L(D(st),t.ADD_URI_SAFE_ATTR,Ee):st,tt="ADD_DATA_URI_TAGS"in t?L(D(rt),t.ADD_DATA_URI_TAGS,Ee):rt,Je="FORBID_CONTENTS"in t?L({},t.FORBID_CONTENTS,Ee):et,Pe="FORBID_TAGS"in t?L({},t.FORBID_TAGS,Ee):{},Le="FORBID_ATTR"in t?L({},t.FORBID_ATTR,Ee):{},Ze="USE_PROFILES"in t&&t.USE_PROFILES,De=!1!==t.ALLOW_ARIA_ATTR,ke=!1!==t.ALLOW_DATA_ATTR,He=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Fe=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,Ue=t.SAFE_FOR_TEMPLATES||!1,Ve=!1!==t.SAFE_FOR_XML,Be=t.WHOLE_DOCUMENT||!1,je=t.RETURN_DOM||!1,Ge=t.RETURN_DOM_FRAGMENT||!1,ze=t.RETURN_TRUSTED_TYPE||!1,Ye=t.FORCE_BODY||!1,$e=!1!==t.SANITIZE_DOM,Ke=t.SANITIZE_NAMED_PROPS||!1,qe=!1!==t.KEEP_CONTENT,Qe=t.IN_PLACE||!1,_e=t.ALLOWED_URI_REGEXP||_e,lt=t.NAMESPACE||at,xe=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&mt(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(xe.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&mt(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(xe.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(xe.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ue&&(ke=!1),Ge&&(je=!0),Ze&&(be=L({},s(Y)),Oe=[],!0===Ze.html&&(L(be,H),L(Oe,j)),!0===Ze.svg&&(L(be,F),L(Oe,G),L(Oe,$)),!0===Ze.svgFilters&&(L(be,U),L(Oe,G),L(Oe,$)),!0===Ze.mathMl&&(L(be,B),L(Oe,z),L(Oe,$))),t.ADD_TAGS&&(be===Ae&&(be=D(be)),L(be,t.ADD_TAGS,Ee)),t.ADD_ATTR&&(Oe===Ie&&(Oe=D(Oe)),L(Oe,t.ADD_ATTR,Ee)),t.ADD_URI_SAFE_ATTR&&L(nt,t.ADD_URI_SAFE_ATTR,Ee),t.FORBID_CONTENTS&&(Je===et&&(Je=D(Je)),L(Je,t.FORBID_CONTENTS,Ee)),qe&&(be["#text"]=!0),Be&&L(be,["html","head","body"]),be.table&&(L(be,["tbody"]),delete Pe.tbody),f&&f(t),gt=t)},Et=L({},["mi","mo","mn","ms","mtext"]),wt=L({},["annotation-xml"]),Ct=L({},["title","style","font","a","script"]),vt=L({},F);L(vt,U),L(vt,V);var Rt=L({},B);L(Rt,W);var St=function(e){var t=x(e);t&&t.tagName||(t={namespaceURI:lt,tagName:"template"});var r=T(e.tagName),n=T(t.tagName);return!!ut[e.namespaceURI]&&(e.namespaceURI===ot?t.namespaceURI===at?"svg"===r:t.namespaceURI===it?"svg"===r&&("annotation-xml"===n||Et[n]):Boolean(vt[r]):e.namespaceURI===it?t.namespaceURI===at?"math"===r:t.namespaceURI===ot?"math"===r&&wt[n]:Boolean(Rt[r]):e.namespaceURI===at?!(t.namespaceURI===ot&&!wt[n])&&!(t.namespaceURI===it&&!Et[n])&&!Rt[r]&&(Ct[r]||!vt[r]):!("application/xhtml+xml"!==ye||!ut[e.namespaceURI]))},Tt=function(e){S(r.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=le}catch(t){e.remove()}}},Nt=function(e,t){try{S(r.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){S(r.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Oe[e])if(je||Ge)try{Tt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Mt=function(e){var t,r;if(Ye)e="<remove></remove>"+e;else{var n=M(e,/^[\r\n\t ]+/);r=n&&n[0]}"application/xhtml+xml"===ye&&lt===at&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var s=ae?ae.createHTML(e):e;if(lt===at)try{t=(new g).parseFromString(s,ye)}catch(e){}if(!t||!t.documentElement){t=ue.createDocument(lt,"template",null);try{t.documentElement.innerHTML=ht?le:s}catch(e){}}var o=t.body||t.documentElement;return e&&r&&o.insertBefore(i.createTextNode(r),o.childNodes[0]||null),lt===at?pe.call(t,Be?"html":"body")[0]:Be?t.documentElement:o},_t=function(e){return ce.call(e.ownerDocument||e,e,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null,!1)},bt=function(e){return e instanceof p&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof d)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},At=function(t){return"object"===e(l)?t instanceof l:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},Ot=function(e,t,n){me[e]&&v(me[e],(function(e){e.call(r,t,n,gt)}))},It=function(e){var t;if(Ot("beforeSanitizeElements",e,null),bt(e))return Tt(e),!0;if(O(/[\u0080-\uFFFF]/,e.nodeName))return Tt(e),!0;var n=Ee(e.nodeName);if(Ot("uponSanitizeElement",e,{tagName:n,allowedTags:be}),e.hasChildNodes()&&!At(e.firstElementChild)&&(!At(e.content)||!At(e.content.firstElementChild))&&O(/<[/\w]/g,e.innerHTML)&&O(/<[/\w]/g,e.textContent))return Tt(e),!0;if("select"===n&&O(/<template/i,e.innerHTML))return Tt(e),!0;if(7===e.nodeType)return Tt(e),!0;if(Ve&&8===e.nodeType&&O(/<[/\w]/g,e.data))return Tt(e),!0;if(!be[n]||Pe[n]){if(!Pe[n]&&Pt(n)){if(xe.tagNameCheck instanceof RegExp&&O(xe.tagNameCheck,n))return!1;if(xe.tagNameCheck instanceof Function&&xe.tagNameCheck(n))return!1}if(qe&&!Je[n]){var s=x(e)||e.parentNode,i=C(e)||e.childNodes;if(i&&s)for(var o=i.length-1;o>=0;--o){var a=E(i[o],!0);a.__removalCount=(e.__removalCount||0)+1,s.insertBefore(a,w(e))}}return Tt(e),!0}return e instanceof h&&!St(e)?(Tt(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!O(/<\/no(script|embed|frames)/i,e.innerHTML)?(Ue&&3===e.nodeType&&(t=e.textContent,t=_(t,we," "),t=_(t,Ce," "),t=_(t,ve," "),e.textContent!==t&&(S(r.removed,{element:e.cloneNode()}),e.textContent=t)),Ot("afterSanitizeElements",e,null),!1):(Tt(e),!0)},xt=function(e,t,r){if($e&&("id"===t||"name"===t)&&(r in i||r in ft))return!1;if(ke&&!Le[t]&&O(Re,t));else if(De&&O(Se,t));else if(!Oe[t]||Le[t]){if(!(Pt(e)&&(xe.tagNameCheck instanceof RegExp&&O(xe.tagNameCheck,e)||xe.tagNameCheck instanceof Function&&xe.tagNameCheck(e))&&(xe.attributeNameCheck instanceof RegExp&&O(xe.attributeNameCheck,t)||xe.attributeNameCheck instanceof Function&&xe.attributeNameCheck(t))||"is"===t&&xe.allowCustomizedBuiltInElements&&(xe.tagNameCheck instanceof RegExp&&O(xe.tagNameCheck,r)||xe.tagNameCheck instanceof Function&&xe.tagNameCheck(r))))return!1}else if(nt[t]);else if(O(_e,_(r,Ne,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==b(r,"data:")||!tt[e])if(He&&!O(Te,_(r,Ne,"")));else if(r)return!1;return!0},Pt=function(e){return"annotation-xml"!==e&&M(e,Me)},Lt=function(t){var n,s,i,o;Ot("beforeSanitizeAttributes",t,null);var a=t.attributes;if(a){var l={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Oe};for(o=a.length;o--;){var h=n=a[o],u=h.name,c=h.namespaceURI;if(s="value"===u?n.value:A(n.value),i=Ee(u),l.attrName=i,l.attrValue=s,l.keepAttr=!0,l.forceKeepAttr=void 0,Ot("uponSanitizeAttribute",t,l),s=l.attrValue,!l.forceKeepAttr&&(Nt(u,t),l.keepAttr))if(Fe||!O(/\/>/i,s)){Ue&&(s=_(s,we," "),s=_(s,Ce," "),s=_(s,ve," "));var d=Ee(t.nodeName);if(xt(d,i,s))if(!Ke||"id"!==i&&"name"!==i||(Nt(u,t),s=Xe+s),Ve&&O(/((--!?|])>)|<\/(style|title)/i,s))Nt(u,t);else{if(ae&&"object"===e(m)&&"function"==typeof m.getAttributeType)if(c);else switch(m.getAttributeType(d,i)){case"TrustedHTML":s=ae.createHTML(s);break;case"TrustedScriptURL":s=ae.createScriptURL(s)}try{c?t.setAttributeNS(c,u,s):t.setAttribute(u,s),bt(t)?Tt(t):R(r.removed)}catch(e){}}}else Nt(u,t)}Ot("afterSanitizeAttributes",t,null)}},Dt=function e(t){var r,n=_t(t);for(Ot("beforeSanitizeShadowDOM",t,null);r=n.nextNode();)Ot("uponSanitizeShadowNode",r,null),It(r)||(r.content instanceof o&&e(r.content),Lt(r));Ot("afterSanitizeShadowDOM",t,null)};return r.sanitize=function(s){var i,a,h,u,c,d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if((ht=!s)&&(s="\x3c!--\x3e"),"string"!=typeof s&&!At(s)){if("function"!=typeof s.toString)throw I("toString is not a function");if("string"!=typeof(s=s.toString()))throw I("dirty is not a string, aborting")}if(!r.isSupported){if("object"===e(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof s)return t.toStaticHTML(s);if(At(s))return t.toStaticHTML(s.outerHTML)}return s}if(We||yt(d),r.removed=[],"string"==typeof s&&(Qe=!1),Qe){if(s.nodeName){var p=Ee(s.nodeName);if(!be[p]||Pe[p])throw I("root node is forbidden and cannot be sanitized in-place")}}else if(s instanceof l)1===(a=(i=Mt("\x3c!----\x3e")).ownerDocument.importNode(s,!0)).nodeType&&"BODY"===a.nodeName||"HTML"===a.nodeName?i=a:i.appendChild(a);else{if(!je&&!Ue&&!Be&&-1===s.indexOf("<"))return ae&&ze?ae.createHTML(s):s;if(!(i=Mt(s)))return je?null:ze?le:""}i&&Ye&&Tt(i.firstChild);for(var g=_t(Qe?s:i);h=g.nextNode();)3===h.nodeType&&h===u||It(h)||(h.content instanceof o&&Dt(h.content),Lt(h),u=h);if(u=null,Qe)return s;if(je){if(Ge)for(c=de.call(i.ownerDocument);i.firstChild;)c.appendChild(i.firstChild);else c=i;return(Oe.shadowroot||Oe.shadowrootmod)&&(c=ge.call(n,c,!0)),c}var f=Be?i.outerHTML:i.innerHTML;return Be&&be["!doctype"]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&O(re,i.ownerDocument.doctype.name)&&(f="<!DOCTYPE "+i.ownerDocument.doctype.name+">\n"+f),Ue&&(f=_(f,we," "),f=_(f,Ce," "),f=_(f,ve," ")),ae&&ze?ae.createHTML(f):f},r.setConfig=function(e){yt(e),We=!0},r.clearConfig=function(){gt=null,We=!1},r.isValidAttribute=function(e,t,r){gt||yt({});var n=Ee(e),s=Ee(t);return xt(n,s,r)},r.addHook=function(e,t){"function"==typeof t&&(me[e]=me[e]||[],S(me[e],t))},r.removeHook=function(e){if(me[e])return R(me[e])},r.removeHooks=function(e){me[e]&&(me[e]=[])},r.removeAllHooks=function(){me={}},r}return oe()}(),window.DOMPurify=r(14130)},98979:()=>{},57938:()=>{},44738:()=>{},58247:()=>{},79566:()=>{},59981:()=>{},80460:()=>{},56158:()=>{},34103:()=>{},42847:()=>{},95065:()=>{},64503:()=>{},73729:()=>{},39107:()=>{},54984:()=>{},73247:()=>{},90268:()=>{},45731:()=>{},53180:()=>{},95062:()=>{},81273:()=>{},83636:()=>{},71495:()=>{},21753:()=>{},1223:()=>{},21987:()=>{},82230:()=>{},15073:()=>{},23550:()=>{},9636:()=>{},45801:()=>{},30614:()=>{},83133:()=>{},18715:()=>{},61904:()=>{},60626:()=>{},84936:()=>{},15984:()=>{},33928:()=>{},27457:()=>{},70748:()=>{},61737:()=>{},91226:()=>{},99409:()=>{},99241:()=>{},22513:()=>{},40931:()=>{},92217:()=>{},88722:()=>{},57128:()=>{},71033:()=>{},3880:()=>{},36027:()=>{},25043:()=>{},55606:()=>{},26417:()=>{},6084:()=>{},54375:()=>{},88363:()=>{},72054:()=>{},46935:()=>{},81738:()=>{},70813:()=>{},37400:()=>{},24249:()=>{},78253:()=>{},6989:()=>{},80200:()=>{},43220:()=>{},38294:()=>{},6560:()=>{},24505:()=>{},54250:()=>{},91655:()=>{},21656:()=>{},96412:()=>{},8178:()=>{},17525:()=>{},76676:()=>{},91598:()=>{},44354:()=>{},83590:()=>{},55772:()=>{},12073:()=>{},60743:()=>{},2107:()=>{},15255:()=>{},54164:()=>{},39233:()=>{},97654:()=>{},94384:()=>{},94885:()=>{},14346:()=>{},19246:()=>{},46852:()=>{},43136:()=>{},54383:()=>{},85632:()=>{},89353:()=>{},728:()=>{},91535:()=>{},66809:()=>{},1335:()=>{},2560:()=>{},15924:()=>{},4126:()=>{},91743:()=>{},69116:()=>{},59340:()=>{},33541:()=>{},2822:()=>{},17577:()=>{},70362:()=>{},88503:()=>{},91635:()=>{},9335:()=>{},90229:()=>{},44296:()=>{},74433:()=>{},31409:()=>{},33222:()=>{},57530:()=>{},11068:()=>{},80981:()=>{},92707:()=>{},63372:()=>{},18692:()=>{},21299:()=>{},53389:()=>{},55579:()=>{},3321:()=>{},57865:()=>{},51548:()=>{},28454:()=>{},85754:()=>{},7791:()=>{},5186:()=>{},1314:function(e,t,r){(e=r.nmd(e)).exports=function(){"use strict";var t,n;function s(){return t.apply(null,arguments)}function i(e){t=e}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function a(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function h(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(l(e,t))return!1;return!0}function u(e){return void 0===e}function c(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function p(e,t){var r,n=[],s=e.length;for(r=0;r<s;++r)n.push(t(e[r],r));return n}function g(e,t){for(var r in t)l(t,r)&&(e[r]=t[r]);return l(t,"toString")&&(e.toString=t.toString),l(t,"valueOf")&&(e.valueOf=t.valueOf),e}function f(e,t,r,n){return Kr(e,t,r,n,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function y(e){return null==e._pf&&(e._pf=m()),e._pf}function E(e){var t=null,r=!1,s=e._d&&!isNaN(e._d.getTime());return s&&(t=y(e),r=n.call(t.parsedDateParts,(function(e){return null!=e})),s=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&r),e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour)),null!=Object.isFrozen&&Object.isFrozen(e)?s:(e._isValid=s,e._isValid)}function w(e){var t=f(NaN);return null!=e?g(y(t),e):y(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){var t,r=Object(this),n=r.length>>>0;for(t=0;t<n;t++)if(t in r&&e.call(this,r[t],t,r))return!0;return!1};var C=s.momentProperties=[],v=!1;function R(e,t){var r,n,s,i=C.length;if(u(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),u(t._i)||(e._i=t._i),u(t._f)||(e._f=t._f),u(t._l)||(e._l=t._l),u(t._strict)||(e._strict=t._strict),u(t._tzm)||(e._tzm=t._tzm),u(t._isUTC)||(e._isUTC=t._isUTC),u(t._offset)||(e._offset=t._offset),u(t._pf)||(e._pf=y(t)),u(t._locale)||(e._locale=t._locale),i>0)for(r=0;r<i;r++)u(s=t[n=C[r]])||(e[n]=s);return e}function S(e){R(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,s.updateOffset(this),v=!1)}function T(e){return e instanceof S||null!=e&&null!=e._isAMomentObject}function N(e){!1===s.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function M(e,t){var r=!0;return g((function(){if(null!=s.deprecationHandler&&s.deprecationHandler(null,e),r){var n,i,o,a=[],h=arguments.length;for(i=0;i<h;i++){if(n="","object"==typeof arguments[i]){for(o in n+="\n["+i+"] ",arguments[0])l(arguments[0],o)&&(n+=o+": "+arguments[0][o]+", ");n=n.slice(0,-2)}else n=arguments[i];a.push(n)}N(e+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),r=!1}return t.apply(this,arguments)}),t)}var _,b={};function A(e,t){null!=s.deprecationHandler&&s.deprecationHandler(e,t),b[e]||(N(t),b[e]=!0)}function O(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function I(e){var t,r;for(r in e)l(e,r)&&(O(t=e[r])?this[r]=t:this["_"+r]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function x(e,t){var r,n=g({},e);for(r in t)l(t,r)&&(a(e[r])&&a(t[r])?(n[r]={},g(n[r],e[r]),g(n[r],t[r])):null!=t[r]?n[r]=t[r]:delete n[r]);for(r in e)l(e,r)&&!l(t,r)&&a(e[r])&&(n[r]=g({},n[r]));return n}function P(e){null!=e&&this.set(e)}s.suppressDeprecationWarnings=!1,s.deprecationHandler=null,_=Object.keys?Object.keys:function(e){var t,r=[];for(t in e)l(e,t)&&r.push(t);return r};var L={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function D(e,t,r){var n=this._calendar[e]||this._calendar.sameElse;return O(n)?n.call(t,r):n}function k(e,t,r){var n=""+Math.abs(e),s=t-n.length;return(e>=0?r?"+":"":"-")+Math.pow(10,Math.max(0,s)).toString().substr(1)+n}var H=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,F=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,U={},V={};function B(e,t,r,n){var s=n;"string"==typeof n&&(s=function(){return this[n]()}),e&&(V[e]=s),t&&(V[t[0]]=function(){return k(s.apply(this,arguments),t[1],t[2])}),r&&(V[r]=function(){return this.localeData().ordinal(s.apply(this,arguments),e)})}function W(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function Y(e){var t,r,n=e.match(H);for(t=0,r=n.length;t<r;t++)V[n[t]]?n[t]=V[n[t]]:n[t]=W(n[t]);return function(t){var s,i="";for(s=0;s<r;s++)i+=O(n[s])?n[s].call(t,e):n[s];return i}}function j(e,t){return e.isValid()?(t=G(t,e.localeData()),U[t]=U[t]||Y(t),U[t](e)):e.localeData().invalidDate()}function G(e,t){var r=5;function n(e){return t.longDateFormat(e)||e}for(F.lastIndex=0;r>=0&&F.test(e);)e=e.replace(F,n),F.lastIndex=0,r-=1;return e}var z={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function $(e){var t=this._longDateFormat[e],r=this._longDateFormat[e.toUpperCase()];return t||!r?t:(this._longDateFormat[e]=r.match(H).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var K="Invalid date";function X(){return this._invalidDate}var q="%d",Q=/\d{1,2}/;function Z(e){return this._ordinal.replace("%d",e)}var J={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function ee(e,t,r,n){var s=this._relativeTime[r];return O(s)?s(e,t,r,n):s.replace(/%d/i,e)}function te(e,t){var r=this._relativeTime[e>0?"future":"past"];return O(r)?r(t):r.replace(/%s/i,t)}var re={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function ne(e){return"string"==typeof e?re[e]||re[e.toLowerCase()]:void 0}function se(e){var t,r,n={};for(r in e)l(e,r)&&(t=ne(r))&&(n[t]=e[r]);return n}var ie={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function oe(e){var t,r=[];for(t in e)l(e,t)&&r.push({unit:t,priority:ie[t]});return r.sort((function(e,t){return e.priority-t.priority})),r}var ae,le=/\d/,he=/\d\d/,ue=/\d{3}/,ce=/\d{4}/,de=/[+-]?\d{6}/,pe=/\d\d?/,ge=/\d\d\d\d?/,fe=/\d\d\d\d\d\d?/,me=/\d{1,3}/,ye=/\d{1,4}/,Ee=/[+-]?\d{1,6}/,we=/\d+/,Ce=/[+-]?\d+/,ve=/Z|[+-]\d\d:?\d\d/gi,Re=/Z|[+-]\d\d(?::?\d\d)?/gi,Se=/[+-]?\d+(\.\d{1,3})?/,Te=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Ne=/^[1-9]\d?/,Me=/^([1-9]\d|\d)/;function _e(e,t,r){ae[e]=O(t)?t:function(e,n){return e&&r?r:t}}function be(e,t){return l(ae,e)?ae[e](t._strict,t._locale):new RegExp(Ae(e))}function Ae(e){return Oe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,r,n,s){return t||r||n||s})))}function Oe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Ie(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function xe(e){var t=+e,r=0;return 0!==t&&isFinite(t)&&(r=Ie(t)),r}ae={};var Pe={};function Le(e,t){var r,n,s=t;for("string"==typeof e&&(e=[e]),c(t)&&(s=function(e,r){r[t]=xe(e)}),n=e.length,r=0;r<n;r++)Pe[e[r]]=s}function De(e,t){Le(e,(function(e,r,n,s){n._w=n._w||{},t(e,n._w,n,s)}))}function ke(e,t,r){null!=t&&l(Pe,e)&&Pe[e](t,r._a,r,e)}function He(e){return e%4==0&&e%100!=0||e%400==0}var Fe=0,Ue=1,Ve=2,Be=3,We=4,Ye=5,je=6,Ge=7,ze=8;function $e(e){return He(e)?366:365}B("Y",0,0,(function(){var e=this.year();return e<=9999?k(e,4):"+"+e})),B(0,["YY",2],0,(function(){return this.year()%100})),B(0,["YYYY",4],0,"year"),B(0,["YYYYY",5],0,"year"),B(0,["YYYYYY",6,!0],0,"year"),_e("Y",Ce),_e("YY",pe,he),_e("YYYY",ye,ce),_e("YYYYY",Ee,de),_e("YYYYYY",Ee,de),Le(["YYYYY","YYYYYY"],Fe),Le("YYYY",(function(e,t){t[Fe]=2===e.length?s.parseTwoDigitYear(e):xe(e)})),Le("YY",(function(e,t){t[Fe]=s.parseTwoDigitYear(e)})),Le("Y",(function(e,t){t[Fe]=parseInt(e,10)})),s.parseTwoDigitYear=function(e){return xe(e)+(xe(e)>68?1900:2e3)};var Ke,Xe=Qe("FullYear",!0);function qe(){return He(this.year())}function Qe(e,t){return function(r){return null!=r?(Je(this,e,r),s.updateOffset(this,t),this):Ze(this,e)}}function Ze(e,t){if(!e.isValid())return NaN;var r=e._d,n=e._isUTC;switch(t){case"Milliseconds":return n?r.getUTCMilliseconds():r.getMilliseconds();case"Seconds":return n?r.getUTCSeconds():r.getSeconds();case"Minutes":return n?r.getUTCMinutes():r.getMinutes();case"Hours":return n?r.getUTCHours():r.getHours();case"Date":return n?r.getUTCDate():r.getDate();case"Day":return n?r.getUTCDay():r.getDay();case"Month":return n?r.getUTCMonth():r.getMonth();case"FullYear":return n?r.getUTCFullYear():r.getFullYear();default:return NaN}}function Je(e,t,r){var n,s,i,o,a;if(e.isValid()&&!isNaN(r)){switch(n=e._d,s=e._isUTC,t){case"Milliseconds":return void(s?n.setUTCMilliseconds(r):n.setMilliseconds(r));case"Seconds":return void(s?n.setUTCSeconds(r):n.setSeconds(r));case"Minutes":return void(s?n.setUTCMinutes(r):n.setMinutes(r));case"Hours":return void(s?n.setUTCHours(r):n.setHours(r));case"Date":return void(s?n.setUTCDate(r):n.setDate(r));case"FullYear":break;default:return}i=r,o=e.month(),a=29!==(a=e.date())||1!==o||He(i)?a:28,s?n.setUTCFullYear(i,o,a):n.setFullYear(i,o,a)}}function et(e){return O(this[e=ne(e)])?this[e]():this}function tt(e,t){if("object"==typeof e){var r,n=oe(e=se(e)),s=n.length;for(r=0;r<s;r++)this[n[r].unit](e[n[r].unit])}else if(O(this[e=ne(e)]))return this[e](t);return this}function rt(e,t){return(e%t+t)%t}function nt(e,t){if(isNaN(e)||isNaN(t))return NaN;var r=rt(t,12);return e+=(t-r)/12,1===r?He(e)?29:28:31-r%7%2}Ke=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},B("M",["MM",2],"Mo",(function(){return this.month()+1})),B("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),B("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),_e("M",pe,Ne),_e("MM",pe,he),_e("MMM",(function(e,t){return t.monthsShortRegex(e)})),_e("MMMM",(function(e,t){return t.monthsRegex(e)})),Le(["M","MM"],(function(e,t){t[Ue]=xe(e)-1})),Le(["MMM","MMMM"],(function(e,t,r,n){var s=r._locale.monthsParse(e,n,r._strict);null!=s?t[Ue]=s:y(r).invalidMonth=e}));var st="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),it="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ot=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,at=Te,lt=Te;function ht(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||ot).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone}function ut(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[ot.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ct(e,t,r){var n,s,i,o=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)i=f([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(i,"").toLocaleLowerCase();return r?"MMM"===t?-1!==(s=Ke.call(this._shortMonthsParse,o))?s:null:-1!==(s=Ke.call(this._longMonthsParse,o))?s:null:"MMM"===t?-1!==(s=Ke.call(this._shortMonthsParse,o))||-1!==(s=Ke.call(this._longMonthsParse,o))?s:null:-1!==(s=Ke.call(this._longMonthsParse,o))||-1!==(s=Ke.call(this._shortMonthsParse,o))?s:null}function dt(e,t,r){var n,s,i;if(this._monthsParseExact)return ct.call(this,e,t,r);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(s=f([2e3,n]),r&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(s,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(s,"").replace(".","")+"$","i")),r||this._monthsParse[n]||(i="^"+this.months(s,"")+"|^"+this.monthsShort(s,""),this._monthsParse[n]=new RegExp(i.replace(".",""),"i")),r&&"MMMM"===t&&this._longMonthsParse[n].test(e))return n;if(r&&"MMM"===t&&this._shortMonthsParse[n].test(e))return n;if(!r&&this._monthsParse[n].test(e))return n}}function pt(e,t){if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=xe(t);else if(!c(t=e.localeData().monthsParse(t)))return e;var r=t,n=e.date();return n=n<29?n:Math.min(n,nt(e.year(),r)),e._isUTC?e._d.setUTCMonth(r,n):e._d.setMonth(r,n),e}function gt(e){return null!=e?(pt(this,e),s.updateOffset(this,!0),this):Ze(this,"Month")}function ft(){return nt(this.year(),this.month())}function mt(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Et.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=at),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function yt(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Et.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=lt),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function Et(){function e(e,t){return t.length-e.length}var t,r,n,s,i=[],o=[],a=[];for(t=0;t<12;t++)r=f([2e3,t]),n=Oe(this.monthsShort(r,"")),s=Oe(this.months(r,"")),i.push(n),o.push(s),a.push(s),a.push(n);i.sort(e),o.sort(e),a.sort(e),this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function wt(e,t,r,n,s,i,o){var a;return e<100&&e>=0?(a=new Date(e+400,t,r,n,s,i,o),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,r,n,s,i,o),a}function Ct(e){var t,r;return e<100&&e>=0?((r=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,r)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function vt(e,t,r){var n=7+t-r;return-(7+Ct(e,0,n).getUTCDay()-t)%7+n-1}function Rt(e,t,r,n,s){var i,o,a=1+7*(t-1)+(7+r-n)%7+vt(e,n,s);return a<=0?o=$e(i=e-1)+a:a>$e(e)?(i=e+1,o=a-$e(e)):(i=e,o=a),{year:i,dayOfYear:o}}function St(e,t,r){var n,s,i=vt(e.year(),t,r),o=Math.floor((e.dayOfYear()-i-1)/7)+1;return o<1?n=o+Tt(s=e.year()-1,t,r):o>Tt(e.year(),t,r)?(n=o-Tt(e.year(),t,r),s=e.year()+1):(s=e.year(),n=o),{week:n,year:s}}function Tt(e,t,r){var n=vt(e,t,r),s=vt(e+1,t,r);return($e(e)-n+s)/7}function Nt(e){return St(e,this._week.dow,this._week.doy).week}B("w",["ww",2],"wo","week"),B("W",["WW",2],"Wo","isoWeek"),_e("w",pe,Ne),_e("ww",pe,he),_e("W",pe,Ne),_e("WW",pe,he),De(["w","ww","W","WW"],(function(e,t,r,n){t[n.substr(0,1)]=xe(e)}));var Mt={dow:0,doy:6};function _t(){return this._week.dow}function bt(){return this._week.doy}function At(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Ot(e){var t=St(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function It(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function xt(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Pt(e,t){return e.slice(t,7).concat(e.slice(0,t))}B("d",0,"do","day"),B("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),B("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),B("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),B("e",0,0,"weekday"),B("E",0,0,"isoWeekday"),_e("d",pe),_e("e",pe),_e("E",pe),_e("dd",(function(e,t){return t.weekdaysMinRegex(e)})),_e("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),_e("dddd",(function(e,t){return t.weekdaysRegex(e)})),De(["dd","ddd","dddd"],(function(e,t,r,n){var s=r._locale.weekdaysParse(e,n,r._strict);null!=s?t.d=s:y(r).invalidWeekday=e})),De(["d","e","E"],(function(e,t,r,n){t[n]=xe(e)}));var Lt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Dt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),kt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ht=Te,Ft=Te,Ut=Te;function Vt(e,t){var r=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Pt(r,this._week.dow):e?r[e.day()]:r}function Bt(e){return!0===e?Pt(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Wt(e){return!0===e?Pt(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Yt(e,t,r){var n,s,i,o=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)i=f([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(i,"").toLocaleLowerCase();return r?"dddd"===t?-1!==(s=Ke.call(this._weekdaysParse,o))?s:null:"ddd"===t?-1!==(s=Ke.call(this._shortWeekdaysParse,o))?s:null:-1!==(s=Ke.call(this._minWeekdaysParse,o))?s:null:"dddd"===t?-1!==(s=Ke.call(this._weekdaysParse,o))||-1!==(s=Ke.call(this._shortWeekdaysParse,o))||-1!==(s=Ke.call(this._minWeekdaysParse,o))?s:null:"ddd"===t?-1!==(s=Ke.call(this._shortWeekdaysParse,o))||-1!==(s=Ke.call(this._weekdaysParse,o))||-1!==(s=Ke.call(this._minWeekdaysParse,o))?s:null:-1!==(s=Ke.call(this._minWeekdaysParse,o))||-1!==(s=Ke.call(this._weekdaysParse,o))||-1!==(s=Ke.call(this._shortWeekdaysParse,o))?s:null}function jt(e,t,r){var n,s,i;if(this._weekdaysParseExact)return Yt.call(this,e,t,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(s=f([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(s,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(s,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(s,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(i="^"+this.weekdays(s,"")+"|^"+this.weekdaysShort(s,"")+"|^"+this.weekdaysMin(s,""),this._weekdaysParse[n]=new RegExp(i.replace(".",""),"i")),r&&"dddd"===t&&this._fullWeekdaysParse[n].test(e))return n;if(r&&"ddd"===t&&this._shortWeekdaysParse[n].test(e))return n;if(r&&"dd"===t&&this._minWeekdaysParse[n].test(e))return n;if(!r&&this._weekdaysParse[n].test(e))return n}}function Gt(e){if(!this.isValid())return null!=e?this:NaN;var t=Ze(this,"Day");return null!=e?(e=It(e,this.localeData()),this.add(e-t,"d")):t}function zt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function $t(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=xt(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Kt(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Ht),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Xt(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ft),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function qt(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ut),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qt(){function e(e,t){return t.length-e.length}var t,r,n,s,i,o=[],a=[],l=[],h=[];for(t=0;t<7;t++)r=f([2e3,1]).day(t),n=Oe(this.weekdaysMin(r,"")),s=Oe(this.weekdaysShort(r,"")),i=Oe(this.weekdays(r,"")),o.push(n),a.push(s),l.push(i),h.push(n),h.push(s),h.push(i);o.sort(e),a.sort(e),l.sort(e),h.sort(e),this._weekdaysRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Zt(){return this.hours()%12||12}function Jt(){return this.hours()||24}function er(e,t){B(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function tr(e,t){return t._meridiemParse}function rr(e){return"p"===(e+"").toLowerCase().charAt(0)}B("H",["HH",2],0,"hour"),B("h",["hh",2],0,Zt),B("k",["kk",2],0,Jt),B("hmm",0,0,(function(){return""+Zt.apply(this)+k(this.minutes(),2)})),B("hmmss",0,0,(function(){return""+Zt.apply(this)+k(this.minutes(),2)+k(this.seconds(),2)})),B("Hmm",0,0,(function(){return""+this.hours()+k(this.minutes(),2)})),B("Hmmss",0,0,(function(){return""+this.hours()+k(this.minutes(),2)+k(this.seconds(),2)})),er("a",!0),er("A",!1),_e("a",tr),_e("A",tr),_e("H",pe,Me),_e("h",pe,Ne),_e("k",pe,Ne),_e("HH",pe,he),_e("hh",pe,he),_e("kk",pe,he),_e("hmm",ge),_e("hmmss",fe),_e("Hmm",ge),_e("Hmmss",fe),Le(["H","HH"],Be),Le(["k","kk"],(function(e,t,r){var n=xe(e);t[Be]=24===n?0:n})),Le(["a","A"],(function(e,t,r){r._isPm=r._locale.isPM(e),r._meridiem=e})),Le(["h","hh"],(function(e,t,r){t[Be]=xe(e),y(r).bigHour=!0})),Le("hmm",(function(e,t,r){var n=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n)),y(r).bigHour=!0})),Le("hmmss",(function(e,t,r){var n=e.length-4,s=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n,2)),t[Ye]=xe(e.substr(s)),y(r).bigHour=!0})),Le("Hmm",(function(e,t,r){var n=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n))})),Le("Hmmss",(function(e,t,r){var n=e.length-4,s=e.length-2;t[Be]=xe(e.substr(0,n)),t[We]=xe(e.substr(n,2)),t[Ye]=xe(e.substr(s))}));var nr=/[ap]\.?m?\.?/i,sr=Qe("Hours",!0);function ir(e,t,r){return e>11?r?"pm":"PM":r?"am":"AM"}var or,ar={calendar:L,longDateFormat:z,invalidDate:K,ordinal:q,dayOfMonthOrdinalParse:Q,relativeTime:J,months:st,monthsShort:it,week:Mt,weekdays:Lt,weekdaysMin:kt,weekdaysShort:Dt,meridiemParse:nr},lr={},hr={};function ur(e,t){var r,n=Math.min(e.length,t.length);for(r=0;r<n;r+=1)if(e[r]!==t[r])return r;return n}function cr(e){return e?e.toLowerCase().replace("_","-"):e}function dr(e){for(var t,r,n,s,i=0;i<e.length;){for(t=(s=cr(e[i]).split("-")).length,r=(r=cr(e[i+1]))?r.split("-"):null;t>0;){if(n=gr(s.slice(0,t).join("-")))return n;if(r&&r.length>=t&&ur(s,r)>=t-1)break;t--}i++}return or}function pr(e){return!(!e||!e.match("^[^/\\\\]*$"))}function gr(t){var n=null;if(void 0===lr[t]&&e&&e.exports&&pr(t))try{n=or._abbr,r(35358)("./"+t),fr(n)}catch(e){lr[t]=null}return lr[t]}function fr(e,t){var r;return e&&((r=u(t)?Er(e):mr(e,t))?or=r:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),or._abbr}function mr(e,t){if(null!==t){var r,n=ar;if(t.abbr=e,null!=lr[e])A("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=lr[e]._config;else if(null!=t.parentLocale)if(null!=lr[t.parentLocale])n=lr[t.parentLocale]._config;else{if(null==(r=gr(t.parentLocale)))return hr[t.parentLocale]||(hr[t.parentLocale]=[]),hr[t.parentLocale].push({name:e,config:t}),null;n=r._config}return lr[e]=new P(x(n,t)),hr[e]&&hr[e].forEach((function(e){mr(e.name,e.config)})),fr(e),lr[e]}return delete lr[e],null}function yr(e,t){if(null!=t){var r,n,s=ar;null!=lr[e]&&null!=lr[e].parentLocale?lr[e].set(x(lr[e]._config,t)):(null!=(n=gr(e))&&(s=n._config),t=x(s,t),null==n&&(t.abbr=e),(r=new P(t)).parentLocale=lr[e],lr[e]=r),fr(e)}else null!=lr[e]&&(null!=lr[e].parentLocale?(lr[e]=lr[e].parentLocale,e===fr()&&fr(e)):null!=lr[e]&&delete lr[e]);return lr[e]}function Er(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return or;if(!o(e)){if(t=gr(e))return t;e=[e]}return dr(e)}function wr(){return _(lr)}function Cr(e){var t,r=e._a;return r&&-2===y(e).overflow&&(t=r[Ue]<0||r[Ue]>11?Ue:r[Ve]<1||r[Ve]>nt(r[Fe],r[Ue])?Ve:r[Be]<0||r[Be]>24||24===r[Be]&&(0!==r[We]||0!==r[Ye]||0!==r[je])?Be:r[We]<0||r[We]>59?We:r[Ye]<0||r[Ye]>59?Ye:r[je]<0||r[je]>999?je:-1,y(e)._overflowDayOfYear&&(t<Fe||t>Ve)&&(t=Ve),y(e)._overflowWeeks&&-1===t&&(t=Ge),y(e)._overflowWeekday&&-1===t&&(t=ze),y(e).overflow=t),e}var vr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Rr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Sr=/Z|[+-]\d\d(?::?\d\d)?/,Tr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Nr=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Mr=/^\/?Date\((-?\d+)/i,_r=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,br={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Ar(e){var t,r,n,s,i,o,a=e._i,l=vr.exec(a)||Rr.exec(a),h=Tr.length,u=Nr.length;if(l){for(y(e).iso=!0,t=0,r=h;t<r;t++)if(Tr[t][1].exec(l[1])){s=Tr[t][0],n=!1!==Tr[t][2];break}if(null==s)return void(e._isValid=!1);if(l[3]){for(t=0,r=u;t<r;t++)if(Nr[t][1].exec(l[3])){i=(l[2]||" ")+Nr[t][0];break}if(null==i)return void(e._isValid=!1)}if(!n&&null!=i)return void(e._isValid=!1);if(l[4]){if(!Sr.exec(l[4]))return void(e._isValid=!1);o="Z"}e._f=s+(i||"")+(o||""),Br(e)}else e._isValid=!1}function Or(e,t,r,n,s,i){var o=[Ir(e),it.indexOf(t),parseInt(r,10),parseInt(n,10),parseInt(s,10)];return i&&o.push(parseInt(i,10)),o}function Ir(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function xr(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Pr(e,t,r){return!e||Dt.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(y(r).weekdayMismatch=!0,r._isValid=!1,!1)}function Lr(e,t,r){if(e)return br[e];if(t)return 0;var n=parseInt(r,10),s=n%100;return(n-s)/100*60+s}function Dr(e){var t,r=_r.exec(xr(e._i));if(r){if(t=Or(r[4],r[3],r[2],r[5],r[6],r[7]),!Pr(r[1],t,e))return;e._a=t,e._tzm=Lr(r[8],r[9],r[10]),e._d=Ct.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),y(e).rfc2822=!0}else e._isValid=!1}function kr(e){var t=Mr.exec(e._i);null===t?(Ar(e),!1===e._isValid&&(delete e._isValid,Dr(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:s.createFromInputFallback(e)))):e._d=new Date(+t[1])}function Hr(e,t,r){return null!=e?e:null!=t?t:r}function Fr(e){var t=new Date(s.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function Ur(e){var t,r,n,s,i,o=[];if(!e._d){for(n=Fr(e),e._w&&null==e._a[Ve]&&null==e._a[Ue]&&Vr(e),null!=e._dayOfYear&&(i=Hr(e._a[Fe],n[Fe]),(e._dayOfYear>$e(i)||0===e._dayOfYear)&&(y(e)._overflowDayOfYear=!0),r=Ct(i,0,e._dayOfYear),e._a[Ue]=r.getUTCMonth(),e._a[Ve]=r.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=o[t]=n[t];for(;t<7;t++)e._a[t]=o[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Be]&&0===e._a[We]&&0===e._a[Ye]&&0===e._a[je]&&(e._nextDay=!0,e._a[Be]=0),e._d=(e._useUTC?Ct:wt).apply(null,o),s=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Be]=24),e._w&&void 0!==e._w.d&&e._w.d!==s&&(y(e).weekdayMismatch=!0)}}function Vr(e){var t,r,n,s,i,o,a,l,h;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,o=4,r=Hr(t.GG,e._a[Fe],St(Xr(),1,4).year),n=Hr(t.W,1),((s=Hr(t.E,1))<1||s>7)&&(l=!0)):(i=e._locale._week.dow,o=e._locale._week.doy,h=St(Xr(),i,o),r=Hr(t.gg,e._a[Fe],h.year),n=Hr(t.w,h.week),null!=t.d?((s=t.d)<0||s>6)&&(l=!0):null!=t.e?(s=t.e+i,(t.e<0||t.e>6)&&(l=!0)):s=i),n<1||n>Tt(r,i,o)?y(e)._overflowWeeks=!0:null!=l?y(e)._overflowWeekday=!0:(a=Rt(r,n,s,i,o),e._a[Fe]=a.year,e._dayOfYear=a.dayOfYear)}function Br(e){if(e._f!==s.ISO_8601)if(e._f!==s.RFC_2822){e._a=[],y(e).empty=!0;var t,r,n,i,o,a,l,h=""+e._i,u=h.length,c=0;for(l=(n=G(e._f,e._locale).match(H)||[]).length,t=0;t<l;t++)i=n[t],(r=(h.match(be(i,e))||[])[0])&&((o=h.substr(0,h.indexOf(r))).length>0&&y(e).unusedInput.push(o),h=h.slice(h.indexOf(r)+r.length),c+=r.length),V[i]?(r?y(e).empty=!1:y(e).unusedTokens.push(i),ke(i,r,e)):e._strict&&!r&&y(e).unusedTokens.push(i);y(e).charsLeftOver=u-c,h.length>0&&y(e).unusedInput.push(h),e._a[Be]<=12&&!0===y(e).bigHour&&e._a[Be]>0&&(y(e).bigHour=void 0),y(e).parsedDateParts=e._a.slice(0),y(e).meridiem=e._meridiem,e._a[Be]=Wr(e._locale,e._a[Be],e._meridiem),null!==(a=y(e).era)&&(e._a[Fe]=e._locale.erasConvertYear(a,e._a[Fe])),Ur(e),Cr(e)}else Dr(e);else Ar(e)}function Wr(e,t,r){var n;return null==r?t:null!=e.meridiemHour?e.meridiemHour(t,r):null!=e.isPM?((n=e.isPM(r))&&t<12&&(t+=12),n||12!==t||(t=0),t):t}function Yr(e){var t,r,n,s,i,o,a=!1,l=e._f.length;if(0===l)return y(e).invalidFormat=!0,void(e._d=new Date(NaN));for(s=0;s<l;s++)i=0,o=!1,t=R({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[s],Br(t),E(t)&&(o=!0),i+=y(t).charsLeftOver,i+=10*y(t).unusedTokens.length,y(t).score=i,a?i<n&&(n=i,r=t):(null==n||i<n||o)&&(n=i,r=t,o&&(a=!0));g(e,r||t)}function jr(e){if(!e._d){var t=se(e._i),r=void 0===t.day?t.date:t.day;e._a=p([t.year,t.month,r,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),Ur(e)}}function Gr(e){var t=new S(Cr(zr(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function zr(e){var t=e._i,r=e._f;return e._locale=e._locale||Er(e._l),null===t||void 0===r&&""===t?w({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),T(t)?new S(Cr(t)):(d(t)?e._d=t:o(r)?Yr(e):r?Br(e):$r(e),E(e)||(e._d=null),e))}function $r(e){var t=e._i;u(t)?e._d=new Date(s.now()):d(t)?e._d=new Date(t.valueOf()):"string"==typeof t?kr(e):o(t)?(e._a=p(t.slice(0),(function(e){return parseInt(e,10)})),Ur(e)):a(t)?jr(e):c(t)?e._d=new Date(t):s.createFromInputFallback(e)}function Kr(e,t,r,n,s){var i={};return!0!==t&&!1!==t||(n=t,t=void 0),!0!==r&&!1!==r||(n=r,r=void 0),(a(e)&&h(e)||o(e)&&0===e.length)&&(e=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=s,i._l=r,i._i=e,i._f=t,i._strict=n,Gr(i)}function Xr(e,t,r,n){return Kr(e,t,r,n,!1)}s.createFromInputFallback=M("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),s.ISO_8601=function(){},s.RFC_2822=function(){};var qr=M("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xr.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:w()})),Qr=M("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xr.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:w()}));function Zr(e,t){var r,n;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Xr();for(r=t[0],n=1;n<t.length;++n)t[n].isValid()&&!t[n][e](r)||(r=t[n]);return r}function Jr(){return Zr("isBefore",[].slice.call(arguments,0))}function en(){return Zr("isAfter",[].slice.call(arguments,0))}var tn=function(){return Date.now?Date.now():+new Date},rn=["year","quarter","month","week","day","hour","minute","second","millisecond"];function nn(e){var t,r,n=!1,s=rn.length;for(t in e)if(l(e,t)&&(-1===Ke.call(rn,t)||null!=e[t]&&isNaN(e[t])))return!1;for(r=0;r<s;++r)if(e[rn[r]]){if(n)return!1;parseFloat(e[rn[r]])!==xe(e[rn[r]])&&(n=!0)}return!0}function sn(){return this._isValid}function on(){return An(NaN)}function an(e){var t=se(e),r=t.year||0,n=t.quarter||0,s=t.month||0,i=t.week||t.isoWeek||0,o=t.day||0,a=t.hour||0,l=t.minute||0,h=t.second||0,u=t.millisecond||0;this._isValid=nn(t),this._milliseconds=+u+1e3*h+6e4*l+1e3*a*60*60,this._days=+o+7*i,this._months=+s+3*n+12*r,this._data={},this._locale=Er(),this._bubble()}function ln(e){return e instanceof an}function hn(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function un(e,t,r){var n,s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),o=0;for(n=0;n<s;n++)(r&&e[n]!==t[n]||!r&&xe(e[n])!==xe(t[n]))&&o++;return o+i}function cn(e,t){B(e,0,0,(function(){var e=this.utcOffset(),r="+";return e<0&&(e=-e,r="-"),r+k(~~(e/60),2)+t+k(~~e%60,2)}))}cn("Z",":"),cn("ZZ",""),_e("Z",Re),_e("ZZ",Re),Le(["Z","ZZ"],(function(e,t,r){r._useUTC=!0,r._tzm=pn(Re,e)}));var dn=/([\+\-]|\d\d)/gi;function pn(e,t){var r,n,s=(t||"").match(e);return null===s?null:0===(n=60*(r=((s[s.length-1]||[])+"").match(dn)||["-",0,0])[1]+xe(r[2]))?0:"+"===r[0]?n:-n}function gn(e,t){var r,n;return t._isUTC?(r=t.clone(),n=(T(e)||d(e)?e.valueOf():Xr(e).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+n),s.updateOffset(r,!1),r):Xr(e).local()}function fn(e){return-Math.round(e._d.getTimezoneOffset())}function mn(e,t,r){var n,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=pn(Re,e)))return this}else Math.abs(e)<16&&!r&&(e*=60);return!this._isUTC&&t&&(n=fn(this)),this._offset=e,this._isUTC=!0,null!=n&&this.add(n,"m"),i!==e&&(!t||this._changeInProgress?Ln(this,An(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,s.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:fn(this)}function yn(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function En(e){return this.utcOffset(0,e)}function wn(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(fn(this),"m")),this}function Cn(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=pn(ve,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function vn(e){return!!this.isValid()&&(e=e?Xr(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Rn(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Sn(){if(!u(this._isDSTShifted))return this._isDSTShifted;var e,t={};return R(t,this),(t=zr(t))._a?(e=t._isUTC?f(t._a):Xr(t._a),this._isDSTShifted=this.isValid()&&un(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Tn(){return!!this.isValid()&&!this._isUTC}function Nn(){return!!this.isValid()&&this._isUTC}function Mn(){return!!this.isValid()&&this._isUTC&&0===this._offset}s.updateOffset=function(){};var _n=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,bn=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function An(e,t){var r,n,s,i=e,o=null;return ln(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:c(e)||!isNaN(+e)?(i={},t?i[t]=+e:i.milliseconds=+e):(o=_n.exec(e))?(r="-"===o[1]?-1:1,i={y:0,d:xe(o[Ve])*r,h:xe(o[Be])*r,m:xe(o[We])*r,s:xe(o[Ye])*r,ms:xe(hn(1e3*o[je]))*r}):(o=bn.exec(e))?(r="-"===o[1]?-1:1,i={y:On(o[2],r),M:On(o[3],r),w:On(o[4],r),d:On(o[5],r),h:On(o[6],r),m:On(o[7],r),s:On(o[8],r)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(s=xn(Xr(i.from),Xr(i.to)),(i={}).ms=s.milliseconds,i.M=s.months),n=new an(i),ln(e)&&l(e,"_locale")&&(n._locale=e._locale),ln(e)&&l(e,"_isValid")&&(n._isValid=e._isValid),n}function On(e,t){var r=e&&parseFloat(e.replace(",","."));return(isNaN(r)?0:r)*t}function In(e,t){var r={};return r.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(r.months,"M").isAfter(t)&&--r.months,r.milliseconds=+t-+e.clone().add(r.months,"M"),r}function xn(e,t){var r;return e.isValid()&&t.isValid()?(t=gn(t,e),e.isBefore(t)?r=In(e,t):((r=In(t,e)).milliseconds=-r.milliseconds,r.months=-r.months),r):{milliseconds:0,months:0}}function Pn(e,t){return function(r,n){var s;return null===n||isNaN(+n)||(A(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=r,r=n,n=s),Ln(this,An(r,n),e),this}}function Ln(e,t,r,n){var i=t._milliseconds,o=hn(t._days),a=hn(t._months);e.isValid()&&(n=null==n||n,a&&pt(e,Ze(e,"Month")+a*r),o&&Je(e,"Date",Ze(e,"Date")+o*r),i&&e._d.setTime(e._d.valueOf()+i*r),n&&s.updateOffset(e,o||a))}An.fn=an.prototype,An.invalid=on;var Dn=Pn(1,"add"),kn=Pn(-1,"subtract");function Hn(e){return"string"==typeof e||e instanceof String}function Fn(e){return T(e)||d(e)||Hn(e)||c(e)||Vn(e)||Un(e)||null==e}function Un(e){var t,r,n=a(e)&&!h(e),s=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],o=i.length;for(t=0;t<o;t+=1)r=i[t],s=s||l(e,r);return n&&s}function Vn(e){var t=o(e),r=!1;return t&&(r=0===e.filter((function(t){return!c(t)&&Hn(e)})).length),t&&r}function Bn(e){var t,r,n=a(e)&&!h(e),s=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)r=i[t],s=s||l(e,r);return n&&s}function Wn(e,t){var r=e.diff(t,"days",!0);return r<-6?"sameElse":r<-1?"lastWeek":r<0?"lastDay":r<1?"sameDay":r<2?"nextDay":r<7?"nextWeek":"sameElse"}function Yn(e,t){1===arguments.length&&(arguments[0]?Fn(arguments[0])?(e=arguments[0],t=void 0):Bn(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var r=e||Xr(),n=gn(r,this).startOf("day"),i=s.calendarFormat(this,n)||"sameElse",o=t&&(O(t[i])?t[i].call(this,r):t[i]);return this.format(o||this.localeData().calendar(i,this,Xr(r)))}function jn(){return new S(this)}function Gn(e,t){var r=T(e)?e:Xr(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()>r.valueOf():r.valueOf()<this.clone().startOf(t).valueOf())}function zn(e,t){var r=T(e)?e:Xr(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()<r.valueOf():this.clone().endOf(t).valueOf()<r.valueOf())}function $n(e,t,r,n){var s=T(e)?e:Xr(e),i=T(t)?t:Xr(t);return!!(this.isValid()&&s.isValid()&&i.isValid())&&("("===(n=n||"()")[0]?this.isAfter(s,r):!this.isBefore(s,r))&&(")"===n[1]?this.isBefore(i,r):!this.isAfter(i,r))}function Kn(e,t){var r,n=T(e)?e:Xr(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=ne(t)||"millisecond")?this.valueOf()===n.valueOf():(r=n.valueOf(),this.clone().startOf(t).valueOf()<=r&&r<=this.clone().endOf(t).valueOf()))}function Xn(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function qn(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Qn(e,t,r){var n,s,i;if(!this.isValid())return NaN;if(!(n=gn(e,this)).isValid())return NaN;switch(s=6e4*(n.utcOffset()-this.utcOffset()),t=ne(t)){case"year":i=Zn(this,n)/12;break;case"month":i=Zn(this,n);break;case"quarter":i=Zn(this,n)/3;break;case"second":i=(this-n)/1e3;break;case"minute":i=(this-n)/6e4;break;case"hour":i=(this-n)/36e5;break;case"day":i=(this-n-s)/864e5;break;case"week":i=(this-n-s)/6048e5;break;default:i=this-n}return r?i:Ie(i)}function Zn(e,t){if(e.date()<t.date())return-Zn(t,e);var r=12*(t.year()-e.year())+(t.month()-e.month()),n=e.clone().add(r,"months");return-(r+(t-n<0?(t-n)/(n-e.clone().add(r-1,"months")):(t-n)/(e.clone().add(r+1,"months")-n)))||0}function Jn(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function es(e){if(!this.isValid())return null;var t=!0!==e,r=t?this.clone().utc():this;return r.year()<0||r.year()>9999?j(r,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):O(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",j(r,"Z")):j(r,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ts(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,r,n,s="moment",i="";return this.isLocal()||(s=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+s+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r="-MM-DD[T]HH:mm:ss.SSS",n=i+'[")]',this.format(e+t+r+n)}function rs(e){e||(e=this.isUtc()?s.defaultFormatUtc:s.defaultFormat);var t=j(this,e);return this.localeData().postformat(t)}function ns(e,t){return this.isValid()&&(T(e)&&e.isValid()||Xr(e).isValid())?An({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ss(e){return this.from(Xr(),e)}function is(e,t){return this.isValid()&&(T(e)&&e.isValid()||Xr(e).isValid())?An({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function os(e){return this.to(Xr(),e)}function as(e){var t;return void 0===e?this._locale._abbr:(null!=(t=Er(e))&&(this._locale=t),this)}s.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",s.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ls=M("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function hs(){return this._locale}var us=1e3,cs=60*us,ds=60*cs,ps=3506328*ds;function gs(e,t){return(e%t+t)%t}function fs(e,t,r){return e<100&&e>=0?new Date(e+400,t,r)-ps:new Date(e,t,r).valueOf()}function ms(e,t,r){return e<100&&e>=0?Date.UTC(e+400,t,r)-ps:Date.UTC(e,t,r)}function ys(e){var t,r;if(void 0===(e=ne(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ms:fs,e){case"year":t=r(this.year(),0,1);break;case"quarter":t=r(this.year(),this.month()-this.month()%3,1);break;case"month":t=r(this.year(),this.month(),1);break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=r(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=gs(t+(this._isUTC?0:this.utcOffset()*cs),ds);break;case"minute":t=this._d.valueOf(),t-=gs(t,cs);break;case"second":t=this._d.valueOf(),t-=gs(t,us)}return this._d.setTime(t),s.updateOffset(this,!0),this}function Es(e){var t,r;if(void 0===(e=ne(e))||"millisecond"===e||!this.isValid())return this;switch(r=this._isUTC?ms:fs,e){case"year":t=r(this.year()+1,0,1)-1;break;case"quarter":t=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=r(this.year(),this.month()+1,1)-1;break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=ds-gs(t+(this._isUTC?0:this.utcOffset()*cs),ds)-1;break;case"minute":t=this._d.valueOf(),t+=cs-gs(t,cs)-1;break;case"second":t=this._d.valueOf(),t+=us-gs(t,us)-1}return this._d.setTime(t),s.updateOffset(this,!0),this}function ws(){return this._d.valueOf()-6e4*(this._offset||0)}function Cs(){return Math.floor(this.valueOf()/1e3)}function vs(){return new Date(this.valueOf())}function Rs(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Ss(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function Ts(){return this.isValid()?this.toISOString():null}function Ns(){return E(this)}function Ms(){return g({},y(this))}function _s(){return y(this).overflow}function bs(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function As(e,t){var r,n,i,o=this._eras||Er("en")._eras;for(r=0,n=o.length;r<n;++r)switch("string"==typeof o[r].since&&(i=s(o[r].since).startOf("day"),o[r].since=i.valueOf()),typeof o[r].until){case"undefined":o[r].until=1/0;break;case"string":i=s(o[r].until).startOf("day").valueOf(),o[r].until=i.valueOf()}return o}function Os(e,t,r){var n,s,i,o,a,l=this.eras();for(e=e.toUpperCase(),n=0,s=l.length;n<s;++n)if(i=l[n].name.toUpperCase(),o=l[n].abbr.toUpperCase(),a=l[n].narrow.toUpperCase(),r)switch(t){case"N":case"NN":case"NNN":if(o===e)return l[n];break;case"NNNN":if(i===e)return l[n];break;case"NNNNN":if(a===e)return l[n]}else if([i,o,a].indexOf(e)>=0)return l[n]}function Is(e,t){var r=e.since<=e.until?1:-1;return void 0===t?s(e.since).year():s(e.since).year()+(t-e.offset)*r}function xs(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].name;if(n[e].until<=r&&r<=n[e].since)return n[e].name}return""}function Ps(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].narrow;if(n[e].until<=r&&r<=n[e].since)return n[e].narrow}return""}function Ls(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;e<t;++e){if(r=this.clone().startOf("day").valueOf(),n[e].since<=r&&r<=n[e].until)return n[e].abbr;if(n[e].until<=r&&r<=n[e].since)return n[e].abbr}return""}function Ds(){var e,t,r,n,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(r=i[e].since<=i[e].until?1:-1,n=this.clone().startOf("day").valueOf(),i[e].since<=n&&n<=i[e].until||i[e].until<=n&&n<=i[e].since)return(this.year()-s(i[e].since).year())*r+i[e].offset;return this.year()}function ks(e){return l(this,"_erasNameRegex")||Ys.call(this),e?this._erasNameRegex:this._erasRegex}function Hs(e){return l(this,"_erasAbbrRegex")||Ys.call(this),e?this._erasAbbrRegex:this._erasRegex}function Fs(e){return l(this,"_erasNarrowRegex")||Ys.call(this),e?this._erasNarrowRegex:this._erasRegex}function Us(e,t){return t.erasAbbrRegex(e)}function Vs(e,t){return t.erasNameRegex(e)}function Bs(e,t){return t.erasNarrowRegex(e)}function Ws(e,t){return t._eraYearOrdinalRegex||we}function Ys(){var e,t,r,n,s,i=[],o=[],a=[],l=[],h=this.eras();for(e=0,t=h.length;e<t;++e)r=Oe(h[e].name),n=Oe(h[e].abbr),s=Oe(h[e].narrow),o.push(r),i.push(n),a.push(s),l.push(r),l.push(n),l.push(s);this._erasRegex=new RegExp("^("+l.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function js(e,t){B(0,[e,e.length],0,t)}function Gs(e){return Qs.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function zs(e){return Qs.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function $s(){return Tt(this.year(),1,4)}function Ks(){return Tt(this.isoWeekYear(),1,4)}function Xs(){var e=this.localeData()._week;return Tt(this.year(),e.dow,e.doy)}function qs(){var e=this.localeData()._week;return Tt(this.weekYear(),e.dow,e.doy)}function Qs(e,t,r,n,s){var i;return null==e?St(this,n,s).year:(t>(i=Tt(e,n,s))&&(t=i),Zs.call(this,e,t,r,n,s))}function Zs(e,t,r,n,s){var i=Rt(e,t,r,n,s),o=Ct(i.year,0,i.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Js(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}B("N",0,0,"eraAbbr"),B("NN",0,0,"eraAbbr"),B("NNN",0,0,"eraAbbr"),B("NNNN",0,0,"eraName"),B("NNNNN",0,0,"eraNarrow"),B("y",["y",1],"yo","eraYear"),B("y",["yy",2],0,"eraYear"),B("y",["yyy",3],0,"eraYear"),B("y",["yyyy",4],0,"eraYear"),_e("N",Us),_e("NN",Us),_e("NNN",Us),_e("NNNN",Vs),_e("NNNNN",Bs),Le(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,r,n){var s=r._locale.erasParse(e,n,r._strict);s?y(r).era=s:y(r).invalidEra=e})),_e("y",we),_e("yy",we),_e("yyy",we),_e("yyyy",we),_e("yo",Ws),Le(["y","yy","yyy","yyyy"],Fe),Le(["yo"],(function(e,t,r,n){var s;r._locale._eraYearOrdinalRegex&&(s=e.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?t[Fe]=r._locale.eraYearOrdinalParse(e,s):t[Fe]=parseInt(e,10)})),B(0,["gg",2],0,(function(){return this.weekYear()%100})),B(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),js("gggg","weekYear"),js("ggggg","weekYear"),js("GGGG","isoWeekYear"),js("GGGGG","isoWeekYear"),_e("G",Ce),_e("g",Ce),_e("GG",pe,he),_e("gg",pe,he),_e("GGGG",ye,ce),_e("gggg",ye,ce),_e("GGGGG",Ee,de),_e("ggggg",Ee,de),De(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,r,n){t[n.substr(0,2)]=xe(e)})),De(["gg","GG"],(function(e,t,r,n){t[n]=s.parseTwoDigitYear(e)})),B("Q",0,"Qo","quarter"),_e("Q",le),Le("Q",(function(e,t){t[Ue]=3*(xe(e)-1)})),B("D",["DD",2],"Do","date"),_e("D",pe,Ne),_e("DD",pe,he),_e("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Le(["D","DD"],Ve),Le("Do",(function(e,t){t[Ve]=xe(e.match(pe)[0])}));var ei=Qe("Date",!0);function ti(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}B("DDD",["DDDD",3],"DDDo","dayOfYear"),_e("DDD",me),_e("DDDD",ue),Le(["DDD","DDDD"],(function(e,t,r){r._dayOfYear=xe(e)})),B("m",["mm",2],0,"minute"),_e("m",pe,Me),_e("mm",pe,he),Le(["m","mm"],We);var ri=Qe("Minutes",!1);B("s",["ss",2],0,"second"),_e("s",pe,Me),_e("ss",pe,he),Le(["s","ss"],Ye);var ni,si,ii=Qe("Seconds",!1);for(B("S",0,0,(function(){return~~(this.millisecond()/100)})),B(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),B(0,["SSS",3],0,"millisecond"),B(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),B(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),B(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),B(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),B(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),B(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),_e("S",me,le),_e("SS",me,he),_e("SSS",me,ue),ni="SSSS";ni.length<=9;ni+="S")_e(ni,we);function oi(e,t){t[je]=xe(1e3*("0."+e))}for(ni="S";ni.length<=9;ni+="S")Le(ni,oi);function ai(){return this._isUTC?"UTC":""}function li(){return this._isUTC?"Coordinated Universal Time":""}si=Qe("Milliseconds",!1),B("z",0,0,"zoneAbbr"),B("zz",0,0,"zoneName");var hi=S.prototype;function ui(e){return Xr(1e3*e)}function ci(){return Xr.apply(null,arguments).parseZone()}function di(e){return e}hi.add=Dn,hi.calendar=Yn,hi.clone=jn,hi.diff=Qn,hi.endOf=Es,hi.format=rs,hi.from=ns,hi.fromNow=ss,hi.to=is,hi.toNow=os,hi.get=et,hi.invalidAt=_s,hi.isAfter=Gn,hi.isBefore=zn,hi.isBetween=$n,hi.isSame=Kn,hi.isSameOrAfter=Xn,hi.isSameOrBefore=qn,hi.isValid=Ns,hi.lang=ls,hi.locale=as,hi.localeData=hs,hi.max=Qr,hi.min=qr,hi.parsingFlags=Ms,hi.set=tt,hi.startOf=ys,hi.subtract=kn,hi.toArray=Rs,hi.toObject=Ss,hi.toDate=vs,hi.toISOString=es,hi.inspect=ts,"undefined"!=typeof Symbol&&null!=Symbol.for&&(hi[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),hi.toJSON=Ts,hi.toString=Jn,hi.unix=Cs,hi.valueOf=ws,hi.creationData=bs,hi.eraName=xs,hi.eraNarrow=Ps,hi.eraAbbr=Ls,hi.eraYear=Ds,hi.year=Xe,hi.isLeapYear=qe,hi.weekYear=Gs,hi.isoWeekYear=zs,hi.quarter=hi.quarters=Js,hi.month=gt,hi.daysInMonth=ft,hi.week=hi.weeks=At,hi.isoWeek=hi.isoWeeks=Ot,hi.weeksInYear=Xs,hi.weeksInWeekYear=qs,hi.isoWeeksInYear=$s,hi.isoWeeksInISOWeekYear=Ks,hi.date=ei,hi.day=hi.days=Gt,hi.weekday=zt,hi.isoWeekday=$t,hi.dayOfYear=ti,hi.hour=hi.hours=sr,hi.minute=hi.minutes=ri,hi.second=hi.seconds=ii,hi.millisecond=hi.milliseconds=si,hi.utcOffset=mn,hi.utc=En,hi.local=wn,hi.parseZone=Cn,hi.hasAlignedHourOffset=vn,hi.isDST=Rn,hi.isLocal=Tn,hi.isUtcOffset=Nn,hi.isUtc=Mn,hi.isUTC=Mn,hi.zoneAbbr=ai,hi.zoneName=li,hi.dates=M("dates accessor is deprecated. Use date instead.",ei),hi.months=M("months accessor is deprecated. Use month instead",gt),hi.years=M("years accessor is deprecated. Use year instead",Xe),hi.zone=M("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",yn),hi.isDSTShifted=M("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Sn);var pi=P.prototype;function gi(e,t,r,n){var s=Er(),i=f().set(n,t);return s[r](i,e)}function fi(e,t,r){if(c(e)&&(t=e,e=void 0),e=e||"",null!=t)return gi(e,t,r,"month");var n,s=[];for(n=0;n<12;n++)s[n]=gi(e,n,r,"month");return s}function mi(e,t,r,n){"boolean"==typeof e?(c(t)&&(r=t,t=void 0),t=t||""):(r=t=e,e=!1,c(t)&&(r=t,t=void 0),t=t||"");var s,i=Er(),o=e?i._week.dow:0,a=[];if(null!=r)return gi(t,(r+o)%7,n,"day");for(s=0;s<7;s++)a[s]=gi(t,(s+o)%7,n,"day");return a}function yi(e,t){return fi(e,t,"months")}function Ei(e,t){return fi(e,t,"monthsShort")}function wi(e,t,r){return mi(e,t,r,"weekdays")}function Ci(e,t,r){return mi(e,t,r,"weekdaysShort")}function vi(e,t,r){return mi(e,t,r,"weekdaysMin")}pi.calendar=D,pi.longDateFormat=$,pi.invalidDate=X,pi.ordinal=Z,pi.preparse=di,pi.postformat=di,pi.relativeTime=ee,pi.pastFuture=te,pi.set=I,pi.eras=As,pi.erasParse=Os,pi.erasConvertYear=Is,pi.erasAbbrRegex=Hs,pi.erasNameRegex=ks,pi.erasNarrowRegex=Fs,pi.months=ht,pi.monthsShort=ut,pi.monthsParse=dt,pi.monthsRegex=yt,pi.monthsShortRegex=mt,pi.week=Nt,pi.firstDayOfYear=bt,pi.firstDayOfWeek=_t,pi.weekdays=Vt,pi.weekdaysMin=Wt,pi.weekdaysShort=Bt,pi.weekdaysParse=jt,pi.weekdaysRegex=Kt,pi.weekdaysShortRegex=Xt,pi.weekdaysMinRegex=qt,pi.isPM=rr,pi.meridiem=ir,fr("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===xe(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),s.lang=M("moment.lang is deprecated. Use moment.locale instead.",fr),s.langData=M("moment.langData is deprecated. Use moment.localeData instead.",Er);var Ri=Math.abs;function Si(){var e=this._data;return this._milliseconds=Ri(this._milliseconds),this._days=Ri(this._days),this._months=Ri(this._months),e.milliseconds=Ri(e.milliseconds),e.seconds=Ri(e.seconds),e.minutes=Ri(e.minutes),e.hours=Ri(e.hours),e.months=Ri(e.months),e.years=Ri(e.years),this}function Ti(e,t,r,n){var s=An(t,r);return e._milliseconds+=n*s._milliseconds,e._days+=n*s._days,e._months+=n*s._months,e._bubble()}function Ni(e,t){return Ti(this,e,t,1)}function Mi(e,t){return Ti(this,e,t,-1)}function _i(e){return e<0?Math.floor(e):Math.ceil(e)}function bi(){var e,t,r,n,s,i=this._milliseconds,o=this._days,a=this._months,l=this._data;return i>=0&&o>=0&&a>=0||i<=0&&o<=0&&a<=0||(i+=864e5*_i(Oi(a)+o),o=0,a=0),l.milliseconds=i%1e3,e=Ie(i/1e3),l.seconds=e%60,t=Ie(e/60),l.minutes=t%60,r=Ie(t/60),l.hours=r%24,o+=Ie(r/24),a+=s=Ie(Ai(o)),o-=_i(Oi(s)),n=Ie(a/12),a%=12,l.days=o,l.months=a,l.years=n,this}function Ai(e){return 4800*e/146097}function Oi(e){return 146097*e/4800}function Ii(e){if(!this.isValid())return NaN;var t,r,n=this._milliseconds;if("month"===(e=ne(e))||"quarter"===e||"year"===e)switch(t=this._days+n/864e5,r=this._months+Ai(t),e){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(t=this._days+Math.round(Oi(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return 24*t+n/36e5;case"minute":return 1440*t+n/6e4;case"second":return 86400*t+n/1e3;case"millisecond":return Math.floor(864e5*t)+n;default:throw new Error("Unknown unit "+e)}}function xi(e){return function(){return this.as(e)}}var Pi=xi("ms"),Li=xi("s"),Di=xi("m"),ki=xi("h"),Hi=xi("d"),Fi=xi("w"),Ui=xi("M"),Vi=xi("Q"),Bi=xi("y"),Wi=Pi;function Yi(){return An(this)}function ji(e){return e=ne(e),this.isValid()?this[e+"s"]():NaN}function Gi(e){return function(){return this.isValid()?this._data[e]:NaN}}var zi=Gi("milliseconds"),$i=Gi("seconds"),Ki=Gi("minutes"),Xi=Gi("hours"),qi=Gi("days"),Qi=Gi("months"),Zi=Gi("years");function Ji(){return Ie(this.days()/7)}var eo=Math.round,to={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ro(e,t,r,n,s){return s.relativeTime(t||1,!!r,e,n)}function no(e,t,r,n){var s=An(e).abs(),i=eo(s.as("s")),o=eo(s.as("m")),a=eo(s.as("h")),l=eo(s.as("d")),h=eo(s.as("M")),u=eo(s.as("w")),c=eo(s.as("y")),d=i<=r.ss&&["s",i]||i<r.s&&["ss",i]||o<=1&&["m"]||o<r.m&&["mm",o]||a<=1&&["h"]||a<r.h&&["hh",a]||l<=1&&["d"]||l<r.d&&["dd",l];return null!=r.w&&(d=d||u<=1&&["w"]||u<r.w&&["ww",u]),(d=d||h<=1&&["M"]||h<r.M&&["MM",h]||c<=1&&["y"]||["yy",c])[2]=t,d[3]=+e>0,d[4]=n,ro.apply(null,d)}function so(e){return void 0===e?eo:"function"==typeof e&&(eo=e,!0)}function io(e,t){return void 0!==to[e]&&(void 0===t?to[e]:(to[e]=t,"s"===e&&(to.ss=t-1),!0))}function oo(e,t){if(!this.isValid())return this.localeData().invalidDate();var r,n,s=!1,i=to;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(s=e),"object"==typeof t&&(i=Object.assign({},to,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),n=no(this,!s,i,r=this.localeData()),s&&(n=r.pastFuture(+this,n)),r.postformat(n)}var ao=Math.abs;function lo(e){return(e>0)-(e<0)||+e}function ho(){if(!this.isValid())return this.localeData().invalidDate();var e,t,r,n,s,i,o,a,l=ao(this._milliseconds)/1e3,h=ao(this._days),u=ao(this._months),c=this.asSeconds();return c?(e=Ie(l/60),t=Ie(e/60),l%=60,e%=60,r=Ie(u/12),u%=12,n=l?l.toFixed(3).replace(/\.?0+$/,""):"",s=c<0?"-":"",i=lo(this._months)!==lo(c)?"-":"",o=lo(this._days)!==lo(c)?"-":"",a=lo(this._milliseconds)!==lo(c)?"-":"",s+"P"+(r?i+r+"Y":"")+(u?i+u+"M":"")+(h?o+h+"D":"")+(t||e||l?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(l?a+n+"S":"")):"P0D"}var uo=an.prototype;return uo.isValid=sn,uo.abs=Si,uo.add=Ni,uo.subtract=Mi,uo.as=Ii,uo.asMilliseconds=Pi,uo.asSeconds=Li,uo.asMinutes=Di,uo.asHours=ki,uo.asDays=Hi,uo.asWeeks=Fi,uo.asMonths=Ui,uo.asQuarters=Vi,uo.asYears=Bi,uo.valueOf=Wi,uo._bubble=bi,uo.clone=Yi,uo.get=ji,uo.milliseconds=zi,uo.seconds=$i,uo.minutes=Ki,uo.hours=Xi,uo.days=qi,uo.weeks=Ji,uo.months=Qi,uo.years=Zi,uo.humanize=oo,uo.toISOString=ho,uo.toString=ho,uo.toJSON=ho,uo.locale=as,uo.localeData=hs,uo.toIsoString=M("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ho),uo.lang=ls,B("X",0,0,"unix"),B("x",0,0,"valueOf"),_e("x",Ce),_e("X",Se),Le("X",(function(e,t,r){r._d=new Date(1e3*parseFloat(e))})),Le("x",(function(e,t,r){r._d=new Date(xe(e))})),
 //! moment.js
 s.version="2.30.1",i(Xr),s.fn=hi,s.min=Jr,s.max=en,s.now=tn,s.utc=f,s.unix=ui,s.months=yi,s.isDate=d,s.locale=fr,s.invalid=w,s.duration=An,s.isMoment=T,s.weekdays=wi,s.parseZone=ci,s.localeData=Er,s.isDuration=ln,s.monthsShort=Ei,s.weekdaysMin=vi,s.defineLocale=mr,s.updateLocale=yr,s.locales=wr,s.weekdaysShort=Ci,s.normalizeUnits=ne,s.relativeTimeRounding=so,s.relativeTimeThreshold=io,s.calendarFormat=Wn,s.prototype=hi,s.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},s}(),window.moment=r(1314)},63192:(e,t,r)=>{e.exports=function e(t,r,n){function s(o,a){if(!r[o]){if(!t[o]){if(i)return i(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var h=r[o]={exports:{}};t[o][0].call(h.exports,(function(e){return s(t[o][1][e]||e)}),h,h.exports,e,t,r,n)}return r[o].exports}for(var i=void 0,o=0;o<n.length;o++)s(n[o]);return s}({1:[function(e,t,r){!function(e){"use strict";var r,n=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,s=Math.ceil,i=Math.floor,o="[BigNumber Error] ",a=o+"Number primitive has more than 15 significant digits: ",l=1e14,h=14,u=9007199254740991,c=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],d=1e7,p=1e9;function g(e){var t=0|e;return 0<e||e===t?t:t-1}function f(e){for(var t,r,n=1,s=e.length,i=e[0]+"";n<s;){for(t=e[n++]+"",r=h-t.length;r--;t="0"+t);i+=t}for(s=i.length;48===i.charCodeAt(--s););return i.slice(0,s+1||1)}function m(e,t){var r,n,s=e.c,i=t.c,o=e.s,a=t.s,l=e.e,h=t.e;if(!o||!a)return null;if(r=s&&!s[0],n=i&&!i[0],r||n)return r?n?0:-a:o;if(o!=a)return o;if(r=o<0,n=l==h,!s||!i)return n?0:!s^r?1:-1;if(!n)return h<l^r?1:-1;for(a=(l=s.length)<(h=i.length)?l:h,o=0;o<a;o++)if(s[o]!=i[o])return s[o]>i[o]^r?1:-1;return l==h?0:h<l^r?1:-1}function y(e,t,r,n){if(e<t||r<e||e!==(e<0?s(e):i(e)))throw Error(o+(n||"Argument")+("number"==typeof e?e<t||r<e?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function E(e){var t=e.c.length-1;return g(e.e/h)==t&&e.c[t]%2!=0}function w(e,t){return(1<e.length?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function C(e,t,r){var n,s;if(t<0){for(s=r+".";++t;s+=r);e=s+e}else if(++t>(n=e.length)){for(s=r,t-=n;--t;s+=r);e+=s}else t<n&&(e=e.slice(0,t)+"."+e.slice(t));return e}(r=function e(t){var r,v,R,S,T,N,M,_,b,A,O=Y.prototype={constructor:Y,toString:null,valueOf:null},I=new Y(1),x=20,P=4,L=-7,D=21,k=-1e7,H=1e7,F=!1,U=1,V=0,B={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},W="0123456789abcdefghijklmnopqrstuvwxyz";function Y(e,t){var r,s,o,l,c,d,p,g,f=this;if(!(f instanceof Y))return new Y(e,t);if(null==t){if(e instanceof Y)return f.s=e.s,f.e=e.e,void(f.c=(e=e.c)?e.slice():e);if((d="number"==typeof e)&&0*e==0){if(f.s=1/e<0?(e=-e,-1):1,e===~~e){for(l=0,c=e;10<=c;c/=10,l++);return f.e=l,void(f.c=[e])}g=String(e)}else{if(g=String(e),!n.test(g))return R(f,g,d);f.s=45==g.charCodeAt(0)?(g=g.slice(1),-1):1}-1<(l=g.indexOf("."))&&(g=g.replace(".","")),0<(c=g.search(/e/i))?(l<0&&(l=c),l+=+g.slice(c+1),g=g.substring(0,c)):l<0&&(l=g.length)}else{if(y(t,2,W.length,"Base"),g=String(e),10==t)return $(f=new Y(e instanceof Y?e:g),x+f.e+1,P);if(d="number"==typeof e){if(0*e!=0)return R(f,g,d,t);if(f.s=1/e<0?(g=g.slice(1),-1):1,Y.DEBUG&&15<g.replace(/^0\.0*|\./,"").length)throw Error(a+e);d=!1}else f.s=45===g.charCodeAt(0)?(g=g.slice(1),-1):1;for(r=W.slice(0,t),l=c=0,p=g.length;c<p;c++)if(r.indexOf(s=g.charAt(c))<0){if("."==s){if(l<c){l=p;continue}}else if(!o&&(g==g.toUpperCase()&&(g=g.toLowerCase())||g==g.toLowerCase()&&(g=g.toUpperCase()))){o=!0,c=-1,l=0;continue}return R(f,String(e),d,t)}-1<(l=(g=v(g,t,10,f.s)).indexOf("."))?g=g.replace(".",""):l=g.length}for(c=0;48===g.charCodeAt(c);c++);for(p=g.length;48===g.charCodeAt(--p););if(g=g.slice(c,++p)){if(p-=c,d&&Y.DEBUG&&15<p&&(u<e||e!==i(e)))throw Error(a+f.s*e);if(H<(l=l-c-1))f.c=f.e=null;else if(l<k)f.c=[f.e=0];else{if(f.e=l,f.c=[],c=(l+1)%h,l<0&&(c+=h),c<p){for(c&&f.c.push(+g.slice(0,c)),p-=h;c<p;)f.c.push(+g.slice(c,c+=h));g=g.slice(c),c=h-g.length}else c-=p;for(;c--;g+="0");f.c.push(+g)}}else f.c=[f.e=0]}function j(e,t,r,n){var s,i,o,a,l;if(null==r?r=P:y(r,0,8),!e.c)return e.toString();if(s=e.c[0],o=e.e,null==t)l=f(e.c),l=1==n||2==n&&(o<=L||D<=o)?w(l,o):C(l,o,"0");else if(i=(e=$(new Y(e),t,r)).e,a=(l=f(e.c)).length,1==n||2==n&&(t<=i||i<=L)){for(;a<t;l+="0",a++);l=w(l,i)}else if(t-=o,l=C(l,i,"0"),a<i+1){if(0<--t)for(l+=".";t--;l+="0");}else if(0<(t+=i-a))for(i+1==a&&(l+=".");t--;l+="0");return e.s<0&&s?"-"+l:l}function G(e,t){for(var r,n=1,s=new Y(e[0]);n<e.length;n++){if(!(r=new Y(e[n])).s){s=r;break}t.call(s,r)&&(s=r)}return s}function z(e,t,r){for(var n=1,s=t.length;!t[--s];t.pop());for(s=t[0];10<=s;s/=10,n++);return(r=n+r*h-1)>H?e.c=e.e=null:e.c=r<k?[e.e=0]:(e.e=r,t),e}function $(e,t,r,n){var o,a,u,d,p,g,f,m=e.c,y=c;if(m){e:{for(o=1,d=m[0];10<=d;d/=10,o++);if((a=t-o)<0)a+=h,u=t,f=(p=m[g=0])/y[o-u-1]%10|0;else if((g=s((a+1)/h))>=m.length){if(!n)break e;for(;m.length<=g;m.push(0));p=f=0,u=(a%=h)-h+(o=1)}else{for(p=d=m[g],o=1;10<=d;d/=10,o++);f=(u=(a%=h)-h+o)<0?0:p/y[o-u-1]%10|0}if(n=n||t<0||null!=m[g+1]||(u<0?p:p%y[o-u-1]),n=r<4?(f||n)&&(0==r||r==(e.s<0?3:2)):5<f||5==f&&(4==r||n||6==r&&(0<a?0<u?p/y[o-u]:0:m[g-1])%10&1||r==(e.s<0?8:7)),t<1||!m[0])return m.length=0,n?(t-=e.e+1,m[0]=y[(h-t%h)%h],e.e=-t||0):m[0]=e.e=0,e;if(0==a?(m.length=g,d=1,g--):(m.length=g+1,d=y[h-a],m[g]=0<u?i(p/y[o-u]%y[u])*d:0),n)for(;;){if(0==g){for(a=1,u=m[0];10<=u;u/=10,a++);for(u=m[0]+=d,d=1;10<=u;u/=10,d++);a!=d&&(e.e++,m[0]==l&&(m[0]=1));break}if(m[g]+=d,m[g]!=l)break;m[g--]=0,d=1}for(a=m.length;0===m[--a];m.pop());}e.e>H?e.c=e.e=null:e.e<k&&(e.c=[e.e=0])}return e}function K(e){var t,r=e.e;return null===r?e.toString():(t=f(e.c),t=r<=L||D<=r?w(t,r):C(t,r,"0"),e.s<0?"-"+t:t)}return Y.clone=e,Y.ROUND_UP=0,Y.ROUND_DOWN=1,Y.ROUND_CEIL=2,Y.ROUND_FLOOR=3,Y.ROUND_HALF_UP=4,Y.ROUND_HALF_DOWN=5,Y.ROUND_HALF_EVEN=6,Y.ROUND_HALF_CEIL=7,Y.ROUND_HALF_FLOOR=8,Y.EUCLID=9,Y.config=Y.set=function(e){var t,r;if(null!=e){if("object"!=typeof e)throw Error(o+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(y(r=e[t],0,p,t),x=r),e.hasOwnProperty(t="ROUNDING_MODE")&&(y(r=e[t],0,8,t),P=r),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((r=e[t])&&r.pop?(y(r[0],-p,0,t),y(r[1],0,p,t),L=r[0],D=r[1]):(y(r,-p,p,t),L=-(D=r<0?-r:r))),e.hasOwnProperty(t="RANGE"))if((r=e[t])&&r.pop)y(r[0],-p,-1,t),y(r[1],1,p,t),k=r[0],H=r[1];else{if(y(r,-p,p,t),!r)throw Error(o+t+" cannot be zero: "+r);k=-(H=r<0?-r:r)}if(e.hasOwnProperty(t="CRYPTO")){if((r=e[t])!==!!r)throw Error(o+t+" not true or false: "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw F=!r,Error(o+"crypto unavailable");F=r}else F=r}if(e.hasOwnProperty(t="MODULO_MODE")&&(y(r=e[t],0,9,t),U=r),e.hasOwnProperty(t="POW_PRECISION")&&(y(r=e[t],0,p,t),V=r),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(r=e[t]))throw Error(o+t+" not an object: "+r);B=r}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(r=e[t])||/^.$|[+-.\s]|(.).*\1/.test(r))throw Error(o+t+" invalid: "+r);W=r}}return{DECIMAL_PLACES:x,ROUNDING_MODE:P,EXPONENTIAL_AT:[L,D],RANGE:[k,H],CRYPTO:F,MODULO_MODE:U,POW_PRECISION:V,FORMAT:B,ALPHABET:W}},Y.isBigNumber=function(e){return e instanceof Y||e&&!0===e._isBigNumber||!1},Y.maximum=Y.max=function(){return G(arguments,O.lt)},Y.minimum=Y.min=function(){return G(arguments,O.gt)},Y.random=(S=9007199254740992,T=Math.random()*S&2097151?function(){return i(Math.random()*S)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,r,n,a,l,u=0,d=[],g=new Y(I);if(null==e?e=x:y(e,0,p),a=s(e/h),F)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(a*=2));u<a;)9e15<=(l=131072*t[u]+(t[u+1]>>>11))?(r=crypto.getRandomValues(new Uint32Array(2)),t[u]=r[0],t[u+1]=r[1]):(d.push(l%1e14),u+=2);u=a/2}else{if(!crypto.randomBytes)throw F=!1,Error(o+"crypto unavailable");for(t=crypto.randomBytes(a*=7);u<a;)9e15<=(l=281474976710656*(31&t[u])+1099511627776*t[u+1]+4294967296*t[u+2]+16777216*t[u+3]+(t[u+4]<<16)+(t[u+5]<<8)+t[u+6])?crypto.randomBytes(7).copy(t,u):(d.push(l%1e14),u+=7);u=a/7}if(!F)for(;u<a;)(l=T())<9e15&&(d[u++]=l%1e14);for(a=d[--u],e%=h,a&&e&&(l=c[h-e],d[u]=i(a/l)*l);0===d[u];d.pop(),u--);if(u<0)d=[n=0];else{for(n=-1;0===d[0];d.splice(0,1),n-=h);for(u=1,l=d[0];10<=l;l/=10,u++);u<h&&(n-=h-u)}return g.e=n,g.c=d,g}),Y.sum=function(){for(var e=1,t=arguments,r=new Y(t[0]);e<t.length;)r=r.plus(t[e++]);return r},v=function(){var e="0123456789";function t(e,t,r,n){for(var s,i,o=[0],a=0,l=e.length;a<l;){for(i=o.length;i--;o[i]*=t);for(o[0]+=n.indexOf(e.charAt(a++)),s=0;s<o.length;s++)o[s]>r-1&&(null==o[s+1]&&(o[s+1]=0),o[s+1]+=o[s]/r|0,o[s]%=r)}return o.reverse()}return function(n,s,i,o,a){var l,h,u,c,d,p,g,m,y=n.indexOf("."),E=x,w=P;for(0<=y&&(c=V,V=0,n=n.replace(".",""),p=(m=new Y(s)).pow(n.length-y),V=c,m.c=t(C(f(p.c),p.e,"0"),10,i,e),m.e=m.c.length),u=c=(g=t(n,s,i,a?(l=W,e):(l=e,W))).length;0==g[--c];g.pop());if(!g[0])return l.charAt(0);if(y<0?--u:(p.c=g,p.e=u,p.s=o,g=(p=r(p,m,E,w,i)).c,d=p.r,u=p.e),y=g[h=u+E+1],c=i/2,d=d||h<0||null!=g[h+1],d=w<4?(null!=y||d)&&(0==w||w==(p.s<0?3:2)):c<y||y==c&&(4==w||d||6==w&&1&g[h-1]||w==(p.s<0?8:7)),h<1||!g[0])n=d?C(l.charAt(1),-E,l.charAt(0)):l.charAt(0);else{if(g.length=h,d)for(--i;++g[--h]>i;)g[h]=0,h||(++u,g=[1].concat(g));for(c=g.length;!g[--c];);for(y=0,n="";y<=c;n+=l.charAt(g[y++]));n=C(n,u,l.charAt(0))}return n}}(),r=function(){function e(e,t,r){var n,s,i,o,a=0,l=e.length,h=t%d,u=t/d|0;for(e=e.slice();l--;)a=((s=h*(i=e[l]%d)+(n=u*i+(o=e[l]/d|0)*h)%d*d+a)/r|0)+(n/d|0)+u*o,e[l]=s%r;return a&&(e=[a].concat(e)),e}function t(e,t,r,n){var s,i;if(r!=n)i=n<r?1:-1;else for(s=i=0;s<r;s++)if(e[s]!=t[s]){i=e[s]>t[s]?1:-1;break}return i}function r(e,t,r,n){for(var s=0;r--;)e[r]-=s,s=e[r]<t[r]?1:0,e[r]=s*n+e[r]-t[r];for(;!e[0]&&1<e.length;e.splice(0,1));}return function(n,s,o,a,u){var c,d,p,f,m,y,E,w,C,v,R,S,T,N,M,_,b,A=n.s==s.s?1:-1,O=n.c,I=s.c;if(!(O&&O[0]&&I&&I[0]))return new Y(n.s&&s.s&&(O?!I||O[0]!=I[0]:I)?O&&0==O[0]||!I?0*A:A/0:NaN);for(C=(w=new Y(A)).c=[],A=o+(d=n.e-s.e)+1,u||(u=l,d=g(n.e/h)-g(s.e/h),A=A/h|0),p=0;I[p]==(O[p]||0);p++);if(I[p]>(O[p]||0)&&d--,A<0)C.push(1),f=!0;else{for(N=O.length,_=I.length,A+=2,1<(m=i(u/(I[p=0]+1)))&&(I=e(I,m,u),O=e(O,m,u),_=I.length,N=O.length),T=_,R=(v=O.slice(0,_)).length;R<_;v[R++]=0);b=I.slice(),b=[0].concat(b),M=I[0],I[1]>=u/2&&M++;do{if(m=0,(c=t(I,v,_,R))<0){if(S=v[0],_!=R&&(S=S*u+(v[1]||0)),1<(m=i(S/M)))for(u<=m&&(m=u-1),E=(y=e(I,m,u)).length,R=v.length;1==t(y,v,E,R);)m--,r(y,_<E?b:I,E,u),E=y.length,c=1;else 0==m&&(c=m=1),E=(y=I.slice()).length;if(E<R&&(y=[0].concat(y)),r(v,y,R,u),R=v.length,-1==c)for(;t(I,v,_,R)<1;)m++,r(v,_<R?b:I,R,u),R=v.length}else 0===c&&(m++,v=[0]);C[p++]=m,v[0]?v[R++]=O[T]||0:(v=[O[T]],R=1)}while((T++<N||null!=v[0])&&A--);f=null!=v[0],C[0]||C.splice(0,1)}if(u==l){for(p=1,A=C[0];10<=A;A/=10,p++);$(w,o+(w.e=p+d*h-1)+1,a,f)}else w.e=d,w.r=+f;return w}}(),N=/^(-?)0([xbo])(?=\w[\w.]*$)/i,M=/^([^.]+)\.$/,_=/^\.([^.]+)$/,b=/^-?(Infinity|NaN)$/,A=/^\s*\+(?=[\w.])|^\s+|\s+$/g,R=function(e,t,r,n){var s,i=r?t:t.replace(A,"");if(b.test(i))e.s=isNaN(i)?null:i<0?-1:1,e.c=e.e=null;else{if(!r&&(i=i.replace(N,(function(e,t,r){return s="x"==(r=r.toLowerCase())?16:"b"==r?2:8,n&&n!=s?e:t})),n&&(s=n,i=i.replace(M,"$1").replace(_,"0.$1")),t!=i))return new Y(i,s);if(Y.DEBUG)throw Error(o+"Not a"+(n?" base "+n:"")+" number: "+t);e.c=e.e=e.s=null}},O.absoluteValue=O.abs=function(){var e=new Y(this);return e.s<0&&(e.s=1),e},O.comparedTo=function(e,t){return m(this,new Y(e,t))},O.decimalPlaces=O.dp=function(e,t){var r,n,s;if(null!=e)return y(e,0,p),null==t?t=P:y(t,0,8),$(new Y(this),e+this.e+1,t);if(!(r=this.c))return null;if(n=((s=r.length-1)-g(this.e/h))*h,s=r[s])for(;s%10==0;s/=10,n--);return n<0&&(n=0),n},O.dividedBy=O.div=function(e,t){return r(this,new Y(e,t),x,P)},O.dividedToIntegerBy=O.idiv=function(e,t){return r(this,new Y(e,t),0,1)},O.exponentiatedBy=O.pow=function(e,t){var r,n,a,l,u,c,d,p,g=this;if((e=new Y(e)).c&&!e.isInteger())throw Error(o+"Exponent not an integer: "+K(e));if(null!=t&&(t=new Y(t)),u=14<e.e,!g.c||!g.c[0]||1==g.c[0]&&!g.e&&1==g.c.length||!e.c||!e.c[0])return p=new Y(Math.pow(+K(g),u?2-E(e):+K(e))),t?p.mod(t):p;if(c=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new Y(NaN);(n=!c&&g.isInteger()&&t.isInteger())&&(g=g.mod(t))}else{if(9<e.e&&(0<g.e||g.e<-1||(0==g.e?1<g.c[0]||u&&24e7<=g.c[1]:g.c[0]<8e13||u&&g.c[0]<=9999975e7)))return l=g.s<0&&E(e)?-0:0,-1<g.e&&(l=1/l),new Y(c?1/l:l);V&&(l=s(V/h+2))}for(d=u?(r=new Y(.5),c&&(e.s=1),E(e)):(a=Math.abs(+K(e)))%2,p=new Y(I);;){if(d){if(!(p=p.times(g)).c)break;l?p.c.length>l&&(p.c.length=l):n&&(p=p.mod(t))}if(a){if(0===(a=i(a/2)))break;d=a%2}else if($(e=e.times(r),e.e+1,1),14<e.e)d=E(e);else{if(0==(a=+K(e)))break;d=a%2}g=g.times(g),l?g.c&&g.c.length>l&&(g.c.length=l):n&&(g=g.mod(t))}return n?p:(c&&(p=I.div(p)),t?p.mod(t):l?$(p,V,P,void 0):p)},O.integerValue=function(e){var t=new Y(this);return null==e?e=P:y(e,0,8),$(t,t.e+1,e)},O.isEqualTo=O.eq=function(e,t){return 0===m(this,new Y(e,t))},O.isFinite=function(){return!!this.c},O.isGreaterThan=O.gt=function(e,t){return 0<m(this,new Y(e,t))},O.isGreaterThanOrEqualTo=O.gte=function(e,t){return 1===(t=m(this,new Y(e,t)))||0===t},O.isInteger=function(){return!!this.c&&g(this.e/h)>this.c.length-2},O.isLessThan=O.lt=function(e,t){return m(this,new Y(e,t))<0},O.isLessThanOrEqualTo=O.lte=function(e,t){return-1===(t=m(this,new Y(e,t)))||0===t},O.isNaN=function(){return!this.s},O.isNegative=function(){return this.s<0},O.isPositive=function(){return 0<this.s},O.isZero=function(){return!!this.c&&0==this.c[0]},O.minus=function(e,t){var r,n,s,i,o=this,a=o.s;if(t=(e=new Y(e,t)).s,!a||!t)return new Y(NaN);if(a!=t)return e.s=-t,o.plus(e);var u=o.e/h,c=e.e/h,d=o.c,p=e.c;if(!u||!c){if(!d||!p)return d?(e.s=-t,e):new Y(p?o:NaN);if(!d[0]||!p[0])return p[0]?(e.s=-t,e):new Y(d[0]?o:3==P?-0:0)}if(u=g(u),c=g(c),d=d.slice(),a=u-c){for((s=(i=a<0)?(a=-a,d):(c=u,p)).reverse(),t=a;t--;s.push(0));s.reverse()}else for(n=(i=(a=d.length)<(t=p.length))?a:t,a=t=0;t<n;t++)if(d[t]!=p[t]){i=d[t]<p[t];break}if(i&&(s=d,d=p,p=s,e.s=-e.s),0<(t=(n=p.length)-(r=d.length)))for(;t--;d[r++]=0);for(t=l-1;a<n;){if(d[--n]<p[n]){for(r=n;r&&!d[--r];d[r]=t);--d[r],d[n]+=l}d[n]-=p[n]}for(;0==d[0];d.splice(0,1),--c);return d[0]?z(e,d,c):(e.s=3==P?-1:1,e.c=[e.e=0],e)},O.modulo=O.mod=function(e,t){var n,s,i=this;return e=new Y(e,t),!i.c||!e.s||e.c&&!e.c[0]?new Y(NaN):!e.c||i.c&&!i.c[0]?new Y(i):(9==U?(s=e.s,e.s=1,n=r(i,e,0,3),e.s=s,n.s*=s):n=r(i,e,0,U),(e=i.minus(n.times(e))).c[0]||1!=U||(e.s=i.s),e)},O.multipliedBy=O.times=function(e,t){var r,n,s,i,o,a,u,c,p,f,m,y,E,w,C,v=this,R=v.c,S=(e=new Y(e,t)).c;if(!(R&&S&&R[0]&&S[0]))return!v.s||!e.s||R&&!R[0]&&!S||S&&!S[0]&&!R?e.c=e.e=e.s=null:(e.s*=v.s,R&&S?(e.c=[0],e.e=0):e.c=e.e=null),e;for(n=g(v.e/h)+g(e.e/h),e.s*=v.s,(u=R.length)<(f=S.length)&&(E=R,R=S,S=E,s=u,u=f,f=s),s=u+f,E=[];s--;E.push(0));for(w=l,C=d,s=f;0<=--s;){for(r=0,m=S[s]%C,y=S[s]/C|0,i=s+(o=u);s<i;)r=((c=m*(c=R[--o]%C)+(a=y*c+(p=R[o]/C|0)*m)%C*C+E[i]+r)/w|0)+(a/C|0)+y*p,E[i--]=c%w;E[i]=r}return r?++n:E.splice(0,1),z(e,E,n)},O.negated=function(){var e=new Y(this);return e.s=-e.s||null,e},O.plus=function(e,t){var r,n=this,s=n.s;if(t=(e=new Y(e,t)).s,!s||!t)return new Y(NaN);if(s!=t)return e.s=-t,n.minus(e);var i=n.e/h,o=e.e/h,a=n.c,u=e.c;if(!i||!o){if(!a||!u)return new Y(s/0);if(!a[0]||!u[0])return u[0]?e:new Y(a[0]?n:0*s)}if(i=g(i),o=g(o),a=a.slice(),s=i-o){for((r=0<s?(o=i,u):(s=-s,a)).reverse();s--;r.push(0));r.reverse()}for((s=a.length)-(t=u.length)<0&&(r=u,u=a,a=r,t=s),s=0;t;)s=(a[--t]=a[t]+u[t]+s)/l|0,a[t]=l===a[t]?0:a[t]%l;return s&&(a=[s].concat(a),++o),z(e,a,o)},O.precision=O.sd=function(e,t){var r,n,s;if(null!=e&&e!==!!e)return y(e,1,p),null==t?t=P:y(t,0,8),$(new Y(this),e,t);if(!(r=this.c))return null;if(n=(s=r.length-1)*h+1,s=r[s]){for(;s%10==0;s/=10,n--);for(s=r[0];10<=s;s/=10,n++);}return e&&this.e+1>n&&(n=this.e+1),n},O.shiftedBy=function(e){return y(e,-u,u),this.times("1e"+e)},O.squareRoot=O.sqrt=function(){var e,t,n,s,i,o=this,a=o.c,l=o.s,h=o.e,u=x+4,c=new Y("0.5");if(1!==l||!a||!a[0])return new Y(!l||l<0&&(!a||a[0])?NaN:a?o:1/0);if((n=0==(l=Math.sqrt(+K(o)))||l==1/0?(((t=f(a)).length+h)%2==0&&(t+="0"),l=Math.sqrt(+t),h=g((h+1)/2)-(h<0||h%2),new Y(t=l==1/0?"1e"+h:(t=l.toExponential()).slice(0,t.indexOf("e")+1)+h)):new Y(l+"")).c[0])for((l=(h=n.e)+u)<3&&(l=0);;)if(i=n,n=c.times(i.plus(r(o,i,u,1))),f(i.c).slice(0,l)===(t=f(n.c)).slice(0,l)){if(n.e<h&&--l,"9999"!=(t=t.slice(l-3,l+1))&&(s||"4999"!=t)){+t&&(+t.slice(1)||"5"!=t.charAt(0))||($(n,n.e+x+2,1),e=!n.times(n).eq(o));break}if(!s&&($(i,i.e+x+2,0),i.times(i).eq(o))){n=i;break}u+=4,l+=4,s=1}return $(n,n.e+x+1,P,e)},O.toExponential=function(e,t){return null!=e&&(y(e,0,p),e++),j(this,e,t,1)},O.toFixed=function(e,t){return null!=e&&(y(e,0,p),e=e+this.e+1),j(this,e,t)},O.toFormat=function(e,t,r){var n;if(null==r)null!=e&&t&&"object"==typeof t?(r=t,t=null):e&&"object"==typeof e?(r=e,e=t=null):r=B;else if("object"!=typeof r)throw Error(o+"Argument not an object: "+r);if(n=this.toFixed(e,t),this.c){var s,i=n.split("."),a=+r.groupSize,l=+r.secondaryGroupSize,h=r.groupSeparator||"",u=i[0],c=i[1],d=this.s<0,p=d?u.slice(1):u,g=p.length;if(l&&(s=a,a=l,g-=l=s),0<a&&0<g){for(s=g%a||a,u=p.substr(0,s);s<g;s+=a)u+=h+p.substr(s,a);0<l&&(u+=h+p.slice(s)),d&&(u="-"+u)}n=c?u+(r.decimalSeparator||"")+((l=+r.fractionGroupSize)?c.replace(new RegExp("\\d{"+l+"}\\B","g"),"$&"+(r.fractionGroupSeparator||"")):c):u}return(r.prefix||"")+n+(r.suffix||"")},O.toFraction=function(e){var t,n,s,i,a,l,u,d,p,g,m,y,E=this,w=E.c;if(null!=e&&(!(u=new Y(e)).isInteger()&&(u.c||1!==u.s)||u.lt(I)))throw Error(o+"Argument "+(u.isInteger()?"out of range: ":"not an integer: ")+K(u));if(!w)return new Y(E);for(t=new Y(I),p=n=new Y(I),s=d=new Y(I),y=f(w),a=t.e=y.length-E.e-1,t.c[0]=c[(l=a%h)<0?h+l:l],e=!e||0<u.comparedTo(t)?0<a?t:p:u,l=H,H=1/0,u=new Y(y),d.c[0]=0;g=r(u,t,0,1),1!=(i=n.plus(g.times(s))).comparedTo(e);)n=s,s=i,p=d.plus(g.times(i=p)),d=i,t=u.minus(g.times(i=t)),u=i;return i=r(e.minus(n),s,0,1),d=d.plus(i.times(p)),n=n.plus(i.times(s)),d.s=p.s=E.s,m=r(p,s,a*=2,P).minus(E).abs().comparedTo(r(d,n,a,P).minus(E).abs())<1?[p,s]:[d,n],H=l,m},O.toNumber=function(){return+K(this)},O.toPrecision=function(e,t){return null!=e&&y(e,1,p),j(this,e,t,2)},O.toString=function(e){var t,r=this,n=r.s,s=r.e;return null===s?n?(t="Infinity",n<0&&(t="-"+t)):t="NaN":(t=null==e?s<=L||D<=s?w(f(r.c),s):C(f(r.c),s,"0"):10===e?C(f((r=$(new Y(r),x+s+1,P)).c),r.e,"0"):(y(e,2,W.length,"Base"),v(C(f(r.c),s,"0"),10,e,n,!0)),n<0&&r.c[0]&&(t="-"+t)),t},O.valueOf=O.toJSON=function(){return K(this)},O._isBigNumber=!0,"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator&&(O[Symbol.toStringTag]="BigNumber",O[Symbol.for("nodejs.util.inspect.custom")]=O.valueOf),null!=t&&Y.set(t),Y}()).default=r.BigNumber=r,void 0!==t&&t.exports?t.exports=r:(e||(e="undefined"!=typeof self&&self?self:window),e.BigNumber=r)}(this)},{}],2:[function(e,t,r){"use strict";t.exports={languageTag:"en-US",delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},spaceSeparated:!1,ordinal:function(e){var t=e%10;return 1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th"},currency:{symbol:"$",position:"prefix",code:"USD"},currencyFormat:{thousandSeparated:!0,totalLength:4,spaceSeparated:!0},formats:{fourDigits:{totalLength:4,spaceSeparated:!0},fullWithTwoDecimals:{output:"currency",thousandSeparated:!0,mantissa:2},fullWithTwoDecimalsNoCurrency:{thousandSeparated:!0,mantissa:2},fullWithNoDecimals:{output:"currency",thousandSeparated:!0,mantissa:0}}}},{}],3:[function(e,t,r){"use strict";function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=[],n=!0,s=!1,i=void 0;try{for(var o,a=e[Symbol.iterator]();!(n=(o=a.next()).done)&&(r.push(o.value),!t||r.length!==t);n=!0);}catch(e){s=!0,i=e}finally{try{n||null==a.return||a.return()}finally{if(s)throw i}}return r}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var s=e("./globalState"),i=e("./validating"),o=e("./parsing"),a=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],l={general:{scale:1024,suffixes:a,marker:"bd"},binary:{scale:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],marker:"b"},decimal:{scale:1e3,suffixes:a,marker:"d"}},h={totalLength:0,characteristic:0,forceAverage:!1,average:!1,mantissa:-1,optionalMantissa:!0,thousandSeparated:!1,spaceSeparated:!1,negative:"sign",forceSign:!1};function u(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=2<arguments.length?arguments[2]:void 0;if("string"==typeof t&&(t=o.parseFormat(t)),!i.validateFormat(t))return"ERROR: invalid format";var n=t.prefix||"",a=t.postfix||"",u=function(e,t,r){switch(t.output){case"currency":return function(e,t,r){var n=r.currentCurrency(),s=Object.assign({},h,t),i=void 0,o="",a=!!s.totalLength||!!s.forceAverage||s.average,l=t.currencyPosition||n.position,u=t.currencySymbol||n.symbol;s.spaceSeparated&&(o=" "),"infix"===l&&(i=o+u+o);var c=g({instance:e,providedFormat:t,state:r,decimalSeparator:i});return"prefix"===l&&(c=e._value<0&&"sign"===s.negative?"-".concat(o).concat(u).concat(c.slice(1)):u+o+c),l&&"postfix"!==l||(c=c+(o=a?"":o)+u),c}(e,t=f(t,s.currentCurrencyDefaultFormat()),s);case"percent":return function(e,t,r,n){var s=t.prefixSymbol,i=g({instance:n(100*e._value),providedFormat:t,state:r}),o=Object.assign({},h,t);return s?"%".concat(o.spaceSeparated?" ":"").concat(i):"".concat(i).concat(o.spaceSeparated?" ":"","%")}(e,t=f(t,s.currentPercentageDefaultFormat()),s,r);case"byte":return t=f(t,s.currentByteDefaultFormat()),C=e,R=s,S=r,T=(v=t).base||"binary",N=l[T],_=(M=c(C._value,N.suffixes,N.scale)).value,b=M.suffix,A=g({instance:S(_),providedFormat:v,state:R,defaults:R.currentByteDefaultFormat()}),O=R.currentAbbreviations(),"".concat(A).concat(O.spaced?" ":"").concat(b);case"time":return t=f(t,s.currentTimeDefaultFormat()),m=e,y=Math.floor(m._value/60/60),E=Math.floor((m._value-60*y*60)/60),w=Math.round(m._value-60*y*60-60*E),"".concat(y,":").concat(E<10?"0":"").concat(E,":").concat(w<10?"0":"").concat(w);case"ordinal":return n=e,i=t=f(t,s.currentOrdinalDefaultFormat()),a=(o=s).currentOrdinal(),u=Object.assign({},h,i),d=g({instance:n,providedFormat:i,state:o}),p=a(n._value),"".concat(d).concat(u.spaceSeparated?" ":"").concat(p);default:return g({instance:e,providedFormat:t,numbro:r})}var n,i,o,a,u,d,p,m,y,E,w,C,v,R,S,T,N,M,_,b,A,O}(e,t,r);return(u=n+u)+a}function c(e,t,r){var n=t[0],s=Math.abs(e);if(r<=s){for(var i=1;i<t.length;++i){var o=Math.pow(r,i),a=Math.pow(r,i+1);if(o<=s&&s<a){n=t[i],e/=o;break}}n===t[0]&&(e/=Math.pow(r,t.length-1),n=t[t.length-1])}return{value:e,suffix:n}}function d(e){for(var t="",r=0;r<e;r++)t+="0";return t}function p(e,t){return-1!==e.toString().indexOf("e")?function(e,t){var r=e.toString(),s=n(r.split("e"),2),i=s[0],o=s[1],a=n(i.split("."),2),l=a[0],h=a[1],u=void 0===h?"":h;if(0<+o)r=l+u+d(o-u.length);else{var c=".";c=+l<0?"-0".concat(c):"0".concat(c);var p=(d(-o-1)+Math.abs(l)+u).substr(0,t);p.length<t&&(p+=d(t-p.length)),r=c+p}return 0<+o&&0<t&&(r+=".".concat(d(t))),r}(e,t):(Math.round(+"".concat(e,"e+").concat(t))/Math.pow(10,t)).toFixed(t)}function g(e){var t=e.instance,r=e.providedFormat,i=e.state,o=void 0===i?s:i,a=e.decimalSeparator,l=e.defaults,u=void 0===l?o.currentDefaults():l,c=t._value;if(0===c&&o.hasZeroFormat())return o.getZeroFormat();if(!isFinite(c))return c.toString();var d,g,f,m,y,E,w,C,v=Object.assign({},h,u,r),R=v.totalLength,S=R?0:v.characteristic,T=v.optionalCharacteristic,N=v.forceAverage,M=!!R||!!N||v.average,_=R?-1:M&&void 0===r.mantissa?0:v.mantissa,b=!R&&(void 0===r.optionalMantissa?-1===_:v.optionalMantissa),A=v.trimMantissa,O=v.thousandSeparated,I=v.spaceSeparated,x=v.negative,P=v.forceSign,L=v.exponential,D="";if(M){var k=function(e){var t=e.value,r=e.forceAverage,n=e.abbreviations,s=e.spaceSeparated,i=void 0!==s&&s,o=e.totalLength,a=void 0===o?0:o,l="",h=Math.abs(t),u=-1;if(h>=Math.pow(10,12)&&!r||"trillion"===r?(l=n.trillion,t/=Math.pow(10,12)):h<Math.pow(10,12)&&h>=Math.pow(10,9)&&!r||"billion"===r?(l=n.billion,t/=Math.pow(10,9)):h<Math.pow(10,9)&&h>=Math.pow(10,6)&&!r||"million"===r?(l=n.million,t/=Math.pow(10,6)):(h<Math.pow(10,6)&&h>=Math.pow(10,3)&&!r||"thousand"===r)&&(l=n.thousand,t/=Math.pow(10,3)),l&&(l=(i?" ":"")+l),a){var c=t.toString().split(".")[0];u=Math.max(a-c.length,0)}return{value:t,abbreviation:l,mantissaPrecision:u}}({value:c,forceAverage:N,abbreviations:o.currentAbbreviations(),spaceSeparated:I,totalLength:R});c=k.value,D+=k.abbreviation,R&&(_=k.mantissaPrecision)}if(L){var H=(g=(d={value:c,characteristicPrecision:S}).value,m=void 0===(f=d.characteristicPrecision)?0:f,E=(y=n(g.toExponential().split("e"),2))[0],w=y[1],C=+E,m&&1<m&&(C*=Math.pow(10,m-1),w=0<=(w=+w-(m-1))?"+".concat(w):w),{value:C,abbreviation:"e".concat(w)});c=H.value,D=H.abbreviation+D}var F,U,V,B=function(e,t,r,s,i){if(-1===s)return e;var o=p(t,s),a=n(o.toString().split("."),2),l=a[0],h=a[1],u=void 0===h?"":h;if(u.match(/^0+$/)&&(r||i))return l;var c=u.match(/0+$/);return i&&c?"".concat(l,".").concat(u.toString().slice(0,c.index)):o.toString()}(c.toString(),c,b,_,A);return B=function(e,t,r,n,s){var i=n.currentDelimiters(),o=i.thousands;s=s||i.decimal;var a=i.thousandsSize||3,l=e.toString(),h=l.split(".")[0],u=l.split(".")[1];return r&&(t<0&&(h=h.slice(1)),function(e,t){for(var r=[],n=0,s=e;0<s;s--)n===t&&(r.unshift(s),n=0),n++;return r}(h.length,a).forEach((function(e,t){h=h.slice(0,e+t)+o+h.slice(e+t)})),t<0&&(h="-".concat(h))),u?h+s+u:h}(B=function(e,t,r,s){var i=e,o=n(i.toString().split("."),2),a=o[0],l=o[1];if(a.match(/^-?0$/)&&r)return l?"".concat(a.replace("0",""),".").concat(l):a.replace("0","");if(a.length<s)for(var h=s-a.length,u=0;u<h;u++)i="0".concat(i);return i.toString()}(B,0,T,S),c,O,o,a),(M||L)&&(B+=D),(P||c<0)&&(F=B,V=x,B=0===(U=c)?F:0==+F?F.replace("-",""):0<U?"+".concat(F):"sign"===V?F:"(".concat(F.replace("-",""),")")),B}function f(e,t){if(!e)return t;var r=Object.keys(e);return 1===r.length&&"output"===r[0]?t:e}t.exports=function(e){return{format:function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return u.apply(void 0,r.concat([e]))},getByteUnit:function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return function(e){var t=l.general;return c(e._value,t.suffixes,t.scale).suffix}.apply(void 0,r.concat([e]))},getBinaryByteUnit:function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return function(e){var t=l.binary;return c(e._value,t.suffixes,t.scale).suffix}.apply(void 0,r.concat([e]))},getDecimalByteUnit:function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return function(e){var t=l.decimal;return c(e._value,t.suffixes,t.scale).suffix}.apply(void 0,r.concat([e]))},formatOrDefault:f}}},{"./globalState":4,"./parsing":8,"./validating":10}],4:[function(e,t,r){"use strict";var n=e("./en-US"),s=e("./validating"),i=e("./parsing"),o={},a=void 0,l={},h=null,u={};function c(e){a=e}function d(){return l[a]}o.languages=function(){return Object.assign({},l)},o.currentLanguage=function(){return a},o.currentCurrency=function(){return d().currency},o.currentAbbreviations=function(){return d().abbreviations},o.currentDelimiters=function(){return d().delimiters},o.currentOrdinal=function(){return d().ordinal},o.currentDefaults=function(){return Object.assign({},d().defaults,u)},o.currentOrdinalDefaultFormat=function(){return Object.assign({},o.currentDefaults(),d().ordinalFormat)},o.currentByteDefaultFormat=function(){return Object.assign({},o.currentDefaults(),d().byteFormat)},o.currentPercentageDefaultFormat=function(){return Object.assign({},o.currentDefaults(),d().percentageFormat)},o.currentCurrencyDefaultFormat=function(){return Object.assign({},o.currentDefaults(),d().currencyFormat)},o.currentTimeDefaultFormat=function(){return Object.assign({},o.currentDefaults(),d().timeFormat)},o.setDefaults=function(e){e=i.parseFormat(e),s.validateFormat(e)&&(u=e)},o.getZeroFormat=function(){return h},o.setZeroFormat=function(e){return h="string"==typeof e?e:null},o.hasZeroFormat=function(){return null!==h},o.languageData=function(e){if(e){if(l[e])return l[e];throw new Error('Unknown tag "'.concat(e,'"'))}return d()},o.registerLanguage=function(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1];if(!s.validateLanguage(e))throw new Error("Invalid language data");l[e.languageTag]=e,t&&c(e.languageTag)},o.setLanguage=function(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:n.languageTag;if(!l[e]){var r=e.split("-")[0],s=Object.keys(l).find((function(e){return e.split("-")[0]===r}));return l[s]?void c(s):void c(t)}c(e)},o.registerLanguage(n),a=n.languageTag,t.exports=o},{"./en-US":2,"./parsing":8,"./validating":10}],5:[function(e,t,r){"use strict";t.exports=function(t){return{loadLanguagesInNode:function(r){return n=t,void r.forEach((function(t){var r=void 0;try{r=e("../languages/".concat(t))}catch(r){console.error('Unable to load "'.concat(t,'". No matching language file found.'))}r&&n.registerLanguage(r)}));var n}}}},{}],6:[function(e,t,r){"use strict";var n=e("bignumber.js");function s(e,t,r){var s=new n(e._value),i=t;return r.isNumbro(t)&&(i=t._value),i=new n(i),e._value=s.minus(i).toNumber(),e}t.exports=function(e){return{add:function(t,r){return i=r,o=e,a=new n((s=t)._value),l=i,o.isNumbro(i)&&(l=i._value),l=new n(l),s._value=a.plus(l).toNumber(),s;var s,i,o,a,l},subtract:function(t,r){return s(t,r,e)},multiply:function(t,r){return i=r,o=e,a=new n((s=t)._value),l=i,o.isNumbro(i)&&(l=i._value),l=new n(l),s._value=a.times(l).toNumber(),s;var s,i,o,a,l},divide:function(t,r){return i=r,o=e,a=new n((s=t)._value),l=i,o.isNumbro(i)&&(l=i._value),l=new n(l),s._value=a.dividedBy(l).toNumber(),s;var s,i,o,a,l},set:function(t,r){return n=t,i=s=r,e.isNumbro(s)&&(i=s._value),n._value=i,n;var n,s,i},difference:function(t,r){return n=r,s(o=(i=e)(t._value),n,i),Math.abs(o._value);var n,i,o}}}},{"bignumber.js":1}],7:[function(e,t,r){"use strict";function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var s=e("./globalState"),i=e("./validating"),o=e("./loading")(p),a=e("./unformatting"),l=e("./formatting")(p),h=e("./manipulating")(p),u=e("./parsing"),c=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._value=t}var t,r,i;return t=e,(r=[{key:"clone",value:function(){return p(this._value)}},{key:"format",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};return l.format(this,e)}},{key:"formatCurrency",value:function(e){return"string"==typeof e&&(e=u.parseFormat(e)),(e=l.formatOrDefault(e,s.currentCurrencyDefaultFormat())).output="currency",l.format(this,e)}},{key:"formatTime",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};return e.output="time",l.format(this,e)}},{key:"binaryByteUnits",value:function(){return l.getBinaryByteUnit(this)}},{key:"decimalByteUnits",value:function(){return l.getDecimalByteUnit(this)}},{key:"byteUnits",value:function(){return l.getByteUnit(this)}},{key:"difference",value:function(e){return h.difference(this,e)}},{key:"add",value:function(e){return h.add(this,e)}},{key:"subtract",value:function(e){return h.subtract(this,e)}},{key:"multiply",value:function(e){return h.multiply(this,e)}},{key:"divide",value:function(e){return h.divide(this,e)}},{key:"set",value:function(e){return h.set(this,d(e))}},{key:"value",value:function(){return this._value}},{key:"valueOf",value:function(){return this._value}}])&&n(t.prototype,r),i&&n(t,i),e}();function d(e){var t=e;return p.isNumbro(e)?t=e._value:"string"==typeof e?t=p.unformat(e):isNaN(e)&&(t=NaN),t}function p(e){return new c(d(e))}p.version="2.1.2",p.isNumbro=function(e){return e instanceof c},p.language=s.currentLanguage,p.registerLanguage=s.registerLanguage,p.setLanguage=s.setLanguage,p.languages=s.languages,p.languageData=s.languageData,p.zeroFormat=s.setZeroFormat,p.defaultFormat=s.currentDefaults,p.setDefaults=s.setDefaults,p.defaultCurrencyFormat=s.currentCurrencyDefaultFormat,p.validate=i.validate,p.loadLanguagesInNode=o.loadLanguagesInNode,p.unformat=a.unformat,t.exports=p},{"./formatting":3,"./globalState":4,"./loading":5,"./manipulating":6,"./parsing":8,"./unformatting":9,"./validating":10}],8:[function(e,t,r){"use strict";t.exports={parseFormat:function(e){var t,r,n,s,i,o,a,l,h,u,c,d,p,g,f,m,y,E,w,C,v=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return"string"!=typeof e?e:(r=v,i=v,function(e,t){if(-1===e.indexOf("$")){if(-1===e.indexOf("%"))return-1!==e.indexOf("bd")?(t.output="byte",t.base="general"):-1!==e.indexOf("b")?(t.output="byte",t.base="binary"):-1!==e.indexOf("d")?(t.output="byte",t.base="decimal"):-1===e.indexOf(":")?-1!==e.indexOf("o")&&(t.output="ordinal"):t.output="time";t.output="percent"}else t.output="currency"}(e=(o=(s=e=(n=(t=e).match(/^{([^}]*)}/))?(r.prefix=n[1],t.slice(n[0].length)):t).match(/{([^}]*)}$/))?(i.postfix=o[1],s.slice(0,-o[0].length)):s,v),a=v,(l=e.match(/[1-9]+[0-9]*/))&&(a.totalLength=+l[0]),h=v,(u=e.split(".")[0].match(/0+/))&&(h.characteristic=u[0].length),function(e,t){if(-1!==e.indexOf(".")){var r=e.split(".")[0];t.optionalCharacteristic=-1===r.indexOf("0")}}(e,v),c=v,-1!==e.indexOf("a")&&(c.average=!0),p=v,-1!==(d=e).indexOf("K")?p.forceAverage="thousand":-1!==d.indexOf("M")?p.forceAverage="million":-1!==d.indexOf("B")?p.forceAverage="billion":-1!==d.indexOf("T")&&(p.forceAverage="trillion"),function(e,t){var r=e.split(".")[1];if(r){var n=r.match(/0+/);n&&(t.mantissa=n[0].length)}}(e,v),f=v,(g=e).match(/\[\.]/)?f.optionalMantissa=!0:g.match(/\./)&&(f.optionalMantissa=!1),m=v,-1!==e.indexOf(",")&&(m.thousandSeparated=!0),y=v,-1!==e.indexOf(" ")&&(y.spaceSeparated=!0),w=v,(E=e).match(/^\+?\([^)]*\)$/)&&(w.negative="parenthesis"),E.match(/^\+?-/)&&(w.negative="sign"),C=v,e.match(/^\+/)&&(C.forceSign=!0),v)}}},{}],9:[function(e,t,r){"use strict";var n=[{key:"ZiB",factor:Math.pow(1024,7)},{key:"ZB",factor:Math.pow(1e3,7)},{key:"YiB",factor:Math.pow(1024,8)},{key:"YB",factor:Math.pow(1e3,8)},{key:"TiB",factor:Math.pow(1024,4)},{key:"TB",factor:Math.pow(1e3,4)},{key:"PiB",factor:Math.pow(1024,5)},{key:"PB",factor:Math.pow(1e3,5)},{key:"MiB",factor:Math.pow(1024,2)},{key:"MB",factor:Math.pow(1e3,2)},{key:"KiB",factor:Math.pow(1024,1)},{key:"KB",factor:Math.pow(1e3,1)},{key:"GiB",factor:Math.pow(1024,3)},{key:"GB",factor:Math.pow(1e3,3)},{key:"EiB",factor:Math.pow(1024,6)},{key:"EB",factor:Math.pow(1e3,6)},{key:"B",factor:1}];function s(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}function i(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",i=3<arguments.length?arguments[3]:void 0,o=4<arguments.length?arguments[4]:void 0,a=5<arguments.length?arguments[5]:void 0,l=6<arguments.length?arguments[6]:void 0;if(""!==e)return e===o?0:function e(t,r){var i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",o=3<arguments.length?arguments[3]:void 0,a=4<arguments.length?arguments[4]:void 0,l=5<arguments.length?arguments[5]:void 0,h=6<arguments.length?arguments[6]:void 0;if(!isNaN(+t))return+t;var u="",c=t.replace(/(^[^(]*)\((.*)\)([^)]*$)/,"$1$2$3");if(c!==t)return-1*e(c,r,i,o,a,l,h);for(var d=0;d<n.length;d++){var p=n[d];if((u=t.replace(p.key,""))!==t)return e(u,r,i,o,a,l,h)*p.factor}if((u=t.replace("%",""))!==t)return e(u,r,i,o,a,l,h)/100;var g=parseFloat(t);if(!isNaN(g)){var f=o(g);if(f&&"."!==f&&(u=t.replace(new RegExp("".concat(s(f),"$")),""))!==t)return e(u,r,i,o,a,l,h);var m={};Object.keys(l).forEach((function(e){m[l[e]]=e}));for(var y=Object.keys(m).sort().reverse(),E=y.length,w=0;w<E;w++){var C=y[w],v=m[C];if((u=t.replace(C,""))!==t){var R=void 0;switch(v){case"thousand":R=Math.pow(10,3);break;case"million":R=Math.pow(10,6);break;case"billion":R=Math.pow(10,9);break;case"trillion":R=Math.pow(10,12)}return e(u,r,i,o,a,l,h)*R}}}}(function(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",n=e.replace(r,"");return(n=n.replace(new RegExp("([0-9])".concat(s(t.thousands),"([0-9])"),"g"),"$1$2")).replace(t.decimal,".")}(e,t,r),t,r,i,o,a,l)}t.exports={unformat:function(t,r){var n,s,o,a=e("./globalState"),l=a.currentDelimiters(),h=a.currentCurrency().symbol,u=a.currentOrdinal(),c=a.getZeroFormat(),d=a.currentAbbreviations(),p=void 0;if("string"==typeof t)p=function(e,t){if(!e.indexOf(":")||":"===t.thousands)return!1;var r=e.split(":");if(3!==r.length)return!1;var n=+r[0],s=+r[1],i=+r[2];return!isNaN(n)&&!isNaN(s)&&!isNaN(i)}(t,l)?(s=+(n=t.split(":"))[0],o=+n[1],+n[2]+60*o+3600*s):i(t,l,h,u,c,d,r);else{if("number"!=typeof t)return;p=t}if(void 0!==p)return p}}},{"./globalState":4}],10:[function(e,t,r){"use strict";function n(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i=e("./unformatting"),o=/^[a-z]{2,3}(-[a-zA-Z]{4})?(-([A-Z]{2}|[0-9]{3}))?$/,a={output:{type:"string",validValues:["currency","percent","byte","time","ordinal","number"]},base:{type:"string",validValues:["decimal","binary","general"],restriction:function(e,t){return"byte"===t.output},message:"`base` must be provided only when the output is `byte`",mandatory:function(e){return"byte"===e.output}},characteristic:{type:"number",restriction:function(e){return 0<=e},message:"value must be positive"},prefix:"string",postfix:"string",forceAverage:{type:"string",validValues:["trillion","billion","million","thousand"]},average:"boolean",currencyPosition:{type:"string",validValues:["prefix","infix","postfix"]},currencySymbol:"string",totalLength:{type:"number",restrictions:[{restriction:function(e){return 0<=e},message:"value must be positive"},{restriction:function(e,t){return!t.exponential},message:"`totalLength` is incompatible with `exponential`"}]},mantissa:{type:"number",restriction:function(e){return 0<=e},message:"value must be positive"},optionalMantissa:"boolean",trimMantissa:"boolean",optionalCharacteristic:"boolean",thousandSeparated:"boolean",spaceSeparated:"boolean",abbreviations:{type:"object",children:{thousand:"string",million:"string",billion:"string",trillion:"string"}},negative:{type:"string",validValues:["sign","parenthesis"]},forceSign:"boolean",exponential:{type:"boolean"},prefixSymbol:{type:"boolean",restriction:function(e,t){return"percent"===t.output},message:"`prefixSymbol` can be provided only when the output is `percent`"}},l={languageTag:{type:"string",mandatory:!0,restriction:function(e){return e.match(o)},message:"the language tag must follow the BCP 47 specification (see https://tools.ieft.org/html/bcp47)"},delimiters:{type:"object",children:{thousands:"string",decimal:"string",thousandsSize:"number"},mandatory:!0},abbreviations:{type:"object",children:{thousand:{type:"string",mandatory:!0},million:{type:"string",mandatory:!0},billion:{type:"string",mandatory:!0},trillion:{type:"string",mandatory:!0}},mandatory:!0},spaceSeparated:"boolean",ordinal:{type:"function",mandatory:!0},currency:{type:"object",children:{symbol:"string",position:"string",code:"string"},mandatory:!0},defaults:"format",ordinalFormat:"format",byteFormat:"format",percentageFormat:"format",currencyFormat:"format",timeDefaults:"format",formats:{type:"object",children:{fourDigits:{type:"format",mandatory:!0},fullWithTwoDecimals:{type:"format",mandatory:!0},fullWithTwoDecimalsNoCurrency:{type:"format",mandatory:!0},fullWithNoDecimals:{type:"format",mandatory:!0}}}};function h(e){return!!i.unformat(e)}function u(e,t,r){var i=3<arguments.length&&void 0!==arguments[3]&&arguments[3],o=Object.keys(e).map((function(n){if(!t[n])return console.error("".concat(r," Invalid key: ").concat(n)),!1;var i=e[n],o=t[n];if("string"==typeof o&&(o={type:o}),"format"===o.type){if(!u(i,a,"[Validate ".concat(n,"]"),!0))return!1}else if(s(i)!==o.type)return console.error("".concat(r," ").concat(n,' type mismatched: "').concat(o.type,'" expected, "').concat(s(i),'" provided')),!1;if(o.restrictions&&o.restrictions.length)for(var l=o.restrictions.length,h=0;h<l;h++){var c=o.restrictions[h],d=c.restriction,p=c.message;if(!d(i,e))return console.error("".concat(r," ").concat(n," invalid value: ").concat(p)),!1}return o.restriction&&!o.restriction(i,e)?(console.error("".concat(r," ").concat(n," invalid value: ").concat(o.message)),!1):o.validValues&&-1===o.validValues.indexOf(i)?(console.error("".concat(r," ").concat(n," invalid value: must be among ").concat(JSON.stringify(o.validValues),', "').concat(i,'" provided')),!1):!(o.children&&!u(i,o.children,"[Validate ".concat(n,"]")))}));return i||o.push.apply(o,n(Object.keys(t).map((function(n){var s=t[n];if("string"==typeof s&&(s={type:s}),s.mandatory){var i=s.mandatory;if("function"==typeof i&&(i=i(e)),i&&void 0===e[n])return console.error("".concat(r,' Missing mandatory key "').concat(n,'"')),!1}return!0})))),o.reduce((function(e,t){return e&&t}),!0)}function c(e){return u(e,a,"[Validate format]")}t.exports={validate:function(e,t){var r=h(e),n=c(t);return r&&n},validateFormat:c,validateInput:h,validateLanguage:function(e){return u(e,l,"[Validate language]")}}},{"./unformatting":9}]},{},[7])(7),window.numbro=r(63192)},35358:(e,t,r)=>{var n={"./af":98979,"./af.js":98979,"./ar":34103,"./ar-dz":57938,"./ar-dz.js":57938,"./ar-kw":44738,"./ar-kw.js":44738,"./ar-ly":58247,"./ar-ly.js":58247,"./ar-ma":79566,"./ar-ma.js":79566,"./ar-ps":59981,"./ar-ps.js":59981,"./ar-sa":80460,"./ar-sa.js":80460,"./ar-tn":56158,"./ar-tn.js":56158,"./ar.js":34103,"./az":42847,"./az.js":42847,"./be":95065,"./be.js":95065,"./bg":64503,"./bg.js":64503,"./bm":73729,"./bm.js":73729,"./bn":54984,"./bn-bd":39107,"./bn-bd.js":39107,"./bn.js":54984,"./bo":73247,"./bo.js":73247,"./br":90268,"./br.js":90268,"./bs":45731,"./bs.js":45731,"./ca":53180,"./ca.js":53180,"./cs":95062,"./cs.js":95062,"./cv":81273,"./cv.js":81273,"./cy":83636,"./cy.js":83636,"./da":71495,"./da.js":71495,"./de":21987,"./de-at":21753,"./de-at.js":21753,"./de-ch":1223,"./de-ch.js":1223,"./de.js":21987,"./dv":82230,"./dv.js":82230,"./el":15073,"./el.js":15073,"./en-au":23550,"./en-au.js":23550,"./en-ca":9636,"./en-ca.js":9636,"./en-gb":45801,"./en-gb.js":45801,"./en-ie":30614,"./en-ie.js":30614,"./en-il":83133,"./en-il.js":83133,"./en-in":18715,"./en-in.js":18715,"./en-nz":61904,"./en-nz.js":61904,"./en-sg":60626,"./en-sg.js":60626,"./eo":84936,"./eo.js":84936,"./es":70748,"./es-do":15984,"./es-do.js":15984,"./es-mx":33928,"./es-mx.js":33928,"./es-us":27457,"./es-us.js":27457,"./es.js":70748,"./et":61737,"./et.js":61737,"./eu":91226,"./eu.js":91226,"./fa":99409,"./fa.js":99409,"./fi":99241,"./fi.js":99241,"./fil":22513,"./fil.js":22513,"./fo":40931,"./fo.js":40931,"./fr":57128,"./fr-ca":92217,"./fr-ca.js":92217,"./fr-ch":88722,"./fr-ch.js":88722,"./fr.js":57128,"./fy":71033,"./fy.js":71033,"./ga":3880,"./ga.js":3880,"./gd":36027,"./gd.js":36027,"./gl":25043,"./gl.js":25043,"./gom-deva":55606,"./gom-deva.js":55606,"./gom-latn":26417,"./gom-latn.js":26417,"./gu":6084,"./gu.js":6084,"./he":54375,"./he.js":54375,"./hi":88363,"./hi.js":88363,"./hr":72054,"./hr.js":72054,"./hu":46935,"./hu.js":46935,"./hy-am":81738,"./hy-am.js":81738,"./id":70813,"./id.js":70813,"./is":37400,"./is.js":37400,"./it":78253,"./it-ch":24249,"./it-ch.js":24249,"./it.js":78253,"./ja":6989,"./ja.js":6989,"./jv":80200,"./jv.js":80200,"./ka":43220,"./ka.js":43220,"./kk":38294,"./kk.js":38294,"./km":6560,"./km.js":6560,"./kn":24505,"./kn.js":24505,"./ko":54250,"./ko.js":54250,"./ku":21656,"./ku-kmr":91655,"./ku-kmr.js":91655,"./ku.js":21656,"./ky":96412,"./ky.js":96412,"./lb":8178,"./lb.js":8178,"./lo":17525,"./lo.js":17525,"./lt":76676,"./lt.js":76676,"./lv":91598,"./lv.js":91598,"./me":44354,"./me.js":44354,"./mi":83590,"./mi.js":83590,"./mk":55772,"./mk.js":55772,"./ml":12073,"./ml.js":12073,"./mn":60743,"./mn.js":60743,"./mr":2107,"./mr.js":2107,"./ms":54164,"./ms-my":15255,"./ms-my.js":15255,"./ms.js":54164,"./mt":39233,"./mt.js":39233,"./my":97654,"./my.js":97654,"./nb":94384,"./nb.js":94384,"./ne":94885,"./ne.js":94885,"./nl":19246,"./nl-be":14346,"./nl-be.js":14346,"./nl.js":19246,"./nn":46852,"./nn.js":46852,"./oc-lnc":43136,"./oc-lnc.js":43136,"./pa-in":54383,"./pa-in.js":54383,"./pl":85632,"./pl.js":85632,"./pt":728,"./pt-br":89353,"./pt-br.js":89353,"./pt.js":728,"./ro":91535,"./ro.js":91535,"./ru":66809,"./ru.js":66809,"./sd":1335,"./sd.js":1335,"./se":2560,"./se.js":2560,"./si":15924,"./si.js":15924,"./sk":4126,"./sk.js":4126,"./sl":91743,"./sl.js":91743,"./sq":69116,"./sq.js":69116,"./sr":33541,"./sr-cyrl":59340,"./sr-cyrl.js":59340,"./sr.js":33541,"./ss":2822,"./ss.js":2822,"./sv":17577,"./sv.js":17577,"./sw":70362,"./sw.js":70362,"./ta":88503,"./ta.js":88503,"./te":91635,"./te.js":91635,"./tet":9335,"./tet.js":9335,"./tg":90229,"./tg.js":90229,"./th":44296,"./th.js":44296,"./tk":74433,"./tk.js":74433,"./tl-ph":31409,"./tl-ph.js":31409,"./tlh":33222,"./tlh.js":33222,"./tr":57530,"./tr.js":57530,"./tzl":11068,"./tzl.js":11068,"./tzm":92707,"./tzm-latn":80981,"./tzm-latn.js":80981,"./tzm.js":92707,"./ug-cn":63372,"./ug-cn.js":63372,"./uk":18692,"./uk.js":18692,"./ur":21299,"./ur.js":21299,"./uz":55579,"./uz-latn":53389,"./uz-latn.js":53389,"./uz.js":55579,"./vi":3321,"./vi.js":3321,"./x-pseudo":57865,"./x-pseudo.js":57865,"./yo":51548,"./yo.js":51548,"./zh-cn":28454,"./zh-cn.js":28454,"./zh-hk":85754,"./zh-hk.js":85754,"./zh-mo":7791,"./zh-mo.js":7791,"./zh-tw":5186,"./zh-tw.js":5186};function s(e){var t=i(e);return r(t)}function i(e){if(!r.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}s.keys=function(){return Object.keys(n)},s.resolve=i,e.exports=s,s.id=35358},83740:(e,t)=>{"use strict";t.__esModule=!0,t.parse=function(e){const t=[[""]];if(0===e.length)return t;let i,o=0,a=0;for(;e.length>0&&i!==e.length;)if(i=e.length,e.match(s))e=e.replace(s,""),o+=1,t[a][o]="";else if(e.match(r))e=e.replace(r,""),o=0,a+=1,t[a]=[""];else{let r="";if(e.startsWith('"')){let t=0,n=!0;for(;n;){const s=e.slice(0,1);'"'===s&&(t+=1),r+=s,(0===(e=e.slice(1)).length||e.match(/^[\t\r\n]/)&&t%2==0)&&(n=!1)}r=r.replace(/^"/,"").replace(/"$/,"").replace(/["]*/g,(e=>new Array(Math.floor(e.length/2)).fill('"').join("")))}else{const t=e.match(n);r=t?t[0]:"",e=e.slice(r.length)}t[a][o]=r}return t},t.stringify=function(e){let t,r,n,s,i,o="";for(t=0,r=e.length;t<r;t+=1){for(s=e[t].length,n=0;n<s;n+=1)n>0&&(o+="\t"),i=e[t][n],"string"==typeof i?i.indexOf("\n")>-1?o+=`"${i.replace(/"/g,'""')}"`:o+=i:o+=null==i?"":i;t!==r-1&&(o+="\n")}return o};const r=/^(\r\n|\n\r|\r|\n)/,n=/^[^\t\r\n]+/,s=/^\t/},70389:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(83740);t.parse=n.parse,t.stringify=n.stringify},13557:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(95913),r(12587);var s=n(r(85707));t.FullyVisibleColumnsCalculationType=class{constructor(){(0,s.default)(this,"count",0),(0,s.default)(this,"startColumn",null),(0,s.default)(this,"endColumn",null),(0,s.default)(this,"startPosition",null),(0,s.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedWidth:r,zeroBasedScrollOffset:n,viewportWidth:s,columnWidth:i}=t;r>=n&&r+i<=n+(n>0?s+1:s)&&(null!==this.startColumn&&void 0!==this.startColumn||(this.startColumn=e),this.endColumn=e)}finalize(e){var t;const{scrollOffset:r,viewportWidth:n,inlineStartOffset:s,zeroBasedScrollOffset:i,totalColumns:o,needReverse:a,startPositions:l,columnWidth:h}=e;if(this.endColumn===o-1&&a)for(this.startColumn=this.endColumn;this.startColumn>0;){const e=l[this.endColumn]+h-l[this.startColumn-1];if(e<=n&&(this.startColumn-=1),e>=n)break}this.startPosition=null!==(t=l[this.startColumn])&&void 0!==t?t:null;const u=r+n-(i>0?n+1:n),c=null===this.startColumn?0:e.getColumnWidth(this.startColumn);u<-1*s||r>l.at(-1)||-1*r-n>-1*c?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,o<this.endColumn&&(this.endColumn=o-1),null!==this.startColumn&&(this.count=this.endColumn-this.startColumn+1)}}},42037:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(95913),r(12587);var s=n(r(85707));t.FullyVisibleRowsCalculationType=class{constructor(){(0,s.default)(this,"count",0),(0,s.default)(this,"startRow",null),(0,s.default)(this,"endRow",null),(0,s.default)(this,"startPosition",null),(0,s.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedHeight:r,zeroBasedScrollOffset:n,innerViewportHeight:s,rowHeight:i}=t;r>=n&&r+i<=s&&(null===this.startRow&&(this.startRow=e),this.endRow=e)}finalize(e){var t;const{scrollOffset:r,viewportHeight:n,horizontalScrollbarHeight:s,totalRows:i,needReverse:o,startPositions:a,rowHeight:l}=e;if(this.endRow===i-1&&o)for(this.startRow=this.endRow;this.startRow>0;){const e=a[this.endRow]+l-a[this.startRow-1];if(e<=n-s&&(this.startRow-=1),e>=n-s)break}this.startPosition=null!==(t=a[this.startRow])&&void 0!==t?t:null;r+n-s<(null===this.startRow?0:e.getRowHeight(this.startRow))||r>a.at(-1)?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,i<this.endRow&&(this.endRow=i-1),null!==this.startRow&&(this.count=this.endRow-this.startRow+1)}}},40439:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(95913),r(12587);var s=n(r(85707));t.PartiallyVisibleColumnsCalculationType=class{constructor(){(0,s.default)(this,"count",0),(0,s.default)(this,"startColumn",null),(0,s.default)(this,"endColumn",null),(0,s.default)(this,"startPosition",null),(0,s.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedWidth:r,zeroBasedScrollOffset:n,viewportWidth:s}=t;r<=n&&(this.startColumn=e);r>=n&&r<=n+(n>0?s+1:s)&&(null!==this.startColumn&&void 0!==this.startColumn||(this.startColumn=e)),this.endColumn=e}finalize(e){var t;const{scrollOffset:r,viewportWidth:n,inlineStartOffset:s,zeroBasedScrollOffset:i,totalColumns:o,needReverse:a,startPositions:l,columnWidth:h}=e;if(this.endColumn===o-1&&a)for(this.startColumn=this.endColumn;this.startColumn>0;){const e=l[this.endColumn]+h-l[this.startColumn-1];if(this.startColumn-=1,e>n)break}this.startPosition=null!==(t=l[this.startColumn])&&void 0!==t?t:null;r+n-(i>0?n+1:n)<-1*s||r>l.at(-1)+h||-1*r-n>0?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,o<this.endColumn&&(this.endColumn=o-1),null!==this.startColumn&&(this.count=this.endColumn-this.startColumn+1)}}},53531:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(95913),r(12587);var s=n(r(85707));t.PartiallyVisibleRowsCalculationType=class{constructor(){(0,s.default)(this,"count",0),(0,s.default)(this,"startRow",null),(0,s.default)(this,"endRow",null),(0,s.default)(this,"startPosition",null),(0,s.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedHeight:r,zeroBasedScrollOffset:n,innerViewportHeight:s}=t;r<=n&&(this.startRow=e),r>=n&&r<=s&&null===this.startRow&&(this.startRow=e),this.endRow=e}finalize(e){var t;const{scrollOffset:r,viewportHeight:n,horizontalScrollbarHeight:s,totalRows:i,needReverse:o,startPositions:a,rowHeight:l}=e;if(this.endRow===i-1&&o)for(this.startRow=this.endRow;this.startRow>0;){const e=a[this.endRow]+l-a[this.startRow-1];if(this.startRow-=1,e>=n-s)break}this.startPosition=null!==(t=a[this.startRow])&&void 0!==t?t:null;r+n-s<0||r>a.at(-1)+l?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,i<this.endRow&&(this.endRow=i-1),null!==this.startRow&&(this.count=this.endRow-this.startRow+1)}}},46953:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.RenderedAllColumnsCalculationType=class{constructor(){(0,s.default)(this,"count",0),(0,s.default)(this,"startColumn",0),(0,s.default)(this,"endColumn",0),(0,s.default)(this,"startPosition",0),(0,s.default)(this,"isVisibleInTrimmingContainer",!0)}initialize(e){let{totalColumns:t}=e;this.count=t,this.endColumn=this.count-1}process(){}finalize(){}}},89289:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.RenderedAllRowsCalculationType=class{constructor(){(0,s.default)(this,"count",0),(0,s.default)(this,"startRow",0),(0,s.default)(this,"endRow",0),(0,s.default)(this,"startPosition",0),(0,s.default)(this,"isVisibleInTrimmingContainer",!0)}initialize(e){let{totalRows:t}=e;this.count=t,this.endRow=this.count-1}process(){}finalize(){}}},58120:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(40439);class s extends n.PartiallyVisibleColumnsCalculationType{finalize(e){var t;super.finalize(e);const{overrideFn:r,totalColumns:n,startPositions:s}=e;null!==this.startColumn&&"function"==typeof r&&r(this),this.startColumn<0&&(this.startColumn=0),this.startPosition=null!==(t=s[this.startColumn])&&void 0!==t?t:null,n<this.endColumn&&(this.endColumn=n-1),null!==this.startColumn&&(this.count=this.endColumn-this.startColumn+1)}}t.RenderedColumnsCalculationType=s},78350:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(53531);class s extends n.PartiallyVisibleRowsCalculationType{finalize(e){var t;super.finalize(e);const{overrideFn:r,totalRows:n,startPositions:s}=e;null!==this.startRow&&"function"==typeof r&&r(this),this.startRow<0&&(this.startRow=0),this.startPosition=null!==(t=s[this.startRow])&&void 0!==t?t:null,n<this.endRow&&(this.endRow=n-1),null!==this.startRow&&(this.count=this.endRow-this.startRow+1)}}t.RenderedRowsCalculationType=s},44038:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(13557);t.FullyVisibleColumnsCalculationType=n.FullyVisibleColumnsCalculationType;var s=r(42037);t.FullyVisibleRowsCalculationType=s.FullyVisibleRowsCalculationType;var i=r(40439);t.PartiallyVisibleColumnsCalculationType=i.PartiallyVisibleColumnsCalculationType;var o=r(53531);t.PartiallyVisibleRowsCalculationType=o.PartiallyVisibleRowsCalculationType;var a=r(46953);t.RenderedAllColumnsCalculationType=a.RenderedAllColumnsCalculationType;var l=r(89289);t.RenderedAllRowsCalculationType=l.RenderedAllRowsCalculationType;var h=r(58120);t.RenderedColumnsCalculationType=h.RenderedColumnsCalculationType;var u=r(78350);t.RenderedRowsCalculationType=u.RenderedRowsCalculationType;var c=r(71915);t.ViewportColumnsCalculator=c.ViewportColumnsCalculator,t.DEFAULT_COLUMN_WIDTH=c.DEFAULT_WIDTH;var d=r(4703);t.ViewportRowsCalculator=d.ViewportRowsCalculator,t.DEFAULT_ROW_HEIGHT=d.DEFAULT_HEIGHT},96215:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.ViewportBaseCalculator=class{constructor(e){(0,s.default)(this,"calculationTypes",[]),(0,s.default)(this,"calculationResults",new Map),this.calculationTypes=e}_initialize(e){this.calculationTypes.forEach((t=>{let[r,n]=t;this.calculationResults.set(r,n),n.initialize(e)}))}_process(e,t){this.calculationTypes.forEach((r=>{let[,n]=r;return n.process(e,t)}))}_finalize(e){this.calculationTypes.forEach((t=>{let[,r]=t;return r.finalize(e)}))}getResultsFor(e){return this.calculationResults.get(e)}}},71915:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(96215);const o=t.DEFAULT_WIDTH=50;class a extends i.ViewportBaseCalculator{constructor(e){let{calculationTypes:t,viewportWidth:r,scrollOffset:n,totalColumns:i,columnWidthFn:o,overrideFn:a,inlineStartOffset:l}=e;super(t),(0,s.default)(this,"viewportWidth",0),(0,s.default)(this,"scrollOffset",0),(0,s.default)(this,"zeroBasedScrollOffset",0),(0,s.default)(this,"totalColumns",0),(0,s.default)(this,"columnWidthFn",null),(0,s.default)(this,"columnWidth",0),(0,s.default)(this,"overrideFn",null),(0,s.default)(this,"inlineStartOffset",0),(0,s.default)(this,"totalCalculatedWidth",0),(0,s.default)(this,"startPositions",[]),(0,s.default)(this,"needReverse",!0),this.viewportWidth=r,this.scrollOffset=n,this.zeroBasedScrollOffset=Math.max(n,0),this.totalColumns=i,this.columnWidthFn=o,this.overrideFn=a,this.inlineStartOffset=l,this.calculate()}calculate(){this._initialize(this);for(let e=0;e<this.totalColumns;e++)if(this.columnWidth=this.getColumnWidth(e),this._process(e,this),this.startPositions.push(this.totalCalculatedWidth),this.totalCalculatedWidth+=this.columnWidth,this.totalCalculatedWidth>=this.zeroBasedScrollOffset+this.viewportWidth){this.needReverse=!1;break}this._finalize(this)}getColumnWidth(e){const t=this.columnWidthFn(e);return isNaN(t)?o:t}}t.ViewportColumnsCalculator=a},4703:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(96215);const o=t.DEFAULT_HEIGHT=23;class a extends i.ViewportBaseCalculator{constructor(e){let{calculationTypes:t,viewportHeight:r,scrollOffset:n,totalRows:i,rowHeightFn:o,overrideFn:a,horizontalScrollbarHeight:l}=e;super(t),(0,s.default)(this,"viewportHeight",0),(0,s.default)(this,"scrollOffset",0),(0,s.default)(this,"zeroBasedScrollOffset",0),(0,s.default)(this,"totalRows",0),(0,s.default)(this,"rowHeightFn",null),(0,s.default)(this,"rowHeight",0),(0,s.default)(this,"overrideFn",null),(0,s.default)(this,"horizontalScrollbarHeight",0),(0,s.default)(this,"innerViewportHeight",0),(0,s.default)(this,"totalCalculatedHeight",0),(0,s.default)(this,"startPositions",[]),(0,s.default)(this,"needReverse",!0),this.viewportHeight=r,this.scrollOffset=n,this.zeroBasedScrollOffset=Math.max(n,0),this.totalRows=i,this.rowHeightFn=o,this.overrideFn=a,this.horizontalScrollbarHeight=null!=l?l:0,this.innerViewportHeight=this.zeroBasedScrollOffset+this.viewportHeight-this.horizontalScrollbarHeight,this.calculate()}calculate(){this._initialize(this);for(let e=0;e<this.totalRows;e++)if(this.rowHeight=this.getRowHeight(e),this._process(e,this),this.startPositions.push(this.totalCalculatedHeight),this.totalCalculatedHeight+=this.rowHeight,this.totalCalculatedHeight>=this.innerViewportHeight){this.needReverse=!1;break}this._finalize(this)}getRowHeight(e){const t=this.rowHeightFn(e);return isNaN(t)?o:t}}t.ViewportRowsCalculator=a},26022:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707));function i(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function o(e,t){return e.get(l(e,t))}function a(e,t,r){return e.set(l(e,t),r),r}function l(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var h=new WeakMap;class u{constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,s.default)(this,"row",null),(0,s.default)(this,"col",null),i(this,h,!1),a(h,this,r),void 0!==e&&void 0!==t&&(this.row=e,this.col=t)}isValid(e){const{countRows:t,countCols:r,countRowHeaders:n,countColHeaders:s}={countRows:0,countCols:0,countRowHeaders:0,countColHeaders:0,...e};return!(!Number.isInteger(this.row)||!Number.isInteger(this.col))&&(!(this.row<-s||this.col<-n)&&!(this.row>=t||this.col>=r))}isEqual(e){return e===this||this.row===e.row&&this.col===e.col}isHeader(){return!this.isCell()}isCell(){return this.row>=0&&this.col>=0}isRtl(){return o(h,this)}isSouthEastOf(e){return this.row>=e.row&&(o(h,this)?this.col<=e.col:this.col>=e.col)}isNorthWestOf(e){return this.row<=e.row&&(o(h,this)?this.col>=e.col:this.col<=e.col)}isSouthWestOf(e){return this.row>=e.row&&(o(h,this)?this.col>=e.col:this.col<=e.col)}isNorthEastOf(e){return this.row<=e.row&&(o(h,this)?this.col<=e.col:this.col>=e.col)}normalize(){return this.row=null===this.row?this.row:Math.max(this.row,0),this.col=null===this.col?this.col:Math.max(this.col,0),this}assign(e){return Number.isInteger(null==e?void 0:e.row)&&(this.row=e.row),Number.isInteger(null==e?void 0:e.col)&&(this.col=e.col),e instanceof u&&a(h,this,e.isRtl()),this}clone(){return new u(this.row,this.col,o(h,this))}toObject(){return{row:this.row,col:this.col}}}t.default=u},55139:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=n(r(26022));function o(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function a(e,t){return e.get(l(e,t))}function l(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var h=new WeakMap;class u{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];var i,a,u;(0,s.default)(this,"highlight",null),(0,s.default)(this,"from",null),(0,s.default)(this,"to",null),o(this,h,!1),this.highlight=e.clone(),this.from=t.clone(),this.to=r.clone(),a=this,u=n,(i=h).set(l(i,a),u)}setHighlight(e){return this.highlight=e.clone(),this}setFrom(e){return this.from=e.clone(),this}setTo(e){return this.to=e.clone(),this}isValid(e){return this.from.isValid(e)&&this.to.isValid(e)}isSingle(){return this.isSingleCell()||this.isSingleHeader()}isSingleCell(){return this.from.row>=0&&this.from.row===this.to.row&&this.from.col>=0&&this.from.col===this.to.col}isSingleHeader(){return(this.from.row<0||this.from.col<0)&&this.from.row===this.to.row&&this.from.col===this.to.col}isHeader(){return!(!this.from.isHeader()||!this.to.isHeader())||(this.from.col<0&&this.to.col<0||this.from.row<0&&this.to.row<0)}containsHeaders(){return this.from.isHeader()||this.to.isHeader()}getOuterHeight(){return Math.max(this.from.row,this.to.row)-Math.min(this.from.row,this.to.row)+1}getOuterWidth(){return Math.max(this.from.col,this.to.col)-Math.min(this.from.col,this.to.col)+1}getHeight(){if(this.from.row<0&&this.to.row<0)return 0;const e=Math.max(this.from.row,0),t=Math.max(this.to.row,0);return Math.max(e,t)-Math.min(e,t)+1}getWidth(){if(this.from.col<0&&this.to.col<0)return 0;const e=Math.max(this.from.col,0),t=Math.max(this.to.col,0);return Math.max(e,t)-Math.min(e,t)+1}getCellsCount(){return this.getWidth()*this.getHeight()}includes(e){const{row:t,col:r}=e,n=this.getOuterTopStartCorner(),s=this.getOuterBottomEndCorner();return n.row<=t&&s.row>=t&&n.col<=r&&s.col>=r}includesRange(e){return this.includes(e.getOuterTopStartCorner())&&this.includes(e.getOuterBottomEndCorner())}isEqual(e){return Math.min(this.from.row,this.to.row)===Math.min(e.from.row,e.to.row)&&Math.max(this.from.row,this.to.row)===Math.max(e.from.row,e.to.row)&&Math.min(this.from.col,this.to.col)===Math.min(e.from.col,e.to.col)&&Math.max(this.from.col,this.to.col)===Math.max(e.from.col,e.to.col)}overlaps(e){return e.isSouthEastOf(this.getOuterTopLeftCorner())&&e.isNorthWestOf(this.getOuterBottomRightCorner())}isSouthEastOf(e){return this.getOuterTopLeftCorner().isSouthEastOf(e)||this.getOuterBottomRightCorner().isSouthEastOf(e)}isNorthWestOf(e){return this.getOuterTopLeftCorner().isNorthWestOf(e)||this.getOuterBottomRightCorner().isNorthWestOf(e)}isOverlappingHorizontally(e){return this.getOuterTopEndCorner().col>=e.getOuterTopStartCorner().col&&this.getOuterTopEndCorner().col<=e.getOuterTopEndCorner().col||this.getOuterTopStartCorner().col<=e.getOuterTopEndCorner().col&&this.getOuterTopStartCorner().col>=e.getOuterTopStartCorner().col}isOverlappingVertically(e){return this.getOuterBottomStartCorner().row>=e.getOuterTopRightCorner().row&&this.getOuterBottomStartCorner().row<=e.getOuterBottomStartCorner().row||this.getOuterTopEndCorner().row<=e.getOuterBottomStartCorner().row&&this.getOuterTopEndCorner().row>=e.getOuterTopRightCorner().row}expand(e){const t=this.getOuterTopStartCorner(),r=this.getOuterBottomEndCorner();return(e.row<t.row||e.col<t.col||e.row>r.row||e.col>r.col)&&(this.from=this._createCellCoords(Math.min(t.row,e.row),Math.min(t.col,e.col)),this.to=this._createCellCoords(Math.max(r.row,e.row),Math.max(r.col,e.col)),!0)}expandByRange(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.includesRange(e)||!this.overlaps(e))return!1;const r=this.getOuterTopStartCorner(),n=this.getOuterBottomEndCorner(),s=this.getDirection(),i=e.getOuterTopStartCorner(),o=e.getOuterBottomEndCorner(),a=Math.min(r.row,i.row),l=Math.min(r.col,i.col),h=Math.max(n.row,o.row),u=Math.max(n.col,o.col),c=this._createCellCoords(a,l),d=this._createCellCoords(h,u);return this.from=c,this.to=d,this.setDirection(s),t&&(this.highlight.row===this.getOuterBottomRightCorner().row&&"N-S"===this.getVerticalDirection()&&this.flipDirectionVertically(),this.highlight.col===this.getOuterTopRightCorner().col&&"W-E"===this.getHorizontalDirection()&&this.flipDirectionHorizontally()),!0}getDirection(){return this.from.isNorthWestOf(this.to)?"NW-SE":this.from.isNorthEastOf(this.to)?"NE-SW":this.from.isSouthEastOf(this.to)?"SE-NW":this.from.isSouthWestOf(this.to)?"SW-NE":void 0}setDirection(e){switch(e){case"NW-SE":[this.from,this.to]=[this.getOuterTopLeftCorner(),this.getOuterBottomRightCorner()];break;case"NE-SW":[this.from,this.to]=[this.getOuterTopRightCorner(),this.getOuterBottomLeftCorner()];break;case"SE-NW":[this.from,this.to]=[this.getOuterBottomRightCorner(),this.getOuterTopLeftCorner()];break;case"SW-NE":[this.from,this.to]=[this.getOuterBottomLeftCorner(),this.getOuterTopRightCorner()]}}getVerticalDirection(){return["NE-SW","NW-SE"].indexOf(this.getDirection())>-1?"N-S":"S-N"}getHorizontalDirection(){return["NW-SE","SW-NE"].indexOf(this.getDirection())>-1?"W-E":"E-W"}flipDirectionVertically(){switch(this.getDirection()){case"NW-SE":this.setDirection("SW-NE");break;case"NE-SW":this.setDirection("SE-NW");break;case"SE-NW":this.setDirection("NE-SW");break;case"SW-NE":this.setDirection("NW-SE")}}flipDirectionHorizontally(){switch(this.getDirection()){case"NW-SE":this.setDirection("NE-SW");break;case"NE-SW":this.setDirection("NW-SE");break;case"SE-NW":this.setDirection("SW-NE");break;case"SW-NE":this.setDirection("SE-NW")}}getTopStartCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.min(this.from.col,this.to.col)).normalize()}getTopLeftCorner(){return a(h,this)?this.getTopEndCorner():this.getTopStartCorner()}getBottomEndCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.max(this.from.col,this.to.col)).normalize()}getBottomRightCorner(){return a(h,this)?this.getBottomStartCorner():this.getBottomEndCorner()}getTopEndCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.max(this.from.col,this.to.col)).normalize()}getTopRightCorner(){return a(h,this)?this.getTopStartCorner():this.getTopEndCorner()}getBottomStartCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.min(this.from.col,this.to.col)).normalize()}getBottomLeftCorner(){return a(h,this)?this.getBottomEndCorner():this.getBottomStartCorner()}getOuterTopStartCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}getOuterTopLeftCorner(){return a(h,this)?this.getOuterTopEndCorner():this.getOuterTopStartCorner()}getOuterBottomEndCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}getOuterBottomRightCorner(){return a(h,this)?this.getOuterBottomStartCorner():this.getOuterBottomEndCorner()}getOuterTopEndCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}getOuterTopRightCorner(){return a(h,this)?this.getOuterTopStartCorner():this.getOuterTopEndCorner()}getOuterBottomStartCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}getOuterBottomLeftCorner(){return a(h,this)?this.getOuterBottomEndCorner():this.getOuterBottomStartCorner()}isCorner(e){return e.isEqual(this.getOuterTopLeftCorner())||e.isEqual(this.getOuterTopRightCorner())||e.isEqual(this.getOuterBottomLeftCorner())||e.isEqual(this.getOuterBottomRightCorner())}getOppositeCorner(e){return e instanceof i.default&&(e.isEqual(this.getOuterBottomEndCorner())?this.getOuterTopStartCorner():e.isEqual(this.getOuterTopStartCorner())?this.getOuterBottomEndCorner():e.isEqual(this.getOuterTopEndCorner())?this.getOuterBottomStartCorner():e.isEqual(this.getOuterBottomStartCorner())?this.getOuterTopEndCorner():void 0)}getBordersSharedWith(e){if(!this.includesRange(e))return[];const t=Math.min(this.from.row,this.to.row),r=Math.max(this.from.row,this.to.row),n=Math.min(this.from.col,this.to.col),s=Math.max(this.from.col,this.to.col),i=Math.min(e.from.row,e.to.row),o=Math.max(e.from.row,e.to.row),l=Math.min(e.from.col,e.to.col),u=Math.max(e.from.col,e.to.col),c=[];return t===i&&c.push("top"),s===u&&c.push(a(h,this)?"left":"right"),r===o&&c.push("bottom"),n===l&&c.push(a(h,this)?"right":"left"),c}getInner(){const e=this.getOuterTopStartCorner(),t=this.getOuterBottomEndCorner(),r=[];for(let n=e.row;n<=t.row;n++)for(let s=e.col;s<=t.col;s++)this.from.row===n&&this.from.col===s||this.to.row===n&&this.to.col===s||r.push(this._createCellCoords(n,s));return r}getAll(){const e=this.getOuterTopStartCorner(),t=this.getOuterBottomEndCorner(),r=[];for(let n=e.row;n<=t.row;n++)for(let s=e.col;s<=t.col;s++)e.row===n&&e.col===s?r.push(e):t.row===n&&t.col===s?r.push(t):r.push(this._createCellCoords(n,s));return r}forAll(e){const t=this.getOuterTopStartCorner(),r=this.getOuterBottomEndCorner();for(let n=t.row;n<=r.row;n++)for(let s=t.col;s<=r.col;s++){if(!1===e(n,s))return}}clone(){return new u(this.highlight,this.from,this.to,a(h,this))}toObject(){return{from:this.from.toObject(),to:this.to.toObject()}}_createCellCoords(e,t){return new i.default(e,t,a(h,this))}}t.default=u},7625:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(49536),o=r(69114),a=n(r(63286)),l=n(r(19184)),h=n(r(26022)),u=n(r(55139));t.default=class{get eventManager(){return new a.default(this)}constructor(e,t){(0,s.default)(this,"wtTable",void 0),(0,s.default)(this,"wtScroll",void 0),(0,s.default)(this,"wtViewport",void 0),(0,s.default)(this,"wtOverlays",void 0),(0,s.default)(this,"selectionManager",void 0),(0,s.default)(this,"wtEvent",void 0),(0,s.default)(this,"guid",`wt_${(0,o.randomString)()}`),(0,s.default)(this,"drawInterrupted",!1),(0,s.default)(this,"drawn",!1),(0,s.default)(this,"domBindings",void 0),(0,s.default)(this,"wtSettings",void 0),this.domBindings={rootTable:e,rootDocument:e.ownerDocument,rootWindow:e.ownerDocument.defaultView},this.wtSettings=t,this.wtScroll=new l.default(this.createScrollDao())}findOriginalHeaders(){const e=[];if(this.wtTable.THEAD.childNodes.length&&this.wtTable.THEAD.childNodes[0].childNodes.length){for(let t=0,r=this.wtTable.THEAD.childNodes[0].childNodes.length;t<r;t++)e.push(this.wtTable.THEAD.childNodes[0].childNodes[t].innerHTML);this.wtSettings.getSetting("columnHeaders").length||this.wtSettings.update("columnHeaders",[function(t,r){(0,i.fastInnerText)(r,e[t])}])}}createCellCoords(e,t){return new h.default(e,t,this.wtSettings.getSetting("rtlMode"))}createCellRange(e,t,r){return new u.default(e,t,r,this.wtSettings.getSetting("rtlMode"))}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.drawInterrupted=!1,this.wtTable.isVisible()?this.wtTable.draw(e):this.drawInterrupted=!0,this}getCell(e){if(!(arguments.length>1&&void 0!==arguments[1]&&arguments[1]))return this.wtTable.getCell(e);const t=this.wtSettings.getSetting("totalRows"),r=this.wtSettings.getSetting("fixedRowsTop"),n=this.wtSettings.getSetting("fixedRowsBottom"),s=this.wtSettings.getSetting("fixedColumnsStart");if(e.row<r&&e.col<s)return this.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.getCell(e);if(e.row<r)return this.wtOverlays.topOverlay.clone.wtTable.getCell(e);if(e.col<s&&e.row>=t-n){if(this.wtOverlays.bottomInlineStartCornerOverlay&&this.wtOverlays.bottomInlineStartCornerOverlay.clone)return this.wtOverlays.bottomInlineStartCornerOverlay.clone.wtTable.getCell(e)}else{if(e.col<s)return this.wtOverlays.inlineStartOverlay.clone.wtTable.getCell(e);if(e.row<t&&e.row>=t-n&&this.wtOverlays.bottomOverlay&&this.wtOverlays.bottomOverlay.clone)return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(e)}return this.wtTable.getCell(e)}scrollViewport(e,t,r,n,s){return!(e.col<0||e.row<0)&&this.wtScroll.scrollViewport(e,t,r,n,s)}scrollViewportHorizontally(e,t,r){return!(e<0)&&this.wtScroll.scrollViewportHorizontally(e,t,r)}scrollViewportVertically(e,t,r){return!(e<0)&&this.wtScroll.scrollViewportVertically(e,t,r)}getViewport(){return[this.wtTable.getFirstVisibleRow(),this.wtTable.getFirstVisibleColumn(),this.wtTable.getLastVisibleRow(),this.wtTable.getLastVisibleColumn()]}destroy(){this.wtOverlays.destroy(),this.wtEvent.destroy()}createScrollDao(){const e=this;return{get drawn(){return e.drawn},get topOverlay(){return e.wtOverlays.topOverlay},get inlineStartOverlay(){return e.wtOverlays.inlineStartOverlay},get wtTable(){return e.wtTable},get wtViewport(){return e.wtViewport},get wtSettings(){return e.wtSettings},get rootWindow(){return e.domBindings.rootWindow},get totalRows(){return e.wtSettings.getSetting("totalRows")},get totalColumns(){return e.wtSettings.getSetting("totalColumns")},get fixedRowsTop(){return e.wtSettings.getSetting("fixedRowsTop")},get fixedRowsBottom(){return e.wtSettings.getSetting("fixedRowsBottom")},get fixedColumnsStart(){return e.wtSettings.getSetting("fixedColumnsStart")}}}getTableDao(){const e=this;return{get wot(){return e},get parentTableOffset(){return e.cloneSource.wtTable.tableOffset},get cloneSource(){return e.cloneSource},get workspaceWidth(){return e.wtViewport.getWorkspaceWidth()},get wtViewport(){return e.wtViewport},get wtOverlays(){return e.wtOverlays},get selectionManager(){return e.selectionManager},get drawn(){return e.drawn},set drawn(t){e.drawn=t},get wtTable(){return e.wtTable},get startColumnRendered(){return e.wtViewport.columnsRenderCalculator.startColumn},get startColumnVisible(){return e.wtViewport.columnsVisibleCalculator.startColumn},get startColumnPartiallyVisible(){return e.wtViewport.columnsPartiallyVisibleCalculator.startColumn},get endColumnRendered(){return e.wtViewport.columnsRenderCalculator.endColumn},get endColumnVisible(){return e.wtViewport.columnsVisibleCalculator.endColumn},get endColumnPartiallyVisible(){return e.wtViewport.columnsPartiallyVisibleCalculator.endColumn},get countColumnsRendered(){return e.wtViewport.columnsRenderCalculator.count},get countColumnsVisible(){return e.wtViewport.columnsVisibleCalculator.count},get startRowRendered(){return e.wtViewport.rowsRenderCalculator.startRow},get startRowVisible(){return e.wtViewport.rowsVisibleCalculator.startRow},get startRowPartiallyVisible(){return e.wtViewport.rowsPartiallyVisibleCalculator.startRow},get endRowRendered(){return e.wtViewport.rowsRenderCalculator.endRow},get endRowVisible(){return e.wtViewport.rowsVisibleCalculator.endRow},get endRowPartiallyVisible(){return e.wtViewport.rowsPartiallyVisibleCalculator.endRow},get countRowsRendered(){return e.wtViewport.rowsRenderCalculator.count},get countRowsVisible(){return e.wtViewport.rowsVisibleCalculator.count},get columnHeaders(){return e.wtSettings.getSetting("columnHeaders")},get rowHeaders(){return e.wtSettings.getSetting("rowHeaders")}}}}},56736:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=n(r(28273)),o=n(r(7625));class a extends o.default{constructor(e,t,r){super(e,t),(0,s.default)(this,"cloneSource",void 0),(0,s.default)(this,"cloneOverlay",void 0);const n=this.wtSettings.getSetting("facade",this);this.cloneSource=r.source,this.cloneOverlay=r.overlay,this.wtTable=this.cloneOverlay.createTable(this.getTableDao(),n,this.domBindings,this.wtSettings),this.wtViewport=r.viewport,this.selectionManager=r.selectionManager,this.wtEvent=new i.default(n,this.domBindings,this.wtSettings,this.eventManager,this.wtTable,this.selectionManager,r.event),this.findOriginalHeaders()}}t.default=a},45778:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(28273)),i=n(r(78144)),o=r(68574),a=n(r(20068)),l=n(r(43410)),h=n(r(86203)),u=n(r(7625)),c=r(34263),d=r(58460),p=r(49536);class g extends u.default{constructor(e,t){super(e,new a.default(t));const r=this.wtSettings.getSetting("facade",this);this.wtTable=new l.default(this.getTableDao(),r,this.domBindings,this.wtSettings),this.wtViewport=new h.default(this.getViewportDao(),this.domBindings,this.wtSettings,this.eventManager,this.wtTable),this.selectionManager=new c.SelectionManager(this.wtSettings.getSetting("selections")),this.wtEvent=new s.default(r,this.domBindings,this.wtSettings,this.eventManager,this.wtTable,this.selectionManager),this.wtOverlays=new i.default(this,r,this.domBindings,this.wtSettings,this.eventManager,this.wtTable),this.exportSettingsAsClassNames(),this.findOriginalHeaders()}exportSettingsAsClassNames(){const e=[],t=[];(0,d.objectEach)({rowHeaders:"htRowHeaders",columnHeaders:"htColumnHeaders"},((r,n)=>{this.wtSettings.getSetting(n).length&&t.push(r),e.push(r)})),(0,p.removeClass)(this.wtTable.wtRootElement.parentNode,e),(0,p.addClass)(this.wtTable.wtRootElement.parentNode,t)}getOverlayByName(e){var t;if(!o.CLONE_TYPES.includes(e))return null;const r=e.replace(/_([a-z])/g,(e=>e[1].toUpperCase()));return null!==(t=this.wtOverlays[`${r}Overlay`])&&void 0!==t?t:null}getViewportDao(){const e=this;return{get wot(){return e},get topOverlayTrimmingContainer(){return e.wtOverlays.topOverlay.trimmingContainer},get inlineStartOverlayTrimmingContainer(){return e.wtOverlays.inlineStartOverlay.trimmingContainer},get topScrollPosition(){return e.wtOverlays.topOverlay.getScrollPosition()},get topParentOffset(){return e.wtOverlays.topOverlay.getTableParentOffset()},get inlineStartScrollPosition(){return e.wtOverlays.inlineStartOverlay.getScrollPosition()},get inlineStartParentOffset(){return e.wtOverlays.inlineStartOverlay.getTableParentOffset()},get topOverlay(){return e.wtOverlays.topOverlay},get inlineStartOverlay(){return e.wtOverlays.inlineStartOverlay},get bottomOverlay(){return e.wtOverlays.bottomOverlay}}}}t.default=g},28273:(e,t,r)=>{"use strict";t.__esModule=!0,r(67834);var n=r(49536),s=r(25735),i=r(36201),o=r(1479),a=r(67508);function l(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function h(e,t){return e.get(c(e,t))}function u(e,t,r){return e.set(c(e,t),r),r}function c(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var d=new WeakMap,p=new WeakMap,g=new WeakMap,f=new WeakMap,m=new WeakMap,y=new WeakMap,E=new WeakMap,w=new WeakMap,C=new WeakMap,v=new WeakMap;t.default=class{constructor(e,t,r,n,s,i){let o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;l(this,d,void 0),l(this,p,void 0),l(this,g,void 0),l(this,f,void 0),l(this,m,void 0),l(this,y,void 0),l(this,E,void 0),l(this,w,void 0),l(this,C,[null,null]),l(this,v,[null,null]),u(d,this,r),u(p,this,t),u(g,this,s),u(f,this,i),u(m,this,o),u(y,this,n),u(E,this,e),this.registerEvents()}registerEvents(){h(y,this).addEventListener(h(g,this).holder,"contextmenu",(e=>this.onContextMenu(e))),h(y,this).addEventListener(h(g,this).TABLE,"mouseover",(e=>this.onMouseOver(e))),h(y,this).addEventListener(h(g,this).TABLE,"mouseout",(e=>this.onMouseOut(e)));const e=()=>{h(y,this).addEventListener(h(g,this).holder,"touchstart",(e=>this.onTouchStart(e))),h(y,this).addEventListener(h(g,this).holder,"touchend",(e=>this.onTouchEnd(e))),this.momentumScrolling||(this.momentumScrolling={}),h(y,this).addEventListener(h(g,this).holder,"scroll",(()=>{clearTimeout(this.momentumScrolling._timeout),this.momentumScrolling.ongoing||h(d,this).getSetting("onBeforeTouchScroll"),this.momentumScrolling.ongoing=!0,this.momentumScrolling._timeout=setTimeout((()=>{this.touchApplied||(this.momentumScrolling.ongoing=!1,h(d,this).getSetting("onAfterMomentumScroll"))}),200)}))},t=()=>{h(y,this).addEventListener(h(g,this).holder,"mouseup",(e=>this.onMouseUp(e))),h(y,this).addEventListener(h(g,this).holder,"mousedown",(e=>this.onMouseDown(e)))};(0,o.isMobileBrowser)()?e():((0,i.isTouchSupported)()&&e(),t())}selectedCellWasTouched(e){const t=this.parentCell(e).coords;if(h(w,this)&&t){const[e,r]=[t.row,h(w,this).from.row],[n,s]=[t.col,h(w,this).from.col];return e===r&&n===s}return!1}parentCell(e){const t={},r=h(g,this).TABLE,s=(0,n.closestDown)(e,["TD","TH"],r);return s?(t.coords=h(g,this).getCoords(s),t.TD=s):(0,n.hasClass)(e,"wtBorder")&&(0,n.hasClass)(e,"current")?(t.coords=h(f,this).getFocusSelection().cellRange.highlight,t.TD=h(g,this).getCell(t.coords)):(0,n.hasClass)(e,"wtBorder")&&(0,n.hasClass)(e,"area")&&h(f,this).getAreaSelection().cellRange&&(t.coords=h(f,this).getAreaSelection().cellRange.to,t.TD=h(g,this).getCell(t.coords)),t}onMouseDown(e){const t=h(p,this).rootDocument.activeElement,r=(0,s.partial)(n.getParent,e.target),i=e.target;if(!["TD","TH"].includes(t.nodeName)&&(i===t||r(0)===t||r(1)===t))return;const o=this.parentCell(i);(0,n.hasClass)(i,"corner")?h(d,this).getSetting("onCellCornerMouseDown",e,i):o.TD&&h(d,this).has("onCellMouseDown")&&this.callListener("onCellMouseDown",e,o.coords,o.TD),(0===e.button||this.touchApplied)&&o.TD&&(h(v,this)[0]=o.TD,clearTimeout(h(C,this)[0]),h(C,this)[0]=setTimeout((()=>{h(v,this)[0]=null}),1e3))}onContextMenu(e){if(h(d,this).has("onCellContextMenu")){const t=this.parentCell(e.target);t.TD&&this.callListener("onCellContextMenu",e,t.coords,t.TD)}}onMouseOver(e){if(!h(d,this).has("onCellMouseOver"))return;const t=h(g,this).TABLE,r=(0,n.closestDown)(e.target,["TD","TH"],t),s=h(m,this)||this;r&&r!==s.lastMouseOver&&(0,n.isChildOf)(r,t)&&(s.lastMouseOver=r,this.callListener("onCellMouseOver",e,h(g,this).getCoords(r),r))}onMouseOut(e){if(!h(d,this).has("onCellMouseOut"))return;const t=h(g,this).TABLE,r=(0,n.closestDown)(e.target,["TD","TH"],t),s=(0,n.closestDown)(e.relatedTarget,["TD","TH"],t),i=h(m,this)||this;r&&r!==s&&(0,n.isChildOf)(r,t)&&(this.callListener("onCellMouseOut",e,h(g,this).getCoords(r),r),null===s&&(i.lastMouseOver=null))}onMouseUp(e){const t=this.parentCell(e.target);t.TD&&h(d,this).has("onCellMouseUp")&&this.callListener("onCellMouseUp",e,t.coords,t.TD),(0===e.button||this.touchApplied)&&(t.TD===h(v,this)[0]&&t.TD===h(v,this)[1]?((0,n.hasClass)(e.target,"corner")?this.callListener("onCellCornerDblClick",e,t.coords,t.TD):this.callListener("onCellDblClick",e,t.coords,t.TD),h(v,this)[0]=null,h(v,this)[1]=null):t.TD===h(v,this)[0]&&(h(v,this)[1]=t.TD,clearTimeout(h(C,this)[1]),h(C,this)[1]=setTimeout((()=>{h(v,this)[1]=null}),500)))}onTouchStart(e){u(w,this,h(f,this).getFocusSelection().cellRange),this.touchApplied=!0,this.onMouseDown(e)}onTouchEnd(e){var t;const r=e.target,n=null===(t=this.parentCell(r))||void 0===t?void 0:t.coords,s=(0,a.isDefined)(n)&&n.row>=0&&n.col>=0;if(e.cancelable&&s&&h(d,this).getSetting("isDataViewInstance")){const t=["A","BUTTON","INPUT"];(0,o.isIOS)()&&((0,o.isChromeWebKit)()||(0,o.isFirefoxWebKit)())&&this.selectedCellWasTouched(r)&&!t.includes(r.tagName)?e.preventDefault():this.selectedCellWasTouched(r)||e.preventDefault()}this.onMouseUp(e),this.touchApplied=!1}callListener(e,t,r,n){const s=h(d,this).getSettingPure(e);s&&s(t,r,n,h(E,this).call(this))}destroy(){clearTimeout(h(C,this)[0]),clearTimeout(h(C,this)[1]),h(y,this).destroy()}}},5421:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(45778)),i=n(r(7625));class o{constructor(e){e instanceof i.default?this._wot=e:this._initFromSettings(e)}_initFromSettings(e){e.facade=e=>{const t=new o(e);return()=>t},this._wot=new s.default(e.table,e)}get guid(){return this._wot.guid}get rootDocument(){return this._wot.domBindings.rootDocument}get rootWindow(){return this._wot.domBindings.rootWindow}get wtSettings(){return this._wot.wtSettings}get cloneSource(){return this._wot.cloneSource}get cloneOverlay(){return this._wot.cloneOverlay}get selectionManager(){return this._wot.selectionManager}get wtViewport(){return this._wot.wtViewport}get wtOverlays(){return this._wot.wtOverlays}get wtTable(){return this._wot.wtTable}get wtEvent(){return this._wot.wtEvent}get wtScroll(){return this._wot.wtScroll}get drawn(){return this._wot.drawn}set drawn(e){this._wot.drawn=e}get drawInterrupted(){return this._wot.drawInterrupted}set drawInterrupted(e){this._wot.drawInterrupted=e}get lastMouseOver(){return this._wot.lastMouseOver}set lastMouseOver(e){this._wot.lastMouseOver=e}get momentumScrolling(){return this._wot.momentumScrolling}set momentumScrolling(e){this._wot.momentumScrolling=e}get touchApplied(){return this._wot.touchApplied}set touchApplied(e){this._wot.touchApplied=e}get domBindings(){return this._wot.domBindings}get eventListeners(){return this._wot.eventListeners}set eventListeners(e){this._wot.eventListeners=e}get eventManager(){return this._wot.eventManager}createCellCoords(e,t){return this._wot.createCellCoords(e,t)}createCellRange(e,t,r){return this._wot.createCellRange(e,t,r)}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._wot.draw(e),this}getCell(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this._wot.getCell(e,t)}scrollViewport(e,t,r,n,s){return this._wot.scrollViewport(e,t,r,n,s)}scrollViewportHorizontally(e,t,r){return this._wot.scrollViewportHorizontally(e,t,r)}scrollViewportVertically(e,t,r){return this._wot.scrollViewportVertically(e,t,r)}getViewport(){return this._wot.getViewport()}getOverlayName(){return this._wot.cloneOverlay?this._wot.cloneOverlay.type:"master"}getOverlayByName(e){return this._wot.getOverlayByName(e)}exportSettingsAsClassNames(){return this._wot.exportSettingsAsClassNames()}update(e,t){return this._wot.wtSettings.update(e,t),this}getSetting(e,t,r,n,s){return this._wot.wtSettings.getSetting(e,t,r,n,s)}hasSetting(e){return this._wot.wtSettings.hasSetting(e)}destroy(){this._wot.destroy()}}t.default=o},86296:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e,t,r){(0,s.default)(this,"offset",void 0),(0,s.default)(this,"total",void 0),(0,s.default)(this,"countTH",void 0),this.offset=e,this.total=t,this.countTH=r}offsetted(e){return e+this.offset}unOffsetted(e){return e-this.offset}renderedToSource(e){return this.offsetted(e)}sourceToRendered(e){return this.unOffsetted(e)}offsettedTH(e){return e-this.countTH}unOffsettedTH(e){return e+this.countTH}visibleRowHeadedColumnToSourceColumn(e){return this.renderedToSource(this.offsettedTH(e))}sourceColumnToVisibleRowHeadedColumn(e){return this.unOffsettedTH(this.sourceToRendered(e))}}},81956:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e,t,r){(0,s.default)(this,"offset",void 0),(0,s.default)(this,"total",void 0),(0,s.default)(this,"countTH",void 0),this.offset=e,this.total=t,this.countTH=r}offsetted(e){return e+this.offset}unOffsetted(e){return e-this.offset}renderedToSource(e){return this.offsetted(e)}sourceToRendered(e){return this.unOffsetted(e)}offsettedTH(e){return e-this.countTH}unOffsettedTH(e){return e+this.countTH}visibleColHeadedRowToSourceRow(e){return this.renderedToSource(this.offsettedTH(e))}sourceRowToVisibleColHeadedRow(e){return this.unOffsettedTH(this.sourceToRendered(e))}}},6697:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(44038);t.ViewportColumnsCalculator=s.ViewportColumnsCalculator,t.ViewportRowsCalculator=s.ViewportRowsCalculator,t.DEFAULT_ROW_HEIGHT=s.DEFAULT_ROW_HEIGHT,t.DEFAULT_COLUMN_WIDTH=s.DEFAULT_COLUMN_WIDTH;var i=n(r(26022));t.CellCoords=i.default;var o=n(r(55139));t.CellRange=o.default;var a=n(r(5421));t.default=a.default,t.Core=a.default;var l=r(37364);t.Selection=l.Selection,t.HIGHLIGHT_ACTIVE_HEADER_TYPE=l.ACTIVE_HEADER_TYPE,t.HIGHLIGHT_AREA_TYPE=l.AREA_TYPE,t.HIGHLIGHT_FOCUS_TYPE=l.FOCUS_TYPE,t.HIGHLIGHT_FILL_TYPE=l.FILL_TYPE,t.HIGHLIGHT_HEADER_TYPE=l.HEADER_TYPE,t.HIGHLIGHT_ROW_TYPE=l.ROW_TYPE,t.HIGHLIGHT_COLUMN_TYPE=l.COLUMN_TYPE,t.HIGHLIGHT_CUSTOM_SELECTION_TYPE=l.CUSTOM_SELECTION_TYPE;var h=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=d(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var o=s?Object.getOwnPropertyDescriptor(e,i):null;o&&(o.get||o.set)?Object.defineProperty(n,i,o):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}(r(7961));t.Renderer=h;var u=r(64625);t.OrderView=u.OrderView,t.SharedOrderView=u.SharedOrderView;var c=r(63286);function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(d=function(e){return e?r:t})(e)}t.getListenersCounter=c.getListenersCounter},42278:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(49536),o=r(58460),a=r(39874),l=r(79119),h=n(r(56736)),u=r(81595);t.Overlay=class{constructor(e,t,r,n,a){(0,s.default)(this,"wtSettings",null),(0,o.defineGetter)(this,"wot",e,{writable:!1}),this.domBindings=a,this.facadeGetter=t,this.wtSettings=n;const{TABLE:l,hider:h,spreader:u,holder:c,wtRootElement:d}=this.wot.wtTable;this.instance=this.wot,this.type=r,this.mainTableScrollableElement=null,this.TABLE=l,this.hider=h,this.spreader=u,this.holder=c,this.wtRootElement=d,this.trimmingContainer=(0,i.getTrimmingContainer)(this.hider.parentNode.parentNode),this.needFullRender=this.shouldBeRendered(),this.clone=this.makeClone()}hasRenderingStateChanged(){return this.needFullRender!==this.shouldBeRendered()}updateStateOfRendering(e){"before"===e&&this.shouldBeRendered()?this.needFullRender=!0:"after"!==e||this.shouldBeRendered()||(this.needFullRender=!1)}shouldBeRendered(){return!0}updateTrimmingContainer(){this.trimmingContainer=(0,i.getTrimmingContainer)(this.hider.parentNode.parentNode)}updateMainScrollableElement(){const{wtTable:e}=this.wot,{rootWindow:t}=this.domBindings;"hidden"===t.getComputedStyle(e.wtRootElement.parentNode).getPropertyValue("overflow")?this.mainTableScrollableElement=this.wot.wtTable.holder:this.mainTableScrollableElement=(0,i.getScrollableElement)(e.TABLE)}getRelativeCellPosition(e,t,r){if(!1===this.clone.wtTable.holder.contains(e))return void(0,a.warn)(`The provided element is not a child of the ${this.type} overlay`);const n=this.mainTableScrollableElement===this.domBindings.rootWindow,s=r<this.wtSettings.getSetting("fixedColumnsStart"),i=t<this.wtSettings.getSetting("fixedRowsTop"),o=t>=this.wtSettings.getSetting("totalRows")-this.wtSettings.getSetting("fixedRowsBottom"),l=this.clone.wtTable.spreader,h={start:this.getRelativeStartPosition(l),top:l.offsetTop},u={start:this.getRelativeStartPosition(e),top:e.offsetTop};let c=null;return c=n?this.getRelativeCellPositionWithinWindow(i,s,u,h):this.getRelativeCellPositionWithinHolder(i,o,s,u,h),c}getRelativeStartPosition(e){return this.isRtl()?e.offsetParent.offsetWidth-e.offsetLeft-e.offsetWidth:e.offsetLeft}getRelativeCellPositionWithinWindow(e,t,r,n){const s=this.wot.wtTable.wtRootElement.getBoundingClientRect();let o=0,a=0;if(t){let e=s.left;this.isRtl()&&(e=this.domBindings.rootWindow.innerWidth-(s.left+s.width+(0,i.getScrollbarWidth)())),o=e<=0?-1*e:0}else o=n.start;if(e){a=this.clone.wtTable.TABLE.getBoundingClientRect().top-s.top}else a=n.top;return{start:r.start+o,top:r.top+a}}getRelativeCellPositionWithinHolder(e,t,r,n,s){const i=this.wot.wtOverlays.inlineStartOverlay.getScrollPosition(),o=this.wot.wtOverlays.topOverlay.getScrollPosition();let a=0,l=0;if(r||(a=i-s.start),t){const e=this.wot.wtTable.wtRootElement.getBoundingClientRect();l=-1*this.clone.wtTable.TABLE.getBoundingClientRect().top+e.top}else e||(l=o-s.top);return{start:n.start-a,top:n.top-l}}makeClone(){if(-1===l.CLONE_TYPES.indexOf(this.type))throw new Error(`Clone type "${this.type}" is not supported.`);const{wtTable:e,wtSettings:t}=this.wot,{rootDocument:r,rootWindow:n}=this.domBindings,s=r.createElement("div"),o=r.createElement("table"),a=e.wtRootElement.parentNode;s.className=`${l.CLONE_CLASS_NAMES.get(this.type)} handsontable`,s.setAttribute("dir",this.isRtl()?"rtl":"ltr"),s.style.position="absolute",s.style.top=0,s.style.overflow="visible",this.isRtl()?s.style.right=0:s.style.left=0,t.getSetting("ariaTags")&&(0,i.setAttribute)(s,[(0,u.A11Y_PRESENTATION)()]),o.className=e.TABLE.className;e.TABLE.getAttribute("role")&&o.setAttribute("role",e.TABLE.getAttribute("role")),s.appendChild(o),a.appendChild(s);const c=this.wtSettings.getSetting("preventOverflow");return!0===c||"horizontal"===c&&this.type===l.CLONE_TOP||"vertical"===c&&this.type===l.CLONE_INLINE_START?this.mainTableScrollableElement=n:"hidden"===n.getComputedStyle(a).getPropertyValue("overflow")?this.mainTableScrollableElement=e.holder:this.mainTableScrollableElement=(0,i.getScrollableElement)(e.TABLE),new h.default(o,this.wtSettings,{source:this.wot,overlay:this,viewport:this.wot.wtViewport,event:this.wot.wtEvent,selectionManager:this.wot.selectionManager})}refresh(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.needFullRender&&this.clone.draw(e)}reset(){const e=this.clone.wtTable.holder,t=this.clone.wtTable.hider;[e.style,t.style,e.parentNode.style].forEach((e=>{e.width="",e.height=""}))}isRtl(){return this.wtSettings.getSetting("rtlMode")}destroy(){this.clone.eventManager.destroy()}}},47327:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(49536),o=n(r(60763)),a=r(42278),l=r(79119);class h extends a.Overlay{constructor(e,t,r,n){super(e,t,l.CLONE_BOTTOM,r,n),(0,s.default)(this,"cachedFixedRowsBottom",-1),this.cachedFixedRowsBottom=this.wtSettings.getSetting("fixedRowsBottom")}createTable(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return new o.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderBottomOverlay")}resetFixedPosition(){if(!this.needFullRender||!this.shouldBeRendered()||!this.wot.wtTable.holder.parentNode)return!1;const{rootWindow:e}=this.domBindings,t=this.clone.wtTable.holder.parentNode;t.style.top="";let r=0;const n=this.wtSettings.getSetting("preventOverflow");this.trimmingContainer!==e||n&&"vertical"===n?(r=this.getScrollPosition(),this.repositionOverlay()):(r=this.getOverlayOffset(),t.style.bottom=`${r}px`);const s=this.adjustHeaderBordersPosition(r);return this.adjustElementsSize(),s}repositionOverlay(){const{wtTable:e,wtViewport:t}=this.wot,{rootDocument:r}=this.domBindings,n=this.clone.wtTable.holder.parentNode;let s=0;t.hasVerticalScroll()||(s+=t.getWorkspaceHeight()-e.getTotalHeight()),t.hasVerticalScroll()&&t.hasHorizontalScroll()&&(s+=(0,i.getScrollbarWidth)(r)),n.style.bottom=`${s}px`}setScrollPosition(e){const{rootWindow:t}=this.domBindings;let r=!1;return this.mainTableScrollableElement===t?(t.scrollTo((0,i.getWindowScrollLeft)(t),e),r=!0):this.mainTableScrollableElement.scrollTop!==e&&(this.mainTableScrollableElement.scrollTop=e,r=!0),r}onScroll(){this.wtSettings.getSetting("onScrollHorizontally")}sumCellSizes(e,t){const{wtTable:r,wtSettings:n}=this.wot,s=n.getSetting("defaultRowHeight");let i=e,o=0;for(;i<t;){const e=r.getRowHeight(i);o+=void 0===e?s:e,i+=1}return o}adjustElementsSize(){this.updateTrimmingContainer(),this.needFullRender&&(this.adjustRootElementSize(),this.adjustRootChildrenSize())}adjustRootElementSize(){const{wtTable:e,wtViewport:t}=this.wot,{rootDocument:r,rootWindow:n}=this.domBindings,s=(0,i.getScrollbarWidth)(r),o=this.clone.wtTable.holder.parentNode.style,a=this.wtSettings.getSetting("preventOverflow");if(this.trimmingContainer!==n||"horizontal"===a){let r=t.getWorkspaceWidth();this.wot.wtOverlays.hasScrollbarRight&&(r-=s),r=Math.min(r,e.wtRootElement.scrollWidth),o.width=`${r}px`}else o.width="";this.clone.wtTable.holder.style.width=o.width;let l=(0,i.outerHeight)(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(l=0),o.height=`${l}px`}adjustRootChildrenSize(){const{holder:e}=this.clone.wtTable;this.clone.wtTable.hider.style.width=this.hider.style.width,e.style.width=e.parentNode.style.width,e.style.height=e.parentNode.style.height}applyToDOM(){const e=this.wtSettings.getSetting("totalRows");if("number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition)this.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;else{if(0!==e)throw new Error("Incorrect value of the rowsRenderCalculator");this.spreader.style.top="0"}this.spreader.style.bottom="",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){const e=this.isRtl()?"right":"left",{spreader:t}=this.clone.wtTable;"number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition?t.style[e]=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`:t.style[e]=""}scrollTo(e,t){let r=this.getTableParentOffset();const n=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder;let s=0;t&&n.offsetHeight!==n.clientHeight&&(s=(0,i.getScrollbarWidth)(this.domBindings.rootDocument)),t?(r+=this.sumCellSizes(0,e+1),r-=this.wot.wtViewport.getViewportHeight(),r+=1):r+=this.sumCellSizes(this.wtSettings.getSetting("fixedRowsBottom"),e),r+=s,this.setScrollPosition(r)}getTableParentOffset(){return this.mainTableScrollableElement===this.domBindings.rootWindow?this.wot.wtTable.holderOffset.top:0}getScrollPosition(){return(0,i.getScrollTop)(this.mainTableScrollableElement,this.domBindings.rootWindow)}getOverlayOffset(){const{rootWindow:e}=this.domBindings,t=this.wtSettings.getSetting("preventOverflow");let r=0;if(this.trimmingContainer===e&&(!t||"vertical"!==t)){const e=this.wot.wtTable.getTotalHeight(),t=e-this.clone.wtTable.getTotalHeight(),n=this.domBindings.rootDocument.documentElement.clientHeight;r=Math.max(this.getTableParentOffset()-this.getScrollPosition()-n+e,0),r>t&&(r=0)}return r}adjustHeaderBordersPosition(e){const t=this.wtSettings.getSetting("fixedRowsBottom"),r=this.cachedFixedRowsBottom!==t,n=this.wtSettings.getSetting("columnHeaders");let s=!1;if((r||0===t)&&n.length>0){const t=this.wot.wtTable.holder.parentNode,r=(0,i.hasClass)(t,"innerBorderBottom");this.cachedFixedRowsBottom=this.wtSettings.getSetting("fixedRowsBottom"),e||0===this.wtSettings.getSetting("totalRows")?((0,i.addClass)(t,"innerBorderBottom"),s=!r):((0,i.removeClass)(t,"innerBorderBottom"),s=r)}return s}}t.BottomOverlay=h},69081:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(49536),i=n(r(69365)),o=r(42278),a=r(79119);class l extends o.Overlay{constructor(e,t,r,n,s,i){super(e,t,a.CLONE_BOTTOM_INLINE_START_CORNER,r,n),this.bottomOverlay=s,this.inlineStartOverlay=i}createTable(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return new i.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderBottomOverlay")&&this.wtSettings.getSetting("shouldRenderInlineStartOverlay")}resetFixedPosition(){const{wot:e}=this;if(this.updateTrimmingContainer(),!e.wtTable.holder.parentNode)return!1;const t=this.clone.wtTable.holder.parentNode;if(t.style.top="",this.trimmingContainer===this.domBindings.rootWindow){const e=this.inlineStartOverlay.getOverlayOffset(),r=this.bottomOverlay.getOverlayOffset();t.style[this.isRtl()?"right":"left"]=`${e}px`,t.style.bottom=`${r}px`}else(0,s.resetCssTransform)(t),this.repositionOverlay();let r=(0,s.outerHeight)(this.clone.wtTable.TABLE);const n=(0,s.outerWidth)(this.clone.wtTable.TABLE);return this.wot.wtTable.hasDefinedSize()||(r=0),t.style.height=`${r}px`,t.style.width=`${n}px`,!1}repositionOverlay(){const{wtTable:e,wtViewport:t}=this.wot,{rootDocument:r}=this.domBindings,n=this.clone.wtTable.holder.parentNode;let i=0;t.hasVerticalScroll()||(i+=t.getWorkspaceHeight()-e.getTotalHeight()),t.hasVerticalScroll()&&t.hasHorizontalScroll()&&(i+=(0,s.getScrollbarWidth)(r)),n.style.bottom=`${i}px`}}t.BottomInlineStartCornerOverlay=l},79119:(e,t)=>{"use strict";t.__esModule=!0;const r=t.CLONE_TOP="top",n=t.CLONE_BOTTOM="bottom",s=t.CLONE_INLINE_START="inline_start",i=t.CLONE_TOP_INLINE_START_CORNER="top_inline_start_corner",o=t.CLONE_BOTTOM_INLINE_START_CORNER="bottom_inline_start_corner";t.CLONE_TYPES=[r,n,s,i,o],t.CLONE_CLASS_NAMES=new Map([[r,`ht_clone_${r}`],[n,`ht_clone_${n}`],[s,`ht_clone_${s} ht_clone_left`],[i,`ht_clone_${i} ht_clone_top_left_corner`],[o,`ht_clone_${o} ht_clone_bottom_left_corner`]])},68574:(e,t,r)=>{"use strict";t.__esModule=!0;var n={BottomInlineStartCornerOverlay:!0,BottomOverlay:!0,InlineStartOverlay:!0,Overlay:!0,TopInlineStartCornerOverlay:!0,TopOverlay:!0},s=r(69081);t.BottomInlineStartCornerOverlay=s.BottomInlineStartCornerOverlay;var i=r(47327);t.BottomOverlay=i.BottomOverlay;var o=r(27777);t.InlineStartOverlay=o.InlineStartOverlay;var a=r(42278);t.Overlay=a.Overlay;var l=r(56563);t.TopInlineStartCornerOverlay=l.TopInlineStartCornerOverlay;var h=r(85321);t.TopOverlay=h.TopOverlay;var u=r(79119);Object.keys(u).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===u[e]||(t[e]=u[e]))}))},27777:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=r(49536),i=n(r(14477)),o=r(42278),a=r(37364),l=r(79119);class h extends o.Overlay{constructor(e,t,r,n){super(e,t,l.CLONE_INLINE_START,r,n)}createTable(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return new i.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderInlineStartOverlay")}resetFixedPosition(){const{wtTable:e}=this.wot;if(!this.needFullRender||!this.shouldBeRendered()||!e.holder.parentNode)return!1;const{rootWindow:t}=this.domBindings,r=this.clone.wtTable.holder.parentNode,n=this.wtSettings.getSetting("preventOverflow");let i=0;this.trimmingContainer!==t||n&&"horizontal"===n?(i=this.getScrollPosition(),(0,s.resetCssTransform)(r)):(i=this.getOverlayOffset()*(this.isRtl()?-1:1),(0,s.setOverlayPosition)(r,`${i}px`,"0px"));const o=this.adjustHeaderBordersPosition(i);return this.adjustElementsSize(),o}setScrollPosition(e){const{rootWindow:t}=this.domBindings;let r=!1;return this.isRtl()&&(e=-e),this.mainTableScrollableElement===t&&t.scrollX!==e?(t.scrollTo(e,(0,s.getWindowScrollTop)(t)),r=!0):this.mainTableScrollableElement.scrollLeft!==e&&(this.mainTableScrollableElement.scrollLeft=e,r=!0),r}onScroll(){this.wtSettings.getSetting("onScrollVertically")}sumCellSizes(e,t){const r=this.wtSettings.getSetting("defaultColumnWidth");let n=e,s=0;for(;n<t;)s+=this.wot.wtTable.getStretchedColumnWidth(n)||r,n+=1;return s}adjustElementsSize(){this.updateTrimmingContainer(),this.needFullRender&&(this.adjustRootElementSize(),this.adjustRootChildrenSize())}adjustRootElementSize(){const{wtTable:e}=this.wot,{rootDocument:t,rootWindow:r}=this.domBindings,n=(0,s.getScrollbarWidth)(t),i=this.clone.wtTable.holder.parentNode.style,o=this.wtSettings.getSetting("preventOverflow");if(this.trimmingContainer!==r||"vertical"===o){let t=this.wot.wtViewport.getWorkspaceHeight();this.wot.wtOverlays.hasScrollbarBottom&&(t-=n),t=Math.min(t,e.wtRootElement.scrollHeight),i.height=`${t}px`}else i.height="";this.clone.wtTable.holder.style.height=i.height;const a=(0,s.outerWidth)(this.clone.wtTable.TABLE);i.width=`${a}px`}adjustRootChildrenSize(){const{holder:e}=this.clone.wtTable,t=this.wot.selectionManager.getFocusSelection()?parseInt(a.CORNER_DEFAULT_STYLE.width,10)/2:0;this.clone.wtTable.hider.style.height=this.hider.style.height,e.style.height=e.parentNode.style.height,e.style.width=`${parseInt(e.parentNode.style.width,10)+t}px`}applyToDOM(){const e=this.wtSettings.getSetting("totalColumns"),t=this.isRtl()?"right":"left";if("number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition)this.spreader.style[t]=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;else{if(0!==e)throw new Error("Incorrect value of the columnsRenderCalculator");this.spreader.style[t]="0"}this.isRtl()?this.spreader.style.left="":this.spreader.style.right="",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){"number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition?this.clone.wtTable.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`:this.clone.wtTable.spreader.style.top=""}scrollTo(e,t){const{wtSettings:r}=this,n=r.getSetting("rowHeaders"),i=r.getSetting("fixedColumnsStart"),o=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,a=0===i&&n.length>0&&!(0,s.hasClass)(o.parentNode,"innerBorderInlineStart")?1:0;let l=this.getTableParentOffset(),h=0;if(t){this.wot.wtTable.getColumnWidth(e)>this.wot.wtViewport.getViewportWidth()&&(t=!1)}return t&&o.offsetWidth!==o.clientWidth&&(h=(0,s.getScrollbarWidth)(this.domBindings.rootDocument)),t?(l+=this.sumCellSizes(0,e+1),l-=this.wot.wtViewport.getViewportWidth(),l+=a):l+=this.sumCellSizes(this.wtSettings.getSetting("fixedColumnsStart"),e),l+=h,(0,s.getMaximumScrollLeft)(this.mainTableScrollableElement)===l-a&&a>0&&this.wot.wtOverlays.expandHiderHorizontallyBy(a),this.setScrollPosition(l)}getTableParentOffset(){let e=0;return this.wtSettings.getSetting("preventOverflow")||this.trimmingContainer!==this.domBindings.rootWindow||(e=this.wot.wtTable.holderOffset.left),e}getScrollPosition(){return Math.abs((0,s.getScrollLeft)(this.mainTableScrollableElement,this.domBindings.rootWindow))}getOverlayOffset(){const{rootWindow:e}=this.domBindings,t=this.wtSettings.getSetting("preventOverflow");let r=0;if(this.trimmingContainer===e&&(!t||"horizontal"!==t)){r=this.isRtl()?Math.abs(Math.min(this.getTableParentOffset()-this.getScrollPosition(),0)):Math.max(this.getScrollPosition()-this.getTableParentOffset(),0);r>this.wot.wtTable.getTotalWidth()-this.clone.wtTable.getTotalWidth()&&(r=0)}return r}adjustHeaderBordersPosition(e){const{wtSettings:t}=this,r=this.wot.wtTable.holder.parentNode,n=t.getSetting("rowHeaders"),i=t.getSetting("fixedColumnsStart"),o=t.getSetting("totalRows"),a="vertical"===t.getSetting("preventOverflow");o?(0,s.removeClass)(r,"emptyRows"):(0,s.addClass)(r,"emptyRows");let l=!1;if(!a)if(i&&!n.length)(0,s.addClass)(r,"innerBorderLeft innerBorderInlineStart");else if(!i&&n.length){const t=(0,s.hasClass)(r,"innerBorderInlineStart");e?((0,s.addClass)(r,"innerBorderLeft innerBorderInlineStart"),l=!t):((0,s.removeClass)(r,"innerBorderLeft innerBorderInlineStart"),l=t)}return l}}t.InlineStartOverlay=h},85321:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(49536),o=n(r(55477)),a=r(42278),l=r(37364),h=r(79119);class u extends a.Overlay{constructor(e,t,r,n){super(e,t,h.CLONE_TOP,r,n),(0,s.default)(this,"cachedFixedRowsTop",-1),this.cachedFixedRowsTop=this.wtSettings.getSetting("fixedRowsTop")}createTable(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return new o.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderTopOverlay")}resetFixedPosition(){if(!this.needFullRender||!this.shouldBeRendered()||!this.wot.wtTable.holder.parentNode)return!1;const e=this.clone.wtTable.holder.parentNode,{rootWindow:t}=this.domBindings,r=this.wtSettings.getSetting("preventOverflow");let n=0,s=!1;if(this.trimmingContainer!==t||r&&"vertical"===r)n=this.getScrollPosition(),(0,i.resetCssTransform)(e);else{const{wtTable:t}=this.wot,r=t.hider.getBoundingClientRect();s=Math.ceil(r.bottom)===e.offsetHeight,n=this.getOverlayOffset(),(0,i.setOverlayPosition)(e,"0px",`${n}px`)}const o=this.adjustHeaderBordersPosition(n,s);return this.adjustElementsSize(),o}setScrollPosition(e){const t=this.domBindings.rootWindow;let r=!1;return this.mainTableScrollableElement===t&&t.scrollY!==e?(t.scrollTo((0,i.getWindowScrollLeft)(t),e),r=!0):this.mainTableScrollableElement.scrollTop!==e&&(this.mainTableScrollableElement.scrollTop=e,r=!0),r}onScroll(){this.wtSettings.getSetting("onScrollHorizontally")}sumCellSizes(e,t){const r=this.wtSettings.getSetting("defaultRowHeight");let n=e,s=0;for(;n<t;){const e=this.wot.wtTable.getRowHeight(n);s+=void 0===e?r:e,n+=1}return s}adjustElementsSize(){this.updateTrimmingContainer(),this.needFullRender&&(this.adjustRootElementSize(),this.adjustRootChildrenSize())}adjustRootElementSize(){const{wtTable:e}=this.wot,{rootDocument:t,rootWindow:r}=this.domBindings,n=(0,i.getScrollbarWidth)(t),s=this.clone.wtTable.holder.parentNode.style,o=this.wtSettings.getSetting("preventOverflow");if(this.trimmingContainer!==r||"horizontal"===o){let t=this.wot.wtViewport.getWorkspaceWidth();this.wot.wtOverlays.hasScrollbarRight&&(t-=n),t=Math.min(t,e.wtRootElement.scrollWidth),s.width=`${t}px`}else s.width="";this.clone.wtTable.holder.style.width=s.width;let a=(0,i.outerHeight)(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(a=0),s.height=`${a}px`}adjustRootChildrenSize(){const{holder:e}=this.clone.wtTable,t=this.wot.selectionManager.getFocusSelection()?parseInt(l.CORNER_DEFAULT_STYLE.height,10)/2:0;this.clone.wtTable.hider.style.width=this.hider.style.width,e.style.width=e.parentNode.style.width,e.style.height=`${parseInt(e.parentNode.style.height,10)+t}px`}applyToDOM(){const e=this.wtSettings.getSetting("totalRows");if("number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition)this.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;else{if(0!==e)throw new Error("Incorrect value of the rowsRenderCalculator");this.spreader.style.top="0"}this.spreader.style.bottom="",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){const e=this.isRtl()?"right":"left",{spreader:t}=this.clone.wtTable;"number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition?t.style[e]=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`:t.style[e]=""}scrollTo(e,t){const{wot:r,wtSettings:n}=this,s=(r.cloneSource?r.cloneSource:r).wtTable.holder,o=n.getSetting("columnHeaders"),a=0===n.getSetting("fixedRowsTop")&&o.length>0&&!(0,i.hasClass)(s.parentNode,"innerBorderTop")?1:0;let l=this.getTableParentOffset(),h=0;if(t){this.wot.wtTable.getRowHeight(e)>this.wot.wtViewport.getViewportHeight()&&(t=!1)}if(t&&s.offsetHeight!==s.clientHeight&&(h=(0,i.getScrollbarWidth)(this.domBindings.rootDocument)),t){const t=n.getSetting("fixedRowsBottom"),s=n.getSetting("totalRows");l+=this.sumCellSizes(0,e+1),l-=r.wtViewport.getViewportHeight()-this.sumCellSizes(s-t,s),l+=1,l+=a}else l+=this.sumCellSizes(n.getSetting("fixedRowsTop"),e);return l+=h,(0,i.getMaximumScrollTop)(this.mainTableScrollableElement)===l-a&&a>0&&this.wot.wtOverlays.expandHiderVerticallyBy(a),this.setScrollPosition(l)}getTableParentOffset(){return this.mainTableScrollableElement===this.domBindings.rootWindow?this.wot.wtTable.holderOffset.top:0}getScrollPosition(){return(0,i.getScrollTop)(this.mainTableScrollableElement,this.domBindings.rootWindow)}getOverlayOffset(){const{rootWindow:e}=this.domBindings,t=this.wtSettings.getSetting("preventOverflow");let r=0;if(this.trimmingContainer===e&&(!t||"vertical"!==t)){const e=this.wot.wtTable.getTotalHeight()-this.clone.wtTable.getTotalHeight();r=Math.max(this.getScrollPosition()-this.getTableParentOffset(),0),r>e&&(r=0)}return r}adjustHeaderBordersPosition(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{wtSettings:r}=this,n=this.wot.wtTable.holder.parentNode,s=r.getSetting("totalColumns"),o="horizontal"===r.getSetting("preventOverflow");s?(0,i.removeClass)(n,"emptyColumns"):(0,i.addClass)(n,"emptyColumns");let a=!1;if(!t&&!o){const t=r.getSetting("fixedRowsTop"),s=this.cachedFixedRowsTop!==t,o=r.getSetting("columnHeaders");if((s||0===t)&&o.length>0){const t=(0,i.hasClass)(n,"innerBorderTop");this.cachedFixedRowsTop=r.getSetting("fixedRowsTop"),e||0===r.getSetting("totalRows")?((0,i.addClass)(n,"innerBorderTop"),a=!t):((0,i.removeClass)(n,"innerBorderTop"),a=t)}}return a}}t.TopOverlay=u},56563:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(49536),o=n(r(94159)),a=r(42278),l=r(79119);class h extends a.Overlay{constructor(e,t,r,n,i,o){super(e,t,l.CLONE_TOP_INLINE_START_CORNER,r,n),(0,s.default)(this,"topOverlay",void 0),(0,s.default)(this,"inlineStartOverlay",void 0),this.topOverlay=i,this.inlineStartOverlay=o}createTable(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return new o.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderTopOverlay")&&this.wtSettings.getSetting("shouldRenderInlineStartOverlay")}resetFixedPosition(){if(this.updateTrimmingContainer(),!this.wot.wtTable.holder.parentNode)return!1;const e=this.clone.wtTable.holder.parentNode;if(this.trimmingContainer===this.domBindings.rootWindow){const t=this.inlineStartOverlay.getOverlayOffset()*(this.isRtl()?-1:1),r=this.topOverlay.getOverlayOffset();(0,i.setOverlayPosition)(e,`${t}px`,`${r}px`)}else(0,i.resetCssTransform)(e);let t=(0,i.outerHeight)(this.clone.wtTable.TABLE);const r=(0,i.outerWidth)(this.clone.wtTable.TABLE);return this.wot.wtTable.hasDefinedSize()||(t=0),e.style.height=`${t}px`,e.style.width=`${r}px`,!1}}t.TopInlineStartCornerOverlay=h},78144:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=r(49536),o=r(36201),a=r(98758),l=r(35592),h=r(1479),u=r(39874),c=r(68574);function d(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function p(e,t,r){return e.set(f(e,t),r),r}function g(e,t){return e.get(f(e,t))}function f(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var m=new WeakMap,y=new WeakMap,E=new WeakMap,w=new WeakMap;t.default=class{constructor(e,t,r,n,a,l){(0,s.default)(this,"wot",null),d(this,m,[]),(0,s.default)(this,"topOverlay",null),(0,s.default)(this,"bottomOverlay",null),(0,s.default)(this,"inlineStartOverlay",null),(0,s.default)(this,"topInlineStartCornerOverlay",null),(0,s.default)(this,"bottomInlineStartCornerOverlay",null),(0,s.default)(this,"browserLineHeight",void 0),(0,s.default)(this,"wtSettings",null),d(this,y,!1),d(this,E,0),d(this,w,null),(0,s.default)(this,"resizeObserver",new ResizeObserver((e=>{(0,o.requestAnimationFrame)((()=>{Array.isArray(e)&&e.length&&(p(E,this,g(E,this)+1),100===g(E,this)&&((0,u.warn)("The ResizeObserver callback was fired too many times in direct succession.\nThis may be due to an infinite loop caused by setting a dynamic height/width (for example, with the `dvh` units) to a Handsontable container's parent. \nThe observer will be disconnected."),this.resizeObserver.disconnect()),null!==g(w,this)&&clearTimeout(g(w,this)),p(w,this,setTimeout((()=>{p(E,this,0)}),100)),this.wtSettings.getSetting("onContainerElementResize"))}))}))),this.wot=e,this.wtSettings=n,this.domBindings=r,this.facadeGetter=t,this.wtTable=l;const{rootDocument:h,rootWindow:c}=this.domBindings;this.instance=this.wot,this.eventManager=a,this.scrollbarSize=(0,i.getScrollbarWidth)(h);const f="hidden"===c.getComputedStyle(l.wtRootElement.parentNode).getPropertyValue("overflow");this.scrollableElement=f?l.holder:(0,i.getScrollableElement)(l.TABLE),this.initOverlays(),this.hasScrollbarBottom=!1,this.hasScrollbarRight=!1,this.destroyed=!1,this.keyPressed=!1,this.spreaderLastSize={width:null,height:null},this.verticalScrolling=!1,this.horizontalScrolling=!1,this.initBrowserLineHeight(),this.registerListeners(),this.lastScrollX=c.scrollX,this.lastScrollY=c.scrollY}getOverlays(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=[...g(m,this)];return e&&t.push(this.wtTable),t}initBrowserLineHeight(){const{rootWindow:e,rootDocument:t}=this.domBindings,r=e.getComputedStyle(t.body),n=parseInt(r.lineHeight,10),s=1.2*parseInt(r.fontSize,10);this.browserLineHeight=n||s}initOverlays(){const e=[this.wot,this.facadeGetter,this.wtSettings,this.domBindings];this.topOverlay=new c.TopOverlay(...e),this.bottomOverlay=new c.BottomOverlay(...e),this.inlineStartOverlay=new c.InlineStartOverlay(...e),this.topInlineStartCornerOverlay=new c.TopInlineStartCornerOverlay(...e,this.topOverlay,this.inlineStartOverlay),this.bottomInlineStartCornerOverlay=new c.BottomInlineStartCornerOverlay(...e,this.bottomOverlay,this.inlineStartOverlay),p(m,this,[this.topOverlay,this.bottomOverlay,this.inlineStartOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay])}beforeDraw(){p(y,this,g(m,this).reduce(((e,t)=>t.hasRenderingStateChanged()||e),!1)),g(m,this).forEach((e=>e.updateStateOfRendering("before")))}afterDraw(){this.syncScrollWithMaster(),g(m,this).forEach((e=>{const t=e.hasRenderingStateChanged();e.updateStateOfRendering("after"),t&&!e.needFullRender&&e.reset()}))}refreshAll(){this.wot.drawn&&(this.wtTable.holder.parentNode?(this.wot.draw(!0),this.verticalScrolling&&this.inlineStartOverlay.onScroll(),this.horizontalScrolling&&this.topOverlay.onScroll(),this.verticalScrolling=!1,this.horizontalScrolling=!1):this.destroy())}registerListeners(){const{rootDocument:e,rootWindow:t}=this.domBindings,{mainTableScrollableElement:r}=this.topOverlay,{mainTableScrollableElement:n}=this.inlineStartOverlay;this.eventManager.addEventListener(e.documentElement,"keydown",(e=>this.onKeyDown(e))),this.eventManager.addEventListener(e.documentElement,"keyup",(()=>this.onKeyUp())),this.eventManager.addEventListener(e,"visibilitychange",(()=>this.onKeyUp())),this.eventManager.addEventListener(r,"scroll",(e=>this.onTableScroll(e)),{passive:!0}),r!==n&&this.eventManager.addEventListener(n,"scroll",(e=>this.onTableScroll(e)),{passive:!0});const s=t.devicePixelRatio&&t.devicePixelRatio>1,i=this.scrollableElement===t,o=this.wtSettings.getSetting("preventWheel"),a={passive:i};(o||s||!(0,h.isChrome)())&&this.eventManager.addEventListener(this.wtTable.wtRootElement,"wheel",(e=>this.onCloneWheel(e,o)),a);let l;[this.topOverlay,this.bottomOverlay,this.inlineStartOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay].forEach((e=>{if(e&&e.needFullRender){const{holder:t}=e.clone.wtTable;this.eventManager.addEventListener(t,"wheel",(e=>this.onCloneWheel(e,o)),a)}})),this.eventManager.addEventListener(t,"resize",(()=>{clearTimeout(l),l=setTimeout((()=>{this.wtSettings.getSetting("onWindowResize"),p(E,this,0)}),200)})),i||this.resizeObserver.observe(this.wtTable.wtRootElement.parentElement)}deregisterListeners(){this.eventManager.clearEvents(!0)}onTableScroll(e){const t=this.domBindings.rootWindow,r=this.inlineStartOverlay.mainTableScrollableElement,n=this.topOverlay.mainTableScrollableElement,s=e.target;this.keyPressed&&(n!==t&&s!==t&&!e.target.contains(n)||r!==t&&s!==t&&!e.target.contains(r))||this.syncScrollPositions(e)}onCloneWheel(e,t){const{rootWindow:r}=this.domBindings,n=this.inlineStartOverlay.mainTableScrollableElement,s=this.topOverlay.mainTableScrollableElement,i=e.target,o=s!==r&&i!==r&&!i.contains(s),a=n!==r&&i!==r&&!i.contains(n);if(this.keyPressed&&(o||a)||this.scrollableElement===r)return;const l=this.translateMouseWheelToScroll(e);(t||this.scrollableElement!==r&&l)&&e.preventDefault()}onKeyDown(e){this.keyPressed=(0,l.isKey)(e.keyCode,"ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT")}onKeyUp(){this.keyPressed=!1}translateMouseWheelToScroll(e){let t=isNaN(e.deltaY)?-1*e.wheelDeltaY:e.deltaY,r=isNaN(e.deltaX)?-1*e.wheelDeltaX:e.deltaX;1===e.deltaMode&&(r+=r*this.browserLineHeight,t+=t*this.browserLineHeight);const n=this.scrollVertically(t),s=this.scrollHorizontally(r);return n||s}scrollVertically(e){const t=this.scrollableElement.scrollTop;return this.scrollableElement.scrollTop+=e,t!==this.scrollableElement.scrollTop}scrollHorizontally(e){const t=this.scrollableElement.scrollLeft;return this.scrollableElement.scrollLeft+=e,t!==this.scrollableElement.scrollLeft}syncScrollPositions(){if(this.destroyed)return;const{rootWindow:e}=this.domBindings,t=this.topOverlay.clone.wtTable.holder,r=this.inlineStartOverlay.clone.wtTable.holder,[n,s]=[this.scrollableElement.scrollLeft,this.scrollableElement.scrollTop];if(this.horizontalScrolling=t.scrollLeft!==n||this.lastScrollX!==e.scrollX,this.verticalScrolling=r.scrollTop!==s||this.lastScrollY!==e.scrollY,this.lastScrollX=e.scrollX,this.lastScrollY=e.scrollY,this.horizontalScrolling){t.scrollLeft=n;const e=this.bottomOverlay.needFullRender?this.bottomOverlay.clone.wtTable.holder:null;e&&(e.scrollLeft=n)}this.verticalScrolling&&(r.scrollTop=s),this.refreshAll()}syncScrollWithMaster(){if(!g(y,this))return;const e=this.topOverlay.mainTableScrollableElement,{scrollLeft:t,scrollTop:r}=e;this.topOverlay.needFullRender&&(this.topOverlay.clone.wtTable.holder.scrollLeft=t),this.bottomOverlay.needFullRender&&(this.bottomOverlay.clone.wtTable.holder.scrollLeft=t),this.inlineStartOverlay.needFullRender&&(this.inlineStartOverlay.clone.wtTable.holder.scrollTop=r),p(y,this,!1)}updateMainScrollableElements(){this.deregisterListeners(),this.inlineStartOverlay.updateMainScrollableElement(),this.topOverlay.updateMainScrollableElement(),this.bottomOverlay.needFullRender&&this.bottomOverlay.updateMainScrollableElement();const{wtTable:e}=this,{rootWindow:t}=this.domBindings;"hidden"===t.getComputedStyle(e.wtRootElement.parentNode).getPropertyValue("overflow")?this.scrollableElement=e.holder:this.scrollableElement=(0,i.getScrollableElement)(e.TABLE),this.registerListeners()}destroy(){this.resizeObserver.disconnect(),this.eventManager.destroy(),this.topOverlay.destroy(),this.bottomOverlay.clone&&this.bottomOverlay.destroy(),this.inlineStartOverlay.destroy(),this.topInlineStartCornerOverlay&&this.topInlineStartCornerOverlay.destroy(),this.bottomInlineStartCornerOverlay&&this.bottomInlineStartCornerOverlay.clone&&this.bottomInlineStartCornerOverlay.destroy(),this.destroyed=!0}refresh(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.updateLastSpreaderSize()&&this.adjustElementsSize(),this.bottomOverlay.clone&&this.bottomOverlay.refresh(e),this.inlineStartOverlay.refresh(e),this.topOverlay.refresh(e),this.topInlineStartCornerOverlay&&this.topInlineStartCornerOverlay.refresh(e),this.bottomInlineStartCornerOverlay&&this.bottomInlineStartCornerOverlay.clone&&this.bottomInlineStartCornerOverlay.refresh(e)}updateLastSpreaderSize(){const e=this.wtTable.spreader,t=e.clientWidth,r=e.clientHeight,n=t!==this.spreaderLastSize.width||r!==this.spreaderLastSize.height;return n&&(this.spreaderLastSize.width=t,this.spreaderLastSize.height=r),n}adjustElementsSize(){const{wtViewport:e}=this.wot,{wtTable:t}=this,{rootWindow:r}=this.domBindings,n=this.scrollableElement===r,s=this.wtSettings.getSetting("totalColumns"),i=this.wtSettings.getSetting("totalRows"),o=e.getRowHeaderWidth(),a=e.getColumnHeaderHeight()+this.topOverlay.sumCellSizes(0,i)+1,l=o+this.inlineStartOverlay.sumCellSizes(0,s),h=t.hider.style,u=(()=>!n&&this.scrollableElement.scrollTop>Math.max(0,a-t.holder.clientHeight))()?1:0,c=(()=>!n&&this.scrollableElement.scrollLeft>Math.max(0,l-t.holder.clientWidth))()?1:0;if(h.width=`${l+c}px`,h.height=`${a+u}px`,this.scrollbarSize>0){const{scrollHeight:e,scrollWidth:r}=t.wtRootElement,{scrollHeight:n,scrollWidth:s}=t.holder;this.hasScrollbarRight=e<n,this.hasScrollbarBottom=r<s,this.hasScrollbarRight&&t.hider.scrollWidth+this.scrollbarSize>r?this.hasScrollbarBottom=!0:this.hasScrollbarBottom&&t.hider.scrollHeight+this.scrollbarSize>e&&(this.hasScrollbarRight=!0)}this.topOverlay.adjustElementsSize(),this.inlineStartOverlay.adjustElementsSize(),this.bottomOverlay.adjustElementsSize()}expandHiderVerticallyBy(e){const{wtTable:t}=this;t.hider.style.height=`${parseInt(t.hider.style.height,10)+e}px`}expandHiderHorizontallyBy(e){const{wtTable:t}=this;t.hider.style.width=`${parseInt(t.hider.style.width,10)+e}px`}applyToDOM(){this.wtTable.isVisible()&&(this.topOverlay.applyToDOM(),this.bottomOverlay.clone&&this.bottomOverlay.applyToDOM(),this.inlineStartOverlay.applyToDOM())}getParentOverlay(e){if(!e)return null;const t=[this.topOverlay,this.inlineStartOverlay,this.bottomOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay];let r=null;return(0,a.arrayEach)(t,(t=>{t&&t.clone&&t.clone.wtTable.TABLE.contains(e)&&(r=t.clone)})),r}syncOverlayTableClassNames(){const e=this.wtTable.TABLE,t=[this.topOverlay,this.inlineStartOverlay,this.bottomOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay];(0,a.arrayEach)(t,(t=>{t&&(t.clone.wtTable.TABLE.className=e.className)}))}}},54493:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=n(r(63912));t.default=class{constructor(e,t){(0,s.default)(this,"nodesPool",null),(0,s.default)(this,"nodeType",void 0),(0,s.default)(this,"rootNode",void 0),(0,s.default)(this,"table",null),(0,s.default)(this,"renderedNodes",0),this.nodesPool="string"==typeof e?new i.default(e):null,this.nodeType=e,this.rootNode=t}setTable(e){this.nodesPool&&this.nodesPool.setRootDocument(e.rootDocument),this.table=e}adjust(){}render(){}}},90720:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(49536),o=r(64625),a=n(r(54493)),l=r(81595);class h extends a.default{constructor(){super("TD"),(0,s.default)(this,"orderViews",new WeakMap),(0,s.default)(this,"sourceRowIndex",0)}obtainOrderView(e){let t;return this.orderViews.has(e)?t=this.orderViews.get(e):(t=new o.SharedOrderView(e,(e=>this.nodesPool.obtain(this.sourceRowIndex,e)),this.nodeType),this.orderViews.set(e,t)),t}render(){const{rowsToRender:e,columnsToRender:t,rows:r,rowHeaders:n}=this.table;for(let a=0;a<e;a++){const e=this.table.renderedRowToSource(a),h=r.getRenderedNode(a);this.sourceRowIndex=e;const u=this.obtainOrderView(h),c=n.obtainOrderView(h);u.prependView(c).setSize(t).setOffset(this.table.renderedColumnToSource(0)).start();for(let r=0;r<t;r++){u.render();const t=u.getCurrentNode(),n=this.table.renderedColumnToSource(r);var s,o;if((0,i.hasClass)(t,"hide")||(t.className=""),t.removeAttribute("style"),t.removeAttribute("dir"),(0,i.removeAttribute)(t,[new RegExp("aria-(.*)"),new RegExp("role")]),this.table.cellRenderer(e,n,t),this.table.isAriaEnabled())(0,i.setAttribute)(t,[...t.hasAttribute("role")?[]:[(0,l.A11Y_GRIDCELL)()],(0,l.A11Y_TABINDEX)(-1),(0,l.A11Y_COLINDEX)(n+(null!==(s=null===(o=this.table.rowUtils)||void 0===o||null===(o=o.dataAccessObject)||void 0===o?void 0:o.rowHeaders.length)&&void 0!==s?s:0)+1)])}u.end()}}}t.default=h},23792:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(54493)),i=r(39874),o=r(12556),a=r(49536);let l=!1;class h extends s.default{constructor(e){super(null,e)}adjust(){const{columnsToRender:e,rowHeadersCount:t}=this.table,r=e+t;for(;this.renderedNodes<r;)this.rootNode.appendChild(this.table.rootDocument.createElement("col")),this.renderedNodes+=1;for(;this.renderedNodes>r;)this.rootNode.removeChild(this.rootNode.lastChild),this.renderedNodes-=1}render(){this.adjust();const{columnsToRender:e,rowHeadersCount:t}=this.table;!l&&e>1e3&&(l=!0,(0,i.warn)(o.toSingleLine`Performance tip: Handsontable rendered more than 1000 visible columns.\x20
         Consider limiting the number of rendered columns by specifying the table width and/or\x20
         turning off the "renderAllColumns" option.`));for(let e=0;e<t;e++){const t=this.table.renderedColumnToSource(e),r=this.table.columnUtils.getHeaderWidth(t);this.rootNode.childNodes[e].style.width=`${r}px`}for(let r=0;r<e;r++){const e=this.table.renderedColumnToSource(r),n=this.table.columnUtils.getStretchedColumnWidth(e);this.rootNode.childNodes[r+t].style.width=`${n}px`}const r=this.rootNode.firstChild;r&&(0,a.addClass)(r,"rowHeader")}}t.default=h},83013:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(49536),i=n(r(54493)),o=r(81595);class a extends i.default{constructor(e){super(null,e)}adjust(){const{columnHeadersCount:e,rowHeadersCount:t}=this.table;let r=this.rootNode.firstChild;if(e){const{columnsToRender:n}=this.table,s=n+t;for(let t=0,n=e;t<n;t++){for(r=this.rootNode.childNodes[t],r||(r=this.table.rootDocument.createElement("tr"),this.rootNode.appendChild(r)),this.renderedNodes=r.childNodes.length;this.renderedNodes<s;)r.appendChild(this.table.rootDocument.createElement("th")),this.renderedNodes+=1;for(;this.renderedNodes>s;)r.removeChild(r.lastChild),this.renderedNodes-=1}const i=this.rootNode.childNodes.length;if(i>e)for(let t=e;t<i;t++)this.rootNode.removeChild(this.rootNode.lastChild)}else r&&(0,s.empty)(r)}render(){const{columnHeadersCount:e}=this.table;this.table.isAriaEnabled()&&(0,s.setAttribute)(this.rootNode,[(0,o.A11Y_ROWGROUP)()]);for(let t=0;t<e;t+=1){const{columnHeaderFunctions:e,columnsToRender:r,rowHeadersCount:n}=this.table,i=this.rootNode.childNodes[t];this.table.isAriaEnabled()&&(0,s.setAttribute)(i,[(0,o.A11Y_ROW)(),(0,o.A11Y_ROWINDEX)(t+1)]);for(let a=-1*n;a<r;a+=1){const r=this.table.renderedColumnToSource(a),l=i.childNodes[a+n];l.className="",l.removeAttribute("style"),(0,s.removeAttribute)(l,[new RegExp("aria-(.*)"),new RegExp("role")]),this.table.isAriaEnabled()&&(0,s.setAttribute)(l,[(0,o.A11Y_COLINDEX)(a+1+this.table.rowHeadersCount),(0,o.A11Y_TABINDEX)(-1),(0,o.A11Y_COLUMNHEADER)(),...a>=0?[(0,o.A11Y_SCOPE_COL)()]:[(0,o.A11Y_ROW)()]]),e[t](r,l,t)}}}}t.default=a},7961:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(31211));t.RowHeadersRenderer=s.default;var i=n(r(83013));t.ColumnHeadersRenderer=i.default;var o=n(r(23792));t.ColGroupRenderer=o.default;var a=n(r(84140));t.RowsRenderer=a.default;var l=n(r(90720));t.CellsRenderer=l.default;var h=n(r(95593));t.TableRenderer=h.default;t.Renderer=class{constructor(){let{TABLE:e,THEAD:t,COLGROUP:r,TBODY:n,rowUtils:u,columnUtils:c,cellRenderer:d}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.renderer=new h.default(e,{cellRenderer:d}),this.renderer.setRenderers({rowHeaders:new s.default,columnHeaders:new i.default(t),colGroup:new o.default(r),rows:new a.default(n),cells:new l.default}),this.renderer.setAxisUtils(u,c)}setActiveOverlayName(e){return this.renderer.setActiveOverlayName(e),this}setFilters(e,t){return this.renderer.setFilters(e,t),this}setViewportSize(e,t){return this.renderer.setViewportSize(e,t),this}setHeaderContentRenderers(e,t){return this.renderer.setHeaderContentRenderers(e,t),this}adjust(){this.renderer.adjust()}render(){this.renderer.render()}}},31211:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(64625),o=n(r(54493)),a=r(49536),l=r(81595);class h extends o.default{constructor(){super("TH"),(0,s.default)(this,"orderViews",new WeakMap),(0,s.default)(this,"sourceRowIndex",0)}obtainOrderView(e){let t;return this.orderViews.has(e)?t=this.orderViews.get(e):(t=new i.SharedOrderView(e,(e=>this.nodesPool.obtain(this.sourceRowIndex,e)),this.nodeType),this.orderViews.set(e,t)),t}render(){const{rowsToRender:e,rowHeaderFunctions:t,rowHeadersCount:r,rows:n,cells:s}=this.table;for(let i=0;i<e;i++){const e=this.table.renderedRowToSource(i),o=n.getRenderedNode(i);this.sourceRowIndex=e;const h=this.obtainOrderView(o),u=s.obtainOrderView(o);h.appendView(u).setSize(r).setOffset(this.table.renderedColumnToSource(0)).start();for(let n=0;n<r;n++){h.render();const r=h.getCurrentNode();r.className="",r.removeAttribute("style"),(0,a.removeAttribute)(r,[new RegExp("aria-(.*)"),new RegExp("role")]),this.table.isAriaEnabled()&&(0,a.setAttribute)(r,[(0,l.A11Y_ROWHEADER)(),(0,l.A11Y_SCOPE_ROW)(),(0,l.A11Y_COLINDEX)(n+1),(0,l.A11Y_TABINDEX)(-1)]),t[n](e,r,n)}h.end()}}}t.default=h},84140:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=n(r(54493)),o=r(39874),a=r(12556),l=r(64625),h=r(49536),u=r(81595);const c="ht__row_even",d="ht__row_odd";let p=!1;class g extends i.default{constructor(e){super("TR",e),(0,s.default)(this,"orderView",void 0),this.orderView=new l.OrderView(e,(e=>this.nodesPool.obtain(e)),this.nodeType)}getRenderedNode(e){return this.orderView.getNode(e)}render(){const{rowsToRender:e}=this.table;!p&&e>1e3&&(p=!0,(0,o.warn)(a.toSingleLine`Performance tip: Handsontable rendered more than 1000 visible rows.\x20
         Consider limiting the number of rendered rows by specifying the table height and/or\x20
-        turning off the "renderAllRows" option.`)),this.table.isAriaEnabled()&&(0,h.setAttribute)(this.rootNode,[(0,u.A11Y_ROWGROUP)()]),this.orderView.setSize(e).setOffset(this.table.renderedRowToSource(0)).start();for(let n=0;n<e;n++){this.orderView.render();const e=this.orderView.getCurrentNode(),s=this.table.renderedRowToSource(n);var t,r;if(this.table.isAriaEnabled())(0,h.setAttribute)(e,[(0,u.A11Y_ROW)(),(0,u.A11Y_ROWINDEX)(s+(null!==(t=null===(r=this.table.rowUtils)||void 0===r||null===(r=r.dataAccessObject)||void 0===r?void 0:r.columnHeaders.length)&&void 0!==t?t:0)+1)]);(0,h.removeClass)(e,[c,d]),(s+1)%2==0?(0,h.addClass)(e,c):(0,h.addClass)(e,d)}this.orderView.end()}}t.default=g},95593:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e){let{cellRenderer:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,s.default)(this,"rootNode",void 0),(0,s.default)(this,"rootDocument",void 0),(0,s.default)(this,"rowHeaders",null),(0,s.default)(this,"columnHeaders",null),(0,s.default)(this,"colGroup",null),(0,s.default)(this,"rows",null),(0,s.default)(this,"cells",null),(0,s.default)(this,"rowFilter",null),(0,s.default)(this,"columnFilter",null),(0,s.default)(this,"rowUtils",null),(0,s.default)(this,"columnUtils",null),(0,s.default)(this,"rowsToRender",0),(0,s.default)(this,"columnsToRender",0),(0,s.default)(this,"rowHeaderFunctions",[]),(0,s.default)(this,"rowHeadersCount",0),(0,s.default)(this,"columnHeaderFunctions",[]),(0,s.default)(this,"columnHeadersCount",0),(0,s.default)(this,"cellRenderer",void 0),(0,s.default)(this,"activeOverlayName",void 0),this.rootNode=e,this.rootDocument=this.rootNode.ownerDocument,this.cellRenderer=t}setActiveOverlayName(e){this.activeOverlayName=e}setAxisUtils(e,t){this.rowUtils=e,this.columnUtils=t}setViewportSize(e,t){this.rowsToRender=e,this.columnsToRender=t}setFilters(e,t){this.rowFilter=e,this.columnFilter=t}setHeaderContentRenderers(e,t){this.rowHeaderFunctions=e,this.rowHeadersCount=e.length,this.columnHeaderFunctions=t,this.columnHeadersCount=t.length}setRenderers(){let{rowHeaders:e,columnHeaders:t,colGroup:r,rows:n,cells:s}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.setTable(this),t.setTable(this),r.setTable(this),n.setTable(this),s.setTable(this),this.rowHeaders=e,this.columnHeaders=t,this.colGroup=r,this.rows=n,this.cells=s}renderedRowToSource(e){return this.rowFilter.renderedToSource(e)}renderedColumnToSource(e){return this.columnFilter.renderedToSource(e)}isAriaEnabled(){return this.rowUtils.wtSettings.getSetting("ariaTags")}render(){this.colGroup.adjust(),this.columnHeaders.adjust(),this.rows.adjust(),this.rowHeaders.adjust(),this.columnHeaders.render(),this.rows.render(),this.rowHeaders.render(),this.cells.render(),this.columnUtils.calculateWidths(),this.colGroup.render();const{rowsToRender:e,rows:t}=this;for(let r=0;r<e;r++){const e=t.getRenderedNode(r);if(e.firstChild){const t=this.renderedRowToSource(r),n=this.rowUtils.getHeightByOverlayName(t,this.activeOverlayName);e.firstChild.style.height=n?n-1+"px":""}}}}},19184:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(49536);function o(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function a(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var l=new WeakSet;function h(e){const{wtSettings:t,inlineStartOverlay:r,wtTable:n,wtViewport:s,totalColumns:o,rootWindow:a}=this.dataAccessObject;if(r.mainTableScrollableElement===a){let l=null;if(t.getSetting("rtlMode")){const e=n.TABLE.getBoundingClientRect(),t=this.dataAccessObject.rootWindow.document.documentElement.offsetWidth;l=Math.abs(e.right-t)}else{l=(0,i.offset)(n.wtRootElement).left}const h=Math.abs((0,i.getScrollLeft)(a,a));if(l>h){const t=(0,i.innerWidth)(a);let n=s.getRowHeaderWidth();for(let s=1;s<=o;s++)if(n+=r.sumCellSizes(s-1,s),l+n-h>=t){e=s-2;break}}}return e}function u(e){const{topOverlay:t,wtTable:r,wtViewport:n,totalRows:s,rootWindow:o}=this.dataAccessObject;if(t.mainTableScrollableElement===o){const a=(0,i.offset)(r.wtRootElement),l=(0,i.getScrollTop)(o,o);if(a.top>l){const r=(0,i.innerHeight)(o);let h=n.getColumnHeaderHeight();for(let n=1;n<=s;n++)if(h+=t.sumCellSizes(n-1,n),a.top+h-l>=r){e=n-2;break}}}return e}t.default=class{constructor(e){o(this,l),(0,s.default)(this,"dataAccessObject",void 0),this.dataAccessObject=e}scrollViewport(e,t,r,n,s){const i=this.scrollViewportHorizontally(e.col,r,s),o=this.scrollViewportVertically(e.row,t,n);return i||o}scrollViewportHorizontally(e,t,r){const{drawn:n,totalColumns:s}=this.dataAccessObject;if(!n||!Number.isInteger(e)||e<0||e>s)return!1;const i=void 0===t&&void 0===r,{fixedColumnsStart:o,inlineStartOverlay:a}=this.dataAccessObject;if(i&&e<o)return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollHorizontally",e),!Number.isInteger(e)||e<0||e>s)return!1;const l=this.getFirstVisibleColumn(),h=this.getLastVisibleColumn();let u=!1;return(i&&(e<l||e>h)||!i)&&(u=a.scrollTo(e,i?e>=this.getLastPartiallyVisibleColumn():t)),u}scrollViewportVertically(e,t,r){const{drawn:n,totalRows:s}=this.dataAccessObject;if(!n||!Number.isInteger(e)||e<0||e>s)return!1;const i=void 0===t&&void 0===r,{fixedRowsBottom:o,fixedRowsTop:a,topOverlay:l}=this.dataAccessObject;if(i&&(e<a||e>s-o-1))return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollVertically",e),!Number.isInteger(e)||e<0||e>s)return!1;const h=this.getFirstVisibleRow(),u=this.getLastVisibleRow();let c=!1;return(i&&(e<h||e>u)||!i)&&(c=l.scrollTo(e,i?e>=this.getLastPartiallyVisibleRow():r)),c}getFirstVisibleRow(){return this.dataAccessObject.wtTable.getFirstVisibleRow()}getLastVisibleRow(){return a(l,this,u).call(this,this.dataAccessObject.wtTable.getLastVisibleRow())}getFirstPartiallyVisibleRow(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleRow()}getLastPartiallyVisibleRow(){return a(l,this,u).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleRow())}getFirstVisibleColumn(){return this.dataAccessObject.wtTable.getFirstVisibleColumn()}getLastVisibleColumn(){return a(l,this,h).call(this,this.dataAccessObject.wtTable.getLastVisibleColumn())}getFirstPartiallyVisibleColumn(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleColumn()}getLastPartiallyVisibleColumn(){return a(l,this,h).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleColumn())}}},73717:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(49536),s=r(24456),i=r(58460),o=r(1479),a=r(98290);t.default=class{constructor(e,t){t&&(this.eventManager=e.eventManager,this.instance=e,this.wot=e,this.settings=t,this.mouseDown=!1,this.main=null,this.top=null,this.bottom=null,this.start=null,this.end=null,this.topStyle=null,this.bottomStyle=null,this.startStyle=null,this.endStyle=null,this.cornerDefaultStyle=a.CORNER_DEFAULT_STYLE,this.cornerCenterPointOffset=-parseInt(this.cornerDefaultStyle.width,10)/2,this.corner=null,this.cornerStyle=null,this.createBorders(t),this.registerListeners())}registerListeners(){const e=this.wot.rootDocument.body;this.eventManager.addEventListener(e,"mousedown",(()=>this.onMouseDown())),this.eventManager.addEventListener(e,"mouseup",(()=>this.onMouseUp()));for(let e=0,t=this.main.childNodes.length;e<t;e++){const t=this.main.childNodes[e];this.eventManager.addEventListener(t,"mouseenter",(t=>this.onMouseEnter(t,this.main.childNodes[e])))}}onMouseDown(){this.mouseDown=!0}onMouseUp(){this.mouseDown=!1}onMouseEnter(e,t){if(!this.mouseDown||!this.wot.getSetting("hideBorderOnMouseDownOver"))return;e.preventDefault(),(0,s.stopImmediatePropagation)(e);const r=this,n=this.wot.rootDocument.body,i=t.getBoundingClientRect();t.style.display="none",this.eventManager.addEventListener(n,"mousemove",(function e(s){var o;((o=s).clientY<Math.floor(i.top)||o.clientY>Math.ceil(i.top+i.height)||o.clientX<Math.floor(i.left)||o.clientX>Math.ceil(i.left+i.width))&&(r.eventManager.removeEventListener(n,"mousemove",e),t.style.display="block")}))}createBorders(e){const{rootDocument:t}=this.wot;this.main=t.createElement("div");const r=["top","start","bottom","end","corner"];let n=this.main.style;n.position="absolute",n.top=0,n.left=0;for(let s=0;s<5;s++){const i=r[s],o=t.createElement("div");o.className=`wtBorder ${this.settings.className||""}`,this.settings[i]&&this.settings[i].hide&&(o.className+=" hidden"),n=o.style,n.backgroundColor=this.settings[i]&&this.settings[i].color?this.settings[i].color:e.border.color,n.height=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,n.width=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,this.main.appendChild(o)}this.top=this.main.childNodes[0],this.start=this.main.childNodes[1],this.bottom=this.main.childNodes[2],this.end=this.main.childNodes[3],this.topStyle=this.top.style,this.startStyle=this.start.style,this.bottomStyle=this.bottom.style,this.endStyle=this.end.style,this.corner=this.main.childNodes[4],this.corner.className+=" corner",this.cornerStyle=this.corner.style,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.height=this.cornerDefaultStyle.height,this.cornerStyle.border=[this.cornerDefaultStyle.borderWidth,this.cornerDefaultStyle.borderStyle,this.cornerDefaultStyle.borderColor].join(" "),(0,o.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.createMultipleSelectorHandles(),this.disappear();const{wtTable:s}=this.wot;let i=s.bordersHolder;i||(i=t.createElement("div"),i.className="htBorders",s.bordersHolder=i,s.spreader.appendChild(i)),i.appendChild(this.main)}createMultipleSelectorHandles(){const{rootDocument:e}=this.wot;this.selectionHandles={top:e.createElement("DIV"),topHitArea:e.createElement("DIV"),bottom:e.createElement("DIV"),bottomHitArea:e.createElement("DIV")};this.selectionHandles.top.className="topSelectionHandle topLeftSelectionHandle",this.selectionHandles.topHitArea.className="topSelectionHandle-HitArea topLeftSelectionHandle-HitArea",this.selectionHandles.bottom.className="bottomSelectionHandle bottomRightSelectionHandle",this.selectionHandles.bottomHitArea.className="bottomSelectionHandle-HitArea bottomRightSelectionHandle-HitArea",this.selectionHandles.styles={top:this.selectionHandles.top.style,topHitArea:this.selectionHandles.topHitArea.style,bottom:this.selectionHandles.bottom.style,bottomHitArea:this.selectionHandles.bottomHitArea.style};const t={position:"absolute",height:"40px",width:"40px","border-radius":`${parseInt(40/1.5,10)}px`};(0,i.objectEach)(t,((e,t)=>{this.selectionHandles.styles.bottomHitArea[t]=e,this.selectionHandles.styles.topHitArea[t]=e}));const r={position:"absolute",height:"10px",width:"10px","border-radius":`${parseInt(10/1.5,10)}px`,background:"#F5F5FF",border:"1px solid #4285c8"};(0,i.objectEach)(r,((e,t)=>{this.selectionHandles.styles.bottom[t]=e,this.selectionHandles.styles.top[t]=e})),this.main.appendChild(this.selectionHandles.top),this.main.appendChild(this.selectionHandles.bottom),this.main.appendChild(this.selectionHandles.topHitArea),this.main.appendChild(this.selectionHandles.bottomHitArea)}isPartRange(e,t){const r=this.wot.selectionManager.getAreaSelection();return!(!r.cellRange||e===r.cellRange.to.row&&t===r.cellRange.to.col)}updateMultipleSelectionHandlesPosition(e,t,r,n,s,i){const o=this.wot.wtSettings.getSetting("rtlMode")?"right":"left",{top:a,topHitArea:l,bottom:h,bottomHitArea:u}=this.selectionHandles.styles,c=parseInt(a.borderWidth,10),d=parseInt(a.width,10),p=parseInt(l.width,10),g=this.wot.wtTable.getWidth(),f=this.wot.wtTable.getHeight();a.top=`${parseInt(r-d-1,10)}px`,a[o]=`${parseInt(n-d-1,10)}px`,l.top=`${parseInt(r-p/4*3,10)}px`,l[o]=`${parseInt(n-p/4*3,10)}px`;const m=Math.min(parseInt(n+s,10),g-d-2*c),y=Math.min(parseInt(n+s-p/4,10),g-p-2*c);h[o]=`${m}px`,u[o]=`${y}px`;const E=Math.min(parseInt(r+i,10),f-d-2*c),w=Math.min(parseInt(r+i-p/4,10),f-p-2*c);h.top=`${E}px`,u.top=`${w}px`,this.settings.border.cornerVisible&&this.settings.border.cornerVisible()?(a.display="block",l.display="block",this.isPartRange(e,t)?(h.display="none",u.display="none"):(h.display="block",u.display="block")):(a.display="none",h.display="none",l.display="none",u.display="none"),e===this.wot.wtSettings.getSetting("fixedRowsTop")||t===this.wot.wtSettings.getSetting("fixedColumnsStart")?(a.zIndex="9999",l.zIndex="9999"):(a.zIndex="",l.zIndex="")}appear(e){if(this.disabled)return;const{wtTable:t,rootDocument:r,rootWindow:s}=this.wot;let i,a,l,h,u,c;const d=t.getRenderedRowsCount();for(let r=0;r<d;r+=1){const n=t.rowFilter.renderedToSource(r);if(n>=e[0]&&n<=e[2]){i=n,u=e[0];break}}for(let r=d-1;r>=0;r-=1){const n=t.rowFilter.renderedToSource(r);if(n>=e[0]&&n<=e[2]){a=n;break}}const p=t.getRenderedColumnsCount();for(let r=0;r<p;r+=1){const n=t.columnFilter.renderedToSource(r);if(n>=e[1]&&n<=e[3]){l=n,c=e[1];break}}for(let r=p-1;r>=0;r-=1){const n=t.columnFilter.renderedToSource(r);if(n>=e[1]&&n<=e[3]){h=n;break}}if(void 0===i||void 0===l)return void this.disappear();let g=t.getCell(this.wot.createCellCoords(i,l));const f=i!==a||l!==h,m=f?t.getCell(this.wot.createCellCoords(a,h)):g,y=(0,n.offset)(g),E=f?(0,n.offset)(m):y,w=(0,n.offset)(t.TABLE),C=(0,n.outerWidth)(t.TABLE),v=y.top,R=y.left,S=this.wot.wtSettings.getSetting("rtlMode");let T=0,N=0;if(S){const e=(0,n.outerWidth)(g),t=s.innerWidth-w.left-C;N=R+e-E.left,T=s.innerWidth-R-e-t-1}else N=E.left+(0,n.outerWidth)(m)-R,T=R-w.left-1;if(this.isEntireColumnSelected(i,a)){const e=this.getDimensionsFromHeader("columns",l,h,u,w);let t=null;e&&([t,T,N]=e),t&&(g=t)}let M=v-w.top-1,_=E.top+(0,n.outerHeight)(m)-v;if(this.isEntireRowSelected(l,h)){const e=this.getDimensionsFromHeader("rows",i,a,c,w);let t=null;e&&([t,M,_]=e),t&&(g=t)}const b=(0,n.getComputedStyle)(g,s);parseInt(b.borderTopWidth,10)>0&&(M+=1,_=_>0?_-1:0),parseInt(b[S?"borderRightWidth":"borderLeftWidth"],10)>0&&(T+=1,N=N>0?N-1:0);const A=S?"right":"left";this.topStyle.top=`${M}px`,this.topStyle[A]=`${T}px`,this.topStyle.width=`${N}px`,this.topStyle.display="block",this.startStyle.top=`${M}px`,this.startStyle[A]=`${T}px`,this.startStyle.height=`${_}px`,this.startStyle.display="block";const O=Math.floor(this.settings.border.width/2);this.bottomStyle.top=M+_-O+"px",this.bottomStyle[A]=`${T}px`,this.bottomStyle.width=`${N}px`,this.bottomStyle.display="block",this.endStyle.top=`${M}px`,this.endStyle[A]=T+N-O+"px",this.endStyle.height=`${_+1}px`,this.endStyle.display="block";let I=this.settings.border.cornerVisible;I="function"==typeof I?I(this.settings.layerLevel):I;const x=this.wot.getSetting("onModifyGetCellCoords",a,h);let[P,L]=[a,h];if(x&&Array.isArray(x)&&([,,P,L]=x),(0,o.isMobileBrowser)()||!I||this.isPartRange(P,L))this.cornerStyle.display="none";else{this.cornerStyle.top=M+_+this.cornerCenterPointOffset-1+"px",this.cornerStyle[A]=T+N+this.cornerCenterPointOffset-1+"px",this.cornerStyle.borderRightWidth=this.cornerDefaultStyle.borderWidth,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.display="none";let e=(0,n.getTrimmingContainer)(t.TABLE);const i=e===s;i&&(e=r.documentElement);const o=parseInt(this.cornerDefaultStyle.width,10)/2,l=parseInt(this.cornerDefaultStyle.height,10)/2;if(h===this.wot.getSetting("totalColumns")-1){const t=i?m.getBoundingClientRect().left:m.offsetLeft;let r=!1,s=0;S?(s=t-parseInt(this.cornerDefaultStyle.width,10)/2,r=s<0):(s=t+(0,n.outerWidth)(m)+parseInt(this.cornerDefaultStyle.width,10)/2,r=s>=(0,n.innerWidth)(e)),r&&(this.cornerStyle[A]=`${Math.floor(T+N+this.cornerCenterPointOffset-o)}px`,this.cornerStyle[S?"borderLeftWidth":"borderRightWidth"]=0)}if(a===this.wot.getSetting("totalRows")-1){(i?m.getBoundingClientRect().top:m.offsetTop)+(0,n.outerHeight)(m)+parseInt(this.cornerDefaultStyle.height,10)/2>=(0,n.innerHeight)(e)&&(this.cornerStyle.top=`${Math.floor(M+_+this.cornerCenterPointOffset-l)}px`,this.cornerStyle.borderBottomWidth=0)}this.cornerStyle.display="block"}(0,o.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.updateMultipleSelectionHandlesPosition(a,h,M,T,N,_)}isEntireColumnSelected(e,t){return e===this.wot.wtTable.getFirstRenderedRow()&&t===this.wot.wtTable.getLastRenderedRow()}isEntireRowSelected(e,t){return e===this.wot.wtTable.getFirstRenderedColumn()&&t===this.wot.wtTable.getLastRenderedColumn()}getDimensionsFromHeader(e,t,r,s,i){const{wtTable:o}=this.wot,a=o.wtRootElement.parentNode;let l=null,h=null,u=null,c=null,d=null,p=null,g=null,f=null;switch(e){case"rows":l=function(){return o.getRowHeader(...arguments)},h=function(){return(0,n.outerHeight)(...arguments)},u="ht__selection--rows",p="top";break;case"columns":l=function(){return o.getColumnHeader(...arguments)},h=function(){return(0,n.outerWidth)(...arguments)},u="ht__selection--columns",p="left"}if(a.classList.contains(u)){const e=this.wot.getSetting("columnHeaders").length;if(g=l(t,e-s),f=l(r,e-s),!g||!f)return!1;const o=(0,n.offset)(g),a=(0,n.offset)(f);return g&&f&&(c=o[p]-i[p]-1,d=a[p]+h(f)-o[p]),[g,c,d]}return!1}changeBorderStyle(e,t){const r=this[e].style,s=t[e];!s||s.hide?(0,n.addClass)(this[e],"hidden"):((0,n.hasClass)(this[e],"hidden")&&(0,n.removeClass)(this[e],"hidden"),r.backgroundColor=s.color,"top"!==e&&"bottom"!==e||(r.height=`${s.width}px`),"start"!==e&&"end"!==e||(r.width=`${s.width}px`))}changeBorderToDefaultStyle(e){const t=1,r="#000",n=this[e].style;n.backgroundColor=r,n.width=`${t}px`,n.height=`${t}px`}toggleHiddenClass(e,t){this.changeBorderToDefaultStyle(e),t?(0,n.addClass)(this[e],"hidden"):(0,n.removeClass)(this[e],"hidden")}disappear(){this.topStyle.display="none",this.bottomStyle.display="none",this.startStyle.display="none",this.endStyle.display="none",this.cornerStyle.display="none",(0,o.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&(this.selectionHandles.styles.top.display="none",this.selectionHandles.styles.topHitArea.display="none",this.selectionHandles.styles.bottom.display="none",this.selectionHandles.styles.bottomHitArea.display="none")}destroy(){this.eventManager.destroyWithOwnEventsOnly(),this.main.parentNode.removeChild(this.main)}}},98290:(e,t)=>{"use strict";t.__esModule=!0;t.CORNER_DEFAULT_STYLE=Object.freeze({width:"6px",height:"6px",borderWidth:"1px",borderStyle:"solid",borderColor:"#FFF"})},74361:(e,t)=>{"use strict";t.__esModule=!0;t.ACTIVE_HEADER_TYPE="active-header",t.HEADER_TYPE="header",t.AREA_TYPE="area",t.FOCUS_TYPE="focus",t.FILL_TYPE="fill",t.ROW_TYPE="row",t.COLUMN_TYPE="column",t.CUSTOM_SELECTION_TYPE="custom-selection"},37364:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s={SelectionManager:!0,Selection:!0},i=n(r(8858));t.Selection=i.default;var o=r(74361);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(s,e)||e in t&&t[e]===o[e]||(t[e]=o[e]))}));var a=r(98290);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(s,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var l=r(34263);t.SelectionManager=l.SelectionManager},34263:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724),r(25352),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=r(49536),i=r(76842),o=n(r(73717));function a(e,t,r){l(e,t),t.set(e,r)}function l(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function h(e,t){return e.get(c(e,t))}function u(e,t,r){return e.set(c(e,t),r),r}function c(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var d=new WeakMap,p=new WeakMap,g=new WeakMap,f=new WeakMap,m=new WeakMap,y=new WeakMap,E=new WeakSet;function w(){const e=h(f,this).get(h(d,this)),t=h(d,this).wtSettings.getSetting("onBeforeRemoveCellClassNames");if(Array.isArray(t))for(let r=0;r<t.length;r++)e.add(t[r]);e.forEach((e=>{var t,r;const n=h(d,this).wtTable.TABLE.querySelectorAll(`.${e}`);let i=[];Array.isArray(null===(t=h(p,this).options)||void 0===t?void 0:t.cellAttributes)&&(i=h(p,this).options.cellAttributes.map((e=>e[0]))),Array.isArray(null===(r=h(p,this).options)||void 0===r?void 0:r.headerAttributes)&&(i=[...i,...h(p,this).options.headerAttributes.map((e=>e[0]))]);for(let t=0,r=n.length;t<r;t++)(0,s.removeClass)(n[t],e),(0,s.removeAttribute)(n[t],i)})),e.clear()}t.SelectionManager=class{constructor(e){var t,r;l(t=this,r=E),r.add(t),a(this,d,void 0),a(this,p,void 0),a(this,g,new i.SelectionScanner),a(this,f,new WeakMap),a(this,m,new WeakSet),a(this,y,new Map),u(p,this,e)}setActiveOverlay(e){return u(d,this,e),h(g,this).setActiveOverlay(h(d,this)),h(f,this).has(h(d,this))||h(f,this).set(h(d,this),new Set),this}getFocusSelection(){return null!==h(p,this)?h(p,this).getFocus():null}getAreaSelection(){return null!==h(p,this)?h(p,this).createLayeredArea():null}getBorderInstance(e){if(!e.settings.border)return null;if(h(y,this).has(e)){const t=h(y,this).get(e);if(t.has(h(d,this)))return t.get(h(d,this));const r=new o.default(h(d,this),e.settings);return t.set(h(d,this),r),r}const t=new o.default(h(d,this),e.settings);return h(y,this).set(e,new Map([[h(d,this),t]])),t}getBorderInstances(e){var t,r;return Array.from(null!==(t=null===(r=h(y,this).get(e))||void 0===r?void 0:r.values())&&void 0!==t?t:[])}destroyBorders(e){h(y,this).get(e).forEach((e=>e.destroy())),h(y,this).delete(e)}render(e){if(null===h(p,this))return;e&&c(E,this,w).call(this);const t=Array.from(h(p,this)),r=new Map,n=new Map;for(let e=0;e<t.length;e++){const s=t[e],{className:i,headerAttributes:o,createLayers:a,selectionType:l}=s.settings;h(m,this).has(s)||(h(m,this).add(s),s.addLocalHook("destroy",(()=>this.destroyBorders(s))));const u=this.getBorderInstance(s);if(s.isEmpty()){null==u||u.disappear();continue}if(i){h(g,this).setActiveSelection(s).scan().forEach((e=>{if(r.has(e)){const t=r.get(e);t.has(i)&&!0===a?t.set(i,t.get(i)+1):t.set(i,1)}else r.set(e,new Map([[i,1]]));o&&(n.has(e)||n.set(e,[]),"TH"===e.nodeName&&n.get(e).push(...o))}))}const c=s.getCorners();h(d,this).getSetting("onBeforeDrawBorders",c,l),null==u||u.appear(c)}r.forEach(((e,t)=>{var r;const n=Array.from(e).map((e=>{let[t,r]=e;return 1===r?t:[t,...Array.from({length:r-1},((e,r)=>`${t}-${r+1}`))]})).flat();n.forEach((e=>h(f,this).get(h(d,this)).add(e))),(0,s.addClass)(t,n),"TD"===t.nodeName&&Array.isArray(null===(r=h(p,this).options)||void 0===r?void 0:r.cellAttributes)&&(0,s.setAttribute)(t,h(p,this).options.cellAttributes)})),Array.from(n.keys()).forEach((e=>{(0,s.setAttribute)(e,[...n.get(e)])}))}}},76842:(e,t,r)=>{"use strict";t.__esModule=!0,r(67834),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var n=r(49536);function s(e,t,r){i(e,t),t.set(e,r)}function i(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function o(e,t){return e.get(l(e,t))}function a(e,t,r){return e.set(l(e,t),r),r}function l(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var h=new WeakMap,u=new WeakMap,c=new WeakSet;function d(e){const{wtTable:t}=o(u,this),r=t.getRenderedRowsCount(),n=t.getRenderedColumnsCount();for(let s=0;s<r;s+=1){const r=t.rowFilter.renderedToSource(s);for(let s=0;s<n;s+=1)e(r,t.columnFilter.renderedToSource(s))}}t.SelectionScanner=class{constructor(){var e,t;i(e=this,t=c),t.add(e),s(this,h,void 0),s(this,u,void 0)}setActiveOverlay(e){return a(u,this,e),this}setActiveSelection(e){return a(h,this,e),this}scan(){const e=o(h,this).settings.selectionType,t=new Set;return"active-header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"area"===e?this.scanCellsRange((e=>t.add(e))):"focus"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e))),this.scanCellsRange((e=>t.add(e)))):"fill"===e?this.scanCellsRange((e=>t.add(e))):"header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"row"===e?(this.scanRowsInHeadersRange((e=>t.add(e))),this.scanRowsInCellsRange((e=>t.add(e)))):"column"===e&&(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanColumnsInCellsRange((e=>t.add(e)))),t}scanColumnsInHeadersRange(e){const[t,r,n,s]=o(h,this).getCorners(),{wtTable:i}=o(u,this),a=i.getRenderedColumnsCount(),l=i.getColumnHeadersCount();let c=0;for(let d=-i.getRowHeadersCount();d<a;d++){const a=i.columnFilter.renderedToSource(d);if(!(a<r||a>s)){for(let d=-l;d<0;d++){if(d<t||d>n)continue;const p=d+l;let g=i.getColumnHeader(a,p);const f=o(u,this).getSetting("onBeforeHighlightingColumnHeader",a,p,{selectionType:o(h,this).settings.selectionType,columnCursor:c,selectionWidth:s-r+1});null!==f&&(f!==a&&(g=i.getColumnHeader(f,p)),e(g))}c+=1}}}scanRowsInHeadersRange(e){const[t,r,n,s]=o(h,this).getCorners(),{wtTable:i}=o(u,this),a=i.getRenderedRowsCount(),l=i.getRowHeadersCount();let c=0;for(let d=-i.getColumnHeadersCount();d<a;d++){const a=i.rowFilter.renderedToSource(d);if(!(a<t||a>n)){for(let d=-l;d<0;d++){if(d<r||d>s)continue;const p=d+l;let g=i.getRowHeader(a,p);const f=o(u,this).getSetting("onBeforeHighlightingRowHeader",a,p,{selectionType:o(h,this).settings.selectionType,rowCursor:c,selectionHeight:n-t+1});null!==f&&(f!==a&&(g=i.getRowHeader(f,p)),e(g))}c+=1}}}scanCellsRange(e){const[t,r,s,i]=o(h,this).getCorners(),{wtTable:a}=o(u,this);l(c,this,d).call(this,((l,c)=>{if(l>=t&&l<=s&&c>=r&&c<=i){const t=a.getCell(o(u,this).createCellCoords(l,c)),r=o(u,this).getSetting("onAfterDrawSelection",l,c,o(h,this).settings.layerLevel);"string"==typeof r&&(0,n.addClass)(t,r),e(t)}}))}scanRowsInCellsRange(e){const[t,,r]=o(h,this).getCorners(),{wtTable:n}=o(u,this);l(c,this,d).call(this,((s,i)=>{if(s>=t&&s<=r){const t=n.getCell(o(u,this).createCellCoords(s,i));e(t)}}))}scanColumnsInCellsRange(e){const[,t,,r]=o(h,this).getCorners(),{wtTable:n}=o(u,this);l(c,this,d).call(this,((s,i)=>{if(i>=t&&i<=r){const t=n.getCell(o(u,this).createCellCoords(s,i));e(t)}}))}}},8858:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(58460),i=n(r(48499));class o{constructor(e,t){this.settings=e,this.cellRange=t||null}isEmpty(){return null===this.cellRange}add(e){return this.isEmpty()?this.cellRange=this.settings.createCellRange(e):this.cellRange.expand(e),this}replace(e,t){if(!this.isEmpty()){if(this.cellRange.from.isEqual(e))return this.cellRange.from=t,!0;if(this.cellRange.to.isEqual(e))return this.cellRange.to=t,!0}return!1}clear(){return this.cellRange=null,this}getCorners(){const e=this.cellRange.getOuterTopStartCorner(),t=this.cellRange.getOuterBottomEndCorner();return[e.row,e.col,t.row,t.col]}destroy(){this.runLocalHooks("destroy")}}(0,s.mixin)(o,i.default);t.default=o},20068:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(49536),o=r(58460);t.default=class{constructor(e){(0,s.default)(this,"settings",{}),(0,s.default)(this,"defaults",Object.freeze(this.getDefaults())),(0,o.objectEach)(this.defaults,((t,r)=>{if(void 0!==e[r])this.settings[r]=e[r];else{if(void 0===t)throw new Error(`A required setting "${r}" was not provided`);this.settings[r]=t}}))}getDefaults(){return{facade:void 0,table:void 0,isDataViewInstance:!0,externalRowCalculator:!1,stretchH:"none",currentRowClassName:null,currentColumnClassName:null,preventOverflow:()=>!1,preventWheel:!1,data:void 0,freezeOverlays:!1,fixedColumnsStart:0,fixedRowsTop:0,fixedRowsBottom:0,shouldRenderInlineStartOverlay:()=>this.getSetting("fixedColumnsStart")>0||this.getSetting("rowHeaders").length>0,shouldRenderTopOverlay:()=>this.getSetting("fixedRowsTop")>0||this.getSetting("columnHeaders").length>0,shouldRenderBottomOverlay:()=>this.getSetting("fixedRowsBottom")>0,minSpareRows:0,rowHeaders:()=>[],columnHeaders:()=>[],totalRows:void 0,totalColumns:void 0,cellRenderer:(e,t,r)=>{const n=this.getSetting("data",e,t);(0,i.fastInnerText)(r,null==n?"":n)},columnWidth(){},rowHeight(){},rowHeightByOverlayName(){},defaultRowHeight:23,defaultColumnWidth:50,selections:null,hideBorderOnMouseDownOver:!1,viewportRowCalculatorOverride:null,viewportColumnCalculatorOverride:null,onCellMouseDown:null,onCellContextMenu:null,onCellMouseOver:null,onCellMouseOut:null,onCellMouseUp:null,onCellDblClick:null,onCellCornerMouseDown:null,onCellCornerDblClick:null,beforeDraw:null,onDraw:null,onBeforeRemoveCellClassNames:null,onAfterDrawSelection:null,onBeforeDrawBorders:null,onBeforeViewportScrollHorizontally:e=>e,onBeforeViewportScrollVertically:e=>e,onScrollHorizontally:null,onScrollVertically:null,onBeforeTouchScroll:null,onAfterMomentumScroll:null,onBeforeStretchingColumnWidth:e=>e,onModifyRowHeaderWidth:null,onModifyGetCellCoords:null,onBeforeHighlightingRowHeader:e=>e,onBeforeHighlightingColumnHeader:e=>e,onWindowResize:null,onContainerElementResize:null,renderAllColumns:!1,renderAllRows:!1,groups:!1,rowHeaderWidth:null,columnHeaderHeight:null,headerClassName:null,rtlMode:!1,ariaTags:!0}}update(e,t){return void 0===t?(0,o.objectEach)(e,((e,t)=>{this.settings[t]=e})):this.settings[e]=t,this}getSetting(e,t,r,n,s){return"function"==typeof this.settings[e]?this.settings[e](t,r,n,s):void 0!==t&&Array.isArray(this.settings[e])?this.settings[e][t]:this.settings[e]}getSettingPure(e){return this.settings[e]}has(e){return!!this.settings[e]}}},89817:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=r(49536),o=r(25735),a=n(r(86296)),l=n(r(81956)),h=r(7961),u=n(r(40205)),c=n(r(58299)),d=r(68574),p=r(81595);t.default=class{constructor(e,t,r,n,o){(0,s.default)(this,"wtSettings",null),(0,s.default)(this,"domBindings",void 0),(0,s.default)(this,"TBODY",null),(0,s.default)(this,"THEAD",null),(0,s.default)(this,"COLGROUP",null),(0,s.default)(this,"hasTableHeight",!0),(0,s.default)(this,"hasTableWidth",!0),(0,s.default)(this,"isTableVisible",!1),(0,s.default)(this,"tableOffset",0),(0,s.default)(this,"holderOffset",0),this.domBindings=r,this.isMaster="master"===o,this.name=o,this.dataAccessObject=e,this.facadeGetter=t,this.wtSettings=n,this.instance=this.dataAccessObject.wot,this.wot=this.dataAccessObject.wot,this.TABLE=r.rootTable,(0,i.removeTextNodes)(this.TABLE),this.spreader=this.createSpreader(this.TABLE),this.hider=this.createHider(this.spreader),this.holder=this.createHolder(this.hider),this.wtRootElement=this.holder.parentNode,this.isMaster&&this.alignOverlaysWithTrimmingContainer(),this.fixTableDomTree(),this.rowFilter=null,this.columnFilter=null,this.correctHeaderWidth=!1;const a=this.wtSettings.getSettingPure("rowHeaderWidth");this.wtSettings.update("rowHeaderWidth",(()=>this._modifyRowHeaderWidth(a))),this.rowUtils=new c.default(this.dataAccessObject,this.wtSettings),this.columnUtils=new u.default(this.dataAccessObject,this.wtSettings),this.tableRenderer=new h.Renderer({TABLE:this.TABLE,THEAD:this.THEAD,COLGROUP:this.COLGROUP,TBODY:this.TBODY,rowUtils:this.rowUtils,columnUtils:this.columnUtils,cellRenderer:this.wtSettings.getSettingPure("cellRenderer")})}is(e){return this.name===e}fixTableDomTree(){const e=this.domBindings.rootDocument;this.TBODY=this.TABLE.querySelector("tbody"),this.TBODY||(this.TBODY=e.createElement("tbody"),this.TABLE.appendChild(this.TBODY)),this.THEAD=this.TABLE.querySelector("thead"),this.THEAD||(this.THEAD=e.createElement("thead"),this.TABLE.insertBefore(this.THEAD,this.TBODY)),this.COLGROUP=this.TABLE.querySelector("colgroup"),this.COLGROUP||(this.COLGROUP=e.createElement("colgroup"),this.TABLE.insertBefore(this.COLGROUP,this.THEAD))}createSpreader(e){const t=e.parentNode;let r;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(r=this.domBindings.rootDocument.createElement("div"),r.className="wtSpreader",t&&t.insertBefore(r,e),r.appendChild(e)),r.style.position="relative",this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r,[(0,p.A11Y_PRESENTATION)()]),r}createHider(e){const t=e.parentNode;let r;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(r=this.domBindings.rootDocument.createElement("div"),r.className="wtHider",t&&t.insertBefore(r,e),r.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r,[(0,p.A11Y_PRESENTATION)()]),r}createHolder(e){const t=e.parentNode;let r;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(r=this.domBindings.rootDocument.createElement("div"),r.style.position="relative",r.className="wtHolder",t&&t.insertBefore(r,e),this.isMaster&&(r.parentNode.className+="ht_master handsontable",r.parentNode.setAttribute("dir",this.wtSettings.getSettingPure("rtlMode")?"rtl":"ltr"),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r.parentNode,[(0,p.A11Y_PRESENTATION)()])),r.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r,[(0,p.A11Y_PRESENTATION)()]),r}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,{wtOverlays:r,wtViewport:n}=this.dataAccessObject,s=t.getSetting("totalRows"),o=t.getSetting("totalColumns"),h=t.getSetting("rowHeaders"),u=h.length,c=t.getSetting("columnHeaders"),p=c.length;let g=e;if(this.isMaster&&(r.beforeDraw(),this.holderOffset=(0,i.offset)(this.holder),g=n.createCalculators(g),u&&!t.getSetting("fixedColumnsStart"))){const e=r.inlineStartOverlay.getScrollPosition(),t=this.correctHeaderWidth;this.correctHeaderWidth=0!==e,t!==this.correctHeaderWidth&&(g=!1)}if(g)this.isMaster&&r.refresh(!0);else{this.isMaster?this.tableOffset=(0,i.offset)(this.TABLE):this.tableOffset=this.dataAccessObject.parentTableOffset;const e=s>0?this.getFirstRenderedRow():0,t=o>0?this.getFirstRenderedColumn():0;this.rowFilter=new l.default(e,s,p),this.columnFilter=new a.default(t,o,u);let g=!0;if(this.isMaster){this.alignOverlaysWithTrimmingContainer();const e={};this.wtSettings.getSetting("beforeDraw",!0,e),g=!0!==e.skipRender}if(g){let e;if(this.tableRenderer.setHeaderContentRenderers(h,c),(this.is(d.CLONE_BOTTOM)||this.is(d.CLONE_BOTTOM_INLINE_START_CORNER))&&this.tableRenderer.setHeaderContentRenderers(h,[]),this.resetOversizedRows(),this.tableRenderer.setActiveOverlayName(this.name).setViewportSize(this.getRenderedRowsCount(),this.getRenderedColumnsCount()).setFilters(this.rowFilter,this.columnFilter).render(),this.isMaster&&(e=this.dataAccessObject.workspaceWidth,n.containerWidth=null,this.markOversizedColumnHeaders()),this.adjustColumnHeaderHeights(),(this.isMaster||this.is(d.CLONE_BOTTOM))&&this.markOversizedRows(),this.isMaster){this.wtSettings.getSetting("externalRowCalculator")||n.createVisibleCalculators(),r.refresh(!1),r.applyToDOM();const t=(0,i.outerWidth)(this.hider),s=(0,i.outerWidth)(this.TABLE);0!==t&&s!==t&&(this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),e!==n.getWorkspaceWidth()&&(n.containerWidth=null,this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),this.wtSettings.getSetting("onDraw",!0)}else this.is(d.CLONE_BOTTOM)&&this.dataAccessObject.cloneSource.wtOverlays.adjustElementsSize()}}let f=!1;return this.isMaster&&(f=r.topOverlay.resetFixedPosition(),r.bottomOverlay.clone&&(f=r.bottomOverlay.resetFixedPosition()||f),f=r.inlineStartOverlay.resetFixedPosition()||f,r.topInlineStartCornerOverlay&&r.topInlineStartCornerOverlay.resetFixedPosition(),r.bottomInlineStartCornerOverlay&&r.bottomInlineStartCornerOverlay.clone&&r.bottomInlineStartCornerOverlay.resetFixedPosition()),f?(r.refreshAll(),r.adjustElementsSize()):this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(g),this.isMaster&&r.afterDraw(),this.dataAccessObject.drawn=!0,this}markIfOversizedColumnHeader(e){const t=this.columnFilter.renderedToSource(e);let r=this.wtSettings.getSetting("columnHeaders").length;const n=this.wtSettings.getSetting("defaultRowHeight");let s,o,a;const l=this.wtSettings.getSetting("columnHeaderHeight")||[];for(;r;)r-=1,s=this.getColumnHeaderHeight(r),o=this.getColumnHeader(t,r),o&&(a=(0,i.innerHeight)(o),(!s&&n<a||s<a)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=a),Array.isArray(l)?null!==l[r]&&void 0!==l[r]&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=l[r]):isNaN(l)||(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=l),this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]<(l[r]||l)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=l[r]||l))}adjustColumnHeaderHeights(){const{wtSettings:e}=this,t=this.THEAD.childNodes,r=this.dataAccessObject.wtViewport.oversizedColumnHeaders;for(let n=0,s=e.getSetting("columnHeaders").length;n<s;n++)if(r[n]){if(!t[n]||0===t[n].childNodes.length)return;t[n].childNodes[0].style.height=`${r[n]}px`}}resetOversizedRows(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject;if((this.isMaster||this.is(d.CLONE_BOTTOM))&&!e.getSetting("externalRowCalculator")){const e=this.getRenderedRowsCount();for(let r=0;r<e;r++){const e=this.rowFilter.renderedToSource(r);t.oversizedRows&&t.oversizedRows[e]&&(t.oversizedRows[e]=void 0)}}}getCell(e){let t=e.row,r=e.col;const n=this.wtSettings.getSetting("onModifyGetCellCoords",t,r);if(n&&Array.isArray(n)&&([t,r]=n),this.isRowBeforeRenderedRows(t))return-1;if(this.isRowAfterRenderedRows(t))return-2;if(this.isColumnBeforeRenderedColumns(r))return-3;if(this.isColumnAfterRenderedColumns(r))return-4;const s=this.getRow(t);if(!s&&t>=0)throw new Error("TR was expected to be rendered but is not");const i=s.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(r)];if(!i&&r>=0)throw new Error("TD or TH was expected to be rendered but is not");return i}getRow(e){let t=null,r=null;var n,s;e<0?(t=null===(n=this.rowFilter)||void 0===n?void 0:n.sourceRowToVisibleColHeadedRow(e),r=this.THEAD):(t=null===(s=this.rowFilter)||void 0===s?void 0:s.sourceToRendered(e),r=this.TBODY);return void 0!==t&&void 0!==r&&(!(r.childNodes.length<t+1)&&r.childNodes[t])}getColumnHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const r=this.THEAD.childNodes[t];return null==r?void 0:r.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e)]}getColumnHeaders(e){const t=[],r=this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e);return this.THEAD.childNodes.forEach((e=>{const n=e.childNodes[r];n&&t.push(n)})),t}getRowHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t>=this.wtSettings.getSetting("rowHeaders").length)return;const r=this.rowFilter.sourceToRendered(e),n=r<0?this.rowFilter.sourceRowToVisibleColHeadedRow(e):r,s=(r<0?this.THEAD:this.TBODY).childNodes[n];return null==s?void 0:s.childNodes[t]}getRowHeaders(e){const t=[],r=this.wtSettings.getSetting("rowHeaders").length;for(let n=0;n<r;n++){const r=this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)],s=null==r?void 0:r.childNodes[n];s&&t.push(s)}return t}getCoords(e){let t=e;if("TD"!==t.nodeName&&"TH"!==t.nodeName&&(t=(0,i.closest)(t,["TD","TH"])),null===t)return null;const r=t.parentNode,n=r.parentNode;let s=(0,i.index)(r),o=t.cellIndex;if((0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_TOP,t,this.wtRootElement))"THEAD"===n.nodeName&&(s-=n.childNodes.length);else if((0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM,t,this.wtRootElement)){s=this.wtSettings.getSetting("totalRows")-n.childNodes.length+s}else s=n===this.THEAD?this.rowFilter.visibleColHeadedRowToSourceRow(s):this.rowFilter.renderedToSource(s);return o=(0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_INLINE_START,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)?this.columnFilter.offsettedTH(o):this.columnFilter.visibleRowHeadedColumnToSourceColumn(o),this.wot.createCellCoords(s,o)}markOversizedRows(){if(this.wtSettings.getSetting("externalRowCalculator"))return;let e=this.TBODY.childNodes.length;let t,r,n,s,o;if(e*this.wtSettings.getSetting("defaultRowHeight")!==(0,i.innerHeight)(this.TBODY)-1||this.wtSettings.getSetting("fixedRowsBottom"))for(;e;)e-=1,n=this.rowFilter.renderedToSource(e),t=this.getRowHeight(n),s=this.getTrForRow(n),o=s.querySelector("th"),r=o?(0,i.innerHeight)(o):(0,i.innerHeight)(s)-1,(!t&&this.wtSettings.getSetting("defaultRowHeight")<r||t<r)&&(r+=1,this.dataAccessObject.wtViewport.oversizedRows[n]=r)}getTrForRow(e){return this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)]}isColumnHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("rowHeaders").length;return Math.abs(e)<=t}isRowHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("columnHeaders").length;return Math.abs(e)<=t}isRowBeforeRenderedRows(e){const t=this.getFirstRenderedRow();return e<0&&t<=0?!this.isRowHeaderRendered(e):e<t}isRowAfterRenderedRows(e){return e>this.getLastRenderedRow()}isColumnBeforeRenderedColumns(e){const t=this.getFirstRenderedColumn();return e<0&&t<=0?!this.isColumnHeaderRendered(e):e<t}isColumnAfterRenderedColumns(e){return this.columnFilter&&e>this.getLastRenderedColumn()}isColumnAfterViewport(e){return this.columnFilter&&e>this.getLastVisibleColumn()}isRowAfterViewport(e){return this.rowFilter&&e>this.getLastVisibleRow()}isColumnBeforeViewport(e){return this.columnFilter&&this.columnFilter.sourceToRendered(e)<0&&e>=0}isLastRowFullyVisible(){return this.getLastVisibleRow()===this.getLastRenderedRow()}isLastColumnFullyVisible(){return this.getLastVisibleColumn()===this.getLastRenderedColumn()}allRowsInViewport(){return this.wtSettings.getSetting("totalRows")===this.getVisibleRowsCount()}allColumnsInViewport(){return this.wtSettings.getSetting("totalColumns")===this.getVisibleColumnsCount()}getRowHeight(e){return this.rowUtils.getHeight(e)}getColumnHeaderHeight(e){return this.columnUtils.getHeaderHeight(e)}getColumnWidth(e){return this.columnUtils.getWidth(e)}getStretchedColumnWidth(e){return this.columnUtils.getStretchedColumnWidth(e)}hasDefinedSize(){return this.hasTableHeight&&this.hasTableWidth}getWidth(){return(0,i.outerWidth)(this.TABLE)}getHeight(){return(0,i.outerHeight)(this.TABLE)}getTotalWidth(){const e=(0,i.outerWidth)(this.hider);return 0!==e?e:this.getWidth()}getTotalHeight(){const e=(0,i.outerHeight)(this.hider);return 0!==e?e:this.getHeight()}isVisible(){return(0,i.isVisible)(this.TABLE)}_modifyRowHeaderWidth(e){let t=(0,o.isFunction)(e)?e():null;return Array.isArray(t)?(t=[...t],t[t.length-1]=this._correctRowHeaderWidth(t[t.length-1])):t=this._correctRowHeaderWidth(t),t}_correctRowHeaderWidth(e){let t=e;return"number"!=typeof e&&(t=this.wtSettings.getSetting("defaultColumnWidth")),this.correctHeaderWidth&&(t+=1),t}}},60763:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(92927)),o=n(r(94343)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_BOTTOM)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},69365:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(92927)),o=n(r(51672)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_BOTTOM_INLINE_START_CORNER)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},14477:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(30155)),o=n(r(51672)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_INLINE_START)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},43410:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(49536),i=n(r(89817)),o=n(r(30155)),a=n(r(94343)),l=r(58460);class h extends i.default{constructor(e,t,r,n){super(e,t,r,n,"master")}alignOverlaysWithTrimmingContainer(){const e=(0,s.getTrimmingContainer)(this.wtRootElement),{rootWindow:t}=this.domBindings;if(e===t){this.wtSettings.getSetting("preventOverflow")||(this.holder.style.overflow="visible",this.wtRootElement.style.overflow="visible")}else{const r=e.parentElement,n=(0,s.getStyle)(e,"height",t),i=(0,s.getStyle)(e,"overflow",t),o=this.holder.style,{scrollWidth:a,scrollHeight:l}=e;let h=e.offsetWidth,u=e.offsetHeight;if(r&&["auto","hidden","scroll"].includes(i)){const n=e.cloneNode(!1);n.style.overflow="auto",n.style.position="absolute",e.nextElementSibling?r.insertBefore(n,e.nextElementSibling):r.appendChild(n);const i=parseInt((0,s.getComputedStyle)(n,t).height,10);r.removeChild(n),0===i&&(u=0)}u=Math.min(u,l),o.height="auto"===n?"auto":`${u}px`,h=Math.min(h,a),o.width=`${h}px`,o.overflow="",this.hasTableHeight="auto"===o.height||u>0,this.hasTableWidth=h>0}this.isTableVisible=(0,s.isVisible)(this.TABLE)}markOversizedColumnHeaders(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject,r="master",n=e.getSetting("columnHeaders").length;if(n&&!t.hasOversizedColumnHeadersMarked[r]){const s=e.getSetting("rowHeaders").length,i=this.getRenderedColumnsCount();for(let e=0;e<n;e++)for(let e=-1*s;e<i;e++)this.markIfOversizedColumnHeader(e);t.hasOversizedColumnHeadersMarked[r]=!0}}}(0,l.mixin)(h,o.default),(0,l.mixin)(h,a.default);t.default=h},94343:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedColumn(){const e=this.dataAccessObject.startColumnRendered;return null===e?-1:e},getFirstVisibleColumn(){const e=this.dataAccessObject.startColumnVisible;return null===e?-1:e},getFirstPartiallyVisibleColumn(){const e=this.dataAccessObject.startColumnPartiallyVisible;return null===e?-1:e},getLastRenderedColumn(){const e=this.dataAccessObject.endColumnRendered;return null===e?-1:e},getLastVisibleColumn(){const e=this.dataAccessObject.endColumnVisible;return null===e?-1:e},getLastPartiallyVisibleColumn(){const e=this.dataAccessObject.endColumnPartiallyVisible;return null===e?-1:e},getRenderedColumnsCount(){return this.dataAccessObject.countColumnsRendered},getVisibleColumnsCount(){return this.dataAccessObject.countColumnsVisible},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","calculatedColumns",{writable:!1,enumerable:!1});t.default=s},30155:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedRow(){const e=this.dataAccessObject.startRowRendered;return null===e?-1:e},getFirstVisibleRow(){const e=this.dataAccessObject.startRowVisible;return null===e?-1:e},getFirstPartiallyVisibleRow(){const e=this.dataAccessObject.startRowPartiallyVisible;return null===e?-1:e},getLastRenderedRow(){const e=this.dataAccessObject.endRowRendered;return null===e?-1:e},getLastVisibleRow(){const e=this.dataAccessObject.endRowVisible;return null===e?-1:e},getLastPartiallyVisibleRow(){const e=this.dataAccessObject.endRowPartiallyVisible;return null===e?-1:e},getRenderedRowsCount(){return this.dataAccessObject.countRowsRendered},getVisibleRowsCount(){return this.dataAccessObject.countRowsVisible},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","calculatedRows",{writable:!1,enumerable:!1});t.default=s},51672:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedColumn(){return 0===this.wtSettings.getSetting("totalColumns")?-1:0},getFirstVisibleColumn(){return this.getFirstRenderedColumn()},getFirstPartiallyVisibleColumn(){return this.getFirstRenderedColumn()},getLastRenderedColumn(){return this.getRenderedColumnsCount()-1},getLastVisibleColumn(){return this.getLastRenderedColumn()},getLastPartiallyVisibleColumn(){return this.getLastRenderedColumn()},getRenderedColumnsCount(){const e=this.wtSettings.getSetting("totalColumns");return Math.min(this.wtSettings.getSetting("fixedColumnsStart"),e)},getVisibleColumnsCount(){return this.getRenderedColumnsCount()},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","stickyColumnsStart",{writable:!1,enumerable:!1});t.default=s},92927:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedRow(){const e=this.wtSettings.getSetting("totalRows"),t=this.wtSettings.getSetting("fixedRowsBottom"),r=e-t;return 0===e||0===t?-1:r<0?0:r},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.wtSettings.getSetting("totalRows")-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsBottom"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount:()=>0};(0,n.defineGetter)(s,"MIXIN_NAME","stickyRowsBottom",{writable:!1,enumerable:!1});t.default=s},58825:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedRow(){return 0===this.wtSettings.getSetting("totalRows")?-1:0},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.getRenderedRowsCount()-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsTop"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","stickyRowsTop",{writable:!1,enumerable:!1});t.default=s},55477:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(58825)),o=n(r(94343)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_TOP)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},94159:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(58825)),o=n(r(51672)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_TOP_INLINE_START_CORNER)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},40205:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(49536),o=r(58210);t.default=class{constructor(e,t){(0,s.default)(this,"dataAccessObject",void 0),(0,s.default)(this,"wtSettings",void 0),(0,s.default)(this,"headerWidths",new Map),(0,s.default)(this,"stretching",void 0),this.dataAccessObject=e,this.wtSettings=t,this.stretching=new o.ColumnStretching({totalColumns:()=>this.wtSettings.getSetting("totalColumns"),stretchMode:()=>this.wtSettings.getSetting("stretchH"),stretchingColumnWidthFn:(e,t)=>this.wtSettings.getSetting("onBeforeStretchingColumnWidth",e,t),columnWidthFn:e=>this.dataAccessObject.wtTable.getColumnWidth(e)})}getWidth(e){return this.wtSettings.getSetting("columnWidth",e)||this.wtSettings.getSetting("defaultColumnWidth")}getStretchedColumnWidth(e){let t=this.getWidth(e);const r=this.stretching.getStretchedColumnWidth(e,t);return r&&(t=r),t}getHeaderHeight(e){let t=this.wtSettings.getSetting("defaultRowHeight");const r=this.dataAccessObject.wtViewport.oversizedColumnHeaders[e];return void 0!==r&&(t=t?Math.max(t,r):r),t}getHeaderWidth(e){return this.headerWidths.get(this.dataAccessObject.wtTable.columnFilter.sourceToRendered(e))}refreshStretching(){const{wtTable:e,wtViewport:t,cloneSource:r}=this.dataAccessObject,n=r?r.wtTable.holder:e.holder,s=n.offsetHeight<n.scrollHeight?(0,i.getScrollbarWidth)():0;this.stretching.refreshStretching(t.getViewportWidth()-s)}calculateWidths(){const{wtSettings:e}=this;let t=e.getSetting("rowHeaderWidth");if(this.refreshStretching(),t=e.getSetting("onModifyRowHeaderWidth",t),null!=t){const r=e.getSetting("rowHeaders").length,n=e.getSetting("defaultColumnWidth");for(let e=0;e<r;e++){let r=Array.isArray(t)?t[e]:t;r=null==r?n:r,this.headerWidths.set(e,r)}}}}},58210:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(44038);function o(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function a(e,t){return e.get(h(e,t))}function l(e,t,r){return e.set(h(e,t),r),r}function h(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var u=new WeakMap,c=new WeakMap,d=new WeakMap,p=new WeakMap,g=new WeakMap;t.ColumnStretching=class{constructor(e){let{totalColumns:t,stretchMode:r,stretchingColumnWidthFn:n,columnWidthFn:i}=e;(0,s.default)(this,"stretchAllRatio",0),(0,s.default)(this,"stretchLastWidth",0),(0,s.default)(this,"stretchAllColumnsWidth",[]),o(this,u,0),(0,s.default)(this,"needVerifyLastColumnWidth",!0),o(this,c,(()=>0)),o(this,d,(e=>e)),o(this,p,(e=>e)),o(this,g,(()=>"none")),l(c,this,t),l(g,this,r),l(d,this,null!=n?n:a(d,this)),l(p,this,null!=i?i:a(p,this))}refreshStretching(e){if("none"===a(g,this).call(this))return;this.stretchAllRatio=0,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0,this.stretchLastWidth=0,l(u,this,e);let t=0;for(let r=0;r<a(c,this).call(this);r++){const n=this._getColumnWidth(r),s=a(d,this).call(this,void 0,r);"number"==typeof s?e-=s:t+=n}const r=e-t;if("all"===a(g,this).call(this)&&r>0)this.stretchAllRatio=e/t,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0;else if("last"===a(g,this).call(this)&&e!==1/0){const e=this._getColumnWidth(a(c,this).call(this)-1),t=r+e;this.stretchLastWidth=t>=0?t:e}}getStretchedColumnWidth(e,t){let r=null;return"all"===a(g,this).call(this)&&0!==this.stretchAllRatio?r=this._getStretchedAllColumnWidth(e,t):"last"===a(g,this).call(this)&&0!==this.stretchLastWidth&&(r=this._getStretchedLastColumnWidth(e)),r}_getStretchedAllColumnWidth(e,t){let r=0;if(!this.stretchAllColumnsWidth[e]){const r=Math.round(t*this.stretchAllRatio),n=a(d,this).call(this,r,e);this.stretchAllColumnsWidth[e]=void 0===n?r:isNaN(n)?this._getColumnWidth(e):n}if(this.stretchAllColumnsWidth.length===a(c,this).call(this)&&this.needVerifyLastColumnWidth){this.needVerifyLastColumnWidth=!1;for(let e=0;e<this.stretchAllColumnsWidth.length;e++)r+=this.stretchAllColumnsWidth[e];r!==a(u,this)&&(this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length-1]+=a(u,this)-r)}return this.stretchAllColumnsWidth[e]}_getStretchedLastColumnWidth(e){return e===a(c,this).call(this)-1?this.stretchLastWidth:null}_getColumnWidth(e){let t=a(p,this).call(this,e);return isNaN(t)&&(t=i.DEFAULT_COLUMN_WIDTH),t}}},63912:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e){(0,s.default)(this,"nodeType",void 0),this.nodeType=e.toUpperCase()}setRootDocument(e){this.rootDocument=e}obtain(){return this.rootDocument.createElement(this.nodeType)}}},38104:(e,t)=>{"use strict";t.__esModule=!0;t.WORKING_SPACE_ALL=0,t.WORKING_SPACE_TOP=1,t.WORKING_SPACE_BOTTOM=2},64625:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(27528));t.OrderView=s.default;var i=n(r(84013));t.SharedOrderView=i.default},84013:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(27528));class i extends s.default{prependView(e){return this.sizeSet.prepend(e.sizeSet),e.sizeSet.append(this.sizeSet),this}appendView(e){return this.sizeSet.append(e.sizeSet),e.sizeSet.prepend(this.sizeSet),this}}t.default=i},27528:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(38104),o=n(r(57637));t.default=class{constructor(e,t,r){(0,s.default)(this,"rootNode",void 0),(0,s.default)(this,"nodesPool",void 0),(0,s.default)(this,"sizeSet",new o.default),(0,s.default)(this,"childNodeType",void 0),(0,s.default)(this,"visualIndex",0),(0,s.default)(this,"collectedNodes",[]),this.rootNode=e,this.nodesPool=t,this.childNodeType=r.toUpperCase()}setSize(e){return this.sizeSet.setSize(e),this}setOffset(e){return this.sizeSet.setOffset(e),this}isSharedViewSet(){return this.sizeSet.isShared()}getNode(e){return e<this.collectedNodes.length?this.collectedNodes[e]:null}getCurrentNode(){const e=this.collectedNodes.length;return e>0?this.collectedNodes[e-1]:null}getRenderedChildCount(){const{rootNode:e,sizeSet:t}=this;let r=0;if(this.isSharedViewSet()){let n=e.firstElementChild;for(;n;){if(n.tagName===this.childNodeType)r+=1;else if(t.isPlaceOn(i.WORKING_SPACE_TOP))break;n=n.nextElementSibling}}else r=e.childElementCount;return r}start(){this.collectedNodes.length=0,this.visualIndex=0;const{rootNode:e,sizeSet:t}=this,r=this.isSharedViewSet(),{nextSize:n}=t.getViewSize();let s=this.getRenderedChildCount();for(;s<n;){const n=this.nodesPool();!r||r&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)?e.appendChild(n):e.insertBefore(n,e.firstChild),s+=1}const o=r&&t.isPlaceOn(i.WORKING_SPACE_TOP);for(;s>n;)e.removeChild(o?e.firstChild:e.lastChild),s-=1}render(){const{rootNode:e,sizeSet:t}=this;let r=this.visualIndex;this.isSharedViewSet()&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)&&(r+=t.sharedSize.nextSize);let n=e.childNodes[r];if(n.tagName!==this.childNodeType){const t=this.nodesPool();e.replaceChild(t,n),n=t}this.collectedNodes.push(n),this.visualIndex+=1}end(){}}},56269:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(){(0,s.default)(this,"currentSize",0),(0,s.default)(this,"nextSize",0),(0,s.default)(this,"currentOffset",0),(0,s.default)(this,"nextOffset",0)}setSize(e){this.currentSize=this.nextSize,this.nextSize=e}setOffset(e){this.currentOffset=this.nextOffset,this.nextOffset=e}}},57637:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=n(r(56269)),o=r(38104);t.default=class{constructor(){(0,s.default)(this,"size",new i.default),(0,s.default)(this,"workingSpace",o.WORKING_SPACE_ALL),(0,s.default)(this,"sharedSize",null)}setSize(e){this.size.setSize(e)}setOffset(e){this.size.setOffset(e)}getViewSize(){return this.size}isShared(){return this.sharedSize instanceof i.default}isPlaceOn(e){return this.workingSpace===e}append(e){this.workingSpace=o.WORKING_SPACE_TOP,e.workingSpace=o.WORKING_SPACE_BOTTOM,this.sharedSize=e.getViewSize()}prepend(e){this.workingSpace=o.WORKING_SPACE_BOTTOM,e.workingSpace=o.WORKING_SPACE_TOP,this.sharedSize=e.getViewSize()}}},58299:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e,t){(0,s.default)(this,"dataAccessObject",void 0),(0,s.default)(this,"wtSettings",void 0),this.dataAccessObject=e,this.wtSettings=t}getHeight(e){let t=this.wtSettings.getSetting("rowHeight",e);const r=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==r&&(t=void 0===t?r:Math.max(t,r)),t}getHeightByOverlayName(e,t){let r=this.wtSettings.getSetting("rowHeightByOverlayName",e,t);const n=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==n&&(r=void 0===r?n:Math.max(r,n)),r}}},86203:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(49536),s=r(58460),i=r(44038);t.default=class{constructor(e,t,r,n,s){this.dataAccessObject=e,this.wot=e.wot,this.instance=this.wot,this.domBindings=t,this.wtSettings=r,this.wtTable=s,this.oversizedRows=[],this.oversizedColumnHeaders=[],this.hasOversizedColumnHeadersMarked={},this.clientHeight=0,this.containerWidth=NaN,this.rowHeaderWidth=NaN,this.rowsVisibleCalculator=null,this.columnsVisibleCalculator=null,this.rowsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllRows")?new i.RenderedAllRowsCalculationType:new i.RenderedRowsCalculationType],["fullyVisible",()=>new i.FullyVisibleRowsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleRowsCalculationType]]),this.columnsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllColumns")?new i.RenderedAllColumnsCalculationType:new i.RenderedColumnsCalculationType],["fullyVisible",()=>new i.FullyVisibleColumnsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleColumnsCalculationType]]),this.eventManager=n,this.eventManager.addEventListener(this.domBindings.rootWindow,"resize",(()=>{this.clientHeight=this.getWorkspaceHeight()}))}getWorkspaceHeight(){const e=this.domBindings.rootDocument,t=this.dataAccessObject.topOverlayTrimmingContainer;let r=0;if(t===this.domBindings.rootWindow)r=e.documentElement.clientHeight;else{r=(0,n.outerHeight)(t)>0&&t.clientHeight>0?t.clientHeight:1/0}return r}getWorkspaceWidth(){const{wtSettings:e}=this,{rootDocument:t,rootWindow:r}=this.domBindings,s=this.dataAccessObject.inlineStartOverlayTrimmingContainer,i=t.documentElement.offsetWidth,o=e.getSetting("totalColumns"),a=e.getSetting("preventOverflow"),l=e.getSetting("rtlMode"),h=this.wtTable.TABLE.getBoundingClientRect(),u=i-(l?h.right-i:h.left);let c,d;if(a)return(0,n.outerWidth)(this.wtTable.wtRootElement);if(c=e.getSetting("freezeOverlays")?Math.min(u,i):Math.min(this.getContainerFillWidth(),u,i),s===r&&o>0&&this.sumColumnWidths(0,o-1)>c)return t.documentElement.clientWidth;if(s!==r&&(d=(0,n.getStyle)(this.dataAccessObject.inlineStartOverlayTrimmingContainer,"overflow",r),"scroll"===d||"hidden"===d||"auto"===d))return Math.max(c,s.clientWidth);const p=e.getSetting("stretchH");return"none"!==p&&p?c:Math.max(c,(0,n.outerWidth)(this.wtTable.TABLE))}hasVerticalScroll(){return this.wtTable.hider.offsetHeight>this.getWorkspaceHeight()}hasHorizontalScroll(){return this.wtTable.hider.offsetWidth>this.getWorkspaceWidth()}sumColumnWidths(e,t){let r=0,n=e;for(;n<t;)r+=this.wtTable.getColumnWidth(n),n+=1;return r}getContainerFillWidth(){if(this.containerWidth)return this.containerWidth;const e=this.wtTable.holder,t=this.domBindings.rootDocument.createElement("div");t.style.width="100%",t.style.height="1px",e.appendChild(t);const r=t.offsetWidth;return this.containerWidth=r,e.removeChild(t),r}getWorkspaceOffset(){return(0,n.offset)(this.wtTable.TABLE)}getColumnHeaderHeight(){return this.wtSettings.getSetting("columnHeaders").length?isNaN(this.columnHeaderHeight)&&(this.columnHeaderHeight=(0,n.outerHeight)(this.wtTable.THEAD)):this.columnHeaderHeight=0,this.columnHeaderHeight}getViewportHeight(){let e=this.getWorkspaceHeight();if(e===1/0)return e;const t=this.getColumnHeaderHeight();return t>0&&(e-=t),e}getRowHeaderWidth(){const e=this.wtSettings.getSetting("rowHeaderWidth"),t=this.wtSettings.getSetting("rowHeaders");if(e){this.rowHeaderWidth=0;for(let r=0,n=t.length;r<n;r++)this.rowHeaderWidth+=e[r]||e}if(isNaN(this.rowHeaderWidth))if(t.length){let e=this.wtTable.TABLE.querySelector("TH");this.rowHeaderWidth=0;for(let r=0,s=t.length;r<s;r++)e?(this.rowHeaderWidth+=(0,n.outerWidth)(e),e=e.nextSibling):this.rowHeaderWidth+=50}else this.rowHeaderWidth=0;return this.rowHeaderWidth=this.wtSettings.getSetting("onModifyRowHeaderWidth",this.rowHeaderWidth)||this.rowHeaderWidth,this.rowHeaderWidth}getViewportWidth(){const e=this.getWorkspaceWidth();if(e===1/0)return e;const t=this.getRowHeaderWidth();return t>0?e-t:e}createRowsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:r}=this;let s,o,a=this.getViewportHeight();this.rowHeaderWidth=NaN;let l=this.dataAccessObject.topScrollPosition-this.dataAccessObject.topParentOffset;const h=t.getSetting("fixedRowsTop"),u=t.getSetting("fixedRowsBottom"),c=t.getSetting("totalRows");return h&&l>=0&&(o=this.dataAccessObject.topOverlay.sumCellSizes(0,h),l+=o,a-=o),u&&this.dataAccessObject.bottomOverlay.clone&&(o=this.dataAccessObject.bottomOverlay.sumCellSizes(c-u,c),a-=o),s=r.holder.clientHeight===r.holder.offsetHeight?0:(0,n.getScrollbarWidth)(this.domBindings.rootDocument),new i.ViewportRowsCalculator({calculationTypes:e.map((e=>[e,this.rowsCalculatorTypes.get(e)()])),viewportHeight:a,scrollOffset:l,totalRows:t.getSetting("totalRows"),rowHeightFn:e=>r.getRowHeight(e),overrideFn:t.getSettingPure("viewportRowCalculatorOverride"),horizontalScrollbarHeight:s})}createColumnsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:r}=this;let s=this.getViewportWidth(),o=Math.abs(this.dataAccessObject.inlineStartScrollPosition)-this.dataAccessObject.inlineStartParentOffset;this.columnHeaderHeight=NaN;const a=t.getSetting("fixedColumnsStart");if(a&&o>=0){const e=this.dataAccessObject.inlineStartOverlay.sumCellSizes(0,a);o+=e,s-=e}return r.holder.clientWidth!==r.holder.offsetWidth&&(s-=(0,n.getScrollbarWidth)(this.domBindings.rootDocument)),new i.ViewportColumnsCalculator({calculationTypes:e.map((e=>[e,this.columnsCalculatorTypes.get(e)()])),viewportWidth:s,scrollOffset:o,totalColumns:t.getSetting("totalColumns"),columnWidthFn:e=>r.getColumnWidth(e),overrideFn:t.getSettingPure("viewportColumnCalculatorOverride"),inlineStartOffset:this.dataAccessObject.inlineStartParentOffset})}createCalculators(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,r=this.createRowsCalculator(),n=this.createColumnsCalculator();if(e&&!t.getSetting("renderAllRows")){const t=r.getResultsFor("fullyVisible");e=this.areAllProposedVisibleRowsAlreadyRendered(t)}if(e&&!t.getSetting("renderAllColumns")){const t=n.getResultsFor("fullyVisible");e=this.areAllProposedVisibleColumnsAlreadyRendered(t)}return e||(this.rowsRenderCalculator=r.getResultsFor("rendered"),this.columnsRenderCalculator=n.getResultsFor("rendered")),this.rowsVisibleCalculator=r.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=n.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=r.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=n.getResultsFor("partiallyVisible"),e}createVisibleCalculators(){const e=this.createRowsCalculator(["fullyVisible","partiallyVisible"]),t=this.createColumnsCalculator(["fullyVisible","partiallyVisible"]);this.rowsVisibleCalculator=e.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=t.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=e.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=t.getResultsFor("partiallyVisible")}areAllProposedVisibleRowsAlreadyRendered(e){if(!this.rowsVisibleCalculator)return!1;let{startRow:t,endRow:r}=e;if(null===t&&null===r){if(!e.isVisibleInTrimmingContainer)return!0;t=this.rowsPartiallyVisibleCalculator.startRow,r=this.rowsPartiallyVisibleCalculator.endRow}const{startRow:n,endRow:s}=this.rowsRenderCalculator;return!(t<n||t===n&&t>0)&&!(r>s||r===s&&r<this.wtSettings.getSetting("totalRows")-1)}areAllProposedVisibleColumnsAlreadyRendered(e){if(!this.columnsVisibleCalculator)return!1;let{startColumn:t,endColumn:r}=e;if(null===t&&null===r){if(!e.isVisibleInTrimmingContainer)return!0;t=this.columnsPartiallyVisibleCalculator.startColumn,r=this.columnsPartiallyVisibleCalculator.endColumn}const{startColumn:n,endColumn:s}=this.columnsRenderCalculator;return!(t<n||t===n&&t>0)&&!(r>s||r===s&&r<this.wtSettings.getSetting("totalColumns")-1)}resetHasOversizedColumnHeadersMarked(){(0,s.objectEach)(this.hasOversizedColumnHeadersMarked,((e,t,r)=>{r[t]=void 0}))}}},25188:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(6254),r(20512),r(23844),r(38594);var s=n(r(87910)),i=r(26048),o=r(56988),a=n(r(37056)),l=r(63055),h=r(36528),u=r(96431),c=r(47009),d=r(6697);function p(e,t){const r=new s.default(e,t||{},i.rootInstanceSymbol);return r.init(),r}t.CellCoords=d.CellCoords,t.CellRange=d.CellRange,(0,h.registerCellType)(u.TextCellType),p.editors={BaseEditor:c.BaseEditor},p.Core=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new s.default(e,t,i.rootInstanceSymbol)},p.DefaultSettings=(0,o.metaSchemaFactory)(),p.hooks=a.default.getSingleton(),p.CellCoords=d.CellCoords,p.CellRange=d.CellRange,p.packageName="handsontable",p.buildDate="30/09/2024 12:35:03",p.version="14.6.0",p.languages={dictionaryKeys:l.dictionaryKeys,getLanguageDictionary:l.getLanguageDictionary,getLanguagesDictionaries:l.getLanguagesDictionaries,registerLanguageDictionary:l.registerLanguageDictionary,getTranslatedPhrase:l.getTranslatedPhrase};t.default=p},87222:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(29328),s=r(19920),i=r(80179);const o=t.CELL_TYPE="autocomplete";t.AutocompleteCellType={CELL_TYPE:o,editor:n.AutocompleteEditor,renderer:s.autocompleteRenderer,validator:i.autocompleteValidator}},44760:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(87222);t.AutocompleteCellType=n.AutocompleteCellType,t.CELL_TYPE=n.CELL_TYPE},24976:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(78457),s=r(97177);const i=t.CELL_TYPE="checkbox";t.CheckboxCellType={CELL_TYPE:i,editor:n.CheckboxEditor,renderer:s.checkboxRenderer}},65517:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(24976);t.CELL_TYPE=n.CELL_TYPE,t.CheckboxCellType=n.CheckboxCellType},46330:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(66436),s=r(8920),i=r(64228);const o=t.CELL_TYPE="date";t.DateCellType={CELL_TYPE:o,editor:n.DateEditor,renderer:s.dateRenderer,validator:i.dateValidator}},64936:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(46330);t.CELL_TYPE=n.CELL_TYPE,t.DateCellType=n.DateCellType},82464:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(54185),s=r(3001),i=r(44795);const o=t.CELL_TYPE="dropdown";t.DropdownCellType={CELL_TYPE:o,editor:n.DropdownEditor,renderer:s.dropdownRenderer,validator:i.dropdownValidator}},47041:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(82464);t.CELL_TYPE=n.CELL_TYPE,t.DropdownCellType=n.DropdownCellType},37648:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(76545),s=r(94553);const i=t.CELL_TYPE="handsontable";t.HandsontableCellType={CELL_TYPE:i,editor:n.HandsontableEditor,renderer:s.handsontableRenderer}},7661:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(37648);t.CELL_TYPE=n.CELL_TYPE,t.HandsontableCellType=n.HandsontableCellType},39151:(e,t,r)=>{"use strict";t.__esModule=!0,t.registerAllCellTypes=function(){(0,p.registerCellType)(n.AutocompleteCellType),(0,p.registerCellType)(s.CheckboxCellType),(0,p.registerCellType)(i.DateCellType),(0,p.registerCellType)(o.DropdownCellType),(0,p.registerCellType)(a.HandsontableCellType),(0,p.registerCellType)(l.NumericCellType),(0,p.registerCellType)(h.PasswordCellType),(0,p.registerCellType)(u.SelectCellType),(0,p.registerCellType)(c.TextCellType),(0,p.registerCellType)(d.TimeCellType)};var n=r(44760);t.AutocompleteCellType=n.AutocompleteCellType,t.AUTOCOMPLETE_TYPE=n.CELL_TYPE;var s=r(65517);t.CheckboxCellType=s.CheckboxCellType,t.CHECKBOX_TYPE=s.CELL_TYPE;var i=r(64936);t.DateCellType=i.DateCellType,t.DATE_TYPE=i.CELL_TYPE;var o=r(47041);t.DropdownCellType=o.DropdownCellType,t.DROPDOWN_TYPE=o.CELL_TYPE;var a=r(7661);t.HandsontableCellType=a.HandsontableCellType,t.HANDSONTABLE_TYPE=a.CELL_TYPE;var l=r(26523);t.NumericCellType=l.NumericCellType,t.NUMERIC_TYPE=l.CELL_TYPE;var h=r(33685);t.PasswordCellType=h.PasswordCellType,t.PASSWORD_TYPE=h.CELL_TYPE;var u=r(92292);t.SelectCellType=u.SelectCellType,t.SELECT_TYPE=u.CELL_TYPE;var c=r(96431);t.TextCellType=c.TextCellType,t.TEXT_TYPE=c.CELL_TYPE;var d=r(79301);t.TimeCellType=d.TimeCellType,t.TIME_TYPE=d.CELL_TYPE;var p=r(36528);t.registerCellType=p.registerCellType,t.getCellType=p.getCellType,t.getRegisteredCellTypeNames=p.getRegisteredCellTypeNames,t.getRegisteredCellTypes=p.getRegisteredCellTypes,t.hasCellType=p.hasCellType},26523:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(57032);t.CELL_TYPE=n.CELL_TYPE,t.NumericCellType=n.NumericCellType},57032:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(59889),s=r(73981),i=r(42777);const o=t.CELL_TYPE="numeric";t.NumericCellType={CELL_TYPE:o,editor:n.NumericEditor,renderer:s.numericRenderer,validator:i.numericValidator,dataType:"number"}},33685:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(41288);t.CELL_TYPE=n.CELL_TYPE,t.PasswordCellType=n.PasswordCellType},41288:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(14961),s=r(7473);const i=t.CELL_TYPE="password";t.PasswordCellType={CELL_TYPE:i,editor:n.PasswordEditor,renderer:s.passwordRenderer,copyable:!1}},36528:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.getCellType=function(e){if(!u(e))throw Error(`You declared cell type "${e}" as a string that is not mapped to a known object.\n                 Cell type must be an object or a string mapped to an object registered by\n                 "Handsontable.cellTypes.registerCellType" method`);return h(e)},t.registerCellType=function(e,t){"string"!=typeof e&&(e=(t=e).CELL_TYPE);const{editor:r,renderer:n,validator:s}=t;r&&(0,i.registerEditor)(e,r);n&&(0,o.registerRenderer)(e,n);s&&(0,a.registerValidator)(e,s);l(e,t)},r(67834);var s=n(r(45212)),i=r(39761),o=r(94539),a=r(19434);const{register:l,getItem:h,hasItem:u,getNames:c,getValues:d}=(0,s.default)("cellTypes");t.getRegisteredCellTypes=d,t.getRegisteredCellTypeNames=c,t.hasCellType=u},92292:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(34282);t.CELL_TYPE=n.CELL_TYPE,t.SelectCellType=n.SelectCellType},34282:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(51656),s=r(93276);const i=t.CELL_TYPE="select";t.SelectCellType={CELL_TYPE:i,editor:n.SelectEditor,renderer:s.selectRenderer}},96431:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(34712);t.CELL_TYPE=n.CELL_TYPE,t.TextCellType=n.TextCellType},34712:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043),s=r(6135);const i=t.CELL_TYPE="text";t.TextCellType={CELL_TYPE:i,editor:n.TextEditor,renderer:s.textRenderer}},79301:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(66884);t.CELL_TYPE=n.CELL_TYPE,t.TimeCellType=n.TimeCellType},66884:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(54837),s=r(38537),i=r(16691);const o=t.CELL_TYPE="time";t.TimeCellType={CELL_TYPE:o,editor:n.TimeEditor,renderer:s.timeRenderer,validator:i.timeValidator}},87910:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.default=function(e,t){var r,n=this;let H=arguments.length>2&&void 0!==arguments[2]&&arguments[2],F=this;const U=new h.default(F);let V,B,W,Y,j,G,z=!0;(0,T.hasValidParameter)(H)&&(0,T.registerAsRootInstance)(this);this.rootElement=e,this.rootDocument=e.ownerDocument,this.rootWindow=this.rootDocument.defaultView,this.isDestroyed=!1,this.renderSuspendedCounter=0,this.executionSuspendedCounter=0;const $=null!==(r=null==t?void 0:t.layoutDirection)&&void 0!==r?r:"inherit",K=["rtl","ltr"].includes($)?$:this.rootWindow.getComputedStyle(this.rootElement).direction;this.rootElement.setAttribute("dir",K),this.isRtl=function(){return"rtl"===K},this.isLtr=function(){return!F.isRtl()},this.getDirectionFactor=function(){return F.isLtr()?1:-1},t.language=(0,_.getValidLanguageCode)(t.language);const X=new O.MetaManager(F,t,[O.DynamicCellMetaMod,O.ExtendMetaPropertiesMod]),q=X.getTableMeta(),Q=X.getGlobalMeta(),Z=(0,x.createUniqueMap)();this.container=this.rootDocument.createElement("div"),this.renderCall=!1,e.insertBefore(this.container,e.firstChild),(0,T.isRootInstance)(this)&&(0,o._injectProductInfo)(t.licenseKey,e);this.guid=`ht_${(0,E.randomString)()}`,k.set(this.guid,this),this.columnIndexMapper=new S.IndexMapper,this.rowIndexMapper=new S.IndexMapper,this.columnIndexMapper.addLocalHook("indexesSequenceChange",(e=>{F.runHooks("afterColumnSequenceChange",e)})),this.rowIndexMapper.addLocalHook("indexesSequenceChange",(e=>{F.runHooks("afterRowSequenceChange",e)})),B=new v.default(F),this.rootElement.id&&"ht_"!==this.rootElement.id.substring(0,3)||(this.rootElement.id=this.guid);let J=new A.Selection(q,{rowIndexMapper:F.rowIndexMapper,columnIndexMapper:F.columnIndexMapper,countCols:()=>F.countCols(),countRows:()=>F.countRows(),propToCol:e=>V.propToCol(e),isEditorOpened:()=>!!F.getActiveEditor()&&F.getActiveEditor().isOpened(),countRenderableColumns:()=>this.view.countRenderableColumns(),countRenderableRows:()=>this.view.countRenderableRows(),countRowHeaders:()=>this.countRowHeaders(),countColHeaders:()=>this.countColHeaders(),countRenderableRowsInRange:function(){return n.view.countRenderableRowsInRange(...arguments)},countRenderableColumnsInRange:function(){return n.view.countRenderableColumnsInRange(...arguments)},getShortcutManager:()=>F.getShortcutManager(),createCellCoords:(e,t)=>F._createCellCoords(e,t),createCellRange:(e,t,r)=>F._createCellRange(e,t,r),visualToRenderableCoords:e=>{const{row:t,col:r}=e;return F._createCellCoords(t>=0?F.rowIndexMapper.getRenderableFromVisualIndex(t):t,r>=0?F.columnIndexMapper.getRenderableFromVisualIndex(r):r)},renderableToVisualCoords:e=>{const{row:t,col:r}=e;return F._createCellCoords(t>=0?F.rowIndexMapper.getVisualFromRenderableIndex(t):t,r>=0?F.columnIndexMapper.getVisualFromRenderableIndex(r):r)},findFirstNonHiddenRenderableRow:(e,t)=>{const r=t>e?1:-1,n=Math.min(e,t),s=Math.max(e,t),i=F.rowIndexMapper.getNearestNotHiddenIndex(e,r);return null===i||1===r&&i>s||-1===r&&i<n?null:i>=0?F.rowIndexMapper.getRenderableFromVisualIndex(i):i},findFirstNonHiddenRenderableColumn:(e,t)=>{const r=t>e?1:-1,n=Math.min(e,t),s=Math.max(e,t),i=F.columnIndexMapper.getNearestNotHiddenIndex(e,r);return null===i||1===r&&i>s||-1===r&&i<n?null:i>=0?F.columnIndexMapper.getRenderableFromVisualIndex(i):i},isDisabledCellSelection:(e,t)=>e<0||t<0?F.getSettings().disableVisualSelection:F.getCellMeta(e,t).disableVisualSelection});this.selection=J;const ee=e=>{let{hiddenIndexesChanged:t}=e;t&&this.selection.commit()};function te(e){const t=(0,b.normalizeLanguageCode)(e);(0,_.hasLanguageDictionary)(t)?(F.runHooks("beforeLanguageChange",t),Q.language=t,F.runHooks("afterLanguageChange",t)):(0,b.warnUserAboutLanguageRegistration)(e)}function re(e,t){const r="className"===e?F.rootElement:F.table;if(z)(0,s.addClass)(r,t);else{let n=[],i=[];Q[e]&&(n=Array.isArray(Q[e])?Q[e]:(0,d.stringToArray)(Q[e])),t&&(i=Array.isArray(t)?t:(0,d.stringToArray)(t));const o=(0,d.getDifferenceOfArrays)(n,i),a=(0,d.getDifferenceOfArrays)(i,n);o.length&&(0,s.removeClass)(r,o),a.length&&(0,s.addClass)(r,a)}Q[e]=t}function ne(){let e=!1;return{validatorsInQueue:0,valid:!0,addValidatorToQueue(){this.validatorsInQueue+=1,e=!1},removeValidatorFormQueue(){this.validatorsInQueue=this.validatorsInQueue-1<0?0:this.validatorsInQueue-1,this.checkIfQueueIsEmpty()},onQueueEmpty(){},checkIfQueueIsEmpty(){0===this.validatorsInQueue&&!1===e&&(e=!0,this.onQueueEmpty(this.valid))}}}function se(e){const t=e.replace(",",".");return!1===isNaN(parseFloat(t))?parseFloat(t):e}function ie(e,t,r){if(!e.length)return void r();const n=F.getActiveEditor(),s=new ne;let i=!0;s.onQueueEmpty=()=>{n&&i&&n.cancelChanges(),r()};for(let r=e.length-1;r>=0;r--){const[n,o,,a]=e[r],l=V.propToCol(o);let h;h=Number.isInteger(l)?F.getCellMeta(n,l):{...Object.getPrototypeOf(q),...q},"numeric"===h.type&&"string"==typeof a&&(0,w.isNumericLike)(a)&&(e[r][3]=se(a)),F.getCellValidator(h)&&(s.addValidatorToQueue(),F.validateCell(e[r][3],h,function(t,r){return function(n){if("boolean"!=typeof n)throw new Error("Validation error: result is not boolean");!1===n&&!1===r.allowInvalid&&(i=!1,e.splice(t,1),r.valid=!0),s.removeValidatorFormQueue()}}(r,h),t))}s.checkIfQueueIsEmpty()}function oe(e,t){for(let r=e.length-1;r>=0;r--){let n=!1;if(null!==e[r]){if(null!==e[r][2]&&void 0!==e[r][2]||null!==e[r][3]&&void 0!==e[r][3]){if(q.allowInsertRow)for(;e[r][0]>F.countRows()-1;){const{delta:e}=V.createRow(void 0,void 0,{source:t});if(0===e){n=!0;break}}if("array"===F.dataType&&(!q.columns||0===q.columns.length)&&q.allowInsertColumn)for(;V.propToCol(e[r][1])>F.countCols()-1;){const{delta:e}=V.createCol(void 0,void 0,{source:t});if(0===e){n=!0;break}}n||V.set(e[r][0],e[r][1],e[r][3])}}else e.splice(r,1)}const r=e.length>0;if(F.forceFullRender=!0,r){W.adjustRowsAndCols(),F.runHooks("beforeChangeRender",e,t),Y.closeEditor(),F.view.render(),Y.prepareEditor(),F.view.adjustElementsSize(),F.runHooks("afterChange",e,t||"edit");const r=F.getActiveEditor();r&&(0,o.isDefined)(r.refreshValue)&&r.refreshValue()}else F.view.render()}function ae(e,t,r){return Array.isArray(e)?e:[[e,t,r]]}function le(e,t){const r=F.getActiveEditor(),n=F.runHooks("beforeChange",e,t||"edit"),s=e.filter((e=>null!==e));return!1===n||0===s.length?(r&&r.cancelChanges(),[]):s}this.columnIndexMapper.addLocalHook("cacheUpdated",ee),this.rowIndexMapper.addLocalHook("cacheUpdated",ee),this.selection.addLocalHook("afterSetRangeEnd",((e,t)=>{const r=(0,u.createObjectPropListener)(!1),n=this.selection.getSelectedRange(),{from:i,to:o}=n.current(),a=n.size()-1;this.runHooks("afterSelection",i.row,i.col,o.row,o.col,r,a),this.runHooks("afterSelectionByProp",i.row,F.colToProp(i.col),o.row,F.colToProp(o.col),r,a),t&&(!r.isTouched()||r.isTouched()&&!r.value)&&G.scrollTo(e);const l=J.isSelectedByRowHeader(),h=J.isSelectedByColumnHeader();l&&h?(0,s.addClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]):l?((0,s.removeClass)(this.rootElement,"ht__selection--columns"),(0,s.addClass)(this.rootElement,"ht__selection--rows")):h?((0,s.removeClass)(this.rootElement,"ht__selection--rows"),(0,s.addClass)(this.rootElement,"ht__selection--columns")):(0,s.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),"shift"!==J.getSelectionSource()&&Y.closeEditor(null),F.view.render(),Y.prepareEditor()})),this.selection.addLocalHook("beforeSetFocus",(e=>{this.runHooks("beforeSelectionFocusSet",e.row,e.col)})),this.selection.addLocalHook("afterSetFocus",(e=>{const t=(0,u.createObjectPropListener)(!1);this.runHooks("afterSelectionFocusSet",e.row,e.col,t),(!t.isTouched()||t.isTouched()&&!t.value)&&G.scrollTo(e),Y.closeEditor(),F.view.render(),Y.prepareEditor()})),this.selection.addLocalHook("afterSelectionFinished",(e=>{const t=e.length-1,{from:r,to:n}=e[t];this.runHooks("afterSelectionEnd",r.row,r.col,n.row,n.col,t),this.runHooks("afterSelectionEndByProp",r.row,F.colToProp(r.col),n.row,F.colToProp(n.col),t)})),this.selection.addLocalHook("afterIsMultipleSelection",(e=>{const t=this.runHooks("afterIsMultipleSelection",e.value);e.value&&(e.value=t)})),this.selection.addLocalHook("afterDeselect",(()=>{Y.closeEditor(),F.view.render(),(0,s.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),this.runHooks("afterDeselect")})),this.selection.addLocalHook("beforeHighlightSet",(()=>this.runHooks("beforeSelectionHighlightSet"))).addLocalHook("beforeSetRangeStart",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSetRangeStart",...t)})).addLocalHook("beforeSetRangeStartOnly",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSetRangeStartOnly",...t)})).addLocalHook("beforeSetRangeEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSetRangeEnd",...t)})).addLocalHook("beforeSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSelectColumns",...t)})).addLocalHook("afterSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterSelectColumns",...t)})).addLocalHook("beforeSelectRows",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSelectRows",...t)})).addLocalHook("afterSelectRows",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterSelectRows",...t)})).addLocalHook("beforeModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("modifyTransformStart",...t)})).addLocalHook("afterModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterModifyTransformStart",...t)})).addLocalHook("beforeModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("modifyTransformFocus",...t)})).addLocalHook("afterModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterModifyTransformFocus",...t)})).addLocalHook("beforeModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("modifyTransformEnd",...t)})).addLocalHook("afterModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterModifyTransformEnd",...t)})).addLocalHook("beforeRowWrap",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeRowWrap",...t)})).addLocalHook("beforeColumnWrap",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeColumnWrap",...t)})).addLocalHook("insertRowRequire",(e=>this.alter("insert_row_above",e,1,"auto"))).addLocalHook("insertColRequire",(e=>this.alter("insert_col_start",e,1,"auto"))),W={alter(e,t){var r,n;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;const l=e=>{if(0===e.length)return[];const t=[...e];t.sort(((e,t)=>{let[r]=e,[n]=t;return r===n?0:r>n?1:-1}));return(0,d.arrayReduce)(t,((e,t)=>{let[r,n]=t;const s=e[e.length-1],[i,o]=s,a=i+o;if(r<=a){const e=Math.max(n-(a-r),0);s[1]+=e}else e.push([r,n]);return e}),[t[0]])};switch(e){case"insert_row_below":case"insert_row_above":const a=F.countSourceRows();if(q.maxRows===a)return;const h="insert_row_below"===e?"below":"above";t=null!==(r=t)&&void 0!==r?r:"below"===h?a:0;const{delta:u,startPhysicalIndex:c}=V.createRow(t,s,{source:i,mode:h});J.shiftRows(F.toVisualRow(c),u);break;case"insert_col_start":case"insert_col_end":const p="insert_col_end"===e?"end":"start";t=null!==(n=t)&&void 0!==n?n:"end"===p?F.countSourceCols():0;const{delta:g,startPhysicalIndex:f}=V.createCol(t,s,{source:i,mode:p});if(g){if(Array.isArray(q.colHeaders)){const e=[F.toVisualColumn(f),0];e.length+=g,Array.prototype.splice.apply(q.colHeaders,e)}J.shiftColumns(F.toVisualColumn(f),g)}break;case"remove_row":const m=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[r,n]=e;const s=(0,o.isEmpty)(r)?F.countRows()-1:Math.max(r-t,0);Number.isInteger(r)&&(r=Math.max(r-t,0));if(!V.removeRow(r,n,i))return;if(J.isSelected()){const{row:e}=F.getSelectedRangeLast().highlight;e>=r&&e<=r+n-1&&Y.closeEditor(!0)}const a=F.countRows();0===a?J.deselect():"ContextMenu.removeRow"===i?J.refresh():J.shiftRows(r,-n);const l=q.fixedRowsTop;l>=s+1&&(q.fixedRowsTop-=Math.min(n,l-s));const h=q.fixedRowsBottom;h&&s>=a-h&&(q.fixedRowsBottom-=Math.min(n,h)),t+=n}))};Array.isArray(t)?m(l(t)):m([[t,s]]);break;case"remove_col":const y=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[r,n]=e;const s=(0,o.isEmpty)(r)?F.countCols()-1:Math.max(r-t,0);let a=F.toPhysicalColumn(s);Number.isInteger(r)&&(r=Math.max(r-t,0));if(!V.removeCol(r,n,i))return;if(J.isSelected()){const{col:e}=F.getSelectedRangeLast().highlight;e>=r&&e<=r+n-1&&Y.closeEditor(!0)}0===F.countCols()?J.deselect():"ContextMenu.removeColumn"===i?J.refresh():J.shiftColumns(r,-n);const l=q.fixedColumnsStart;l>=s+1&&(q.fixedColumnsStart-=Math.min(n,l-s)),Array.isArray(q.colHeaders)&&(void 0===a&&(a=-1),q.colHeaders.splice(a,n)),t+=n}))};Array.isArray(t)?y(l(t)):y([[t,s]]);break;default:throw new Error(`There is no such action "${e}"`)}F.view.render(),a||W.adjustRowsAndCols()},adjustRowsAndCols(){const e=q.minRows,t=q.minSpareRows,r=q.minCols,n=q.minSpareCols;if(e){const t=F.countRows();t<e&&V.createRow(t,e-t,{source:"auto"})}if(t){const e=F.countEmptyRows(!0);if(e<t){const r=t-e,n=Math.min(r,q.maxRows-F.countSourceRows());V.createRow(F.countRows(),n,{source:"auto"})}}{let e;(r||n)&&(e=F.countEmptyCols(!0));let t=F.countCols();if(r&&!q.columns&&t<r){const n=r-t;e+=n,V.createCol(t,n,{source:"auto"})}if(n&&!q.columns&&"array"===F.dataType&&e<n){t=F.countCols();const r=n-e,s=Math.min(r,q.maxCols-t);V.createCol(t,s,{source:"auto"})}}F.view&&F.view.adjustElementsSize()},populateFromArray(e,t,r,n,s){let i,o,a,l;const h=[],c={},p=[],g=e.row,f=e.col;if(o=t.length,0===o)return!1;let m=0,y=0;switch((0,u.isObject)(r)&&(m=r.col-f+1,y=r.row-g+1),s){case"shift_down":const s=(0,d.pivot)(t),E=s.length,w=Math.max(E,m),C=F.getData().slice(g),v=(0,d.pivot)(C).slice(f,f+w);for(a=0;a<w;a+=1)if(a<E){for(i=0,o=s[a].length;i<y-o;i+=1)s[a].push(s[a][i%o]);a<v.length?p.push(s[a].concat(v[a])):p.push(s[a].concat(new Array(C.length).fill(null)))}else p.push(s[a%E].concat(v[a]));F.populateFromArray(g,f,(0,d.pivot)(p));break;case"shift_right":const R=t.length,S=Math.max(R,y),T=F.getData().slice(g).map((e=>e.slice(f)));for(i=0;i<S;i+=1)if(i<R){for(a=0,l=t[i].length;a<m-l;a+=1)t[i].push(t[i][a%l]);if(i<T.length)for(let e=0;e<T[i].length;e+=1)t[i].push(T[i][e]);else t[i].push(...new Array(T[0].length).fill(null))}else t.push(t[i%o].slice(0,S).concat(T[i]));F.populateFromArray(g,f,t);break;default:c.row=e.row,c.col=e.col;let N,M=0,_=0,b=!0;const A=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=t[e%t.length];return null!==r?n[r%n.length]:n},O=t.length,I=r?r.row-e.row+1:0;for(o=r?I:Math.max(O,I),i=0;i<o&&!(r&&c.row>r.row&&I>O||!q.allowInsertRow&&c.row>F.countRows()-1||c.row>=q.maxRows);i++){const t=i-M,s=A(t).length,d=r?r.col-e.col+1:0;if(l=r?d:Math.max(s,d),c.col=e.col,N=F.getCellMeta(c.row,c.col),"CopyPaste.paste"!==n&&"Autofill.fill"!==n||!N.skipRowOnPaste){for(_=0,a=0;a<l&&!(r&&c.col>r.col&&d>s||!q.allowInsertColumn&&c.col>F.countCols()-1||c.col>=q.maxCols);a++){if(N=F.getCellMeta(c.row,c.col),("CopyPaste.paste"===n||"Autofill.fill"===n)&&N.skipColumnOnPaste){_+=1,c.col+=1,l+=1;continue}if(N.readOnly&&"UndoRedo.undo"!==n){c.col+=1;continue}let e=A(t,a-_),r=F.getDataAtCell(c.row,c.col);if(null!==e&&"object"==typeof e)if(Array.isArray(e)&&null===r&&(r=[]),null===r||"object"!=typeof r)b=!1;else{const t=(0,u.duckSchema)(Array.isArray(r)?r:r[0]||r),n=(0,u.duckSchema)(Array.isArray(e)?e:e[0]||e);(0,u.isObjectEqual)(t,n)||Array.isArray(t)&&Array.isArray(n)?e=(0,u.deepClone)(e):b=!1}else null!==r&&"object"==typeof r&&(b=!1);b&&h.push([c.row,c.col,e]),b=!0,c.col+=1}c.row+=1}else M+=1,c.row+=1,o+=1}F.setDataAtCell(h,null,null,n||"populateFromArray")}}},this.init=function(){B.setData(q.data),F.runHooks("beforeInit"),((0,a.isMobileBrowser)()||(0,a.isIpadOS)())&&(0,s.addClass)(F.rootElement,"mobile"),this.updateSettings(q,!0),this.view=new C.default(this),Y=l.default.getInstance(F,q,J),G=(0,I.createViewportScroller)(F),j=new c.FocusManager(F),(0,T.isRootInstance)(this)&&(0,I.installFocusCatcher)(F),F.runHooks("init"),this.forceFullRender=!0,this.view.render(),z&&null===F.rootElement.offsetParent&&(0,s.observeVisibilityChangeOnce)(F.rootElement,(()=>{F.view._wt.wtOverlays.updateLastSpreaderSize(),F.render(),F.view.adjustElementsSize()})),"object"==typeof z&&(F.runHooks("afterChange",z[0],z[1]),z=!1),F.runHooks("afterInit")},this._createCellCoords=function(e,t){return F.view._wt.createCellCoords(e,t)},this._createCellRange=function(e,t,r){return F.view._wt.createCellRange(e,t,r)},this.validateCell=function(e,t,r,n){let s=F.getCellValidator(t);function a(e){if(!(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])||!0===t.hidden)return void r(e);const n=t.visualCol,s=t.visualRow,i=F.getCell(s,n,!0);if(i&&"TH"!==i.nodeName){const e=F.rowIndexMapper.getRenderableFromVisualIndex(s),t=F.columnIndexMapper.getRenderableFromVisualIndex(n);F.view._wt.getSetting("cellRenderer",e,t,i)}r(e)}var l;(0,o.isRegExp)(s)&&(l=s,s=function(e,t){t(l.test(e))}),(0,i.isFunction)(s)?(e=F.runHooks("beforeValidate",e,t.visualRow,t.prop,n),F._registerImmediate((()=>{s.call(t,e,(r=>{F&&(r=F.runHooks("afterValidate",r,e,t.visualRow,t.prop,n),t.valid=r,a(r),F.runHooks("postAfterValidate",r,e,t.visualRow,t.prop,n))}))}))):F._registerImmediate((()=>{t.valid=!0,a(t.valid,!1)}))},this.setDataAtCell=function(e,t,r,n){const s=ae(e,t,r),i=[];let o,a,l,h=n;for(o=0,a=s.length;o<a;o++){if("object"!=typeof s[o])throw new Error("Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter");if("number"!=typeof s[o][1])throw new Error("Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`");l=s[o][1]>=this.countCols()?s[o][1]:V.colToProp(s[o][1]),i.push([s[o][0],l,B.getAtCell(this.toPhysicalRow(s[o][0]),s[o][1]),s[o][2]])}h||"object"!=typeof e||(h=t);const u=le(i,n);F.runHooks("afterSetDataAtCell",u,h),ie(u,h,(()=>{oe(u,h)}))},this.setDataAtRowProp=function(e,t,r,n){const s=ae(e,t,r),i=[];let o,a,l=n;for(o=0,a=s.length;o<a;o++)i.push([s[o][0],s[o][1],B.getAtCell(this.toPhysicalRow(s[o][0]),s[o][1]),s[o][2]]);l||"object"!=typeof e||(l=t);const h=le(i,n);F.runHooks("afterSetDataAtRowProp",h,l),ie(h,l,(()=>{oe(h,l)}))},this.listen=function(){F&&!F.isListening()&&(k.forEach((e=>{F!==e&&e.unlisten()})),D=F.guid,F.runHooks("afterListen"))},this.unlisten=function(){this.isListening()&&(D=null,F.runHooks("afterUnlisten"))},this.isListening=function(){return D===F.guid},this.destroyEditor=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];Y.closeEditor(e),F.view.render(),t&&J.isSelected()&&Y.prepareEditor()},this.populateFromArray=function(e,t,r,n,s,i,o){if("object"!=typeof r||"object"!=typeof r[0])throw new Error("populateFromArray parameter `input` must be an array of arrays");const a="number"==typeof n?F._createCellCoords(n,s):null;return W.populateFromArray(F._createCellCoords(e,t),r,a,i,o)},this.spliceCol=function(e,t,r){for(var n=arguments.length,s=new Array(n>3?n-3:0),i=3;i<n;i++)s[i-3]=arguments[i];return V.spliceCol(e,t,r,...s)},this.spliceRow=function(e,t,r){for(var n=arguments.length,s=new Array(n>3?n-3:0),i=3;i<n;i++)s[i-3]=arguments[i];return V.spliceRow(e,t,r,...s)},this.getSelected=function(){if(J.isSelected())return(0,d.arrayMap)(J.getSelectedRange(),(e=>{let{from:t,to:r}=e;return[t.row,t.col,r.row,r.col]}))},this.getSelectedLast=function(){const e=this.getSelected();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.getSelectedRange=function(){if(J.isSelected())return Array.from(J.getSelectedRange())},this.getSelectedRangeLast=function(){const e=this.getSelectedRange();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.emptySelectedCells=function(e){if(!J.isSelected()||0===this.countRows()||0===this.countCols())return;const t=[];(0,d.arrayEach)(J.getSelectedRange(),(e=>{if(e.isSingleHeader())return;const r=e.getTopStartCorner(),n=e.getBottomEndCorner();(0,w.rangeEach)(r.row,n.row,(e=>{(0,w.rangeEach)(r.col,n.col,(r=>{this.getCellMeta(e,r).readOnly||t.push([e,r,null])}))}))})),t.length>0&&this.setDataAtCell(t,e)},this.isRenderSuspended=function(){return this.renderSuspendedCounter>0},this.suspendRender=function(){this.renderSuspendedCounter+=1},this.resumeRender=function(){const e=this.renderSuspendedCounter-1;this.renderSuspendedCounter=Math.max(e,0),this.isRenderSuspended()||e!==this.renderSuspendedCounter||(this.renderCall?this.render():F.view.render())},this.render=function(){this.view&&(this.renderCall=!0,this.forceFullRender=!0,this.isRenderSuspended()||F.view.render())},this.batchRender=function(e){this.suspendRender();const t=e();return this.resumeRender(),t},this.isExecutionSuspended=function(){return this.executionSuspendedCounter>0},this.suspendExecution=function(){this.executionSuspendedCounter+=1,this.columnIndexMapper.suspendOperations(),this.rowIndexMapper.suspendOperations()},this.resumeExecution=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.executionSuspendedCounter-1;this.executionSuspendedCounter=Math.max(t,0),(!this.isExecutionSuspended()&&t===this.executionSuspendedCounter||e)&&(this.columnIndexMapper.resumeOperations(),this.rowIndexMapper.resumeOperations())},this.batchExecution=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.suspendExecution();const r=e();return this.resumeExecution(t),r},this.batch=function(e){this.suspendRender(),this.suspendExecution();const t=e();return this.resumeExecution(),this.resumeRender(),t},this.refreshDimensions=function(){if(!F.view)return;const{width:e,height:t}=F.view.getLastSize(),{width:r,height:n}=F.rootElement.getBoundingClientRect(),s=r!==e||n!==t;!1===F.runHooks("beforeRefreshDimensions",{width:e,height:t},{width:r,height:n},s)||((s||F.view._wt.wtOverlays.scrollableElement===F.rootWindow)&&(F.view.setLastSize(r,n),F.render()),F.runHooks("afterRefreshDimensions",{width:e,height:t},{width:r,height:n},s))},this.updateData=function(e,t){(0,O.replaceData)(e,(e=>{V=e}),(e=>{V=e,F.columnIndexMapper.fitToLength(this.getInitialColumnCount()),F.rowIndexMapper.fitToLength(this.countSourceRows()),W.adjustRowsAndCols(),J.refresh()}),{hotInstance:F,dataMap:V,dataSource:B,internalSource:"updateData",source:t,metaManager:X,firstRun:z})},this.loadData=function(e,t){(0,O.replaceData)(e,(e=>{V=e}),(()=>{X.clearCellsCache(),F.initIndexMappers(),W.adjustRowsAndCols(),J.refresh(),z&&(z=[null,"loadData"])}),{hotInstance:F,dataMap:V,dataSource:B,internalSource:"loadData",source:t,metaManager:X,firstRun:z})},this.getInitialColumnCount=function(){const e=q.columns;let t=0;if(Array.isArray(e))t=e.length;else if((0,i.isFunction)(e))if("array"===F.dataType){const r=this.countSourceCols();for(let n=0;n<r;n+=1)e(n)&&(t+=1)}else"object"!==F.dataType&&"function"!==F.dataType||(t=V.colToPropCache.length);else if((0,o.isDefined)(q.dataSchema)){const e=V.getSchema();t=Array.isArray(e)?e.length:(0,u.deepObjectSize)(e)}else t=this.countSourceCols();return t},this.initIndexMappers=function(){this.columnIndexMapper.initToLength(this.getInitialColumnCount()),this.rowIndexMapper.initToLength(this.countSourceRows())},this.getData=function(e,t,r,n){return(0,o.isUndefined)(e)?V.getAll():V.getRange(F._createCellCoords(e,t),F._createCellCoords(r,n),V.DESTINATION_RENDERER)},this.getCopyableText=function(e,t,r,n){return V.getCopyableText(F._createCellCoords(e,t),F._createCellCoords(r,n))},this.getCopyableData=function(e,t){return V.getCopyable(e,V.colToProp(t))},this.getSchema=function(){return V.getSchema()},this.updateSettings=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=(z?F.loadData:F.updateData).bind(this);let n,s,a=!1;if((0,o.isDefined)(e.rows))throw new Error('The "rows" setting is no longer supported. Do you mean startRows, minRows or maxRows?');if((0,o.isDefined)(e.cols))throw new Error('The "cols" setting is no longer supported. Do you mean startCols, minCols or maxCols?');if((0,o.isDefined)(e.ganttChart))throw new Error('Since 8.0.0 the "ganttChart" setting is no longer supported.');for(n in e)"data"===n||("language"===n?te(e.language):"className"===n?re("className",e.className):"tableClassName"===n&&F.table?(re("tableClassName",e.tableClassName),F.view._wt.wtOverlays.syncOverlayTableClassNames()):M.default.getSingleton().isRegistered(n)||M.default.getSingleton().isDeprecated(n)?((0,i.isFunction)(e[n])||Array.isArray(e[n]))&&(e[n].initialHook=!0,F.addHook(n,e[n])):!t&&(0,u.hasOwnProperty)(e,n)&&(Q[n]=e[n]));void 0===e.data&&void 0===q.data?r(null,"updateSettings"):void 0!==e.data?r(e.data,"updateSettings"):void 0!==e.columns&&(V.createMap(),F.initIndexMappers());const l=F.countCols(),h=q.columns;if(h&&(0,i.isFunction)(h)&&(a=!0),void 0===e.cell&&void 0===e.cells&&void 0===e.columns||X.clearCache(),l>0)for(n=0,s=0;n<l;n++){if(h){const e=a?h(n):h[s];e&&X.updateColumnMeta(s,e)}s+=1}(0,o.isDefined)(e.cell)&&(0,u.objectEach)(e.cell,(e=>{F.setCellMetaObject(e.row,e.col,e)})),F.runHooks("afterCellMetaReset");let c=F.rootElement.style.height;""!==c&&(c=parseInt(F.rootElement.style.height,10));let d=e.height;if((0,i.isFunction)(d)&&(d=d()),t){F.rootElement.getAttribute("style")&&F.rootElement.setAttribute("data-initialstyle",F.rootElement.getAttribute("style"))}if(null===d){const e=F.rootElement.getAttribute("data-initialstyle");e&&(e.indexOf("height")>-1||e.indexOf("overflow")>-1)?F.rootElement.setAttribute("style",e):(F.rootElement.style.height="",F.rootElement.style.overflow="")}else void 0!==d&&(F.rootElement.style.height=isNaN(d)?`${d}`:`${d}px`,F.rootElement.style.overflow="hidden");if(void 0!==e.width){let t=e.width;(0,i.isFunction)(t)&&(t=t()),F.rootElement.style.width=isNaN(t)?`${t}`:`${t}px`}t||(F.view&&(F.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked(),F.view._wt.exportSettingsAsClassNames()),F.runHooks("afterUpdateSettings",e)),W.adjustRowsAndCols(),F.view&&!z&&(F.forceFullRender=!0,F.view.render(),F.view._wt.wtOverlays.adjustElementsSize()),t||!F.view||""!==c&&""!==d&&void 0!==d||c===d||F.view._wt.wtOverlays.updateMainScrollableElements()},this.getValue=function(){const e=F.getSelectedLast();if(q.getValue){if((0,i.isFunction)(q.getValue))return q.getValue.call(F);if(e)return F.getData()[e[0][0]][q.getValue]}else if(e)return F.getDataAtCell(e[0],e[1])},this.getSettings=function(){return q},this.clear=function(){this.selectAll(),this.emptySelectedCells()},this.alter=function(e,t,r,n,s){W.alter(e,t,r,n,s)},this.getCell=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t,s=e;if(t>=0){if(this.columnIndexMapper.isHidden(this.toPhysicalColumn(t)))return null;n=this.columnIndexMapper.getRenderableFromVisualIndex(t)}if(e>=0){if(this.rowIndexMapper.isHidden(this.toPhysicalRow(e)))return null;s=this.rowIndexMapper.getRenderableFromVisualIndex(e)}return null===s||null===n||void 0===s||void 0===n?null:F.view.getCellAtCoords(F._createCellCoords(s,n),r)},this.getCoords=function(e){const t=this.view._wt.wtTable.getCoords(e);if(null===t)return null;const{row:r,col:n}=t;let s=r,i=n;return r>=0&&(s=this.rowIndexMapper.getVisualFromRenderableIndex(r)),n>=0&&(i=this.columnIndexMapper.getVisualFromRenderableIndex(n)),F._createCellCoords(s,i)},this.colToProp=function(e){return V.colToProp(e)},this.propToCol=function(e){return V.propToCol(e)},this.toVisualRow=e=>this.rowIndexMapper.getVisualFromPhysicalIndex(e),this.toVisualColumn=e=>this.columnIndexMapper.getVisualFromPhysicalIndex(e),this.toPhysicalRow=e=>this.rowIndexMapper.getPhysicalFromVisualIndex(e),this.toPhysicalColumn=e=>this.columnIndexMapper.getPhysicalFromVisualIndex(e),this.getDataAtCell=function(e,t){return V.get(e,V.colToProp(t))},this.getDataAtRowProp=function(e,t){return V.get(e,t)},this.getDataAtCol=function(e){const t=[],r=V.getRange(F._createCellCoords(0,e),F._createCellCoords(q.data.length-1,e),V.DESTINATION_RENDERER);for(let e=0;e<r.length;e+=1)for(let n=0;n<r[e].length;n+=1)t.push(r[e][n]);return t},this.getDataAtProp=function(e){const t=[],r=V.getRange(F._createCellCoords(0,V.propToCol(e)),F._createCellCoords(q.data.length-1,V.propToCol(e)),V.DESTINATION_RENDERER);for(let e=0;e<r.length;e+=1)for(let n=0;n<r[e].length;n+=1)t.push(r[e][n]);return t},this.getSourceData=function(e,t,r,n){let s;return s=void 0===e?B.getData():B.getByRange(F._createCellCoords(e,t),F._createCellCoords(r,n)),s},this.getSourceDataArray=function(e,t,r,n){let s;return s=void 0===e?B.getData(!0):B.getByRange(F._createCellCoords(e,t),F._createCellCoords(r,n),!0),s},this.getSourceDataAtCol=function(e){return B.getAtColumn(e)},this.setSourceDataAtCell=function(e,t,r,n){const s=ae(e,t,r),i=this.hasHook("afterSetSourceDataAtCell"),a=[];i&&(0,d.arrayEach)(s,(e=>{let[t,r,n]=e;a.push([t,r,B.getAtCell(t,r),n])})),(0,d.arrayEach)(s,(e=>{let[t,r,n]=e;B.setAtCell(t,r,n)})),i&&this.runHooks("afterSetSourceDataAtCell",a,n),this.render();const l=F.getActiveEditor();l&&(0,o.isDefined)(l.refreshValue)&&l.refreshValue()},this.getSourceDataAtRow=function(e){return B.getAtRow(e)},this.getSourceDataAtCell=function(e,t){return B.getAtCell(e,t)},this.getDataAtRow=function(e){return V.getRange(F._createCellCoords(e,0),F._createCellCoords(e,this.countCols()-1),V.DESTINATION_RENDERER)[0]||[]},this.getDataType=function(e,t,r,n){const s=void 0===e?[0,0,this.countRows(),this.countCols()]:[e,t,r,n],[i,o]=s;let[,,a,l]=s,h=null,u=null;void 0===a&&(a=i),void 0===l&&(l=o);let c="mixed";return(0,w.rangeEach)(Math.max(Math.min(i,a),0),Math.max(i,a),(e=>{let t=!0;return(0,w.rangeEach)(Math.max(Math.min(o,l),0),Math.max(o,l),(r=>{const n=this.getCellMeta(e,r);return u=n.type,h?t=h===u:h=u,t})),c=t?u:"mixed",t})),c},this.removeCellMeta=function(e,t,r){const[n,s]=[this.toPhysicalRow(e),this.toPhysicalColumn(t)];let i=X.getCellMetaKeyValue(n,s,r);!1!==F.runHooks("beforeRemoveCellMeta",e,t,r,i)&&(X.removeCellMeta(n,s,r),F.runHooks("afterRemoveCellMeta",e,t,r,i)),i=null},this.spliceCellsMeta=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var r=arguments.length,n=new Array(r>2?r-2:0),s=2;s<r;s++)n[s-2]=arguments[s];if(n.length>0&&!Array.isArray(n[0]))throw new Error("The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.");t>0&&X.removeRow(this.toPhysicalRow(e),t),n.length>0&&(0,d.arrayEach)(n.reverse(),(t=>{X.createRow(this.toPhysicalRow(e)),(0,d.arrayEach)(t,((t,r)=>this.setCellMetaObject(e,r,t)))})),F.render()},this.setCellMetaObject=function(e,t,r){"object"==typeof r&&(0,u.objectEach)(r,((r,n)=>{this.setCellMeta(e,t,n,r)}))},this.setCellMeta=function(e,t,r,n){if(!1===F.runHooks("beforeSetCellMeta",e,t,r,n))return;let s=e,i=t;e<this.countRows()&&(s=this.toPhysicalRow(e)),t<this.countCols()&&(i=this.toPhysicalColumn(t)),X.setCellMeta(s,i,r,n),F.runHooks("afterSetCellMeta",e,t,r,n)},this.getCellsMeta=function(){return X.getCellsMeta()},this.getCellMeta=function(e,t){let r=this.toPhysicalRow(e),n=this.toPhysicalColumn(t);return null===r&&(r=e),null===n&&(n=t),X.getCellMeta(r,n,{visualRow:e,visualColumn:t})},this.getColumnMeta=function(e){return X.getColumnMeta(this.toPhysicalColumn(e))},this.getCellMetaAtRow=function(e){return X.getCellsMetaAtRow(e)},this.isColumnModificationAllowed=function(){return!("object"===F.dataType||q.columns)},this.getCellRenderer=function(e,t){const r="number"==typeof e?F.getCellMeta(e,t).renderer:e.renderer;return"string"==typeof r?(0,f.getRenderer)(r):(0,o.isUndefined)(r)?(0,f.getRenderer)("text"):r},this.getCellEditor=function(e,t){const r="number"==typeof e?F.getCellMeta(e,t).editor:e.editor;return"string"==typeof r?(0,m.getEditor)(r):(0,o.isUndefined)(r)?(0,m.getEditor)("text"):r},this.getCellValidator=function(e,t){const r="number"==typeof e?F.getCellMeta(e,t).validator:e.validator;return"string"==typeof r?(0,y.getValidator)(r):r},this.validateCells=function(e){this._validateCells(e)},this.validateRows=function(e,t){if(!Array.isArray(e))throw new Error("validateRows parameter `rows` must be an array");this._validateCells(t,e)},this.validateColumns=function(e,t){if(!Array.isArray(e))throw new Error("validateColumns parameter `columns` must be an array");this._validateCells(t,void 0,e)},this._validateCells=function(e,t,r){const n=new ne;e&&(n.onQueueEmpty=e);let s=F.countRows()-1;for(;s>=0;){if(void 0!==t&&-1===t.indexOf(s)){s-=1;continue}let e=F.countCols()-1;for(;e>=0;)void 0===r||-1!==r.indexOf(e)?(n.addValidatorToQueue(),F.validateCell(F.getDataAtCell(s,e),F.getCellMeta(s,e),(e=>{if("boolean"!=typeof e)throw new Error("Validation error: result is not boolean");!1===e&&(n.valid=!1),n.removeValidatorFormQueue()}),"validateCells"),e-=1):e-=1;s-=1}n.checkIfQueueIsEmpty()},this.getRowHeader=function(e){let t=q.rowHeaders,r=e;return void 0!==r&&(r=F.runHooks("modifyRowHeader",r)),void 0===r?(t=[],(0,w.rangeEach)(F.countRows()-1,(e=>{t.push(F.getRowHeader(e))}))):Array.isArray(t)&&void 0!==t[r]?t=t[r]:(0,i.isFunction)(t)?t=t(r):t&&"string"!=typeof t&&"number"!=typeof t&&(t=r+1),t},this.hasRowHeaders=function(){return!!q.rowHeaders},this.hasColHeaders=function(){if(void 0!==q.colHeaders&&null!==q.colHeaders)return!!q.colHeaders;for(let e=0,t=F.countCols();e<t;e++)if(F.getColHeader(e))return!0;return!1},this.getColHeader=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;const r=F.runHooks("modifyColHeader",e);if(void 0===r){const e=[],t=F.countCols();for(let r=0;r<t;r++)e.push(F.getColHeader(r));return e}let n=q.colHeaders;const s=F.toPhysicalColumn(r),o=function(e){const t=[],r=F.countCols();let n=0;for(;n<r;n++)(0,i.isFunction)(q.columns)&&q.columns(n)&&t.push(n);return t[e]}(s);return!1===q.colHeaders?n=null:q.columns&&(0,i.isFunction)(q.columns)&&q.columns(o)&&q.columns(o).title?n=q.columns(o).title:q.columns&&q.columns[s]&&q.columns[s].title?n=q.columns[s].title:Array.isArray(q.colHeaders)&&void 0!==q.colHeaders[s]?n=q.colHeaders[s]:(0,i.isFunction)(q.colHeaders)?n=q.colHeaders(s):q.colHeaders&&"string"!=typeof q.colHeaders&&"number"!=typeof q.colHeaders&&(n=(0,R.spreadsheetColumnLabel)(r)),n=F.runHooks("modifyColumnHeaderValue",n,e,t),n},this._getColWidthFromSettings=function(e){let t;if(e>=0){t=F.getCellMeta(0,e).width}if(void 0!==t&&t!==q.width||(t=q.colWidths),null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getColWidth=function(e){let t=F._getColWidthFromSettings(e);return t=F.runHooks("modifyColWidth",t,e),void 0===t&&(t=N.DEFAULT_COLUMN_WIDTH),t},this._getRowHeightFromSettings=function(e){let t=q.rowHeights;if(null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getRowHeight=function(e){let t=F._getRowHeightFromSettings(e);return t=F.runHooks("modifyRowHeight",t,e),t},this.countSourceRows=function(){return B.countRows()},this.countSourceCols=function(){return B.countFirstRowKeys()},this.countRows=function(){return V.getLength()},this.countCols=function(){const e=q.maxCols,t=this.columnIndexMapper.getNotTrimmedIndexesLength();return Math.min(e,t)},this.countRenderedRows=function(){return F.view._wt.drawn?F.view._wt.wtTable.getRenderedRowsCount():-1},this.countVisibleRows=function(){return F.view._wt.drawn?F.view._wt.wtTable.getVisibleRowsCount():-1},this.countRenderedCols=function(){return F.view._wt.drawn?F.view._wt.wtTable.getRenderedColumnsCount():-1},this.countVisibleCols=function(){return F.view._wt.drawn?F.view._wt.wtTable.getVisibleColumnsCount():-1},this.countRowHeaders=function(){return this.view.getRowHeadersCount()},this.countColHeaders=function(){return this.view.getColumnHeadersCount()},this.countEmptyRows=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,w.rangeEachReverse)(F.countRows()-1,(r=>{if(F.isEmptyRow(r))t+=1;else if(!0===e)return!1})),t},this.countEmptyCols=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,w.rangeEachReverse)(F.countCols()-1,(r=>{if(F.isEmptyCol(r))t+=1;else if(!0===e)return!1})),t},this.isEmptyRow=function(e){return q.isEmptyRow.call(F,e)},this.isEmptyCol=function(e){return q.isEmptyCol.call(F,e)},this.selectCell=function(e,t,r,n){let s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return!(0,o.isUndefined)(e)&&!(0,o.isUndefined)(t)&&this.selectCells([[e,t,r,n]],s,i)},this.selectCells=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[[]],t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&G.suspend();const r=J.selectCells(e);return r&&t&&F.listen(),G.resume(),r},this.selectColumns=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2?arguments[2]:void 0;return J.selectColumns(e,t,r)},this.selectRows=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2?arguments[2]:void 0;return J.selectRows(e,t,r)},this.deselectCell=function(){J.deselect()},this.selectAll=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2?arguments[2]:void 0;G.skipNextScrollCycle(),J.selectAll(e,t,r)};const he=(e,t)=>e.getNearestNotHiddenIndex(t,1,!0);this.scrollViewportTo=function(e){var t,r;"number"==typeof e&&(e={row:arguments[0],col:arguments[1],verticalSnap:arguments[2]?"bottom":"top",horizontalSnap:arguments[3]?"end":"start",considerHiddenIndexes:null===(r=arguments[4])||void 0===r||r});const{row:n,col:s,verticalSnap:i,horizontalSnap:o,considerHiddenIndexes:a}=null!==(t=e)&&void 0!==t?t:{};let l,h,u,c;void 0!==i&&(l="top"===i,h=!l),void 0!==o&&(u="start"===o,c=!u);let d=n,p=s;if(void 0===a||a){const e=Number.isInteger(n)&&n>=0,t=Number.isInteger(s)&&s>=0,r=e?he(this.rowIndexMapper,n):void 0,i=t?he(this.columnIndexMapper,s):void 0;if(null===r||null===i)return!1;d=e?F.rowIndexMapper.getRenderableFromVisualIndex(r):n,p=t?F.columnIndexMapper.getRenderableFromVisualIndex(i):s}const g=Number.isInteger(d),f=Number.isInteger(p);return g&&d>=0&&f&&p>=0?F.view.scrollViewport(F._createCellCoords(d,p),l,c,h,u):g&&d>=0&&(f&&p<0||!f)?F.view.scrollViewportVertically(d,l,h):!!(f&&p>=0&&(g&&d<0||!g))&&F.view.scrollViewportHorizontally(p,c,u)},this.scrollToFocusedCell=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>{};if(!this.selection.isSelected())return;this.addHookOnce("afterScroll",e);const{highlight:t}=this.getSelectedRangeLast();this.scrollViewportTo(t.toObject())?this.view.render():(this.removeHook("afterScroll",e),this._registerImmediate((()=>e())))},this.destroy=function(){if(F._clearTimeouts(),F._clearImmediates(),F.view&&F.view.destroy(),B&&B.destroy(),B=null,this.getShortcutManager().destroy(),X.clearCache(),k.delete(this.guid),(0,T.isRootInstance)(F)){const e=this.rootDocument.querySelector(".hot-display-license-info");e&&e.parentNode.removeChild(e)}(0,s.empty)(F.rootElement),U.destroy(),Y&&Y.destroy(),F.batchExecution((()=>{F.rowIndexMapper.unregisterAll(),F.columnIndexMapper.unregisterAll(),Z.getItems().forEach((e=>{let[,t]=e;t.destroy()})),Z.clear(),F.runHooks("afterDestroy")}),!0),M.default.getSingleton().destroy(F),(0,u.objectEach)(F,((e,t,r)=>{var n;(0,i.isFunction)(e)?r[t]=(n=t,()=>{throw new Error(`The "${n}" method cannot be called because this Handsontable instance has been destroyed`)}):"guid"!==t&&(r[t]=null)})),F.isDestroyed=!0,V&&V.destroy(),V=null,W=null,J=null,Y=null,F=null},this.getActiveEditor=function(){return Y.getActiveEditor()},this.getFirstRenderedVisibleRow=function(){return F.view.getFirstRenderedVisibleRow()},this.getLastRenderedVisibleRow=function(){return F.view.getLastRenderedVisibleRow()},this.getFirstRenderedVisibleColumn=function(){return F.view.getFirstRenderedVisibleColumn()},this.getLastRenderedVisibleColumn=function(){return F.view.getLastRenderedVisibleColumn()},this.getFirstFullyVisibleRow=function(){return F.view.getFirstFullyVisibleRow()},this.getLastFullyVisibleRow=function(){return F.view.getLastFullyVisibleRow()},this.getFirstFullyVisibleColumn=function(){return F.view.getFirstFullyVisibleColumn()},this.getLastFullyVisibleColumn=function(){return F.view.getLastFullyVisibleColumn()},this.getFirstPartiallyVisibleRow=function(){return F.view.getFirstPartiallyVisibleRow()},this.getLastPartiallyVisibleRow=function(){return F.view.getLastPartiallyVisibleRow()},this.getFirstPartiallyVisibleColumn=function(){return F.view.getFirstPartiallyVisibleColumn()},this.getLastPartiallyVisibleColumn=function(){return F.view.getLastPartiallyVisibleColumn()},this.getPlugin=function(e){const t=(0,E.toUpperCaseFirst)(e);return"UndoRedo"===t?this.undoRedo:Z.getItem(t)},this.getPluginName=function(e){return e===this.undoRedo?this.undoRedo.constructor.PLUGIN_KEY:Z.getId(e)},this.getInstance=function(){return F},this.addHook=function(e,t,r){M.default.getSingleton().add(e,t,F,r)},this.hasHook=function(e){return M.default.getSingleton().has(e,F)||M.default.getSingleton().has(e)},this.addHookOnce=function(e,t,r){M.default.getSingleton().once(e,t,F,r)},this.removeHook=function(e,t){M.default.getSingleton().remove(e,t,F)},this.runHooks=function(e,t,r,n,s,i,o){return M.default.getSingleton().run(F,e,t,r,n,s,i,o)},this.getTranslatedPhrase=function(e,t){return(0,_.getTranslatedPhrase)(q.language,e,t)},this.toHTML=()=>(0,p.instanceToHTML)(this),this.toTableElement=()=>{const e=this.rootDocument.createElement("div");return e.insertAdjacentHTML("afterbegin",(0,p.instanceToHTML)(this)),e.firstElementChild},this.timeouts=[],this._registerTimeout=function(e){let t=e;"function"==typeof t&&(t=setTimeout(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0)),this.timeouts.push(t)},this._clearTimeouts=function(){(0,d.arrayEach)(this.timeouts,(e=>{clearTimeout(e)}))},this.immediates=[],this._registerImmediate=function(e){this.immediates.push(setImmediate(e))},this._clearImmediates=function(){(0,d.arrayEach)(this.immediates,(e=>{clearImmediate(e)}))},this._getEditorManager=function(){return Y},this.isRtl=function(){return"rtl"===F.rootWindow.getComputedStyle(F.rootElement).direction},this.isLtr=function(){return!F.isRtl()},this.getDirectionFactor=function(){return F.isLtr()?1:-1};const ue=(0,P.createShortcutManager)({handleEvent:()=>F.isListening(),beforeKeyDown:e=>this.runHooks("beforeKeyDown",e),afterKeyDown:e=>{this.isDestroyed||F.runHooks("afterDocumentKeyDown",e)},ownerWindow:this.rootWindow});this.addHook("beforeOnCellMouseDown",(e=>{!1===e.ctrlKey&&!1===e.metaKey&&ue.releasePressedKeys()})),this.getShortcutManager=function(){return ue},this.getFocusManager=function(){return j},(0,g.getPluginsNames)().forEach((e=>{const t=(0,g.getPlugin)(e);Z.addItem(e,new t(this))})),(0,L.registerAllShortcutContexts)(F),ue.setActiveContextName("grid"),M.default.getSingleton().run(F,"construct")},r(67834),r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620),r(71766);var s=r(49536),i=r(25735),o=r(67508),a=r(1479),l=n(r(6637)),h=n(r(63286)),u=r(58460),c=r(24638),d=r(98758),p=r(33050),g=r(9415),f=r(94539),m=r(39761),y=r(19434),E=r(69114),w=r(27050),C=n(r(81212)),v=n(r(26499)),R=r(37671),S=r(65686),T=r(26048),N=r(6697),M=n(r(37056)),_=r(63055),b=r(51127),A=r(78700),O=r(56988),I=r(75893),x=r(22781),P=r(5061),L=r(52684);let D=null;const k=new Map;new Set},13436:(e,t,r)=>{"use strict";t.__esModule=!0,t.installFocusDetector=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=e.rootElement,n=i(e),s=i(e);return n.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromTop())),s.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromBottom())),r.firstChild.before(n),r.lastChild.after(s),{activate(){e._registerTimeout((()=>{n.tabIndex=0,s.tabIndex=0}),10)},deactivate(){e._registerTimeout((()=>{n.tabIndex=-1,s.tabIndex=-1}),10)}}};var n=r(49536),s=r(81595);function i(e){const t=e.rootDocument.createElement("input");return t.type="text",t.classList.add("htFocusCatcher"),e.getSettings().ariaTags&&(0,n.setAttribute)(t,[(0,s.A11Y_PRESENTATION)(),(0,s.A11Y_HIDDEN)()]),t}},70994:(e,t,r)=>{"use strict";t.__esModule=!0,t.installFocusCatcher=function(e){const t=function(e){return t=>{if(!t)return null;const r=i(e),n=o(e);return t.col<r.col&&(t.col=r.col),t.col>n.col&&(t.col=n.col),t.row<r.row&&(t.row=r.row),t.row>n.row&&(t.row=n.row),t}}(e);let r;const{activate:a,deactivate:l}=(0,s.installFocusDetector)(e,{onFocusFromTop(){var n;const s=null!==(n=t(r))&&void 0!==n?n:i(e);s&&(e.runHooks("modifyFocusOnTabNavigation","from_above",s),e.selectCell(s.row,s.col)),e.listen()},onFocusFromBottom(){var n;const s=null!==(n=t(r))&&void 0!==n?n:o(e);s&&(e.runHooks("modifyFocusOnTabNavigation","from_below",s),e.selectCell(s.row,s.col)),e.listen()}}),h={wrapped:!1,flipped:!1};let u=!0,c=!1,d=!1;e.addHook("afterListen",(()=>l())),e.addHook("afterUnlisten",(()=>a())),e.addHook("afterSelection",((t,n,s,i,o)=>{var a;(c&&(h.wrapped&&h.flipped||d)&&(d=!1,o.value=!0),u)&&(r=null===(a=e.getSelectedRangeLast())||void 0===a?void 0:a.highlight)})),e.addHook("beforeRowWrap",((e,t,r)=>{h.wrapped=!0,h.flipped=r}));const p={keys:[["Tab"],["Shift","Tab"]],preventDefault:!1,stopPropagation:!1,relativeToGroup:n.GRID_GROUP,group:"focusCatcher"};e.getShortcutManager().getContext("grid").addShortcuts([{...p,callback:()=>{const{tabNavigation:t}=e.getSettings();c=!0,e.getSelectedRangeLast()&&!t&&(u=!1),t||(d=!0)},position:"before"},{...p,callback:t=>{const{tabNavigation:n,autoWrapRow:s}=e.getSettings();if(c=!1,u=!0,!n||!e.selection.isSelected()||s&&h.wrapped&&h.flipped||!s&&h.wrapped)return s&&h.wrapped&&h.flipped&&(r=t.shiftKey?i(e):o(e)),h.wrapped=!1,h.flipped=!1,e.deselectCell(),e.unlisten(),!1;t.preventDefault()},position:"after"}])};var n=r(52684),s=r(13436);function i(e){const{rowIndexMapper:t,columnIndexMapper:r}=e,{navigableHeaders:n}=e.getSettings();let s=n&&e.countColHeaders()>0?-e.countColHeaders():0,i=n&&e.countRowHeaders()>0?-e.countRowHeaders():0;return 0===s&&(s=t.getVisualFromRenderableIndex(s)),0===i&&(i=r.getVisualFromRenderableIndex(i)),null===s||null===i?null:e._createCellCoords(s,i)}function o(e){var t,r;const{rowIndexMapper:n,columnIndexMapper:s}=e,{navigableHeaders:i}=e.getSettings();let o=n.getRenderableIndexesLength()-1,a=s.getRenderableIndexesLength()-1;if(o<0){if(!i||0===e.countColHeaders())return null;o=-1}if(a<0){if(!i||0===e.countColHeaders())return null;a=-1}return e._createCellCoords(null!==(t=n.getVisualFromRenderableIndex(o))&&void 0!==t?t:o,null!==(r=s.getVisualFromRenderableIndex(a))&&void 0!==r?r:a)}},75893:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(70994);Object.keys(n).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===n[e]||(t[e]=n[e]))}));var s=r(49697);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===s[e]||(t[e]=s[e]))}))},49697:(e,t,r)=>{"use strict";t.__esModule=!0,t.createViewportScroller=function(e){const{selection:t}=e;let r=!1,u=!1;return{resume(){u=!1},suspend(){u=!0},skipNextScrollCycle(){r=!0},scrollTo(c){var d;if(r||u)return void(r=!1);let p;t.isFocusSelectionChanged()?p=(0,i.focusScrollStrategy)(e):t.isSelectedByCorner()?p=(0,s.cornerHeaderScrollStrategy)(e):t.isSelectedByRowHeader()?p=(0,l.rowHeaderScrollStrategy)(e):t.isSelectedByColumnHeader()?p=(0,n.columnHeaderScrollStrategy)(e):1===t.getSelectedRange().size()&&t.isMultiple()?p=(0,o.multipleScrollStrategy)(e):1!==t.getSelectedRange().size()||t.isMultiple()?t.getSelectedRange().size()>1&&(p=(0,a.noncontiguousScrollStrategy)(e)):p=(0,h.singleScrollStrategy)(e),null===(d=p)||void 0===d||d(c)}}};var n=r(34710),s=r(32373),i=r(47315),o=r(85817),a=r(8088),l=r(35126),h=r(51829)},34710:(e,t)=>{"use strict";t.__esModule=!0,t.columnHeaderScrollStrategy=function(e){return t=>{let{col:r}=t;e.scrollViewportTo({col:r})}}},32373:(e,t)=>{"use strict";t.__esModule=!0,t.cornerHeaderScrollStrategy=function(){return()=>{}}},47315:(e,t)=>{"use strict";t.__esModule=!0,t.focusScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},85817:(e,t)=>{"use strict";t.__esModule=!0,t.multipleScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},8088:(e,t)=>{"use strict";t.__esModule=!0,t.noncontiguousScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},35126:(e,t)=>{"use strict";t.__esModule=!0,t.rowHeaderScrollStrategy=function(e){return t=>{let{row:r}=t;e.scrollViewportTo({row:r})}}},51829:(e,t)=>{"use strict";t.__esModule=!0,t.singleScrollStrategy=function(e){return t=>{const r=e.selection.getSelectionSource(),{row:n,col:s}=t;if(n<0&&s>=0)e.scrollViewportTo({col:s});else if(s<0&&n>=0)e.scrollViewportTo({row:n});else{if("mouse"===r&&(s===e.view.getLastPartiallyVisibleColumn()||n===e.view.getLastPartiallyVisibleRow()))return;e.scrollViewportTo({row:n,col:s})}}}},35078:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=r(70389),o=r(37671),a=r(58460),l=r(98758),h=r(27050),u=r(67508);class c{static get DESTINATION_RENDERER(){return 1}static get DESTINATION_CLIPBOARD_GENERATOR(){return 2}constructor(e,t,r){(0,s.default)(this,"hot",void 0),(0,s.default)(this,"metaManager",void 0),(0,s.default)(this,"tableMeta",void 0),(0,s.default)(this,"dataSource",void 0),(0,s.default)(this,"duckSchema",void 0),(0,s.default)(this,"colToPropCache",void 0),(0,s.default)(this,"propToColCache",void 0),this.hot=e,this.metaManager=r,this.tableMeta=r.getTableMeta(),this.dataSource=t,this.duckSchema=this.createDuckSchema(),this.createMap()}createMap(){const e=this.getSchema();if(void 0===e)throw new Error("trying to create `columns` definition but you didn't provide `schema` nor `data`");const t=this.tableMeta.columns;let r;if(this.colToPropCache=[],this.propToColCache=new Map,t){let n=0,s=0,i=!1;if("function"==typeof t){const t=(0,a.deepObjectSize)(e);n=t>0?t:this.countFirstRowKeys(),i=!0}else{const e=this.tableMeta.maxCols;n=Math.min(e,t.length)}for(r=0;r<n;r++){const e=i?t(r):t[r];if((0,a.isObject)(e)){if(void 0!==e.data){const t=i?s:r;this.colToPropCache[t]=e.data,this.propToColCache.set(e.data,t)}s+=1}}}else this.recursiveDuckColumns(e)}countFirstRowKeys(){return(0,o.countFirstRowKeys)(this.dataSource)}recursiveDuckColumns(e,t,r){let n,s=t,i=r;return void 0===s&&(s=0,i=""),"object"!=typeof e||Array.isArray(e)||(0,a.objectEach)(e,((e,t)=>{null===e?(n=i+t,this.colToPropCache.push(n),this.propToColCache.set(n,s),s+=1):s=this.recursiveDuckColumns(e,s,`${t}.`)})),s}colToProp(e){if(!1===Number.isInteger(e))return e;const t=this.hot.toPhysicalColumn(e);return null===t?e:this.colToPropCache&&(0,u.isDefined)(this.colToPropCache[t])?this.colToPropCache[t]:t}propToCol(e){const t=this.propToColCache.get(e);if((0,u.isDefined)(t))return this.hot.toVisualColumn(t);const r=this.hot.toVisualColumn(e);return null===r?e:r}getSchema(){const e=this.tableMeta.dataSchema;return e?"function"==typeof e?e():e:this.duckSchema}createDuckSchema(){return this.dataSource&&this.dataSource[0]?(0,a.duckSchema)(this.dataSource[0]):{}}refreshDuckSchema(){this.duckSchema=this.createDuckSchema()}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:r,mode:n="above"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const s=this.hot.countSourceRows();let i=s,o=0,l=e;("number"!=typeof l||l>=s)&&(l=s),l<this.hot.countRows()&&(i=this.hot.toPhysicalRow(l));if(!1===this.hot.runHooks("beforeCreateRow",l,t,r)||null===i)return{delta:0};const u=this.tableMeta.maxRows,c=this.getSchema().length,d=[];for(;o<t&&s+o<u;){let e=null;"array"===this.hot.dataType?this.tableMeta.dataSchema?e=(0,a.deepClone)(this.getSchema()):(e=[],(0,h.rangeEach)(c-1,(()=>e.push(null)))):"function"===this.hot.dataType?e=this.tableMeta.dataSchema(l+o):(e={},(0,a.deepExtend)(e,this.getSchema())),d.push(e),o+=1}this.hot.rowIndexMapper.insertIndexes(l,o),"below"===n&&(i=Math.min(i+1,s)),this.spliceData(i,0,d);const p=this.hot.toVisualRow(i);return this.hot.countSourceRows()===d.length&&this.hot.columnIndexMapper.initToLength(this.hot.getInitialColumnCount()),o>0&&(null==e?this.metaManager.createRow(null,o):"auto"!==r&&this.metaManager.createRow(i,t)),this.hot.runHooks("afterCreateRow",p,o,r),this.hot.forceFullRender=!0,{delta:o,startPhysicalIndex:i}}createCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:r,mode:n="start"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this.hot.isColumnModificationAllowed())throw new Error("Cannot create new column. When data source in an object, you can only have as much columns as defined in first data row, data schema or in the 'columns' setting.If you want to be able to add new columns, you have to use array datasource.");const s=this.dataSource,i=this.tableMeta.maxCols,o=this.hot.countSourceCols();let a=e;("number"!=typeof a||a>=o)&&(a=o);if(!1===this.hot.runHooks("beforeCreateCol",a,t,r))return{delta:0};let l=o;a<this.hot.countCols()&&(l=this.hot.toPhysicalColumn(a));const h=this.hot.countSourceRows();let u=this.hot.countCols(),c=0,d=l;"end"===n&&(d=Math.min(d+1,o));const p=d;for(;c<t&&u<i;){if("number"!=typeof a||a>=u)if(h>0)for(let e=0;e<h;e+=1)void 0===s[e]&&(s[e]=[]),s[e].push(null);else s.push([null]);else for(let e=0;e<h;e++)s[e].splice(d,0,null);c+=1,d+=1,u+=1}this.hot.columnIndexMapper.insertIndexes(a,c),c>0&&(null==e?this.metaManager.createColumn(null,c):"auto"!==r&&this.metaManager.createColumn(p,t));const g=this.hot.toVisualColumn(p);return this.hot.runHooks("afterCreateCol",g,c,r),this.hot.forceFullRender=!0,this.refreshDuckSchema(),{delta:c,startPhysicalIndex:p}}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2?arguments[2]:void 0,n=Number.isInteger(e)?e:-t;const s=this.visualRowsToPhysical(n,t),i=this.hot.countSourceRows();n=(i+n)%i;if(!1===this.hot.runHooks("beforeRemoveRow",n,s.length,s,r))return!1;const o=s.length;if(this.filterData(n,o,s),n<this.hot.countRows()){this.hot.rowIndexMapper.removeIndexes(s);const e=(0,u.isDefined)(this.tableMeta.columns)||(0,u.isDefined)(this.tableMeta.dataSchema);0===this.hot.rowIndexMapper.getNotTrimmedIndexesLength()&&!1===e&&this.hot.columnIndexMapper.setIndexesSequence([])}return s.slice(0).sort(((e,t)=>t-e)).forEach((e=>{this.metaManager.removeRow(e,1)})),this.hot.runHooks("afterRemoveRow",n,o,s,r),this.hot.forceFullRender=!0,!0}removeCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2?arguments[2]:void 0;if("object"===this.hot.dataType||this.tableMeta.columns)throw new Error("cannot remove column with object data source or columns option specified");let n="number"!=typeof e?-t:e;n=(this.hot.countCols()+n)%this.hot.countCols();const s=this.visualColumnsToPhysical(n,t),i=s.slice(0).sort(((e,t)=>t-e));if(!1===this.hot.runHooks("beforeRemoveCol",n,t,s,r))return!1;let o=!0;const a=i.length,l=this.dataSource;for(let e=0;e<a;e++)o&&s[0]!==s[e]-e&&(o=!1);if(o)for(let e=0,r=this.hot.countSourceRows();e<r;e++)l[e].splice(s[0],t),0===e&&this.metaManager.removeColumn(s[0],t);else for(let e=0,t=this.hot.countSourceRows();e<t;e++)for(let t=0;t<a;t++)l[e].splice(i[t],1),0===e&&this.metaManager.removeColumn(i[t],1);return n<this.hot.countCols()&&(this.hot.columnIndexMapper.removeIndexes(s),0===this.hot.columnIndexMapper.getNotTrimmedIndexesLength()&&this.hot.rowIndexMapper.setIndexesSequence([])),this.hot.runHooks("afterRemoveCol",n,t,s,r),this.hot.forceFullRender=!0,this.refreshDuckSchema(),!0}spliceCol(e,t,r){const n=this.hot.getDataAtCol(e),s=n.slice(t,t+r),i=n.slice(t+r);for(var o=arguments.length,a=new Array(o>3?o-3:0),h=3;h<o;h++)a[h-3]=arguments[h];(0,l.extendArray)(a,i);let u=0;for(;u<r;)a.push(null),u+=1;return(0,l.to2dArray)(a),this.hot.populateFromArray(t,e,a,null,null,"spliceCol"),s}spliceRow(e,t,r){const n=this.hot.getSourceDataAtRow(e),s=n.slice(t,t+r),i=n.slice(t+r);for(var o=arguments.length,a=new Array(o>3?o-3:0),h=3;h<o;h++)a[h-3]=arguments[h];(0,l.extendArray)(a,i);let u=0;for(;u<r;)a.push(null),u+=1;return this.hot.populateFromArray(e,t,[a],null,null,"spliceRow"),s}spliceData(e,t,r){if(!1!==this.hot.runHooks("beforeDataSplice",e,t,r)){const t=[...this.dataSource.slice(0,e),...r,...this.dataSource.slice(e)];this.dataSource.length=0,t.forEach((e=>this.dataSource.push(e)))}}filterData(e,t,r){let n=this.hot.runHooks("filterData",e,t,r);!1===Array.isArray(n)&&(n=this.dataSource.filter(((e,t)=>-1===r.indexOf(t)))),this.dataSource.length=0,Array.prototype.push.apply(this.dataSource,n)}get(e,t){const r=this.hot.toPhysicalRow(e);let n=this.dataSource[r];const s=this.hot.runHooks("modifyRowData",r);n=isNaN(s)?s:n;const{dataDotNotation:i}=this.hot.getSettings();let o=null;if(n&&n.hasOwnProperty&&(0,a.hasOwnProperty)(n,t))o=n[t];else if(i&&"string"==typeof t&&t.indexOf(".")>-1){let e=n;if(!e)return null;const r=t.split(".");for(let t=0,n=r.length;t<n;t++)if(e=e[r[t]],void 0===e)return null;o=e}else"function"==typeof t&&(o=t(this.dataSource.slice(r,r+1)[0]));if(this.hot.hasHook("modifyData")){const e=(0,a.createObjectPropListener)(o);this.hot.runHooks("modifyData",r,this.propToCol(t),e,"get"),e.isTouched()&&(o=e.value)}return o}getCopyable(e,t){return this.hot.getCellMeta(e,this.propToCol(t)).copyable?this.get(e,t):""}set(e,t,r){const n=this.hot.toPhysicalRow(e);let s=r,i=this.dataSource[n];const o=this.hot.runHooks("modifyRowData",n);if(i=isNaN(o)?o:i,this.hot.hasHook("modifyData")){const e=(0,a.createObjectPropListener)(s);this.hot.runHooks("modifyData",n,this.propToCol(t),e,"set"),e.isTouched()&&(s=e.value)}const{dataDotNotation:l}=this.hot.getSettings();if(i&&i.hasOwnProperty&&(0,a.hasOwnProperty)(i,t))i[t]=s;else if(l&&"string"==typeof t&&t.indexOf(".")>-1){let e,r=i,n=0;const o=t.split(".");for(n=0,e=o.length-1;n<e;n++)void 0===r[o[n]]&&(r[o[n]]={}),r=r[o[n]];r[o[n]]=s}else"function"==typeof t?t(this.dataSource.slice(n,n+1)[0],s):i[t]=s}visualRowsToPhysical(e,t){const r=this.hot.countSourceRows(),n=[];let s,i=(r+e)%r,o=t;for(;i<r&&o;)s=this.hot.toPhysicalRow(i),n.push(s),o-=1,i+=1;return n}visualColumnsToPhysical(e,t){const r=this.hot.countCols(),n=[];let s=(r+e)%r,i=t;for(;s<r&&i;){const e=this.hot.toPhysicalColumn(s);n.push(e),i-=1,s+=1}return n}clear(){for(let e=0;e<this.hot.countSourceRows();e++)for(let t=0;t<this.hot.countCols();t++)this.set(e,this.colToProp(t),"")}getLength(){const e=this.tableMeta.maxRows;let t;t=e<0||0===e?0:e||1/0;const r=this.hot.rowIndexMapper.getNotTrimmedIndexesLength();return Math.min(r,t)}getAll(){const e={row:0,col:0},t={row:Math.max(this.hot.countRows()-1,0),col:Math.max(this.hot.countCols()-1,0)};return e.row-t.row!=0||this.hot.countSourceRows()?this.getRange(e,t,c.DESTINATION_RENDERER):[]}countCachedColumns(){return this.colToPropCache.length}getRange(e,t,r){const n=[];let s,i,o;const a=this.tableMeta.maxRows,l=this.tableMeta.maxCols;if(0===a||0===l)return[];const h=r===c.DESTINATION_CLIPBOARD_GENERATOR?this.getCopyable:this.get,u=Math.min(Math.max(a-1,0),Math.max(e.row,t.row)),d=Math.min(Math.max(l-1,0),Math.max(e.col,t.col));for(s=Math.min(e.row,t.row);s<=u;s++){o=[];const r=s>=0?this.hot.toPhysicalRow(s):s;for(i=Math.min(e.col,t.col);i<=d&&null!==r;i++)o.push(h.call(this,s,this.colToProp(i)));null!==r&&n.push(o)}return n}getText(e,t){return(0,i.stringify)(this.getRange(e,t,c.DESTINATION_RENDERER))}getCopyableText(e,t){return(0,i.stringify)(this.getRange(e,t,c.DESTINATION_CLIPBOARD_GENERATOR))}destroy(){this.hot=null,this.metaManager=null,this.dataSource=null,this.duckSchema=null,this.colToPropCache.length=0,this.propToColCache.clear(),this.propToColCache=void 0}}t.default=c},26499:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(58460),o=r(37671),a=r(98758),l=r(27050),h=r(25735);t.default=class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];(0,s.default)(this,"hot",void 0),(0,s.default)(this,"data",void 0),(0,s.default)(this,"dataType","array"),(0,s.default)(this,"colToProp",(()=>{})),(0,s.default)(this,"propToCol",(()=>{})),this.hot=e,this.data=t}modifyRowData(e){let t;return this.hot.hasHook("modifyRowData")&&(t=this.hot.runHooks("modifyRowData",e)),void 0===t||Number.isInteger(t)?this.data[e]:t}getData(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.data&&0!==this.data.length?this.getByRange(null,null,e):this.data}setData(e){this.data=e}getAtColumn(e){const t=[];return(0,a.arrayEach)(this.data,((r,n)=>{const s=this.getAtCell(n,e);t.push(s)})),t}getAtRow(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s=void 0===t&&void 0===r,{dataDotNotation:o}=this.hot.getSettings();let a=null,u=null;if(a=this.modifyRowData(e),Array.isArray(a))u=[],s?a.forEach(((t,r)=>{u[r]=this.getAtPhysicalCell(e,r,a)})):(0,l.rangeEach)(t,r,(r=>{u[r-t]=this.getAtPhysicalCell(e,r,a)}));else if((0,i.isObject)(a)||(0,h.isFunction)(a))if(u=n?[]:{},!s||n){const s=0,h=this.countFirstRowKeys()-1;(0,l.rangeEach)(s,h,(l=>{const c=this.colToProp(l);if(l>=(t||s)&&l<=(r||h)&&!Number.isInteger(c)){const t=this.getAtPhysicalCell(e,c,a);n?u.push(t):o?(0,i.setProperty)(u,c,t):u[c]=t}}))}else(0,i.objectEach)(a,((t,r)=>{const n=this.getAtPhysicalCell(e,r,a);o?(0,i.setProperty)(u,r,n):u[r]=n}));return u}setAtCell(e,t,r){if(!(e>=this.countRows()||t>=this.countFirstRowKeys())){if(this.hot.hasHook("modifySourceData")){const n=(0,i.createObjectPropListener)(r);this.hot.runHooks("modifySourceData",e,t,n,"set"),n.isTouched()&&(r=n.value)}Number.isInteger(t)?this.data[e][t]=r:(0,i.setProperty)(this.data[e],t,r)}}getAtPhysicalCell(e,t,r){let n=null;if(r)if("string"==typeof t){const{dataDotNotation:e}=this.hot.getSettings();n=e?(0,i.getProperty)(r,t):r[t]}else n="function"==typeof t?t(r):r[t];if(this.hot.hasHook("modifySourceData")){const r=(0,i.createObjectPropListener)(n);this.hot.runHooks("modifySourceData",e,t,r,"get"),r.isTouched()&&(n=r.value)}return n}getAtCell(e,t){const r=this.modifyRowData(e);return this.getAtPhysicalCell(e,this.colToProp(t),r)}getByRange(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,s=null,i=null,o=null,a=null;null===e||null===t?(n=!0,s=0,o=this.countRows()-1):(s=Math.min(e.row,t.row),i=Math.min(e.col,t.col),o=Math.max(e.row,t.row),a=Math.max(e.col,t.col));const h=[];return(0,l.rangeEach)(s,o,(e=>{h.push(n?this.getAtRow(e,void 0,void 0,r):this.getAtRow(e,i,a,r))})),h}countRows(){if(this.hot.hasHook("modifySourceLength")){const e=this.hot.runHooks("modifySourceLength");if(Number.isInteger(e))return e}return this.data.length}countFirstRowKeys(){return(0,o.countFirstRowKeys)(this.data)}destroy(){this.data=null,this.hot=null}}},56988:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(35078));t.DataMap=s.default;var i=n(r(10615));t.MetaManager=i.default;var o=n(r(51909));t.metaSchemaFactory=o.default;var a=r(52604);t.replaceData=a.replaceData;var l=r(37313);t.DynamicCellMetaMod=l.DynamicCellMetaMod;var h=r(36645);t.ExtendMetaPropertiesMod=h.ExtendMetaPropertiesMod},10615:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(7649)),i=n(r(69502)),o=n(r(4936)),a=n(r(54934)),l=n(r(48499)),h=r(58460);class u{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];this.hot=e,this.globalMeta=new s.default(e),this.tableMeta=new i.default(this.globalMeta),this.columnMeta=new o.default(this.globalMeta),this.cellMeta=new a.default(this.columnMeta),r.forEach((e=>new e(this))),this.globalMeta.updateMeta(t)}getGlobalMeta(){return this.globalMeta.getMeta()}updateGlobalMeta(e){this.globalMeta.updateMeta(e)}getTableMeta(){return this.tableMeta.getMeta()}updateTableMeta(e){this.tableMeta.updateMeta(e)}getColumnMeta(e){return this.columnMeta.getMeta(e)}updateColumnMeta(e,t){this.columnMeta.updateMeta(e,t)}getCellMeta(e,t,r){let{visualRow:n,visualColumn:s}=r;const i=this.cellMeta.getMeta(e,t);return i.visualRow=n,i.visualCol=s,i.row=e,i.col=t,this.runLocalHooks("afterGetCellMeta",i),i}getCellMetaKeyValue(e,t,r){if("string"!=typeof r)throw new Error("The passed cell meta object key is not a string");return this.cellMeta.getMeta(e,t,r)}setCellMeta(e,t,r,n){this.cellMeta.setMeta(e,t,r,n)}updateCellMeta(e,t,r){this.cellMeta.updateMeta(e,t,r)}removeCellMeta(e,t,r){this.cellMeta.removeMeta(e,t,r)}getCellsMeta(){return this.cellMeta.getMetas()}getCellsMetaAtRow(e){return this.cellMeta.getMetasAtRow(e)}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createRow(e,t)}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeRow(e,t)}createColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createColumn(e,t),this.columnMeta.createColumn(e,t)}removeColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeColumn(e,t),this.columnMeta.removeColumn(e,t)}clearCellsCache(){this.cellMeta.clearCache()}clearCache(){this.cellMeta.clearCache(),this.columnMeta.clearCache()}}t.default=u,(0,h.mixin)(u,l.default)},257:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=n(r(85707)),i=r(98758),o=r(30594);class a{constructor(e){(0,s.default)(this,"valueFactory",void 0),(0,s.default)(this,"data",[]),(0,s.default)(this,"index",[]),(0,s.default)(this,"holes",new Set),this.valueFactory=e}obtain(e){(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=this._getStorageIndexByKey(e);let r;if(t>=0)r=this.data[t],void 0===r&&(r=this.valueFactory(e),this.data[t]=r);else if(r=this.valueFactory(e),this.holes.size>0){const t=this.holes.values().next().value;this.holes.delete(t),this.data[t]=r,this.index[e]=t}else this.data.push(r),this.index[e]=this.data.length-1;return r}insert(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)||(0,o.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const r=[],n=this.data.length;for(let e=0;e<t;e++)r.push(n+e),this.data.push(void 0);const s=(0,o.isNullish)(e)?this.index.length:e;this.index=[...this.index.slice(0,s),...r,...this.index.slice(s)]}remove(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)||(0,o.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const r=this.index.splice((0,o.isNullish)(e)?this.index.length-t:e,t);for(let e=0;e<r.length;e++){const t=r[e];"number"==typeof t&&this.holes.add(t)}}size(){return this.data.length-this.holes.size}values(){return(0,i.arrayFilter)(this.data,((e,t)=>!this.holes.has(t)))[Symbol.iterator]()}entries(){const e=[];for(let t=0;t<this.data.length;t++){const r=this._getKeyByStorageIndex(t);-1!==r&&e.push([r,this.data[t]])}let t=0;return{next:()=>{if(t<e.length){const r=e[t];return t+=1,{value:r,done:!1}}return{done:!0}}}}clear(){this.data=[],this.index=[],this.holes.clear()}_getStorageIndexByKey(e){return this.index.length>e?this.index[e]:-1}_getKeyByStorageIndex(e){return this.index.indexOf(e)}[Symbol.iterator](){return this.entries()}}t.default=a},54934:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(58460),o=r(30594),a=n(r(257)),l=r(67508);t.default=class{constructor(e){(0,s.default)(this,"columnMeta",void 0),(0,s.default)(this,"metas",new a.default((()=>this._createRow()))),this.columnMeta=e}updateMeta(e,t,r){const n=this.getMeta(e,t);(0,i.extend)(n,r),(0,o.extendByMetaType)(n,r)}createRow(e,t){this.metas.insert(e,t)}createColumn(e,t){for(let r=0;r<this.metas.size();r++)this.metas.obtain(r).insert(e,t)}removeRow(e,t){this.metas.remove(e,t)}removeColumn(e,t){for(let r=0;r<this.metas.size();r++)this.metas.obtain(r).remove(e,t)}getMeta(e,t,r){const n=this.metas.obtain(e).obtain(t);return void 0===r?n:n[r]}setMeta(e,t,r,n){var s;const i=this.metas.obtain(e).obtain(t);null===(s=i._automaticallyAssignedMetaProps)||void 0===s||s.delete(r),i[r]=n}removeMeta(e,t,r){delete this.metas.obtain(e).obtain(t)[r]}getMetas(){const e=[],t=Array.from(this.metas.values());for(let r=0;r<t.length;r++)(0,l.isDefined)(t[r])&&e.push(...t[r].values());return e}getMetasAtRow(e){(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=new Map(this.metas);return t.has(e)?Array.from(t.get(e).values()):[]}clearCache(){this.metas.clear()}_createRow(){return new a.default((e=>this._createMeta(e)))}_createMeta(e){return new(this.columnMeta.getMetaConstructor(e))}}},4936:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(58460),o=r(30594),a=n(r(257));const l=["data","width"];t.default=class{constructor(e){(0,s.default)(this,"globalMeta",void 0),(0,s.default)(this,"metas",new a.default((()=>this._createMeta()))),this.globalMeta=e,this.metas=new a.default((()=>this._createMeta()))}updateMeta(e,t){const r=this.getMeta(e);(0,i.extend)(r,t),(0,o.extendByMetaType)(r,t)}createColumn(e,t){this.metas.insert(e,t)}removeColumn(e,t){this.metas.remove(e,t)}getMeta(e){return this.metas.obtain(e)}getMetaConstructor(e){return this.metas.obtain(e).constructor}clearCache(){this.metas.clear()}_createMeta(){return(0,o.columnFactory)(this.globalMeta.getMetaConstructor(),l).prototype}}},7649:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(58460),o=r(30594),a=n(r(51909));t.default=class{constructor(e){(0,s.default)(this,"metaCtor",class{}),(0,s.default)(this,"meta",void 0),this.meta=this.metaCtor.prototype,(0,i.extend)(this.meta,(0,a.default)()),this.meta.instance=e}getMetaConstructor(){return this.metaCtor}getMeta(){return this.meta}updateMeta(e){var t;(0,i.extend)(this.meta,e),(0,o.extendByMetaType)(this.meta,{...e,type:null!==(t=e.type)&&void 0!==t?t:this.meta.type},e)}}},69502:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(58460),o=r(30594);t.default=class{constructor(e){(0,s.default)(this,"meta",void 0);const t=e.getMetaConstructor();this.meta=new t}getMeta(){return this.meta}updateMeta(e){(0,i.extend)(this.meta,e),(0,o.extendByMetaType)(this.meta,e,e)}}},51909:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(67508),s=r(58460);t.default=()=>({_automaticallyAssignedMetaProps:void 0,activeHeaderClassName:"ht__active_highlight",allowEmpty:!0,allowHtml:!1,allowInsertColumn:!0,allowInsertRow:!0,allowInvalid:!0,allowRemoveColumn:!0,allowRemoveRow:!0,ariaTags:!0,autoColumnSize:void 0,autoRowSize:void 0,autoWrapCol:!1,autoWrapRow:!1,bindRowsWithHeaders:void 0,cell:[],cells:void 0,checkedTemplate:void 0,className:void 0,colHeaders:null,collapsibleColumns:void 0,columnHeaderHeight:void 0,columns:void 0,columnSorting:void 0,columnSummary:void 0,colWidths:void 0,commentedCellClassName:"htCommentCell",comments:!1,contextMenu:void 0,copyable:!0,copyPaste:!0,correctFormat:!1,currentColClassName:void 0,currentHeaderClassName:"ht__highlight",currentRowClassName:void 0,customBorders:!1,data:void 0,dataDotNotation:!0,dataSchema:void 0,dateFormat:"DD/MM/YYYY",timeFormat:"h:mm:ss a",datePickerConfig:void 0,defaultDate:void 0,disableVisualSelection:!1,dragToScroll:!0,dropdownMenu:void 0,editor:void 0,enterBeginsEditing:!0,enterMoves:{col:0,row:1},fillHandle:{autoInsertRow:!1},filter:!0,filteringCaseSensitive:!1,filters:void 0,fixedColumnsLeft:0,fixedColumnsStart:0,fixedRowsBottom:0,fixedRowsTop:0,formulas:void 0,fragmentSelection:!1,headerClassName:void 0,height:void 0,hiddenColumns:void 0,hiddenRows:void 0,invalidCellClassName:"htInvalid",imeFastEdit:!1,isEmptyCol(e){let t,r,s;for(t=0,r=this.countRows();t<r;t++)if(s=this.getDataAtCell(t,e),!1===(0,n.isEmpty)(s))return!1;return!0},isEmptyRow(e){let t,r,i,o;for(t=0,r=this.countCols();t<r;t++)if(i=this.getDataAtCell(e,t),!1===(0,n.isEmpty)(i))return"object"==typeof i&&(o=this.getCellMeta(e,t),(0,s.isObjectEqual)(this.getSchema()[o.prop],i));return!0},label:void 0,language:"en-US",layoutDirection:"inherit",licenseKey:void 0,locale:"en-US",manualColumnFreeze:void 0,manualColumnMove:void 0,manualColumnResize:void 0,manualRowMove:void 0,manualRowResize:void 0,maxCols:1/0,maxRows:1/0,mergeCells:!1,minCols:0,minRows:0,minSpareCols:0,minSpareRows:0,multiColumnSorting:void 0,navigableHeaders:!1,tabNavigation:!0,nestedHeaders:void 0,nestedRows:void 0,noWordWrapClassName:"htNoWrap",numericFormat:void 0,observeDOMVisibility:!0,outsideClickDeselects:!0,persistentState:void 0,placeholder:void 0,placeholderCellClassName:"htPlaceholder",preventOverflow:!1,preventWheel:!1,readOnly:!1,readOnlyCellClassName:"htDimmed",renderAllRows:!1,renderAllColumns:!1,renderer:void 0,rowHeaders:void 0,rowHeaderWidth:void 0,rowHeights:void 0,search:!1,selectionMode:"multiple",selectOptions:void 0,skipColumnOnPaste:!1,skipRowOnPaste:!1,sortByRelevance:!0,source:void 0,startCols:5,startRows:5,stretchH:"none",strict:void 0,tableClassName:void 0,tabMoves:{row:0,col:1},title:void 0,trimDropdown:!0,trimRows:void 0,trimWhitespace:!0,type:"text",uncheckedTemplate:void 0,undo:void 0,validator:void 0,viewportColumnRenderingOffset:"auto",viewportRowRenderingOffset:"auto",visibleRows:10,width:void 0,wordWrap:!0})},37313:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=n(r(85707)),i=n(r(37056)),o=r(58460),a=r(25735);t.DynamicCellMetaMod=class{constructor(e){(0,s.default)(this,"metaManager",void 0),(0,s.default)(this,"metaSyncMemo",new Map),this.metaManager=e,e.addLocalHook("afterGetCellMeta",(e=>this.extendCellMeta(e))),i.default.getSingleton().add("beforeRender",(e=>{e&&this.metaSyncMemo.clear()}),this.metaManager.hot)}extendCellMeta(e){var t;const{row:r,col:n}=e;if(null!==(t=this.metaSyncMemo.get(r))&&void 0!==t&&t.has(n))return;const{visualRow:s,visualCol:i}=e,l=this.metaManager.hot,h=l.colToProp(i);e.prop=h,l.runHooks("beforeGetCellMeta",s,i,e);const u=(0,o.hasOwnProperty)(e,"type")?e.type:null;let c=(0,a.isFunction)(e.cells)?e.cells(r,n,h):null;var d;u&&(c?c.type=null!==(d=c.type)&&void 0!==d?d:u:c={type:u});c&&this.metaManager.updateCellMeta(r,n,c),l.runHooks("afterGetCellMeta",s,i,e),this.metaSyncMemo.has(r)||this.metaSyncMemo.set(r,new Set),this.metaSyncMemo.get(r).add(n)}}},36645:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=n(r(85707));function i(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function o(e,t){return e.get(function(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}(e,t))}var a=new WeakMap;t.ExtendMetaPropertiesMod=class{constructor(e){(0,s.default)(this,"metaManager",void 0),(0,s.default)(this,"usageTracker",new Set),(0,s.default)(this,"propDescriptors",new Map([["ariaTags",{initOnly:!0}],["fixedColumnsLeft",{target:"fixedColumnsStart",onChange(e){if(this.metaManager.hot.isRtl()&&"fixedColumnsLeft"===e)throw new Error("The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.");if(this.usageTracker.has("fixedColumnsLeft")&&this.usageTracker.has("fixedColumnsStart"))throw new Error("The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. Please use only the option `fixedColumnsStart`.")}}],["layoutDirection",{initOnly:!0}],["renderAllColumns",{initOnly:!0}],["renderAllRows",{initOnly:!0}]])),i(this,a,((e,t,r)=>{if(!r)throw new Error(`The \`${e}\` option can not be updated after the Handsontable is initialized.`)})),this.metaManager=e,this.extendMetaProps()}extendMetaProps(){this.propDescriptors.forEach(((e,t)=>{const{initOnly:r,target:n,onChange:s}=e,i="string"==typeof n,l=i?n:t,h=`_${l}`;this.metaManager.globalMeta.meta[h]=this.metaManager.globalMeta.meta[l],s?(this.installPropWatcher(t,h,s),i&&this.installPropWatcher(n,h,s)):r&&(this.installPropWatcher(t,h,o(a,this)),this.metaManager.globalMeta.meta._initOnlySettings||(this.metaManager.globalMeta.meta._initOnlySettings=[]),this.metaManager.globalMeta.meta._initOnlySettings.push(t))}))}installPropWatcher(e,t,r){const n=this;Object.defineProperty(this.metaManager.globalMeta.meta,e,{get(){return this[t]},set(s){const i=!n.usageTracker.has(e);n.usageTracker.add(e),r.call(n,e,s,i),this[t]=s},enumerable:!0,configurable:!0})}}},30594:(e,t,r)=>{"use strict";t.__esModule=!0,t.assert=function(e,t){if(!e())throw new Error(`Assertion failed: ${t}`)},t.columnFactory=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];function r(){}(0,n.inherit)(r,e);for(let e=0;e<t.length;e++)r.prototype[t[e]]=void 0;return r},t.extendByMetaType=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;const i="string"==typeof t.type?(0,s.getCellType)(t.type):t.type;e._automaticallyAssignedMetaProps&&(0,n.objectEach)(t,((t,r)=>{e._automaticallyAssignedMetaProps.delete(r)}));if(!(0,n.isObject)(i))return;r!==e||e._automaticallyAssignedMetaProps||(e._automaticallyAssignedMetaProps=new Set);const o={};(0,n.objectEach)(i,((t,s)=>{var i;(function(e,t){var r;if("CELL_TYPE"===e)return!1;return(null===(r=t._automaticallyAssignedMetaProps)||void 0===r?void 0:r.has(e))||!(0,n.hasOwnProperty)(t,e)})(s,r)&&(o[s]=t,null===(i=e._automaticallyAssignedMetaProps)||void 0===i||i.add(s))})),(0,n.extend)(e,o)},t.isNullish=function(e){return null==e},t.isUnsignedNumber=function(e){return Number.isInteger(e)&&e>=0},r(67834),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var n=r(58460),s=r(36528)},52604:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.replaceData=function(e,t,r,n){const{hotInstance:u,dataMap:c,dataSource:d,internalSource:p,source:g,metaManager:f,firstRun:m}=n,y=(0,s.toUpperCaseFirst)(p),E=u.getSettings();Array.isArray(E.dataSchema)?u.dataType="array":(0,i.isFunction)(E.dataSchema)?u.dataType="function":u.dataType="object";c&&c.destroy();e=u.runHooks(`before${y}`,e,m,g);const w=new o.default(u,e,f);if(t(w),"object"==typeof e&&null!==e)e.push&&e.splice||(e=[e]);else{if(null!==e)throw new Error(`${p} only accepts array of objects or array of arrays (${typeof e} given)`);{const t=w.getSchema();let r;e=[];let n=0,s=0;for(n=0,s=E.startRows;n<s;n++)if("object"!==u.dataType&&"function"!==u.dataType||!E.dataSchema)if("array"===u.dataType)r=(0,a.deepClone)(t[0]),e.push(r);else{r=[];for(let e=0,t=E.startCols;e<t;e++)r.push(null);e.push(r)}else r=(0,a.deepClone)(t),e.push(r)}}Array.isArray(e[0])&&(u.dataType="array");E.data=e,w.dataSource=e,d.data=e,d.dataType=u.dataType,d.colToProp=w.colToProp.bind(w),d.propToCol=w.propToCol.bind(w),d.countCachedColumns=w.countCachedColumns.bind(w),r(w),u.runHooks(`after${y}`,e,m,g),m||(u.runHooks("afterChange",null,p),u.render());u.getSettings().ariaTags&&(0,l.setAttribute)(u.rootElement,[(0,h.A11Y_ROWCOUNT)(-1),(0,h.A11Y_COLCOUNT)(u.countCols()+(u.view?u.countRowHeaders():0))])},r(67834),r(15724);var s=r(69114),i=r(25735),o=n(r(35078)),a=r(58460),l=r(49536),h=r(81595)},6637:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(35592),o=r(24456),a=r(39761),l=n(r(63286));function h(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function u(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var c=new WeakSet;class d{constructor(e,t,r){h(this,c),(0,s.default)(this,"hot",void 0),(0,s.default)(this,"tableMeta",void 0),(0,s.default)(this,"selection",void 0),(0,s.default)(this,"eventManager",void 0),(0,s.default)(this,"destroyed",!1),(0,s.default)(this,"activeEditor",void 0),(0,s.default)(this,"cellProperties",void 0),this.hot=e,this.tableMeta=t,this.selection=r,this.eventManager=new l.default(e),this.hot.addHook("afterDocumentKeyDown",(e=>u(c,this,p).call(this,e))),this.eventManager.addEventListener(this.hot.rootDocument.documentElement,"compositionstart",(e=>{!this.destroyed&&this.hot.isListening()&&this.openEditor("",e)})),this.hot.view._wt.update("onCellDblClick",((e,t,r)=>u(c,this,g).call(this,e,t,r)))}getActiveEditor(){return this.activeEditor}prepareEditor(){var e;if(this.activeEditor&&this.activeEditor.isWaiting())return void this.closeEditor(!1,!1,(e=>{e&&this.prepareEditor()}));const t=null===(e=this.hot.getSelectedRangeLast())||void 0===e?void 0:e.highlight;if(!t||t.isHeader())return;const{row:r,col:n}=t,s=this.hot.runHooks("modifyGetCellCoords",r,n);let i=r,o=n;if(Array.isArray(s)&&([i,o]=s),this.cellProperties=this.hot.getCellMeta(i,o),!this.isCellEditable())return void this.clearActiveEditor();const l=this.hot.getCell(r,n,!0);if(l){const e=this.hot.getCellEditor(this.cellProperties),t=this.hot.colToProp(o),s=this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(i),o);this.activeEditor=(0,a.getEditorInstance)(e,this.hot),this.activeEditor.prepare(r,n,t,l,s,this.cellProperties)}}isEditorOpened(){return this.activeEditor&&this.activeEditor.isOpened()}openEditor(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!this.isCellEditable())return void this.clearActiveEditor();const n=this.hot.getSelectedRangeLast();let s=this.hot.runHooks("beforeBeginEditing",n.highlight.row,n.highlight.col,e,t,r);t instanceof MouseEvent&&"boolean"!=typeof s&&(s=0===this.hot.selection.getLayerLevel()&&n.isSingle()),!1!==s?(this.activeEditor||(this.hot.scrollToFocusedCell(),this.prepareEditor()),this.activeEditor&&(r&&this.activeEditor.enableFullEditMode(),this.activeEditor.beginEditing(e,t))):this.clearActiveEditor()}closeEditor(e,t,r){this.activeEditor?this.activeEditor.finishEditing(e,t,r):r&&r(!1)}closeEditorAndSaveChanges(e){this.closeEditor(!1,e)}closeEditorAndRestoreOriginalValue(e){this.closeEditor(!0,e)}clearActiveEditor(){this.activeEditor=void 0}isCellEditable(){const e=this.hot.getSelectedRangeLast();if(!e)return!1;const t=this.hot.getCellEditor(this.cellProperties),{row:r,col:n}=e.highlight,{rowIndexMapper:s,columnIndexMapper:i}=this.hot,o=s.isHidden(this.hot.toPhysicalRow(r))||i.isHidden(this.hot.toPhysicalColumn(n));return!(this.cellProperties.readOnly||!t||o)}moveSelectionAfterEnter(e){const t={..."function"==typeof this.tableMeta.enterMoves?this.tableMeta.enterMoves(e):this.tableMeta.enterMoves};e.shiftKey&&(t.row=-t.row,t.col=-t.col),this.hot.selection.isMultiple()?this.selection.transformFocus(t.row,t.col):this.selection.transformStart(t.row,t.col,!0)}destroy(){this.destroyed=!0,this.eventManager.destroy()}}function p(e){const t=this.hot.getSelectedRangeLast();if(!this.hot.isListening()||!t||t.highlight.isHeader()||(0,o.isImmediatePropagationStopped)(e))return;const{keyCode:r}=e,n=(e.ctrlKey||e.metaKey)&&!e.altKey;(!this.activeEditor||this.activeEditor&&!this.activeEditor.isWaiting())&&((0,i.isFunctionKey)(r)||(0,i.isCtrlMetaKey)(r)||n||this.isEditorOpened()||this.openEditor("",e))}function g(e,t){t.isCell()&&this.openEditor(null,e,!0)}const f=new WeakMap;d.getInstance=function(e,t,r){let n=f.get(e);return n||(n=new d(e,t,r),f.set(e,n)),n};t.default=d},57847:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=r(76545),o=r(98758),a=r(49536),l=r(67508),h=r(69114),u=r(35592),c=r(1479),d=r(6135),p=r(81595);function g(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function f(e,t){return e.get(function(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}(e,t))}const m=t.EDITOR_TYPE="autocomplete";var y=new WeakMap;class E extends i.HandsontableEditor{constructor(){super(...arguments),(0,s.default)(this,"query",null),(0,s.default)(this,"strippedChoices",[]),(0,s.default)(this,"rawChoices",[]),g(this,y,this.hot.guid.slice(0,9)),(0,s.default)(this,"sortByRelevance",(function(e,t,r){const n=[],s=[],i=e.length;let o,a,u,c,d=t.length;if(0===i){for(u=0;u<d;u++)s.push(u);return s}for(u=0;u<d;u++){if(a=(0,h.stripTags)((0,l.stringify)(t[u])),r)c=a.indexOf(e);else{const t=this.cellProperties.locale;c=a.toLocaleLowerCase(t).indexOf(e.toLocaleLowerCase(t))}-1!==c&&(o=a.length-c-i,n.push({baseIndex:u,index:c,charsLeft:o,value:a}))}for(n.sort(((e,t)=>{if(-1===t.index)return-1;if(-1===e.index)return 1;if(e.index<t.index)return-1;if(t.index<e.index)return 1;if(e.index===t.index){if(e.charsLeft<t.charsLeft)return-1;if(e.charsLeft>t.charsLeft)return 1}return 0})),u=0,d=n.length;u<d;u++)s.push(n[u].baseIndex);return s}))}static get EDITOR_TYPE(){return m}getValue(){const e=this.rawChoices.find((e=>this.stripValueIfNeeded(e)===this.TEXTAREA.value));return(0,l.isDefined)(e)?e:this.TEXTAREA.value}createElements(){super.createElements(),(0,a.addClass)(this.htContainer,"autocompleteEditor"),(0,a.addClass)(this.htContainer,-1===this.hot.rootWindow.navigator.platform.indexOf("Mac")?"":"htMacScroll"),this.hot.getSettings().ariaTags&&(0,a.setAttribute)(this.TEXTAREA,[(0,p.A11Y_TEXT)(),(0,p.A11Y_COMBOBOX)(),(0,p.A11Y_HASPOPUP)("listbox"),(0,p.A11Y_AUTOCOMPLETE)()])}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i),this.hot.getSettings().ariaTags&&(0,a.setAttribute)(this.TEXTAREA,[(0,p.A11Y_EXPANDED)("false"),(0,p.A11Y_CONTROLS)(`${f(y,this)}-listbox-${e}-${t}`)])}open(){super.open();const e=void 0===this.cellProperties.trimDropdown||this.cellProperties.trimDropdown,t=this.hot.getSettings().ariaTags,r=Array.isArray(this.cellProperties.source)?this.cellProperties.source:null,n=null==r?void 0:r.length,{row:s,col:i}=this;this.showEditableElement(),this.focus();let o=(0,a.getScrollbarWidth)();0===o&&(0,c.isMacOS)()&&(o+=15),this.addHook("beforeKeyDown",(e=>this.onBeforeKeyDown(e))),this.htEditor.updateSettings({colWidths:e?[(0,a.outerWidth)(this.TEXTAREA)-2]:void 0,width:e?(0,a.outerWidth)(this.TEXTAREA)+o:void 0,autoColumnSize:!0,renderer:(e,s,i,o,h,u,c)=>{(0,d.textRenderer)(e,s,i,o,h,u,c);const{filteringCaseSensitive:g,allowHtml:f,locale:m}=this.cellProperties,y=this.query;let E,w,C=(0,l.stringify)(u);C&&!f&&(E=!0===g?C.indexOf(y):C.toLocaleLowerCase(m).indexOf(y.toLocaleLowerCase(m)),-1!==E&&(w=C.substr(E,y.length),C=C.replace(w,`<strong>${w}</strong>`))),t&&(0,a.setAttribute)(s,[(0,p.A11Y_OPTION)(),...r?[(0,p.A11Y_SETSIZE)(n)]:[],...r?[(0,p.A11Y_POSINSET)(r.indexOf(u)+1)]:[],["id",`${this.htEditor.rootElement.id}_${i}-${o}`]]),s.innerHTML=C},afterSelectionEnd:(e,r)=>{if(t){const t=this.htEditor.getCell(e,r,!0);(0,a.setAttribute)(t,[(0,p.A11Y_SELECTED)()]),(0,a.setAttribute)(this.TEXTAREA,...(0,p.A11Y_ACTIVEDESCENDANT)(t.id))}}}),t&&((0,a.setAttribute)(this.htEditor.view._wt.wtOverlays.wtTable.TABLE,...(0,p.A11Y_PRESENTATION)()),(0,a.setAttribute)(this.htEditor.rootElement,[(0,p.A11Y_LISTBOX)(),(0,p.A11Y_LIVE)("polite"),(0,p.A11Y_RELEVANT)("text"),["id",`${f(y,this)}-listbox-${s}-${i}`]]),(0,a.setAttribute)(this.TEXTAREA,...(0,p.A11Y_EXPANDED)("true"))),this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}))}close(){this.removeHooksByKey("beforeKeyDown"),super.close(),this.hot.getSettings().ariaTags&&(0,a.setAttribute)(this.TEXTAREA,[(0,p.A11Y_EXPANDED)("false")])}discardEditor(e){super.discardEditor(e),this.hot.view.render()}queryChoices(e){const t=this.cellProperties.source;this.query=e,"function"==typeof t?t.call(this.cellProperties,e,(e=>{this.rawChoices=e,this.updateChoicesList(this.stripValuesIfNeeded(e))})):Array.isArray(t)?(this.rawChoices=t,this.updateChoicesList(this.stripValuesIfNeeded(t))):this.updateChoicesList([])}updateChoicesList(e){const t=(0,a.getCaretPosition)(this.TEXTAREA),r=(0,a.getSelectionEndPosition)(this.TEXTAREA),n=this.cellProperties.sortByRelevance,s=this.cellProperties.filter;let i=null,l=null,h=e;n&&(i=this.sortByRelevance(this.stripValueIfNeeded(this.getValue()),h,this.cellProperties.filteringCaseSensitive));const u=Array.isArray(i)?i.length:0;if(!1===s)u&&(l=i[0]);else{const e=[];for(let t=0,r=h.length;t<r&&!(n&&u<=t);t++)u?e.push(h[i[t]]):e.push(h[t]);l=0,h=e}this.strippedChoices=h,0===h.length?this.htEditor.rootElement.style.display="none":this.htEditor.rootElement.style.display="",this.htEditor.loadData((0,o.pivot)([h])),h.length>0&&(this.updateDropdownDimensions(),this.flipDropdownIfNeeded(),!0===this.cellProperties.strict&&this.highlightBestMatchingChoice(l)),this.hot.listen(),(0,a.setCaretPosition)(this.TEXTAREA,t,t===r?void 0:r)}flipDropdownIfNeeded(){const e=(0,a.getTrimmingContainer)(this.hot.view._wt.wtTable.TABLE),t=e===this.hot.rootWindow,r=this.cellProperties.preventOverflow;if(t||!t&&(r||"horizontal"===r))return!1;const n=(0,a.offset)(this.TEXTAREA),s=(0,a.outerHeight)(this.TEXTAREA),i=this.getDropdownHeight(),o=e.scrollTop,l=(0,a.outerHeight)(this.hot.view._wt.wtTable.THEAD),h=(0,a.offset)(e),u=n.top-h.top-l+o,c=e.scrollHeight-u-l-s,d=i>c&&u>c;return d?this.flipDropdown(i):this.unflipDropdown(),this.limitDropdownIfNeeded(d?u:c,i),d}limitDropdownIfNeeded(e,t){if(t>e){let r=0,n=0,s=0,i=null;do{s=this.htEditor.getRowHeight(n)||this.htEditor.view._wt.getSetting("defaultRowHeight"),r+=s,n+=1}while(r<e);i=r-s,this.htEditor.flipped&&(this.htEditor.rootElement.style.top=parseInt(this.htEditor.rootElement.style.top,10)+t-i+"px"),this.setDropdownHeight(r-s)}}flipDropdown(e){const t=this.htEditor.rootElement.style;t.position="absolute",t.top=-e+"px",this.htEditor.flipped=!0}unflipDropdown(){const e=this.htEditor.rootElement.style;e.position="absolute",e.top="",this.htEditor.flipped=void 0}updateDropdownDimensions(){const e=this.htEditor.getColWidth(0)+(0,a.getScrollbarWidth)(this.hot.rootDocument)+2,t=this.cellProperties.trimDropdown;this.htEditor.updateSettings({height:this.getDropdownHeight(),width:t?void 0:e}),this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer()}setDropdownHeight(e){this.htEditor.updateSettings({height:e})}highlightBestMatchingChoice(e){"number"==typeof e?this.htEditor.selectCell(e,0,void 0,void 0,void 0,!1):this.htEditor.deselectCell()}getDropdownHeight(){const e=this.htEditor.getRowHeight(0)||23,t=this.cellProperties.visibleRows;return this.strippedChoices.length>=t?t*e:this.strippedChoices.length*e+8}stripValueIfNeeded(e){return this.stripValuesIfNeeded([e])[0]}stripValuesIfNeeded(e){const{allowHtml:t}=this.cellProperties,r=(0,o.arrayMap)(e,(e=>(0,l.stringify)(e)));return(0,o.arrayMap)(r,(e=>t?e:(0,h.stripTags)(e)))}allowKeyEventPropagation(e){const t=this.htEditor.getSelectedRangeLast(),r=t?t.from.row:-1;let n=!1;return e===u.KEY_CODES.ARROW_DOWN&&r>0&&r<this.htEditor.countRows()-1&&(n=!0),e===u.KEY_CODES.ARROW_UP&&r>-1&&(n=!0),n}onBeforeKeyDown(e){if((0,u.isPrintableChar)(e.keyCode)||e.keyCode===u.KEY_CODES.BACKSPACE||e.keyCode===u.KEY_CODES.DELETE||e.keyCode===u.KEY_CODES.INSERT){let t=10;if(e.keyCode===u.KEY_CODES.C&&(e.ctrlKey||e.metaKey))return;this.isOpened()||(t+=10),this.htEditor&&this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}),t)}}}t.AutocompleteEditor=E},29328:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(57847);t.EDITOR_TYPE=n.EDITOR_TYPE,t.AutocompleteEditor=n.AutocompleteEditor},86861:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(67508),o=r(58460),a=n(r(15129)),l=r(49536);const h=t.EDITOR_TYPE="base",u=t.EDITOR_STATE=Object.freeze({VIRGIN:"STATE_VIRGIN",EDITING:"STATE_EDITING",WAITING:"STATE_WAITING",FINISHED:"STATE_FINISHED"});class c{static get EDITOR_TYPE(){return h}constructor(e){(0,s.default)(this,"hot",void 0),(0,s.default)(this,"state",u.VIRGIN),(0,s.default)(this,"_opened",!1),(0,s.default)(this,"_fullEditMode",!1),(0,s.default)(this,"_closeCallback",null),(0,s.default)(this,"TD",null),(0,s.default)(this,"row",null),(0,s.default)(this,"col",null),(0,s.default)(this,"prop",null),(0,s.default)(this,"originalValue",null),(0,s.default)(this,"cellProperties",null),this.hot=e,this.init()}_fireCallbacks(e){this._closeCallback&&(this._closeCallback(e),this._closeCallback=null)}init(){}getValue(){throw Error("Editor getValue() method unimplemented")}setValue(){throw Error("Editor setValue() method unimplemented")}open(){throw Error("Editor open() method unimplemented")}close(){throw Error("Editor close() method unimplemented")}prepare(e,t,r,n,s,i){this.TD=n,this.row=e,this.col=t,this.prop=r,this.originalValue=s,this.cellProperties=i,this.state=this.isOpened()?this.state:u.VIRGIN}extend(){return class extends this.constructor{}}saveValue(e,t){let r,n,s,i;if(t){const e=this.hot.getSelectedLast();r=Math.max(Math.min(e[0],e[2]),0),n=Math.max(Math.min(e[1],e[3]),0),s=Math.max(e[0],e[2]),i=Math.max(e[1],e[3])}else[r,n,s,i]=[this.row,this.col,null,null];const o=this.hot.runHooks("modifyGetCellCoords",r,n);Array.isArray(o)&&([r,n]=o),this.hot.populateFromArray(r,n,e,s,i,"edit")}beginEditing(e,t){if(this.state!==u.VIRGIN)return;const r=this.hot,n=r.rowIndexMapper.getRenderableFromVisualIndex(this.row),s=r.columnIndexMapper.getRenderableFromVisualIndex(this.col);if(r.view.scrollViewport(r._createCellCoords(n,s)),this.state=u.EDITING,this.isInFullEditMode()){const t="string"==typeof e?e:(0,i.stringify)(this.originalValue);this.setValue(t)}this.open(t),this._opened=!0,this.focus(),r.view.render(),r.runHooks("afterBeginEditing",this.row,this.col)}finishEditing(e,t,r){let n;if(r){const e=this._closeCallback;this._closeCallback=t=>{e&&e(t),r(t),this.hot.view.render()}}if(!this.isWaiting())if(this.state!==u.VIRGIN){if(this.state===u.EDITING){if(e)return this.cancelChanges(),void this.hot.view.render();const r=this.getValue();n=this.cellProperties.trimWhitespace?[["string"==typeof r?String.prototype.trim.call(r||""):r]]:[[r]],this.state=u.WAITING,this.saveValue(n,t),this.hot.getCellValidator(this.cellProperties)?this.hot.addHookOnce("postAfterValidate",(e=>{this.state=u.FINISHED,this.discardEditor(e)})):(this.state=u.FINISHED,this.discardEditor(!0))}}else this.hot._registerTimeout((()=>{this._fireCallbacks(!0)}))}cancelChanges(){this.state=u.FINISHED,this.discardEditor()}discardEditor(e){if(this.state===u.FINISHED)if(!1===e&&!0!==this.cellProperties.allowInvalid)this.hot.selectCell(this.row,this.col),this.focus(),this.state=u.EDITING,this._fireCallbacks(!1);else{this.close(),this._opened=!1,this._fullEditMode=!1,this.state=u.VIRGIN,this._fireCallbacks(!0);this.hot.getShortcutManager().setActiveContextName("grid")}}enableFullEditMode(){this._fullEditMode=!0}isInFullEditMode(){return this._fullEditMode}isOpened(){return this._opened}isWaiting(){return this.state===u.WAITING}getEditedCellRect(){var e;const t=this.getEditedCell();if(!t)return;const{wtOverlays:r,wtViewport:n}=this.hot.view._wt,s=this.hot.rootWindow,i=(0,l.offset)(t),o=(0,l.outerWidth)(t),a=(0,l.offset)(this.hot.rootElement),h=(0,l.outerWidth)(this.hot.rootElement),u=r.topOverlay.holder,c=r.inlineStartOverlay.holder,d=u!==s?u.scrollTop:0,p=c!==s?c.scrollLeft:0,g=s.innerWidth-a.left-h,{wtTable:f}=null!==(e=r.getParentOverlay(t))&&void 0!==e?e:this.hot.view._wt,m=f.name,y=["master","inline_start"].includes(m)?d:0,E=["master","top","bottom"].includes(m)?p:0,w=i.top===a.top?0:1;let C=i.top-a.top-w-y,v=0;v=this.hot.isRtl()?s.innerWidth-i.left-o-g-1+E:i.left-a.left-1-E,["top","top_inline_start_corner"].includes(m)&&(C+=r.topOverlay.getOverlayOffset()),["inline_start","top_inline_start_corner"].includes(m)&&(v+=Math.abs(r.inlineStartOverlay.getOverlayOffset()));const R=this.hot.hasColHeaders(),S=this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row),T=this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col),N=this.hot.rowIndexMapper.getRenderableIndexesLength()-this.hot.view._wt.getSetting("fixedRowsBottom");(R&&S<=0||S===N)&&(C+=1),T<=0&&(v+=1);const M=n.rowsRenderCalculator.startPosition,_=n.columnsRenderCalculator.startPosition,b=Math.abs(r.inlineStartOverlay.getScrollPosition()),A=r.topOverlay.getScrollPosition(),O=(0,l.getScrollbarWidth)(this.hot.rootDocument);let I=t.offsetTop;if(["inline_start","master"].includes(m)&&(I+=M-A),["bottom","bottom_inline_start_corner"].includes(m)){const{wtViewport:e,wtTable:t}=r.bottomOverlay.clone;I+=e.getWorkspaceHeight()-t.getHeight()-O}let x=t.offsetLeft;this.hot.isRtl()?(x=x>=0?f.getWidth()-t.offsetLeft:Math.abs(x),x+=_-b-o):["top","master","bottom"].includes(m)&&(x+=_-b);const P=(0,l.getComputedStyle)(this.TD,this.hot.rootWindow),L=this.hot.isRtl()?"borderRightWidth":"borderLeftWidth",D=parseInt(P[L],10)>0?0:1,k=parseInt(P.borderTopWidth,10)>0?0:1,H=(0,l.outerWidth)(t)+D,F=(0,l.outerHeight)(t)+k,U=(0,l.hasVerticalScrollbar)(u)?O:0,V=(0,l.hasHorizontalScrollbar)(c)?O:0,B=this.hot.view.maximumVisibleElementWidth(x)-U+D;return{top:C,start:v,height:F,maxHeight:Math.max(this.hot.view.maximumVisibleElementHeight(I)-V+k,23),width:H,maxWidth:B}}getEditedCellsLayerClass(){switch(this.checkEditorSection()){case"inline-start":return"ht_clone_left ht_clone_inline_start";case"bottom":return"ht_clone_bottom";case"bottom-inline-start-corner":return"ht_clone_bottom_left_corner ht_clone_bottom_inline_start_corner";case"top":return"ht_clone_top";case"top-inline-start-corner":return"ht_clone_top_left_corner ht_clone_top_inline_start_corner";default:return"ht_clone_master"}}getEditedCell(){return this.hot.getCell(this.row,this.col,!0)}checkEditorSection(){const e=this.hot.countRows();let t="";return this.row<this.hot.getSettings().fixedRowsTop?t=this.col<this.hot.getSettings().fixedColumnsStart?"top-inline-start-corner":"top":this.hot.getSettings().fixedRowsBottom&&this.row>=e-this.hot.getSettings().fixedRowsBottom?t=this.col<this.hot.getSettings().fixedColumnsStart?"bottom-inline-start-corner":"bottom":this.col<this.hot.getSettings().fixedColumnsStart&&(t="inline-start"),t}}t.BaseEditor=c,(0,o.mixin)(c,a.default)},47009:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(86861);t.EDITOR_STATE=n.EDITOR_STATE,t.EDITOR_TYPE=n.EDITOR_TYPE,t.BaseEditor=n.BaseEditor},9357:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(47009),s=r(49536);const i=t.EDITOR_TYPE="checkbox";class o extends n.BaseEditor{static get EDITOR_TYPE(){return i}beginEditing(e,t){if(t&&"mouseup"===t.type&&"TD"===t.target.nodeName){const e=this.TD.querySelector('input[type="checkbox"]');(0,s.hasClass)(e,"htBadValue")||e.click()}}finishEditing(){}init(){}open(){}close(){}getValue(){}setValue(){}focus(){}}t.CheckboxEditor=o},78457:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(9357);t.EDITOR_TYPE=n.EDITOR_TYPE,t.CheckboxEditor=n.CheckboxEditor},73911:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=n(r(1314)),o=n(r(44499)),a=r(47009),l=r(48043),h=r(49536),u=r(58460),c=r(35592);r(57447);const d=t.EDITOR_TYPE="date",p="dateEditor";class g extends l.TextEditor{constructor(){super(...arguments),(0,s.default)(this,"defaultDateFormat","DD/MM/YYYY"),(0,s.default)(this,"parentDestroyed",!1),(0,s.default)(this,"$datePicker",null)}static get EDITOR_TYPE(){return d}init(){if("function"!=typeof i.default)throw new Error("You need to include moment.js to your project.");if("function"!=typeof o.default)throw new Error("You need to include Pikaday to your project.");super.init(),this.hot.addHook("afterDestroy",(()=>{this.parentDestroyed=!0,this.destroyElements()}))}createElements(){super.createElements(),this.datePicker=this.hot.rootDocument.createElement("DIV"),this.datePickerStyle=this.datePicker.style,this.datePickerStyle.position="absolute",this.datePickerStyle.top=0,this.datePickerStyle.left=0,this.datePickerStyle.zIndex=9999,this.datePicker.setAttribute("dir",this.hot.isRtl()?"rtl":"ltr"),(0,h.addClass)(this.datePicker,"htDatepickerHolder"),this.hot.rootDocument.body.appendChild(this.datePicker),this.eventManager.addEventListener(this.datePicker,"mousedown",(e=>{(0,h.hasClass)(e.target,"pika-day")&&this.hideDatepicker(),e.stopPropagation()}))}destroyElements(){const e=this.datePicker.parentNode;this.$datePicker&&this.$datePicker.destroy(),e&&e.removeChild(this.datePicker)}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i)}open(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;const t=this.hot.getShortcutManager().getContext("editor");this.showDatepicker(e),super.open(),t.addShortcuts([{keys:[["ArrowLeft"]],callback:()=>{this.$datePicker.adjustDate("subtract",1)}},{keys:[["ArrowRight"]],callback:()=>{this.$datePicker.adjustDate("add",1)}},{keys:[["ArrowUp"]],callback:()=>{this.$datePicker.adjustDate("subtract",7)}},{keys:[["ArrowDown"]],callback:()=>{this.$datePicker.adjustDate("add",7)}}],{group:p})}close(){var e;this._opened=!1,null!==(e=this.$datePicker)&&void 0!==e&&e.destroy&&this.$datePicker.destroy(),this.hot._registerTimeout((()=>{const e=this.hot._getEditorManager();e.closeEditor(),this.hot.view.render(),e.prepareEditor()}));this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(p),super.close()}finishEditing(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super.finishEditing(e,t)}showDatepicker(e){const t=this.cellProperties.dateFormat||this.defaultDateFormat,r=this.hot.view.isMouseDown(),n=!!e&&(0,c.isFunctionKey)(e.keyCode);let s;this.datePicker.style.display="block",this.$datePicker=new o.default(this.getDatePickerConfig()),"function"==typeof this.$datePicker.useMoment&&this.$datePicker.useMoment(i.default),this.$datePicker._onInputFocus=function(){},this.originalValue?(s=this.originalValue,(0,i.default)(s,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(s,t),!0),this.getValue()!==this.originalValue&&this.setValue(this.originalValue),n||r||this.setValue("")):this.cellProperties.defaultDate?(s=this.cellProperties.defaultDate,(0,i.default)(s,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(s,t),!0),n||r||this.setValue("")):this.$datePicker.gotoToday()}hideDatepicker(){this.datePickerStyle.display="none",this.$datePicker.hide()}getDatePickerConfig(){const e=this.TEXTAREA,t={};this.cellProperties&&this.cellProperties.datePickerConfig&&(0,u.deepExtend)(t,this.cellProperties.datePickerConfig);const r=t.onSelect,n=t.onClose;return t.field=e,t.trigger=e,t.container=this.datePicker,t.bound=!1,t.keyboardInput=!1,t.format=t.format||this.defaultDateFormat,t.reposition=t.reposition||!1,t.isRTL=!1,t.onSelect=e=>{let t=e;isNaN(t.getTime())||(t=(0,i.default)(t).format(this.cellProperties.dateFormat||this.defaultDateFormat)),this.setValue(t),r&&r()},t.onClose=()=>{this.parentDestroyed||this.finishEditing(!1),n&&n()},t}refreshDimensions(e){var t;if(super.refreshDimensions(e),this.state!==a.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.hideDatepicker();const{rowIndexMapper:r,columnIndexMapper:n}=this.hot,{wtOverlays:s}=this.hot.view._wt,{wtTable:i}=null!==(t=s.getParentOverlay(this.TD))&&void 0!==t?t:this.hot.view._wt,o=r.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleRow()),l=r.getVisualFromRenderableIndex(i.getLastPartiallyVisibleRow()),u=n.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleColumn()),c=n.getVisualFromRenderableIndex(i.getLastPartiallyVisibleColumn());if(this.row>=o&&this.row<=l&&this.col>=u&&this.col<=c){const e=this.TD.getBoundingClientRect();this.datePickerStyle.top=`${this.hot.rootWindow.pageYOffset+e.top+(0,h.outerHeight)(this.TD)}px`;let t=this.hot.rootWindow.pageXOffset;this.hot.isRtl()?t+=e.right-(0,h.outerWidth)(this.datePicker):t+=e.left,this.datePickerStyle.left=`${t}px`}else this.hideDatepicker()}}t.DateEditor=g},66436:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(73911);t.EDITOR_TYPE=n.EDITOR_TYPE,t.DateEditor=n.DateEditor},77929:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(29328),i=n(r(37056));const o=t.EDITOR_TYPE="dropdown";class a extends s.AutocompleteEditor{static get EDITOR_TYPE(){return o}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i),this.cellProperties.filter=!1,this.cellProperties.strict=!0}}t.DropdownEditor=a,i.default.getSingleton().add("beforeValidate",(function(e,t,r){const n=this.propToCol(r);if(Number.isInteger(n)){const e=this.getCellMeta(t,n);e.editor===a&&void 0===e.strict&&(e.filter=!1,e.strict=!0)}}))},54185:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(77929);t.EDITOR_TYPE=n.EDITOR_TYPE,t.DropdownEditor=n.DropdownEditor},68157:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043),s=r(49536),i=r(24456),o=r(58460),a=r(52684);const l="handsontableEditor",h=t.EDITOR_TYPE="handsontable";class u extends n.TextEditor{static get EDITOR_TYPE(){return h}open(){super.open(),this.htEditor&&this.htEditor.destroy(),"none"===this.htContainer.style.display&&(this.htContainer.style.display=""),this.htEditor=new this.hot.constructor(this.htContainer,this.htOptions),this.htEditor.init(),this.htEditor.rootElement.style.display="",this.cellProperties.strict?this.htEditor.selectCell(0,0):this.htEditor.deselectCell(),(0,s.setCaretPosition)(this.TEXTAREA,0,this.TEXTAREA.value.length),this.refreshDimensions()}close(){this.htEditor&&(this.htEditor.rootElement.style.display="none"),this.removeHooksByKey("beforeKeyDown"),super.close()}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i);const a=this,l={startRows:0,startCols:0,minRows:0,minCols:0,className:"listbox",copyPaste:!1,autoColumnSize:!1,autoRowSize:!1,readOnly:!0,fillHandle:!1,autoWrapCol:!1,autoWrapRow:!1,ariaTags:!1,afterOnCellMouseDown(e,t){const r=this.getSourceData(t.row,t.col);void 0!==r&&a.setValue(r),a.hot.destroyEditor()},preventWheel:!0,layoutDirection:this.hot.isRtl()?"rtl":"ltr"};this.cellProperties.handsontable&&(0,o.extend)(l,i.handsontable),this.htOptions=l}beginEditing(e,t){const r=this.hot.getSettings().onBeginEditing;r&&!1===r()||super.beginEditing(e,t)}createElements(){super.createElements();const e=this.hot.rootDocument.createElement("DIV");e.className="handsontableEditor",this.TEXTAREA_PARENT.appendChild(e),this.htContainer=e,this.assignHooks()}finishEditing(e,t,r){if(this.htEditor&&this.htEditor.isListening()&&this.hot.listen(),this.htEditor&&this.htEditor.getSelectedLast()){const e=this.htEditor.getValue();void 0!==e&&this.setValue(e)}super.finishEditing(e,t,r)}assignHooks(){this.hot.addHook("afterDestroy",(()=>{this.htEditor&&this.htEditor.destroy()}))}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor");super.registerShortcuts();const t={group:l,relativeToGroup:a.EDITOR_EDIT_GROUP,position:"before"},r=(e,t)=>{const r=this.htEditor;if(void 0!==e&&(e<0||r.flipped&&e>r.countRows()-1?r.deselectCell():r.selectCell(e,0),r.getData().length))return t.preventDefault(),(0,i.stopImmediatePropagation)(t),this.hot.listen(),this.TEXTAREA.focus(),!1};e.addShortcuts([{keys:[["ArrowUp"]],callback:e=>{const t=this.htEditor;let n,s;return!t.getSelectedLast()&&t.flipped?n=t.countRows()-1:t.getSelectedLast()&&(t.flipped?(s=t.getSelectedLast()[0],n=Math.max(0,s-1)):(s=t.getSelectedLast()[0],n=s-1)),r(n,e)},preventDefault:!1},{keys:[["ArrowDown"]],callback:e=>{const t=this.htEditor;let n,s;if(t.getSelectedLast()||t.flipped){if(t.getSelectedLast())if(t.flipped)n=t.getSelectedLast()[0]+1;else if(!t.flipped){const e=t.countRows()-1;s=t.getSelectedLast()[0],n=Math.min(e,s+1)}}else n=0;return r(n,e)},preventDefault:!1}],t)}unregisterShortcuts(){super.unregisterShortcuts();this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(l)}}t.HandsontableEditor=u},76545:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(68157);t.EDITOR_TYPE=n.EDITOR_TYPE,t.HandsontableEditor=n.HandsontableEditor},28144:(e,t,r)=>{"use strict";t.__esModule=!0,t.registerAllEditors=function(){(0,g.registerEditor)(s.BaseEditor),(0,g.registerEditor)(n.AutocompleteEditor),(0,g.registerEditor)(i.CheckboxEditor),(0,g.registerEditor)(o.DateEditor),(0,g.registerEditor)(a.DropdownEditor),(0,g.registerEditor)(l.HandsontableEditor),(0,g.registerEditor)(h.NumericEditor),(0,g.registerEditor)(u.PasswordEditor),(0,g.registerEditor)(c.SelectEditor),(0,g.registerEditor)(d.TextEditor),(0,g.registerEditor)(p.TimeEditor)};var n=r(29328);t.AutocompleteEditor=n.AutocompleteEditor,t.AUTOCOMPLETE_EDITOR=n.EDITOR_TYPE;var s=r(47009);t.BaseEditor=s.BaseEditor,t.BASE_EDITOR=s.EDITOR_TYPE;var i=r(78457);t.CheckboxEditor=i.CheckboxEditor,t.CHECKBOX_EDITOR=i.EDITOR_TYPE;var o=r(66436);t.DateEditor=o.DateEditor,t.DATE_EDITOR=o.EDITOR_TYPE;var a=r(54185);t.DropdownEditor=a.DropdownEditor,t.DROPDOWN_EDITOR=a.EDITOR_TYPE;var l=r(76545);t.HandsontableEditor=l.HandsontableEditor,t.HANDSONTABLE_EDITOR=l.EDITOR_TYPE;var h=r(59889);t.NumericEditor=h.NumericEditor,t.NUMERIC_EDITOR=h.EDITOR_TYPE;var u=r(14961);t.PasswordEditor=u.PasswordEditor,t.PASSWORD_EDITOR=u.EDITOR_TYPE;var c=r(51656);t.SelectEditor=c.SelectEditor,t.SELECT_EDITOR=c.EDITOR_TYPE;var d=r(48043);t.TextEditor=d.TextEditor,t.TEXT_EDITOR=d.EDITOR_TYPE;var p=r(54837);t.TimeEditor=p.TimeEditor,t.TIME_EDITOR=p.EDITOR_TYPE;var g=r(39761);t.registerEditor=g.registerEditor,t.RegisteredEditor=g.RegisteredEditor,t._getEditorInstance=g._getEditorInstance,t.getEditor=g.getEditor,t.getEditorInstance=g.getEditorInstance,t.getRegisteredEditorNames=g.getRegisteredEditorNames,t.getRegisteredEditors=g.getRegisteredEditors,t.hasEditor=g.hasEditor},59889:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(78343);t.EDITOR_TYPE=n.EDITOR_TYPE,t.NumericEditor=n.NumericEditor},78343:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043);const s=t.EDITOR_TYPE="numeric";class i extends n.TextEditor{static get EDITOR_TYPE(){return s}}t.NumericEditor=i},14961:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(66461);t.EDITOR_TYPE=n.EDITOR_TYPE,t.PasswordEditor=n.PasswordEditor},66461:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043),s=r(49536),i=r(81595);const o=t.EDITOR_TYPE="password";class a extends n.TextEditor{static get EDITOR_TYPE(){return o}createElements(){super.createElements(),this.TEXTAREA=this.hot.rootDocument.createElement("input"),this.TEXTAREA.setAttribute("type","password"),this.TEXTAREA.setAttribute("data-hot-input",""),this.TEXTAREA.className="handsontableInput",this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.hot.getSettings().ariaTags&&(0,s.setAttribute)(this.TEXTAREA,[(0,i.A11Y_HIDDEN)()]),(0,s.empty)(this.TEXTAREA_PARENT),this.TEXTAREA_PARENT.appendChild(this.TEXTAREA)}}t.PasswordEditor=a},39761:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.RegisteredEditor=d,t.getEditorInstance=t._getEditorInstance=function(e,t){let r;if("function"==typeof e)o.get(e)||p(null,e),r=o.get(e);else{if("string"!=typeof e)throw Error('Only strings and functions can be passed as "editor" parameter');r=l(e)}if(!r)throw Error(`No editor registered under name "${e}"`);return r.getInstance(t)},t.getEditor=function(e){if("function"==typeof e)return e;if(!h(e))throw Error(`No registered editor found under "${e}" name`);return l(e).getConstructor()},t.registerEditor=p,r(67834);var s=n(r(37056)),i=n(r(45212));const o=new WeakMap,{register:a,getItem:l,hasItem:h,getNames:u,getValues:c}=(0,i.default)("editors");function d(e){const t={},r=e;this.getConstructor=function(){return e},this.getInstance=function(e){return e.guid in t||(t[e.guid]=new r(e)),t[e.guid]},s.default.getSingleton().add("afterDestroy",(function(){t[this.guid]=null}))}function p(e,t){e&&"string"!=typeof e&&(e=(t=e).EDITOR_TYPE);const r=new d(t);"string"==typeof e&&a(e,r),o.set(t,r)}t.getRegisteredEditors=c,t.getRegisteredEditorNames=u,t.hasEditor=h},51656:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(7383);t.EDITOR_TYPE=n.EDITOR_TYPE,t.SelectEditor=n.SelectEditor},7383:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(47009),s=r(49536),i=r(58460);const o="ht_editor_visible",a="selectEditor",l=t.EDITOR_TYPE="select";class h extends n.BaseEditor{static get EDITOR_TYPE(){return l}init(){this.select=this.hot.rootDocument.createElement("select"),this.select.setAttribute("data-hot-input","true"),this.select.style.display="none",(0,s.addClass)(this.select,"htSelectEditor"),this.hot.rootElement.appendChild(this.select),this.registerHooks()}getValue(){return this.select.value}setValue(e){this.select.value=e}open(){this._opened=!0,this.refreshDimensions(),this.select.style.display="";this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this._opened=!1,this.select.style.display="none",(0,s.hasClass)(this.select,o)&&(0,s.removeClass)(this.select,o),this.unregisterShortcuts(),this.clearHooks()}focus(){this.select.focus()}registerHooks(){this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>this.refreshDimensions())),this.addHook("afterRowResize",(()=>this.refreshDimensions()))}prepare(e,t,r,n,o,a){super.prepare(e,t,r,n,o,a);const l=this.cellProperties.selectOptions;let h;h="function"==typeof l?this.prepareOptions(l(this.row,this.col,this.prop)):this.prepareOptions(l),(0,s.empty)(this.select),(0,i.objectEach)(h,((e,t)=>{const r=this.hot.rootDocument.createElement("OPTION");r.value=t,(0,s.fastInnerHTML)(r,e),this.select.appendChild(r)}))}prepareOptions(e){let t={};if(Array.isArray(e))for(let r=0,n=e.length;r<n;r++)t[e[r]]=e[r];else"object"==typeof e&&(t=e);return t}refreshValue(){const e=this.hot.getSourceDataAtCell(this.row,this.prop);this.originalValue=e,this.setValue(e),this.refreshDimensions()}refreshDimensions(){if(this.state!==n.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.close();const{top:e,start:t,width:r,height:i}=this.getEditedCellRect(),a=this.select.style;a.height=`${i}px`,a.width=`${r}px`,a.top=`${e}px`,a[this.hot.isRtl()?"right":"left"]=`${t}px`,a.margin="0px",(0,s.addClass)(this.select,o)}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={group:a};this.isInFullEditMode()&&e.addShortcuts([{keys:[["ArrowUp"]],callback:()=>{const e=this.select.selectedIndex-1;e>=0&&(this.select[e].selected=!0)}},{keys:[["ArrowDown"]],callback:()=>{const e=this.select.selectedIndex+1;e<=this.select.length-1&&(this.select[e].selected=!0)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(a)}}t.SelectEditor=h},88328:(e,t,r)=>{"use strict";t.__esModule=!0,t.updateCaretPosition=function(e,t){const r=(0,n.getCaretPosition)(t),s=t.value.split("\n");let i=r,o=0;for(let t=0;t<s.length;t++){const n=s[t];0!==t&&(o+=s[t-1].length+1);const a=o+n.length;if("home"===e?i=o:"end"===e&&(i=a),r<=a)break}(0,n.setCaretPosition)(t,i)};var n=r(49536)},48043:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(98173);t.EDITOR_TYPE=n.EDITOR_TYPE,t.TextEditor=n.TextEditor},98173:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(47009),o=n(r(63286)),a=r(1479),l=r(49536),h=r(27050),u=r(37028),c=r(67508),d=r(88328),p=r(81595);const g="ht_editor_hidden",f="textEditor",m=t.EDITOR_TYPE="text";class y extends i.BaseEditor{static get EDITOR_TYPE(){return m}constructor(e){super(e),(0,s.default)(this,"eventManager",new o.default(this)),(0,s.default)(this,"autoResize",(0,u.createInputElementResizer)(this.hot.rootDocument)),(0,s.default)(this,"TEXTAREA",void 0),(0,s.default)(this,"textareaStyle",void 0),(0,s.default)(this,"TEXTAREA_PARENT",void 0),(0,s.default)(this,"textareaParentStyle",void 0),(0,s.default)(this,"layerClass",void 0),this.eventManager=new o.default(this),this.createElements(),this.bindEvents(),this.hot.addHookOnce("afterDestroy",(()=>this.destroy()))}getValue(){return this.TEXTAREA.value}setValue(e){this.TEXTAREA.value=e}open(){this.refreshDimensions(),this.showEditableElement(),this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this.autoResize.unObserve(),(0,l.isThisHotChild)(this.hot.rootDocument.activeElement,this.hot.rootElement)&&this.hot.listen(),this.hideEditableElement(),this.unregisterShortcuts()}prepare(e,t,r,n,s,o){const a=this.state;if(super.prepare(e,t,r,n,s,o),!o.readOnly){this.refreshDimensions(!0);const{allowInvalid:e}=o;e&&!this.isOpened()&&(this.TEXTAREA.value=""),a===i.EDITOR_STATE.FINISHED||this.isOpened()||this.hideEditableElement()}}beginEditing(e,t){this.state===i.EDITOR_STATE.VIRGIN&&(this.TEXTAREA.value="",super.beginEditing(e,t))}focus(){this.TEXTAREA.select(),(0,l.setCaretPosition)(this.TEXTAREA,this.TEXTAREA.value.length)}createElements(){const{rootDocument:e}=this.hot;this.TEXTAREA=e.createElement("TEXTAREA"),(0,l.setAttribute)(this.TEXTAREA,[["data-hot-input",""],(0,p.A11Y_TABINDEX)(-1)]),this.hot.getSettings().ariaTags&&(0,l.setAttribute)(this.TEXTAREA,[(0,p.A11Y_HIDDEN)()]),(0,l.addClass)(this.TEXTAREA,"handsontableInput"),this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.textareaStyle.overflowY="visible",this.TEXTAREA_PARENT=e.createElement("DIV"),(0,l.addClass)(this.TEXTAREA_PARENT,"handsontableInputHolder"),(0,l.hasClass)(this.TEXTAREA_PARENT,this.layerClass)&&(0,l.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,l.addClass)(this.TEXTAREA_PARENT,g),this.textareaParentStyle=this.TEXTAREA_PARENT.style,this.TEXTAREA_PARENT.appendChild(this.TEXTAREA),this.hot.rootElement.appendChild(this.TEXTAREA_PARENT)}hideEditableElement(){(0,a.isEdge)()&&(this.textareaStyle.textIndent="-99999px"),this.textareaStyle.overflowY="visible",this.textareaParentStyle.opacity="0",this.textareaParentStyle.height="1px",(0,l.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,l.addClass)(this.TEXTAREA_PARENT,g)}showEditableElement(){this.textareaParentStyle.height="",this.textareaParentStyle.overflow="",this.textareaParentStyle.position="",this.textareaParentStyle[this.hot.isRtl()?"left":"right"]="auto",this.textareaParentStyle.opacity="1",this.textareaStyle.textIndent="";const e=this.TEXTAREA_PARENT.childNodes;let t=!1;(0,h.rangeEach)(e.length-1,(r=>{const n=e[r];if((0,l.hasClass)(n,"handsontableEditor"))return t=!0,!1})),(0,l.hasClass)(this.TEXTAREA_PARENT,g)&&(0,l.removeClass)(this.TEXTAREA_PARENT,g),t?(this.layerClass="ht_editor_visible",(0,l.addClass)(this.TEXTAREA_PARENT,this.layerClass)):(this.layerClass=this.getEditedCellsLayerClass(),(0,l.addClass)(this.TEXTAREA_PARENT,this.layerClass))}refreshValue(){const e=this.hot.toPhysicalRow(this.row),t=this.hot.getSourceDataAtCell(e,this.col);this.originalValue=t,this.setValue(t),this.refreshDimensions()}refreshDimensions(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.state!==i.EDITOR_STATE.EDITING&&!e)return;if(this.TD=this.getEditedCell(),!this.TD)return void(e||this.close());const{top:t,start:r,width:n,maxWidth:s,height:o,maxHeight:a}=this.getEditedCellRect();this.textareaParentStyle.top=`${t}px`,this.textareaParentStyle[this.hot.isRtl()?"right":"left"]=`${r}px`,this.showEditableElement();const h=(0,l.getComputedStyle)(this.TD,this.hot.rootWindow);this.TEXTAREA.style.fontSize=h.fontSize,this.TEXTAREA.style.fontFamily=h.fontFamily,this.TEXTAREA.style.backgroundColor=this.TD.style.backgroundColor;const u=(0,l.getComputedStyle)(this.TEXTAREA),c=parseInt(u.paddingLeft,10)+parseInt(u.paddingRight,10),d=parseInt(u.paddingTop,10)+parseInt(u.paddingBottom,10),p=n-c,g=o-d,f=s-c,m=a-d;this.autoResize.init(this.TEXTAREA,{minWidth:Math.min(p,f),minHeight:Math.min(g,m),maxWidth:f,maxHeight:m},!0)}bindEvents(){(0,a.isIOS)()&&this.eventManager.addEventListener(this.TEXTAREA,"focusout",(()=>this.finishEditing(!1))),this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()})),this.addHook("afterRowResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()}))}allowKeyEventPropagation(){}destroy(){this.eventManager.destroy(),this.clearHooks()}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={runOnlyIf:()=>(0,c.isDefined)(this.hot.getSelected()),group:f},r=()=>{this.hot.rootDocument.execCommand("insertText",!1,"\n")};e.addShortcuts([{keys:[["Control","Enter"]],callback:()=>(r(),!1),runOnlyIf:e=>!this.hot.selection.isMultiple()&&!e.altKey},{keys:[["Meta","Enter"]],callback:()=>(r(),!1),runOnlyIf:()=>!this.hot.selection.isMultiple()},{keys:[["Alt","Enter"]],callback:()=>(r(),!1)},{keys:[["Home"]],callback:(e,t)=>{let[r]=t;(0,d.updateCaretPosition)(r,this.TEXTAREA)}},{keys:[["End"]],callback:(e,t)=>{let[r]=t;(0,d.updateCaretPosition)(r,this.TEXTAREA)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(f)}}t.TextEditor=y},54837:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(79685);t.EDITOR_TYPE=n.EDITOR_TYPE,t.TimeEditor=n.TimeEditor},79685:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043);const s=t.EDITOR_TYPE="time";class i extends n.TextEditor{static get EDITOR_TYPE(){return s}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i),this.TEXTAREA.dir="ltr"}}t.TimeEditor=i},63286:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.getListenersCounter=function(){return o},r(15724);var s=n(r(85707)),i=r(24456);let o=0;t.default=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;(0,s.default)(this,"context",void 0),this.context=e||this,this.context.eventListeners||(this.context.eventListeners=[])}addEventListener(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];function s(e){r.call(this,function(e){const t=e.stopImmediatePropagation;return e.stopImmediatePropagation=function(){t.apply(this),(0,i.stopImmediatePropagation)(this)},e}(e))}return this.context.eventListeners.push({element:e,event:t,callback:r,callbackProxy:s,options:n,eventManager:this}),e.addEventListener(t,s,n),o+=1,()=>{this.removeEventListener(e,t,r)}}removeEventListener(e,t,r){let n,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=this.context.eventListeners.length;for(;i;)if(i-=1,n=this.context.eventListeners[i],n.event===t&&n.element===e){if(r&&r!==n.callback)continue;if(s&&n.eventManager!==this)continue;this.context.eventListeners.splice(i,1),n.element.removeEventListener(n.event,n.callbackProxy,n.options),o-=1}}clearEvents(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.context)return;let t=this.context.eventListeners.length;for(;t;){t-=1;const r=this.context.eventListeners[t];e&&r.eventManager!==this||(this.context.eventListeners.splice(t,1),r.element.removeEventListener(r.event,r.callbackProxy,r.options),o-=1)}}clear(){this.clearEvents()}destroy(){this.clearEvents(),this.context=null}destroyWithOwnEventsOnly(){this.clearEvents(!0),this.context=null}fireEvent(e,t){let r=e.document,n=e;r||(r=e.ownerDocument?e.ownerDocument:e,n=r.defaultView);const s={bubbles:!0,cancelable:"mousemove"!==t,view:n,detail:0,screenX:0,screenY:0,clientX:1,clientY:1,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:void 0};let i;r.createEvent?(i=r.createEvent("MouseEvents"),i.initMouseEvent(t,s.bubbles,s.cancelable,s.view,s.detail,s.screenX,s.screenY,s.clientX,s.clientY,s.ctrlKey,s.altKey,s.shiftKey,s.metaKey,s.button,s.relatedTarget||r.body.parentNode)):i=r.createEventObject(),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent(`on${t}`,i)}}},24638:(e,t,r)=>{"use strict";t.__esModule=!0,r(67834);var n=r(39874),s=r(49536),i=r(25735);function o(e,t,r){a(e,t),t.set(e,r)}function a(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function l(e,t){return e.get(u(e,t))}function h(e,t,r){return e.set(u(e,t),r),r}function u(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}const c=Object.freeze({CELL:"cell",MIXED:"mixed"});var d=new WeakMap,p=new WeakMap,g=new WeakMap,f=new WeakMap,m=new WeakMap,y=new WeakSet;function E(e){var t;const r=null===(t=l(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!r||!l(d,this).selection.isCellVisible(r))return void e(null);const n=l(d,this).getCell(r.row,r.col,!0);null===n?l(d,this).addHookOnce("afterScroll",(()=>{e(l(d,this).getCell(r.row,r.col,!0))})):e(n)}function w(){u(y,this,E).call(this,(e=>{const{activeElement:t}=l(d,this).rootDocument;t&&(0,s.isOutsideInput)(t)&&t.blur(),this.focusOnHighlightedCell(e)}))}function C(){u(y,this,E).call(this,(e=>{this.getFocusMode()===c.MIXED&&"TD"===e.nodeName&&this.refocusToEditorTextarea()}))}function v(e){"boolean"==typeof e.imeFastEdit&&this.setFocusMode(e.imeFastEdit?c.MIXED:c.CELL)}t.FocusManager=class{constructor(e){var t,r,n=this;a(t=this,r=y),r.add(t),o(this,d,void 0),o(this,p,void 0),o(this,g,1),o(this,f,null),o(this,m,new Map);const s=e.getSettings();h(d,this,e),h(p,this,s.imeFastEdit?c.MIXED:c.CELL),l(d,this).addHook("afterUpdateSettings",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,v).call(n,...t)})),l(d,this).addHook("afterSelection",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,w).call(n,...t)})),l(d,this).addHook("afterSelectionFocusSet",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,w).call(n,...t)})),l(d,this).addHook("afterSelectionEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,C).call(n,...t)}))}getFocusMode(){return l(p,this)}setFocusMode(e){Object.values(c).includes(e)?h(p,this,e):(0,n.warn)(`"${e}" is not a valid focus mode.`)}getRefocusDelay(){return l(g,this)}setRefocusDelay(e){h(g,this,e)}setRefocusElementGetter(e){h(f,this,e)}getRefocusElement(){return"function"==typeof l(f,this)?l(f,this).call(this):null===(e=l(d,this).getActiveEditor())||void 0===e?void 0:e.TEXTAREA;var e}focusOnHighlightedCell(e){const t=e=>{var t,r;const n=null===(t=l(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!n)return;let s=l(d,this).runHooks("modifyFocusedElement",n.row,n.col,e);s instanceof HTMLElement||(s=e),!s||null!==(r=l(d,this).getActiveEditor())&&void 0!==r&&r.isOpened()||s.focus({preventScroll:!0})};e?t(e):u(y,this,E).call(this,(e=>t(e)))}refocusToEditorTextarea(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l(g,this);const r=this.getRefocusElement();!l(d,this).getSettings().imeFastEdit||null!==(e=l(d,this).getActiveEditor())&&void 0!==e&&e.isOpened()||!r||(l(m,this).has(t)||l(m,this).set(t,(0,i.debounce)((()=>{r.select()}),t)),l(m,this).get(t)())}}},81595:(e,t)=>{"use strict";t.__esModule=!0;t.A11Y_TABINDEX=e=>["tabindex",e];t.A11Y_TREEGRID=()=>["role","treegrid"];t.A11Y_PRESENTATION=()=>["role","presentation"];t.A11Y_GRIDCELL=()=>["role","gridcell"];t.A11Y_ROWHEADER=()=>["role","rowheader"];t.A11Y_ROWGROUP=()=>["role","rowgroup"];t.A11Y_COLUMNHEADER=()=>["role","columnheader"];t.A11Y_ROW=()=>["role","row"];t.A11Y_MENU=()=>["role","menu"];t.A11Y_MENU_ITEM=()=>["role","menuitem"];t.A11Y_MENU_ITEM_CHECKBOX=()=>["role","menuitemcheckbox"];t.A11Y_COMBOBOX=()=>["role","combobox"];t.A11Y_LISTBOX=()=>["role","listbox"];t.A11Y_OPTION=()=>["role","option"];t.A11Y_CHECKBOX=()=>["role","checkbox"];t.A11Y_SCOPE_COL=()=>["scope","col"];t.A11Y_SCOPE_ROW=()=>["scope","row"];t.A11Y_TEXT=()=>["type","text"];t.A11Y_LABEL=e=>["aria-label",e];t.A11Y_HIDDEN=()=>["aria-hidden","true"];t.A11Y_DISABLED=()=>["aria-disabled","true"];t.A11Y_MULTISELECTABLE=()=>["aria-multiselectable","true"];t.A11Y_HASPOPUP=e=>["aria-haspopup",e];t.A11Y_ROWCOUNT=e=>["aria-rowcount",e];t.A11Y_COLCOUNT=e=>["aria-colcount",e];t.A11Y_ROWINDEX=e=>["aria-rowindex",e];t.A11Y_COLINDEX=e=>["aria-colindex",e];t.A11Y_EXPANDED=e=>["aria-expanded",e];t.A11Y_SORT=e=>["aria-sort",e];t.A11Y_READONLY=()=>["aria-readonly","true"];t.A11Y_INVALID=()=>["aria-invalid","true"];t.A11Y_CHECKED=e=>["aria-checked",e];t.A11Y_SELECTED=()=>["aria-selected","true"];t.A11Y_AUTOCOMPLETE=()=>["aria-autocomplete","list"];t.A11Y_CONTROLS=e=>["aria-controls",e];t.A11Y_ACTIVEDESCENDANT=e=>["aria-activedescendant",e];t.A11Y_LIVE=e=>["aria-live",e];t.A11Y_RELEVANT=e=>["aria-relevant",e];t.A11Y_SETSIZE=e=>["aria-setsize",e];t.A11Y_POSINSET=e=>["aria-posinset",e]},98758:(e,t,r)=>{"use strict";function n(e,t,r,n){let s=-1,i=e,o=r;Array.isArray(e)||(i=Array.from(e));const a=i.length;for(n&&a&&(s+=1,o=i[s]),s+=1;s<a;)o=t(o,i[s],s,i),s+=1;return o}function s(e,t){let r=0,n=e;Array.isArray(e)||(n=Array.from(e));const s=n.length;for(;r<s&&!1!==t(n[r],r,n);)r+=1;return e}function i(e){return n(e,((e,t)=>e+t),0)}t.__esModule=!0,t.arrayAvg=function(e){if(!e.length)return 0;return i(e)/e.length},t.arrayEach=s,t.arrayFilter=function(e,t){let r=0,n=e;Array.isArray(e)||(n=Array.from(e));const s=n.length,i=[];let o=-1;for(;r<s;){const e=n[r];t(e,r,n)&&(o+=1,i[o]=e),r+=1}return i},t.arrayFlatten=function e(t){return n(t,((t,r)=>t.concat(Array.isArray(r)?e(r):r)),[])},t.arrayMap=function(e,t){let r=0,n=e;Array.isArray(e)||(n=Array.from(e));const s=n.length,i=[];let o=-1;for(;r<s;){const e=n[r];o+=1,i[o]=t(e,r,n),r+=1}return i},t.arrayMax=function(e){return n(e,((e,t)=>e>t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayMin=function(e){return n(e,((e,t)=>e<t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayReduce=n,t.arraySum=i,t.arrayUnique=function(e){const t=[];return s(e,(e=>{-1===t.indexOf(e)&&t.push(e)})),t},t.extendArray=function(e,t){const r=t.length;let n=0;for(;n<r;)e.push(t[n]),n+=1},t.getDifferenceOfArrays=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[n,...i]=[...t];let o=n;return s(i,(e=>{o=o.filter((t=>!e.includes(t)))})),o},t.getIntersectionOfArrays=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[n,...i]=[...t];let o=n;return s(i,(e=>{o=o.filter((t=>e.includes(t)))})),o},t.getUnionOfArrays=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[n,...i]=[...t],o=new Set(n);return s(i,(e=>{s(e,(e=>{o.has(e)||o.add(e)}))})),Array.from(o)},t.pivot=function(e){const t=[];if(!e||0===e.length||!e[0]||0===e[0].length)return t;const r=e.length,n=e[0].length;for(let s=0;s<r;s++)for(let r=0;r<n;r++)t[r]||(t[r]=[]),t[r][s]=e[s][r];return t},t.stringToArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";return e.split(t)},t.to2dArray=function(e){const t=e.length;let r=0;for(;r<t;)e[r]=[e[r]],r+=1},r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620)},1479:(e,t,r)=>{"use strict";t.__esModule=!0,t.isChrome=function(){return o.chrome.value},t.isChromeWebKit=function(){return o.chromeWebKit.value},t.isEdge=function(){return o.edge.value},t.isEdgeWebKit=function(){return o.edgeWebKit.value},t.isFirefox=function(){return o.firefox.value},t.isFirefoxWebKit=function(){return o.firefoxWebKit.value},t.isIOS=function(){return a.ios.value},t.isIpadOS=function(){let{maxTouchPoints:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator;return e>2&&a.mac.value},t.isLinuxOS=function(){return a.linux.value},t.isMacOS=function(){return a.mac.value},t.isMobileBrowser=function(){return o.mobile.value},t.isSafari=function(){return o.safari.value},t.isWindowsOS=function(){return a.win.value},t.setBrowserMeta=l,t.setPlatformMeta=h;var n=r(58460),s=r(36201);const i=e=>{const t={value:!1,test:(r,n)=>{t.value=e(r,n)}};return t},o={chrome:i(((e,t)=>/Chrome/.test(e)&&/Google/.test(t))),chromeWebKit:i((e=>/CriOS/.test(e))),edge:i((e=>/Edge/.test(e))),edgeWebKit:i((e=>/EdgiOS/.test(e))),firefox:i((e=>/Firefox/.test(e))),firefoxWebKit:i((e=>/FxiOS/.test(e))),mobile:i((e=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(e))),safari:i(((e,t)=>/Safari/.test(e)&&/Apple Computer/.test(t)))},a={mac:i((e=>/^Mac/.test(e))),win:i((e=>/^Win/.test(e))),linux:i((e=>/^Linux/.test(e))),ios:i((e=>/iPhone|iPad|iPod/i.test(e)))};function l(){let{userAgent:e=navigator.userAgent,vendor:t=navigator.vendor}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,n.objectEach)(o,(r=>{let{test:n}=r;n(e,t)}))}function h(){let{platform:e=navigator.platform}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,n.objectEach)(a,(t=>{let{test:r}=t;r(e)}))}(0,s.isCSR)()&&(l(),h())},39874:(e,t,r)=>{"use strict";t.__esModule=!0,t.error=function(){(0,n.isDefined)(console)&&console.error(...arguments)},t.info=function(){(0,n.isDefined)(console)&&console.info(...arguments)},t.log=function(){(0,n.isDefined)(console)&&console.log(...arguments)},t.warn=function(){(0,n.isDefined)(console)&&console.warn(...arguments)};var n=r(67508)},37671:(e,t,r)=>{"use strict";t.__esModule=!0,t.countFirstRowKeys=function(e){let t=0;Array.isArray(e)&&(e[0]&&Array.isArray(e[0])?t=e[0].length:e[0]&&(0,n.isObject)(e[0])&&(t=(0,n.deepObjectSize)(e[0])));return t},t.createEmptySpreadsheetData=function(e,t){const r=[];let n;for(let s=0;s<e;s++){n=[];for(let e=0;e<t;e++)n.push("");r.push(n)}return r},t.createSpreadsheetData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const r=[];let n,s;for(n=0;n<e;n++){const e=[];for(s=0;s<t;s++)e.push(o(s)+(n+1));r.push(e)}return r},t.createSpreadsheetObjectData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const r=[];let n,s;for(n=0;n<e;n++){const e={};for(s=0;s<t;s++)e[`prop${s}`]=o(s)+(n+1);r.push(e)}return r},t.dataRowToChangesArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=e;const n=[];Array.isArray(e)&&Array.isArray(e[0])||(r=[e]);return r.forEach(((e,r)=>{Array.isArray(e)?e.forEach(((e,s)=>{n.push([r+t,s,e])})):Object.keys(e).forEach((s=>{n.push([r+t,s,e[s]])}))})),n},t.isArrayOfArrays=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>Array.isArray(e))))},t.isArrayOfObjects=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>"object"==typeof e&&!Array.isArray(e)&&null!==e)))},t.spreadsheetColumnIndex=function(e){let t=0;if(e)for(let r=0,n=e.length-1;r<e.length;r+=1,n-=1)t+=i**n*(s.indexOf(e[r])+1);return t-=1,t},t.spreadsheetColumnLabel=o,r(15724);var n=r(58460);const s="ABCDEFGHIJKLMNOPQRSTUVWXYZ",i=s.length;function o(e){let t,r=e+1,n="";for(;r>0;)t=(r-1)%i,n=String.fromCharCode(65+t)+n,r=parseInt((r-t)/i,10);return n}},11459:(e,t)=>{"use strict";t.__esModule=!0,t.getNormalizedDate=function(e){const t=new Date(e);if(!isNaN(new Date(`${e}T00:00`).getDate()))return new Date(t.getTime()+6e4*t.getTimezoneOffset());return t}},49536:(e,t,r)=>{"use strict";t.__esModule=!0,t.addClass=h,t.addEvent=function(e,t,r){e.addEventListener(t,r,!1)},t.clearTextSelection=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;e.getSelection&&(e.getSelection().empty?e.getSelection().empty():e.getSelection().removeAllRanges&&e.getSelection().removeAllRanges())},t.closest=o,t.closestDown=function(e,t,r){const n=[];let s=e;for(;s&&(s=o(s,t,r),s&&(!r||r.contains(s)));)n.push(s),s=s.host&&s.nodeType===Node.DOCUMENT_FRAGMENT_NODE?s.host:s.parentNode;const i=n.length;return i?n[i-1]:null},t.empty=d,t.fastInnerHTML=function(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];p.test(t)?e.innerHTML=r?(0,n.sanitize)(t):t:g(e,t)},t.fastInnerText=g,t.getCaretPosition=function(e){if(e.selectionStart)return e.selectionStart;return 0},t.getComputedStyle=y,t.getCssTransform=function(e){let t;if(e.style.transform&&""!==(t=e.style.transform))return["transform",t];return-1},t.getFrameElement=i,t.getMaximumScrollLeft=function(e){return e.scrollWidth-e.clientWidth},t.getMaximumScrollTop=function(e){return e.scrollHeight-e.clientHeight},t.getParent=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=-1,n=null,s=e;for(;null!==s;){if(r===t){n=s;break}s.host&&s.nodeType===Node.DOCUMENT_FRAGMENT_NODE?s=s.host:(r+=1,s=s.parentNode)}return n},t.getParentWindow=function(e){return i(e)&&e.parent},t.getScrollLeft=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return m(t);return e.scrollLeft},t.getScrollTop=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return f(t);return e.scrollTop},t.getScrollableElement=function(e){let t=e.ownerDocument,r=t?t.defaultView:void 0;t||(t=e.document?e.document:e,r=t.defaultView);const n=["auto","scroll"];let s=e.parentNode;for(;s&&s.style&&t.body!==s;){let{overflow:e,overflowX:t,overflowY:i}=s.style;if([e,t,i].includes("scroll"))return s;if(({overflow:e,overflowX:t,overflowY:i}=r.getComputedStyle(s)),n.includes(e)||n.includes(t)||n.includes(i))return s;if(s.clientHeight<=s.scrollHeight+1&&(n.includes(i)||n.includes(e)))return s;if(s.clientWidth<=s.scrollWidth+1&&(n.includes(t)||n.includes(e)))return s;s=s.parentNode}return r},t.getScrollbarWidth=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;void 0===E&&(E=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;const t=e.createElement("div");t.style.height="200px",t.style.width="100%";const r=e.createElement("div");r.style.boxSizing="content-box",r.style.height="150px",r.style.left="0px",r.style.overflow="hidden",r.style.position="absolute",r.style.top="0px",r.style.width="200px",r.style.visibility="hidden",r.appendChild(t),(e.body||e.documentElement).appendChild(r);const n=t.offsetWidth;r.style.overflow="scroll";let s=t.offsetWidth;n===s&&(s=r.clientWidth);return(e.body||e.documentElement).removeChild(r),n-s}(e));return E},t.getSelectionEndPosition=function(e){if(e.selectionEnd)return e.selectionEnd;return 0},t.getSelectionText=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;const t=e.document;let r="";e.getSelection?r=e.getSelection().toString():t.selection&&"Control"!==t.selection.type&&(r=t.selection.createRange().text);return r},t.getStyle=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window;if(!e)return;if(e===r)return"width"===t?`${r.innerWidth}px`:"height"===t?`${r.innerHeight}px`:void 0;const n=e.style[t];if(""!==n&&void 0!==n)return n;const s=y(e,r);if(""!==s[t]&&void 0!==s[t])return s[t]},t.getTrimmingContainer=function(e){const t=e.ownerDocument,r=t.defaultView;let n=e.parentNode;for(;n&&n.style&&t.body!==n;){if("visible"!==n.style.overflow&&""!==n.style.overflow)return n;const e=y(n,r),t=["scroll","hidden","auto"],s=e.getPropertyValue("overflow"),i=e.getPropertyValue("overflow-y"),o=e.getPropertyValue("overflow-x");if(t.includes(s)||t.includes(i)||t.includes(o))return n;n=n.parentNode}return r},t.getWindowScrollLeft=m,t.getWindowScrollTop=f,t.hasAccessToParentWindow=function(e){return!!Object.getPrototypeOf(e.parent)},t.hasClass=function(e,t){if(void 0===e.classList||"string"!=typeof t||""===t)return!1;return e.classList.contains(t)},t.hasHorizontalScrollbar=function(e){return e.offsetHeight!==e.clientHeight},t.hasVerticalScrollbar=function(e){return e.offsetWidth!==e.clientWidth},t.index=function(e){let t=0,r=e;if(r.previousSibling)for(;r=r.previousSibling;)t+=1;return t},t.innerHeight=function(e){return e.clientHeight||e.innerHeight},t.innerWidth=function(e){return e.clientWidth||e.innerWidth},t.isChildOf=function(e,t){let r=e.parentNode,n=[];"string"==typeof t?n=e.defaultView?Array.prototype.slice.call(e.querySelectorAll(t),0):Array.prototype.slice.call(e.ownerDocument.querySelectorAll(t),0):n.push(t);for(;null!==r;){if(n.indexOf(r)>-1)return!0;r=r.parentNode}return!1},t.isDetached=function(e){return!e.parentNode},t.isInput=w,t.isOutsideInput=C,t.isThisHotChild=function(e,t){const r=e.closest(".handsontable");return!!r&&(r.parentNode===t||r===t)},t.isVisible=function e(t){const r=t.ownerDocument.documentElement;let n=t;for(;n!==r;){if(null===n)return!1;if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){if(n.host){if(n.host.impl)return e(n.host.impl);if(n.host)return e(n.host);throw new Error("Lost in Web Components world")}return!1}if("none"===y(n).display)return!1;n=n.parentNode}return!0},t.makeElementContentEditableAndSelectItsContent=v,t.matchesCSSRules=function(e,t){const{selectorText:r}=t;let n=!1;t.type===CSSRule.STYLE_RULE&&r&&(e.msMatchesSelector?n=e.msMatchesSelector(r):e.matches&&(n=e.matches(r)));return n},t.observeVisibilityChangeOnce=function(e,t){new IntersectionObserver(((r,n)=>{r.forEach((r=>{r.isIntersecting&&null!==e.offsetParent&&(t(),n.unobserve(e))}))}),{root:e.ownerDocument.body}).observe(e)},t.offset=function(e){const t=e.ownerDocument,r=t.defaultView,n=t.documentElement;let s,i,o,a=e;s=a.offsetLeft,i=a.offsetTop,o=a;for(;(a=a.offsetParent)&&a!==t.body&&"offsetLeft"in a;)s+=a.offsetLeft,i+=a.offsetTop,o=a;o&&"fixed"===o.style.position&&(s+=r.pageXOffset||n.scrollLeft,i+=r.pageYOffset||n.scrollTop);return{left:s,top:i}},t.outerHeight=function(e){return e.offsetHeight},t.outerWidth=function(e){return e.offsetWidth},t.overlayContainsElement=function(e,t,r){const n=r.parentElement.querySelector(`.ht_clone_${e}`);return n?n.contains(t):null},t.removeAttribute=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);const{regexFree:r,regexes:n}=l(t,!0);r.forEach((t=>{""!==t&&e.removeAttribute(t)})),n.forEach((t=>{e.getAttributeNames().forEach((r=>{t.test(r)&&e.removeAttribute(r)}))}))},t.removeClass=u,t.removeContentEditableFromElementAndDeselect=R,t.removeEvent=function(e,t,r){e.removeEventListener(t,r,!1)},t.removeTextNodes=function e(t){if(3===t.nodeType)t.parentNode.removeChild(t);else if(["TABLE","THEAD","TBODY","TFOOT","TR"].indexOf(t.nodeName)>-1){const r=t.childNodes;for(let t=r.length-1;t>=0;t--)e(r[t])}},t.resetCssTransform=function(e){e.style.transform&&""!==e.style.transform&&(e.style.transform="")},t.runWithSelectedContendEditableElement=function(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];v(e,r),t(),R(e,r)},t.selectElementIfAllowed=function(e){C(e.ownerDocument.activeElement)||e.select()},t.setAttribute=c,t.setCaretPosition=function(e,t,r){void 0===r&&(r=t);if(e.setSelectionRange){e.focus();try{e.setSelectionRange(t,r)}catch(n){const s=e.parentNode,i=s.style.display;s.style.display="block",e.setSelectionRange(t,r),s.style.display=i}}},t.setOverlayPosition=function(e,t,r){e.style.transform=`translate3d(${t},${r},0)`},r(67834),r(15724);var n=r(69114),s=r(81595);function i(e){return Object.getPrototypeOf(e.parent)&&e.frameElement}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0;const{ELEMENT_NODE:n,DOCUMENT_FRAGMENT_NODE:s}=Node;let i=e;for(;null!=i&&i!==r;){const{nodeType:e,nodeName:r}=i;if(e===n&&(t.includes(r)||t.includes(i)))return i;const{host:o}=i;i=o&&e===s?o:i.parentNode}return null}function a(e){return e&&e.length?e.filter((e=>!!e)):[]}function l(e,t){if(!e||!e.length)return t?{regexFree:[],regexes:[]}:[];const r=[],n=[];return n.push(...e.filter((e=>{const n=e instanceof RegExp;return n&&t&&r.push(e),!n}))),t?{regexFree:n,regexes:r}:n}function h(e,t){"string"==typeof t&&(t=t.split(" ")),(t=a(t)).length>0&&e.classList.add(...t)}function u(e,t){"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);let{regexFree:r,regexes:n}=l(t,!0);r=a(r),r.length>0&&e.classList.remove(...r),n.forEach((t=>{e.classList.forEach((r=>{t.test(r)&&e.classList.remove(r)}))}))}function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0;Array.isArray(t)||(t=[[t,r]]),t.forEach((t=>{Array.isArray(t)&&""!==t[0]&&e.setAttribute(...t)}))}function d(e){let t;for(;t=e.lastChild;)e.removeChild(t)}const p=t.HTML_CHARACTERS=/(<(.*)>|&(.*);)/;function g(e,t){const r=e.firstChild;r&&3===r.nodeType&&null===r.nextSibling?r.textContent=t:(d(e),e.appendChild(e.ownerDocument.createTextNode(t)))}function f(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollY}function m(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollX}function y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;return e.currentStyle||t.getComputedStyle(e)}let E;function w(e){return e&&(["INPUT","SELECT","TEXTAREA"].indexOf(e.nodeName)>-1||"true"===e.contentEditable)}function C(e){return w(e)&&!1===e.hasAttribute("data-hot-input")}function v(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const n=e.ownerDocument,i=n.createRange(),o=n.defaultView.getSelection();c(e,"contenteditable",!0),r&&c(e,...(0,s.A11Y_HIDDEN)()),t&&h(e,"invisibleSelection"),i.selectNodeContents(e),o.removeAllRanges(),o.addRange(i)}function R(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const r=e.ownerDocument.defaultView.getSelection();e.hasAttribute("aria-hidden")&&e.removeAttribute("aria-hidden"),r.removeAllRanges(),t&&u(e,"invisibleSelection"),e.removeAttribute("contenteditable")}},24456:(e,t)=>{"use strict";t.__esModule=!0,t.isImmediatePropagationStopped=function(e){return!1===e.isImmediatePropagationEnabled},t.isLeftClick=function(e){return 0===e.button},t.isRightClick=function(e){return 2===e.button},t.isTouchEvent=function(e){return e instanceof TouchEvent},t.offsetRelativeTo=function(e,t){const r={x:e.offsetX,y:e.offsetY};let n=e.target;if(!(t instanceof HTMLElement)||n!==t&&n.contains(t))return r;for(;n!==t;)r.x+=n.offsetLeft,r.y+=n.offsetTop,n=n.offsetParent;return r},t.stopImmediatePropagation=function(e){e.isImmediatePropagationEnabled=!1,e.cancelBubble=!0}},36201:(e,t)=>{"use strict";let r;t.__esModule=!0,t.cancelAnimationFrame=function(e){window.cancelAnimationFrame(e)},t.getComparisonFunction=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r)return r;r="object"==typeof Intl?new Intl.Collator(e,t).compare:"function"==typeof String.prototype.localeCompare?(e,t)=>`${e}`.localeCompare(t):(e,t)=>e===t?0:e>t?-1:1;return r},t.isCSR=function(){return"undefined"!=typeof window},t.isTouchSupported=function(){return"ontouchstart"in window},t.requestAnimationFrame=function(e){return window.requestAnimationFrame(e)}},25735:(e,t,r)=>{"use strict";t.__esModule=!0,t.curry=function(e){const t=e.length;return function r(n){return function(){for(var s=arguments.length,i=new Array(s),o=0;o<s;o++)i[o]=arguments[o];const a=n.concat(i);let l;return l=a.length>=t?e.apply(this,a):r(a),l}}([])},t.curryRight=function(e){const t=e.length;return function r(n){return function(){for(var s=arguments.length,i=new Array(s),o=0;o<s;o++)i[o]=arguments[o];const a=n.concat(i.reverse());let l;return l=a.length>=t?e.apply(this,a):r(a),l}}([])},t.debounce=function(e){let t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,n=null;return function(){for(var s=arguments.length,i=new Array(s),o=0;o<s;o++)i[o]=arguments[o];return n&&clearTimeout(n),n=setTimeout((()=>{t=e.apply(this,i)}),r),t}},t.fastCall=function(e,t,r,n,i,o,a,l){if((0,s.isDefined)(l))return e.call(t,r,n,i,o,a,l);if((0,s.isDefined)(a))return e.call(t,r,n,i,o,a);if((0,s.isDefined)(o))return e.call(t,r,n,i,o);if((0,s.isDefined)(i))return e.call(t,r,n,i);if((0,s.isDefined)(n))return e.call(t,r,n);if((0,s.isDefined)(r))return e.call(t,r);return e.call(t)},t.isFunction=function(e){return"function"==typeof e},t.partial=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return function(){for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e.apply(this,r.concat(n))}},t.pipe=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[s,...i]=t;return function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,n.arrayReduce)(i,((e,t)=>t(e)),s.apply(this,t))}},t.throttle=i,t.throttleAfterHits=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;const n=i(e,t);let s=r;function o(){for(var t=arguments.length,r=new Array(t),i=0;i<t;i++)r[i]=arguments[i];return s?(s-=1,e.apply(this,r)):n.apply(this,r)}return o.clearHits=function(){s=r},o};var n=r(98758),s=r(67508);function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,r=0;const n={lastCallThrottled:!0};let s=null;return function(){for(var i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];const l=Date.now();let h=!1;n.lastCallThrottled=!0,r||(r=l,h=!0);const u=t-(l-r);return h?(n.lastCallThrottled=!1,e.apply(this,o)):(s&&clearTimeout(s),s=setTimeout((()=>{n.lastCallThrottled=!1,e.apply(this,o),r=0,s=void 0}),u)),n}}},67508:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t._injectProductInfo=function(e,t){const r=!a(e),n="string"==typeof e&&"non-commercial-and-evaluation"===e.toLowerCase(),i="14.6.0";let o,w="invalid",C="invalid";const v=function(e){let t=[][l],r=t;if(e[l]!==d("Z"))return!1;for(let t="",n="B<H4P+".split(""),s=d(n.shift());s;s=d(n.shift()||"A"))--s<""[l]?r|=(u(`${u(h(t)+(h(c(e,Math.abs(s),2))+[]).padStart(2,"0"))}`)%97||2)>>1:t=c(e,s,s?1===n[l]?9:8:6);return r===t}(e=p(e||""));if(r||n||v)if(v){const t=(0,s.default)("01/10/2024","DD/MM/YYYY"),r=Math.floor(t.toDate().getTime()/864e5),n=g(e);o=(0,s.default)(864e5*(n+1),"x").format("MMMM DD, YYYY"),r>n?(w="expired",C="expired"):(w="valid",C="valid")}else n?(w="non_commercial",C="valid"):(w="invalid",C="invalid");else w="missing",C="missing";f()&&(w="valid",C="valid");if(!m&&"valid"!==w){y[w]({keyValidityDate:o,hotVersion:i})&&console["non_commercial"===w?"info":"warn"](y[w]({keyValidityDate:o,hotVersion:i})),m=!0}if("valid"!==C&&t.parentNode){if(E[C]({keyValidityDate:o,hotVersion:i})){const e=document.createElement("div");e.className="hot-display-license-info",e.innerHTML=E[C]({keyValidityDate:o,hotVersion:i}),t.parentNode.insertBefore(e,t.nextSibling)}}},t.isDefined=function(e){return void 0!==e},t.isEmpty=a,t.isRegExp=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},t.isUndefined=o,t.stringify=function(e){let t;switch(typeof e){case"string":case"number":t=`${e}`;break;case"object":t=null===e?"":e.toString();break;case"undefined":t="";break;default:t=e.toString()}return t};var s=n(r(1314)),i=r(12556);function o(e){return void 0===e}function a(e){return null===e||""===e||o(e)}const l="length",h=e=>parseInt(e,16),u=e=>parseInt(e,10),c=(e,t,r)=>e.substr(t,r),d=e=>e.codePointAt(0)-65,p=e=>`${e}`.replace(/\-/g,""),g=e=>h(c(p(e),h("12"),d("F")))/(h(c(p(e),d("B"),~~![][l]))||9),f=()=>"undefined"!=typeof location&&/^([a-z0-9\-]+\.)?\x68\x61\x6E\x64\x73\x6F\x6E\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6D$/i.test(location.host);let m=!1;const y={invalid:()=>i.toSingleLine`
+        turning off the "renderAllRows" option.`)),this.table.isAriaEnabled()&&(0,h.setAttribute)(this.rootNode,[(0,u.A11Y_ROWGROUP)()]),this.orderView.setSize(e).setOffset(this.table.renderedRowToSource(0)).start();for(let n=0;n<e;n++){this.orderView.render();const e=this.orderView.getCurrentNode(),s=this.table.renderedRowToSource(n);var t,r;if(this.table.isAriaEnabled())(0,h.setAttribute)(e,[(0,u.A11Y_ROW)(),(0,u.A11Y_ROWINDEX)(s+(null!==(t=null===(r=this.table.rowUtils)||void 0===r||null===(r=r.dataAccessObject)||void 0===r?void 0:r.columnHeaders.length)&&void 0!==t?t:0)+1)]);(0,h.removeClass)(e,[c,d]),(s+1)%2==0?(0,h.addClass)(e,c):(0,h.addClass)(e,d)}this.orderView.end()}}t.default=g},95593:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e){let{cellRenderer:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,s.default)(this,"rootNode",void 0),(0,s.default)(this,"rootDocument",void 0),(0,s.default)(this,"rowHeaders",null),(0,s.default)(this,"columnHeaders",null),(0,s.default)(this,"colGroup",null),(0,s.default)(this,"rows",null),(0,s.default)(this,"cells",null),(0,s.default)(this,"rowFilter",null),(0,s.default)(this,"columnFilter",null),(0,s.default)(this,"rowUtils",null),(0,s.default)(this,"columnUtils",null),(0,s.default)(this,"rowsToRender",0),(0,s.default)(this,"columnsToRender",0),(0,s.default)(this,"rowHeaderFunctions",[]),(0,s.default)(this,"rowHeadersCount",0),(0,s.default)(this,"columnHeaderFunctions",[]),(0,s.default)(this,"columnHeadersCount",0),(0,s.default)(this,"cellRenderer",void 0),(0,s.default)(this,"activeOverlayName",void 0),this.rootNode=e,this.rootDocument=this.rootNode.ownerDocument,this.cellRenderer=t}setActiveOverlayName(e){this.activeOverlayName=e}setAxisUtils(e,t){this.rowUtils=e,this.columnUtils=t}setViewportSize(e,t){this.rowsToRender=e,this.columnsToRender=t}setFilters(e,t){this.rowFilter=e,this.columnFilter=t}setHeaderContentRenderers(e,t){this.rowHeaderFunctions=e,this.rowHeadersCount=e.length,this.columnHeaderFunctions=t,this.columnHeadersCount=t.length}setRenderers(){let{rowHeaders:e,columnHeaders:t,colGroup:r,rows:n,cells:s}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.setTable(this),t.setTable(this),r.setTable(this),n.setTable(this),s.setTable(this),this.rowHeaders=e,this.columnHeaders=t,this.colGroup=r,this.rows=n,this.cells=s}renderedRowToSource(e){return this.rowFilter.renderedToSource(e)}renderedColumnToSource(e){return this.columnFilter.renderedToSource(e)}isAriaEnabled(){return this.rowUtils.wtSettings.getSetting("ariaTags")}render(){this.colGroup.adjust(),this.columnHeaders.adjust(),this.rows.adjust(),this.rowHeaders.adjust(),this.columnHeaders.render(),this.rows.render(),this.rowHeaders.render(),this.cells.render(),this.columnUtils.calculateWidths(),this.colGroup.render();const{rowsToRender:e,rows:t}=this;for(let r=0;r<e;r++){const e=t.getRenderedNode(r);if(e.firstChild){const t=this.renderedRowToSource(r),n=this.rowUtils.getHeightByOverlayName(t,this.activeOverlayName);e.firstChild.style.height=n?n-1+"px":""}}}}},19184:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(49536);function o(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function a(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var l=new WeakSet;function h(e){const{wtSettings:t,inlineStartOverlay:r,wtTable:n,wtViewport:s,totalColumns:o,rootWindow:a}=this.dataAccessObject;if(r.mainTableScrollableElement===a){let l=null;if(t.getSetting("rtlMode")){const e=n.TABLE.getBoundingClientRect(),t=this.dataAccessObject.rootWindow.document.documentElement.offsetWidth;l=Math.abs(e.right-t)}else{l=(0,i.offset)(n.wtRootElement).left}const h=Math.abs((0,i.getScrollLeft)(a,a));if(l>h){const t=(0,i.innerWidth)(a);let n=s.getRowHeaderWidth();for(let s=1;s<=o;s++)if(n+=r.sumCellSizes(s-1,s),l+n-h>=t){e=s-2;break}}}return e}function u(e){const{topOverlay:t,wtTable:r,wtViewport:n,totalRows:s,rootWindow:o}=this.dataAccessObject;if(t.mainTableScrollableElement===o){const a=(0,i.offset)(r.wtRootElement),l=(0,i.getScrollTop)(o,o);if(a.top>l){const r=(0,i.innerHeight)(o);let h=n.getColumnHeaderHeight();for(let n=1;n<=s;n++)if(h+=t.sumCellSizes(n-1,n),a.top+h-l>=r){e=n-2;break}}}return e}t.default=class{constructor(e){o(this,l),(0,s.default)(this,"dataAccessObject",void 0),this.dataAccessObject=e}scrollViewport(e,t,r,n,s){const i=this.scrollViewportHorizontally(e.col,r,s),o=this.scrollViewportVertically(e.row,t,n);return i||o}scrollViewportHorizontally(e,t,r){const{drawn:n,totalColumns:s}=this.dataAccessObject;if(!n||!Number.isInteger(e)||e<0||e>s)return!1;const i=void 0===t&&void 0===r,{fixedColumnsStart:o,inlineStartOverlay:a}=this.dataAccessObject;if(i&&e<o)return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollHorizontally",e),!Number.isInteger(e)||e<0||e>s)return!1;const l=this.getFirstVisibleColumn(),h=this.getLastVisibleColumn();let u=!1;return(i&&(e<l||e>h)||!i)&&(u=a.scrollTo(e,i?e>=this.getLastPartiallyVisibleColumn():t)),u}scrollViewportVertically(e,t,r){const{drawn:n,totalRows:s}=this.dataAccessObject;if(!n||!Number.isInteger(e)||e<0||e>s)return!1;const i=void 0===t&&void 0===r,{fixedRowsBottom:o,fixedRowsTop:a,topOverlay:l}=this.dataAccessObject;if(i&&(e<a||e>s-o-1))return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollVertically",e),!Number.isInteger(e)||e<0||e>s)return!1;const h=this.getFirstVisibleRow(),u=this.getLastVisibleRow();let c=!1;return(i&&(e<h||e>u)||!i)&&(c=l.scrollTo(e,i?e>=this.getLastPartiallyVisibleRow():r)),c}getFirstVisibleRow(){return this.dataAccessObject.wtTable.getFirstVisibleRow()}getLastVisibleRow(){return a(l,this,u).call(this,this.dataAccessObject.wtTable.getLastVisibleRow())}getFirstPartiallyVisibleRow(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleRow()}getLastPartiallyVisibleRow(){return a(l,this,u).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleRow())}getFirstVisibleColumn(){return this.dataAccessObject.wtTable.getFirstVisibleColumn()}getLastVisibleColumn(){return a(l,this,h).call(this,this.dataAccessObject.wtTable.getLastVisibleColumn())}getFirstPartiallyVisibleColumn(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleColumn()}getLastPartiallyVisibleColumn(){return a(l,this,h).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleColumn())}}},73717:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(49536),s=r(24456),i=r(58460),o=r(1479),a=r(98290);t.default=class{constructor(e,t){t&&(this.eventManager=e.eventManager,this.instance=e,this.wot=e,this.settings=t,this.mouseDown=!1,this.main=null,this.top=null,this.bottom=null,this.start=null,this.end=null,this.topStyle=null,this.bottomStyle=null,this.startStyle=null,this.endStyle=null,this.cornerDefaultStyle=a.CORNER_DEFAULT_STYLE,this.cornerCenterPointOffset=-parseInt(this.cornerDefaultStyle.width,10)/2,this.corner=null,this.cornerStyle=null,this.createBorders(t),this.registerListeners())}registerListeners(){const e=this.wot.rootDocument.body;this.eventManager.addEventListener(e,"mousedown",(()=>this.onMouseDown())),this.eventManager.addEventListener(e,"mouseup",(()=>this.onMouseUp()));for(let e=0,t=this.main.childNodes.length;e<t;e++){const t=this.main.childNodes[e];this.eventManager.addEventListener(t,"mouseenter",(t=>this.onMouseEnter(t,this.main.childNodes[e])))}}onMouseDown(){this.mouseDown=!0}onMouseUp(){this.mouseDown=!1}onMouseEnter(e,t){if(!this.mouseDown||!this.wot.getSetting("hideBorderOnMouseDownOver"))return;e.preventDefault(),(0,s.stopImmediatePropagation)(e);const r=this,n=this.wot.rootDocument.body,i=t.getBoundingClientRect();t.style.display="none",this.eventManager.addEventListener(n,"mousemove",(function e(s){var o;((o=s).clientY<Math.floor(i.top)||o.clientY>Math.ceil(i.top+i.height)||o.clientX<Math.floor(i.left)||o.clientX>Math.ceil(i.left+i.width))&&(r.eventManager.removeEventListener(n,"mousemove",e),t.style.display="block")}))}createBorders(e){const{rootDocument:t}=this.wot;this.main=t.createElement("div");const r=["top","start","bottom","end","corner"];let n=this.main.style;n.position="absolute",n.top=0,n.left=0;for(let s=0;s<5;s++){const i=r[s],o=t.createElement("div");o.className=`wtBorder ${this.settings.className||""}`,this.settings[i]&&this.settings[i].hide&&(o.className+=" hidden"),n=o.style,n.backgroundColor=this.settings[i]&&this.settings[i].color?this.settings[i].color:e.border.color,n.height=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,n.width=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,this.main.appendChild(o)}this.top=this.main.childNodes[0],this.start=this.main.childNodes[1],this.bottom=this.main.childNodes[2],this.end=this.main.childNodes[3],this.topStyle=this.top.style,this.startStyle=this.start.style,this.bottomStyle=this.bottom.style,this.endStyle=this.end.style,this.corner=this.main.childNodes[4],this.corner.className+=" corner",this.cornerStyle=this.corner.style,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.height=this.cornerDefaultStyle.height,this.cornerStyle.border=[this.cornerDefaultStyle.borderWidth,this.cornerDefaultStyle.borderStyle,this.cornerDefaultStyle.borderColor].join(" "),(0,o.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.createMultipleSelectorHandles(),this.disappear();const{wtTable:s}=this.wot;let i=s.bordersHolder;i||(i=t.createElement("div"),i.className="htBorders",s.bordersHolder=i,s.spreader.appendChild(i)),i.appendChild(this.main)}createMultipleSelectorHandles(){const{rootDocument:e}=this.wot;this.selectionHandles={top:e.createElement("DIV"),topHitArea:e.createElement("DIV"),bottom:e.createElement("DIV"),bottomHitArea:e.createElement("DIV")};this.selectionHandles.top.className="topSelectionHandle topLeftSelectionHandle",this.selectionHandles.topHitArea.className="topSelectionHandle-HitArea topLeftSelectionHandle-HitArea",this.selectionHandles.bottom.className="bottomSelectionHandle bottomRightSelectionHandle",this.selectionHandles.bottomHitArea.className="bottomSelectionHandle-HitArea bottomRightSelectionHandle-HitArea",this.selectionHandles.styles={top:this.selectionHandles.top.style,topHitArea:this.selectionHandles.topHitArea.style,bottom:this.selectionHandles.bottom.style,bottomHitArea:this.selectionHandles.bottomHitArea.style};const t={position:"absolute",height:"40px",width:"40px","border-radius":`${parseInt(40/1.5,10)}px`};(0,i.objectEach)(t,((e,t)=>{this.selectionHandles.styles.bottomHitArea[t]=e,this.selectionHandles.styles.topHitArea[t]=e}));const r={position:"absolute",height:"10px",width:"10px","border-radius":`${parseInt(10/1.5,10)}px`,background:"#F5F5FF",border:"1px solid #4285c8"};(0,i.objectEach)(r,((e,t)=>{this.selectionHandles.styles.bottom[t]=e,this.selectionHandles.styles.top[t]=e})),this.main.appendChild(this.selectionHandles.top),this.main.appendChild(this.selectionHandles.bottom),this.main.appendChild(this.selectionHandles.topHitArea),this.main.appendChild(this.selectionHandles.bottomHitArea)}isPartRange(e,t){const r=this.wot.selectionManager.getAreaSelection();return!(!r.cellRange||e===r.cellRange.to.row&&t===r.cellRange.to.col)}updateMultipleSelectionHandlesPosition(e,t,r,n,s,i){const o=this.wot.wtSettings.getSetting("rtlMode")?"right":"left",{top:a,topHitArea:l,bottom:h,bottomHitArea:u}=this.selectionHandles.styles,c=parseInt(a.borderWidth,10),d=parseInt(a.width,10),p=parseInt(l.width,10),g=this.wot.wtTable.getWidth(),f=this.wot.wtTable.getHeight();a.top=`${parseInt(r-d-1,10)}px`,a[o]=`${parseInt(n-d-1,10)}px`,l.top=`${parseInt(r-p/4*3,10)}px`,l[o]=`${parseInt(n-p/4*3,10)}px`;const m=Math.min(parseInt(n+s,10),g-d-2*c),y=Math.min(parseInt(n+s-p/4,10),g-p-2*c);h[o]=`${m}px`,u[o]=`${y}px`;const E=Math.min(parseInt(r+i,10),f-d-2*c),w=Math.min(parseInt(r+i-p/4,10),f-p-2*c);h.top=`${E}px`,u.top=`${w}px`,this.settings.border.cornerVisible&&this.settings.border.cornerVisible()?(a.display="block",l.display="block",this.isPartRange(e,t)?(h.display="none",u.display="none"):(h.display="block",u.display="block")):(a.display="none",h.display="none",l.display="none",u.display="none"),e===this.wot.wtSettings.getSetting("fixedRowsTop")||t===this.wot.wtSettings.getSetting("fixedColumnsStart")?(a.zIndex="9999",l.zIndex="9999"):(a.zIndex="",l.zIndex="")}appear(e){if(this.disabled)return;const{wtTable:t,rootDocument:r,rootWindow:s}=this.wot;let i,a,l,h,u,c;const d=t.getRenderedRowsCount();for(let r=0;r<d;r+=1){const n=t.rowFilter.renderedToSource(r);if(n>=e[0]&&n<=e[2]){i=n,u=e[0];break}}for(let r=d-1;r>=0;r-=1){const n=t.rowFilter.renderedToSource(r);if(n>=e[0]&&n<=e[2]){a=n;break}}const p=t.getRenderedColumnsCount();for(let r=0;r<p;r+=1){const n=t.columnFilter.renderedToSource(r);if(n>=e[1]&&n<=e[3]){l=n,c=e[1];break}}for(let r=p-1;r>=0;r-=1){const n=t.columnFilter.renderedToSource(r);if(n>=e[1]&&n<=e[3]){h=n;break}}if(void 0===i||void 0===l)return void this.disappear();let g=t.getCell(this.wot.createCellCoords(i,l));const f=i!==a||l!==h,m=f?t.getCell(this.wot.createCellCoords(a,h)):g,y=(0,n.offset)(g),E=f?(0,n.offset)(m):y,w=(0,n.offset)(t.TABLE),C=(0,n.outerWidth)(t.TABLE),v=y.top,R=y.left,S=this.wot.wtSettings.getSetting("rtlMode");let T=0,N=0;if(S){const e=(0,n.outerWidth)(g),t=s.innerWidth-w.left-C;N=R+e-E.left,T=s.innerWidth-R-e-t-1}else N=E.left+(0,n.outerWidth)(m)-R,T=R-w.left-1;if(this.isEntireColumnSelected(i,a)){const e=this.getDimensionsFromHeader("columns",l,h,u,w);let t=null;e&&([t,T,N]=e),t&&(g=t)}let M=v-w.top-1,_=E.top+(0,n.outerHeight)(m)-v;if(this.isEntireRowSelected(l,h)){const e=this.getDimensionsFromHeader("rows",i,a,c,w);let t=null;e&&([t,M,_]=e),t&&(g=t)}const b=(0,n.getComputedStyle)(g,s);parseInt(b.borderTopWidth,10)>0&&(M+=1,_=_>0?_-1:0),parseInt(b[S?"borderRightWidth":"borderLeftWidth"],10)>0&&(T+=1,N=N>0?N-1:0);const A=S?"right":"left";this.topStyle.top=`${M}px`,this.topStyle[A]=`${T}px`,this.topStyle.width=`${N}px`,this.topStyle.display="block",this.startStyle.top=`${M}px`,this.startStyle[A]=`${T}px`,this.startStyle.height=`${_}px`,this.startStyle.display="block";const O=Math.floor(this.settings.border.width/2);this.bottomStyle.top=M+_-O+"px",this.bottomStyle[A]=`${T}px`,this.bottomStyle.width=`${N}px`,this.bottomStyle.display="block",this.endStyle.top=`${M}px`,this.endStyle[A]=T+N-O+"px",this.endStyle.height=`${_+1}px`,this.endStyle.display="block";let I=this.settings.border.cornerVisible;I="function"==typeof I?I(this.settings.layerLevel):I;const x=this.wot.getSetting("onModifyGetCellCoords",a,h);let[P,L]=[a,h];if(x&&Array.isArray(x)&&([,,P,L]=x),(0,o.isMobileBrowser)()||!I||this.isPartRange(P,L))this.cornerStyle.display="none";else{this.cornerStyle.top=M+_+this.cornerCenterPointOffset-1+"px",this.cornerStyle[A]=T+N+this.cornerCenterPointOffset-1+"px",this.cornerStyle.borderRightWidth=this.cornerDefaultStyle.borderWidth,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.display="none";let e=(0,n.getTrimmingContainer)(t.TABLE);const i=e===s;i&&(e=r.documentElement);const o=parseInt(this.cornerDefaultStyle.width,10)/2,l=parseInt(this.cornerDefaultStyle.height,10)/2;if(h===this.wot.getSetting("totalColumns")-1){const t=i?m.getBoundingClientRect().left:m.offsetLeft;let r=!1,s=0;S?(s=t-parseInt(this.cornerDefaultStyle.width,10)/2,r=s<0):(s=t+(0,n.outerWidth)(m)+parseInt(this.cornerDefaultStyle.width,10)/2,r=s>=(0,n.innerWidth)(e)),r&&(this.cornerStyle[A]=`${Math.floor(T+N+this.cornerCenterPointOffset-o)}px`,this.cornerStyle[S?"borderLeftWidth":"borderRightWidth"]=0)}if(a===this.wot.getSetting("totalRows")-1){(i?m.getBoundingClientRect().top:m.offsetTop)+(0,n.outerHeight)(m)+parseInt(this.cornerDefaultStyle.height,10)/2>=(0,n.innerHeight)(e)&&(this.cornerStyle.top=`${Math.floor(M+_+this.cornerCenterPointOffset-l)}px`,this.cornerStyle.borderBottomWidth=0)}this.cornerStyle.display="block"}(0,o.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.updateMultipleSelectionHandlesPosition(a,h,M,T,N,_)}isEntireColumnSelected(e,t){return e===this.wot.wtTable.getFirstRenderedRow()&&t===this.wot.wtTable.getLastRenderedRow()}isEntireRowSelected(e,t){return e===this.wot.wtTable.getFirstRenderedColumn()&&t===this.wot.wtTable.getLastRenderedColumn()}getDimensionsFromHeader(e,t,r,s,i){const{wtTable:o}=this.wot,a=o.wtRootElement.parentNode;let l=null,h=null,u=null,c=null,d=null,p=null,g=null,f=null;switch(e){case"rows":l=function(){return o.getRowHeader(...arguments)},h=function(){return(0,n.outerHeight)(...arguments)},u="ht__selection--rows",p="top";break;case"columns":l=function(){return o.getColumnHeader(...arguments)},h=function(){return(0,n.outerWidth)(...arguments)},u="ht__selection--columns",p="left"}if(a.classList.contains(u)){const e=this.wot.getSetting("columnHeaders").length;if(g=l(t,e-s),f=l(r,e-s),!g||!f)return!1;const o=(0,n.offset)(g),a=(0,n.offset)(f);return g&&f&&(c=o[p]-i[p]-1,d=a[p]+h(f)-o[p]),[g,c,d]}return!1}changeBorderStyle(e,t){const r=this[e].style,s=t[e];!s||s.hide?(0,n.addClass)(this[e],"hidden"):((0,n.hasClass)(this[e],"hidden")&&(0,n.removeClass)(this[e],"hidden"),r.backgroundColor=s.color,"top"!==e&&"bottom"!==e||(r.height=`${s.width}px`),"start"!==e&&"end"!==e||(r.width=`${s.width}px`))}changeBorderToDefaultStyle(e){const t=1,r="#000",n=this[e].style;n.backgroundColor=r,n.width=`${t}px`,n.height=`${t}px`}toggleHiddenClass(e,t){this.changeBorderToDefaultStyle(e),t?(0,n.addClass)(this[e],"hidden"):(0,n.removeClass)(this[e],"hidden")}disappear(){this.topStyle.display="none",this.bottomStyle.display="none",this.startStyle.display="none",this.endStyle.display="none",this.cornerStyle.display="none",(0,o.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&(this.selectionHandles.styles.top.display="none",this.selectionHandles.styles.topHitArea.display="none",this.selectionHandles.styles.bottom.display="none",this.selectionHandles.styles.bottomHitArea.display="none")}destroy(){this.eventManager.destroyWithOwnEventsOnly(),this.main.parentNode.removeChild(this.main)}}},98290:(e,t)=>{"use strict";t.__esModule=!0;t.CORNER_DEFAULT_STYLE=Object.freeze({width:"6px",height:"6px",borderWidth:"1px",borderStyle:"solid",borderColor:"#FFF"})},74361:(e,t)=>{"use strict";t.__esModule=!0;t.ACTIVE_HEADER_TYPE="active-header",t.HEADER_TYPE="header",t.AREA_TYPE="area",t.FOCUS_TYPE="focus",t.FILL_TYPE="fill",t.ROW_TYPE="row",t.COLUMN_TYPE="column",t.CUSTOM_SELECTION_TYPE="custom-selection"},37364:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s={SelectionManager:!0,Selection:!0},i=n(r(8858));t.Selection=i.default;var o=r(74361);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(s,e)||e in t&&t[e]===o[e]||(t[e]=o[e]))}));var a=r(98290);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(s,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}));var l=r(34263);t.SelectionManager=l.SelectionManager},34263:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724),r(25352),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=r(49536),i=r(76842),o=n(r(73717));function a(e,t,r){l(e,t),t.set(e,r)}function l(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function h(e,t){return e.get(c(e,t))}function u(e,t,r){return e.set(c(e,t),r),r}function c(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var d=new WeakMap,p=new WeakMap,g=new WeakMap,f=new WeakMap,m=new WeakMap,y=new WeakMap,E=new WeakSet;function w(){const e=h(f,this).get(h(d,this)),t=h(d,this).wtSettings.getSetting("onBeforeRemoveCellClassNames");if(Array.isArray(t))for(let r=0;r<t.length;r++)e.add(t[r]);e.forEach((e=>{var t,r;const n=h(d,this).wtTable.TABLE.querySelectorAll(`.${e}`);let i=[];Array.isArray(null===(t=h(p,this).options)||void 0===t?void 0:t.cellAttributes)&&(i=h(p,this).options.cellAttributes.map((e=>e[0]))),Array.isArray(null===(r=h(p,this).options)||void 0===r?void 0:r.headerAttributes)&&(i=[...i,...h(p,this).options.headerAttributes.map((e=>e[0]))]);for(let t=0,r=n.length;t<r;t++)(0,s.removeClass)(n[t],e),(0,s.removeAttribute)(n[t],i)})),e.clear()}t.SelectionManager=class{constructor(e){var t,r;l(t=this,r=E),r.add(t),a(this,d,void 0),a(this,p,void 0),a(this,g,new i.SelectionScanner),a(this,f,new WeakMap),a(this,m,new WeakSet),a(this,y,new Map),u(p,this,e)}setActiveOverlay(e){return u(d,this,e),h(g,this).setActiveOverlay(h(d,this)),h(f,this).has(h(d,this))||h(f,this).set(h(d,this),new Set),this}getFocusSelection(){return null!==h(p,this)?h(p,this).getFocus():null}getAreaSelection(){return null!==h(p,this)?h(p,this).createLayeredArea():null}getBorderInstance(e){if(!e.settings.border)return null;if(h(y,this).has(e)){const t=h(y,this).get(e);if(t.has(h(d,this)))return t.get(h(d,this));const r=new o.default(h(d,this),e.settings);return t.set(h(d,this),r),r}const t=new o.default(h(d,this),e.settings);return h(y,this).set(e,new Map([[h(d,this),t]])),t}getBorderInstances(e){var t,r;return Array.from(null!==(t=null===(r=h(y,this).get(e))||void 0===r?void 0:r.values())&&void 0!==t?t:[])}destroyBorders(e){h(y,this).get(e).forEach((e=>e.destroy())),h(y,this).delete(e)}render(e){if(null===h(p,this))return;e&&c(E,this,w).call(this);const t=Array.from(h(p,this)),r=new Map,n=new Map;for(let e=0;e<t.length;e++){const s=t[e],{className:i,headerAttributes:o,createLayers:a,selectionType:l}=s.settings;h(m,this).has(s)||(h(m,this).add(s),s.addLocalHook("destroy",(()=>this.destroyBorders(s))));const u=this.getBorderInstance(s);if(s.isEmpty()){null==u||u.disappear();continue}if(i){h(g,this).setActiveSelection(s).scan().forEach((e=>{if(r.has(e)){const t=r.get(e);t.has(i)&&!0===a?t.set(i,t.get(i)+1):t.set(i,1)}else r.set(e,new Map([[i,1]]));o&&(n.has(e)||n.set(e,[]),"TH"===e.nodeName&&n.get(e).push(...o))}))}const c=s.getCorners();h(d,this).getSetting("onBeforeDrawBorders",c,l),null==u||u.appear(c)}r.forEach(((e,t)=>{var r;const n=Array.from(e).map((e=>{let[t,r]=e;return 1===r?t:[t,...Array.from({length:r-1},((e,r)=>`${t}-${r+1}`))]})).flat();n.forEach((e=>h(f,this).get(h(d,this)).add(e))),(0,s.addClass)(t,n),"TD"===t.nodeName&&Array.isArray(null===(r=h(p,this).options)||void 0===r?void 0:r.cellAttributes)&&(0,s.setAttribute)(t,h(p,this).options.cellAttributes)})),Array.from(n.keys()).forEach((e=>{(0,s.setAttribute)(e,[...n.get(e)])}))}}},76842:(e,t,r)=>{"use strict";t.__esModule=!0,r(67834),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var n=r(49536);function s(e,t,r){i(e,t),t.set(e,r)}function i(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function o(e,t){return e.get(l(e,t))}function a(e,t,r){return e.set(l(e,t),r),r}function l(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var h=new WeakMap,u=new WeakMap,c=new WeakSet;function d(e){const{wtTable:t}=o(u,this),r=t.getRenderedRowsCount(),n=t.getRenderedColumnsCount();for(let s=0;s<r;s+=1){const r=t.rowFilter.renderedToSource(s);for(let s=0;s<n;s+=1)e(r,t.columnFilter.renderedToSource(s))}}t.SelectionScanner=class{constructor(){var e,t;i(e=this,t=c),t.add(e),s(this,h,void 0),s(this,u,void 0)}setActiveOverlay(e){return a(u,this,e),this}setActiveSelection(e){return a(h,this,e),this}scan(){const e=o(h,this).settings.selectionType,t=new Set;return"active-header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"area"===e?this.scanCellsRange((e=>t.add(e))):"focus"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e))),this.scanCellsRange((e=>t.add(e)))):"fill"===e?this.scanCellsRange((e=>t.add(e))):"header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"row"===e?(this.scanRowsInHeadersRange((e=>t.add(e))),this.scanRowsInCellsRange((e=>t.add(e)))):"column"===e&&(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanColumnsInCellsRange((e=>t.add(e)))),t}scanColumnsInHeadersRange(e){const[t,r,n,s]=o(h,this).getCorners(),{wtTable:i}=o(u,this),a=i.getRenderedColumnsCount(),l=i.getColumnHeadersCount();let c=0;for(let d=-i.getRowHeadersCount();d<a;d++){const a=i.columnFilter.renderedToSource(d);if(!(a<r||a>s)){for(let d=-l;d<0;d++){if(d<t||d>n)continue;const p=d+l;let g=i.getColumnHeader(a,p);const f=o(u,this).getSetting("onBeforeHighlightingColumnHeader",a,p,{selectionType:o(h,this).settings.selectionType,columnCursor:c,selectionWidth:s-r+1});null!==f&&(f!==a&&(g=i.getColumnHeader(f,p)),e(g))}c+=1}}}scanRowsInHeadersRange(e){const[t,r,n,s]=o(h,this).getCorners(),{wtTable:i}=o(u,this),a=i.getRenderedRowsCount(),l=i.getRowHeadersCount();let c=0;for(let d=-i.getColumnHeadersCount();d<a;d++){const a=i.rowFilter.renderedToSource(d);if(!(a<t||a>n)){for(let d=-l;d<0;d++){if(d<r||d>s)continue;const p=d+l;let g=i.getRowHeader(a,p);const f=o(u,this).getSetting("onBeforeHighlightingRowHeader",a,p,{selectionType:o(h,this).settings.selectionType,rowCursor:c,selectionHeight:n-t+1});null!==f&&(f!==a&&(g=i.getRowHeader(f,p)),e(g))}c+=1}}}scanCellsRange(e){const[t,r,s,i]=o(h,this).getCorners(),{wtTable:a}=o(u,this);l(c,this,d).call(this,((l,c)=>{if(l>=t&&l<=s&&c>=r&&c<=i){const t=a.getCell(o(u,this).createCellCoords(l,c)),r=o(u,this).getSetting("onAfterDrawSelection",l,c,o(h,this).settings.layerLevel);"string"==typeof r&&(0,n.addClass)(t,r),e(t)}}))}scanRowsInCellsRange(e){const[t,,r]=o(h,this).getCorners(),{wtTable:n}=o(u,this);l(c,this,d).call(this,((s,i)=>{if(s>=t&&s<=r){const t=n.getCell(o(u,this).createCellCoords(s,i));e(t)}}))}scanColumnsInCellsRange(e){const[,t,,r]=o(h,this).getCorners(),{wtTable:n}=o(u,this);l(c,this,d).call(this,((s,i)=>{if(i>=t&&i<=r){const t=n.getCell(o(u,this).createCellCoords(s,i));e(t)}}))}}},8858:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(58460),i=n(r(48499));class o{constructor(e,t){this.settings=e,this.cellRange=t||null}isEmpty(){return null===this.cellRange}add(e){return this.isEmpty()?this.cellRange=this.settings.createCellRange(e):this.cellRange.expand(e),this}replace(e,t){if(!this.isEmpty()){if(this.cellRange.from.isEqual(e))return this.cellRange.from=t,!0;if(this.cellRange.to.isEqual(e))return this.cellRange.to=t,!0}return!1}clear(){return this.cellRange=null,this}getCorners(){const e=this.cellRange.getOuterTopStartCorner(),t=this.cellRange.getOuterBottomEndCorner();return[e.row,e.col,t.row,t.col]}destroy(){this.runLocalHooks("destroy")}}(0,s.mixin)(o,i.default);t.default=o},20068:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(49536),o=r(58460);t.default=class{constructor(e){(0,s.default)(this,"settings",{}),(0,s.default)(this,"defaults",Object.freeze(this.getDefaults())),(0,o.objectEach)(this.defaults,((t,r)=>{if(void 0!==e[r])this.settings[r]=e[r];else{if(void 0===t)throw new Error(`A required setting "${r}" was not provided`);this.settings[r]=t}}))}getDefaults(){return{facade:void 0,table:void 0,isDataViewInstance:!0,externalRowCalculator:!1,stretchH:"none",currentRowClassName:null,currentColumnClassName:null,preventOverflow:()=>!1,preventWheel:!1,data:void 0,freezeOverlays:!1,fixedColumnsStart:0,fixedRowsTop:0,fixedRowsBottom:0,shouldRenderInlineStartOverlay:()=>this.getSetting("fixedColumnsStart")>0||this.getSetting("rowHeaders").length>0,shouldRenderTopOverlay:()=>this.getSetting("fixedRowsTop")>0||this.getSetting("columnHeaders").length>0,shouldRenderBottomOverlay:()=>this.getSetting("fixedRowsBottom")>0,minSpareRows:0,rowHeaders:()=>[],columnHeaders:()=>[],totalRows:void 0,totalColumns:void 0,cellRenderer:(e,t,r)=>{const n=this.getSetting("data",e,t);(0,i.fastInnerText)(r,null==n?"":n)},columnWidth(){},rowHeight(){},rowHeightByOverlayName(){},defaultRowHeight:23,defaultColumnWidth:50,selections:null,hideBorderOnMouseDownOver:!1,viewportRowCalculatorOverride:null,viewportColumnCalculatorOverride:null,onCellMouseDown:null,onCellContextMenu:null,onCellMouseOver:null,onCellMouseOut:null,onCellMouseUp:null,onCellDblClick:null,onCellCornerMouseDown:null,onCellCornerDblClick:null,beforeDraw:null,onDraw:null,onBeforeRemoveCellClassNames:null,onAfterDrawSelection:null,onBeforeDrawBorders:null,onBeforeViewportScrollHorizontally:e=>e,onBeforeViewportScrollVertically:e=>e,onScrollHorizontally:null,onScrollVertically:null,onBeforeTouchScroll:null,onAfterMomentumScroll:null,onBeforeStretchingColumnWidth:e=>e,onModifyRowHeaderWidth:null,onModifyGetCellCoords:null,onBeforeHighlightingRowHeader:e=>e,onBeforeHighlightingColumnHeader:e=>e,onWindowResize:null,onContainerElementResize:null,renderAllColumns:!1,renderAllRows:!1,groups:!1,rowHeaderWidth:null,columnHeaderHeight:null,headerClassName:null,rtlMode:!1,ariaTags:!0}}update(e,t){return void 0===t?(0,o.objectEach)(e,((e,t)=>{this.settings[t]=e})):this.settings[e]=t,this}getSetting(e,t,r,n,s){return"function"==typeof this.settings[e]?this.settings[e](t,r,n,s):void 0!==t&&Array.isArray(this.settings[e])?this.settings[e][t]:this.settings[e]}getSettingPure(e){return this.settings[e]}has(e){return!!this.settings[e]}}},89817:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=r(49536),o=r(25735),a=n(r(86296)),l=n(r(81956)),h=r(7961),u=n(r(40205)),c=n(r(58299)),d=r(68574),p=r(81595);t.default=class{constructor(e,t,r,n,o){(0,s.default)(this,"wtSettings",null),(0,s.default)(this,"domBindings",void 0),(0,s.default)(this,"TBODY",null),(0,s.default)(this,"THEAD",null),(0,s.default)(this,"COLGROUP",null),(0,s.default)(this,"hasTableHeight",!0),(0,s.default)(this,"hasTableWidth",!0),(0,s.default)(this,"isTableVisible",!1),(0,s.default)(this,"tableOffset",0),(0,s.default)(this,"holderOffset",0),this.domBindings=r,this.isMaster="master"===o,this.name=o,this.dataAccessObject=e,this.facadeGetter=t,this.wtSettings=n,this.instance=this.dataAccessObject.wot,this.wot=this.dataAccessObject.wot,this.TABLE=r.rootTable,(0,i.removeTextNodes)(this.TABLE),this.spreader=this.createSpreader(this.TABLE),this.hider=this.createHider(this.spreader),this.holder=this.createHolder(this.hider),this.wtRootElement=this.holder.parentNode,this.isMaster&&this.alignOverlaysWithTrimmingContainer(),this.fixTableDomTree(),this.rowFilter=null,this.columnFilter=null,this.correctHeaderWidth=!1;const a=this.wtSettings.getSettingPure("rowHeaderWidth");this.wtSettings.update("rowHeaderWidth",(()=>this._modifyRowHeaderWidth(a))),this.rowUtils=new c.default(this.dataAccessObject,this.wtSettings),this.columnUtils=new u.default(this.dataAccessObject,this.wtSettings),this.tableRenderer=new h.Renderer({TABLE:this.TABLE,THEAD:this.THEAD,COLGROUP:this.COLGROUP,TBODY:this.TBODY,rowUtils:this.rowUtils,columnUtils:this.columnUtils,cellRenderer:this.wtSettings.getSettingPure("cellRenderer")})}is(e){return this.name===e}fixTableDomTree(){const e=this.domBindings.rootDocument;this.TBODY=this.TABLE.querySelector("tbody"),this.TBODY||(this.TBODY=e.createElement("tbody"),this.TABLE.appendChild(this.TBODY)),this.THEAD=this.TABLE.querySelector("thead"),this.THEAD||(this.THEAD=e.createElement("thead"),this.TABLE.insertBefore(this.THEAD,this.TBODY)),this.COLGROUP=this.TABLE.querySelector("colgroup"),this.COLGROUP||(this.COLGROUP=e.createElement("colgroup"),this.TABLE.insertBefore(this.COLGROUP,this.THEAD))}createSpreader(e){const t=e.parentNode;let r;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(r=this.domBindings.rootDocument.createElement("div"),r.className="wtSpreader",t&&t.insertBefore(r,e),r.appendChild(e)),r.style.position="relative",this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r,[(0,p.A11Y_PRESENTATION)()]),r}createHider(e){const t=e.parentNode;let r;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(r=this.domBindings.rootDocument.createElement("div"),r.className="wtHider",t&&t.insertBefore(r,e),r.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r,[(0,p.A11Y_PRESENTATION)()]),r}createHolder(e){const t=e.parentNode;let r;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(r=this.domBindings.rootDocument.createElement("div"),r.style.position="relative",r.className="wtHolder",t&&t.insertBefore(r,e),this.isMaster&&(r.parentNode.className+="ht_master handsontable",r.parentNode.setAttribute("dir",this.wtSettings.getSettingPure("rtlMode")?"rtl":"ltr"),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r.parentNode,[(0,p.A11Y_PRESENTATION)()])),r.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(r,[(0,p.A11Y_PRESENTATION)()]),r}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,{wtOverlays:r,wtViewport:n}=this.dataAccessObject,s=t.getSetting("totalRows"),o=t.getSetting("totalColumns"),h=t.getSetting("rowHeaders"),u=h.length,c=t.getSetting("columnHeaders"),p=c.length;let g=e;if(this.isMaster&&(r.beforeDraw(),this.holderOffset=(0,i.offset)(this.holder),g=n.createCalculators(g),u&&!t.getSetting("fixedColumnsStart"))){const e=r.inlineStartOverlay.getScrollPosition(),t=this.correctHeaderWidth;this.correctHeaderWidth=0!==e,t!==this.correctHeaderWidth&&(g=!1)}if(g)this.isMaster&&r.refresh(!0);else{this.isMaster?this.tableOffset=(0,i.offset)(this.TABLE):this.tableOffset=this.dataAccessObject.parentTableOffset;const e=s>0?this.getFirstRenderedRow():0,t=o>0?this.getFirstRenderedColumn():0;this.rowFilter=new l.default(e,s,p),this.columnFilter=new a.default(t,o,u);let g=!0;if(this.isMaster){this.alignOverlaysWithTrimmingContainer();const e={};this.wtSettings.getSetting("beforeDraw",!0,e),g=!0!==e.skipRender}if(g){let e;if(this.tableRenderer.setHeaderContentRenderers(h,c),(this.is(d.CLONE_BOTTOM)||this.is(d.CLONE_BOTTOM_INLINE_START_CORNER))&&this.tableRenderer.setHeaderContentRenderers(h,[]),this.resetOversizedRows(),this.tableRenderer.setActiveOverlayName(this.name).setViewportSize(this.getRenderedRowsCount(),this.getRenderedColumnsCount()).setFilters(this.rowFilter,this.columnFilter).render(),this.isMaster&&(e=this.dataAccessObject.workspaceWidth,n.containerWidth=null,this.markOversizedColumnHeaders()),this.adjustColumnHeaderHeights(),(this.isMaster||this.is(d.CLONE_BOTTOM))&&this.markOversizedRows(),this.isMaster){this.wtSettings.getSetting("externalRowCalculator")||n.createVisibleCalculators(),r.refresh(!1),r.applyToDOM();const t=(0,i.outerWidth)(this.hider),s=(0,i.outerWidth)(this.TABLE);0!==t&&s!==t&&(this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),e!==n.getWorkspaceWidth()&&(n.containerWidth=null,this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),this.wtSettings.getSetting("onDraw",!0)}else this.is(d.CLONE_BOTTOM)&&this.dataAccessObject.cloneSource.wtOverlays.adjustElementsSize()}}let f=!1;return this.isMaster&&(f=r.topOverlay.resetFixedPosition(),r.bottomOverlay.clone&&(f=r.bottomOverlay.resetFixedPosition()||f),f=r.inlineStartOverlay.resetFixedPosition()||f,r.topInlineStartCornerOverlay&&r.topInlineStartCornerOverlay.resetFixedPosition(),r.bottomInlineStartCornerOverlay&&r.bottomInlineStartCornerOverlay.clone&&r.bottomInlineStartCornerOverlay.resetFixedPosition()),f?(r.refreshAll(),r.adjustElementsSize()):this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(g),this.isMaster&&r.afterDraw(),this.dataAccessObject.drawn=!0,this}markIfOversizedColumnHeader(e){const t=this.columnFilter.renderedToSource(e);let r=this.wtSettings.getSetting("columnHeaders").length;const n=this.wtSettings.getSetting("defaultRowHeight");let s,o,a;const l=this.wtSettings.getSetting("columnHeaderHeight")||[];for(;r;)r-=1,s=this.getColumnHeaderHeight(r),o=this.getColumnHeader(t,r),o&&(a=(0,i.innerHeight)(o),(!s&&n<a||s<a)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=a),Array.isArray(l)?null!==l[r]&&void 0!==l[r]&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=l[r]):isNaN(l)||(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=l),this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]<(l[r]||l)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[r]=l[r]||l))}adjustColumnHeaderHeights(){const{wtSettings:e}=this,t=this.THEAD.childNodes,r=this.dataAccessObject.wtViewport.oversizedColumnHeaders;for(let n=0,s=e.getSetting("columnHeaders").length;n<s;n++)if(r[n]){if(!t[n]||0===t[n].childNodes.length)return;t[n].childNodes[0].style.height=`${r[n]}px`}}resetOversizedRows(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject;if((this.isMaster||this.is(d.CLONE_BOTTOM))&&!e.getSetting("externalRowCalculator")){const e=this.getRenderedRowsCount();for(let r=0;r<e;r++){const e=this.rowFilter.renderedToSource(r);t.oversizedRows&&t.oversizedRows[e]&&(t.oversizedRows[e]=void 0)}}}getCell(e){let t=e.row,r=e.col;const n=this.wtSettings.getSetting("onModifyGetCellCoords",t,r);if(n&&Array.isArray(n)&&([t,r]=n),this.isRowBeforeRenderedRows(t))return-1;if(this.isRowAfterRenderedRows(t))return-2;if(this.isColumnBeforeRenderedColumns(r))return-3;if(this.isColumnAfterRenderedColumns(r))return-4;const s=this.getRow(t);if(!s&&t>=0)throw new Error("TR was expected to be rendered but is not");const i=s.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(r)];if(!i&&r>=0)throw new Error("TD or TH was expected to be rendered but is not");return i}getRow(e){let t=null,r=null;var n,s;e<0?(t=null===(n=this.rowFilter)||void 0===n?void 0:n.sourceRowToVisibleColHeadedRow(e),r=this.THEAD):(t=null===(s=this.rowFilter)||void 0===s?void 0:s.sourceToRendered(e),r=this.TBODY);return void 0!==t&&void 0!==r&&(!(r.childNodes.length<t+1)&&r.childNodes[t])}getColumnHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const r=this.THEAD.childNodes[t];return null==r?void 0:r.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e)]}getColumnHeaders(e){const t=[],r=this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e);return this.THEAD.childNodes.forEach((e=>{const n=e.childNodes[r];n&&t.push(n)})),t}getRowHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t>=this.wtSettings.getSetting("rowHeaders").length)return;const r=this.rowFilter.sourceToRendered(e),n=r<0?this.rowFilter.sourceRowToVisibleColHeadedRow(e):r,s=(r<0?this.THEAD:this.TBODY).childNodes[n];return null==s?void 0:s.childNodes[t]}getRowHeaders(e){const t=[],r=this.wtSettings.getSetting("rowHeaders").length;for(let n=0;n<r;n++){const r=this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)],s=null==r?void 0:r.childNodes[n];s&&t.push(s)}return t}getCoords(e){let t=e;if("TD"!==t.nodeName&&"TH"!==t.nodeName&&(t=(0,i.closest)(t,["TD","TH"])),null===t)return null;const r=t.parentNode,n=r.parentNode;let s=(0,i.index)(r),o=t.cellIndex;if((0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_TOP,t,this.wtRootElement))"THEAD"===n.nodeName&&(s-=n.childNodes.length);else if((0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM,t,this.wtRootElement)){s=this.wtSettings.getSetting("totalRows")-n.childNodes.length+s}else s=n===this.THEAD?this.rowFilter.visibleColHeadedRowToSourceRow(s):this.rowFilter.renderedToSource(s);return o=(0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_INLINE_START,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)?this.columnFilter.offsettedTH(o):this.columnFilter.visibleRowHeadedColumnToSourceColumn(o),this.wot.createCellCoords(s,o)}markOversizedRows(){if(this.wtSettings.getSetting("externalRowCalculator"))return;let e=this.TBODY.childNodes.length;let t,r,n,s,o;if(e*this.wtSettings.getSetting("defaultRowHeight")!==(0,i.innerHeight)(this.TBODY)-1||this.wtSettings.getSetting("fixedRowsBottom"))for(;e;)e-=1,n=this.rowFilter.renderedToSource(e),t=this.getRowHeight(n),s=this.getTrForRow(n),o=s.querySelector("th"),r=o?(0,i.innerHeight)(o):(0,i.innerHeight)(s)-1,(!t&&this.wtSettings.getSetting("defaultRowHeight")<r||t<r)&&(r+=1,this.dataAccessObject.wtViewport.oversizedRows[n]=r)}getTrForRow(e){return this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)]}isColumnHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("rowHeaders").length;return Math.abs(e)<=t}isRowHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("columnHeaders").length;return Math.abs(e)<=t}isRowBeforeRenderedRows(e){const t=this.getFirstRenderedRow();return e<0&&t<=0?!this.isRowHeaderRendered(e):e<t}isRowAfterRenderedRows(e){return e>this.getLastRenderedRow()}isColumnBeforeRenderedColumns(e){const t=this.getFirstRenderedColumn();return e<0&&t<=0?!this.isColumnHeaderRendered(e):e<t}isColumnAfterRenderedColumns(e){return this.columnFilter&&e>this.getLastRenderedColumn()}isColumnAfterViewport(e){return this.columnFilter&&e>this.getLastVisibleColumn()}isRowAfterViewport(e){return this.rowFilter&&e>this.getLastVisibleRow()}isColumnBeforeViewport(e){return this.columnFilter&&this.columnFilter.sourceToRendered(e)<0&&e>=0}isLastRowFullyVisible(){return this.getLastVisibleRow()===this.getLastRenderedRow()}isLastColumnFullyVisible(){return this.getLastVisibleColumn()===this.getLastRenderedColumn()}allRowsInViewport(){return this.wtSettings.getSetting("totalRows")===this.getVisibleRowsCount()}allColumnsInViewport(){return this.wtSettings.getSetting("totalColumns")===this.getVisibleColumnsCount()}getRowHeight(e){return this.rowUtils.getHeight(e)}getColumnHeaderHeight(e){return this.columnUtils.getHeaderHeight(e)}getColumnWidth(e){return this.columnUtils.getWidth(e)}getStretchedColumnWidth(e){return this.columnUtils.getStretchedColumnWidth(e)}hasDefinedSize(){return this.hasTableHeight&&this.hasTableWidth}getWidth(){return(0,i.outerWidth)(this.TABLE)}getHeight(){return(0,i.outerHeight)(this.TABLE)}getTotalWidth(){const e=(0,i.outerWidth)(this.hider);return 0!==e?e:this.getWidth()}getTotalHeight(){const e=(0,i.outerHeight)(this.hider);return 0!==e?e:this.getHeight()}isVisible(){return(0,i.isVisible)(this.TABLE)}_modifyRowHeaderWidth(e){let t=(0,o.isFunction)(e)?e():null;return Array.isArray(t)?(t=[...t],t[t.length-1]=this._correctRowHeaderWidth(t[t.length-1])):t=this._correctRowHeaderWidth(t),t}_correctRowHeaderWidth(e){let t=e;return"number"!=typeof e&&(t=this.wtSettings.getSetting("defaultColumnWidth")),this.correctHeaderWidth&&(t+=1),t}}},60763:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(92927)),o=n(r(94343)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_BOTTOM)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},69365:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(92927)),o=n(r(51672)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_BOTTOM_INLINE_START_CORNER)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},14477:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(30155)),o=n(r(51672)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_INLINE_START)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},43410:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(49536),i=n(r(89817)),o=n(r(30155)),a=n(r(94343)),l=r(58460);class h extends i.default{constructor(e,t,r,n){super(e,t,r,n,"master")}alignOverlaysWithTrimmingContainer(){const e=(0,s.getTrimmingContainer)(this.wtRootElement),{rootWindow:t}=this.domBindings;if(e===t){this.wtSettings.getSetting("preventOverflow")||(this.holder.style.overflow="visible",this.wtRootElement.style.overflow="visible")}else{const r=e.parentElement,n=(0,s.getStyle)(e,"height",t),i=(0,s.getStyle)(e,"overflow",t),o=this.holder.style,{scrollWidth:a,scrollHeight:l}=e;let h=e.offsetWidth,u=e.offsetHeight;if(r&&["auto","hidden","scroll"].includes(i)){const n=e.cloneNode(!1);n.style.overflow="auto",n.style.position="absolute",e.nextElementSibling?r.insertBefore(n,e.nextElementSibling):r.appendChild(n);const i=parseInt((0,s.getComputedStyle)(n,t).height,10);r.removeChild(n),0===i&&(u=0)}u=Math.min(u,l),o.height="auto"===n?"auto":`${u}px`,h=Math.min(h,a),o.width=`${h}px`,o.overflow="",this.hasTableHeight="auto"===o.height||u>0,this.hasTableWidth=h>0}this.isTableVisible=(0,s.isVisible)(this.TABLE)}markOversizedColumnHeaders(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject,r="master",n=e.getSetting("columnHeaders").length;if(n&&!t.hasOversizedColumnHeadersMarked[r]){const s=e.getSetting("rowHeaders").length,i=this.getRenderedColumnsCount();for(let e=0;e<n;e++)for(let e=-1*s;e<i;e++)this.markIfOversizedColumnHeader(e);t.hasOversizedColumnHeadersMarked[r]=!0}}}(0,l.mixin)(h,o.default),(0,l.mixin)(h,a.default);t.default=h},94343:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedColumn(){const e=this.dataAccessObject.startColumnRendered;return null===e?-1:e},getFirstVisibleColumn(){const e=this.dataAccessObject.startColumnVisible;return null===e?-1:e},getFirstPartiallyVisibleColumn(){const e=this.dataAccessObject.startColumnPartiallyVisible;return null===e?-1:e},getLastRenderedColumn(){const e=this.dataAccessObject.endColumnRendered;return null===e?-1:e},getLastVisibleColumn(){const e=this.dataAccessObject.endColumnVisible;return null===e?-1:e},getLastPartiallyVisibleColumn(){const e=this.dataAccessObject.endColumnPartiallyVisible;return null===e?-1:e},getRenderedColumnsCount(){return this.dataAccessObject.countColumnsRendered},getVisibleColumnsCount(){return this.dataAccessObject.countColumnsVisible},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","calculatedColumns",{writable:!1,enumerable:!1});t.default=s},30155:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedRow(){const e=this.dataAccessObject.startRowRendered;return null===e?-1:e},getFirstVisibleRow(){const e=this.dataAccessObject.startRowVisible;return null===e?-1:e},getFirstPartiallyVisibleRow(){const e=this.dataAccessObject.startRowPartiallyVisible;return null===e?-1:e},getLastRenderedRow(){const e=this.dataAccessObject.endRowRendered;return null===e?-1:e},getLastVisibleRow(){const e=this.dataAccessObject.endRowVisible;return null===e?-1:e},getLastPartiallyVisibleRow(){const e=this.dataAccessObject.endRowPartiallyVisible;return null===e?-1:e},getRenderedRowsCount(){return this.dataAccessObject.countRowsRendered},getVisibleRowsCount(){return this.dataAccessObject.countRowsVisible},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","calculatedRows",{writable:!1,enumerable:!1});t.default=s},51672:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedColumn(){return 0===this.wtSettings.getSetting("totalColumns")?-1:0},getFirstVisibleColumn(){return this.getFirstRenderedColumn()},getFirstPartiallyVisibleColumn(){return this.getFirstRenderedColumn()},getLastRenderedColumn(){return this.getRenderedColumnsCount()-1},getLastVisibleColumn(){return this.getLastRenderedColumn()},getLastPartiallyVisibleColumn(){return this.getLastRenderedColumn()},getRenderedColumnsCount(){const e=this.wtSettings.getSetting("totalColumns");return Math.min(this.wtSettings.getSetting("fixedColumnsStart"),e)},getVisibleColumnsCount(){return this.getRenderedColumnsCount()},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","stickyColumnsStart",{writable:!1,enumerable:!1});t.default=s},92927:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedRow(){const e=this.wtSettings.getSetting("totalRows"),t=this.wtSettings.getSetting("fixedRowsBottom"),r=e-t;return 0===e||0===t?-1:r<0?0:r},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.wtSettings.getSetting("totalRows")-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsBottom"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount:()=>0};(0,n.defineGetter)(s,"MIXIN_NAME","stickyRowsBottom",{writable:!1,enumerable:!1});t.default=s},58825:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(58460);const s={getFirstRenderedRow(){return 0===this.wtSettings.getSetting("totalRows")?-1:0},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.getRenderedRowsCount()-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsTop"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,n.defineGetter)(s,"MIXIN_NAME","stickyRowsTop",{writable:!1,enumerable:!1});t.default=s},55477:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(58825)),o=n(r(94343)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_TOP)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},94159:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(89817)),i=n(r(58825)),o=n(r(51672)),a=r(58460),l=r(68574);class h extends s.default{constructor(e,t,r,n){super(e,t,r,n,l.CLONE_TOP_INLINE_START_CORNER)}}(0,a.mixin)(h,i.default),(0,a.mixin)(h,o.default);t.default=h},40205:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(49536),o=r(58210);t.default=class{constructor(e,t){(0,s.default)(this,"dataAccessObject",void 0),(0,s.default)(this,"wtSettings",void 0),(0,s.default)(this,"headerWidths",new Map),(0,s.default)(this,"stretching",void 0),this.dataAccessObject=e,this.wtSettings=t,this.stretching=new o.ColumnStretching({totalColumns:()=>this.wtSettings.getSetting("totalColumns"),stretchMode:()=>this.wtSettings.getSetting("stretchH"),stretchingColumnWidthFn:(e,t)=>this.wtSettings.getSetting("onBeforeStretchingColumnWidth",e,t),columnWidthFn:e=>this.dataAccessObject.wtTable.getColumnWidth(e)})}getWidth(e){return this.wtSettings.getSetting("columnWidth",e)||this.wtSettings.getSetting("defaultColumnWidth")}getStretchedColumnWidth(e){let t=this.getWidth(e);const r=this.stretching.getStretchedColumnWidth(e,t);return r&&(t=r),t}getHeaderHeight(e){let t=this.wtSettings.getSetting("defaultRowHeight");const r=this.dataAccessObject.wtViewport.oversizedColumnHeaders[e];return void 0!==r&&(t=t?Math.max(t,r):r),t}getHeaderWidth(e){return this.headerWidths.get(this.dataAccessObject.wtTable.columnFilter.sourceToRendered(e))}refreshStretching(){const{wtTable:e,wtViewport:t,cloneSource:r}=this.dataAccessObject,n=r?r.wtTable.holder:e.holder,s=n.offsetHeight<n.scrollHeight?(0,i.getScrollbarWidth)():0;this.stretching.refreshStretching(t.getViewportWidth()-s)}calculateWidths(){const{wtSettings:e}=this;let t=e.getSetting("rowHeaderWidth");if(this.refreshStretching(),t=e.getSetting("onModifyRowHeaderWidth",t),null!=t){const r=e.getSetting("rowHeaders").length,n=e.getSetting("defaultColumnWidth");for(let e=0;e<r;e++){let r=Array.isArray(t)?t[e]:t;r=null==r?n:r,this.headerWidths.set(e,r)}}}}},58210:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(44038);function o(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function a(e,t){return e.get(h(e,t))}function l(e,t,r){return e.set(h(e,t),r),r}function h(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var u=new WeakMap,c=new WeakMap,d=new WeakMap,p=new WeakMap,g=new WeakMap;t.ColumnStretching=class{constructor(e){let{totalColumns:t,stretchMode:r,stretchingColumnWidthFn:n,columnWidthFn:i}=e;(0,s.default)(this,"stretchAllRatio",0),(0,s.default)(this,"stretchLastWidth",0),(0,s.default)(this,"stretchAllColumnsWidth",[]),o(this,u,0),(0,s.default)(this,"needVerifyLastColumnWidth",!0),o(this,c,(()=>0)),o(this,d,(e=>e)),o(this,p,(e=>e)),o(this,g,(()=>"none")),l(c,this,t),l(g,this,r),l(d,this,null!=n?n:a(d,this)),l(p,this,null!=i?i:a(p,this))}refreshStretching(e){if("none"===a(g,this).call(this))return;this.stretchAllRatio=0,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0,this.stretchLastWidth=0,l(u,this,e);let t=0;for(let r=0;r<a(c,this).call(this);r++){const n=this._getColumnWidth(r),s=a(d,this).call(this,void 0,r);"number"==typeof s?e-=s:t+=n}const r=e-t;if("all"===a(g,this).call(this)&&r>0)this.stretchAllRatio=e/t,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0;else if("last"===a(g,this).call(this)&&e!==1/0){const e=this._getColumnWidth(a(c,this).call(this)-1),t=r+e;this.stretchLastWidth=t>=0?t:e}}getStretchedColumnWidth(e,t){let r=null;return"all"===a(g,this).call(this)&&0!==this.stretchAllRatio?r=this._getStretchedAllColumnWidth(e,t):"last"===a(g,this).call(this)&&0!==this.stretchLastWidth&&(r=this._getStretchedLastColumnWidth(e)),r}_getStretchedAllColumnWidth(e,t){let r=0;if(!this.stretchAllColumnsWidth[e]){const r=Math.round(t*this.stretchAllRatio),n=a(d,this).call(this,r,e);this.stretchAllColumnsWidth[e]=void 0===n?r:isNaN(n)?this._getColumnWidth(e):n}if(this.stretchAllColumnsWidth.length===a(c,this).call(this)&&this.needVerifyLastColumnWidth){this.needVerifyLastColumnWidth=!1;for(let e=0;e<this.stretchAllColumnsWidth.length;e++)r+=this.stretchAllColumnsWidth[e];r!==a(u,this)&&(this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length-1]+=a(u,this)-r)}return this.stretchAllColumnsWidth[e]}_getStretchedLastColumnWidth(e){return e===a(c,this).call(this)-1?this.stretchLastWidth:null}_getColumnWidth(e){let t=a(p,this).call(this,e);return isNaN(t)&&(t=i.DEFAULT_COLUMN_WIDTH),t}}},63912:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e){(0,s.default)(this,"nodeType",void 0),this.nodeType=e.toUpperCase()}setRootDocument(e){this.rootDocument=e}obtain(){return this.rootDocument.createElement(this.nodeType)}}},38104:(e,t)=>{"use strict";t.__esModule=!0;t.WORKING_SPACE_ALL=0,t.WORKING_SPACE_TOP=1,t.WORKING_SPACE_BOTTOM=2},64625:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(27528));t.OrderView=s.default;var i=n(r(84013));t.SharedOrderView=i.default},84013:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(27528));class i extends s.default{prependView(e){return this.sizeSet.prepend(e.sizeSet),e.sizeSet.append(this.sizeSet),this}appendView(e){return this.sizeSet.append(e.sizeSet),e.sizeSet.prepend(this.sizeSet),this}}t.default=i},27528:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(38104),o=n(r(57637));t.default=class{constructor(e,t,r){(0,s.default)(this,"rootNode",void 0),(0,s.default)(this,"nodesPool",void 0),(0,s.default)(this,"sizeSet",new o.default),(0,s.default)(this,"childNodeType",void 0),(0,s.default)(this,"visualIndex",0),(0,s.default)(this,"collectedNodes",[]),this.rootNode=e,this.nodesPool=t,this.childNodeType=r.toUpperCase()}setSize(e){return this.sizeSet.setSize(e),this}setOffset(e){return this.sizeSet.setOffset(e),this}isSharedViewSet(){return this.sizeSet.isShared()}getNode(e){return e<this.collectedNodes.length?this.collectedNodes[e]:null}getCurrentNode(){const e=this.collectedNodes.length;return e>0?this.collectedNodes[e-1]:null}getRenderedChildCount(){const{rootNode:e,sizeSet:t}=this;let r=0;if(this.isSharedViewSet()){let n=e.firstElementChild;for(;n;){if(n.tagName===this.childNodeType)r+=1;else if(t.isPlaceOn(i.WORKING_SPACE_TOP))break;n=n.nextElementSibling}}else r=e.childElementCount;return r}start(){this.collectedNodes.length=0,this.visualIndex=0;const{rootNode:e,sizeSet:t}=this,r=this.isSharedViewSet(),{nextSize:n}=t.getViewSize();let s=this.getRenderedChildCount();for(;s<n;){const n=this.nodesPool();!r||r&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)?e.appendChild(n):e.insertBefore(n,e.firstChild),s+=1}const o=r&&t.isPlaceOn(i.WORKING_SPACE_TOP);for(;s>n;)e.removeChild(o?e.firstChild:e.lastChild),s-=1}render(){const{rootNode:e,sizeSet:t}=this;let r=this.visualIndex;this.isSharedViewSet()&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)&&(r+=t.sharedSize.nextSize);let n=e.childNodes[r];if(n.tagName!==this.childNodeType){const t=this.nodesPool();e.replaceChild(t,n),n=t}this.collectedNodes.push(n),this.visualIndex+=1}end(){}}},56269:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(){(0,s.default)(this,"currentSize",0),(0,s.default)(this,"nextSize",0),(0,s.default)(this,"currentOffset",0),(0,s.default)(this,"nextOffset",0)}setSize(e){this.currentSize=this.nextSize,this.nextSize=e}setOffset(e){this.currentOffset=this.nextOffset,this.nextOffset=e}}},57637:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=n(r(56269)),o=r(38104);t.default=class{constructor(){(0,s.default)(this,"size",new i.default),(0,s.default)(this,"workingSpace",o.WORKING_SPACE_ALL),(0,s.default)(this,"sharedSize",null)}setSize(e){this.size.setSize(e)}setOffset(e){this.size.setOffset(e)}getViewSize(){return this.size}isShared(){return this.sharedSize instanceof i.default}isPlaceOn(e){return this.workingSpace===e}append(e){this.workingSpace=o.WORKING_SPACE_TOP,e.workingSpace=o.WORKING_SPACE_BOTTOM,this.sharedSize=e.getViewSize()}prepend(e){this.workingSpace=o.WORKING_SPACE_BOTTOM,e.workingSpace=o.WORKING_SPACE_TOP,this.sharedSize=e.getViewSize()}}},58299:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707));t.default=class{constructor(e,t){(0,s.default)(this,"dataAccessObject",void 0),(0,s.default)(this,"wtSettings",void 0),this.dataAccessObject=e,this.wtSettings=t}getHeight(e){let t=this.wtSettings.getSetting("rowHeight",e);const r=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==r&&(t=void 0===t?r:Math.max(t,r)),t}getHeightByOverlayName(e,t){let r=this.wtSettings.getSetting("rowHeightByOverlayName",e,t);const n=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==n&&(r=void 0===r?n:Math.max(r,n)),r}}},86203:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(49536),s=r(58460),i=r(44038);t.default=class{constructor(e,t,r,n,s){this.dataAccessObject=e,this.wot=e.wot,this.instance=this.wot,this.domBindings=t,this.wtSettings=r,this.wtTable=s,this.oversizedRows=[],this.oversizedColumnHeaders=[],this.hasOversizedColumnHeadersMarked={},this.clientHeight=0,this.containerWidth=NaN,this.rowHeaderWidth=NaN,this.rowsVisibleCalculator=null,this.columnsVisibleCalculator=null,this.rowsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllRows")?new i.RenderedAllRowsCalculationType:new i.RenderedRowsCalculationType],["fullyVisible",()=>new i.FullyVisibleRowsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleRowsCalculationType]]),this.columnsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllColumns")?new i.RenderedAllColumnsCalculationType:new i.RenderedColumnsCalculationType],["fullyVisible",()=>new i.FullyVisibleColumnsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleColumnsCalculationType]]),this.eventManager=n,this.eventManager.addEventListener(this.domBindings.rootWindow,"resize",(()=>{this.clientHeight=this.getWorkspaceHeight()}))}getWorkspaceHeight(){const e=this.domBindings.rootDocument,t=this.dataAccessObject.topOverlayTrimmingContainer;let r=0;if(t===this.domBindings.rootWindow)r=e.documentElement.clientHeight;else{r=(0,n.outerHeight)(t)>0&&t.clientHeight>0?t.clientHeight:1/0}return r}getWorkspaceWidth(){const{wtSettings:e}=this,{rootDocument:t,rootWindow:r}=this.domBindings,s=this.dataAccessObject.inlineStartOverlayTrimmingContainer,i=t.documentElement.offsetWidth,o=e.getSetting("totalColumns"),a=e.getSetting("preventOverflow"),l=e.getSetting("rtlMode"),h=this.wtTable.TABLE.getBoundingClientRect(),u=i-(l?h.right-i:h.left);let c,d;if(a)return(0,n.outerWidth)(this.wtTable.wtRootElement);if(c=e.getSetting("freezeOverlays")?Math.min(u,i):Math.min(this.getContainerFillWidth(),u,i),s===r&&o>0&&this.sumColumnWidths(0,o-1)>c)return t.documentElement.clientWidth;if(s!==r&&(d=(0,n.getStyle)(this.dataAccessObject.inlineStartOverlayTrimmingContainer,"overflow",r),"scroll"===d||"hidden"===d||"auto"===d))return Math.max(c,s.clientWidth);const p=e.getSetting("stretchH");return"none"!==p&&p?c:Math.max(c,(0,n.outerWidth)(this.wtTable.TABLE))}hasVerticalScroll(){return this.wtTable.hider.offsetHeight>this.getWorkspaceHeight()}hasHorizontalScroll(){return this.wtTable.hider.offsetWidth>this.getWorkspaceWidth()}sumColumnWidths(e,t){let r=0,n=e;for(;n<t;)r+=this.wtTable.getColumnWidth(n),n+=1;return r}getContainerFillWidth(){if(this.containerWidth)return this.containerWidth;const e=this.wtTable.holder,t=this.domBindings.rootDocument.createElement("div");t.style.width="100%",t.style.height="1px",e.appendChild(t);const r=t.offsetWidth;return this.containerWidth=r,e.removeChild(t),r}getWorkspaceOffset(){return(0,n.offset)(this.wtTable.TABLE)}getColumnHeaderHeight(){return this.wtSettings.getSetting("columnHeaders").length?isNaN(this.columnHeaderHeight)&&(this.columnHeaderHeight=(0,n.outerHeight)(this.wtTable.THEAD)):this.columnHeaderHeight=0,this.columnHeaderHeight}getViewportHeight(){let e=this.getWorkspaceHeight();if(e===1/0)return e;const t=this.getColumnHeaderHeight();return t>0&&(e-=t),e}getRowHeaderWidth(){const e=this.wtSettings.getSetting("rowHeaderWidth"),t=this.wtSettings.getSetting("rowHeaders");if(e){this.rowHeaderWidth=0;for(let r=0,n=t.length;r<n;r++)this.rowHeaderWidth+=e[r]||e}if(isNaN(this.rowHeaderWidth))if(t.length){let e=this.wtTable.TABLE.querySelector("TH");this.rowHeaderWidth=0;for(let r=0,s=t.length;r<s;r++)e?(this.rowHeaderWidth+=(0,n.outerWidth)(e),e=e.nextSibling):this.rowHeaderWidth+=50}else this.rowHeaderWidth=0;return this.rowHeaderWidth=this.wtSettings.getSetting("onModifyRowHeaderWidth",this.rowHeaderWidth)||this.rowHeaderWidth,this.rowHeaderWidth}getViewportWidth(){const e=this.getWorkspaceWidth();if(e===1/0)return e;const t=this.getRowHeaderWidth();return t>0?e-t:e}createRowsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:r}=this;let s,o,a=this.getViewportHeight();this.rowHeaderWidth=NaN;let l=this.dataAccessObject.topScrollPosition-this.dataAccessObject.topParentOffset;const h=t.getSetting("fixedRowsTop"),u=t.getSetting("fixedRowsBottom"),c=t.getSetting("totalRows");return h&&l>=0&&(o=this.dataAccessObject.topOverlay.sumCellSizes(0,h),l+=o,a-=o),u&&this.dataAccessObject.bottomOverlay.clone&&(o=this.dataAccessObject.bottomOverlay.sumCellSizes(c-u,c),a-=o),s=r.holder.clientHeight===r.holder.offsetHeight?0:(0,n.getScrollbarWidth)(this.domBindings.rootDocument),new i.ViewportRowsCalculator({calculationTypes:e.map((e=>[e,this.rowsCalculatorTypes.get(e)()])),viewportHeight:a,scrollOffset:l,totalRows:t.getSetting("totalRows"),rowHeightFn:e=>r.getRowHeight(e),overrideFn:t.getSettingPure("viewportRowCalculatorOverride"),horizontalScrollbarHeight:s})}createColumnsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:r}=this;let s=this.getViewportWidth(),o=Math.abs(this.dataAccessObject.inlineStartScrollPosition)-this.dataAccessObject.inlineStartParentOffset;this.columnHeaderHeight=NaN;const a=t.getSetting("fixedColumnsStart");if(a&&o>=0){const e=this.dataAccessObject.inlineStartOverlay.sumCellSizes(0,a);o+=e,s-=e}return r.holder.clientWidth!==r.holder.offsetWidth&&(s-=(0,n.getScrollbarWidth)(this.domBindings.rootDocument)),new i.ViewportColumnsCalculator({calculationTypes:e.map((e=>[e,this.columnsCalculatorTypes.get(e)()])),viewportWidth:s,scrollOffset:o,totalColumns:t.getSetting("totalColumns"),columnWidthFn:e=>r.getColumnWidth(e),overrideFn:t.getSettingPure("viewportColumnCalculatorOverride"),inlineStartOffset:this.dataAccessObject.inlineStartParentOffset})}createCalculators(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,r=this.createRowsCalculator(),n=this.createColumnsCalculator();if(e&&!t.getSetting("renderAllRows")){const t=r.getResultsFor("fullyVisible");e=this.areAllProposedVisibleRowsAlreadyRendered(t)}if(e&&!t.getSetting("renderAllColumns")){const t=n.getResultsFor("fullyVisible");e=this.areAllProposedVisibleColumnsAlreadyRendered(t)}return e||(this.rowsRenderCalculator=r.getResultsFor("rendered"),this.columnsRenderCalculator=n.getResultsFor("rendered")),this.rowsVisibleCalculator=r.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=n.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=r.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=n.getResultsFor("partiallyVisible"),e}createVisibleCalculators(){const e=this.createRowsCalculator(["fullyVisible","partiallyVisible"]),t=this.createColumnsCalculator(["fullyVisible","partiallyVisible"]);this.rowsVisibleCalculator=e.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=t.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=e.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=t.getResultsFor("partiallyVisible")}areAllProposedVisibleRowsAlreadyRendered(e){if(!this.rowsVisibleCalculator)return!1;let{startRow:t,endRow:r}=e;if(null===t&&null===r){if(!e.isVisibleInTrimmingContainer)return!0;t=this.rowsPartiallyVisibleCalculator.startRow,r=this.rowsPartiallyVisibleCalculator.endRow}const{startRow:n,endRow:s}=this.rowsRenderCalculator;return!(t<n||t===n&&t>0)&&!(r>s||r===s&&r<this.wtSettings.getSetting("totalRows")-1)}areAllProposedVisibleColumnsAlreadyRendered(e){if(!this.columnsVisibleCalculator)return!1;let{startColumn:t,endColumn:r}=e;if(null===t&&null===r){if(!e.isVisibleInTrimmingContainer)return!0;t=this.columnsPartiallyVisibleCalculator.startColumn,r=this.columnsPartiallyVisibleCalculator.endColumn}const{startColumn:n,endColumn:s}=this.columnsRenderCalculator;return!(t<n||t===n&&t>0)&&!(r>s||r===s&&r<this.wtSettings.getSetting("totalColumns")-1)}resetHasOversizedColumnHeadersMarked(){(0,s.objectEach)(this.hasOversizedColumnHeadersMarked,((e,t,r)=>{r[t]=void 0}))}}},25188:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(6254),r(20512),r(23844),r(38594);var s=n(r(87910)),i=r(26048),o=r(56988),a=n(r(37056)),l=r(63055),h=r(36528),u=r(96431),c=r(47009),d=r(6697);function p(e,t){const r=new s.default(e,t||{},i.rootInstanceSymbol);return r.init(),r}t.CellCoords=d.CellCoords,t.CellRange=d.CellRange,(0,h.registerCellType)(u.TextCellType),p.editors={BaseEditor:c.BaseEditor},p.Core=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new s.default(e,t,i.rootInstanceSymbol)},p.DefaultSettings=(0,o.metaSchemaFactory)(),p.hooks=a.default.getSingleton(),p.CellCoords=d.CellCoords,p.CellRange=d.CellRange,p.packageName="handsontable",p.buildDate="15/10/2024 15:43:38",p.version="14.6.1",p.languages={dictionaryKeys:l.dictionaryKeys,getLanguageDictionary:l.getLanguageDictionary,getLanguagesDictionaries:l.getLanguagesDictionaries,registerLanguageDictionary:l.registerLanguageDictionary,getTranslatedPhrase:l.getTranslatedPhrase};t.default=p},87222:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(29328),s=r(19920),i=r(80179);const o=t.CELL_TYPE="autocomplete";t.AutocompleteCellType={CELL_TYPE:o,editor:n.AutocompleteEditor,renderer:s.autocompleteRenderer,validator:i.autocompleteValidator}},44760:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(87222);t.AutocompleteCellType=n.AutocompleteCellType,t.CELL_TYPE=n.CELL_TYPE},24976:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(78457),s=r(97177);const i=t.CELL_TYPE="checkbox";t.CheckboxCellType={CELL_TYPE:i,editor:n.CheckboxEditor,renderer:s.checkboxRenderer}},65517:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(24976);t.CELL_TYPE=n.CELL_TYPE,t.CheckboxCellType=n.CheckboxCellType},46330:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(66436),s=r(8920),i=r(64228);const o=t.CELL_TYPE="date";t.DateCellType={CELL_TYPE:o,editor:n.DateEditor,renderer:s.dateRenderer,validator:i.dateValidator}},64936:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(46330);t.CELL_TYPE=n.CELL_TYPE,t.DateCellType=n.DateCellType},82464:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(54185),s=r(3001),i=r(44795);const o=t.CELL_TYPE="dropdown";t.DropdownCellType={CELL_TYPE:o,editor:n.DropdownEditor,renderer:s.dropdownRenderer,validator:i.dropdownValidator}},47041:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(82464);t.CELL_TYPE=n.CELL_TYPE,t.DropdownCellType=n.DropdownCellType},37648:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(76545),s=r(94553);const i=t.CELL_TYPE="handsontable";t.HandsontableCellType={CELL_TYPE:i,editor:n.HandsontableEditor,renderer:s.handsontableRenderer}},7661:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(37648);t.CELL_TYPE=n.CELL_TYPE,t.HandsontableCellType=n.HandsontableCellType},39151:(e,t,r)=>{"use strict";t.__esModule=!0,t.registerAllCellTypes=function(){(0,p.registerCellType)(n.AutocompleteCellType),(0,p.registerCellType)(s.CheckboxCellType),(0,p.registerCellType)(i.DateCellType),(0,p.registerCellType)(o.DropdownCellType),(0,p.registerCellType)(a.HandsontableCellType),(0,p.registerCellType)(l.NumericCellType),(0,p.registerCellType)(h.PasswordCellType),(0,p.registerCellType)(u.SelectCellType),(0,p.registerCellType)(c.TextCellType),(0,p.registerCellType)(d.TimeCellType)};var n=r(44760);t.AutocompleteCellType=n.AutocompleteCellType,t.AUTOCOMPLETE_TYPE=n.CELL_TYPE;var s=r(65517);t.CheckboxCellType=s.CheckboxCellType,t.CHECKBOX_TYPE=s.CELL_TYPE;var i=r(64936);t.DateCellType=i.DateCellType,t.DATE_TYPE=i.CELL_TYPE;var o=r(47041);t.DropdownCellType=o.DropdownCellType,t.DROPDOWN_TYPE=o.CELL_TYPE;var a=r(7661);t.HandsontableCellType=a.HandsontableCellType,t.HANDSONTABLE_TYPE=a.CELL_TYPE;var l=r(26523);t.NumericCellType=l.NumericCellType,t.NUMERIC_TYPE=l.CELL_TYPE;var h=r(33685);t.PasswordCellType=h.PasswordCellType,t.PASSWORD_TYPE=h.CELL_TYPE;var u=r(92292);t.SelectCellType=u.SelectCellType,t.SELECT_TYPE=u.CELL_TYPE;var c=r(96431);t.TextCellType=c.TextCellType,t.TEXT_TYPE=c.CELL_TYPE;var d=r(79301);t.TimeCellType=d.TimeCellType,t.TIME_TYPE=d.CELL_TYPE;var p=r(36528);t.registerCellType=p.registerCellType,t.getCellType=p.getCellType,t.getRegisteredCellTypeNames=p.getRegisteredCellTypeNames,t.getRegisteredCellTypes=p.getRegisteredCellTypes,t.hasCellType=p.hasCellType},26523:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(57032);t.CELL_TYPE=n.CELL_TYPE,t.NumericCellType=n.NumericCellType},57032:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(59889),s=r(73981),i=r(42777);const o=t.CELL_TYPE="numeric";t.NumericCellType={CELL_TYPE:o,editor:n.NumericEditor,renderer:s.numericRenderer,validator:i.numericValidator,dataType:"number"}},33685:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(41288);t.CELL_TYPE=n.CELL_TYPE,t.PasswordCellType=n.PasswordCellType},41288:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(14961),s=r(7473);const i=t.CELL_TYPE="password";t.PasswordCellType={CELL_TYPE:i,editor:n.PasswordEditor,renderer:s.passwordRenderer,copyable:!1}},36528:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.getCellType=function(e){if(!u(e))throw Error(`You declared cell type "${e}" as a string that is not mapped to a known object.\n                 Cell type must be an object or a string mapped to an object registered by\n                 "Handsontable.cellTypes.registerCellType" method`);return h(e)},t.registerCellType=function(e,t){"string"!=typeof e&&(e=(t=e).CELL_TYPE);const{editor:r,renderer:n,validator:s}=t;r&&(0,i.registerEditor)(e,r);n&&(0,o.registerRenderer)(e,n);s&&(0,a.registerValidator)(e,s);l(e,t)},r(67834);var s=n(r(45212)),i=r(39761),o=r(94539),a=r(19434);const{register:l,getItem:h,hasItem:u,getNames:c,getValues:d}=(0,s.default)("cellTypes");t.getRegisteredCellTypes=d,t.getRegisteredCellTypeNames=c,t.hasCellType=u},92292:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(34282);t.CELL_TYPE=n.CELL_TYPE,t.SelectCellType=n.SelectCellType},34282:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(51656),s=r(93276);const i=t.CELL_TYPE="select";t.SelectCellType={CELL_TYPE:i,editor:n.SelectEditor,renderer:s.selectRenderer}},96431:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(34712);t.CELL_TYPE=n.CELL_TYPE,t.TextCellType=n.TextCellType},34712:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043),s=r(6135);const i=t.CELL_TYPE="text";t.TextCellType={CELL_TYPE:i,editor:n.TextEditor,renderer:s.textRenderer}},79301:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(66884);t.CELL_TYPE=n.CELL_TYPE,t.TimeCellType=n.TimeCellType},66884:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(54837),s=r(38537),i=r(16691);const o=t.CELL_TYPE="time";t.TimeCellType={CELL_TYPE:o,editor:n.TimeEditor,renderer:s.timeRenderer,validator:i.timeValidator}},87910:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.default=function(e,t){var r,n=this;let H=arguments.length>2&&void 0!==arguments[2]&&arguments[2],F=this;const U=new h.default(F);let V,B,W,Y,j,G,z=!0;(0,T.hasValidParameter)(H)&&(0,T.registerAsRootInstance)(this);this.rootElement=e,this.rootDocument=e.ownerDocument,this.rootWindow=this.rootDocument.defaultView,this.isDestroyed=!1,this.renderSuspendedCounter=0,this.executionSuspendedCounter=0;const $=null!==(r=null==t?void 0:t.layoutDirection)&&void 0!==r?r:"inherit",K=["rtl","ltr"].includes($)?$:this.rootWindow.getComputedStyle(this.rootElement).direction;this.rootElement.setAttribute("dir",K),this.isRtl=function(){return"rtl"===K},this.isLtr=function(){return!F.isRtl()},this.getDirectionFactor=function(){return F.isLtr()?1:-1},t.language=(0,_.getValidLanguageCode)(t.language);const X=new O.MetaManager(F,t,[O.DynamicCellMetaMod,O.ExtendMetaPropertiesMod]),q=X.getTableMeta(),Q=X.getGlobalMeta(),Z=(0,x.createUniqueMap)();this.container=this.rootDocument.createElement("div"),this.renderCall=!1,e.insertBefore(this.container,e.firstChild),(0,T.isRootInstance)(this)&&(0,o._injectProductInfo)(t.licenseKey,e);this.guid=`ht_${(0,E.randomString)()}`,k.set(this.guid,this),this.columnIndexMapper=new S.IndexMapper,this.rowIndexMapper=new S.IndexMapper,this.columnIndexMapper.addLocalHook("indexesSequenceChange",(e=>{F.runHooks("afterColumnSequenceChange",e)})),this.rowIndexMapper.addLocalHook("indexesSequenceChange",(e=>{F.runHooks("afterRowSequenceChange",e)})),B=new v.default(F),this.rootElement.id&&"ht_"!==this.rootElement.id.substring(0,3)||(this.rootElement.id=this.guid);let J=new A.Selection(q,{rowIndexMapper:F.rowIndexMapper,columnIndexMapper:F.columnIndexMapper,countCols:()=>F.countCols(),countRows:()=>F.countRows(),propToCol:e=>V.propToCol(e),isEditorOpened:()=>!!F.getActiveEditor()&&F.getActiveEditor().isOpened(),countRenderableColumns:()=>this.view.countRenderableColumns(),countRenderableRows:()=>this.view.countRenderableRows(),countRowHeaders:()=>this.countRowHeaders(),countColHeaders:()=>this.countColHeaders(),countRenderableRowsInRange:function(){return n.view.countRenderableRowsInRange(...arguments)},countRenderableColumnsInRange:function(){return n.view.countRenderableColumnsInRange(...arguments)},getShortcutManager:()=>F.getShortcutManager(),createCellCoords:(e,t)=>F._createCellCoords(e,t),createCellRange:(e,t,r)=>F._createCellRange(e,t,r),visualToRenderableCoords:e=>{const{row:t,col:r}=e;return F._createCellCoords(t>=0?F.rowIndexMapper.getRenderableFromVisualIndex(t):t,r>=0?F.columnIndexMapper.getRenderableFromVisualIndex(r):r)},renderableToVisualCoords:e=>{const{row:t,col:r}=e;return F._createCellCoords(t>=0?F.rowIndexMapper.getVisualFromRenderableIndex(t):t,r>=0?F.columnIndexMapper.getVisualFromRenderableIndex(r):r)},findFirstNonHiddenRenderableRow:(e,t)=>{const r=t>e?1:-1,n=Math.min(e,t),s=Math.max(e,t),i=F.rowIndexMapper.getNearestNotHiddenIndex(e,r);return null===i||1===r&&i>s||-1===r&&i<n?null:i>=0?F.rowIndexMapper.getRenderableFromVisualIndex(i):i},findFirstNonHiddenRenderableColumn:(e,t)=>{const r=t>e?1:-1,n=Math.min(e,t),s=Math.max(e,t),i=F.columnIndexMapper.getNearestNotHiddenIndex(e,r);return null===i||1===r&&i>s||-1===r&&i<n?null:i>=0?F.columnIndexMapper.getRenderableFromVisualIndex(i):i},isDisabledCellSelection:(e,t)=>e<0||t<0?F.getSettings().disableVisualSelection:F.getCellMeta(e,t).disableVisualSelection});this.selection=J;const ee=e=>{let{hiddenIndexesChanged:t}=e;t&&this.selection.commit()};function te(e){const t=(0,b.normalizeLanguageCode)(e);(0,_.hasLanguageDictionary)(t)?(F.runHooks("beforeLanguageChange",t),Q.language=t,F.runHooks("afterLanguageChange",t)):(0,b.warnUserAboutLanguageRegistration)(e)}function re(e,t){const r="className"===e?F.rootElement:F.table;if(z)(0,s.addClass)(r,t);else{let n=[],i=[];Q[e]&&(n=Array.isArray(Q[e])?Q[e]:(0,d.stringToArray)(Q[e])),t&&(i=Array.isArray(t)?t:(0,d.stringToArray)(t));const o=(0,d.getDifferenceOfArrays)(n,i),a=(0,d.getDifferenceOfArrays)(i,n);o.length&&(0,s.removeClass)(r,o),a.length&&(0,s.addClass)(r,a)}Q[e]=t}function ne(){let e=!1;return{validatorsInQueue:0,valid:!0,addValidatorToQueue(){this.validatorsInQueue+=1,e=!1},removeValidatorFormQueue(){this.validatorsInQueue=this.validatorsInQueue-1<0?0:this.validatorsInQueue-1,this.checkIfQueueIsEmpty()},onQueueEmpty(){},checkIfQueueIsEmpty(){0===this.validatorsInQueue&&!1===e&&(e=!0,this.onQueueEmpty(this.valid))}}}function se(e){const t=e.replace(",",".");return!1===isNaN(parseFloat(t))?parseFloat(t):e}function ie(e,t,r){if(!e.length)return void r();const n=F.getActiveEditor(),s=new ne;let i=!0;s.onQueueEmpty=()=>{n&&i&&n.cancelChanges(),r()};for(let r=e.length-1;r>=0;r--){const[n,o,,a]=e[r],l=V.propToCol(o);let h;h=Number.isInteger(l)?F.getCellMeta(n,l):{...Object.getPrototypeOf(q),...q},"numeric"===h.type&&"string"==typeof a&&(0,w.isNumericLike)(a)&&(e[r][3]=se(a)),F.getCellValidator(h)&&(s.addValidatorToQueue(),F.validateCell(e[r][3],h,function(t,r){return function(n){if("boolean"!=typeof n)throw new Error("Validation error: result is not boolean");!1===n&&!1===r.allowInvalid&&(i=!1,e.splice(t,1),r.valid=!0),s.removeValidatorFormQueue()}}(r,h),t))}s.checkIfQueueIsEmpty()}function oe(e,t){for(let r=e.length-1;r>=0;r--){let n=!1;if(null!==e[r]){if(null!==e[r][2]&&void 0!==e[r][2]||null!==e[r][3]&&void 0!==e[r][3]){if(q.allowInsertRow)for(;e[r][0]>F.countRows()-1;){const{delta:e}=V.createRow(void 0,void 0,{source:t});if(0===e){n=!0;break}}if("array"===F.dataType&&(!q.columns||0===q.columns.length)&&q.allowInsertColumn)for(;V.propToCol(e[r][1])>F.countCols()-1;){const{delta:e}=V.createCol(void 0,void 0,{source:t});if(0===e){n=!0;break}}n||V.set(e[r][0],e[r][1],e[r][3])}}else e.splice(r,1)}const r=e.length>0;if(F.forceFullRender=!0,r){W.adjustRowsAndCols(),F.runHooks("beforeChangeRender",e,t),Y.closeEditor(),F.view.render(),Y.prepareEditor(),F.view.adjustElementsSize(),F.runHooks("afterChange",e,t||"edit");const r=F.getActiveEditor();r&&(0,o.isDefined)(r.refreshValue)&&r.refreshValue()}else F.view.render()}function ae(e,t,r){return Array.isArray(e)?e:[[e,t,r]]}function le(e,t){const r=F.getActiveEditor(),n=F.runHooks("beforeChange",e,t||"edit"),s=e.filter((e=>null!==e));return!1===n||0===s.length?(r&&r.cancelChanges(),[]):s}this.columnIndexMapper.addLocalHook("cacheUpdated",ee),this.rowIndexMapper.addLocalHook("cacheUpdated",ee),this.selection.addLocalHook("afterSetRangeEnd",((e,t)=>{const r=(0,u.createObjectPropListener)(!1),n=this.selection.getSelectedRange(),{from:i,to:o}=n.current(),a=n.size()-1;this.runHooks("afterSelection",i.row,i.col,o.row,o.col,r,a),this.runHooks("afterSelectionByProp",i.row,F.colToProp(i.col),o.row,F.colToProp(o.col),r,a),t&&(!r.isTouched()||r.isTouched()&&!r.value)&&G.scrollTo(e);const l=J.isSelectedByRowHeader(),h=J.isSelectedByColumnHeader();l&&h?(0,s.addClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]):l?((0,s.removeClass)(this.rootElement,"ht__selection--columns"),(0,s.addClass)(this.rootElement,"ht__selection--rows")):h?((0,s.removeClass)(this.rootElement,"ht__selection--rows"),(0,s.addClass)(this.rootElement,"ht__selection--columns")):(0,s.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),"shift"!==J.getSelectionSource()&&Y.closeEditor(null),F.view.render(),Y.prepareEditor()})),this.selection.addLocalHook("beforeSetFocus",(e=>{this.runHooks("beforeSelectionFocusSet",e.row,e.col)})),this.selection.addLocalHook("afterSetFocus",(e=>{const t=(0,u.createObjectPropListener)(!1);this.runHooks("afterSelectionFocusSet",e.row,e.col,t),(!t.isTouched()||t.isTouched()&&!t.value)&&G.scrollTo(e),Y.closeEditor(),F.view.render(),Y.prepareEditor()})),this.selection.addLocalHook("afterSelectionFinished",(e=>{const t=e.length-1,{from:r,to:n}=e[t];this.runHooks("afterSelectionEnd",r.row,r.col,n.row,n.col,t),this.runHooks("afterSelectionEndByProp",r.row,F.colToProp(r.col),n.row,F.colToProp(n.col),t)})),this.selection.addLocalHook("afterIsMultipleSelection",(e=>{const t=this.runHooks("afterIsMultipleSelection",e.value);e.value&&(e.value=t)})),this.selection.addLocalHook("afterDeselect",(()=>{Y.closeEditor(),F.view.render(),(0,s.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),this.runHooks("afterDeselect")})),this.selection.addLocalHook("beforeHighlightSet",(()=>this.runHooks("beforeSelectionHighlightSet"))).addLocalHook("beforeSetRangeStart",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSetRangeStart",...t)})).addLocalHook("beforeSetRangeStartOnly",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSetRangeStartOnly",...t)})).addLocalHook("beforeSetRangeEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSetRangeEnd",...t)})).addLocalHook("beforeSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSelectColumns",...t)})).addLocalHook("afterSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterSelectColumns",...t)})).addLocalHook("beforeSelectRows",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeSelectRows",...t)})).addLocalHook("afterSelectRows",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterSelectRows",...t)})).addLocalHook("beforeModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("modifyTransformStart",...t)})).addLocalHook("afterModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterModifyTransformStart",...t)})).addLocalHook("beforeModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("modifyTransformFocus",...t)})).addLocalHook("afterModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterModifyTransformFocus",...t)})).addLocalHook("beforeModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("modifyTransformEnd",...t)})).addLocalHook("afterModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("afterModifyTransformEnd",...t)})).addLocalHook("beforeRowWrap",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeRowWrap",...t)})).addLocalHook("beforeColumnWrap",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.runHooks("beforeColumnWrap",...t)})).addLocalHook("insertRowRequire",(e=>this.alter("insert_row_above",e,1,"auto"))).addLocalHook("insertColRequire",(e=>this.alter("insert_col_start",e,1,"auto"))),W={alter(e,t){var r,n;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;const l=e=>{if(0===e.length)return[];const t=[...e];t.sort(((e,t)=>{let[r]=e,[n]=t;return r===n?0:r>n?1:-1}));return(0,d.arrayReduce)(t,((e,t)=>{let[r,n]=t;const s=e[e.length-1],[i,o]=s,a=i+o;if(r<=a){const e=Math.max(n-(a-r),0);s[1]+=e}else e.push([r,n]);return e}),[t[0]])};switch(e){case"insert_row_below":case"insert_row_above":const a=F.countSourceRows();if(q.maxRows===a)return;const h="insert_row_below"===e?"below":"above";t=null!==(r=t)&&void 0!==r?r:"below"===h?a:0;const{delta:u,startPhysicalIndex:c}=V.createRow(t,s,{source:i,mode:h});J.shiftRows(F.toVisualRow(c),u);break;case"insert_col_start":case"insert_col_end":const p="insert_col_end"===e?"end":"start";t=null!==(n=t)&&void 0!==n?n:"end"===p?F.countSourceCols():0;const{delta:g,startPhysicalIndex:f}=V.createCol(t,s,{source:i,mode:p});if(g){if(Array.isArray(q.colHeaders)){const e=[F.toVisualColumn(f),0];e.length+=g,Array.prototype.splice.apply(q.colHeaders,e)}J.shiftColumns(F.toVisualColumn(f),g)}break;case"remove_row":const m=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[r,n]=e;const s=(0,o.isEmpty)(r)?F.countRows()-1:Math.max(r-t,0);Number.isInteger(r)&&(r=Math.max(r-t,0));if(!V.removeRow(r,n,i))return;if(J.isSelected()){const{row:e}=F.getSelectedRangeLast().highlight;e>=r&&e<=r+n-1&&Y.closeEditor(!0)}const a=F.countRows();0===a?J.deselect():"ContextMenu.removeRow"===i?J.refresh():J.shiftRows(r,-n);const l=q.fixedRowsTop;l>=s+1&&(q.fixedRowsTop-=Math.min(n,l-s));const h=q.fixedRowsBottom;h&&s>=a-h&&(q.fixedRowsBottom-=Math.min(n,h)),t+=n}))};Array.isArray(t)?m(l(t)):m([[t,s]]);break;case"remove_col":const y=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[r,n]=e;const s=(0,o.isEmpty)(r)?F.countCols()-1:Math.max(r-t,0);let a=F.toPhysicalColumn(s);Number.isInteger(r)&&(r=Math.max(r-t,0));if(!V.removeCol(r,n,i))return;if(J.isSelected()){const{col:e}=F.getSelectedRangeLast().highlight;e>=r&&e<=r+n-1&&Y.closeEditor(!0)}0===F.countCols()?J.deselect():"ContextMenu.removeColumn"===i?J.refresh():J.shiftColumns(r,-n);const l=q.fixedColumnsStart;l>=s+1&&(q.fixedColumnsStart-=Math.min(n,l-s)),Array.isArray(q.colHeaders)&&(void 0===a&&(a=-1),q.colHeaders.splice(a,n)),t+=n}))};Array.isArray(t)?y(l(t)):y([[t,s]]);break;default:throw new Error(`There is no such action "${e}"`)}F.view.render(),a||W.adjustRowsAndCols()},adjustRowsAndCols(){const e=q.minRows,t=q.minSpareRows,r=q.minCols,n=q.minSpareCols;if(e){const t=F.countRows();t<e&&V.createRow(t,e-t,{source:"auto"})}if(t){const e=F.countEmptyRows(!0);if(e<t){const r=t-e,n=Math.min(r,q.maxRows-F.countSourceRows());V.createRow(F.countRows(),n,{source:"auto"})}}{let e;(r||n)&&(e=F.countEmptyCols(!0));let t=F.countCols();if(r&&!q.columns&&t<r){const n=r-t;e+=n,V.createCol(t,n,{source:"auto"})}if(n&&!q.columns&&"array"===F.dataType&&e<n){t=F.countCols();const r=n-e,s=Math.min(r,q.maxCols-t);V.createCol(t,s,{source:"auto"})}}F.view&&F.view.adjustElementsSize()},populateFromArray(e,t,r,n,s){let i,o,a,l;const h=[],c={},p=[],g=e.row,f=e.col;if(o=t.length,0===o)return!1;let m=0,y=0;switch((0,u.isObject)(r)&&(m=r.col-f+1,y=r.row-g+1),s){case"shift_down":const s=(0,d.pivot)(t),E=s.length,w=Math.max(E,m),C=F.getData().slice(g),v=(0,d.pivot)(C).slice(f,f+w);for(a=0;a<w;a+=1)if(a<E){for(i=0,o=s[a].length;i<y-o;i+=1)s[a].push(s[a][i%o]);a<v.length?p.push(s[a].concat(v[a])):p.push(s[a].concat(new Array(C.length).fill(null)))}else p.push(s[a%E].concat(v[a]));F.populateFromArray(g,f,(0,d.pivot)(p));break;case"shift_right":const R=t.length,S=Math.max(R,y),T=F.getData().slice(g).map((e=>e.slice(f)));for(i=0;i<S;i+=1)if(i<R){for(a=0,l=t[i].length;a<m-l;a+=1)t[i].push(t[i][a%l]);if(i<T.length)for(let e=0;e<T[i].length;e+=1)t[i].push(T[i][e]);else t[i].push(...new Array(T[0].length).fill(null))}else t.push(t[i%o].slice(0,S).concat(T[i]));F.populateFromArray(g,f,t);break;default:c.row=e.row,c.col=e.col;let N,M=0,_=0,b=!0;const A=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=t[e%t.length];return null!==r?n[r%n.length]:n},O=t.length,I=r?r.row-e.row+1:0;for(o=r?I:Math.max(O,I),i=0;i<o&&!(r&&c.row>r.row&&I>O||!q.allowInsertRow&&c.row>F.countRows()-1||c.row>=q.maxRows);i++){const t=i-M,s=A(t).length,d=r?r.col-e.col+1:0;if(l=r?d:Math.max(s,d),c.col=e.col,N=F.getCellMeta(c.row,c.col),"CopyPaste.paste"!==n&&"Autofill.fill"!==n||!N.skipRowOnPaste){for(_=0,a=0;a<l&&!(r&&c.col>r.col&&d>s||!q.allowInsertColumn&&c.col>F.countCols()-1||c.col>=q.maxCols);a++){if(N=F.getCellMeta(c.row,c.col),("CopyPaste.paste"===n||"Autofill.fill"===n)&&N.skipColumnOnPaste){_+=1,c.col+=1,l+=1;continue}if(N.readOnly&&"UndoRedo.undo"!==n){c.col+=1;continue}let e=A(t,a-_),r=F.getDataAtCell(c.row,c.col);if(null!==e&&"object"==typeof e)if(Array.isArray(e)&&null===r&&(r=[]),null===r||"object"!=typeof r)b=!1;else{const t=(0,u.duckSchema)(Array.isArray(r)?r:r[0]||r),n=(0,u.duckSchema)(Array.isArray(e)?e:e[0]||e);(0,u.isObjectEqual)(t,n)||Array.isArray(t)&&Array.isArray(n)?e=(0,u.deepClone)(e):b=!1}else null!==r&&"object"==typeof r&&(b=!1);b&&h.push([c.row,c.col,e]),b=!0,c.col+=1}c.row+=1}else M+=1,c.row+=1,o+=1}F.setDataAtCell(h,null,null,n||"populateFromArray")}}},this.init=function(){B.setData(q.data),F.runHooks("beforeInit"),((0,a.isMobileBrowser)()||(0,a.isIpadOS)())&&(0,s.addClass)(F.rootElement,"mobile"),this.updateSettings(q,!0),this.view=new C.default(this),Y=l.default.getInstance(F,q,J),G=(0,I.createViewportScroller)(F),j=new c.FocusManager(F),(0,T.isRootInstance)(this)&&(0,I.installFocusCatcher)(F),F.runHooks("init"),this.forceFullRender=!0,this.view.render(),z&&null===F.rootElement.offsetParent&&(0,s.observeVisibilityChangeOnce)(F.rootElement,(()=>{F.view._wt.wtOverlays.updateLastSpreaderSize(),F.render(),F.view.adjustElementsSize()})),"object"==typeof z&&(F.runHooks("afterChange",z[0],z[1]),z=!1),F.runHooks("afterInit")},this._createCellCoords=function(e,t){return F.view._wt.createCellCoords(e,t)},this._createCellRange=function(e,t,r){return F.view._wt.createCellRange(e,t,r)},this.validateCell=function(e,t,r,n){let s=F.getCellValidator(t);function a(e){if(!(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])||!0===t.hidden)return void r(e);const n=t.visualCol,s=t.visualRow,i=F.getCell(s,n,!0);if(i&&"TH"!==i.nodeName){const e=F.rowIndexMapper.getRenderableFromVisualIndex(s),t=F.columnIndexMapper.getRenderableFromVisualIndex(n);F.view._wt.getSetting("cellRenderer",e,t,i)}r(e)}var l;(0,o.isRegExp)(s)&&(l=s,s=function(e,t){t(l.test(e))}),(0,i.isFunction)(s)?(e=F.runHooks("beforeValidate",e,t.visualRow,t.prop,n),F._registerImmediate((()=>{s.call(t,e,(r=>{F&&(r=F.runHooks("afterValidate",r,e,t.visualRow,t.prop,n),t.valid=r,a(r),F.runHooks("postAfterValidate",r,e,t.visualRow,t.prop,n))}))}))):F._registerImmediate((()=>{t.valid=!0,a(t.valid,!1)}))},this.setDataAtCell=function(e,t,r,n){const s=ae(e,t,r),i=[];let o,a,l,h=n;for(o=0,a=s.length;o<a;o++){if("object"!=typeof s[o])throw new Error("Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter");if("number"!=typeof s[o][1])throw new Error("Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`");l=s[o][1]>=this.countCols()?s[o][1]:V.colToProp(s[o][1]),i.push([s[o][0],l,B.getAtCell(this.toPhysicalRow(s[o][0]),s[o][1]),s[o][2]])}h||"object"!=typeof e||(h=t);const u=le(i,n);F.runHooks("afterSetDataAtCell",u,h),ie(u,h,(()=>{oe(u,h)}))},this.setDataAtRowProp=function(e,t,r,n){const s=ae(e,t,r),i=[];let o,a,l=n;for(o=0,a=s.length;o<a;o++)i.push([s[o][0],s[o][1],B.getAtCell(this.toPhysicalRow(s[o][0]),s[o][1]),s[o][2]]);l||"object"!=typeof e||(l=t);const h=le(i,n);F.runHooks("afterSetDataAtRowProp",h,l),ie(h,l,(()=>{oe(h,l)}))},this.listen=function(){F&&!F.isListening()&&(k.forEach((e=>{F!==e&&e.unlisten()})),D=F.guid,F.runHooks("afterListen"))},this.unlisten=function(){this.isListening()&&(D=null,F.runHooks("afterUnlisten"))},this.isListening=function(){return D===F.guid},this.destroyEditor=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];Y.closeEditor(e),F.view.render(),t&&J.isSelected()&&Y.prepareEditor()},this.populateFromArray=function(e,t,r,n,s,i,o){if("object"!=typeof r||"object"!=typeof r[0])throw new Error("populateFromArray parameter `input` must be an array of arrays");const a="number"==typeof n?F._createCellCoords(n,s):null;return W.populateFromArray(F._createCellCoords(e,t),r,a,i,o)},this.spliceCol=function(e,t,r){for(var n=arguments.length,s=new Array(n>3?n-3:0),i=3;i<n;i++)s[i-3]=arguments[i];return V.spliceCol(e,t,r,...s)},this.spliceRow=function(e,t,r){for(var n=arguments.length,s=new Array(n>3?n-3:0),i=3;i<n;i++)s[i-3]=arguments[i];return V.spliceRow(e,t,r,...s)},this.getSelected=function(){if(J.isSelected())return(0,d.arrayMap)(J.getSelectedRange(),(e=>{let{from:t,to:r}=e;return[t.row,t.col,r.row,r.col]}))},this.getSelectedLast=function(){const e=this.getSelected();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.getSelectedRange=function(){if(J.isSelected())return Array.from(J.getSelectedRange())},this.getSelectedRangeLast=function(){const e=this.getSelectedRange();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.emptySelectedCells=function(e){if(!J.isSelected()||0===this.countRows()||0===this.countCols())return;const t=[];(0,d.arrayEach)(J.getSelectedRange(),(e=>{if(e.isSingleHeader())return;const r=e.getTopStartCorner(),n=e.getBottomEndCorner();(0,w.rangeEach)(r.row,n.row,(e=>{(0,w.rangeEach)(r.col,n.col,(r=>{this.getCellMeta(e,r).readOnly||t.push([e,r,null])}))}))})),t.length>0&&this.setDataAtCell(t,e)},this.isRenderSuspended=function(){return this.renderSuspendedCounter>0},this.suspendRender=function(){this.renderSuspendedCounter+=1},this.resumeRender=function(){const e=this.renderSuspendedCounter-1;this.renderSuspendedCounter=Math.max(e,0),this.isRenderSuspended()||e!==this.renderSuspendedCounter||(this.renderCall?this.render():F.view.render())},this.render=function(){this.view&&(this.renderCall=!0,this.forceFullRender=!0,this.isRenderSuspended()||F.view.render())},this.batchRender=function(e){this.suspendRender();const t=e();return this.resumeRender(),t},this.isExecutionSuspended=function(){return this.executionSuspendedCounter>0},this.suspendExecution=function(){this.executionSuspendedCounter+=1,this.columnIndexMapper.suspendOperations(),this.rowIndexMapper.suspendOperations()},this.resumeExecution=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.executionSuspendedCounter-1;this.executionSuspendedCounter=Math.max(t,0),(!this.isExecutionSuspended()&&t===this.executionSuspendedCounter||e)&&(this.columnIndexMapper.resumeOperations(),this.rowIndexMapper.resumeOperations())},this.batchExecution=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.suspendExecution();const r=e();return this.resumeExecution(t),r},this.batch=function(e){this.suspendRender(),this.suspendExecution();const t=e();return this.resumeExecution(),this.resumeRender(),t},this.refreshDimensions=function(){if(!F.view)return;const{width:e,height:t}=F.view.getLastSize(),{width:r,height:n}=F.rootElement.getBoundingClientRect(),s=r!==e||n!==t;!1===F.runHooks("beforeRefreshDimensions",{width:e,height:t},{width:r,height:n},s)||((s||F.view._wt.wtOverlays.scrollableElement===F.rootWindow)&&(F.view.setLastSize(r,n),F.render()),F.runHooks("afterRefreshDimensions",{width:e,height:t},{width:r,height:n},s))},this.updateData=function(e,t){(0,O.replaceData)(e,(e=>{V=e}),(e=>{V=e,F.columnIndexMapper.fitToLength(this.getInitialColumnCount()),F.rowIndexMapper.fitToLength(this.countSourceRows()),W.adjustRowsAndCols(),J.refresh()}),{hotInstance:F,dataMap:V,dataSource:B,internalSource:"updateData",source:t,metaManager:X,firstRun:z})},this.loadData=function(e,t){(0,O.replaceData)(e,(e=>{V=e}),(()=>{X.clearCellsCache(),F.initIndexMappers(),W.adjustRowsAndCols(),J.refresh(),z&&(z=[null,"loadData"])}),{hotInstance:F,dataMap:V,dataSource:B,internalSource:"loadData",source:t,metaManager:X,firstRun:z})},this.getInitialColumnCount=function(){const e=q.columns;let t=0;if(Array.isArray(e))t=e.length;else if((0,i.isFunction)(e))if("array"===F.dataType){const r=this.countSourceCols();for(let n=0;n<r;n+=1)e(n)&&(t+=1)}else"object"!==F.dataType&&"function"!==F.dataType||(t=V.colToPropCache.length);else if((0,o.isDefined)(q.dataSchema)){const e=V.getSchema();t=Array.isArray(e)?e.length:(0,u.deepObjectSize)(e)}else t=this.countSourceCols();return t},this.initIndexMappers=function(){this.columnIndexMapper.initToLength(this.getInitialColumnCount()),this.rowIndexMapper.initToLength(this.countSourceRows())},this.getData=function(e,t,r,n){return(0,o.isUndefined)(e)?V.getAll():V.getRange(F._createCellCoords(e,t),F._createCellCoords(r,n),V.DESTINATION_RENDERER)},this.getCopyableText=function(e,t,r,n){return V.getCopyableText(F._createCellCoords(e,t),F._createCellCoords(r,n))},this.getCopyableData=function(e,t){return V.getCopyable(e,V.colToProp(t))},this.getSchema=function(){return V.getSchema()},this.updateSettings=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=(z?F.loadData:F.updateData).bind(this);let n,s,a=!1;if((0,o.isDefined)(e.rows))throw new Error('The "rows" setting is no longer supported. Do you mean startRows, minRows or maxRows?');if((0,o.isDefined)(e.cols))throw new Error('The "cols" setting is no longer supported. Do you mean startCols, minCols or maxCols?');if((0,o.isDefined)(e.ganttChart))throw new Error('Since 8.0.0 the "ganttChart" setting is no longer supported.');for(n in e)"data"===n||("language"===n?te(e.language):"className"===n?re("className",e.className):"tableClassName"===n&&F.table?(re("tableClassName",e.tableClassName),F.view._wt.wtOverlays.syncOverlayTableClassNames()):M.default.getSingleton().isRegistered(n)||M.default.getSingleton().isDeprecated(n)?((0,i.isFunction)(e[n])||Array.isArray(e[n]))&&(e[n].initialHook=!0,F.addHook(n,e[n])):!t&&(0,u.hasOwnProperty)(e,n)&&(Q[n]=e[n]));void 0===e.data&&void 0===q.data?r(null,"updateSettings"):void 0!==e.data?r(e.data,"updateSettings"):void 0!==e.columns&&(V.createMap(),F.initIndexMappers());const l=F.countCols(),h=q.columns;if(h&&(0,i.isFunction)(h)&&(a=!0),void 0===e.cell&&void 0===e.cells&&void 0===e.columns||X.clearCache(),l>0)for(n=0,s=0;n<l;n++){if(h){const e=a?h(n):h[s];e&&X.updateColumnMeta(s,e)}s+=1}(0,o.isDefined)(e.cell)&&(0,u.objectEach)(e.cell,(e=>{F.setCellMetaObject(e.row,e.col,e)})),F.runHooks("afterCellMetaReset");let c=F.rootElement.style.height;""!==c&&(c=parseInt(F.rootElement.style.height,10));let d=e.height;if((0,i.isFunction)(d)&&(d=d()),t){F.rootElement.getAttribute("style")&&F.rootElement.setAttribute("data-initialstyle",F.rootElement.getAttribute("style"))}if(null===d){const e=F.rootElement.getAttribute("data-initialstyle");e&&(e.indexOf("height")>-1||e.indexOf("overflow")>-1)?F.rootElement.setAttribute("style",e):(F.rootElement.style.height="",F.rootElement.style.overflow="")}else void 0!==d&&(F.rootElement.style.height=isNaN(d)?`${d}`:`${d}px`,F.rootElement.style.overflow="hidden");if(void 0!==e.width){let t=e.width;(0,i.isFunction)(t)&&(t=t()),F.rootElement.style.width=isNaN(t)?`${t}`:`${t}px`}t||(F.view&&(F.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked(),F.view._wt.exportSettingsAsClassNames()),F.runHooks("afterUpdateSettings",e)),W.adjustRowsAndCols(),F.view&&!z&&(F.forceFullRender=!0,F.view.render(),F.view._wt.wtOverlays.adjustElementsSize()),t||!F.view||""!==c&&""!==d&&void 0!==d||c===d||F.view._wt.wtOverlays.updateMainScrollableElements()},this.getValue=function(){const e=F.getSelectedLast();if(q.getValue){if((0,i.isFunction)(q.getValue))return q.getValue.call(F);if(e)return F.getData()[e[0][0]][q.getValue]}else if(e)return F.getDataAtCell(e[0],e[1])},this.getSettings=function(){return q},this.clear=function(){this.selectAll(),this.emptySelectedCells()},this.alter=function(e,t,r,n,s){W.alter(e,t,r,n,s)},this.getCell=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=t,s=e;if(t>=0){if(this.columnIndexMapper.isHidden(this.toPhysicalColumn(t)))return null;n=this.columnIndexMapper.getRenderableFromVisualIndex(t)}if(e>=0){if(this.rowIndexMapper.isHidden(this.toPhysicalRow(e)))return null;s=this.rowIndexMapper.getRenderableFromVisualIndex(e)}return null===s||null===n||void 0===s||void 0===n?null:F.view.getCellAtCoords(F._createCellCoords(s,n),r)},this.getCoords=function(e){const t=this.view._wt.wtTable.getCoords(e);if(null===t)return null;const{row:r,col:n}=t;let s=r,i=n;return r>=0&&(s=this.rowIndexMapper.getVisualFromRenderableIndex(r)),n>=0&&(i=this.columnIndexMapper.getVisualFromRenderableIndex(n)),F._createCellCoords(s,i)},this.colToProp=function(e){return V.colToProp(e)},this.propToCol=function(e){return V.propToCol(e)},this.toVisualRow=e=>this.rowIndexMapper.getVisualFromPhysicalIndex(e),this.toVisualColumn=e=>this.columnIndexMapper.getVisualFromPhysicalIndex(e),this.toPhysicalRow=e=>this.rowIndexMapper.getPhysicalFromVisualIndex(e),this.toPhysicalColumn=e=>this.columnIndexMapper.getPhysicalFromVisualIndex(e),this.getDataAtCell=function(e,t){return V.get(e,V.colToProp(t))},this.getDataAtRowProp=function(e,t){return V.get(e,t)},this.getDataAtCol=function(e){const t=[],r=V.getRange(F._createCellCoords(0,e),F._createCellCoords(q.data.length-1,e),V.DESTINATION_RENDERER);for(let e=0;e<r.length;e+=1)for(let n=0;n<r[e].length;n+=1)t.push(r[e][n]);return t},this.getDataAtProp=function(e){const t=[],r=V.getRange(F._createCellCoords(0,V.propToCol(e)),F._createCellCoords(q.data.length-1,V.propToCol(e)),V.DESTINATION_RENDERER);for(let e=0;e<r.length;e+=1)for(let n=0;n<r[e].length;n+=1)t.push(r[e][n]);return t},this.getSourceData=function(e,t,r,n){let s;return s=void 0===e?B.getData():B.getByRange(F._createCellCoords(e,t),F._createCellCoords(r,n)),s},this.getSourceDataArray=function(e,t,r,n){let s;return s=void 0===e?B.getData(!0):B.getByRange(F._createCellCoords(e,t),F._createCellCoords(r,n),!0),s},this.getSourceDataAtCol=function(e){return B.getAtColumn(e)},this.setSourceDataAtCell=function(e,t,r,n){const s=ae(e,t,r),i=this.hasHook("afterSetSourceDataAtCell"),a=[];i&&(0,d.arrayEach)(s,(e=>{let[t,r,n]=e;a.push([t,r,B.getAtCell(t,r),n])})),(0,d.arrayEach)(s,(e=>{let[t,r,n]=e;B.setAtCell(t,r,n)})),i&&this.runHooks("afterSetSourceDataAtCell",a,n),this.render();const l=F.getActiveEditor();l&&(0,o.isDefined)(l.refreshValue)&&l.refreshValue()},this.getSourceDataAtRow=function(e){return B.getAtRow(e)},this.getSourceDataAtCell=function(e,t){return B.getAtCell(e,t)},this.getDataAtRow=function(e){return V.getRange(F._createCellCoords(e,0),F._createCellCoords(e,this.countCols()-1),V.DESTINATION_RENDERER)[0]||[]},this.getDataType=function(e,t,r,n){const s=void 0===e?[0,0,this.countRows(),this.countCols()]:[e,t,r,n],[i,o]=s;let[,,a,l]=s,h=null,u=null;void 0===a&&(a=i),void 0===l&&(l=o);let c="mixed";return(0,w.rangeEach)(Math.max(Math.min(i,a),0),Math.max(i,a),(e=>{let t=!0;return(0,w.rangeEach)(Math.max(Math.min(o,l),0),Math.max(o,l),(r=>{const n=this.getCellMeta(e,r);return u=n.type,h?t=h===u:h=u,t})),c=t?u:"mixed",t})),c},this.removeCellMeta=function(e,t,r){const[n,s]=[this.toPhysicalRow(e),this.toPhysicalColumn(t)];let i=X.getCellMetaKeyValue(n,s,r);!1!==F.runHooks("beforeRemoveCellMeta",e,t,r,i)&&(X.removeCellMeta(n,s,r),F.runHooks("afterRemoveCellMeta",e,t,r,i)),i=null},this.spliceCellsMeta=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var r=arguments.length,n=new Array(r>2?r-2:0),s=2;s<r;s++)n[s-2]=arguments[s];if(n.length>0&&!Array.isArray(n[0]))throw new Error("The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.");t>0&&X.removeRow(this.toPhysicalRow(e),t),n.length>0&&(0,d.arrayEach)(n.reverse(),(t=>{X.createRow(this.toPhysicalRow(e)),(0,d.arrayEach)(t,((t,r)=>this.setCellMetaObject(e,r,t)))})),F.render()},this.setCellMetaObject=function(e,t,r){"object"==typeof r&&(0,u.objectEach)(r,((r,n)=>{this.setCellMeta(e,t,n,r)}))},this.setCellMeta=function(e,t,r,n){if(!1===F.runHooks("beforeSetCellMeta",e,t,r,n))return;let s=e,i=t;e<this.countRows()&&(s=this.toPhysicalRow(e)),t<this.countCols()&&(i=this.toPhysicalColumn(t)),X.setCellMeta(s,i,r,n),F.runHooks("afterSetCellMeta",e,t,r,n)},this.getCellsMeta=function(){return X.getCellsMeta()},this.getCellMeta=function(e,t){let r=this.toPhysicalRow(e),n=this.toPhysicalColumn(t);return null===r&&(r=e),null===n&&(n=t),X.getCellMeta(r,n,{visualRow:e,visualColumn:t})},this.getColumnMeta=function(e){return X.getColumnMeta(this.toPhysicalColumn(e))},this.getCellMetaAtRow=function(e){return X.getCellsMetaAtRow(e)},this.isColumnModificationAllowed=function(){return!("object"===F.dataType||q.columns)},this.getCellRenderer=function(e,t){const r="number"==typeof e?F.getCellMeta(e,t).renderer:e.renderer;return"string"==typeof r?(0,f.getRenderer)(r):(0,o.isUndefined)(r)?(0,f.getRenderer)("text"):r},this.getCellEditor=function(e,t){const r="number"==typeof e?F.getCellMeta(e,t).editor:e.editor;return"string"==typeof r?(0,m.getEditor)(r):(0,o.isUndefined)(r)?(0,m.getEditor)("text"):r},this.getCellValidator=function(e,t){const r="number"==typeof e?F.getCellMeta(e,t).validator:e.validator;return"string"==typeof r?(0,y.getValidator)(r):r},this.validateCells=function(e){this._validateCells(e)},this.validateRows=function(e,t){if(!Array.isArray(e))throw new Error("validateRows parameter `rows` must be an array");this._validateCells(t,e)},this.validateColumns=function(e,t){if(!Array.isArray(e))throw new Error("validateColumns parameter `columns` must be an array");this._validateCells(t,void 0,e)},this._validateCells=function(e,t,r){const n=new ne;e&&(n.onQueueEmpty=e);let s=F.countRows()-1;for(;s>=0;){if(void 0!==t&&-1===t.indexOf(s)){s-=1;continue}let e=F.countCols()-1;for(;e>=0;)void 0===r||-1!==r.indexOf(e)?(n.addValidatorToQueue(),F.validateCell(F.getDataAtCell(s,e),F.getCellMeta(s,e),(e=>{if("boolean"!=typeof e)throw new Error("Validation error: result is not boolean");!1===e&&(n.valid=!1),n.removeValidatorFormQueue()}),"validateCells"),e-=1):e-=1;s-=1}n.checkIfQueueIsEmpty()},this.getRowHeader=function(e){let t=q.rowHeaders,r=e;return void 0!==r&&(r=F.runHooks("modifyRowHeader",r)),void 0===r?(t=[],(0,w.rangeEach)(F.countRows()-1,(e=>{t.push(F.getRowHeader(e))}))):Array.isArray(t)&&void 0!==t[r]?t=t[r]:(0,i.isFunction)(t)?t=t(r):t&&"string"!=typeof t&&"number"!=typeof t&&(t=r+1),t},this.hasRowHeaders=function(){return!!q.rowHeaders},this.hasColHeaders=function(){if(void 0!==q.colHeaders&&null!==q.colHeaders)return!!q.colHeaders;for(let e=0,t=F.countCols();e<t;e++)if(F.getColHeader(e))return!0;return!1},this.getColHeader=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;const r=F.runHooks("modifyColHeader",e);if(void 0===r){const e=[],t=F.countCols();for(let r=0;r<t;r++)e.push(F.getColHeader(r));return e}let n=q.colHeaders;const s=F.toPhysicalColumn(r),o=function(e){const t=[],r=F.countCols();let n=0;for(;n<r;n++)(0,i.isFunction)(q.columns)&&q.columns(n)&&t.push(n);return t[e]}(s);return!1===q.colHeaders?n=null:q.columns&&(0,i.isFunction)(q.columns)&&q.columns(o)&&q.columns(o).title?n=q.columns(o).title:q.columns&&q.columns[s]&&q.columns[s].title?n=q.columns[s].title:Array.isArray(q.colHeaders)&&void 0!==q.colHeaders[s]?n=q.colHeaders[s]:(0,i.isFunction)(q.colHeaders)?n=q.colHeaders(s):q.colHeaders&&"string"!=typeof q.colHeaders&&"number"!=typeof q.colHeaders&&(n=(0,R.spreadsheetColumnLabel)(r)),n=F.runHooks("modifyColumnHeaderValue",n,e,t),n},this._getColWidthFromSettings=function(e){let t;if(e>=0){t=F.getCellMeta(0,e).width}if(void 0!==t&&t!==q.width||(t=q.colWidths),null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getColWidth=function(e){let t=F._getColWidthFromSettings(e);return t=F.runHooks("modifyColWidth",t,e),void 0===t&&(t=N.DEFAULT_COLUMN_WIDTH),t},this._getRowHeightFromSettings=function(e){let t=q.rowHeights;if(null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getRowHeight=function(e){let t=F._getRowHeightFromSettings(e);return t=F.runHooks("modifyRowHeight",t,e),t},this.countSourceRows=function(){return B.countRows()},this.countSourceCols=function(){return B.countFirstRowKeys()},this.countRows=function(){return V.getLength()},this.countCols=function(){const e=q.maxCols,t=this.columnIndexMapper.getNotTrimmedIndexesLength();return Math.min(e,t)},this.countRenderedRows=function(){return F.view._wt.drawn?F.view._wt.wtTable.getRenderedRowsCount():-1},this.countVisibleRows=function(){return F.view._wt.drawn?F.view._wt.wtTable.getVisibleRowsCount():-1},this.countRenderedCols=function(){return F.view._wt.drawn?F.view._wt.wtTable.getRenderedColumnsCount():-1},this.countVisibleCols=function(){return F.view._wt.drawn?F.view._wt.wtTable.getVisibleColumnsCount():-1},this.countRowHeaders=function(){return this.view.getRowHeadersCount()},this.countColHeaders=function(){return this.view.getColumnHeadersCount()},this.countEmptyRows=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,w.rangeEachReverse)(F.countRows()-1,(r=>{if(F.isEmptyRow(r))t+=1;else if(!0===e)return!1})),t},this.countEmptyCols=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,w.rangeEachReverse)(F.countCols()-1,(r=>{if(F.isEmptyCol(r))t+=1;else if(!0===e)return!1})),t},this.isEmptyRow=function(e){return q.isEmptyRow.call(F,e)},this.isEmptyCol=function(e){return q.isEmptyCol.call(F,e)},this.selectCell=function(e,t,r,n){let s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return!(0,o.isUndefined)(e)&&!(0,o.isUndefined)(t)&&this.selectCells([[e,t,r,n]],s,i)},this.selectCells=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[[]],t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&G.suspend();const r=J.selectCells(e);return r&&t&&F.listen(),G.resume(),r},this.selectColumns=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2?arguments[2]:void 0;return J.selectColumns(e,t,r)},this.selectRows=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2?arguments[2]:void 0;return J.selectRows(e,t,r)},this.deselectCell=function(){J.deselect()},this.selectAll=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,r=arguments.length>2?arguments[2]:void 0;G.skipNextScrollCycle(),J.selectAll(e,t,r)};const he=(e,t)=>e.getNearestNotHiddenIndex(t,1,!0);this.scrollViewportTo=function(e){var t,r;"number"==typeof e&&(e={row:arguments[0],col:arguments[1],verticalSnap:arguments[2]?"bottom":"top",horizontalSnap:arguments[3]?"end":"start",considerHiddenIndexes:null===(r=arguments[4])||void 0===r||r});const{row:n,col:s,verticalSnap:i,horizontalSnap:o,considerHiddenIndexes:a}=null!==(t=e)&&void 0!==t?t:{};let l,h,u,c;void 0!==i&&(l="top"===i,h=!l),void 0!==o&&(u="start"===o,c=!u);let d=n,p=s;if(void 0===a||a){const e=Number.isInteger(n)&&n>=0,t=Number.isInteger(s)&&s>=0,r=e?he(this.rowIndexMapper,n):void 0,i=t?he(this.columnIndexMapper,s):void 0;if(null===r||null===i)return!1;d=e?F.rowIndexMapper.getRenderableFromVisualIndex(r):n,p=t?F.columnIndexMapper.getRenderableFromVisualIndex(i):s}const g=Number.isInteger(d),f=Number.isInteger(p);return g&&d>=0&&f&&p>=0?F.view.scrollViewport(F._createCellCoords(d,p),l,c,h,u):g&&d>=0&&(f&&p<0||!f)?F.view.scrollViewportVertically(d,l,h):!!(f&&p>=0&&(g&&d<0||!g))&&F.view.scrollViewportHorizontally(p,c,u)},this.scrollToFocusedCell=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>{};if(!this.selection.isSelected())return;this.addHookOnce("afterScroll",e);const{highlight:t}=this.getSelectedRangeLast();this.scrollViewportTo(t.toObject())?this.view.render():(this.removeHook("afterScroll",e),this._registerImmediate((()=>e())))},this.destroy=function(){if(F._clearTimeouts(),F._clearImmediates(),F.view&&F.view.destroy(),B&&B.destroy(),B=null,this.getShortcutManager().destroy(),X.clearCache(),k.delete(this.guid),(0,T.isRootInstance)(F)){const e=this.rootDocument.querySelector(".hot-display-license-info");e&&e.parentNode.removeChild(e)}(0,s.empty)(F.rootElement),U.destroy(),Y&&Y.destroy(),F.batchExecution((()=>{F.rowIndexMapper.unregisterAll(),F.columnIndexMapper.unregisterAll(),Z.getItems().forEach((e=>{let[,t]=e;t.destroy()})),Z.clear(),F.runHooks("afterDestroy")}),!0),M.default.getSingleton().destroy(F),(0,u.objectEach)(F,((e,t,r)=>{var n;(0,i.isFunction)(e)?r[t]=(n=t,()=>{throw new Error(`The "${n}" method cannot be called because this Handsontable instance has been destroyed`)}):"guid"!==t&&(r[t]=null)})),F.isDestroyed=!0,V&&V.destroy(),V=null,W=null,J=null,Y=null,F=null},this.getActiveEditor=function(){return Y.getActiveEditor()},this.getFirstRenderedVisibleRow=function(){return F.view.getFirstRenderedVisibleRow()},this.getLastRenderedVisibleRow=function(){return F.view.getLastRenderedVisibleRow()},this.getFirstRenderedVisibleColumn=function(){return F.view.getFirstRenderedVisibleColumn()},this.getLastRenderedVisibleColumn=function(){return F.view.getLastRenderedVisibleColumn()},this.getFirstFullyVisibleRow=function(){return F.view.getFirstFullyVisibleRow()},this.getLastFullyVisibleRow=function(){return F.view.getLastFullyVisibleRow()},this.getFirstFullyVisibleColumn=function(){return F.view.getFirstFullyVisibleColumn()},this.getLastFullyVisibleColumn=function(){return F.view.getLastFullyVisibleColumn()},this.getFirstPartiallyVisibleRow=function(){return F.view.getFirstPartiallyVisibleRow()},this.getLastPartiallyVisibleRow=function(){return F.view.getLastPartiallyVisibleRow()},this.getFirstPartiallyVisibleColumn=function(){return F.view.getFirstPartiallyVisibleColumn()},this.getLastPartiallyVisibleColumn=function(){return F.view.getLastPartiallyVisibleColumn()},this.getPlugin=function(e){const t=(0,E.toUpperCaseFirst)(e);return"UndoRedo"===t?this.undoRedo:Z.getItem(t)},this.getPluginName=function(e){return e===this.undoRedo?this.undoRedo.constructor.PLUGIN_KEY:Z.getId(e)},this.getInstance=function(){return F},this.addHook=function(e,t,r){M.default.getSingleton().add(e,t,F,r)},this.hasHook=function(e){return M.default.getSingleton().has(e,F)||M.default.getSingleton().has(e)},this.addHookOnce=function(e,t,r){M.default.getSingleton().once(e,t,F,r)},this.removeHook=function(e,t){M.default.getSingleton().remove(e,t,F)},this.runHooks=function(e,t,r,n,s,i,o){return M.default.getSingleton().run(F,e,t,r,n,s,i,o)},this.getTranslatedPhrase=function(e,t){return(0,_.getTranslatedPhrase)(q.language,e,t)},this.toHTML=()=>(0,p.instanceToHTML)(this),this.toTableElement=()=>{const e=this.rootDocument.createElement("div");return e.insertAdjacentHTML("afterbegin",(0,p.instanceToHTML)(this)),e.firstElementChild},this.timeouts=[],this._registerTimeout=function(e){let t=e;"function"==typeof t&&(t=setTimeout(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0)),this.timeouts.push(t)},this._clearTimeouts=function(){(0,d.arrayEach)(this.timeouts,(e=>{clearTimeout(e)}))},this.immediates=[],this._registerImmediate=function(e){this.immediates.push(setImmediate(e))},this._clearImmediates=function(){(0,d.arrayEach)(this.immediates,(e=>{clearImmediate(e)}))},this._getEditorManager=function(){return Y},this.isRtl=function(){return"rtl"===F.rootWindow.getComputedStyle(F.rootElement).direction},this.isLtr=function(){return!F.isRtl()},this.getDirectionFactor=function(){return F.isLtr()?1:-1};const ue=(0,P.createShortcutManager)({handleEvent:()=>F.isListening(),beforeKeyDown:e=>this.runHooks("beforeKeyDown",e),afterKeyDown:e=>{this.isDestroyed||F.runHooks("afterDocumentKeyDown",e)},ownerWindow:this.rootWindow});this.addHook("beforeOnCellMouseDown",(e=>{!1===e.ctrlKey&&!1===e.metaKey&&ue.releasePressedKeys()})),this.getShortcutManager=function(){return ue},this.getFocusManager=function(){return j},(0,g.getPluginsNames)().forEach((e=>{const t=(0,g.getPlugin)(e);Z.addItem(e,new t(this))})),(0,L.registerAllShortcutContexts)(F),ue.setActiveContextName("grid"),M.default.getSingleton().run(F,"construct")},r(67834),r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620),r(71766);var s=r(49536),i=r(25735),o=r(67508),a=r(1479),l=n(r(6637)),h=n(r(63286)),u=r(58460),c=r(24638),d=r(98758),p=r(33050),g=r(9415),f=r(94539),m=r(39761),y=r(19434),E=r(69114),w=r(27050),C=n(r(81212)),v=n(r(26499)),R=r(37671),S=r(65686),T=r(26048),N=r(6697),M=n(r(37056)),_=r(63055),b=r(51127),A=r(78700),O=r(56988),I=r(75893),x=r(22781),P=r(5061),L=r(52684);let D=null;const k=new Map;new Set},13436:(e,t,r)=>{"use strict";t.__esModule=!0,t.installFocusDetector=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=e.rootElement,n=i(e),s=i(e);return n.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromTop())),s.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromBottom())),r.firstChild.before(n),r.lastChild.after(s),{activate(){e._registerTimeout((()=>{n.tabIndex=0,s.tabIndex=0}),10)},deactivate(){e._registerTimeout((()=>{n.tabIndex=-1,s.tabIndex=-1}),10)}}};var n=r(49536),s=r(81595);function i(e){const t=e.rootDocument.createElement("input");return t.type="text",t.classList.add("htFocusCatcher"),e.getSettings().ariaTags&&(0,n.setAttribute)(t,[(0,s.A11Y_PRESENTATION)(),(0,s.A11Y_HIDDEN)()]),t}},70994:(e,t,r)=>{"use strict";t.__esModule=!0,t.installFocusCatcher=function(e){const t=function(e){return t=>{if(!t)return null;const r=i(e),n=o(e);return t.col<r.col&&(t.col=r.col),t.col>n.col&&(t.col=n.col),t.row<r.row&&(t.row=r.row),t.row>n.row&&(t.row=n.row),t}}(e);let r;const{activate:a,deactivate:l}=(0,s.installFocusDetector)(e,{onFocusFromTop(){var n;const s=null!==(n=t(r))&&void 0!==n?n:i(e);s&&(e.runHooks("modifyFocusOnTabNavigation","from_above",s),e.selectCell(s.row,s.col)),e.listen()},onFocusFromBottom(){var n;const s=null!==(n=t(r))&&void 0!==n?n:o(e);s&&(e.runHooks("modifyFocusOnTabNavigation","from_below",s),e.selectCell(s.row,s.col)),e.listen()}}),h={wrapped:!1,flipped:!1};let u=!0,c=!1,d=!1;e.addHook("afterListen",(()=>l())),e.addHook("afterUnlisten",(()=>a())),e.addHook("afterSelection",((t,n,s,i,o)=>{var a;(c&&(h.wrapped&&h.flipped||d)&&(d=!1,o.value=!0),u)&&(r=null===(a=e.getSelectedRangeLast())||void 0===a?void 0:a.highlight)})),e.addHook("beforeRowWrap",((e,t,r)=>{h.wrapped=!0,h.flipped=r}));const p={keys:[["Tab"],["Shift","Tab"]],preventDefault:!1,stopPropagation:!1,relativeToGroup:n.GRID_GROUP,group:"focusCatcher"};e.getShortcutManager().getContext("grid").addShortcuts([{...p,callback:()=>{const{tabNavigation:t}=e.getSettings();c=!0,e.getSelectedRangeLast()&&!t&&(u=!1),t||(d=!0)},position:"before"},{...p,callback:t=>{const{tabNavigation:n,autoWrapRow:s}=e.getSettings();if(c=!1,u=!0,!n||!e.selection.isSelected()||s&&h.wrapped&&h.flipped||!s&&h.wrapped)return s&&h.wrapped&&h.flipped&&(r=t.shiftKey?i(e):o(e)),h.wrapped=!1,h.flipped=!1,e.deselectCell(),e.unlisten(),!1;t.preventDefault()},position:"after"}])};var n=r(52684),s=r(13436);function i(e){const{rowIndexMapper:t,columnIndexMapper:r}=e,{navigableHeaders:n}=e.getSettings();let s=n&&e.countColHeaders()>0?-e.countColHeaders():0,i=n&&e.countRowHeaders()>0?-e.countRowHeaders():0;return 0===s&&(s=t.getVisualFromRenderableIndex(s)),0===i&&(i=r.getVisualFromRenderableIndex(i)),null===s||null===i?null:e._createCellCoords(s,i)}function o(e){var t,r;const{rowIndexMapper:n,columnIndexMapper:s}=e,{navigableHeaders:i}=e.getSettings();let o=n.getRenderableIndexesLength()-1,a=s.getRenderableIndexesLength()-1;if(o<0){if(!i||0===e.countColHeaders())return null;o=-1}if(a<0){if(!i||0===e.countColHeaders())return null;a=-1}return e._createCellCoords(null!==(t=n.getVisualFromRenderableIndex(o))&&void 0!==t?t:o,null!==(r=s.getVisualFromRenderableIndex(a))&&void 0!==r?r:a)}},75893:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(70994);Object.keys(n).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===n[e]||(t[e]=n[e]))}));var s=r(49697);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===s[e]||(t[e]=s[e]))}))},49697:(e,t,r)=>{"use strict";t.__esModule=!0,t.createViewportScroller=function(e){const{selection:t}=e;let r=!1,u=!1;return{resume(){u=!1},suspend(){u=!0},skipNextScrollCycle(){r=!0},scrollTo(c){var d;if(r||u)return void(r=!1);let p;t.isFocusSelectionChanged()?p=(0,i.focusScrollStrategy)(e):t.isSelectedByCorner()?p=(0,s.cornerHeaderScrollStrategy)(e):t.isSelectedByRowHeader()?p=(0,l.rowHeaderScrollStrategy)(e):t.isSelectedByColumnHeader()?p=(0,n.columnHeaderScrollStrategy)(e):1===t.getSelectedRange().size()&&t.isMultiple()?p=(0,o.multipleScrollStrategy)(e):1!==t.getSelectedRange().size()||t.isMultiple()?t.getSelectedRange().size()>1&&(p=(0,a.noncontiguousScrollStrategy)(e)):p=(0,h.singleScrollStrategy)(e),null===(d=p)||void 0===d||d(c)}}};var n=r(34710),s=r(32373),i=r(47315),o=r(85817),a=r(8088),l=r(35126),h=r(51829)},34710:(e,t)=>{"use strict";t.__esModule=!0,t.columnHeaderScrollStrategy=function(e){return t=>{let{col:r}=t;e.scrollViewportTo({col:r})}}},32373:(e,t)=>{"use strict";t.__esModule=!0,t.cornerHeaderScrollStrategy=function(){return()=>{}}},47315:(e,t)=>{"use strict";t.__esModule=!0,t.focusScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},85817:(e,t)=>{"use strict";t.__esModule=!0,t.multipleScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},8088:(e,t)=>{"use strict";t.__esModule=!0,t.noncontiguousScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},35126:(e,t)=>{"use strict";t.__esModule=!0,t.rowHeaderScrollStrategy=function(e){return t=>{let{row:r}=t;e.scrollViewportTo({row:r})}}},51829:(e,t)=>{"use strict";t.__esModule=!0,t.singleScrollStrategy=function(e){return t=>{const r=e.selection.getSelectionSource(),{row:n,col:s}=t;if(n<0&&s>=0)e.scrollViewportTo({col:s});else if(s<0&&n>=0)e.scrollViewportTo({row:n});else{if("mouse"===r&&(s===e.view.getLastPartiallyVisibleColumn()||n===e.view.getLastPartiallyVisibleRow()))return;e.scrollViewportTo({row:n,col:s})}}}},35078:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=r(70389),o=r(37671),a=r(58460),l=r(98758),h=r(27050),u=r(67508);class c{static get DESTINATION_RENDERER(){return 1}static get DESTINATION_CLIPBOARD_GENERATOR(){return 2}constructor(e,t,r){(0,s.default)(this,"hot",void 0),(0,s.default)(this,"metaManager",void 0),(0,s.default)(this,"tableMeta",void 0),(0,s.default)(this,"dataSource",void 0),(0,s.default)(this,"duckSchema",void 0),(0,s.default)(this,"colToPropCache",void 0),(0,s.default)(this,"propToColCache",void 0),this.hot=e,this.metaManager=r,this.tableMeta=r.getTableMeta(),this.dataSource=t,this.duckSchema=this.createDuckSchema(),this.createMap()}createMap(){const e=this.getSchema();if(void 0===e)throw new Error("trying to create `columns` definition but you didn't provide `schema` nor `data`");const t=this.tableMeta.columns;let r;if(this.colToPropCache=[],this.propToColCache=new Map,t){let n=0,s=0,i=!1;if("function"==typeof t){const t=(0,a.deepObjectSize)(e);n=t>0?t:this.countFirstRowKeys(),i=!0}else{const e=this.tableMeta.maxCols;n=Math.min(e,t.length)}for(r=0;r<n;r++){const e=i?t(r):t[r];if((0,a.isObject)(e)){if(void 0!==e.data){const t=i?s:r;this.colToPropCache[t]=e.data,this.propToColCache.set(e.data,t)}s+=1}}}else this.recursiveDuckColumns(e)}countFirstRowKeys(){return(0,o.countFirstRowKeys)(this.dataSource)}recursiveDuckColumns(e,t,r){let n,s=t,i=r;return void 0===s&&(s=0,i=""),"object"!=typeof e||Array.isArray(e)||(0,a.objectEach)(e,((e,t)=>{null===e?(n=i+t,this.colToPropCache.push(n),this.propToColCache.set(n,s),s+=1):s=this.recursiveDuckColumns(e,s,`${t}.`)})),s}colToProp(e){if(!1===Number.isInteger(e))return e;const t=this.hot.toPhysicalColumn(e);return null===t?e:this.colToPropCache&&(0,u.isDefined)(this.colToPropCache[t])?this.colToPropCache[t]:t}propToCol(e){const t=this.propToColCache.get(e);if((0,u.isDefined)(t))return this.hot.toVisualColumn(t);const r=this.hot.toVisualColumn(e);return null===r?e:r}getSchema(){const e=this.tableMeta.dataSchema;return e?"function"==typeof e?e():e:this.duckSchema}createDuckSchema(){return this.dataSource&&this.dataSource[0]?(0,a.duckSchema)(this.dataSource[0]):{}}refreshDuckSchema(){this.duckSchema=this.createDuckSchema()}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:r,mode:n="above"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const s=this.hot.countSourceRows();let i=s,o=0,l=e;("number"!=typeof l||l>=s)&&(l=s),l<this.hot.countRows()&&(i=this.hot.toPhysicalRow(l));if(!1===this.hot.runHooks("beforeCreateRow",l,t,r)||null===i)return{delta:0};const u=this.tableMeta.maxRows,c=this.getSchema().length,d=[];for(;o<t&&s+o<u;){let e=null;"array"===this.hot.dataType?this.tableMeta.dataSchema?e=(0,a.deepClone)(this.getSchema()):(e=[],(0,h.rangeEach)(c-1,(()=>e.push(null)))):"function"===this.hot.dataType?e=this.tableMeta.dataSchema(l+o):(e={},(0,a.deepExtend)(e,this.getSchema())),d.push(e),o+=1}this.hot.rowIndexMapper.insertIndexes(l,o),"below"===n&&(i=Math.min(i+1,s)),this.spliceData(i,0,d);const p=this.hot.toVisualRow(i);return this.hot.countSourceRows()===d.length&&this.hot.columnIndexMapper.initToLength(this.hot.getInitialColumnCount()),o>0&&(null==e?this.metaManager.createRow(null,o):"auto"!==r&&this.metaManager.createRow(i,t)),this.hot.runHooks("afterCreateRow",p,o,r),this.hot.forceFullRender=!0,{delta:o,startPhysicalIndex:i}}createCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:r,mode:n="start"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this.hot.isColumnModificationAllowed())throw new Error("Cannot create new column. When data source in an object, you can only have as much columns as defined in first data row, data schema or in the 'columns' setting.If you want to be able to add new columns, you have to use array datasource.");const s=this.dataSource,i=this.tableMeta.maxCols,o=this.hot.countSourceCols();let a=e;("number"!=typeof a||a>=o)&&(a=o);if(!1===this.hot.runHooks("beforeCreateCol",a,t,r))return{delta:0};let l=o;a<this.hot.countCols()&&(l=this.hot.toPhysicalColumn(a));const h=this.hot.countSourceRows();let u=this.hot.countCols(),c=0,d=l;"end"===n&&(d=Math.min(d+1,o));const p=d;for(;c<t&&u<i;){if("number"!=typeof a||a>=u)if(h>0)for(let e=0;e<h;e+=1)void 0===s[e]&&(s[e]=[]),s[e].push(null);else s.push([null]);else for(let e=0;e<h;e++)s[e].splice(d,0,null);c+=1,d+=1,u+=1}this.hot.columnIndexMapper.insertIndexes(a,c),c>0&&(null==e?this.metaManager.createColumn(null,c):"auto"!==r&&this.metaManager.createColumn(p,t));const g=this.hot.toVisualColumn(p);return this.hot.runHooks("afterCreateCol",g,c,r),this.hot.forceFullRender=!0,this.refreshDuckSchema(),{delta:c,startPhysicalIndex:p}}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2?arguments[2]:void 0,n=Number.isInteger(e)?e:-t;const s=this.visualRowsToPhysical(n,t),i=this.hot.countSourceRows();n=(i+n)%i;if(!1===this.hot.runHooks("beforeRemoveRow",n,s.length,s,r))return!1;const o=s.length;if(this.filterData(n,o,s),n<this.hot.countRows()){this.hot.rowIndexMapper.removeIndexes(s);const e=(0,u.isDefined)(this.tableMeta.columns)||(0,u.isDefined)(this.tableMeta.dataSchema);0===this.hot.rowIndexMapper.getNotTrimmedIndexesLength()&&!1===e&&this.hot.columnIndexMapper.setIndexesSequence([])}return s.slice(0).sort(((e,t)=>t-e)).forEach((e=>{this.metaManager.removeRow(e,1)})),this.hot.runHooks("afterRemoveRow",n,o,s,r),this.hot.forceFullRender=!0,!0}removeCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,r=arguments.length>2?arguments[2]:void 0;if("object"===this.hot.dataType||this.tableMeta.columns)throw new Error("cannot remove column with object data source or columns option specified");let n="number"!=typeof e?-t:e;n=(this.hot.countCols()+n)%this.hot.countCols();const s=this.visualColumnsToPhysical(n,t),i=s.slice(0).sort(((e,t)=>t-e));if(!1===this.hot.runHooks("beforeRemoveCol",n,t,s,r))return!1;let o=!0;const a=i.length,l=this.dataSource;for(let e=0;e<a;e++)o&&s[0]!==s[e]-e&&(o=!1);if(o)for(let e=0,r=this.hot.countSourceRows();e<r;e++)l[e].splice(s[0],t),0===e&&this.metaManager.removeColumn(s[0],t);else for(let e=0,t=this.hot.countSourceRows();e<t;e++)for(let t=0;t<a;t++)l[e].splice(i[t],1),0===e&&this.metaManager.removeColumn(i[t],1);return n<this.hot.countCols()&&(this.hot.columnIndexMapper.removeIndexes(s),0===this.hot.columnIndexMapper.getNotTrimmedIndexesLength()&&this.hot.rowIndexMapper.setIndexesSequence([])),this.hot.runHooks("afterRemoveCol",n,t,s,r),this.hot.forceFullRender=!0,this.refreshDuckSchema(),!0}spliceCol(e,t,r){const n=this.hot.getDataAtCol(e),s=n.slice(t,t+r),i=n.slice(t+r);for(var o=arguments.length,a=new Array(o>3?o-3:0),h=3;h<o;h++)a[h-3]=arguments[h];(0,l.extendArray)(a,i);let u=0;for(;u<r;)a.push(null),u+=1;return(0,l.to2dArray)(a),this.hot.populateFromArray(t,e,a,null,null,"spliceCol"),s}spliceRow(e,t,r){const n=this.hot.getSourceDataAtRow(e),s=n.slice(t,t+r),i=n.slice(t+r);for(var o=arguments.length,a=new Array(o>3?o-3:0),h=3;h<o;h++)a[h-3]=arguments[h];(0,l.extendArray)(a,i);let u=0;for(;u<r;)a.push(null),u+=1;return this.hot.populateFromArray(e,t,[a],null,null,"spliceRow"),s}spliceData(e,t,r){if(!1!==this.hot.runHooks("beforeDataSplice",e,t,r)){const t=[...this.dataSource.slice(0,e),...r,...this.dataSource.slice(e)];this.dataSource.length=0,t.forEach((e=>this.dataSource.push(e)))}}filterData(e,t,r){let n=this.hot.runHooks("filterData",e,t,r);!1===Array.isArray(n)&&(n=this.dataSource.filter(((e,t)=>-1===r.indexOf(t)))),this.dataSource.length=0,Array.prototype.push.apply(this.dataSource,n)}get(e,t){const r=this.hot.toPhysicalRow(e);let n=this.dataSource[r];const s=this.hot.runHooks("modifyRowData",r);n=isNaN(s)?s:n;const{dataDotNotation:i}=this.hot.getSettings();let o=null;if(n&&n.hasOwnProperty&&(0,a.hasOwnProperty)(n,t))o=n[t];else if(i&&"string"==typeof t&&t.indexOf(".")>-1){let e=n;if(!e)return null;const r=t.split(".");for(let t=0,n=r.length;t<n;t++)if(e=e[r[t]],void 0===e)return null;o=e}else"function"==typeof t&&(o=t(this.dataSource.slice(r,r+1)[0]));if(this.hot.hasHook("modifyData")){const e=(0,a.createObjectPropListener)(o);this.hot.runHooks("modifyData",r,this.propToCol(t),e,"get"),e.isTouched()&&(o=e.value)}return o}getCopyable(e,t){return this.hot.getCellMeta(e,this.propToCol(t)).copyable?this.get(e,t):""}set(e,t,r){const n=this.hot.toPhysicalRow(e);let s=r,i=this.dataSource[n];const o=this.hot.runHooks("modifyRowData",n);if(i=isNaN(o)?o:i,this.hot.hasHook("modifyData")){const e=(0,a.createObjectPropListener)(s);this.hot.runHooks("modifyData",n,this.propToCol(t),e,"set"),e.isTouched()&&(s=e.value)}const{dataDotNotation:l}=this.hot.getSettings();if(i&&i.hasOwnProperty&&(0,a.hasOwnProperty)(i,t))i[t]=s;else if(l&&"string"==typeof t&&t.indexOf(".")>-1){let e,r=i,n=0;const o=t.split(".");for(n=0,e=o.length-1;n<e;n++)void 0===r[o[n]]&&(r[o[n]]={}),r=r[o[n]];r[o[n]]=s}else"function"==typeof t?t(this.dataSource.slice(n,n+1)[0],s):i[t]=s}visualRowsToPhysical(e,t){const r=this.hot.countSourceRows(),n=[];let s,i=(r+e)%r,o=t;for(;i<r&&o;)s=this.hot.toPhysicalRow(i),n.push(s),o-=1,i+=1;return n}visualColumnsToPhysical(e,t){const r=this.hot.countCols(),n=[];let s=(r+e)%r,i=t;for(;s<r&&i;){const e=this.hot.toPhysicalColumn(s);n.push(e),i-=1,s+=1}return n}clear(){for(let e=0;e<this.hot.countSourceRows();e++)for(let t=0;t<this.hot.countCols();t++)this.set(e,this.colToProp(t),"")}getLength(){const e=this.tableMeta.maxRows;let t;t=e<0||0===e?0:e||1/0;const r=this.hot.rowIndexMapper.getNotTrimmedIndexesLength();return Math.min(r,t)}getAll(){const e={row:0,col:0},t={row:Math.max(this.hot.countRows()-1,0),col:Math.max(this.hot.countCols()-1,0)};return e.row-t.row!=0||this.hot.countSourceRows()?this.getRange(e,t,c.DESTINATION_RENDERER):[]}countCachedColumns(){return this.colToPropCache.length}getRange(e,t,r){const n=[];let s,i,o;const a=this.tableMeta.maxRows,l=this.tableMeta.maxCols;if(0===a||0===l)return[];const h=r===c.DESTINATION_CLIPBOARD_GENERATOR?this.getCopyable:this.get,u=Math.min(Math.max(a-1,0),Math.max(e.row,t.row)),d=Math.min(Math.max(l-1,0),Math.max(e.col,t.col));for(s=Math.min(e.row,t.row);s<=u;s++){o=[];const r=s>=0?this.hot.toPhysicalRow(s):s;for(i=Math.min(e.col,t.col);i<=d&&null!==r;i++)o.push(h.call(this,s,this.colToProp(i)));null!==r&&n.push(o)}return n}getText(e,t){return(0,i.stringify)(this.getRange(e,t,c.DESTINATION_RENDERER))}getCopyableText(e,t){return(0,i.stringify)(this.getRange(e,t,c.DESTINATION_CLIPBOARD_GENERATOR))}destroy(){this.hot=null,this.metaManager=null,this.dataSource=null,this.duckSchema=null,this.colToPropCache.length=0,this.propToColCache.clear(),this.propToColCache=void 0}}t.default=c},26499:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(58460),o=r(37671),a=r(98758),l=r(27050),h=r(25735);t.default=class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];(0,s.default)(this,"hot",void 0),(0,s.default)(this,"data",void 0),(0,s.default)(this,"dataType","array"),(0,s.default)(this,"colToProp",(()=>{})),(0,s.default)(this,"propToCol",(()=>{})),this.hot=e,this.data=t}modifyRowData(e){let t;return this.hot.hasHook("modifyRowData")&&(t=this.hot.runHooks("modifyRowData",e)),void 0===t||Number.isInteger(t)?this.data[e]:t}getData(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.data&&0!==this.data.length?this.getByRange(null,null,e):this.data}setData(e){this.data=e}getAtColumn(e){const t=[];return(0,a.arrayEach)(this.data,((r,n)=>{const s=this.getAtCell(n,e);t.push(s)})),t}getAtRow(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s=void 0===t&&void 0===r,{dataDotNotation:o}=this.hot.getSettings();let a=null,u=null;if(a=this.modifyRowData(e),Array.isArray(a))u=[],s?a.forEach(((t,r)=>{u[r]=this.getAtPhysicalCell(e,r,a)})):(0,l.rangeEach)(t,r,(r=>{u[r-t]=this.getAtPhysicalCell(e,r,a)}));else if((0,i.isObject)(a)||(0,h.isFunction)(a))if(u=n?[]:{},!s||n){const s=0,h=this.countFirstRowKeys()-1;(0,l.rangeEach)(s,h,(l=>{const c=this.colToProp(l);if(l>=(t||s)&&l<=(r||h)&&!Number.isInteger(c)){const t=this.getAtPhysicalCell(e,c,a);n?u.push(t):o?(0,i.setProperty)(u,c,t):u[c]=t}}))}else(0,i.objectEach)(a,((t,r)=>{const n=this.getAtPhysicalCell(e,r,a);o?(0,i.setProperty)(u,r,n):u[r]=n}));return u}setAtCell(e,t,r){if(!(e>=this.countRows()||t>=this.countFirstRowKeys())){if(this.hot.hasHook("modifySourceData")){const n=(0,i.createObjectPropListener)(r);this.hot.runHooks("modifySourceData",e,t,n,"set"),n.isTouched()&&(r=n.value)}Number.isInteger(t)?this.data[e][t]=r:(0,i.setProperty)(this.data[e],t,r)}}getAtPhysicalCell(e,t,r){let n=null;if(r)if("string"==typeof t){const{dataDotNotation:e}=this.hot.getSettings();n=e?(0,i.getProperty)(r,t):r[t]}else n="function"==typeof t?t(r):r[t];if(this.hot.hasHook("modifySourceData")){const r=(0,i.createObjectPropListener)(n);this.hot.runHooks("modifySourceData",e,t,r,"get"),r.isTouched()&&(n=r.value)}return n}getAtCell(e,t){const r=this.modifyRowData(e);return this.getAtPhysicalCell(e,this.colToProp(t),r)}getByRange(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,s=null,i=null,o=null,a=null;null===e||null===t?(n=!0,s=0,o=this.countRows()-1):(s=Math.min(e.row,t.row),i=Math.min(e.col,t.col),o=Math.max(e.row,t.row),a=Math.max(e.col,t.col));const h=[];return(0,l.rangeEach)(s,o,(e=>{h.push(n?this.getAtRow(e,void 0,void 0,r):this.getAtRow(e,i,a,r))})),h}countRows(){if(this.hot.hasHook("modifySourceLength")){const e=this.hot.runHooks("modifySourceLength");if(Number.isInteger(e))return e}return this.data.length}countFirstRowKeys(){return(0,o.countFirstRowKeys)(this.data)}destroy(){this.data=null,this.hot=null}}},56988:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(35078));t.DataMap=s.default;var i=n(r(10615));t.MetaManager=i.default;var o=n(r(51909));t.metaSchemaFactory=o.default;var a=r(52604);t.replaceData=a.replaceData;var l=r(37313);t.DynamicCellMetaMod=l.DynamicCellMetaMod;var h=r(36645);t.ExtendMetaPropertiesMod=h.ExtendMetaPropertiesMod},10615:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(7649)),i=n(r(69502)),o=n(r(4936)),a=n(r(54934)),l=n(r(48499)),h=r(58460);class u{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];this.hot=e,this.globalMeta=new s.default(e),this.tableMeta=new i.default(this.globalMeta),this.columnMeta=new o.default(this.globalMeta),this.cellMeta=new a.default(this.columnMeta),r.forEach((e=>new e(this))),this.globalMeta.updateMeta(t)}getGlobalMeta(){return this.globalMeta.getMeta()}updateGlobalMeta(e){this.globalMeta.updateMeta(e)}getTableMeta(){return this.tableMeta.getMeta()}updateTableMeta(e){this.tableMeta.updateMeta(e)}getColumnMeta(e){return this.columnMeta.getMeta(e)}updateColumnMeta(e,t){this.columnMeta.updateMeta(e,t)}getCellMeta(e,t,r){let{visualRow:n,visualColumn:s}=r;const i=this.cellMeta.getMeta(e,t);return i.visualRow=n,i.visualCol=s,i.row=e,i.col=t,this.runLocalHooks("afterGetCellMeta",i),i}getCellMetaKeyValue(e,t,r){if("string"!=typeof r)throw new Error("The passed cell meta object key is not a string");return this.cellMeta.getMeta(e,t,r)}setCellMeta(e,t,r,n){this.cellMeta.setMeta(e,t,r,n)}updateCellMeta(e,t,r){this.cellMeta.updateMeta(e,t,r)}removeCellMeta(e,t,r){this.cellMeta.removeMeta(e,t,r)}getCellsMeta(){return this.cellMeta.getMetas()}getCellsMetaAtRow(e){return this.cellMeta.getMetasAtRow(e)}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createRow(e,t)}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeRow(e,t)}createColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createColumn(e,t),this.columnMeta.createColumn(e,t)}removeColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeColumn(e,t),this.columnMeta.removeColumn(e,t)}clearCellsCache(){this.cellMeta.clearCache()}clearCache(){this.cellMeta.clearCache(),this.columnMeta.clearCache()}}t.default=u,(0,h.mixin)(u,l.default)},257:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=n(r(85707)),i=r(98758),o=r(30594);class a{constructor(e){(0,s.default)(this,"valueFactory",void 0),(0,s.default)(this,"data",[]),(0,s.default)(this,"index",[]),(0,s.default)(this,"holes",new Set),this.valueFactory=e}obtain(e){(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=this._getStorageIndexByKey(e);let r;if(t>=0)r=this.data[t],void 0===r&&(r=this.valueFactory(e),this.data[t]=r);else if(r=this.valueFactory(e),this.holes.size>0){const t=this.holes.values().next().value;this.holes.delete(t),this.data[t]=r,this.index[e]=t}else this.data.push(r),this.index[e]=this.data.length-1;return r}insert(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)||(0,o.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const r=[],n=this.data.length;for(let e=0;e<t;e++)r.push(n+e),this.data.push(void 0);const s=(0,o.isNullish)(e)?this.index.length:e;this.index=[...this.index.slice(0,s),...r,...this.index.slice(s)]}remove(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)||(0,o.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const r=this.index.splice((0,o.isNullish)(e)?this.index.length-t:e,t);for(let e=0;e<r.length;e++){const t=r[e];"number"==typeof t&&this.holes.add(t)}}size(){return this.data.length-this.holes.size}values(){return(0,i.arrayFilter)(this.data,((e,t)=>!this.holes.has(t)))[Symbol.iterator]()}entries(){const e=[];for(let t=0;t<this.data.length;t++){const r=this._getKeyByStorageIndex(t);-1!==r&&e.push([r,this.data[t]])}let t=0;return{next:()=>{if(t<e.length){const r=e[t];return t+=1,{value:r,done:!1}}return{done:!0}}}}clear(){this.data=[],this.index=[],this.holes.clear()}_getStorageIndexByKey(e){return this.index.length>e?this.index[e]:-1}_getKeyByStorageIndex(e){return this.index.indexOf(e)}[Symbol.iterator](){return this.entries()}}t.default=a},54934:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(15724);var s=n(r(85707)),i=r(58460),o=r(30594),a=n(r(257)),l=r(67508);t.default=class{constructor(e){(0,s.default)(this,"columnMeta",void 0),(0,s.default)(this,"metas",new a.default((()=>this._createRow()))),this.columnMeta=e}updateMeta(e,t,r){const n=this.getMeta(e,t);(0,i.extend)(n,r),(0,o.extendByMetaType)(n,r)}createRow(e,t){this.metas.insert(e,t)}createColumn(e,t){for(let r=0;r<this.metas.size();r++)this.metas.obtain(r).insert(e,t)}removeRow(e,t){this.metas.remove(e,t)}removeColumn(e,t){for(let r=0;r<this.metas.size();r++)this.metas.obtain(r).remove(e,t)}getMeta(e,t,r){const n=this.metas.obtain(e).obtain(t);return void 0===r?n:n[r]}setMeta(e,t,r,n){var s;const i=this.metas.obtain(e).obtain(t);null===(s=i._automaticallyAssignedMetaProps)||void 0===s||s.delete(r),i[r]=n}removeMeta(e,t,r){delete this.metas.obtain(e).obtain(t)[r]}getMetas(){const e=[],t=Array.from(this.metas.values());for(let r=0;r<t.length;r++)(0,l.isDefined)(t[r])&&e.push(...t[r].values());return e}getMetasAtRow(e){(0,o.assert)((()=>(0,o.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=new Map(this.metas);return t.has(e)?Array.from(t.get(e).values()):[]}clearCache(){this.metas.clear()}_createRow(){return new a.default((e=>this._createMeta(e)))}_createMeta(e){return new(this.columnMeta.getMetaConstructor(e))}}},4936:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(58460),o=r(30594),a=n(r(257));const l=["data","width"];t.default=class{constructor(e){(0,s.default)(this,"globalMeta",void 0),(0,s.default)(this,"metas",new a.default((()=>this._createMeta()))),this.globalMeta=e,this.metas=new a.default((()=>this._createMeta()))}updateMeta(e,t){const r=this.getMeta(e);(0,i.extend)(r,t),(0,o.extendByMetaType)(r,t)}createColumn(e,t){this.metas.insert(e,t)}removeColumn(e,t){this.metas.remove(e,t)}getMeta(e){return this.metas.obtain(e)}getMetaConstructor(e){return this.metas.obtain(e).constructor}clearCache(){this.metas.clear()}_createMeta(){return(0,o.columnFactory)(this.globalMeta.getMetaConstructor(),l).prototype}}},7649:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(58460),o=r(30594),a=n(r(51909));t.default=class{constructor(e){(0,s.default)(this,"metaCtor",class{}),(0,s.default)(this,"meta",void 0),this.meta=this.metaCtor.prototype,(0,i.extend)(this.meta,(0,a.default)()),this.meta.instance=e}getMetaConstructor(){return this.metaCtor}getMeta(){return this.meta}updateMeta(e){var t;(0,i.extend)(this.meta,e),(0,o.extendByMetaType)(this.meta,{...e,type:null!==(t=e.type)&&void 0!==t?t:this.meta.type},e)}}},69502:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(58460),o=r(30594);t.default=class{constructor(e){(0,s.default)(this,"meta",void 0);const t=e.getMetaConstructor();this.meta=new t}getMeta(){return this.meta}updateMeta(e){(0,i.extend)(this.meta,e),(0,o.extendByMetaType)(this.meta,e,e)}}},51909:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(67508),s=r(58460);t.default=()=>({_automaticallyAssignedMetaProps:void 0,activeHeaderClassName:"ht__active_highlight",allowEmpty:!0,allowHtml:!1,allowInsertColumn:!0,allowInsertRow:!0,allowInvalid:!0,allowRemoveColumn:!0,allowRemoveRow:!0,ariaTags:!0,autoColumnSize:void 0,autoRowSize:void 0,autoWrapCol:!1,autoWrapRow:!1,bindRowsWithHeaders:void 0,cell:[],cells:void 0,checkedTemplate:void 0,className:void 0,colHeaders:null,collapsibleColumns:void 0,columnHeaderHeight:void 0,columns:void 0,columnSorting:void 0,columnSummary:void 0,colWidths:void 0,commentedCellClassName:"htCommentCell",comments:!1,contextMenu:void 0,copyable:!0,copyPaste:!0,correctFormat:!1,currentColClassName:void 0,currentHeaderClassName:"ht__highlight",currentRowClassName:void 0,customBorders:!1,data:void 0,dataDotNotation:!0,dataSchema:void 0,dateFormat:"DD/MM/YYYY",timeFormat:"h:mm:ss a",datePickerConfig:void 0,defaultDate:void 0,disableVisualSelection:!1,dragToScroll:!0,dropdownMenu:void 0,editor:void 0,enterBeginsEditing:!0,enterMoves:{col:0,row:1},fillHandle:{autoInsertRow:!1},filter:!0,filteringCaseSensitive:!1,filters:void 0,fixedColumnsLeft:0,fixedColumnsStart:0,fixedRowsBottom:0,fixedRowsTop:0,formulas:void 0,fragmentSelection:!1,headerClassName:void 0,height:void 0,hiddenColumns:void 0,hiddenRows:void 0,invalidCellClassName:"htInvalid",imeFastEdit:!1,isEmptyCol(e){let t,r,s;for(t=0,r=this.countRows();t<r;t++)if(s=this.getDataAtCell(t,e),!1===(0,n.isEmpty)(s))return!1;return!0},isEmptyRow(e){let t,r,i,o;for(t=0,r=this.countCols();t<r;t++)if(i=this.getDataAtCell(e,t),!1===(0,n.isEmpty)(i))return"object"==typeof i&&(o=this.getCellMeta(e,t),(0,s.isObjectEqual)(this.getSchema()[o.prop],i));return!0},label:void 0,language:"en-US",layoutDirection:"inherit",licenseKey:void 0,locale:"en-US",manualColumnFreeze:void 0,manualColumnMove:void 0,manualColumnResize:void 0,manualRowMove:void 0,manualRowResize:void 0,maxCols:1/0,maxRows:1/0,mergeCells:!1,minCols:0,minRows:0,minSpareCols:0,minSpareRows:0,multiColumnSorting:void 0,navigableHeaders:!1,tabNavigation:!0,nestedHeaders:void 0,nestedRows:void 0,noWordWrapClassName:"htNoWrap",numericFormat:void 0,observeDOMVisibility:!0,outsideClickDeselects:!0,persistentState:void 0,placeholder:void 0,placeholderCellClassName:"htPlaceholder",preventOverflow:!1,preventWheel:!1,readOnly:!1,readOnlyCellClassName:"htDimmed",renderAllRows:!1,renderAllColumns:!1,renderer:void 0,rowHeaders:void 0,rowHeaderWidth:void 0,rowHeights:void 0,search:!1,selectionMode:"multiple",selectOptions:void 0,skipColumnOnPaste:!1,skipRowOnPaste:!1,sortByRelevance:!0,source:void 0,startCols:5,startRows:5,stretchH:"none",strict:void 0,tableClassName:void 0,tabMoves:{row:0,col:1},title:void 0,trimDropdown:!0,trimRows:void 0,trimWhitespace:!0,type:"text",uncheckedTemplate:void 0,undo:void 0,validator:void 0,viewportColumnRenderingOffset:"auto",viewportRowRenderingOffset:"auto",visibleRows:10,width:void 0,wordWrap:!0})},37313:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=n(r(85707)),i=n(r(37056)),o=r(58460),a=r(25735);t.DynamicCellMetaMod=class{constructor(e){(0,s.default)(this,"metaManager",void 0),(0,s.default)(this,"metaSyncMemo",new Map),this.metaManager=e,e.addLocalHook("afterGetCellMeta",(e=>this.extendCellMeta(e))),i.default.getSingleton().add("beforeRender",(e=>{e&&this.metaSyncMemo.clear()}),this.metaManager.hot)}extendCellMeta(e){var t;const{row:r,col:n}=e;if(null!==(t=this.metaSyncMemo.get(r))&&void 0!==t&&t.has(n))return;const{visualRow:s,visualCol:i}=e,l=this.metaManager.hot,h=l.colToProp(i);e.prop=h,l.runHooks("beforeGetCellMeta",s,i,e);const u=(0,o.hasOwnProperty)(e,"type")?e.type:null;let c=(0,a.isFunction)(e.cells)?e.cells(r,n,h):null;var d;u&&(c?c.type=null!==(d=c.type)&&void 0!==d?d:u:c={type:u});c&&this.metaManager.updateCellMeta(r,n,c),l.runHooks("afterGetCellMeta",s,i,e),this.metaSyncMemo.has(r)||this.metaSyncMemo.set(r,new Set),this.metaSyncMemo.get(r).add(n)}}},36645:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var s=n(r(85707));function i(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function o(e,t){return e.get(function(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}(e,t))}var a=new WeakMap;t.ExtendMetaPropertiesMod=class{constructor(e){(0,s.default)(this,"metaManager",void 0),(0,s.default)(this,"usageTracker",new Set),(0,s.default)(this,"propDescriptors",new Map([["ariaTags",{initOnly:!0}],["fixedColumnsLeft",{target:"fixedColumnsStart",onChange(e){if(this.metaManager.hot.isRtl()&&"fixedColumnsLeft"===e)throw new Error("The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.");if(this.usageTracker.has("fixedColumnsLeft")&&this.usageTracker.has("fixedColumnsStart"))throw new Error("The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. Please use only the option `fixedColumnsStart`.")}}],["layoutDirection",{initOnly:!0}],["renderAllColumns",{initOnly:!0}],["renderAllRows",{initOnly:!0}]])),i(this,a,((e,t,r)=>{if(!r)throw new Error(`The \`${e}\` option can not be updated after the Handsontable is initialized.`)})),this.metaManager=e,this.extendMetaProps()}extendMetaProps(){this.propDescriptors.forEach(((e,t)=>{const{initOnly:r,target:n,onChange:s}=e,i="string"==typeof n,l=i?n:t,h=`_${l}`;this.metaManager.globalMeta.meta[h]=this.metaManager.globalMeta.meta[l],s?(this.installPropWatcher(t,h,s),i&&this.installPropWatcher(n,h,s)):r&&(this.installPropWatcher(t,h,o(a,this)),this.metaManager.globalMeta.meta._initOnlySettings||(this.metaManager.globalMeta.meta._initOnlySettings=[]),this.metaManager.globalMeta.meta._initOnlySettings.push(t))}))}installPropWatcher(e,t,r){const n=this;Object.defineProperty(this.metaManager.globalMeta.meta,e,{get(){return this[t]},set(s){const i=!n.usageTracker.has(e);n.usageTracker.add(e),r.call(n,e,s,i),this[t]=s},enumerable:!0,configurable:!0})}}},30594:(e,t,r)=>{"use strict";t.__esModule=!0,t.assert=function(e,t){if(!e())throw new Error(`Assertion failed: ${t}`)},t.columnFactory=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];function r(){}(0,n.inherit)(r,e);for(let e=0;e<t.length;e++)r.prototype[t[e]]=void 0;return r},t.extendByMetaType=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;const i="string"==typeof t.type?(0,s.getCellType)(t.type):t.type;e._automaticallyAssignedMetaProps&&(0,n.objectEach)(t,((t,r)=>{e._automaticallyAssignedMetaProps.delete(r)}));if(!(0,n.isObject)(i))return;r!==e||e._automaticallyAssignedMetaProps||(e._automaticallyAssignedMetaProps=new Set);const o={};(0,n.objectEach)(i,((t,s)=>{var i;(function(e,t){var r;if("CELL_TYPE"===e)return!1;return(null===(r=t._automaticallyAssignedMetaProps)||void 0===r?void 0:r.has(e))||!(0,n.hasOwnProperty)(t,e)})(s,r)&&(o[s]=t,null===(i=e._automaticallyAssignedMetaProps)||void 0===i||i.add(s))})),(0,n.extend)(e,o)},t.isNullish=function(e){return null==e},t.isUnsignedNumber=function(e){return Number.isInteger(e)&&e>=0},r(67834),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620);var n=r(58460),s=r(36528)},52604:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.replaceData=function(e,t,r,n){const{hotInstance:u,dataMap:c,dataSource:d,internalSource:p,source:g,metaManager:f,firstRun:m}=n,y=(0,s.toUpperCaseFirst)(p),E=u.getSettings();Array.isArray(E.dataSchema)?u.dataType="array":(0,i.isFunction)(E.dataSchema)?u.dataType="function":u.dataType="object";c&&c.destroy();e=u.runHooks(`before${y}`,e,m,g);const w=new o.default(u,e,f);if(t(w),"object"==typeof e&&null!==e)e.push&&e.splice||(e=[e]);else{if(null!==e)throw new Error(`${p} only accepts array of objects or array of arrays (${typeof e} given)`);{const t=w.getSchema();let r;e=[];let n=0,s=0;for(n=0,s=E.startRows;n<s;n++)if("object"!==u.dataType&&"function"!==u.dataType||!E.dataSchema)if("array"===u.dataType)r=(0,a.deepClone)(t[0]),e.push(r);else{r=[];for(let e=0,t=E.startCols;e<t;e++)r.push(null);e.push(r)}else r=(0,a.deepClone)(t),e.push(r)}}Array.isArray(e[0])&&(u.dataType="array");E.data=e,w.dataSource=e,d.data=e,d.dataType=u.dataType,d.colToProp=w.colToProp.bind(w),d.propToCol=w.propToCol.bind(w),d.countCachedColumns=w.countCachedColumns.bind(w),r(w),u.runHooks(`after${y}`,e,m,g),m||(u.runHooks("afterChange",null,p),u.render());u.getSettings().ariaTags&&(0,l.setAttribute)(u.rootElement,[(0,h.A11Y_ROWCOUNT)(-1),(0,h.A11Y_COLCOUNT)(u.countCols()+(u.view?u.countRowHeaders():0))])},r(67834),r(15724);var s=r(69114),i=r(25735),o=n(r(35078)),a=r(58460),l=r(49536),h=r(81595)},6637:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(35592),o=r(24456),a=r(39761),l=n(r(63286));function h(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function u(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}var c=new WeakSet;class d{constructor(e,t,r){h(this,c),(0,s.default)(this,"hot",void 0),(0,s.default)(this,"tableMeta",void 0),(0,s.default)(this,"selection",void 0),(0,s.default)(this,"eventManager",void 0),(0,s.default)(this,"destroyed",!1),(0,s.default)(this,"activeEditor",void 0),(0,s.default)(this,"cellProperties",void 0),this.hot=e,this.tableMeta=t,this.selection=r,this.eventManager=new l.default(e),this.hot.addHook("afterDocumentKeyDown",(e=>u(c,this,p).call(this,e))),this.eventManager.addEventListener(this.hot.rootDocument.documentElement,"compositionstart",(e=>{!this.destroyed&&this.hot.isListening()&&this.openEditor("",e)})),this.hot.view._wt.update("onCellDblClick",((e,t,r)=>u(c,this,g).call(this,e,t,r)))}getActiveEditor(){return this.activeEditor}prepareEditor(){var e;if(this.activeEditor&&this.activeEditor.isWaiting())return void this.closeEditor(!1,!1,(e=>{e&&this.prepareEditor()}));const t=null===(e=this.hot.getSelectedRangeLast())||void 0===e?void 0:e.highlight;if(!t||t.isHeader())return;const{row:r,col:n}=t,s=this.hot.runHooks("modifyGetCellCoords",r,n);let i=r,o=n;if(Array.isArray(s)&&([i,o]=s),this.cellProperties=this.hot.getCellMeta(i,o),!this.isCellEditable())return void this.clearActiveEditor();const l=this.hot.getCell(r,n,!0);if(l){const e=this.hot.getCellEditor(this.cellProperties),t=this.hot.colToProp(o),s=this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(i),o);this.activeEditor=(0,a.getEditorInstance)(e,this.hot),this.activeEditor.prepare(r,n,t,l,s,this.cellProperties)}}isEditorOpened(){return this.activeEditor&&this.activeEditor.isOpened()}openEditor(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!this.isCellEditable())return void this.clearActiveEditor();const n=this.hot.getSelectedRangeLast();let s=this.hot.runHooks("beforeBeginEditing",n.highlight.row,n.highlight.col,e,t,r);t instanceof MouseEvent&&"boolean"!=typeof s&&(s=0===this.hot.selection.getLayerLevel()&&n.isSingle()),!1!==s?(this.activeEditor||(this.hot.scrollToFocusedCell(),this.prepareEditor()),this.activeEditor&&(r&&this.activeEditor.enableFullEditMode(),this.activeEditor.beginEditing(e,t))):this.clearActiveEditor()}closeEditor(e,t,r){this.activeEditor?this.activeEditor.finishEditing(e,t,r):r&&r(!1)}closeEditorAndSaveChanges(e){this.closeEditor(!1,e)}closeEditorAndRestoreOriginalValue(e){this.closeEditor(!0,e)}clearActiveEditor(){this.activeEditor=void 0}isCellEditable(){const e=this.hot.getSelectedRangeLast();if(!e)return!1;const t=this.hot.getCellEditor(this.cellProperties),{row:r,col:n}=e.highlight,{rowIndexMapper:s,columnIndexMapper:i}=this.hot,o=s.isHidden(this.hot.toPhysicalRow(r))||i.isHidden(this.hot.toPhysicalColumn(n));return!(this.cellProperties.readOnly||!t||o)}moveSelectionAfterEnter(e){const t={..."function"==typeof this.tableMeta.enterMoves?this.tableMeta.enterMoves(e):this.tableMeta.enterMoves};e.shiftKey&&(t.row=-t.row,t.col=-t.col),this.hot.selection.isMultiple()?this.selection.transformFocus(t.row,t.col):this.selection.transformStart(t.row,t.col,!0)}destroy(){this.destroyed=!0,this.eventManager.destroy()}}function p(e){const t=this.hot.getSelectedRangeLast();if(!this.hot.isListening()||!t||t.highlight.isHeader()||(0,o.isImmediatePropagationStopped)(e))return;const{keyCode:r}=e,n=(e.ctrlKey||e.metaKey)&&!e.altKey;(!this.activeEditor||this.activeEditor&&!this.activeEditor.isWaiting())&&((0,i.isFunctionKey)(r)||(0,i.isCtrlMetaKey)(r)||n||this.isEditorOpened()||this.openEditor("",e))}function g(e,t){t.isCell()&&this.openEditor(null,e,!0)}const f=new WeakMap;d.getInstance=function(e,t,r){let n=f.get(e);return n||(n=new d(e,t,r),f.set(e,n)),n};t.default=d},57847:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834),r(15724);var s=n(r(85707)),i=r(76545),o=r(98758),a=r(49536),l=r(67508),h=r(69114),u=r(35592),c=r(1479),d=r(6135),p=r(81595);function g(e,t,r){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,r)}function f(e,t){return e.get(function(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}(e,t))}const m=t.EDITOR_TYPE="autocomplete";var y=new WeakMap;class E extends i.HandsontableEditor{constructor(){super(...arguments),(0,s.default)(this,"query",null),(0,s.default)(this,"strippedChoices",[]),(0,s.default)(this,"rawChoices",[]),g(this,y,this.hot.guid.slice(0,9)),(0,s.default)(this,"sortByRelevance",(function(e,t,r){const n=[],s=[],i=e.length;let o,a,u,c,d=t.length;if(0===i){for(u=0;u<d;u++)s.push(u);return s}for(u=0;u<d;u++){if(a=(0,h.stripTags)((0,l.stringify)(t[u])),r)c=a.indexOf(e);else{const t=this.cellProperties.locale;c=a.toLocaleLowerCase(t).indexOf(e.toLocaleLowerCase(t))}-1!==c&&(o=a.length-c-i,n.push({baseIndex:u,index:c,charsLeft:o,value:a}))}for(n.sort(((e,t)=>{if(-1===t.index)return-1;if(-1===e.index)return 1;if(e.index<t.index)return-1;if(t.index<e.index)return 1;if(e.index===t.index){if(e.charsLeft<t.charsLeft)return-1;if(e.charsLeft>t.charsLeft)return 1}return 0})),u=0,d=n.length;u<d;u++)s.push(n[u].baseIndex);return s}))}static get EDITOR_TYPE(){return m}getValue(){const e=this.rawChoices.find((e=>this.stripValueIfNeeded(e)===this.TEXTAREA.value));return(0,l.isDefined)(e)?e:this.TEXTAREA.value}createElements(){super.createElements(),(0,a.addClass)(this.htContainer,"autocompleteEditor"),(0,a.addClass)(this.htContainer,-1===this.hot.rootWindow.navigator.platform.indexOf("Mac")?"":"htMacScroll"),this.hot.getSettings().ariaTags&&(0,a.setAttribute)(this.TEXTAREA,[(0,p.A11Y_TEXT)(),(0,p.A11Y_COMBOBOX)(),(0,p.A11Y_HASPOPUP)("listbox"),(0,p.A11Y_AUTOCOMPLETE)()])}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i),this.hot.getSettings().ariaTags&&(0,a.setAttribute)(this.TEXTAREA,[(0,p.A11Y_EXPANDED)("false"),(0,p.A11Y_CONTROLS)(`${f(y,this)}-listbox-${e}-${t}`)])}open(){super.open();const e=void 0===this.cellProperties.trimDropdown||this.cellProperties.trimDropdown,t=this.hot.getSettings().ariaTags,r=Array.isArray(this.cellProperties.source)?this.cellProperties.source:null,n=null==r?void 0:r.length,{row:s,col:i}=this;this.showEditableElement(),this.focus();let o=(0,a.getScrollbarWidth)();0===o&&(0,c.isMacOS)()&&(o+=15),this.addHook("beforeKeyDown",(e=>this.onBeforeKeyDown(e))),this.htEditor.updateSettings({colWidths:e?[(0,a.outerWidth)(this.TEXTAREA)-2]:void 0,width:e?(0,a.outerWidth)(this.TEXTAREA)+o:void 0,autoColumnSize:!0,renderer:(e,s,i,o,h,u,c)=>{(0,d.textRenderer)(e,s,i,o,h,u,c);const{filteringCaseSensitive:g,allowHtml:f,locale:m}=this.cellProperties,y=this.query;let E,w,C=(0,l.stringify)(u);C&&!f&&(E=!0===g?C.indexOf(y):C.toLocaleLowerCase(m).indexOf(y.toLocaleLowerCase(m)),-1!==E&&(w=C.substr(E,y.length),C=C.replace(w,`<strong>${w}</strong>`))),t&&(0,a.setAttribute)(s,[(0,p.A11Y_OPTION)(),...r?[(0,p.A11Y_SETSIZE)(n)]:[],...r?[(0,p.A11Y_POSINSET)(r.indexOf(u)+1)]:[],["id",`${this.htEditor.rootElement.id}_${i}-${o}`]]),s.innerHTML=C},afterSelectionEnd:(e,r)=>{if(t){const t=this.htEditor.getCell(e,r,!0);(0,a.setAttribute)(t,[(0,p.A11Y_SELECTED)()]),(0,a.setAttribute)(this.TEXTAREA,...(0,p.A11Y_ACTIVEDESCENDANT)(t.id))}}}),t&&((0,a.setAttribute)(this.htEditor.view._wt.wtOverlays.wtTable.TABLE,...(0,p.A11Y_PRESENTATION)()),(0,a.setAttribute)(this.htEditor.rootElement,[(0,p.A11Y_LISTBOX)(),(0,p.A11Y_LIVE)("polite"),(0,p.A11Y_RELEVANT)("text"),["id",`${f(y,this)}-listbox-${s}-${i}`]]),(0,a.setAttribute)(this.TEXTAREA,...(0,p.A11Y_EXPANDED)("true"))),this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}))}close(){this.removeHooksByKey("beforeKeyDown"),super.close(),this.hot.getSettings().ariaTags&&(0,a.setAttribute)(this.TEXTAREA,[(0,p.A11Y_EXPANDED)("false")])}discardEditor(e){super.discardEditor(e),this.hot.view.render()}queryChoices(e){const t=this.cellProperties.source;this.query=e,"function"==typeof t?t.call(this.cellProperties,e,(e=>{this.rawChoices=e,this.updateChoicesList(this.stripValuesIfNeeded(e))})):Array.isArray(t)?(this.rawChoices=t,this.updateChoicesList(this.stripValuesIfNeeded(t))):this.updateChoicesList([])}updateChoicesList(e){const t=(0,a.getCaretPosition)(this.TEXTAREA),r=(0,a.getSelectionEndPosition)(this.TEXTAREA),n=this.cellProperties.sortByRelevance,s=this.cellProperties.filter;let i=null,l=null,h=e;n&&(i=this.sortByRelevance(this.stripValueIfNeeded(this.getValue()),h,this.cellProperties.filteringCaseSensitive));const u=Array.isArray(i)?i.length:0;if(!1===s)u&&(l=i[0]);else{const e=[];for(let t=0,r=h.length;t<r&&!(n&&u<=t);t++)u?e.push(h[i[t]]):e.push(h[t]);l=0,h=e}this.strippedChoices=h,0===h.length?this.htEditor.rootElement.style.display="none":this.htEditor.rootElement.style.display="",this.htEditor.loadData((0,o.pivot)([h])),h.length>0&&(this.updateDropdownDimensions(),this.flipDropdownIfNeeded(),!0===this.cellProperties.strict&&this.highlightBestMatchingChoice(l)),this.hot.listen(),(0,a.setCaretPosition)(this.TEXTAREA,t,t===r?void 0:r)}flipDropdownIfNeeded(){const e=(0,a.getTrimmingContainer)(this.hot.view._wt.wtTable.TABLE),t=e===this.hot.rootWindow,r=this.cellProperties.preventOverflow;if(t||!t&&(r||"horizontal"===r))return!1;const n=(0,a.offset)(this.TEXTAREA),s=(0,a.outerHeight)(this.TEXTAREA),i=this.getDropdownHeight(),o=e.scrollTop,l=(0,a.outerHeight)(this.hot.view._wt.wtTable.THEAD),h=(0,a.offset)(e),u=n.top-h.top-l+o,c=e.scrollHeight-u-l-s,d=i>c&&u>c;return d?this.flipDropdown(i):this.unflipDropdown(),this.limitDropdownIfNeeded(d?u:c,i),d}limitDropdownIfNeeded(e,t){if(t>e){let r=0,n=0,s=0,i=null;do{s=this.htEditor.getRowHeight(n)||this.htEditor.view._wt.getSetting("defaultRowHeight"),r+=s,n+=1}while(r<e);i=r-s,this.htEditor.flipped&&(this.htEditor.rootElement.style.top=parseInt(this.htEditor.rootElement.style.top,10)+t-i+"px"),this.setDropdownHeight(r-s)}}flipDropdown(e){const t=this.htEditor.rootElement.style;t.position="absolute",t.top=-e+"px",this.htEditor.flipped=!0}unflipDropdown(){const e=this.htEditor.rootElement.style;e.position="absolute",e.top="",this.htEditor.flipped=void 0}updateDropdownDimensions(){const e=this.htEditor.getColWidth(0)+(0,a.getScrollbarWidth)(this.hot.rootDocument)+2,t=this.cellProperties.trimDropdown;this.htEditor.updateSettings({height:this.getDropdownHeight(),width:t?void 0:e}),this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer()}setDropdownHeight(e){this.htEditor.updateSettings({height:e})}highlightBestMatchingChoice(e){"number"==typeof e?this.htEditor.selectCell(e,0,void 0,void 0,void 0,!1):this.htEditor.deselectCell()}getDropdownHeight(){const e=this.htEditor.getRowHeight(0)||23,t=this.cellProperties.visibleRows;return this.strippedChoices.length>=t?t*e:this.strippedChoices.length*e+8}stripValueIfNeeded(e){return this.stripValuesIfNeeded([e])[0]}stripValuesIfNeeded(e){const{allowHtml:t}=this.cellProperties,r=(0,o.arrayMap)(e,(e=>(0,l.stringify)(e)));return(0,o.arrayMap)(r,(e=>t?e:(0,h.stripTags)(e)))}allowKeyEventPropagation(e){const t=this.htEditor.getSelectedRangeLast(),r=t?t.from.row:-1;let n=!1;return e===u.KEY_CODES.ARROW_DOWN&&r>0&&r<this.htEditor.countRows()-1&&(n=!0),e===u.KEY_CODES.ARROW_UP&&r>-1&&(n=!0),n}onBeforeKeyDown(e){if((0,u.isPrintableChar)(e.keyCode)||e.keyCode===u.KEY_CODES.BACKSPACE||e.keyCode===u.KEY_CODES.DELETE||e.keyCode===u.KEY_CODES.INSERT){let t=10;if(e.keyCode===u.KEY_CODES.C&&(e.ctrlKey||e.metaKey))return;this.isOpened()||(t+=10),this.htEditor&&this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}),t)}}}t.AutocompleteEditor=E},29328:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(57847);t.EDITOR_TYPE=n.EDITOR_TYPE,t.AutocompleteEditor=n.AutocompleteEditor},86861:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=r(67508),o=r(58460),a=n(r(15129)),l=r(49536);const h=t.EDITOR_TYPE="base",u=t.EDITOR_STATE=Object.freeze({VIRGIN:"STATE_VIRGIN",EDITING:"STATE_EDITING",WAITING:"STATE_WAITING",FINISHED:"STATE_FINISHED"});class c{static get EDITOR_TYPE(){return h}constructor(e){(0,s.default)(this,"hot",void 0),(0,s.default)(this,"state",u.VIRGIN),(0,s.default)(this,"_opened",!1),(0,s.default)(this,"_fullEditMode",!1),(0,s.default)(this,"_closeCallback",null),(0,s.default)(this,"TD",null),(0,s.default)(this,"row",null),(0,s.default)(this,"col",null),(0,s.default)(this,"prop",null),(0,s.default)(this,"originalValue",null),(0,s.default)(this,"cellProperties",null),this.hot=e,this.init()}_fireCallbacks(e){this._closeCallback&&(this._closeCallback(e),this._closeCallback=null)}init(){}getValue(){throw Error("Editor getValue() method unimplemented")}setValue(){throw Error("Editor setValue() method unimplemented")}open(){throw Error("Editor open() method unimplemented")}close(){throw Error("Editor close() method unimplemented")}prepare(e,t,r,n,s,i){this.TD=n,this.row=e,this.col=t,this.prop=r,this.originalValue=s,this.cellProperties=i,this.state=this.isOpened()?this.state:u.VIRGIN}extend(){return class extends this.constructor{}}saveValue(e,t){let r,n,s,i;if(t){const e=this.hot.getSelectedLast();r=Math.max(Math.min(e[0],e[2]),0),n=Math.max(Math.min(e[1],e[3]),0),s=Math.max(e[0],e[2]),i=Math.max(e[1],e[3])}else[r,n,s,i]=[this.row,this.col,null,null];const o=this.hot.runHooks("modifyGetCellCoords",r,n);Array.isArray(o)&&([r,n]=o),this.hot.populateFromArray(r,n,e,s,i,"edit")}beginEditing(e,t){if(this.state!==u.VIRGIN)return;const r=this.hot,n=r.rowIndexMapper.getRenderableFromVisualIndex(this.row),s=r.columnIndexMapper.getRenderableFromVisualIndex(this.col);if(r.view.scrollViewport(r._createCellCoords(n,s)),this.state=u.EDITING,this.isInFullEditMode()){const t="string"==typeof e?e:(0,i.stringify)(this.originalValue);this.setValue(t)}this.open(t),this._opened=!0,this.focus(),r.view.render(),r.runHooks("afterBeginEditing",this.row,this.col)}finishEditing(e,t,r){let n;if(r){const e=this._closeCallback;this._closeCallback=t=>{e&&e(t),r(t),this.hot.view.render()}}if(!this.isWaiting())if(this.state!==u.VIRGIN){if(this.state===u.EDITING){if(e)return this.cancelChanges(),void this.hot.view.render();const r=this.getValue();n=this.cellProperties.trimWhitespace?[["string"==typeof r?String.prototype.trim.call(r||""):r]]:[[r]],this.state=u.WAITING,this.saveValue(n,t),this.hot.getCellValidator(this.cellProperties)?this.hot.addHookOnce("postAfterValidate",(e=>{this.state=u.FINISHED,this.discardEditor(e)})):(this.state=u.FINISHED,this.discardEditor(!0))}}else this.hot._registerTimeout((()=>{this._fireCallbacks(!0)}))}cancelChanges(){this.state=u.FINISHED,this.discardEditor()}discardEditor(e){if(this.state===u.FINISHED)if(!1===e&&!0!==this.cellProperties.allowInvalid)this.hot.selectCell(this.row,this.col),this.focus(),this.state=u.EDITING,this._fireCallbacks(!1);else{this.close(),this._opened=!1,this._fullEditMode=!1,this.state=u.VIRGIN,this._fireCallbacks(!0);this.hot.getShortcutManager().setActiveContextName("grid")}}enableFullEditMode(){this._fullEditMode=!0}isInFullEditMode(){return this._fullEditMode}isOpened(){return this._opened}isWaiting(){return this.state===u.WAITING}getEditedCellRect(){var e;const t=this.getEditedCell();if(!t)return;const{wtOverlays:r,wtViewport:n}=this.hot.view._wt,s=this.hot.rootWindow,i=(0,l.offset)(t),o=(0,l.outerWidth)(t),a=(0,l.offset)(this.hot.rootElement),h=(0,l.outerWidth)(this.hot.rootElement),u=r.topOverlay.holder,c=r.inlineStartOverlay.holder,d=u!==s?u.scrollTop:0,p=c!==s?c.scrollLeft:0,g=s.innerWidth-a.left-h,{wtTable:f}=null!==(e=r.getParentOverlay(t))&&void 0!==e?e:this.hot.view._wt,m=f.name,y=["master","inline_start"].includes(m)?d:0,E=["master","top","bottom"].includes(m)?p:0,w=i.top===a.top?0:1;let C=i.top-a.top-w-y,v=0;v=this.hot.isRtl()?s.innerWidth-i.left-o-g-1+E:i.left-a.left-1-E,["top","top_inline_start_corner"].includes(m)&&(C+=r.topOverlay.getOverlayOffset()),["inline_start","top_inline_start_corner"].includes(m)&&(v+=Math.abs(r.inlineStartOverlay.getOverlayOffset()));const R=this.hot.hasColHeaders(),S=this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row),T=this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col),N=this.hot.rowIndexMapper.getRenderableIndexesLength()-this.hot.view._wt.getSetting("fixedRowsBottom");(R&&S<=0||S===N)&&(C+=1),T<=0&&(v+=1);const M=n.rowsRenderCalculator.startPosition,_=n.columnsRenderCalculator.startPosition,b=Math.abs(r.inlineStartOverlay.getScrollPosition()),A=r.topOverlay.getScrollPosition(),O=(0,l.getScrollbarWidth)(this.hot.rootDocument);let I=t.offsetTop;if(["inline_start","master"].includes(m)&&(I+=M-A),["bottom","bottom_inline_start_corner"].includes(m)){const{wtViewport:e,wtTable:t}=r.bottomOverlay.clone;I+=e.getWorkspaceHeight()-t.getHeight()-O}let x=t.offsetLeft;this.hot.isRtl()?(x=x>=0?f.getWidth()-t.offsetLeft:Math.abs(x),x+=_-b-o):["top","master","bottom"].includes(m)&&(x+=_-b);const P=(0,l.getComputedStyle)(this.TD,this.hot.rootWindow),L=this.hot.isRtl()?"borderRightWidth":"borderLeftWidth",D=parseInt(P[L],10)>0?0:1,k=parseInt(P.borderTopWidth,10)>0?0:1,H=(0,l.outerWidth)(t)+D,F=(0,l.outerHeight)(t)+k,U=(0,l.hasVerticalScrollbar)(u)?O:0,V=(0,l.hasHorizontalScrollbar)(c)?O:0,B=this.hot.view.maximumVisibleElementWidth(x)-U+D;return{top:C,start:v,height:F,maxHeight:Math.max(this.hot.view.maximumVisibleElementHeight(I)-V+k,23),width:H,maxWidth:B}}getEditedCellsLayerClass(){switch(this.checkEditorSection()){case"inline-start":return"ht_clone_left ht_clone_inline_start";case"bottom":return"ht_clone_bottom";case"bottom-inline-start-corner":return"ht_clone_bottom_left_corner ht_clone_bottom_inline_start_corner";case"top":return"ht_clone_top";case"top-inline-start-corner":return"ht_clone_top_left_corner ht_clone_top_inline_start_corner";default:return"ht_clone_master"}}getEditedCell(){return this.hot.getCell(this.row,this.col,!0)}checkEditorSection(){const e=this.hot.countRows();let t="";return this.row<this.hot.getSettings().fixedRowsTop?t=this.col<this.hot.getSettings().fixedColumnsStart?"top-inline-start-corner":"top":this.hot.getSettings().fixedRowsBottom&&this.row>=e-this.hot.getSettings().fixedRowsBottom?t=this.col<this.hot.getSettings().fixedColumnsStart?"bottom-inline-start-corner":"bottom":this.col<this.hot.getSettings().fixedColumnsStart&&(t="inline-start"),t}}t.BaseEditor=c,(0,o.mixin)(c,a.default)},47009:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(86861);t.EDITOR_STATE=n.EDITOR_STATE,t.EDITOR_TYPE=n.EDITOR_TYPE,t.BaseEditor=n.BaseEditor},9357:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(47009),s=r(49536);const i=t.EDITOR_TYPE="checkbox";class o extends n.BaseEditor{static get EDITOR_TYPE(){return i}beginEditing(e,t){if(t&&"mouseup"===t.type&&"TD"===t.target.nodeName){const e=this.TD.querySelector('input[type="checkbox"]');(0,s.hasClass)(e,"htBadValue")||e.click()}}finishEditing(){}init(){}open(){}close(){}getValue(){}setValue(){}focus(){}}t.CheckboxEditor=o},78457:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(9357);t.EDITOR_TYPE=n.EDITOR_TYPE,t.CheckboxEditor=n.CheckboxEditor},73911:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,r(67834);var s=n(r(85707)),i=n(r(1314)),o=n(r(44499)),a=r(47009),l=r(48043),h=r(49536),u=r(58460),c=r(35592);r(57447);const d=t.EDITOR_TYPE="date",p="dateEditor";class g extends l.TextEditor{constructor(){super(...arguments),(0,s.default)(this,"defaultDateFormat","DD/MM/YYYY"),(0,s.default)(this,"parentDestroyed",!1),(0,s.default)(this,"$datePicker",null)}static get EDITOR_TYPE(){return d}init(){if("function"!=typeof i.default)throw new Error("You need to include moment.js to your project.");if("function"!=typeof o.default)throw new Error("You need to include Pikaday to your project.");super.init(),this.hot.addHook("afterDestroy",(()=>{this.parentDestroyed=!0,this.destroyElements()}))}createElements(){super.createElements(),this.datePicker=this.hot.rootDocument.createElement("DIV"),this.datePickerStyle=this.datePicker.style,this.datePickerStyle.position="absolute",this.datePickerStyle.top=0,this.datePickerStyle.left=0,this.datePickerStyle.zIndex=9999,this.datePicker.setAttribute("dir",this.hot.isRtl()?"rtl":"ltr"),(0,h.addClass)(this.datePicker,"htDatepickerHolder"),this.hot.rootDocument.body.appendChild(this.datePicker),this.eventManager.addEventListener(this.datePicker,"mousedown",(e=>{(0,h.hasClass)(e.target,"pika-day")&&this.hideDatepicker(),e.stopPropagation()}))}destroyElements(){const e=this.datePicker.parentNode;this.$datePicker&&this.$datePicker.destroy(),e&&e.removeChild(this.datePicker)}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i)}open(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;const t=this.hot.getShortcutManager().getContext("editor");this.showDatepicker(e),super.open(),t.addShortcuts([{keys:[["ArrowLeft"]],callback:()=>{this.$datePicker.adjustDate("subtract",1)}},{keys:[["ArrowRight"]],callback:()=>{this.$datePicker.adjustDate("add",1)}},{keys:[["ArrowUp"]],callback:()=>{this.$datePicker.adjustDate("subtract",7)}},{keys:[["ArrowDown"]],callback:()=>{this.$datePicker.adjustDate("add",7)}}],{group:p})}close(){var e;this._opened=!1,null!==(e=this.$datePicker)&&void 0!==e&&e.destroy&&this.$datePicker.destroy(),this.hot._registerTimeout((()=>{const e=this.hot._getEditorManager();e.closeEditor(),this.hot.view.render(),e.prepareEditor()}));this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(p),super.close()}finishEditing(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super.finishEditing(e,t)}showDatepicker(e){const t=this.cellProperties.dateFormat||this.defaultDateFormat,r=this.hot.view.isMouseDown(),n=!!e&&(0,c.isFunctionKey)(e.keyCode);let s;this.datePicker.style.display="block",this.$datePicker=new o.default(this.getDatePickerConfig()),"function"==typeof this.$datePicker.useMoment&&this.$datePicker.useMoment(i.default),this.$datePicker._onInputFocus=function(){},this.originalValue?(s=this.originalValue,(0,i.default)(s,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(s,t),!0),this.getValue()!==this.originalValue&&this.setValue(this.originalValue),n||r||this.setValue("")):this.cellProperties.defaultDate?(s=this.cellProperties.defaultDate,(0,i.default)(s,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(s,t),!0),n||r||this.setValue("")):this.$datePicker.gotoToday()}hideDatepicker(){this.datePickerStyle.display="none",this.$datePicker.hide()}getDatePickerConfig(){const e=this.TEXTAREA,t={};this.cellProperties&&this.cellProperties.datePickerConfig&&(0,u.deepExtend)(t,this.cellProperties.datePickerConfig);const r=t.onSelect,n=t.onClose;return t.field=e,t.trigger=e,t.container=this.datePicker,t.bound=!1,t.keyboardInput=!1,t.format=t.format||this.defaultDateFormat,t.reposition=t.reposition||!1,t.isRTL=!1,t.onSelect=e=>{let t=e;isNaN(t.getTime())||(t=(0,i.default)(t).format(this.cellProperties.dateFormat||this.defaultDateFormat)),this.setValue(t),r&&r()},t.onClose=()=>{this.parentDestroyed||this.finishEditing(!1),n&&n()},t}refreshDimensions(e){var t;if(super.refreshDimensions(e),this.state!==a.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.hideDatepicker();const{rowIndexMapper:r,columnIndexMapper:n}=this.hot,{wtOverlays:s}=this.hot.view._wt,{wtTable:i}=null!==(t=s.getParentOverlay(this.TD))&&void 0!==t?t:this.hot.view._wt,o=r.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleRow()),l=r.getVisualFromRenderableIndex(i.getLastPartiallyVisibleRow()),u=n.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleColumn()),c=n.getVisualFromRenderableIndex(i.getLastPartiallyVisibleColumn());if(this.row>=o&&this.row<=l&&this.col>=u&&this.col<=c){const e=this.TD.getBoundingClientRect();this.datePickerStyle.top=`${this.hot.rootWindow.pageYOffset+e.top+(0,h.outerHeight)(this.TD)}px`;let t=this.hot.rootWindow.pageXOffset;this.hot.isRtl()?t+=e.right-(0,h.outerWidth)(this.datePicker):t+=e.left,this.datePickerStyle.left=`${t}px`}else this.hideDatepicker()}}t.DateEditor=g},66436:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(73911);t.EDITOR_TYPE=n.EDITOR_TYPE,t.DateEditor=n.DateEditor},77929:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=r(29328),i=n(r(37056));const o=t.EDITOR_TYPE="dropdown";class a extends s.AutocompleteEditor{static get EDITOR_TYPE(){return o}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i),this.cellProperties.filter=!1,this.cellProperties.strict=!0}}t.DropdownEditor=a,i.default.getSingleton().add("beforeValidate",(function(e,t,r){const n=this.propToCol(r);if(Number.isInteger(n)){const e=this.getCellMeta(t,n);e.editor===a&&void 0===e.strict&&(e.filter=!1,e.strict=!0)}}))},54185:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(77929);t.EDITOR_TYPE=n.EDITOR_TYPE,t.DropdownEditor=n.DropdownEditor},68157:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043),s=r(49536),i=r(24456),o=r(58460),a=r(52684);const l="handsontableEditor",h=t.EDITOR_TYPE="handsontable";class u extends n.TextEditor{static get EDITOR_TYPE(){return h}open(){super.open(),this.htEditor&&this.htEditor.destroy(),"none"===this.htContainer.style.display&&(this.htContainer.style.display=""),this.htEditor=new this.hot.constructor(this.htContainer,this.htOptions),this.htEditor.init(),this.htEditor.rootElement.style.display="",this.cellProperties.strict?this.htEditor.selectCell(0,0):this.htEditor.deselectCell(),(0,s.setCaretPosition)(this.TEXTAREA,0,this.TEXTAREA.value.length),this.refreshDimensions()}close(){this.htEditor&&(this.htEditor.rootElement.style.display="none"),this.removeHooksByKey("beforeKeyDown"),super.close()}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i);const a=this,l={startRows:0,startCols:0,minRows:0,minCols:0,className:"listbox",copyPaste:!1,autoColumnSize:!1,autoRowSize:!1,readOnly:!0,fillHandle:!1,autoWrapCol:!1,autoWrapRow:!1,ariaTags:!1,afterOnCellMouseDown(e,t){const r=this.getSourceData(t.row,t.col);void 0!==r&&a.setValue(r),a.hot.destroyEditor()},preventWheel:!0,layoutDirection:this.hot.isRtl()?"rtl":"ltr"};this.cellProperties.handsontable&&(0,o.extend)(l,i.handsontable),this.htOptions=l}beginEditing(e,t){const r=this.hot.getSettings().onBeginEditing;r&&!1===r()||super.beginEditing(e,t)}createElements(){super.createElements();const e=this.hot.rootDocument.createElement("DIV");e.className="handsontableEditor",this.TEXTAREA_PARENT.appendChild(e),this.htContainer=e,this.assignHooks()}finishEditing(e,t,r){if(this.htEditor&&this.htEditor.isListening()&&this.hot.listen(),this.htEditor&&this.htEditor.getSelectedLast()){const e=this.htEditor.getValue();void 0!==e&&this.setValue(e)}super.finishEditing(e,t,r)}assignHooks(){this.hot.addHook("afterDestroy",(()=>{this.htEditor&&this.htEditor.destroy()}))}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor");super.registerShortcuts();const t={group:l,relativeToGroup:a.EDITOR_EDIT_GROUP,position:"before"},r=(e,t)=>{const r=this.htEditor;if(void 0!==e&&(e<0||r.flipped&&e>r.countRows()-1?r.deselectCell():r.selectCell(e,0),r.getData().length))return t.preventDefault(),(0,i.stopImmediatePropagation)(t),this.hot.listen(),this.TEXTAREA.focus(),!1};e.addShortcuts([{keys:[["ArrowUp"]],callback:e=>{const t=this.htEditor;let n,s;return!t.getSelectedLast()&&t.flipped?n=t.countRows()-1:t.getSelectedLast()&&(t.flipped?(s=t.getSelectedLast()[0],n=Math.max(0,s-1)):(s=t.getSelectedLast()[0],n=s-1)),r(n,e)},preventDefault:!1},{keys:[["ArrowDown"]],callback:e=>{const t=this.htEditor;let n,s;if(t.getSelectedLast()||t.flipped){if(t.getSelectedLast())if(t.flipped)n=t.getSelectedLast()[0]+1;else if(!t.flipped){const e=t.countRows()-1;s=t.getSelectedLast()[0],n=Math.min(e,s+1)}}else n=0;return r(n,e)},preventDefault:!1}],t)}unregisterShortcuts(){super.unregisterShortcuts();this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(l)}}t.HandsontableEditor=u},76545:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(68157);t.EDITOR_TYPE=n.EDITOR_TYPE,t.HandsontableEditor=n.HandsontableEditor},28144:(e,t,r)=>{"use strict";t.__esModule=!0,t.registerAllEditors=function(){(0,g.registerEditor)(s.BaseEditor),(0,g.registerEditor)(n.AutocompleteEditor),(0,g.registerEditor)(i.CheckboxEditor),(0,g.registerEditor)(o.DateEditor),(0,g.registerEditor)(a.DropdownEditor),(0,g.registerEditor)(l.HandsontableEditor),(0,g.registerEditor)(h.NumericEditor),(0,g.registerEditor)(u.PasswordEditor),(0,g.registerEditor)(c.SelectEditor),(0,g.registerEditor)(d.TextEditor),(0,g.registerEditor)(p.TimeEditor)};var n=r(29328);t.AutocompleteEditor=n.AutocompleteEditor,t.AUTOCOMPLETE_EDITOR=n.EDITOR_TYPE;var s=r(47009);t.BaseEditor=s.BaseEditor,t.BASE_EDITOR=s.EDITOR_TYPE;var i=r(78457);t.CheckboxEditor=i.CheckboxEditor,t.CHECKBOX_EDITOR=i.EDITOR_TYPE;var o=r(66436);t.DateEditor=o.DateEditor,t.DATE_EDITOR=o.EDITOR_TYPE;var a=r(54185);t.DropdownEditor=a.DropdownEditor,t.DROPDOWN_EDITOR=a.EDITOR_TYPE;var l=r(76545);t.HandsontableEditor=l.HandsontableEditor,t.HANDSONTABLE_EDITOR=l.EDITOR_TYPE;var h=r(59889);t.NumericEditor=h.NumericEditor,t.NUMERIC_EDITOR=h.EDITOR_TYPE;var u=r(14961);t.PasswordEditor=u.PasswordEditor,t.PASSWORD_EDITOR=u.EDITOR_TYPE;var c=r(51656);t.SelectEditor=c.SelectEditor,t.SELECT_EDITOR=c.EDITOR_TYPE;var d=r(48043);t.TextEditor=d.TextEditor,t.TEXT_EDITOR=d.EDITOR_TYPE;var p=r(54837);t.TimeEditor=p.TimeEditor,t.TIME_EDITOR=p.EDITOR_TYPE;var g=r(39761);t.registerEditor=g.registerEditor,t.RegisteredEditor=g.RegisteredEditor,t._getEditorInstance=g._getEditorInstance,t.getEditor=g.getEditor,t.getEditorInstance=g.getEditorInstance,t.getRegisteredEditorNames=g.getRegisteredEditorNames,t.getRegisteredEditors=g.getRegisteredEditors,t.hasEditor=g.hasEditor},59889:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(78343);t.EDITOR_TYPE=n.EDITOR_TYPE,t.NumericEditor=n.NumericEditor},78343:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043);const s=t.EDITOR_TYPE="numeric";class i extends n.TextEditor{static get EDITOR_TYPE(){return s}}t.NumericEditor=i},14961:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(66461);t.EDITOR_TYPE=n.EDITOR_TYPE,t.PasswordEditor=n.PasswordEditor},66461:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043),s=r(49536);const i=t.EDITOR_TYPE="password";class o extends n.TextEditor{static get EDITOR_TYPE(){return i}createElements(){super.createElements(),this.TEXTAREA=this.hot.rootDocument.createElement("input"),this.TEXTAREA.setAttribute("type","password"),this.TEXTAREA.setAttribute("data-hot-input",""),this.TEXTAREA.className="handsontableInput",this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,(0,s.empty)(this.TEXTAREA_PARENT),this.TEXTAREA_PARENT.appendChild(this.TEXTAREA)}}t.PasswordEditor=o},39761:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.RegisteredEditor=d,t.getEditorInstance=t._getEditorInstance=function(e,t){let r;if("function"==typeof e)o.get(e)||p(null,e),r=o.get(e);else{if("string"!=typeof e)throw Error('Only strings and functions can be passed as "editor" parameter');r=l(e)}if(!r)throw Error(`No editor registered under name "${e}"`);return r.getInstance(t)},t.getEditor=function(e){if("function"==typeof e)return e;if(!h(e))throw Error(`No registered editor found under "${e}" name`);return l(e).getConstructor()},t.registerEditor=p,r(67834);var s=n(r(37056)),i=n(r(45212));const o=new WeakMap,{register:a,getItem:l,hasItem:h,getNames:u,getValues:c}=(0,i.default)("editors");function d(e){const t={},r=e;this.getConstructor=function(){return e},this.getInstance=function(e){return e.guid in t||(t[e.guid]=new r(e)),t[e.guid]},s.default.getSingleton().add("afterDestroy",(function(){t[this.guid]=null}))}function p(e,t){e&&"string"!=typeof e&&(e=(t=e).EDITOR_TYPE);const r=new d(t);"string"==typeof e&&a(e,r),o.set(t,r)}t.getRegisteredEditors=c,t.getRegisteredEditorNames=u,t.hasEditor=h},51656:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(7383);t.EDITOR_TYPE=n.EDITOR_TYPE,t.SelectEditor=n.SelectEditor},7383:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(47009),s=r(49536),i=r(58460);const o="ht_editor_visible",a="selectEditor",l=t.EDITOR_TYPE="select";class h extends n.BaseEditor{static get EDITOR_TYPE(){return l}init(){this.select=this.hot.rootDocument.createElement("select"),this.select.setAttribute("data-hot-input","true"),this.select.style.display="none",(0,s.addClass)(this.select,"htSelectEditor"),this.hot.rootElement.appendChild(this.select),this.registerHooks()}getValue(){return this.select.value}setValue(e){this.select.value=e}open(){this._opened=!0,this.refreshDimensions(),this.select.style.display="";this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this._opened=!1,this.select.style.display="none",(0,s.hasClass)(this.select,o)&&(0,s.removeClass)(this.select,o),this.unregisterShortcuts(),this.clearHooks()}focus(){this.select.focus()}registerHooks(){this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>this.refreshDimensions())),this.addHook("afterRowResize",(()=>this.refreshDimensions()))}prepare(e,t,r,n,o,a){super.prepare(e,t,r,n,o,a);const l=this.cellProperties.selectOptions;let h;h="function"==typeof l?this.prepareOptions(l(this.row,this.col,this.prop)):this.prepareOptions(l),(0,s.empty)(this.select),(0,i.objectEach)(h,((e,t)=>{const r=this.hot.rootDocument.createElement("OPTION");r.value=t,(0,s.fastInnerHTML)(r,e),this.select.appendChild(r)}))}prepareOptions(e){let t={};if(Array.isArray(e))for(let r=0,n=e.length;r<n;r++)t[e[r]]=e[r];else"object"==typeof e&&(t=e);return t}refreshValue(){const e=this.hot.getSourceDataAtCell(this.row,this.prop);this.originalValue=e,this.setValue(e),this.refreshDimensions()}refreshDimensions(){if(this.state!==n.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.close();const{top:e,start:t,width:r,height:i}=this.getEditedCellRect(),a=this.select.style;a.height=`${i}px`,a.width=`${r}px`,a.top=`${e}px`,a[this.hot.isRtl()?"right":"left"]=`${t}px`,a.margin="0px",(0,s.addClass)(this.select,o)}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={group:a};this.isInFullEditMode()&&e.addShortcuts([{keys:[["ArrowUp"]],callback:()=>{const e=this.select.selectedIndex-1;e>=0&&(this.select[e].selected=!0)}},{keys:[["ArrowDown"]],callback:()=>{const e=this.select.selectedIndex+1;e<=this.select.length-1&&(this.select[e].selected=!0)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(a)}}t.SelectEditor=h},88328:(e,t,r)=>{"use strict";t.__esModule=!0,t.updateCaretPosition=function(e,t){const r=(0,n.getCaretPosition)(t),s=t.value.split("\n");let i=r,o=0;for(let t=0;t<s.length;t++){const n=s[t];0!==t&&(o+=s[t-1].length+1);const a=o+n.length;if("home"===e?i=o:"end"===e&&(i=a),r<=a)break}(0,n.setCaretPosition)(t,i)};var n=r(49536)},48043:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(98173);t.EDITOR_TYPE=n.EDITOR_TYPE,t.TextEditor=n.TextEditor},98173:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0;var s=n(r(85707)),i=r(47009),o=n(r(63286)),a=r(1479),l=r(49536),h=r(27050),u=r(37028),c=r(67508),d=r(88328),p=r(81595);const g="ht_editor_hidden",f="textEditor",m=t.EDITOR_TYPE="text";class y extends i.BaseEditor{static get EDITOR_TYPE(){return m}constructor(e){super(e),(0,s.default)(this,"eventManager",new o.default(this)),(0,s.default)(this,"autoResize",(0,u.createInputElementResizer)(this.hot.rootDocument)),(0,s.default)(this,"TEXTAREA",void 0),(0,s.default)(this,"textareaStyle",void 0),(0,s.default)(this,"TEXTAREA_PARENT",void 0),(0,s.default)(this,"textareaParentStyle",void 0),(0,s.default)(this,"layerClass",void 0),this.eventManager=new o.default(this),this.createElements(),this.bindEvents(),this.hot.addHookOnce("afterDestroy",(()=>this.destroy()))}getValue(){return this.TEXTAREA.value}setValue(e){this.TEXTAREA.value=e}open(){this.refreshDimensions(),this.showEditableElement(),this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this.autoResize.unObserve(),(0,l.isThisHotChild)(this.hot.rootDocument.activeElement,this.hot.rootElement)&&this.hot.listen(),this.hideEditableElement(),this.unregisterShortcuts()}prepare(e,t,r,n,s,o){const a=this.state;if(super.prepare(e,t,r,n,s,o),!o.readOnly){this.refreshDimensions(!0);const{allowInvalid:e}=o;e&&!this.isOpened()&&(this.TEXTAREA.value=""),a===i.EDITOR_STATE.FINISHED||this.isOpened()||this.hideEditableElement()}}beginEditing(e,t){this.state===i.EDITOR_STATE.VIRGIN&&(this.TEXTAREA.value="",super.beginEditing(e,t))}focus(){this.TEXTAREA.select(),(0,l.setCaretPosition)(this.TEXTAREA,this.TEXTAREA.value.length)}createElements(){const{rootDocument:e}=this.hot;this.TEXTAREA=e.createElement("TEXTAREA"),(0,l.setAttribute)(this.TEXTAREA,[["data-hot-input",""],(0,p.A11Y_TABINDEX)(-1)]),(0,l.addClass)(this.TEXTAREA,"handsontableInput"),this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.textareaStyle.overflowY="visible",this.TEXTAREA_PARENT=e.createElement("DIV"),(0,l.addClass)(this.TEXTAREA_PARENT,"handsontableInputHolder"),(0,l.hasClass)(this.TEXTAREA_PARENT,this.layerClass)&&(0,l.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,l.addClass)(this.TEXTAREA_PARENT,g),this.textareaParentStyle=this.TEXTAREA_PARENT.style,this.TEXTAREA_PARENT.appendChild(this.TEXTAREA),this.hot.rootElement.appendChild(this.TEXTAREA_PARENT)}hideEditableElement(){(0,a.isEdge)()&&(this.textareaStyle.textIndent="-99999px"),this.textareaStyle.overflowY="visible",this.textareaParentStyle.opacity="0",this.textareaParentStyle.height="1px",(0,l.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,l.addClass)(this.TEXTAREA_PARENT,g)}showEditableElement(){this.textareaParentStyle.height="",this.textareaParentStyle.overflow="",this.textareaParentStyle.position="",this.textareaParentStyle[this.hot.isRtl()?"left":"right"]="auto",this.textareaParentStyle.opacity="1",this.textareaStyle.textIndent="";const e=this.TEXTAREA_PARENT.childNodes;let t=!1;(0,h.rangeEach)(e.length-1,(r=>{const n=e[r];if((0,l.hasClass)(n,"handsontableEditor"))return t=!0,!1})),(0,l.hasClass)(this.TEXTAREA_PARENT,g)&&(0,l.removeClass)(this.TEXTAREA_PARENT,g),t?(this.layerClass="ht_editor_visible",(0,l.addClass)(this.TEXTAREA_PARENT,this.layerClass)):(this.layerClass=this.getEditedCellsLayerClass(),(0,l.addClass)(this.TEXTAREA_PARENT,this.layerClass))}refreshValue(){const e=this.hot.toPhysicalRow(this.row),t=this.hot.getSourceDataAtCell(e,this.col);this.originalValue=t,this.setValue(t),this.refreshDimensions()}refreshDimensions(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.state!==i.EDITOR_STATE.EDITING&&!e)return;if(this.TD=this.getEditedCell(),!this.TD)return void(e||this.close());const{top:t,start:r,width:n,maxWidth:s,height:o,maxHeight:a}=this.getEditedCellRect();this.textareaParentStyle.top=`${t}px`,this.textareaParentStyle[this.hot.isRtl()?"right":"left"]=`${r}px`,this.showEditableElement();const h=(0,l.getComputedStyle)(this.TD,this.hot.rootWindow);this.TEXTAREA.style.fontSize=h.fontSize,this.TEXTAREA.style.fontFamily=h.fontFamily,this.TEXTAREA.style.backgroundColor=this.TD.style.backgroundColor;const u=(0,l.getComputedStyle)(this.TEXTAREA),c=parseInt(u.paddingLeft,10)+parseInt(u.paddingRight,10),d=parseInt(u.paddingTop,10)+parseInt(u.paddingBottom,10),p=n-c,g=o-d,f=s-c,m=a-d;this.autoResize.init(this.TEXTAREA,{minWidth:Math.min(p,f),minHeight:Math.min(g,m),maxWidth:f,maxHeight:m},!0)}bindEvents(){(0,a.isIOS)()&&this.eventManager.addEventListener(this.TEXTAREA,"focusout",(()=>this.finishEditing(!1))),this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()})),this.addHook("afterRowResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()}))}allowKeyEventPropagation(){}destroy(){this.eventManager.destroy(),this.clearHooks()}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={runOnlyIf:()=>(0,c.isDefined)(this.hot.getSelected()),group:f},r=()=>{this.hot.rootDocument.execCommand("insertText",!1,"\n")};e.addShortcuts([{keys:[["Control","Enter"]],callback:()=>(r(),!1),runOnlyIf:e=>!this.hot.selection.isMultiple()&&!e.altKey},{keys:[["Meta","Enter"]],callback:()=>(r(),!1),runOnlyIf:()=>!this.hot.selection.isMultiple()},{keys:[["Alt","Enter"]],callback:()=>(r(),!1)},{keys:[["Home"]],callback:(e,t)=>{let[r]=t;(0,d.updateCaretPosition)(r,this.TEXTAREA)}},{keys:[["End"]],callback:(e,t)=>{let[r]=t;(0,d.updateCaretPosition)(r,this.TEXTAREA)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(f)}}t.TextEditor=y},54837:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(79685);t.EDITOR_TYPE=n.EDITOR_TYPE,t.TimeEditor=n.TimeEditor},79685:(e,t,r)=>{"use strict";t.__esModule=!0;var n=r(48043);const s=t.EDITOR_TYPE="time";class i extends n.TextEditor{static get EDITOR_TYPE(){return s}prepare(e,t,r,n,s,i){super.prepare(e,t,r,n,s,i),this.TEXTAREA.dir="ltr"}}t.TimeEditor=i},63286:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t.getListenersCounter=function(){return o},r(15724);var s=n(r(85707)),i=r(24456);let o=0;t.default=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;(0,s.default)(this,"context",void 0),this.context=e||this,this.context.eventListeners||(this.context.eventListeners=[])}addEventListener(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];function s(e){r.call(this,function(e){const t=e.stopImmediatePropagation;return e.stopImmediatePropagation=function(){t.apply(this),(0,i.stopImmediatePropagation)(this)},e}(e))}return this.context.eventListeners.push({element:e,event:t,callback:r,callbackProxy:s,options:n,eventManager:this}),e.addEventListener(t,s,n),o+=1,()=>{this.removeEventListener(e,t,r)}}removeEventListener(e,t,r){let n,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=this.context.eventListeners.length;for(;i;)if(i-=1,n=this.context.eventListeners[i],n.event===t&&n.element===e){if(r&&r!==n.callback)continue;if(s&&n.eventManager!==this)continue;this.context.eventListeners.splice(i,1),n.element.removeEventListener(n.event,n.callbackProxy,n.options),o-=1}}clearEvents(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.context)return;let t=this.context.eventListeners.length;for(;t;){t-=1;const r=this.context.eventListeners[t];e&&r.eventManager!==this||(this.context.eventListeners.splice(t,1),r.element.removeEventListener(r.event,r.callbackProxy,r.options),o-=1)}}clear(){this.clearEvents()}destroy(){this.clearEvents(),this.context=null}destroyWithOwnEventsOnly(){this.clearEvents(!0),this.context=null}fireEvent(e,t){let r=e.document,n=e;r||(r=e.ownerDocument?e.ownerDocument:e,n=r.defaultView);const s={bubbles:!0,cancelable:"mousemove"!==t,view:n,detail:0,screenX:0,screenY:0,clientX:1,clientY:1,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:void 0};let i;r.createEvent?(i=r.createEvent("MouseEvents"),i.initMouseEvent(t,s.bubbles,s.cancelable,s.view,s.detail,s.screenX,s.screenY,s.clientX,s.clientY,s.ctrlKey,s.altKey,s.shiftKey,s.metaKey,s.button,s.relatedTarget||r.body.parentNode)):i=r.createEventObject(),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent(`on${t}`,i)}}},24638:(e,t,r)=>{"use strict";t.__esModule=!0,r(67834);var n=r(39874),s=r(49536),i=r(25735);function o(e,t,r){a(e,t),t.set(e,r)}function a(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function l(e,t){return e.get(u(e,t))}function h(e,t,r){return e.set(u(e,t),r),r}function u(e,t,r){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:r;throw new TypeError("Private element is not present on this object")}const c=Object.freeze({CELL:"cell",MIXED:"mixed"});var d=new WeakMap,p=new WeakMap,g=new WeakMap,f=new WeakMap,m=new WeakMap,y=new WeakSet;function E(e){var t;const r=null===(t=l(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!r||!l(d,this).selection.isCellVisible(r))return void e(null);const n=l(d,this).getCell(r.row,r.col,!0);null===n?l(d,this).addHookOnce("afterScroll",(()=>{e(l(d,this).getCell(r.row,r.col,!0))})):e(n)}function w(){u(y,this,E).call(this,(e=>{const{activeElement:t}=l(d,this).rootDocument;t&&(0,s.isOutsideInput)(t)&&t.blur(),this.focusOnHighlightedCell(e)}))}function C(){u(y,this,E).call(this,(e=>{this.getFocusMode()===c.MIXED&&"TD"===e.nodeName&&this.refocusToEditorTextarea()}))}function v(e){"boolean"==typeof e.imeFastEdit&&this.setFocusMode(e.imeFastEdit?c.MIXED:c.CELL)}t.FocusManager=class{constructor(e){var t,r,n=this;a(t=this,r=y),r.add(t),o(this,d,void 0),o(this,p,void 0),o(this,g,1),o(this,f,null),o(this,m,new Map);const s=e.getSettings();h(d,this,e),h(p,this,s.imeFastEdit?c.MIXED:c.CELL),l(d,this).addHook("afterUpdateSettings",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,v).call(n,...t)})),l(d,this).addHook("afterSelection",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,w).call(n,...t)})),l(d,this).addHook("afterSelectionFocusSet",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,w).call(n,...t)})),l(d,this).addHook("afterSelectionEnd",(function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return u(y,n,C).call(n,...t)}))}getFocusMode(){return l(p,this)}setFocusMode(e){Object.values(c).includes(e)?h(p,this,e):(0,n.warn)(`"${e}" is not a valid focus mode.`)}getRefocusDelay(){return l(g,this)}setRefocusDelay(e){h(g,this,e)}setRefocusElementGetter(e){h(f,this,e)}getRefocusElement(){return"function"==typeof l(f,this)?l(f,this).call(this):null===(e=l(d,this).getActiveEditor())||void 0===e?void 0:e.TEXTAREA;var e}focusOnHighlightedCell(e){const t=e=>{var t,r;const n=null===(t=l(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!n)return;let s=l(d,this).runHooks("modifyFocusedElement",n.row,n.col,e);s instanceof HTMLElement||(s=e),!s||null!==(r=l(d,this).getActiveEditor())&&void 0!==r&&r.isOpened()||s.focus({preventScroll:!0})};e?t(e):u(y,this,E).call(this,(e=>t(e)))}refocusToEditorTextarea(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l(g,this);const r=this.getRefocusElement();!l(d,this).getSettings().imeFastEdit||null!==(e=l(d,this).getActiveEditor())&&void 0!==e&&e.isOpened()||!r||(l(m,this).has(t)||l(m,this).set(t,(0,i.debounce)((()=>{r.select()}),t)),l(m,this).get(t)())}}},81595:(e,t)=>{"use strict";t.__esModule=!0;t.A11Y_TABINDEX=e=>["tabindex",e];t.A11Y_TREEGRID=()=>["role","treegrid"];t.A11Y_PRESENTATION=()=>["role","presentation"];t.A11Y_GRIDCELL=()=>["role","gridcell"];t.A11Y_ROWHEADER=()=>["role","rowheader"];t.A11Y_ROWGROUP=()=>["role","rowgroup"];t.A11Y_COLUMNHEADER=()=>["role","columnheader"];t.A11Y_ROW=()=>["role","row"];t.A11Y_MENU=()=>["role","menu"];t.A11Y_MENU_ITEM=()=>["role","menuitem"];t.A11Y_MENU_ITEM_CHECKBOX=()=>["role","menuitemcheckbox"];t.A11Y_COMBOBOX=()=>["role","combobox"];t.A11Y_LISTBOX=()=>["role","listbox"];t.A11Y_OPTION=()=>["role","option"];t.A11Y_CHECKBOX=()=>["role","checkbox"];t.A11Y_SCOPE_COL=()=>["scope","col"];t.A11Y_SCOPE_ROW=()=>["scope","row"];t.A11Y_TEXT=()=>["type","text"];t.A11Y_LABEL=e=>["aria-label",e];t.A11Y_HIDDEN=()=>["aria-hidden","true"];t.A11Y_DISABLED=()=>["aria-disabled","true"];t.A11Y_MULTISELECTABLE=()=>["aria-multiselectable","true"];t.A11Y_HASPOPUP=e=>["aria-haspopup",e];t.A11Y_ROWCOUNT=e=>["aria-rowcount",e];t.A11Y_COLCOUNT=e=>["aria-colcount",e];t.A11Y_ROWINDEX=e=>["aria-rowindex",e];t.A11Y_COLINDEX=e=>["aria-colindex",e];t.A11Y_EXPANDED=e=>["aria-expanded",e];t.A11Y_SORT=e=>["aria-sort",e];t.A11Y_READONLY=()=>["aria-readonly","true"];t.A11Y_INVALID=()=>["aria-invalid","true"];t.A11Y_CHECKED=e=>["aria-checked",e];t.A11Y_SELECTED=()=>["aria-selected","true"];t.A11Y_AUTOCOMPLETE=()=>["aria-autocomplete","list"];t.A11Y_CONTROLS=e=>["aria-controls",e];t.A11Y_ACTIVEDESCENDANT=e=>["aria-activedescendant",e];t.A11Y_LIVE=e=>["aria-live",e];t.A11Y_RELEVANT=e=>["aria-relevant",e];t.A11Y_SETSIZE=e=>["aria-setsize",e];t.A11Y_POSINSET=e=>["aria-posinset",e]},98758:(e,t,r)=>{"use strict";function n(e,t,r,n){let s=-1,i=e,o=r;Array.isArray(e)||(i=Array.from(e));const a=i.length;for(n&&a&&(s+=1,o=i[s]),s+=1;s<a;)o=t(o,i[s],s,i),s+=1;return o}function s(e,t){let r=0,n=e;Array.isArray(e)||(n=Array.from(e));const s=n.length;for(;r<s&&!1!==t(n[r],r,n);)r+=1;return e}function i(e){return n(e,((e,t)=>e+t),0)}t.__esModule=!0,t.arrayAvg=function(e){if(!e.length)return 0;return i(e)/e.length},t.arrayEach=s,t.arrayFilter=function(e,t){let r=0,n=e;Array.isArray(e)||(n=Array.from(e));const s=n.length,i=[];let o=-1;for(;r<s;){const e=n[r];t(e,r,n)&&(o+=1,i[o]=e),r+=1}return i},t.arrayFlatten=function e(t){return n(t,((t,r)=>t.concat(Array.isArray(r)?e(r):r)),[])},t.arrayMap=function(e,t){let r=0,n=e;Array.isArray(e)||(n=Array.from(e));const s=n.length,i=[];let o=-1;for(;r<s;){const e=n[r];o+=1,i[o]=t(e,r,n),r+=1}return i},t.arrayMax=function(e){return n(e,((e,t)=>e>t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayMin=function(e){return n(e,((e,t)=>e<t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayReduce=n,t.arraySum=i,t.arrayUnique=function(e){const t=[];return s(e,(e=>{-1===t.indexOf(e)&&t.push(e)})),t},t.extendArray=function(e,t){const r=t.length;let n=0;for(;n<r;)e.push(t[n]),n+=1},t.getDifferenceOfArrays=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[n,...i]=[...t];let o=n;return s(i,(e=>{o=o.filter((t=>!e.includes(t)))})),o},t.getIntersectionOfArrays=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[n,...i]=[...t];let o=n;return s(i,(e=>{o=o.filter((t=>e.includes(t)))})),o},t.getUnionOfArrays=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[n,...i]=[...t],o=new Set(n);return s(i,(e=>{s(e,(e=>{o.has(e)||o.add(e)}))})),Array.from(o)},t.pivot=function(e){const t=[];if(!e||0===e.length||!e[0]||0===e[0].length)return t;const r=e.length,n=e[0].length;for(let s=0;s<r;s++)for(let r=0;r<n;r++)t[r]||(t[r]=[]),t[r][s]=e[s][r];return t},t.stringToArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";return e.split(t)},t.to2dArray=function(e){const t=e.length;let r=0;for(;r<t;)e[r]=[e[r]],r+=1},r(15724),r(71336),r(41558),r(17663),r(68630),r(79645),r(89858),r(8620)},1479:(e,t,r)=>{"use strict";t.__esModule=!0,t.isChrome=function(){return o.chrome.value},t.isChromeWebKit=function(){return o.chromeWebKit.value},t.isEdge=function(){return o.edge.value},t.isEdgeWebKit=function(){return o.edgeWebKit.value},t.isFirefox=function(){return o.firefox.value},t.isFirefoxWebKit=function(){return o.firefoxWebKit.value},t.isIOS=function(){return a.ios.value},t.isIpadOS=function(){let{maxTouchPoints:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator;return e>2&&a.mac.value},t.isLinuxOS=function(){return a.linux.value},t.isMacOS=function(){return a.mac.value},t.isMobileBrowser=function(){return o.mobile.value},t.isSafari=function(){return o.safari.value},t.isWindowsOS=function(){return a.win.value},t.setBrowserMeta=l,t.setPlatformMeta=h;var n=r(58460),s=r(36201);const i=e=>{const t={value:!1,test:(r,n)=>{t.value=e(r,n)}};return t},o={chrome:i(((e,t)=>/Chrome/.test(e)&&/Google/.test(t))),chromeWebKit:i((e=>/CriOS/.test(e))),edge:i((e=>/Edge/.test(e))),edgeWebKit:i((e=>/EdgiOS/.test(e))),firefox:i((e=>/Firefox/.test(e))),firefoxWebKit:i((e=>/FxiOS/.test(e))),mobile:i((e=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(e))),safari:i(((e,t)=>/Safari/.test(e)&&/Apple Computer/.test(t)))},a={mac:i((e=>/^Mac/.test(e))),win:i((e=>/^Win/.test(e))),linux:i((e=>/^Linux/.test(e))),ios:i((e=>/iPhone|iPad|iPod/i.test(e)))};function l(){let{userAgent:e=navigator.userAgent,vendor:t=navigator.vendor}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,n.objectEach)(o,(r=>{let{test:n}=r;n(e,t)}))}function h(){let{platform:e=navigator.platform}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,n.objectEach)(a,(t=>{let{test:r}=t;r(e)}))}(0,s.isCSR)()&&(l(),h())},39874:(e,t,r)=>{"use strict";t.__esModule=!0,t.error=function(){(0,n.isDefined)(console)&&console.error(...arguments)},t.info=function(){(0,n.isDefined)(console)&&console.info(...arguments)},t.log=function(){(0,n.isDefined)(console)&&console.log(...arguments)},t.warn=function(){(0,n.isDefined)(console)&&console.warn(...arguments)};var n=r(67508)},37671:(e,t,r)=>{"use strict";t.__esModule=!0,t.countFirstRowKeys=function(e){let t=0;Array.isArray(e)&&(e[0]&&Array.isArray(e[0])?t=e[0].length:e[0]&&(0,n.isObject)(e[0])&&(t=(0,n.deepObjectSize)(e[0])));return t},t.createEmptySpreadsheetData=function(e,t){const r=[];let n;for(let s=0;s<e;s++){n=[];for(let e=0;e<t;e++)n.push("");r.push(n)}return r},t.createSpreadsheetData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const r=[];let n,s;for(n=0;n<e;n++){const e=[];for(s=0;s<t;s++)e.push(o(s)+(n+1));r.push(e)}return r},t.createSpreadsheetObjectData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const r=[];let n,s;for(n=0;n<e;n++){const e={};for(s=0;s<t;s++)e[`prop${s}`]=o(s)+(n+1);r.push(e)}return r},t.dataRowToChangesArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=e;const n=[];Array.isArray(e)&&Array.isArray(e[0])||(r=[e]);return r.forEach(((e,r)=>{Array.isArray(e)?e.forEach(((e,s)=>{n.push([r+t,s,e])})):Object.keys(e).forEach((s=>{n.push([r+t,s,e[s]])}))})),n},t.isArrayOfArrays=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>Array.isArray(e))))},t.isArrayOfObjects=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>"object"==typeof e&&!Array.isArray(e)&&null!==e)))},t.spreadsheetColumnIndex=function(e){let t=0;if(e)for(let r=0,n=e.length-1;r<e.length;r+=1,n-=1)t+=i**n*(s.indexOf(e[r])+1);return t-=1,t},t.spreadsheetColumnLabel=o,r(15724);var n=r(58460);const s="ABCDEFGHIJKLMNOPQRSTUVWXYZ",i=s.length;function o(e){let t,r=e+1,n="";for(;r>0;)t=(r-1)%i,n=String.fromCharCode(65+t)+n,r=parseInt((r-t)/i,10);return n}},11459:(e,t)=>{"use strict";t.__esModule=!0,t.getNormalizedDate=function(e){const t=new Date(e);if(!isNaN(new Date(`${e}T00:00`).getDate()))return new Date(t.getTime()+6e4*t.getTimezoneOffset());return t}},49536:(e,t,r)=>{"use strict";t.__esModule=!0,t.addClass=h,t.addEvent=function(e,t,r){e.addEventListener(t,r,!1)},t.clearTextSelection=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;e.getSelection&&(e.getSelection().empty?e.getSelection().empty():e.getSelection().removeAllRanges&&e.getSelection().removeAllRanges())},t.closest=o,t.closestDown=function(e,t,r){const n=[];let s=e;for(;s&&(s=o(s,t,r),s&&(!r||r.contains(s)));)n.push(s),s=s.host&&s.nodeType===Node.DOCUMENT_FRAGMENT_NODE?s.host:s.parentNode;const i=n.length;return i?n[i-1]:null},t.empty=d,t.fastInnerHTML=function(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];p.test(t)?e.innerHTML=r?(0,n.sanitize)(t):t:g(e,t)},t.fastInnerText=g,t.getCaretPosition=function(e){if(e.selectionStart)return e.selectionStart;return 0},t.getComputedStyle=y,t.getCssTransform=function(e){let t;if(e.style.transform&&""!==(t=e.style.transform))return["transform",t];return-1},t.getFrameElement=i,t.getMaximumScrollLeft=function(e){return e.scrollWidth-e.clientWidth},t.getMaximumScrollTop=function(e){return e.scrollHeight-e.clientHeight},t.getParent=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=-1,n=null,s=e;for(;null!==s;){if(r===t){n=s;break}s.host&&s.nodeType===Node.DOCUMENT_FRAGMENT_NODE?s=s.host:(r+=1,s=s.parentNode)}return n},t.getParentWindow=function(e){return i(e)&&e.parent},t.getScrollLeft=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return m(t);return e.scrollLeft},t.getScrollTop=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return f(t);return e.scrollTop},t.getScrollableElement=function(e){let t=e.ownerDocument,r=t?t.defaultView:void 0;t||(t=e.document?e.document:e,r=t.defaultView);const n=["auto","scroll"];let s=e.parentNode;for(;s&&s.style&&t.body!==s;){let{overflow:e,overflowX:t,overflowY:i}=s.style;if([e,t,i].includes("scroll"))return s;if(({overflow:e,overflowX:t,overflowY:i}=r.getComputedStyle(s)),n.includes(e)||n.includes(t)||n.includes(i))return s;if(s.clientHeight<=s.scrollHeight+1&&(n.includes(i)||n.includes(e)))return s;if(s.clientWidth<=s.scrollWidth+1&&(n.includes(t)||n.includes(e)))return s;s=s.parentNode}return r},t.getScrollbarWidth=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;void 0===E&&(E=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;const t=e.createElement("div");t.style.height="200px",t.style.width="100%";const r=e.createElement("div");r.style.boxSizing="content-box",r.style.height="150px",r.style.left="0px",r.style.overflow="hidden",r.style.position="absolute",r.style.top="0px",r.style.width="200px",r.style.visibility="hidden",r.appendChild(t),(e.body||e.documentElement).appendChild(r);const n=t.offsetWidth;r.style.overflow="scroll";let s=t.offsetWidth;n===s&&(s=r.clientWidth);return(e.body||e.documentElement).removeChild(r),n-s}(e));return E},t.getSelectionEndPosition=function(e){if(e.selectionEnd)return e.selectionEnd;return 0},t.getSelectionText=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;const t=e.document;let r="";e.getSelection?r=e.getSelection().toString():t.selection&&"Control"!==t.selection.type&&(r=t.selection.createRange().text);return r},t.getStyle=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window;if(!e)return;if(e===r)return"width"===t?`${r.innerWidth}px`:"height"===t?`${r.innerHeight}px`:void 0;const n=e.style[t];if(""!==n&&void 0!==n)return n;const s=y(e,r);if(""!==s[t]&&void 0!==s[t])return s[t]},t.getTrimmingContainer=function(e){const t=e.ownerDocument,r=t.defaultView;let n=e.parentNode;for(;n&&n.style&&t.body!==n;){if("visible"!==n.style.overflow&&""!==n.style.overflow)return n;const e=y(n,r),t=["scroll","hidden","auto"],s=e.getPropertyValue("overflow"),i=e.getPropertyValue("overflow-y"),o=e.getPropertyValue("overflow-x");if(t.includes(s)||t.includes(i)||t.includes(o))return n;n=n.parentNode}return r},t.getWindowScrollLeft=m,t.getWindowScrollTop=f,t.hasAccessToParentWindow=function(e){return!!Object.getPrototypeOf(e.parent)},t.hasClass=function(e,t){if(void 0===e.classList||"string"!=typeof t||""===t)return!1;return e.classList.contains(t)},t.hasHorizontalScrollbar=function(e){return e.offsetHeight!==e.clientHeight},t.hasVerticalScrollbar=function(e){return e.offsetWidth!==e.clientWidth},t.index=function(e){let t=0,r=e;if(r.previousSibling)for(;r=r.previousSibling;)t+=1;return t},t.innerHeight=function(e){return e.clientHeight||e.innerHeight},t.innerWidth=function(e){return e.clientWidth||e.innerWidth},t.isChildOf=function(e,t){let r=e.parentNode,n=[];"string"==typeof t?n=e.defaultView?Array.prototype.slice.call(e.querySelectorAll(t),0):Array.prototype.slice.call(e.ownerDocument.querySelectorAll(t),0):n.push(t);for(;null!==r;){if(n.indexOf(r)>-1)return!0;r=r.parentNode}return!1},t.isDetached=function(e){return!e.parentNode},t.isInput=w,t.isOutsideInput=C,t.isThisHotChild=function(e,t){const r=e.closest(".handsontable");return!!r&&(r.parentNode===t||r===t)},t.isVisible=function e(t){const r=t.ownerDocument.documentElement;let n=t;for(;n!==r;){if(null===n)return!1;if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE){if(n.host){if(n.host.impl)return e(n.host.impl);if(n.host)return e(n.host);throw new Error("Lost in Web Components world")}return!1}if("none"===y(n).display)return!1;n=n.parentNode}return!0},t.makeElementContentEditableAndSelectItsContent=v,t.matchesCSSRules=function(e,t){const{selectorText:r}=t;let n=!1;t.type===CSSRule.STYLE_RULE&&r&&(e.msMatchesSelector?n=e.msMatchesSelector(r):e.matches&&(n=e.matches(r)));return n},t.observeVisibilityChangeOnce=function(e,t){new IntersectionObserver(((r,n)=>{r.forEach((r=>{r.isIntersecting&&null!==e.offsetParent&&(t(),n.unobserve(e))}))}),{root:e.ownerDocument.body}).observe(e)},t.offset=function(e){const t=e.ownerDocument,r=t.defaultView,n=t.documentElement;let s,i,o,a=e;s=a.offsetLeft,i=a.offsetTop,o=a;for(;(a=a.offsetParent)&&a!==t.body&&"offsetLeft"in a;)s+=a.offsetLeft,i+=a.offsetTop,o=a;o&&"fixed"===o.style.position&&(s+=r.pageXOffset||n.scrollLeft,i+=r.pageYOffset||n.scrollTop);return{left:s,top:i}},t.outerHeight=function(e){return e.offsetHeight},t.outerWidth=function(e){return e.offsetWidth},t.overlayContainsElement=function(e,t,r){const n=r.parentElement.querySelector(`.ht_clone_${e}`);return n?n.contains(t):null},t.removeAttribute=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);const{regexFree:r,regexes:n}=l(t,!0);r.forEach((t=>{""!==t&&e.removeAttribute(t)})),n.forEach((t=>{e.getAttributeNames().forEach((r=>{t.test(r)&&e.removeAttribute(r)}))}))},t.removeClass=u,t.removeContentEditableFromElementAndDeselect=R,t.removeEvent=function(e,t,r){e.removeEventListener(t,r,!1)},t.removeTextNodes=function e(t){if(3===t.nodeType)t.parentNode.removeChild(t);else if(["TABLE","THEAD","TBODY","TFOOT","TR"].indexOf(t.nodeName)>-1){const r=t.childNodes;for(let t=r.length-1;t>=0;t--)e(r[t])}},t.resetCssTransform=function(e){e.style.transform&&""!==e.style.transform&&(e.style.transform="")},t.runWithSelectedContendEditableElement=function(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];v(e,r),t(),R(e,r)},t.selectElementIfAllowed=function(e){C(e.ownerDocument.activeElement)||e.select()},t.setAttribute=c,t.setCaretPosition=function(e,t,r){void 0===r&&(r=t);if(e.setSelectionRange){e.focus();try{e.setSelectionRange(t,r)}catch(n){const s=e.parentNode,i=s.style.display;s.style.display="block",e.setSelectionRange(t,r),s.style.display=i}}},t.setOverlayPosition=function(e,t,r){e.style.transform=`translate3d(${t},${r},0)`},r(67834),r(15724);var n=r(69114),s=r(81595);function i(e){return Object.getPrototypeOf(e.parent)&&e.frameElement}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0;const{ELEMENT_NODE:n,DOCUMENT_FRAGMENT_NODE:s}=Node;let i=e;for(;null!=i&&i!==r;){const{nodeType:e,nodeName:r}=i;if(e===n&&(t.includes(r)||t.includes(i)))return i;const{host:o}=i;i=o&&e===s?o:i.parentNode}return null}function a(e){return e&&e.length?e.filter((e=>!!e)):[]}function l(e,t){if(!e||!e.length)return t?{regexFree:[],regexes:[]}:[];const r=[],n=[];return n.push(...e.filter((e=>{const n=e instanceof RegExp;return n&&t&&r.push(e),!n}))),t?{regexFree:n,regexes:r}:n}function h(e,t){"string"==typeof t&&(t=t.split(" ")),(t=a(t)).length>0&&e.classList.add(...t)}function u(e,t){"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);let{regexFree:r,regexes:n}=l(t,!0);r=a(r),r.length>0&&e.classList.remove(...r),n.forEach((t=>{e.classList.forEach((r=>{t.test(r)&&e.classList.remove(r)}))}))}function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0;Array.isArray(t)||(t=[[t,r]]),t.forEach((t=>{Array.isArray(t)&&""!==t[0]&&e.setAttribute(...t)}))}function d(e){let t;for(;t=e.lastChild;)e.removeChild(t)}const p=t.HTML_CHARACTERS=/(<(.*)>|&(.*);)/;function g(e,t){const r=e.firstChild;r&&3===r.nodeType&&null===r.nextSibling?r.textContent=t:(d(e),e.appendChild(e.ownerDocument.createTextNode(t)))}function f(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollY}function m(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollX}function y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;return e.currentStyle||t.getComputedStyle(e)}let E;function w(e){return e&&(["INPUT","SELECT","TEXTAREA"].indexOf(e.nodeName)>-1||"true"===e.contentEditable)}function C(e){return w(e)&&!1===e.hasAttribute("data-hot-input")}function v(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const n=e.ownerDocument,i=n.createRange(),o=n.defaultView.getSelection();c(e,"contenteditable",!0),r&&c(e,...(0,s.A11Y_HIDDEN)()),t&&h(e,"invisibleSelection"),i.selectNodeContents(e),o.removeAllRanges(),o.addRange(i)}function R(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const r=e.ownerDocument.defaultView.getSelection();e.hasAttribute("aria-hidden")&&e.removeAttribute("aria-hidden"),r.removeAllRanges(),t&&u(e,"invisibleSelection"),e.removeAttribute("contenteditable")}},24456:(e,t)=>{"use strict";t.__esModule=!0,t.isImmediatePropagationStopped=function(e){return!1===e.isImmediatePropagationEnabled},t.isLeftClick=function(e){return 0===e.button},t.isRightClick=function(e){return 2===e.button},t.isTouchEvent=function(e){return e instanceof TouchEvent},t.offsetRelativeTo=function(e,t){const r={x:e.offsetX,y:e.offsetY};let n=e.target;if(!(t instanceof HTMLElement)||n!==t&&n.contains(t))return r;for(;n!==t;)r.x+=n.offsetLeft,r.y+=n.offsetTop,n=n.offsetParent;return r},t.stopImmediatePropagation=function(e){e.isImmediatePropagationEnabled=!1,e.cancelBubble=!0}},36201:(e,t)=>{"use strict";let r;t.__esModule=!0,t.cancelAnimationFrame=function(e){window.cancelAnimationFrame(e)},t.getComparisonFunction=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r)return r;r="object"==typeof Intl?new Intl.Collator(e,t).compare:"function"==typeof String.prototype.localeCompare?(e,t)=>`${e}`.localeCompare(t):(e,t)=>e===t?0:e>t?-1:1;return r},t.isCSR=function(){return"undefined"!=typeof window},t.isTouchSupported=function(){return"ontouchstart"in window},t.requestAnimationFrame=function(e){return window.requestAnimationFrame(e)}},25735:(e,t,r)=>{"use strict";t.__esModule=!0,t.curry=function(e){const t=e.length;return function r(n){return function(){for(var s=arguments.length,i=new Array(s),o=0;o<s;o++)i[o]=arguments[o];const a=n.concat(i);let l;return l=a.length>=t?e.apply(this,a):r(a),l}}([])},t.curryRight=function(e){const t=e.length;return function r(n){return function(){for(var s=arguments.length,i=new Array(s),o=0;o<s;o++)i[o]=arguments[o];const a=n.concat(i.reverse());let l;return l=a.length>=t?e.apply(this,a):r(a),l}}([])},t.debounce=function(e){let t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,n=null;return function(){for(var s=arguments.length,i=new Array(s),o=0;o<s;o++)i[o]=arguments[o];return n&&clearTimeout(n),n=setTimeout((()=>{t=e.apply(this,i)}),r),t}},t.fastCall=function(e,t,r,n,i,o,a,l){if((0,s.isDefined)(l))return e.call(t,r,n,i,o,a,l);if((0,s.isDefined)(a))return e.call(t,r,n,i,o,a);if((0,s.isDefined)(o))return e.call(t,r,n,i,o);if((0,s.isDefined)(i))return e.call(t,r,n,i);if((0,s.isDefined)(n))return e.call(t,r,n);if((0,s.isDefined)(r))return e.call(t,r);return e.call(t)},t.isFunction=function(e){return"function"==typeof e},t.partial=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];return function(){for(var t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return e.apply(this,r.concat(n))}},t.pipe=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];const[s,...i]=t;return function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,n.arrayReduce)(i,((e,t)=>t(e)),s.apply(this,t))}},t.throttle=i,t.throttleAfterHits=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;const n=i(e,t);let s=r;function o(){for(var t=arguments.length,r=new Array(t),i=0;i<t;i++)r[i]=arguments[i];return s?(s-=1,e.apply(this,r)):n.apply(this,r)}return o.clearHits=function(){s=r},o};var n=r(98758),s=r(67508);function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,r=0;const n={lastCallThrottled:!0};let s=null;return function(){for(var i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];const l=Date.now();let h=!1;n.lastCallThrottled=!0,r||(r=l,h=!0);const u=t-(l-r);return h?(n.lastCallThrottled=!1,e.apply(this,o)):(s&&clearTimeout(s),s=setTimeout((()=>{n.lastCallThrottled=!1,e.apply(this,o),r=0,s=void 0}),u)),n}}},67508:(e,t,r)=>{"use strict";var n=r(96784);t.__esModule=!0,t._injectProductInfo=function(e,t){const r=!a(e),n="string"==typeof e&&"non-commercial-and-evaluation"===e.toLowerCase(),i="14.6.1";let o,w="invalid",C="invalid";const v=function(e){let t=[][l],r=t;if(e[l]!==d("Z"))return!1;for(let t="",n="B<H4P+".split(""),s=d(n.shift());s;s=d(n.shift()||"A"))--s<""[l]?r|=(u(`${u(h(t)+(h(c(e,Math.abs(s),2))+[]).padStart(2,"0"))}`)%97||2)>>1:t=c(e,s,s?1===n[l]?9:8:6);return r===t}(e=p(e||""));if(r||n||v)if(v){const t=(0,s.default)("17/10/2024","DD/MM/YYYY"),r=Math.floor(t.toDate().getTime()/864e5),n=g(e);o=(0,s.default)(864e5*(n+1),"x").format("MMMM DD, YYYY"),r>n?(w="expired",C="expired"):(w="valid",C="valid")}else n?(w="non_commercial",C="valid"):(w="invalid",C="invalid");else w="missing",C="missing";f()&&(w="valid",C="valid");if(!m&&"valid"!==w){y[w]({keyValidityDate:o,hotVersion:i})&&console["non_commercial"===w?"info":"warn"](y[w]({keyValidityDate:o,hotVersion:i})),m=!0}if("valid"!==C&&t.parentNode){if(E[C]({keyValidityDate:o,hotVersion:i})){const e=document.createElement("div");e.className="hot-display-license-info",e.innerHTML=E[C]({keyValidityDate:o,hotVersion:i}),t.parentNode.insertBefore(e,t.nextSibling)}}},t.isDefined=function(e){return void 0!==e},t.isEmpty=a,t.isRegExp=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},t.isUndefined=o,t.stringify=function(e){let t;switch(typeof e){case"string":case"number":t=`${e}`;break;case"object":t=null===e?"":e.toString();break;case"undefined":t="";break;default:t=e.toString()}return t};var s=n(r(1314)),i=r(12556);function o(e){return void 0===e}function a(e){return null===e||""===e||o(e)}const l="length",h=e=>parseInt(e,16),u=e=>parseInt(e,10),c=(e,t,r)=>e.substr(t,r),d=e=>e.codePointAt(0)-65,p=e=>`${e}`.replace(/\-/g,""),g=e=>h(c(p(e),h("12"),d("F")))/(h(c(p(e),d("B"),~~![][l]))||9),f=()=>"undefined"!=typeof location&&/^([a-z0-9\-]+\.)?\x68\x61\x6E\x64\x73\x6F\x6E\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6D$/i.test(location.host);let m=!1;const y={invalid:()=>i.toSingleLine`
     The license key for Handsontable is invalid.\x20
     If you need any help, contact us at support@handsontable.com.`,expired:e=>{let{keyValidityDate:t,hotVersion:r}=e;return i.toSingleLine`
     The license key for Handsontable expired on ${t}, and is not valid for the installed\x20
diff --git a/handsontable/dist/handsontable.js b/handsontable/dist/handsontable.js
index 591be517c9..8ca898f4f0 100644
--- a/handsontable/dist/handsontable.js
+++ b/handsontable/dist/handsontable.js
@@ -25,8 +25,8 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:33:19)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:30)
  */
 (function webpackUniversalModuleDefinition(root, factory) {
 	if(typeof exports === 'object' && typeof module === 'object')
@@ -107,8 +107,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
 Handsontable.CellCoords = _src.CellCoords;
 Handsontable.CellRange = _src.CellRange;
 Handsontable.packageName = 'handsontable';
-Handsontable.buildDate = "30/09/2024 12:33:19";
-Handsontable.version = "14.6.0";
+Handsontable.buildDate = "15/10/2024 15:43:30";
+Handsontable.version = "14.6.1";
 Handsontable.languages = {
   dictionaryKeys: _registry.dictionaryKeys,
   getLanguageDictionary: _registry.getLanguageDictionary,
@@ -9237,7 +9237,7 @@ const domMessages = {
 function _injectProductInfo(key, element) {
   const hasValidType = !isEmpty(key);
   const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
-  const hotVersion = "14.6.0";
+  const hotVersion = "14.6.1";
   let keyValidityDate;
   let consoleMessageState = 'invalid';
   let domMessageState = 'invalid';
@@ -9245,7 +9245,7 @@ function _injectProductInfo(key, element) {
   const schemaValidity = _checkKeySchema(key);
   if (hasValidType || isNonCommercial || schemaValidity) {
     if (schemaValidity) {
-      const releaseDate = (0, _moment.default)("01/10/2024", 'DD/MM/YYYY');
+      const releaseDate = (0, _moment.default)("17/10/2024", 'DD/MM/YYYY');
       const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
       const keyValidityDays = _extractTime(key);
       keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
@@ -48385,9 +48385,6 @@ class TextEditor extends _baseEditor.BaseEditor {
     // Makes the element recognizable by Hot as its own
     // component's element.
     (0, _element.setAttribute)(this.TEXTAREA, [['data-hot-input', ''], (0, _a11y.A11Y_TABINDEX)(-1)]);
-    if (this.hot.getSettings().ariaTags) {
-      (0, _element.setAttribute)(this.TEXTAREA, [(0, _a11y.A11Y_HIDDEN)()]);
-    }
     (0, _element.addClass)(this.TEXTAREA, 'handsontableInput');
     this.textareaStyle = this.TEXTAREA.style;
     this.textareaStyle.width = 0;
@@ -50492,7 +50489,6 @@ exports.PasswordEditor = _passwordEditor.PasswordEditor;
 exports.__esModule = true;
 var _textEditor = __webpack_require__(384);
 var _element = __webpack_require__(131);
-var _a11y = __webpack_require__(138);
 const EDITOR_TYPE = exports.EDITOR_TYPE = 'password';

 /**
@@ -50512,9 +50508,6 @@ class PasswordEditor extends _textEditor.TextEditor {
     this.textareaStyle = this.TEXTAREA.style;
     this.textareaStyle.width = 0;
     this.textareaStyle.height = 0;
-    if (this.hot.getSettings().ariaTags) {
-      (0, _element.setAttribute)(this.TEXTAREA, [(0, _a11y.A11Y_HIDDEN)()]);
-    }
     (0, _element.empty)(this.TEXTAREA_PARENT);
     this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);
   }
diff --git a/handsontable/dist/handsontable.js.map b/handsontable/dist/handsontable.js.map
index d0b0a10c9c..68b8072821 100644
--- a/handsontable/dist/handsontable.js.map
+++ b/handsontable/dist/handsontable.js.map
@@ -1 +1 @@
-{"version":3,"file":"handsontable.js","mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAAC0b,aAAa,GAAG,YAAW;IAC9B,IAAI,CAAC1b,sBAAsB,IAAI,CAAC;EAClC,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAAC2b,YAAY,GAAG,YAAW;IAC7B,MAAMC,SAAS,GAAG,IAAI,CAAC5b,sBAAsB,GAAG,CAAC;IAEjD,IAAI,CAACA,sBAAsB,GAAG4D,IAAI,CAACG,GAAG,CAAC6X,SAAS,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI,CAACH,iBAAiB,CAAC,CAAC,IAAIG,SAAS,KAAK,IAAI,CAAC5b,sBAAsB,EAAE;MAC1E,IAAI,IAAI,CAACyB,UAAU,EAAE;QACnB,IAAI,CAACgG,MAAM,CAAC,CAAC;MACf,CAAC,MAAM;QACLhM,QAAQ,CAACuJ,IAAI,CAACyC,MAAM,CAAC,CAAC;MACxB;IACF;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACA,MAAM,GAAG,YAAW;IACvB,IAAI,IAAI,CAACzC,IAAI,EAAE;MACb,IAAI,CAACvD,UAAU,GAAG,IAAI;MACtB,IAAI,CAACsT,eAAe,GAAG,IAAI,CAAC,CAAC;;MAE7B,IAAI,CAAC,IAAI,CAAC0G,iBAAiB,CAAC,CAAC,EAAE;QAC7BhgB,QAAQ,CAACuJ,IAAI,CAACyC,MAAM,CAAC,CAAC;MACxB;IACF;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACoU,WAAW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,CAAC8L,4BAA4B,CAAC,CAAC;IAC7D;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACC,QAAQ,GAAG,YAAW;IACzB,MAAMC,GAAG,GAAG1lB,QAAQ,CAACqf,eAAe,CAAC,CAAC;IAEtC,IAAI7Z,SAAS,CAACigB,QAAQ,EAAE;MACtB,IAAI,IAAAxI,oBAAU,EAACzX,SAAS,CAACigB,QAAQ,CAAC,EAAE;QAClC,OAAOjgB,SAAS,CAACigB,QAAQ,CAACtI,IAAI,CAACnd,QAAQ,CAAC;MAC1C,CAAC,MAAM,IAAI0lB,GAAG,EAAE;QACd,OAAO1lB,QAAQ,CAACyV,OAAO,CAAC,CAAC,CAACiQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAClgB,SAAS,CAACigB,QAAQ,CAAC;MAC1D;IACF,CAAC,MAAM,IAAIC,GAAG,EAAE;MACd,OAAO1lB,QAAQ,CAACoX,aAAa,CAACsO,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACpb,WAAW,GAAG,YAAW;IAC5B,OAAO9E,SAAS;EAClB,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,IAAI,CAACmgB,KAAK,GAAG,YAAW;IACtB,IAAI,CAACC,SAAS,CAAC,CAAC;IAChB,IAAI,CAACpG,kBAAkB,CAAC,CAAC;EAC3B,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,I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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACE,aAAa,GAAG,UAASnZ,WAAW,EAA0C;IAAA,IAAxC4Y,SAAS,GAAAxtB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG4U,WAAW;IAAA,IAAEoZ,aAAa,GAAAhuB,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IAC/E,OAAOuI,SAAS,CAACslB,aAAa,CAACnZ,WAAW,EAAE4Y,SAAS,EAAEQ,aAAa,CAAC;EACvE,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACC,UAAU,GAAG,UAAStZ,QAAQ,EAAoC;IAAA,IAAlC0J,MAAM,GAAAre,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG2U,QAAQ;IAAA,IAAEqZ,aAAa,GAAAhuB,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IACnE,OAAOuI,SAAS,CAACwlB,UAAU,CAACtZ,QAAQ,EAAE0J,MAAM,EAAE2P,aAAa,CAAC;EAC9D,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,IAAI,CAACE,YAAY,GAAG,YAAW;IAC7BzlB,SAAS,CAACyJ,QAAQ,CAAC,CAAC;EACtB,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACsT,SAAS,GAAG,YAAsF;IAAA,IAA7E2I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AO,CAAC,GAAoC;AACvD,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,aAAa,mBAAO,CAAC,EAA+B;AACpD,YAAY,mBAAO,CAAC,EAAoB;AACxC,WAAW,mBAAO,CAAC,GAAmB;AACtC,iBAAiB,mBAAO,CAAC,GAA0B;AACnD,oBAAoB,mBAAO,CAAC,EAAsC;AAClE,8BAA8B,mBAAO,CAAC,GAAwC;AAC9E,aAAa,mBAAO,CAAC,GAAiC;AACtD,cAAc,mBAAO,CAAC,GAAkC;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACpHa;AACb,kBAAkB,mBAAO,CAAC,GAA2C;AACrE,gBAAgB,mBAAO,CAAC,EAAyB;AACjD,kBAAkB,mBAAO,CAAC,EAAmC;;AAE7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACba;AACb,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,kBAAkB,mBAAO,CAAC,EAAoC;;AAE9D;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACTa;AACb,iBAAiB,mBAAO,CAAC,EAA2B;;AAEpD;;;;;;;;ACHa;AACb,kBAAkB,mBAAO,CAAC,EAAoC;;AAE9D;;;;;;;;ACHa;AACb;;AAEA;AACA;AACA;AACA;;;;;;;;ACNa;AACb,gBAAgB,m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,aAAa,CAAC;EAC/B;EACAhB,uBAAuB,CAAC52C,GAAG,CAACsvC,WAAW,EAAEsI,aAAa,CAAC;AACzD;;;;;;;;;;;;;;ACzGA,IAAAr8C,MAAA,GAAApD,mBAAA;AACA,IAAAkD,OAAA,GAAAlD,mBAAA;AACA,IAAAwD,OAAA,GAAAxD,mBAAA;AACA,IAAA0/C,QAAA,GAAA1/C,mBAAA;AACA,IAAAqlC,mBAAA,GAAArlC,mBAAA;AACA,IAAA6C,SAAA,GAAA7C,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM2/C,gBAAgB,GAAG,CACvB;AACA;AACF;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACE,gCAAgC;AAEhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iCAAiC;AAEjC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gCAAgC;AAEhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kCAAkC;AAElC;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,0BAA0B;AAE1B;AACF;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACE,MAAM;AAEN;AACF;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,+BAA+B;AAE/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,8BAA8B;AAE9B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gCAAgC;AAEhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,UAAU;AAEV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACE,+BAA+B;AAE/B;AACF;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACE,0BAA0B;AAE1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACE,oCAAoC;AAEpC;AACF;AACA;AACA;AACA;AACA;AACE,uCAAuC;AAEvC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,0BAA0B,CAC3B;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG,IAAAtZ,gCAAY;AACpC;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMuZ,aAAa,GAAG,IAAIt7C,GAAG,CAAC,CAC5B,CAAC,WAAW,EAAE,OAAO,CAAC,EACtB,CAAC,WAAW,EAAE,OAAO,CAAC,EACtB,CAAC,aAAa,EAAE,OAAO,CAAC,EACxB,CAAC,aAAa,EAAE,OAAO,CAAC,EACxB,CAAC,iBAAiB,EAAE,OAAO,CAAC,EAC5B,CAAC,cAAc,EAAE,OAAO,CAAC,EACzB,CAAC,WAAW,EAAE,OAAO,CAAC,CACvB,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMu7C,gBAAgB,GAAG,IAAIv7C,GAAG,CAAC,CAC/B,EAAE,CACH,CAAC;AAEF,MAAMw7C,aAAa,GAAG,IAAI/G,OAAO,CAAC,CAAC;AAEnC,MAAMj3C,KAAK,CAAC;EACV,OAAOC,YAAYA,CAAA,EAAG;IA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AC65C,UAAU,CAACtoD,UAAU,CAAC,YAAY,CAAC;IAC3D,MAAMs4D,eAAe,GAAG7pD,UAAU,CAAC/qB,MAAM;IAEzC,OAAO8H,IAAI,CAACw+B,GAAG,CAAC58B,MAAM,CAAC,IAAIkrE,eAAe;EAC5C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE0E,mBAAmBA,CAACvyE,GAAG,EAAE;IACvB,IAAIA,GAAG,IAAI,CAAC,EAAE;MACZ,OAAO,KAAK;IACd;IAEA,MAAMiqD,aAAa,GAAG,IAAI,CAAC4T,UAAU,CAACtoD,UAAU,CAAC,eAAe,CAAC;IACjE,MAAMu4D,kBAAkB,GAAG7jB,aAAa,CAAChxD,MAAM;IAE/C,OAAO8H,IAAI,CAACw+B,GAAG,CAACv/B,GAAG,CAAC,IAAI8tE,kBAAkB;EAC5C;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE;EACAyC,uBAAuBA,CAACvwE,GAAG,EAAE;IAC3B,MAAMuhC,KAAK,GAAG,IAAI,CAAC2wB,mBAAmB,CAAC,CAAC;;IAExC;IACA;IACA,IAAIlyD,GAAG,GAAG,CAAC,IAAIuhC,KAAK,IAAI,CAAC,EAAE;MACzB,OAAO,CAAC,IAAI,CAACgxC,mBAAmB,CAACvyE,GAAG,CAAC;IACvC;IAEA,OAAOA,GAAG,GAAGuhC,KAAK;EACpB;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE;EACAivC,sBAAsBA,CAACxwE,GAAG,EAAE;IAC1B,OAAOA,GAAG,GAAG,IAAI,CAACmyD,kBAAkB,CAAC,CAAC;EACxC;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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CA;AACA;AACA;AACA;AACA,MAAMw2F,eAAe,SAAS7hB,cAAK,CAAC;EAClC;AACF;AACA;AACA;AACA;AACA;EACE9gD,WAAWA,CAAC+gD,gBAAgB,EAAE/M,YAAY,EAAExB,WAAW,EAAEC,UAAU,EAAE;IACnE,KAAK,CAACsO,gBAAgB,EAAE/M,YAAY,EAAExB,WAAW,EAAEC,UAAU,EAAE6T,kBAAS,CAAC;EAC3E;AACF;AAEA,IAAAtnC,aAAK,EAAC2jD,eAAe,EAAEF,sBAAa,CAAC;AACrC,IAAAzjD,aAAK,EAAC2jD,eAAe,EAAEjM,0BAAiB,CAAC;AAAC,IAAA7nF,QAAA,GAAA/B,kBAAA,GAE3B61F,eAAe;;;;;;;;;;;;;AC3B9B,IAAA5zF,QAAA,GAAA5C,mBAAA;AACA,IAAAkD,OAAA,GAAAlD,mBAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACe,MAAM4nE,QAAQ,CAAC;EAmB5B;AACF;AACA;EACE/zC,WAAWA,CAACjP,QAAQ,EAAE;IApBtB;AACF;AACA;AACA;AACA;AACA;IALE,IAAAsxB,gBAAA,CAAAvzC,OAAA,oBAMW,CAAC,CAAC;IAEb;AACF;AACA;AACA;AACA;AACA;AACA;IANE,IAAAuzC,gBAAA,CAAAvzC,OAAA,oBAOW8Z,MAAM,CAAC0nC,MAAM,CAAC,IAAI,CAAC0yC,WAAW,CAAC,CAAC,CAAC;IAM1C,IAAA5wE,kBAAU,EAAC,IAAI,CAAC6wE,QAAQ,EAAE,CAACjqF,KAAK,EAAEsd,G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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxFA,IAAA0C,QAAA,GAyFeA,CAAA,KAAM;EACnB,OAAO;IAEL;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImhH,+BAA+B,EAAEliH,SAAS;IAE1C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkuG,qBAAqB,EAAE,sBAAsB;IAE7C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIoV,UAAU,EAAE,IAAI;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,SAAS,EAAE,KAAK;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI7sG,iBAAiB,EAAE,IAAI;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIJ,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgF,YAAY,EAAE,IAAI;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkoG,iBAAiB,EAAE,IAAI;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI51D,QAAQ,EAAE,IAAI;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI61D,cAAc,EAAE1jH,SAAS;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2jH,WAAW,EAAE3jH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6uG,WAAW,EAAE,KAAK;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACID,WAAW,EAAE,KAAK;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgV,mBAAmB,EAAE5jH,SAAS;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkkB,IAAI,EAAE,EAAE;IAER;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,KAAK,EAAEnkB,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6jH,eAAe,EAAE7jH,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4X,SAAS,EAAE5X,SAAS;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8Q,UAAU,EAAE,IAAI;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgzG,kBAAkB,EAAE9jH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI22D,kBAAkB,EAAE32D,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIwT,OAAO,EAAExT,SAAS;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI+jH,aAAa,EAAE/jH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgkH,aAAa,EAAEhkH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2rB,SAAS,EAAE3rB,SAAS;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIikH,sBAAsB,EAAE,eAAe;IAEvC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,QAAQ,EAAE,KAAK;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,WAAW,EAAEnkH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0+G,QAAQ,EAAE,IAAI;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0F,SAAS,EAAE,IAAI;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,KAAK;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhW,mBAAmB,EAAEruG,SAAS;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIiuG,sBAAsB,EAAE,eAAe;IAEvC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI7Y,mBAAmB,EAAEp1F,SAAS;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIskH,aAAa,EAAE,KAAK;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhsG,IAAI,EAAEtY,SAAS;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI05F,eAAe,EAAE,IAAI;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIx3E,UAAU,EAAEliB,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIukH,UAAU,EAAE,YAAY;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAE,WAAW;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,gBAAgB,EAAEzkH,SAAS;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0kH,WAAW,EAAE1kH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIiK,sBAAsB,EAAE,KAAK;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI06G,YAAY,EAAE,IAAI;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE5kH,SAAS;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIoqB,MAAM,EAAEpqB,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6kH,kBAAkB,EAAE,IAAI;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACInuE,UAAU,EAAE;MAAE1vC,GAAG,EAAE,CAAC;MAAEF,GAAG,EAAE;IAAE,CAAC;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIusG,UAAU,EAAE;MACVyR,aAAa,EAAE;IACjB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI3nG,MAAM,EAAE,IAAI;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4nG,sBAAsB,EAAE,KAAK;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,OAAO,EAAEhlH,SAAS;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIilH,gBAAgB,EAAE,CAAC;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIxyG,iBAAiB,EAAE,CAAC;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN,eAAe,EAAE,CAAC;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACID,YAAY,EAAE,CAAC;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgzG,QAAQ,EAAEllH,SAAS;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIguD,iBAAiB,EAAE,KAAK;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6J,eAAe,EAAE73D,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2gB,MAAM,EAAE3gB,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImlH,aAAa,EAAEnlH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIolH,UAAU,EAAEplH,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIqlH,oBAAoB,EAAE,WAAW;IAEjC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIniE,WAAW,EAAE,KAAK;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI91B,UAAUA,CAACpmB,GAAG,EAAE;MACd,IAAIF,GAAG;MACP,IAAIw+G,MAAM;MACV,IAAIp6G,KAAK;MAET,KAAKpE,GAAG,GAAG,CAAC,EAAEw+G,MAAM,GAAG,IAAI,CAAC58G,SAAS,CAAC,CAAC,EAAE5B,GAAG,GAAGw+G,MAAM,EAAEx+G,GAAG,EAAE,EAAE;QAC5DoE,KAAK,GAAG,IAAI,CAAC4L,aAAa,CAAChQ,GAAG,EAAEE,GAAG,CAAC;QAEpC,IAAI,IAAA0K,cAAO,EAACxG,KAAK,CAAC,KAAK,KAAK,EAAE;UAC5B,OAAO,KAAK;QACd;MACF;MAEA,OAAO,IAAI;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgiB,UAAUA,CAACpmB,GAAG,EAAE;MACd,IAAIE,GAAG;MACP,IAAIu+G,MAAM;MACV,IAAIr6G,KAAK;MACT,IAAIw2G,IAAI;MAER,KAAK16G,GAAG,GAAG,CAAC,EAAEu+G,MAAM,GAAG,IAAI,CAAC98G,SAAS,CAAC,CAAC,EAAEzB,GAAG,GAAGu+G,MAAM,EAAEv+G,GAAG,EAAE,EAAE;QAC5DkE,KAAK,GAAG,IAAI,CAAC4L,aAAa,CAAChQ,GAAG,EAAEE,GAAG,CAAC;QAEpC,IAAI,IAAA0K,cAAO,EAACxG,KAAK,CAAC,KAAK,KAAK,EAAE;UAC5B,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;YAC7Bw2G,IAAI,GAAG,IAAI,CAACx3G,WAAW,CAACpD,GAAG,EAAEE,GAAG,CAAC;YAEjC,OAAO,IAAAkQ,qBAAa,EAAC,IAAI,CAACkL,SAAS,CAAC,CAAC,CAACs/F,IAAI,CAAC94G,IAAI,CAAC,EAAEsC,KAAK,CAAC;UAC1D;UAEA,OAAO,KAAK;QACd;MACF;MAEA,OAAO,IAAI;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIk9C,KAAK,EAAEpoD,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4E,QAAQ,EAAE,OAAO;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIT,eAAe,EAAE,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4B,UAAU,EAAE/F,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIwlH,MAAM,EAAE,OAAO;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,kBAAkB,EAAEzlH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0lH,gBAAgB,EAAE1lH,SAAS;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2lH,kBAAkB,EAAE3lH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4lH,aAAa,EAAE5lH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6lH,eAAe,EAAE7lH,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4T,OAAO,EAAEmuE,QAAQ;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIjyE,OAAO,EAAEiyE,QAAQ;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIp5B,UAAU,EAAE,KAAK;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI71C,OAAO,EAAE,CAAC;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,OAAO,EAAE,CAAC;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,YAAY,EAAE,CAAC;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,YAAY,EAAE,CAAC;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIizG,kBAAkB,EAAE9lH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4vG,gBAAgB,EAAE,KAAK;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImW,aAAa,EAAE,IAAI;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIj+D,aAAa,EAAE9nD,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgmH,UAAU,EAAEhmH,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIimH,mBAAmB,EAAE,UAAU;IAE/B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAElmH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIg3D,oBAAoB,EAAE,IAAI;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIrI,qBAAqB,EAAE,IAAI;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIw3D,eAAe,EAAEnmH,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIomH,WAAW,EAAEpmH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIqmH,wBAAwB,EAAE,eAAe;IAEzC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI31D,eAAe,EAAE,KAAK;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE,KAAK;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI/5C,QAAQ,EAAE,KAAK;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0vG,qBAAqB,EAAE,UAAU;IAEjC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIr1D,aAAa,EAAE,KAAK;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,gBAAgB,EAAE,KAAK;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIlnC,QAAQ,EAAEhqB,SAAS;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8qB,UAAU,EAAE9qB,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI21D,cAAc,EAAE31D,SAAS;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI+rB,UAAU,EAAE/rB,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIumH,MAAM,EAAE,KAAK;IAEb;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIjX,aAAa,EAAE,UAAU;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkX,aAAa,EAAExmH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2W,iBAAiB,EAAE,KAAK;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,cAAc,EAAE,KAAK;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgwG,eAAe,EAAE,IAAI;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIlgH,MAAM,EAAEvG,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0mH,SAAS,EAAE,CAAC;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,SAAS,EAAE,CAAC;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI/1D,QAAQ,EAAE,MAAM;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIg2D,MAAM,EAAE5mH,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIyjB,cAAc,EAAEzjB,SAAS;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6mH,QAAQ,EAAE;MAAE//G,GAAG,EAAE,CAAC;MAAEE,GAAG,EAAE;IAAE,CAAC;IAE5B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIwkB,KAAK,EAAExrB,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8mH,YAAY,EAAE,IAAI;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,QAAQ,EAAE/mH,SAAS;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgnH,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhsG,IAAI,EAAE,MAAM;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIisG,iBAAiB,EAAEjnH,SAAS;IAE5B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIknH,IAAI,EAAElnH,SAAS;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8b,SAAS,EAAE9b,SAAS;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIu2D,6BAA6B,EAAE,MAAM;IAErC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN,0BAA0B,EAAE,MAAM;IAElC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkxD,WAAW,EAAE,EAAE;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI1mG,KAAK,EAAEzgB,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIonH,QAA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CA;AACA;EACEoiG,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAAjF,oBAAa,EAAC,IAAI,CAACp9G,UAAU,CAACw8G,kBAAkB,CAAC,CAAC,EAAE2F,uBAAuB,CAAC,CAACt2G,SAAS;EAC/F;AACF;AAACjS,kBAAA,GAAA6hH,UAAA;;;;;;;;;;;;;;;;;;;;AChID,IAAAp/G,MAAA,GAAApD,mBAAA;AACA,IAAA+D,MAAA,GAAA/D,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMmpH,cAAc,CAAC;EA+BlCt1F,WAAWA,CAACy1F,YAAY,EAAE;IA9B1B;AACF;AACA;AACA;AACA;IAJE,IAAApzE,gBAAA,CAAAvzC,OAAA;IAMA;AACF;AACA;AACA;AACA;IAJE,IAAAuzC,gBAAA,CAAAvzC,OAAA,gBAKO,EAAE;IACT;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA,iBAMQ,EAAE;IACV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARE,IAAAuzC,gBAAA,CAAAvzC,OAAA,iBA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AAE,CAAA,GAAAF,CAAA,CAAAxhB,GAAA,CAAA0hB,CAAA,UAAAn0C,SAAA,CAAAC,MAAA,OAAAk0C,CAAA,GAAAG,CAAA,YAAAF,SAAA;AAEhF9zC,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,0BAA0B,CAAC;AAElD,MAAM5qB,UAAU,GAAAnzB,kBAAA,GAAG,gBAAgB;AACnC,MAAMwrD,eAAe,GAAAxrD,uBAAA,GAAG,EAAE;AACjC,MAAM66I,oBAAoB,GAAG,gBAAgB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,IAAAC,oBAAA,oBAAAziG,OAAA;AAAA,IAAA0iG,uBAAA,oBAAA1iG,OAAA;AAAA,IAAA2iG,qBAAA,oBAAA1lG,OAAA;AACO,MAAMmhG,cAAc,SAASK,gBAAU,CAAC;EAC7C,WAAW3jH,UAAUA,CAAA,EAAG;IACtB,OAAOA,UAAU;EACnB;EAEA,WAAWq4B,eAAeA,CAAA,EAAG;IAC3B,OAAOA,eAAe;EACxB;EAEA,WAAWyvF,YAAYA,CAAA,EAAG;IACxB,OAAO,IAAI;EACb;EAEA,WAAWC,gBAAgBA,CAAA,EAAG;IAC5B,OAAO,EAAE;EACX;EAEA,WAAWC,sBAAsBA,CAAA,EAAG;IAClC,OAAO,EAAE;EACX;;EAEA;AACF;AACA;AACA;AACA;AACA;;EA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AMjiB,UAAU,GAAAnzB,kBAAA,GAAG,YAAY;AAC/B,MAAMwrD,eAAe,GAAAxrD,uBAAA,GAAG,GAAG;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMo4I,UAAU,SAAStB,gBAAU,CAAC;EACzC,WAAW3jH,UAAUA,CAAA,EAAG;IACtB,OAAOA,UAAU;EACnB;EAEA,WAAWq4B,eAAeA,CAAA,EAAG;IAC3B,OAAOA,eAAe;EACxB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEgG,SAASA,CAAA,EAAG;IACV,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAEE;AACF;AACA;AACA;AACA;AACA;AACA;EACE4wH,cAAcA,CAACt7I,MAAM,EAAgB;IAAA,IAAd3X,OAAO,GAAAruB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACjC,OAAO,IAAI,CAACuhL,oBAAoB,CAACv7I,MAAM,EAAE3X,OAAO,CAAC,CAACmzJ,MAAM,CAAC,CAAC;EAC5D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,YAAYA,CAACz7I,MAAM,EAAgB;IAAA,IAAd3X,OAAO,GAAAruB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC0hL,WAAW,CAAC,IAAI,CAACH,oBAAoB,CAACv7I,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CxD;IAEA,IAAI,CAACysG,mBAAmB,CAAC,CAAC;IAC1B,KAAK,CAACod,aAAa,CAAC,CAAC;EACvB;;EAEA;AACF;AACA;AACA;AACA;EACExd,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACzpF,GAAG,CAACjrC,kBAAkB,CAAC,CAAC,CAC1BwiH,UAAU,CAAC,MAAM,CAAC,CAClB+O,WAAW,CAAC;MACXl/E,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;MACpBmb,eAAe,EAAE,IAAI;MACrBz8C,QAAQ,EAAEA,CAAA,KAAM;QACd,MAAM/R,SAAS,GAAG,IAAI,CAACisC,GAAG,CAAC51B,WAAW,CAAC,CAAC;QAExC,IAAI,CAAC2oK,eAAe,CAAC,CAAC;QACtB,IAAI,CAACpqK,MAAM,CAAC,CAAC;QAEb,IAAI5U,SAAS,EAAE;UACb,IAAI,CAACisC,GAAG,CAAC/mB,WAAW,CAACllB,SAAS,CAAC;QACjC;MACF,CAAC;MACDujH,KAAK,EAAE+R;IACT,CAAC,CAAC;EACN;;EAEA;AACF;AACA;AACA;AACA;EACEQ,mBAAmBA,CAAA,EAAG;IACpB,IAAI,CAAC7pF,GAAG,CAACjrC,kBAAkB,CAAC,CAAC,CAC1BwiH,UAAU,CAAC,MAAM,CAAC,CAClBuP,sBAAsB,CAACuC,eAAe,CAAC;EAC5C;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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C,gBAAgB,CAAC;AAC/C38C,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,eAAe,CAAC;AAC9C38C,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,kBAAkB,CAAC;AACjD38C,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,iBAAiB,CAAC;AAEzC,MAAM5qB,UAAU,GAAAnzB,kBAAA,GAAG,YAAY;AAC/B,MAAMwrD,eAAe,GAAAxrD,uBAAA,GAAG,GAAG;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvGA,IAAA6mE,SAAA,oBAAAxuB,OAAA;AAAA,IAAA67J,cAAA,oBAAA77J,OAAA;AAAA,IAAA87J,iBAAA,oBAAA7+J,OAAA;AAwGO,MAAMsjG,UAAU,SAAS9B,gBAAU,CAAC;EAAA5jH,YAAA;IAAA,SAAApyB,SAAA;IA0OzC;AACF;AACA;AACA;AACA;AACA;AACA;IANEg0C,2BAAA,OAAAq/J,iBAAA;IAjOA;AACF;AACA;AACA;AACA;AACA;IACE/wJ,0BAAA,OAAAyjB,SAAS,EAAG,CAAC,CAAC;IACd;AACF;AACA;AACA;AACA;AACA;IACEzjB,0BAAA,OAAA8wJ,cAAc,EAAG,IAAI;EAAC;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","sources":["webpack://Handsontable/webpack/universalModuleDefinition","webpack://Handsontable/../node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://Handsontable/./src/base.js","webpack://Handsontable/./src/css/bootstrap.css?2760","webpack://Handsontable/./src/3rdparty/walkontable/css/walkontable.scss?764a","webpack://Handsontable/./src/css/handsontable.scss?4f02","webpack://Handsontable/./src/css/mobile.handsontable.scss?1bca","webpack://Handsontable/./src/core.js","webpack://Handsontable/../node_modules/core-js/modules/es.error.cause.js","webpack://Handsontable/../node_modules/core-js/internals/export.js","webpack://Handsontable/../node_modules/core-js/internals/global-this.js","webpack://Handsontable/../node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://Handsontable/../node_modules/core-js/internals/descriptors.js","webpack://Handsontable/../node_modules/core-js/internals/fails.js","webpack://Handsontable/../node_modules/core-js/internals/function-call.js","webpack://Handsontable/../node_modules/core-js/internals/function-bind-native.js","webpack://Handsontable/../node_modules/core-js/internals/object-property-is-enumerable.js","webpack://Handsontable/../node_modules/core-js/internals/create-property-descriptor.js","webpack://Handsontable/../node_modules/core-js/internals/to-indexed-object.js","webpack://Handsontable/../node_modules/core-js/internals/indexed-object.js","webpack://Handsontable/../node_modules/core-js/internals/function-uncurry-this.js","webpack://Handsontable/../node_modules/core-js/internals/classof-raw.js","webpack://Handsontable/../node_modules/core-js/internals/require-object-coercible.js","webpack://Handsontable/../node_modules/core-js/internals/is-null-or-undefined.js","webpack://Handsontable/../node_modules/core-js/internals/to-property-key.js","webpack://Handsontable/../node_modules/core-js/internals/to-primitive.js","webpack://Handsontable/../node_modules/core-js/internals/is-object.js","webpack://Handsontable/../node_modules/core-js/internals/is-callable.js","webpack://Handsontable/../node_modules/core-js/internals/is-symbol.js","webpack://Handsontable/../node_modules/core-js/internals/get-built-in.js","webpack://Handsontable/../node_modules/core-js/internals/object-is-prototype-of.js","webpack://Handsontable/../node_modules/core-js/internals/use-symbol-as-uid.js","webpack://Handsontable/../node_modules/core-js/internals/symbol-constructor-detection.js","webpack://Handsontable/../node_modules/core-js/internals/environment-v8-version.js","webpack://Handsontable/../node_modules/core-js/internals/environment-user-agent.js","webpack://Handsontable/../node_modules/core-js/internals/get-method.js","webpack://Handsontable/../node_modules/core-js/internals/a-callable.js","webpack://Handsontable/../node_modules/core-js/internals/try-to-string.js","webpack://Handsontable/../node_modules/core-js/internals/ordinary-to-primitive.js","webpack://Handsontable/../node_modules/core-js/internals/well-known-symbol.js","webpack://Handsontable/../node_modules/core-js/internals/shared.js","webpack://Handsontable/../node_modules/core-js/internals/shared-store.js","webpack://Handsontable/../node_modules/core-js/internals/is-pure.js","webpack://Handsontable/../node_modules/core-js/internals/define-global-property.js","webpack://Handsontable/../node_modules/core-js/internals/has-own-property.js","webpack://Handsontable/../node_modules/core-js/internals/to-object.js","webpack://Handsontable/../node_modules/core-js/internals/uid.js","webpack://Handsontable/../node_modules/core-js/internals/ie8-dom-define.js","webpack://Handsontable/../node_modules/core-js/internals/document-create-element.js","webpack://Handsontable/../node_modules/core-js/internals/create-non-enumerable-property.js","webpack://Handsontable/../node_modules/core-js/internals/object-define-property.js","webpack://Handsontable/../node_modules/core-js/internals/v8-prototype-define-bug.js","webpack://Handsontable/../node_modules/core-js/internals/an-object.js","webpack://Handsontable/../node_modules/core-js/internals/define-built-in.js","webpack://Handsontable/../node_modules/core-js/internals/make-built-in.js","webpack://Handsontable/../node_modules/core-js/internals/function-name.js","webpack://Handsontable/../node_modules/core-js/internals/inspect-source.js","webpack://Handsontable/../node_modules/core-js/internals/internal-state.js","webpack://Handsontable/../node_modules/core-js/internals/weak-map-basic-detection.js","webpack://Handsontable/../node_modules/core-js/internals/shared-key.js","webpack://Handsontable/../node_modules/core-js/internals/hidden-keys.js","webpack://Handsontable/../node_modules/core-js/internals/copy-constructor-properties.js","webpack://Handsontable/../node_modules/core-js/internals/own-keys.js","webpack://Handsontable/../node_modules/core-js/internals/object-get-own-property-names.js","webpack://Handsontable/../node_modules/core-js/internals/object-keys-internal.js","webpack://Handsontable/../node_modules/core-js/internals/array-includes.js","webpack://Handsontable/../node_modules/core-js/internals/to-absolute-index.js","webpack://Handsontable/../node_modules/core-js/internals/to-integer-or-infinity.js","webpack://Handsontable/../node_modules/core-js/internals/math-trunc.js","webpack://Handsontable/../node_modules/core-js/internals/length-of-array-like.js","webpack://Handsontable/../node_modules/core-js/internals/to-length.js","webpack://Handsontable/../node_modules/core-js/internals/enum-bug-keys.js","webpack://Handsontable/../node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://Handsontable/../node_modules/core-js/internals/is-forced.js","webpack://Handsontable/../node_modules/core-js/internals/function-apply.js","webpack://Handsontable/../node_modules/core-js/internals/wrap-error-constructor-with-cause.js","webpack://Handsontable/../node_modules/core-js/internals/object-set-prototype-of.js","webpack://Handsontable/../node_modules/core-js/internals/function-uncurry-this-accessor.js","webpack://Handsontable/../node_modules/core-js/internals/a-possible-prototype.js","webpack://Handsontable/../node_modules/core-js/internals/is-possible-prototype.js","webpack://Handsontable/../node_modules/core-js/internals/proxy-accessor.js","webpack://Handsontable/../node_modules/core-js/internals/inherit-if-required.js","webpack://Handsontable/../node_modules/core-js/internals/normalize-string-argument.js","webpack://Handsontable/../node_modules/core-js/internals/to-string.js","webpack://Handsontable/../node_modules/core-js/internals/classof.js","webpack://Handsontable/../node_modules/core-js/internals/to-string-tag-support.js","webpack://Handsontable/../node_modules/core-js/internals/install-error-cause.js","webpack://Handsontable/../node_modules/core-js/internals/error-stack-install.js","webpack://Handsontable/../node_modules/core-js/internals/error-stack-clear.js","webpack://Handsontable/../node_modules/core-js/internals/error-stack-installable.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.push.js","webpack://Handsontable/../node_modules/core-js/internals/array-set-length.js","webpack://Handsontable/../node_modules/core-js/internals/is-array.js","webpack://Handsontable/../node_modules/core-js/internals/does-not-exceed-safe-integer.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.difference.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-difference.js","webpack://Handsontable/../node_modules/core-js/internals/a-set.js","webpack://Handsontable/../node_modules/core-js/internals/set-helpers.js","webpack://Handsontable/../node_modules/core-js/internals/set-clone.js","webpack://Handsontable/../node_modules/core-js/internals/set-iterate.js","webpack://Handsontable/../node_modules/core-js/internals/iterate-simple.js","webpack://Handsontable/../node_modules/core-js/internals/set-size.js","webpack://Handsontable/../node_modules/core-js/internals/get-set-record.js","webpack://Handsontable/../node_modules/core-js/internals/get-iterator-direct.js","webpack://Handsontable/../node_modules/core-js/internals/set-method-accept-set-like.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.intersection.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-intersection.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.is-disjoint-from.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-is-disjoint-from.js","webpack://Handsontable/../node_modules/core-js/internals/iterator-close.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.is-subset-of.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-is-subset-of.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.is-superset-of.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-is-superset-of.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.symmetric-difference.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-symmetric-difference.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.union.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-union.js","webpack://Handsontable/../node_modules/core-js/modules/web.immediate.js","webpack://Handsontable/../node_modules/core-js/modules/web.clear-immediate.js","webpack://Handsontable/../node_modules/core-js/internals/task.js","webpack://Handsontable/../node_modules/core-js/internals/function-bind-context.js","webpack://Handsontable/../node_modules/core-js/internals/function-uncurry-this-clause.js","webpack://Handsontable/../node_modules/core-js/internals/html.js","webpack://Handsontable/../node_modules/core-js/internals/array-slice.js","webpack://Handsontable/../node_modules/core-js/internals/validate-arguments-length.js","webpack://Handsontable/../node_modules/core-js/internals/environment-is-ios.js","webpack://Handsontable/../node_modules/core-js/internals/environment-is-node.js","webpack://Handsontable/../node_modules/core-js/internals/environment.js","webpack://Handsontable/../node_modules/core-js/modules/web.set-immediate.js","webpack://Handsontable/../node_modules/core-js/internals/schedulers-fix.js","webpack://Handsontable/./src/helpers/dom/element.js","webpack://Handsontable/./src/helpers/string.js","webpack://Handsontable/external umd {\"root\":\"DOMPurify\",\"commonjs2\":\"dompurify\",\"commonjs\":\"dompurify\",\"amd\":\"dompurify\"}","webpack://Handsontable/./src/helpers/mixed.js","webpack://Handsontable/external umd {\"root\":\"moment\",\"commonjs2\":\"moment\",\"commonjs\":\"moment\",\"amd\":\"moment\"}","webpack://Handsontable/./src/helpers/templateLiteralTag.js","webpack://Handsontable/./src/helpers/array.js","webpack://Handsontable/./src/helpers/a11y.js","webpack://Handsontable/./src/helpers/function.js","webpack://Handsontable/./src/helpers/browser.js","webpack://Handsontable/./src/helpers/object.js","webpack://Handsontable/../node_modules/core-js/modules/es.json.stringify.js","webpack://Handsontable/../node_modules/core-js/internals/get-json-replacer-function.js","webpack://Handsontable/./src/helpers/feature.js","webpack://Handsontable/./src/editorManager.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/defineProperty.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/typeof.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/toPrimitive.js","webpack://Handsontable/./src/helpers/unicode.js","webpack://Handsontable/./src/helpers/dom/event.js","webpack://Handsontable/./src/editors/registry.js","webpack://Handsontable/./src/pluginHooks.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack://Handsontable/../node_modules/core-js/internals/add-to-unscopables.js","webpack://Handsontable/../node_modules/core-js/internals/object-create.js","webpack://Handsontable/../node_modules/core-js/internals/object-define-properties.js","webpack://Handsontable/../node_modules/core-js/internals/object-keys.js","webpack://Handsontable/./src/helpers/console.js","webpack://Handsontable/./src/utils/staticRegister.js","webpack://Handsontable/./src/eventManager.js","webpack://Handsontable/./src/focusManager.js","webpack://Handsontable/./src/utils/parseTable.js","webpack://Handsontable/../node_modules/core-js/modules/es.string.replace-all.js","webpack://Handsontable/../node_modules/core-js/internals/is-regexp.js","webpack://Handsontable/../node_modules/core-js/internals/regexp-get-flags.js","webpack://Handsontable/../node_modules/core-js/internals/regexp-flags.js","webpack://Handsontable/../node_modules/core-js/internals/get-substitution.js","webpack://Handsontable/./src/plugins/registry.js","webpack://Handsontable/./src/utils/dataStructures/priorityMap.js","webpack://Handsontable/./src/helpers/number.js","webpack://Handsontable/./src/utils/dataStructures/uniqueMap.js","webpack://Handsontable/./src/utils/dataStructures/uniqueSet.js","webpack://Handsontable/./src/renderers/registry.js","webpack://Handsontable/./src/validators/registry.js","webpack://Handsontable/./src/tableView.js","webpack://Handsontable/./src/3rdparty/walkontable/src/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.at.js","webpack://Handsontable/../node_modules/core-js/modules/es.string.at-alternative.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedAllColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedAllRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/viewportColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/viewportBase.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/viewportRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/cell/coords.js","webpack://Handsontable/./src/3rdparty/walkontable/src/cell/range.js","webpack://Handsontable/./src/3rdparty/walkontable/src/facade/core.js","webpack://Handsontable/./src/3rdparty/walkontable/src/core/core.js","webpack://Handsontable/./src/3rdparty/walkontable/src/event.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlays.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/bottomInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table.js","webpack://Handsontable/./src/3rdparty/walkontable/src/filter/column.js","webpack://Handsontable/./src/3rdparty/walkontable/src/filter/row.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/rowHeaders.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/view.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/viewSize.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/sharedView.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/_base.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/nodesPool.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/columnHeaders.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/colGroup.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/rows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/cells.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/table.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/column.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/columnStretching.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/row.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/_base.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/core/clone.js","webpack://Handsontable/./src/3rdparty/walkontable/src/core/_base.js","webpack://Handsontable/./src/3rdparty/walkontable/src/scroll.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/bottom.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/bottom.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/calculatedColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/inlineStart.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/inlineStart.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/calculatedRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/selection.js","webpack://Handsontable/./src/mixins/localHooks.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/border/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/manager.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.unscopables.flat.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/scanner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/border/border.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/topInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/topInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/top.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/top.js","webpack://Handsontable/./src/3rdparty/walkontable/src/settings.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/master.js","webpack://Handsontable/./src/3rdparty/walkontable/src/viewport.js","webpack://Handsontable/./src/selection/mouseEventHandler.js","webpack://Handsontable/./src/utils/rootInstance.js","webpack://Handsontable/./src/dataMap/dataSource.js","webpack://Handsontable/./src/helpers/data.js","webpack://Handsontable/./src/translations/index.js","webpack://Handsontable/./src/translations/indexMapper.js","webpack://Handsontable/./src/translations/maps/index.js","webpack://Handsontable/./src/translations/maps/hidingMap.js","webpack://Handsontable/./src/translations/maps/physicalIndexToValueMap.js","webpack://Handsontable/./src/translations/maps/indexMap.js","webpack://Handsontable/./src/translations/maps/utils/physicallyIndexed.js","webpack://Handsontable/./src/translations/maps/linkedPhysicalIndexToValueMap.js","webpack://Handsontable/./src/translations/maps/utils/indexesSequence.js","webpack://Handsontable/./src/translations/maps/utils/actionsOnIndexes.js","webpack://Handsontable/./src/translations/maps/trimmingMap.js","webpack://Handsontable/./src/translations/maps/indexesSequence.js","webpack://Handsontable/./src/translations/maps/utils/index.js","webpack://Handsontable/./src/translations/mapCollections/index.js","webpack://Handsontable/./src/translations/mapCollections/aggregatedCollection.js","webpack://Handsontable/./src/translations/mapCollections/mapCollection.js","webpack://Handsontable/./src/translations/changesObservable/observable.js","webpack://Handsontable/./src/translations/changesObservable/observer.js","webpack://Handsontable/./src/translations/changesObservable/utils.js","webpack://Handsontable/./src/i18n/registry.js","webpack://Handsontable/./src/i18n/utils.js","webpack://Handsontable/./src/i18n/phraseFormatters/index.js","webpack://Handsontable/./src/i18n/phraseFormatters/pluralize.js","webpack://Handsontable/./src/i18n/languages/en-US.js","webpack://Handsontable/./src/i18n/constants.js","webpack://Handsontable/./src/selection/index.js","webpack://Handsontable/./src/selection/selection.js","webpack://Handsontable/./src/selection/highlight/highlight.js","webpack://Handsontable/./src/selection/highlight/types/activeHeader.js","webpack://Handsontable/./src/selection/highlight/visualSelection.js","webpack://Handsontable/./src/selection/highlight/types/areaLayered.js","webpack://Handsontable/./src/selection/highlight/types/area.js","webpack://Handsontable/./src/selection/highlight/types/column.js","webpack://Handsontable/./src/selection/highlight/types/focus.js","webpack://Handsontable/./src/selection/highlight/types/customSelection.js","webpack://Handsontable/./src/selection/highlight/types/fill.js","webpack://Handsontable/./src/selection/highlight/types/header.js","webpack://Handsontable/./src/selection/highlight/types/row.js","webpack://Handsontable/./src/selection/range.js","webpack://Handsontable/./src/selection/transformation.js","webpack://Handsontable/./src/selection/utils.js","webpack://Handsontable/./src/dataMap/index.js","webpack://Handsontable/./src/dataMap/dataMap.js","webpack://Handsontable/./src/3rdparty/SheetClip/index.js","webpack://Handsontable/./src/3rdparty/SheetClip/SheetClip.js","webpack://Handsontable/./src/dataMap/metaManager/index.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/globalMeta.js","webpack://Handsontable/./src/dataMap/metaManager/utils.js","webpack://Handsontable/./src/cellTypes/registry.js","webpack://Handsontable/./src/dataMap/metaManager/metaSchema.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/tableMeta.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/columnMeta.js","webpack://Handsontable/./src/dataMap/metaManager/lazyFactoryMap.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/cellMeta.js","webpack://Handsontable/./src/dataMap/replaceData.js","webpack://Handsontable/./src/dataMap/metaManager/mods/dynamicCellMeta.js","webpack://Handsontable/./src/dataMap/metaManager/mods/extendMetaProperties.js","webpack://Handsontable/./src/core/index.js","webpack://Handsontable/./src/core/focusCatcher/index.js","webpack://Handsontable/./src/shortcutContexts/index.js","webpack://Handsontable/./src/shortcutContexts/editor.js","webpack://Handsontable/./src/shortcutContexts/constants.js","webpack://Handsontable/./src/shortcutContexts/commands/index.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/index.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeAndSave.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeAndSaveByArrowKeys.js","webpack://Handsontable/./src/editors/baseEditor/index.js","webpack://Handsontable/./src/editors/baseEditor/baseEditor.js","webpack://Handsontable/./src/mixins/hooksRefRegisterer.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeAndSaveByEnter.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeWithoutSaving.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/fastOpen.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/open.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/index.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/down.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/left.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/right.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toColumns.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostBottom.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostLeft.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostRight.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostTop.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toRows.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/up.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/index.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/down.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/inlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/inlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/left.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/right.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostBottom.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostLeft.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostRight.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostTop.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/up.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/emptySelectedCells.js","webpack://Handsontable/./src/shortcutContexts/commands/scrollToFocusedCell.js","webpack://Handsontable/./src/shortcutContexts/commands/selectAllCells.js","webpack://Handsontable/./src/shortcutContexts/commands/selectAllCellsAndHeaders.js","webpack://Handsontable/./src/shortcutContexts/commands/populateSelectedCellsData.js","webpack://Handsontable/./src/shortcutContexts/grid.js","webpack://Handsontable/./src/core/focusCatcher/focusDetector.js","webpack://Handsontable/./src/core/viewportScroll/index.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/columnHeaderScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/cornerHeaderScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/focusScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/multipleScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/noncontiguousScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/rowHeaderScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/singleScroll.js","webpack://Handsontable/./src/shortcuts/index.js","webpack://Handsontable/./src/shortcuts/manager.js","webpack://Handsontable/./src/shortcuts/context.js","webpack://Handsontable/./src/shortcuts/utils.js","webpack://Handsontable/./src/shortcuts/recorder.js","webpack://Handsontable/./src/shortcuts/keyObserver.js","webpack://Handsontable/./src/cellTypes/textType/index.js","webpack://Handsontable/./src/cellTypes/textType/textType.js","webpack://Handsontable/./src/editors/textEditor/index.js","webpack://Handsontable/./src/editors/textEditor/textEditor.js","webpack://Handsontable/./src/utils/autoResize.js","webpack://Handsontable/./src/editors/textEditor/caretPositioner.js","webpack://Handsontable/./src/renderers/textRenderer/index.js","webpack://Handsontable/./src/renderers/textRenderer/textRenderer.js","webpack://Handsontable/./src/renderers/baseRenderer/index.js","webpack://Handsontable/./src/renderers/baseRenderer/baseRenderer.js","webpack://Handsontable/./src/registry.js","webpack://Handsontable/./src/editors/index.js","webpack://Handsontable/./src/editors/autocompleteEditor/index.js","webpack://Handsontable/./src/editors/autocompleteEditor/autocompleteEditor.js","webpack://Handsontable/./src/editors/handsontableEditor/index.js","webpack://Handsontable/./src/editors/handsontableEditor/handsontableEditor.js","webpack://Handsontable/./src/editors/checkboxEditor/index.js","webpack://Handsontable/./src/editors/checkboxEditor/checkboxEditor.js","webpack://Handsontable/./src/editors/dateEditor/index.js","webpack://Handsontable/./src/editors/dateEditor/dateEditor.js","webpack://Handsontable/external umd {\"root\":\"Pikaday\",\"commonjs2\":\"@handsontable/pikaday\",\"commonjs\":\"@handsontable/pikaday\",\"amd\":\"@handsontable/pikaday\"}","webpack://Handsontable/../node_modules/@handsontable/pikaday/css/pikaday.css","webpack://Handsontable/./src/editors/dropdownEditor/index.js","webpack://Handsontable/./src/editors/dropdownEditor/dropdownEditor.js","webpack://Handsontable/./src/editors/numericEditor/index.js","webpack://Handsontable/./src/editors/numericEditor/numericEditor.js","webpack://Handsontable/./src/editors/passwordEditor/index.js","webpack://Handsontable/./src/editors/passwordEditor/passwordEditor.js","webpack://Handsontable/./src/editors/selectEditor/index.js","webpack://Handsontable/./src/editors/selectEditor/selectEditor.js","webpack://Handsontable/./src/editors/timeEditor/index.js","webpack://Handsontable/./src/editors/timeEditor/timeEditor.js","webpack://Handsontable/./src/renderers/index.js","webpack://Handsontable/./src/renderers/autocompleteRenderer/index.js","webpack://Handsontable/./src/renderers/autocompleteRenderer/autocompleteRenderer.js","webpack://Handsontable/./src/renderers/htmlRenderer/index.js","webpack://Handsontable/./src/renderers/htmlRenderer/htmlRenderer.js","webpack://Handsontable/./src/renderers/autocompleteRenderer/autocompleteRenderer.scss?d42b","webpack://Handsontable/./src/renderers/dropdownRenderer/index.js","webpack://Handsontable/./src/renderers/dropdownRenderer/dropdownRenderer.js","webpack://Handsontable/./src/renderers/checkboxRenderer/index.js","webpack://Handsontable/./src/renderers/checkboxRenderer/checkboxRenderer.js","webpack://Handsontable/./src/renderers/checkboxRenderer/checkboxRenderer.css?7a89","webpack://Handsontable/./src/renderers/handsontableRenderer/index.js","webpack://Handsontable/./src/renderers/handsontableRenderer/handsontableRenderer.js","webpack://Handsontable/./src/renderers/numericRenderer/index.js","webpack://Handsontable/./src/renderers/numericRenderer/numericRenderer.js","webpack://Handsontable/external umd {\"root\":\"numbro\",\"commonjs2\":\"numbro\",\"commonjs\":\"numbro\",\"amd\":\"numbro\"}","webpack://Handsontable/./src/renderers/passwordRenderer/index.js","webpack://Handsontable/./src/renderers/passwordRenderer/passwordRenderer.js","webpack://Handsontable/./src/renderers/selectRenderer/index.js","webpack://Handsontable/./src/renderers/selectRenderer/selectRenderer.js","webpack://Handsontable/./src/renderers/timeRenderer/index.js","webpack://Handsontable/./src/renderers/timeRenderer/timeRenderer.js","webpack://Handsontable/./src/validators/index.js","webpack://Handsontable/./src/validators/autocompleteValidator/index.js","webpack://Handsontable/./src/validators/autocompleteValidator/autocompleteValidator.js","webpack://Handsontable/./src/validators/dateValidator/index.js","webpack://Handsontable/./src/validators/dateValidator/dateValidator.js","webpack://Handsontable/./src/helpers/date.js","webpack://Handsontable/./src/validators/dropdownValidator/index.js","webpack://Handsontable/./src/validators/dropdownValidator/dropdownValidator.js","webpack://Handsontable/./src/validators/numericValidator/index.js","webpack://Handsontable/./src/validators/numericValidator/numericValidator.js","webpack://Handsontable/./src/validators/timeValidator/index.js","webpack://Handsontable/./src/validators/timeValidator/timeValidator.js","webpack://Handsontable/./src/cellTypes/index.js","webpack://Handsontable/./src/cellTypes/autocompleteType/index.js","webpack://Handsontable/./src/cellTypes/autocompleteType/autocompleteType.js","webpack://Handsontable/./src/cellTypes/checkboxType/index.js","webpack://Handsontable/./src/cellTypes/checkboxType/checkboxType.js","webpack://Handsontable/./src/cellTypes/dateType/index.js","webpack://Handsontable/./src/cellTypes/dateType/dateType.js","webpack://Handsontable/./src/renderers/dateRenderer/index.js","webpack://Handsontable/./src/renderers/dateRenderer/dateRenderer.js","webpack://Handsontable/./src/cellTypes/dropdownType/index.js","webpack://Handsontable/./src/cellTypes/dropdownType/dropdownType.js","webpack://Handsontable/./src/cellTypes/handsontableType/index.js","webpack://Handsontable/./src/cellTypes/handsontableType/handsontableType.js","webpack://Handsontable/./src/cellTypes/numericType/index.js","webpack://Handsontable/./src/cellTypes/numericType/numericType.js","webpack://Handsontable/./src/cellTypes/passwordType/index.js","webpack://Handsontable/./src/cellTypes/passwordType/passwordType.js","webpack://Handsontable/./src/cellTypes/selectType/index.js","webpack://Handsontable/./src/cellTypes/selectType/selectType.js","webpack://Handsontable/./src/cellTypes/timeType/index.js","webpack://Handsontable/./src/cellTypes/timeType/timeType.js","webpack://Handsontable/./src/plugins/index.js","webpack://Handsontable/./src/plugins/autoColumnSize/index.js","webpack://Handsontable/./src/plugins/autoColumnSize/autoColumnSize.js","webpack://Handsontable/./src/plugins/base/index.js","webpack://Handsontable/./src/plugins/base/base.js","webpack://Handsontable/./src/utils/ghostTable.js","webpack://Handsontable/./src/utils/samplesGenerator.js","webpack://Handsontable/./src/plugins/autofill/index.js","webpack://Handsontable/./src/plugins/autofill/autofill.js","webpack://Handsontable/./src/plugins/autofill/utils.js","webpack://Handsontable/./src/plugins/autoRowSize/index.js","webpack://Handsontable/./src/plugins/autoRowSize/autoRowSize.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/index.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/maps/looseBindsMap.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/maps/strictBindsMap.js","webpack://Handsontable/./src/plugins/collapsibleColumns/index.js","webpack://Handsontable/./src/plugins/collapsibleColumns/collapsibleColumns.js","webpack://Handsontable/./src/plugins/collapsibleColumns/collapsibleColumns.scss?7990","webpack://Handsontable/./src/plugins/columnSorting/index.js","webpack://Handsontable/./src/plugins/columnSorting/columnSorting.js","webpack://Handsontable/./src/plugins/columnSorting/columnStatesManager.js","webpack://Handsontable/./src/plugins/columnSorting/utils.js","webpack://Handsontable/./src/plugins/columnSorting/sortService/index.js","webpack://Handsontable/./src/plugins/columnSorting/sortService/registry.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/default.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/numeric.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/checkbox.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/date.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/time.js","webpack://Handsontable/./src/plugins/columnSorting/sortService/engine.js","webpack://Handsontable/./src/plugins/columnSorting/domHelpers.js","webpack://Handsontable/./src/plugins/columnSorting/rootComparator.js","webpack://Handsontable/./src/plugins/columnSorting/columnSorting.scss?27f2","webpack://Handsontable/./src/plugins/columnSummary/index.js","webpack://Handsontable/./src/plugins/columnSummary/columnSummary.js","webpack://Handsontable/./src/plugins/columnSummary/endpoints.js","webpack://Handsontable/./src/plugins/columnSummary/utils.js","webpack://Handsontable/./src/plugins/comments/index.js","webpack://Handsontable/./src/plugins/comments/comments.js","webpack://Handsontable/./src/plugins/comments/commentEditor.js","webpack://Handsontable/./src/plugins/comments/editorResizeObserver.js","webpack://Handsontable/./src/plugins/comments/displaySwitch.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/index.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/alignment.js","webpack://Handsontable/./src/plugins/contextMenu/utils.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/separator.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/clearColumn.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/columnLeft.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/columnRight.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/readOnly.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/redo.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/removeColumn.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/removeRow.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/rowAbove.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/rowBelow.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/noItems.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/undo.js","webpack://Handsontable/./src/plugins/comments/contextMenuItem/addEditComment.js","webpack://Handsontable/./src/plugins/comments/contextMenuItem/removeComment.js","webpack://Handsontable/./src/plugins/comments/contextMenuItem/readOnlyComment.js","webpack://Handsontable/./src/plugins/comments/comments.scss?d91f","webpack://Handsontable/./src/plugins/contextMenu/index.js","webpack://Handsontable/./src/plugins/contextMenu/contextMenu.js","webpack://Handsontable/./src/plugins/contextMenu/commandExecutor.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.unshift.js","webpack://Handsontable/../node_modules/core-js/internals/delete-property-or-throw.js","webpack://Handsontable/./src/plugins/contextMenu/itemsFactory.js","webpack://Handsontable/./src/plugins/contextMenu/menu/index.js","webpack://Handsontable/./src/plugins/contextMenu/menu/menu.js","webpack://Handsontable/./src/plugins/contextMenu/menu/positioner.js","webpack://Handsontable/./src/plugins/contextMenu/menu/cursor.js","webpack://Handsontable/./src/plugins/contextMenu/menu/navigator.js","webpack://Handsontable/./src/utils/paginator.js","webpack://Handsontable/./src/plugins/contextMenu/menu/utils.js","webpack://Handsontable/./src/plugins/contextMenu/menu/shortcuts.js","webpack://Handsontable/./src/plugins/contextMenu/menu/defaultShortcutsList.js","webpack://Handsontable/./src/plugins/contextMenu/menu/menuItemRenderer.js","webpack://Handsontable/./src/plugins/contextMenu/contextMenu.scss?2292","webpack://Handsontable/./src/plugins/copyPaste/index.js","webpack://Handsontable/./src/plugins/copyPaste/copyPaste.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copy.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/cut.js","webpack://Handsontable/./src/plugins/copyPaste/pasteEvent.js","webpack://Handsontable/./src/plugins/copyPaste/clipboardData.js","webpack://Handsontable/./src/plugins/copyPaste/copyableRanges.js","webpack://Handsontable/./src/plugins/copyPaste/copyPaste.css?fe78","webpack://Handsontable/./src/plugins/customBorders/index.js","webpack://Handsontable/./src/plugins/customBorders/customBorders.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/index.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/bottom.js","webpack://Handsontable/./src/plugins/customBorders/utils.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/left.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/noBorders.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/right.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/top.js","webpack://Handsontable/./src/plugins/dragToScroll/index.js","webpack://Handsontable/./src/plugins/dragToScroll/dragToScroll.js","webpack://Handsontable/./src/plugins/dropdownMenu/index.js","webpack://Handsontable/./src/plugins/dropdownMenu/dropdownMenu.js","webpack://Handsontable/./src/plugins/dropdownMenu/dropdownMenu.scss?41d0","webpack://Handsontable/./src/plugins/exportFile/index.js","webpack://Handsontable/./src/plugins/exportFile/exportFile.js","webpack://Handsontable/./src/plugins/exportFile/dataProvider.js","webpack://Handsontable/./src/plugins/exportFile/typeFactory.js","webpack://Handsontable/./src/plugins/exportFile/types/csv.js","webpack://Handsontable/./src/plugins/exportFile/types/_base.js","webpack://Handsontable/./src/plugins/filters/index.js","webpack://Handsontable/./src/plugins/filters/filters.js","webpack://Handsontable/./src/plugins/filters/component/condition.js","webpack://Handsontable/./src/plugins/filters/component/_base.js","webpack://Handsontable/./src/plugins/filters/constants.js","webpack://Handsontable/./src/plugins/filters/conditionRegisterer.js","webpack://Handsontable/./src/plugins/filters/condition/none.js","webpack://Handsontable/./src/plugins/filters/condition/empty.js","webpack://Handsontable/./src/plugins/filters/condition/notEmpty.js","webpack://Handsontable/./src/plugins/filters/condition/equal.js","webpack://Handsontable/./src/plugins/filters/condition/notEqual.js","webpack://Handsontable/./src/plugins/filters/condition/greaterThan.js","webpack://Handsontable/./src/plugins/filters/condition/greaterThanOrEqual.js","webpack://Handsontable/./src/plugins/filters/condition/lessThan.js","webpack://Handsontable/./src/plugins/filters/condition/lessThanOrEqual.js","webpack://Handsontable/./src/plugins/filters/condition/between.js","webpack://Handsontable/./src/plugins/filters/condition/date/after.js","webpack://Handsontable/./src/plugins/filters/condition/date/before.js","webpack://Handsontable/./src/plugins/filters/condition/notBetween.js","webpack://Handsontable/./src/plugins/filters/condition/beginsWith.js","webpack://Handsontable/./src/plugins/filters/condition/endsWith.js","webpack://Handsontable/./src/plugins/filters/condition/contains.js","webpack://Handsontable/./src/plugins/filters/condition/notContains.js","webpack://Handsontable/./src/plugins/filters/condition/date/tomorrow.js","webpack://Handsontable/./src/plugins/filters/condition/date/today.js","webpack://Handsontable/./src/plugins/filters/condition/date/yesterday.js","webpack://Handsontable/./src/plugins/filters/condition/byValue.js","webpack://Handsontable/./src/plugins/filters/utils.js","webpack://Handsontable/./src/plugins/filters/condition/true.js","webpack://Handsontable/./src/plugins/filters/condition/false.js","webpack://Handsontable/./src/plugins/filters/logicalOperations/conjunction.js","webpack://Handsontable/./src/plugins/filters/logicalOperationRegisterer.js","webpack://Handsontable/./src/plugins/filters/logicalOperations/disjunction.js","webpack://Handsontable/./src/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js","webpack://Handsontable/./src/plugins/filters/ui/input.js","webpack://Handsontable/./src/plugins/filters/ui/_base.js","webpack://Handsontable/./src/plugins/filters/ui/select.js","webpack://Handsontable/./src/plugins/filters/component/operators.js","webpack://Handsontable/./src/plugins/filters/ui/radioInput.js","webpack://Handsontable/./src/plugins/filters/component/value.js","webpack://Handsontable/./src/plugins/filters/ui/multipleSelect.js","webpack://Handsontable/./src/plugins/filters/ui/link.js","webpack://Handsontable/./src/plugins/filters/component/actionBar.js","webpack://Handsontable/./src/plugins/filters/conditionCollection.js","webpack://Handsontable/./src/plugins/filters/dataFilter.js","webpack://Handsontable/./src/plugins/filters/conditionUpdateObserver.js","webpack://Handsontable/./src/plugins/filters/menu/focusController.js","webpack://Handsontable/./src/plugins/filters/menu/focusNavigator.js","webpack://Handsontable/./src/plugins/filters/filters.scss?c3f1","webpack://Handsontable/./src/plugins/formulas/index.js","webpack://Handsontable/./src/plugins/formulas/formulas.js","webpack://Handsontable/./src/plugins/formulas/engine/register.js","webpack://Handsontable/./src/plugins/formulas/engine/settings.js","webpack://Handsontable/./src/plugins/formulas/utils.js","webpack://Handsontable/./src/plugins/formulas/indexSyncer/index.js","webpack://Handsontable/./src/plugins/formulas/indexSyncer/axisSyncer.js","webpack://Handsontable/./src/helpers/moves.js","webpack://Handsontable/./src/plugins/hiddenColumns/index.js","webpack://Handsontable/./src/plugins/hiddenColumns/hiddenColumns.js","webpack://Handsontable/./src/plugins/hiddenColumns/contextMenuItem/hideColumn.js","webpack://Handsontable/./src/plugins/hiddenColumns/contextMenuItem/showColumn.js","webpack://Handsontable/./src/plugins/hiddenColumns/hiddenColumns.scss?a823","webpack://Handsontable/./src/plugins/hiddenRows/index.js","webpack://Handsontable/./src/plugins/hiddenRows/hiddenRows.js","webpack://Handsontable/./src/plugins/hiddenRows/contextMenuItem/hideRow.js","webpack://Handsontable/./src/plugins/hiddenRows/contextMenuItem/showRow.js","webpack://Handsontable/./src/plugins/hiddenRows/hiddenRows.css?996c","webpack://Handsontable/./src/plugins/manualColumnFreeze/index.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/manualColumnFreeze.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/manualColumnFreeze.css?d00b","webpack://Handsontable/./src/plugins/manualColumnMove/index.js","webpack://Handsontable/./src/plugins/manualColumnMove/manualColumnMove.js","webpack://Handsontable/./src/plugins/manualColumnMove/ui/backlight.js","webpack://Handsontable/./src/plugins/manualColumnMove/ui/_base.js","webpack://Handsontable/./src/plugins/manualColumnMove/ui/guideline.js","webpack://Handsontable/./src/plugins/manualColumnMove/manualColumnMove.css?1dcc","webpack://Handsontable/./src/plugins/manualColumnResize/index.js","webpack://Handsontable/./src/plugins/manualColumnResize/manualColumnResize.js","webpack://Handsontable/./src/plugins/manualRowMove/index.js","webpack://Handsontable/./src/plugins/manualRowMove/manualRowMove.js","webpack://Handsontable/./src/plugins/manualRowMove/ui/backlight.js","webpack://Handsontable/./src/plugins/manualRowMove/ui/_base.js","webpack://Handsontable/./src/plugins/manualRowMove/ui/guideline.js","webpack://Handsontable/./src/plugins/manualRowMove/manualRowMove.css?2792","webpack://Handsontable/./src/plugins/manualRowResize/index.js","webpack://Handsontable/./src/plugins/manualRowResize/manualRowResize.js","webpack://Handsontable/./src/plugins/mergeCells/index.js","webpack://Handsontable/./src/plugins/mergeCells/mergeCells.js","webpack://Handsontable/./src/plugins/mergeCells/cellsCollection.js","webpack://Handsontable/./src/plugins/mergeCells/cellCoords.js","webpack://Handsontable/./src/plugins/mergeCells/calculations/autofill.js","webpack://Handsontable/./src/plugins/mergeCells/calculations/selection.js","webpack://Handsontable/./src/plugins/mergeCells/contextMenuItem/toggleMerge.js","webpack://Handsontable/./src/plugins/mergeCells/mergeCells.css?f414","webpack://Handsontable/./src/plugins/mergeCells/focusOrder.js","webpack://Handsontable/./src/utils/dataStructures/linkedList.js","webpack://Handsontable/./src/plugins/mergeCells/renderer.js","webpack://Handsontable/./src/plugins/multiColumnSorting/index.js","webpack://Handsontable/./src/plugins/multiColumnSorting/multiColumnSorting.js","webpack://Handsontable/./src/plugins/multiColumnSorting/rootComparator.js","webpack://Handsontable/./src/plugins/multiColumnSorting/utils.js","webpack://Handsontable/./src/plugins/multiColumnSorting/domHelpers.js","webpack://Handsontable/./src/plugins/multiColumnSorting/multiColumnSorting.scss?c159","webpack://Handsontable/./src/plugins/multipleSelectionHandles/index.js","webpack://Handsontable/./src/plugins/multipleSelectionHandles/multipleSelectionHandles.js","webpack://Handsontable/./src/plugins/nestedHeaders/index.js","webpack://Handsontable/./src/plugins/nestedHeaders/nestedHeaders.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/index.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/sourceSettings.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/settingsNormalizer.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/utils.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/headersTree.js","webpack://Handsontable/./src/utils/dataStructures/tree.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/index.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/expand.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/utils/tree.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/hideColumn.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/showColumn.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/matrixGenerator.js","webpack://Handsontable/./src/plugins/nestedHeaders/utils/ghostTable.js","webpack://Handsontable/./src/plugins/nestedHeaders/nestedHeaders.css?b05f","webpack://Handsontable/./src/plugins/nestedRows/index.js","webpack://Handsontable/./src/plugins/nestedRows/nestedRows.js","webpack://Handsontable/./src/plugins/nestedRows/data/dataManager.js","webpack://Handsontable/./src/plugins/nestedRows/ui/collapsing.js","webpack://Handsontable/./src/plugins/nestedRows/ui/_base.js","webpack://Handsontable/./src/plugins/nestedRows/ui/headers.js","webpack://Handsontable/./src/plugins/nestedRows/ui/contextMenu.js","webpack://Handsontable/./src/plugins/nestedRows/utils/rowMoveController.js","webpack://Handsontable/./src/plugins/nestedRows/nestedRows.scss?c6f6","webpack://Handsontable/./src/plugins/persistentState/index.js","webpack://Handsontable/./src/plugins/persistentState/persistentState.js","webpack://Handsontable/./src/plugins/persistentState/storage.js","webpack://Handsontable/./src/plugins/search/index.js","webpack://Handsontable/./src/plugins/search/search.js","webpack://Handsontable/./src/plugins/touchScroll/index.js","webpack://Handsontable/./src/plugins/touchScroll/touchScroll.js","webpack://Handsontable/./src/plugins/trimRows/index.js","webpack://Handsontable/./src/plugins/trimRows/trimRows.js","webpack://Handsontable/./src/plugins/undoRedo/index.js","webpack://Handsontable/./src/plugins/undoRedo/undoRedo.js","webpack://Handsontable/../node_modules/core-js/modules/es.object.from-entries.js","webpack://Handsontable/../node_modules/core-js/internals/iterate.js","webpack://Handsontable/../node_modules/core-js/internals/is-array-iterator-method.js","webpack://Handsontable/../node_modules/core-js/internals/iterators.js","webpack://Handsontable/../node_modules/core-js/internals/get-iterator.js","webpack://Handsontable/../node_modules/core-js/internals/get-iterator-method.js","webpack://Handsontable/../node_modules/core-js/internals/create-property.js","webpack://Handsontable/./src/helpers/wrappers/jquery.js","webpack://Handsontable/webpack/bootstrap","webpack://Handsontable/webpack/runtime/make namespace object","webpack://Handsontable/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"dompurify\"), require(\"@handsontable/pikaday\"), require(\"moment\"), require(\"numbro\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Handsontable\", [\"dompurify\", \"@handsontable/pikaday\", \"moment\", \"numbro\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Handsontable\"] = factory(require(\"dompurify\"), require(\"@handsontable/pikaday\"), require(\"moment\"), require(\"numbro\"));\n\telse\n\t\troot[\"Handsontable\"] = factory(root[\"DOMPurify\"], root[\"Pikaday\"], root[\"moment\"], root[\"numbro\"]);\n})(typeof self !== 'undefined' ? self : this, (__WEBPACK_EXTERNAL_MODULE__133__, __WEBPACK_EXTERNAL_MODULE__402__, __WEBPACK_EXTERNAL_MODULE__135__, __WEBPACK_EXTERNAL_MODULE__429__) => {\nreturn ","function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import './css/bootstrap.css';\nimport './3rdparty/walkontable/css/walkontable.scss';\nimport './css/handsontable.scss';\nimport './css/mobile.handsontable.scss';\n\nimport Core from './core';\nimport { rootInstanceSymbol } from './utils/rootInstance';\nimport { metaSchemaFactory } from './dataMap';\nimport Hooks from './pluginHooks';\n\n// FIXME: Bug in eslint-plugin-import: https://github.com/benmosher/eslint-plugin-import/issues/1883\n/* eslint-disable import/named */\nimport {\n  dictionaryKeys,\n  getTranslatedPhrase,\n  registerLanguageDictionary,\n  getLanguagesDictionaries,\n  getLanguageDictionary\n} from './i18n/registry';\n/* eslint-enable import/named */\nimport { registerCellType } from './cellTypes/registry';\nimport { TextCellType } from './cellTypes/textType';\nimport { BaseEditor } from './editors/baseEditor';\nimport { CellCoords, CellRange } from './3rdparty/walkontable/src';\n\n// register default mandatory cell type for the Base package\nregisterCellType(TextCellType);\n\n// export the `BaseEditor` class to the Handsontable global namespace\nHandsontable.editors = {\n  BaseEditor\n};\n\n/**\n * @param {HTMLElement} rootElement The element to which the Handsontable instance is injected.\n * @param {object} userSettings The user defined options.\n * @returns {Core}\n */\nfunction Handsontable(rootElement, userSettings) {\n  const instance = new Core(rootElement, userSettings || {}, rootInstanceSymbol);\n\n  instance.init();\n\n  return instance;\n}\n\nHandsontable.Core = function(rootElement, userSettings = {}) {\n  return new Core(rootElement, userSettings, rootInstanceSymbol);\n};\n\nHandsontable.DefaultSettings = metaSchemaFactory();\nHandsontable.hooks = Hooks.getSingleton();\nHandsontable.CellCoords = CellCoords;\nHandsontable.CellRange = CellRange;\nHandsontable.packageName = 'handsontable';\nHandsontable.buildDate = process.env.HOT_BUILD_DATE;\nHandsontable.version = process.env.HOT_VERSION;\n\nHandsontable.languages = {\n  dictionaryKeys,\n  getLanguageDictionary,\n  getLanguagesDictionaries,\n  registerLanguageDictionary,\n  getTranslatedPhrase,\n};\n\nexport {\n  CellCoords,\n  CellRange,\n};\nexport default Handsontable;\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","import { addClass, empty, observeVisibilityChangeOnce, removeClass } from './helpers/dom/element';\nimport { isFunction } from './helpers/function';\nimport { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty } from './helpers/mixed';\nimport { isMobileBrowser, isIpadOS } from './helpers/browser';\nimport EditorManager from './editorManager';\nimport EventManager from './eventManager';\nimport {\n  deepClone,\n  duckSchema,\n  isObjectEqual,\n  isObject,\n  deepObjectSize,\n  hasOwnProperty,\n  createObjectPropListener,\n  objectEach\n} from './helpers/object';\nimport { FocusManager } from './focusManager';\nimport { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray, pivot } from './helpers/array';\nimport { instanceToHTML } from './utils/parseTable';\nimport { getPlugin, getPluginsNames } from './plugins/registry';\nimport { getRenderer } from './renderers/registry';\nimport { getEditor } from './editors/registry';\nimport { getValidator } from './validators/registry';\nimport { randomString, toUpperCaseFirst } from './helpers/string';\nimport { rangeEach, rangeEachReverse, isNumericLike } from './helpers/number';\nimport TableView from './tableView';\nimport DataSource from './dataMap/dataSource';\nimport { spreadsheetColumnLabel } from './helpers/data';\nimport { IndexMapper } from './translations';\nimport { registerAsRootInstance, hasValidParameter, isRootInstance } from './utils/rootInstance';\nimport { DEFAULT_COLUMN_WIDTH } from './3rdparty/walkontable/src';\nimport Hooks from './pluginHooks';\nimport { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from './i18n/registry';\nimport { warnUserAboutLanguageRegistration, normalizeLanguageCode } from './i18n/utils';\nimport { Selection } from './selection';\nimport { MetaManager, DynamicCellMetaMod, ExtendMetaPropertiesMod, replaceData } from './dataMap';\nimport {\n  installFocusCatcher,\n  createViewportScroller,\n} from './core/index';\nimport { createUniqueMap } from './utils/dataStructures/uniqueMap';\nimport { createShortcutManager } from './shortcuts';\nimport { registerAllShortcutContexts } from './shortcutContexts';\n\nlet activeGuid = null;\n\n/**\n * Keeps the collection of the all Handsontable instances created on the same page. The\n * list is then used to trigger the \"afterUnlisten\" hook when the \"listen()\" method was\n * called on another instance.\n *\n * @type {Map<string, Core>}\n */\nconst foreignHotInstances = new Map();\n\n/**\n * A set of deprecated feature names.\n *\n * @type {Set<string>}\n */\n// eslint-disable-next-line no-unused-vars\nconst deprecationWarns = new Set();\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * Handsontable constructor.\n *\n * @core\n * @class Core\n * @description\n *\n * The `Handsontable` class (known as the `Core`) lets you modify the grid's behavior by using Handsontable's public API methods.\n *\n * ::: only-for react\n * To use these methods, associate a Handsontable instance with your instance\n * of the [`HotTable` component](@/guides/getting-started/installation/installation.md#_4-use-the-hottable-component),\n * by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods/react-methods.md) page).\n * :::\n *\n * ## How to call a method\n *\n * ::: only-for javascript\n * ```js\n * // create a Handsontable instance\n * const hot = new Handsontable(document.getElementById('example'), options);\n *\n * // call a method\n * hot.setDataAtCell(0, 0, 'new value');\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * import { useRef } from 'react';\n *\n * const hotTableComponent = useRef(null);\n *\n * <HotTable\n *   // associate your `HotTable` component with a Handsontable instance\n *   ref={hotTableComponent}\n *   settings={options}\n * />\n *\n * // access the Handsontable instance, under the `.current.hotInstance` property\n * // call a method\n * hotTableComponent.current.hotInstance.setDataAtCell(0, 0, 'new value');\n * ```\n * :::\n *\n * @param {HTMLElement} rootElement The element to which the Handsontable instance is injected.\n * @param {object} userSettings The user defined options.\n * @param {boolean} [rootInstanceSymbol=false] Indicates if the instance is root of all later instances created.\n */\nexport default function Core(rootElement, userSettings, rootInstanceSymbol = false) {\n  let instance = this;\n\n  const eventManager = new EventManager(instance);\n  let datamap;\n  let dataSource;\n  let grid;\n  let editorManager;\n  let focusManager;\n  let viewportScroller;\n  let firstRun = true;\n\n  if (hasValidParameter(rootInstanceSymbol)) {\n    registerAsRootInstance(this);\n  }\n\n  // TODO: check if references to DOM elements should be move to UI layer (Walkontable)\n  /**\n   * Reference to the container element.\n   *\n   * @private\n   * @type {HTMLElement}\n   */\n  this.rootElement = rootElement;\n  /**\n   * The nearest document over container.\n   *\n   * @private\n   * @type {Document}\n   */\n  this.rootDocument = rootElement.ownerDocument;\n  /**\n   * Window object over container's document.\n   *\n   * @private\n   * @type {Window}\n   */\n  this.rootWindow = this.rootDocument.defaultView;\n  /**\n   * A boolean to tell if the Handsontable has been fully destroyed. This is set to `true`\n   * after `afterDestroy` hook is called.\n   *\n   * @memberof Core#\n   * @member isDestroyed\n   * @type {boolean}\n   */\n  this.isDestroyed = false;\n  /**\n   * The counter determines how many times the render suspending was called. It allows\n   * tracking the nested suspending calls. For each render suspend resuming call the\n   * counter is decremented. The value equal to 0 means the render suspending feature\n   * is disabled.\n   *\n   * @private\n   * @type {number}\n   */\n  this.renderSuspendedCounter = 0;\n  /**\n   * The counter determines how many times the execution suspending was called. It allows\n   * tracking the nested suspending calls. For each execution suspend resuming call the\n   * counter is decremented. The value equal to 0 means the execution suspending feature\n   * is disabled.\n   *\n   * @private\n   * @type {number}\n   */\n  this.executionSuspendedCounter = 0;\n\n  const layoutDirection = userSettings?.layoutDirection ?? 'inherit';\n  const rootElementDirection = ['rtl', 'ltr'].includes(layoutDirection) ?\n    layoutDirection : this.rootWindow.getComputedStyle(this.rootElement).direction;\n\n  this.rootElement.setAttribute('dir', rootElementDirection);\n\n  /**\n   * Checks if the grid is rendered using the right-to-left layout direction.\n   *\n   * @since 12.0.0\n   * @memberof Core#\n   * @function isRtl\n   * @returns {boolean} True if RTL.\n   */\n  this.isRtl = function() {\n    return rootElementDirection === 'rtl';\n  };\n\n  /**\n   * Checks if the grid is rendered using the left-to-right layout direction.\n   *\n   * @since 12.0.0\n   * @memberof Core#\n   * @function isLtr\n   * @returns {boolean} True if LTR.\n   */\n  this.isLtr = function() {\n    return !instance.isRtl();\n  };\n\n  /**\n   * Returns 1 for LTR; -1 for RTL. Useful for calculations.\n   *\n   * @since 12.0.0\n   * @memberof Core#\n   * @function getDirectionFactor\n   * @returns {number} Returns 1 for LTR; -1 for RTL.\n   */\n  this.getDirectionFactor = function() {\n    return instance.isLtr() ? 1 : -1;\n  };\n\n  userSettings.language = getValidLanguageCode(userSettings.language);\n\n  const metaManager = new MetaManager(instance, userSettings, [\n    DynamicCellMetaMod,\n    ExtendMetaPropertiesMod,\n  ]);\n  const tableMeta = metaManager.getTableMeta();\n  const globalMeta = metaManager.getGlobalMeta();\n  const pluginsRegistry = createUniqueMap();\n\n  this.container = this.rootDocument.createElement('div');\n  this.renderCall = false;\n\n  rootElement.insertBefore(this.container, rootElement.firstChild);\n\n  if (isRootInstance(this)) {\n    _injectProductInfo(userSettings.licenseKey, rootElement);\n  }\n\n  this.guid = `ht_${randomString()}`; // this is the namespace for global events\n\n  foreignHotInstances.set(this.guid, this);\n\n  /**\n   * Instance of index mapper which is responsible for managing the column indexes.\n   *\n   * @memberof Core#\n   * @member columnIndexMapper\n   * @type {IndexMapper}\n   */\n  this.columnIndexMapper = new IndexMapper();\n  /**\n   * Instance of index mapper which is responsible for managing the row indexes.\n   *\n   * @memberof Core#\n   * @member rowIndexMapper\n   * @type {IndexMapper}\n   */\n  this.rowIndexMapper = new IndexMapper();\n\n  this.columnIndexMapper.addLocalHook('indexesSequenceChange', (source) => {\n    instance.runHooks('afterColumnSequenceChange', source);\n  });\n\n  this.rowIndexMapper.addLocalHook('indexesSequenceChange', (source) => {\n    instance.runHooks('afterRowSequenceChange', source);\n  });\n\n  dataSource = new DataSource(instance);\n\n  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {\n    this.rootElement.id = this.guid; // if root element does not have an id, assign a random id\n  }\n\n  const visualToRenderableCoords = (coords) => {\n    const { row: visualRow, col: visualColumn } = coords;\n\n    return instance._createCellCoords(\n      // We just store indexes for rows and columns without headers.\n      visualRow >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRow) : visualRow,\n      visualColumn >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumn) : visualColumn\n    );\n  };\n\n  const renderableToVisualCoords = (coords) => {\n    const { row: renderableRow, col: renderableColumn } = coords;\n\n    return instance._createCellCoords(\n      // We just store indexes for rows and columns without headers.\n      renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow,\n      renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len\n    );\n  };\n\n  const findFirstNonHiddenRenderableRow = (visualRowFrom, visualRowTo) => {\n    const dir = visualRowTo > visualRowFrom ? 1 : -1;\n    const minIndex = Math.min(visualRowFrom, visualRowTo);\n    const maxIndex = Math.max(visualRowFrom, visualRowTo);\n    const rowIndex = instance.rowIndexMapper.getNearestNotHiddenIndex(visualRowFrom, dir);\n\n    if (rowIndex === null || dir === 1 && rowIndex > maxIndex || dir === -1 && rowIndex < minIndex) {\n      return null;\n    }\n\n    return rowIndex >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(rowIndex) : rowIndex;\n  };\n\n  const findFirstNonHiddenRenderableColumn = (visualColumnFrom, visualColumnTo) => {\n    const dir = visualColumnTo > visualColumnFrom ? 1 : -1;\n    const minIndex = Math.min(visualColumnFrom, visualColumnTo);\n    const maxIndex = Math.max(visualColumnFrom, visualColumnTo);\n    const columnIndex = instance.columnIndexMapper.getNearestNotHiddenIndex(visualColumnFrom, dir);\n\n    if (columnIndex === null || dir === 1 && columnIndex > maxIndex || dir === -1 && columnIndex < minIndex) {\n      return null;\n    }\n\n    return columnIndex >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(columnIndex) : columnIndex;\n  };\n\n  let selection = new Selection(tableMeta, {\n    rowIndexMapper: instance.rowIndexMapper,\n    columnIndexMapper: instance.columnIndexMapper,\n    countCols: () => instance.countCols(),\n    countRows: () => instance.countRows(),\n    propToCol: prop => datamap.propToCol(prop),\n    isEditorOpened: () => (instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false),\n    countRenderableColumns: () => this.view.countRenderableColumns(),\n    countRenderableRows: () => this.view.countRenderableRows(),\n    countRowHeaders: () => this.countRowHeaders(),\n    countColHeaders: () => this.countColHeaders(),\n    countRenderableRowsInRange: (...args) => this.view.countRenderableRowsInRange(...args),\n    countRenderableColumnsInRange: (...args) => this.view.countRenderableColumnsInRange(...args),\n    getShortcutManager: () => instance.getShortcutManager(),\n    createCellCoords: (row, column) => instance._createCellCoords(row, column),\n    createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),\n    visualToRenderableCoords,\n    renderableToVisualCoords,\n    findFirstNonHiddenRenderableRow,\n    findFirstNonHiddenRenderableColumn,\n    isDisabledCellSelection: (visualRow, visualColumn) => {\n      if (visualRow < 0 || visualColumn < 0) {\n        return instance.getSettings().disableVisualSelection;\n      }\n\n      return instance.getCellMeta(visualRow, visualColumn).disableVisualSelection;\n    }\n  });\n\n  this.selection = selection;\n\n  const onIndexMapperCacheUpdate = ({ hiddenIndexesChanged }) => {\n    if (hiddenIndexesChanged) {\n      this.selection.commit();\n    }\n  };\n\n  this.columnIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);\n  this.rowIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);\n\n  this.selection.addLocalHook('afterSetRangeEnd', (cellCoords, isLastSelectionLayer) => {\n    const preventScrolling = createObjectPropListener(false);\n    const selectionRange = this.selection.getSelectedRange();\n    const { from, to } = selectionRange.current();\n    const selectionLayerLevel = selectionRange.size() - 1;\n\n    this.runHooks('afterSelection',\n      from.row,\n      from.col,\n      to.row,\n      to.col,\n      preventScrolling,\n      selectionLayerLevel\n    );\n    this.runHooks('afterSelectionByProp',\n      from.row,\n      instance.colToProp(from.col),\n      to.row,\n      instance.colToProp(to.col),\n      preventScrolling,\n      selectionLayerLevel\n    );\n\n    if (\n      isLastSelectionLayer &&\n      (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value)\n    ) {\n      viewportScroller.scrollTo(cellCoords);\n    }\n\n    const isSelectedByRowHeader = selection.isSelectedByRowHeader();\n    const isSelectedByColumnHeader = selection.isSelectedByColumnHeader();\n\n    // @TODO: These CSS classes are no longer needed anymore. They are used only as a indicator of the selected\n    // rows/columns in the MergedCells plugin (via border.js#L520 in the walkontable module). After fixing\n    // the Border class this should be removed.\n    if (isSelectedByRowHeader && isSelectedByColumnHeader) {\n      addClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n    } else if (isSelectedByRowHeader) {\n      removeClass(this.rootElement, 'ht__selection--columns');\n      addClass(this.rootElement, 'ht__selection--rows');\n\n    } else if (isSelectedByColumnHeader) {\n      removeClass(this.rootElement, 'ht__selection--rows');\n      addClass(this.rootElement, 'ht__selection--columns');\n\n    } else {\n      removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n    }\n\n    if (selection.getSelectionSource() !== 'shift') {\n      editorManager.closeEditor(null);\n    }\n\n    instance.view.render();\n    editorManager.prepareEditor();\n  });\n\n  this.selection.addLocalHook('beforeSetFocus', (cellCoords) => {\n    this.runHooks('beforeSelectionFocusSet', cellCoords.row, cellCoords.col);\n  });\n\n  this.selection.addLocalHook('afterSetFocus', (cellCoords) => {\n    const preventScrolling = createObjectPropListener(false);\n\n    this.runHooks('afterSelectionFocusSet', cellCoords.row, cellCoords.col, preventScrolling);\n\n    if (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value) {\n      viewportScroller.scrollTo(cellCoords);\n    }\n\n    editorManager.closeEditor();\n    instance.view.render();\n    editorManager.prepareEditor();\n  });\n\n  this.selection.addLocalHook('afterSelectionFinished', (cellRanges) => {\n    const selectionLayerLevel = cellRanges.length - 1;\n    const { from, to } = cellRanges[selectionLayerLevel];\n\n    this.runHooks('afterSelectionEnd',\n      from.row, from.col, to.row, to.col, selectionLayerLevel);\n    this.runHooks('afterSelectionEndByProp',\n      from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);\n  });\n\n  this.selection.addLocalHook('afterIsMultipleSelection', (isMultiple) => {\n    const changedIsMultiple = this.runHooks('afterIsMultipleSelection', isMultiple.value);\n\n    if (isMultiple.value) {\n      isMultiple.value = changedIsMultiple;\n    }\n  });\n\n  this.selection.addLocalHook('afterDeselect', () => {\n    editorManager.closeEditor();\n    instance.view.render();\n\n    removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n    this.runHooks('afterDeselect');\n  });\n\n  this.selection\n    .addLocalHook('beforeHighlightSet', () => this.runHooks('beforeSelectionHighlightSet'))\n    .addLocalHook('beforeSetRangeStart', (...args) => this.runHooks('beforeSetRangeStart', ...args))\n    .addLocalHook('beforeSetRangeStartOnly', (...args) => this.runHooks('beforeSetRangeStartOnly', ...args))\n    .addLocalHook('beforeSetRangeEnd', (...args) => this.runHooks('beforeSetRangeEnd', ...args))\n    .addLocalHook('beforeSelectColumns', (...args) => this.runHooks('beforeSelectColumns', ...args))\n    .addLocalHook('afterSelectColumns', (...args) => this.runHooks('afterSelectColumns', ...args))\n    .addLocalHook('beforeSelectRows', (...args) => this.runHooks('beforeSelectRows', ...args))\n    .addLocalHook('afterSelectRows', (...args) => this.runHooks('afterSelectRows', ...args))\n    .addLocalHook('beforeModifyTransformStart', (...args) => this.runHooks('modifyTransformStart', ...args))\n    .addLocalHook('afterModifyTransformStart', (...args) => this.runHooks('afterModifyTransformStart', ...args))\n    .addLocalHook('beforeModifyTransformFocus', (...args) => this.runHooks('modifyTransformFocus', ...args))\n    .addLocalHook('afterModifyTransformFocus', (...args) => this.runHooks('afterModifyTransformFocus', ...args))\n    .addLocalHook('beforeModifyTransformEnd', (...args) => this.runHooks('modifyTransformEnd', ...args))\n    .addLocalHook('afterModifyTransformEnd', (...args) => this.runHooks('afterModifyTransformEnd', ...args))\n    .addLocalHook('beforeRowWrap', (...args) => this.runHooks('beforeRowWrap', ...args))\n    .addLocalHook('beforeColumnWrap', (...args) => this.runHooks('beforeColumnWrap', ...args))\n    .addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto'))\n    .addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));\n\n  grid = {\n    /**\n     * Inserts or removes rows and columns.\n     *\n     * @private\n     * @param {string} action Possible values: \"insert_row_above\", \"insert_row_below\", \"insert_col_start\", \"insert_col_end\",\n     *                        \"remove_row\", \"remove_col\".\n     * @param {number|Array} index Row or column visual index which from the alter action will be triggered.\n     *                             Alter actions such as \"remove_row\" and \"remove_col\" support array indexes in the\n     *                             format `[[index, amount], [index, amount]...]` this can be used to remove\n     *                             non-consecutive columns or rows in one call.\n     * @param {number} [amount=1] Amount of rows or columns to remove.\n     * @param {string} [source] Optional. Source of hook runner.\n     * @param {boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows.\n     */\n    alter(action, index, amount = 1, source, keepEmptyRows) {\n      const normalizeIndexesGroup = (indexes) => {\n        if (indexes.length === 0) {\n          return [];\n        }\n\n        const sortedIndexes = [...indexes];\n\n        // Sort the indexes in ascending order.\n        sortedIndexes.sort(([indexA], [indexB]) => {\n          if (indexA === indexB) {\n            return 0;\n          }\n\n          return indexA > indexB ? 1 : -1;\n        });\n\n        // Normalize the {index, amount} groups into bigger groups.\n        const normalizedIndexes = arrayReduce(sortedIndexes, (acc, [groupIndex, groupAmount]) => {\n          const previousItem = acc[acc.length - 1];\n          const [prevIndex, prevAmount] = previousItem;\n          const prevLastIndex = prevIndex + prevAmount;\n\n          if (groupIndex <= prevLastIndex) {\n            const amountToAdd = Math.max(groupAmount - (prevLastIndex - groupIndex), 0);\n\n            previousItem[1] += amountToAdd;\n          } else {\n            acc.push([groupIndex, groupAmount]);\n          }\n\n          return acc;\n        }, [sortedIndexes[0]]);\n\n        return normalizedIndexes;\n      };\n\n      /* eslint-disable no-case-declarations */\n      switch (action) {\n        case 'insert_row_below':\n        case 'insert_row_above':\n          const numberOfSourceRows = instance.countSourceRows();\n\n          if (tableMeta.maxRows === numberOfSourceRows) {\n            return;\n          }\n\n          // `above` is the default behavior for creating new rows\n          const insertRowMode = action === 'insert_row_below' ? 'below' : 'above';\n\n          // Calling the `insert_row_above` action adds a new row at the beginning of the data set.\n          // eslint-disable-next-line no-param-reassign\n          index = index ?? (insertRowMode === 'below' ? numberOfSourceRows : 0);\n\n          const {\n            delta: rowDelta,\n            startPhysicalIndex: startRowPhysicalIndex,\n          } = datamap.createRow(index, amount, { source, mode: insertRowMode });\n\n          selection.shiftRows(instance.toVisualRow(startRowPhysicalIndex), rowDelta);\n          break;\n\n        case 'insert_col_start':\n        case 'insert_col_end':\n          // \"start\" is a default behavior for creating new columns\n          const insertColumnMode = action === 'insert_col_end' ? 'end' : 'start';\n\n          // Calling the `insert_col_start` action adds a new column to the left of the data set.\n          // eslint-disable-next-line no-param-reassign\n          index = index ?? (insertColumnMode === 'end' ? instance.countSourceCols() : 0);\n\n          const {\n            delta: colDelta,\n            startPhysicalIndex: startColumnPhysicalIndex,\n          } = datamap.createCol(index, amount, { source, mode: insertColumnMode });\n\n          if (colDelta) {\n            if (Array.isArray(tableMeta.colHeaders)) {\n              const spliceArray = [instance.toVisualColumn(startColumnPhysicalIndex), 0];\n\n              spliceArray.length += colDelta; // inserts empty (undefined) elements at the end of an array\n              Array.prototype.splice.apply(tableMeta.colHeaders, spliceArray); // inserts empty (undefined) elements into the colHeader array\n            }\n\n            selection.shiftColumns(instance.toVisualColumn(startColumnPhysicalIndex), colDelta);\n          }\n          break;\n\n        case 'remove_row':\n\n          const removeRow = (indexes) => {\n            let offset = 0;\n\n            // Normalize the {index, amount} groups into bigger groups.\n            arrayEach(indexes, ([groupIndex, groupAmount]) => {\n              const calcIndex = isEmpty(groupIndex) ? instance.countRows() - 1 : Math.max(groupIndex - offset, 0);\n\n              // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              }\n\n              // TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeRow breaks the removing functionality.\n              const wasRemoved = datamap.removeRow(groupIndex, groupAmount, source);\n\n              if (!wasRemoved) {\n                return;\n              }\n\n              if (selection.isSelected()) {\n                const { row } = instance.getSelectedRangeLast().highlight;\n\n                if (row >= groupIndex && row <= groupIndex + groupAmount - 1) {\n                  editorManager.closeEditor(true);\n                }\n              }\n\n              const totalRows = instance.countRows();\n\n              if (totalRows === 0) {\n                selection.deselect();\n\n              } else if (source === 'ContextMenu.removeRow') {\n                selection.refresh();\n\n              } else {\n                selection.shiftRows(groupIndex, -groupAmount);\n              }\n\n              const fixedRowsTop = tableMeta.fixedRowsTop;\n\n              if (fixedRowsTop >= calcIndex + 1) {\n                tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);\n              }\n\n              const fixedRowsBottom = tableMeta.fixedRowsBottom;\n\n              if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {\n                tableMeta.fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeRow(normalizeIndexesGroup(index));\n          } else {\n            removeRow([[index, amount]]);\n          }\n          break;\n\n        case 'remove_col':\n\n          const removeCol = (indexes) => {\n            let offset = 0;\n\n            // Normalize the {index, amount} groups into bigger groups.\n            arrayEach(indexes, ([groupIndex, groupAmount]) => {\n              const calcIndex = isEmpty(groupIndex) ? instance.countCols() - 1 : Math.max(groupIndex - offset, 0);\n              let physicalColumnIndex = instance.toPhysicalColumn(calcIndex);\n\n              // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              }\n\n              // TODO: for datamap.removeCol index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeCol breaks the removing functionality.\n              const wasRemoved = datamap.removeCol(groupIndex, groupAmount, source);\n\n              if (!wasRemoved) {\n                return;\n              }\n\n              if (selection.isSelected()) {\n                const { col } = instance.getSelectedRangeLast().highlight;\n\n                if (col >= groupIndex && col <= groupIndex + groupAmount - 1) {\n                  editorManager.closeEditor(true);\n                }\n              }\n\n              const totalColumns = instance.countCols();\n\n              if (totalColumns === 0) {\n                selection.deselect();\n\n              } else if (source === 'ContextMenu.removeColumn') {\n                selection.refresh();\n\n              } else {\n                selection.shiftColumns(groupIndex, -groupAmount);\n              }\n\n              const fixedColumnsStart = tableMeta.fixedColumnsStart;\n\n              if (fixedColumnsStart >= calcIndex + 1) {\n                tableMeta.fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);\n              }\n\n              if (Array.isArray(tableMeta.colHeaders)) {\n                if (typeof physicalColumnIndex === 'undefined') {\n                  physicalColumnIndex = -1;\n                }\n                tableMeta.colHeaders.splice(physicalColumnIndex, groupAmount);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeCol(normalizeIndexesGroup(index));\n          } else {\n            removeCol([[index, amount]]);\n          }\n          break;\n        default:\n          throw new Error(`There is no such action \"${action}\"`);\n      }\n\n      instance.view.render();\n\n      if (!keepEmptyRows) {\n        grid.adjustRowsAndCols(); // makes sure that we did not add rows that will be removed in next refresh\n      }\n    },\n\n    /**\n     * Makes sure there are empty rows at the bottom of the table.\n     *\n     * @private\n     */\n    adjustRowsAndCols() {\n      const minRows = tableMeta.minRows;\n      const minSpareRows = tableMeta.minSpareRows;\n      const minCols = tableMeta.minCols;\n      const minSpareCols = tableMeta.minSpareCols;\n\n      if (minRows) {\n        // should I add empty rows to data source to meet minRows?\n        const nrOfRows = instance.countRows();\n\n        if (nrOfRows < minRows) {\n          // The synchronization with cell meta is not desired here. For `minRows` option,\n          // we don't want to touch/shift cell meta objects.\n          datamap.createRow(nrOfRows, minRows - nrOfRows, { source: 'auto' });\n        }\n      }\n      if (minSpareRows) {\n        const emptyRows = instance.countEmptyRows(true);\n\n        // should I add empty rows to meet minSpareRows?\n        if (emptyRows < minSpareRows) {\n          const emptyRowsMissing = minSpareRows - emptyRows;\n          const rowsToCreate = Math.min(emptyRowsMissing, tableMeta.maxRows - instance.countSourceRows());\n\n          // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n          datamap.createRow(instance.countRows(), rowsToCreate, { source: 'auto' });\n        }\n      }\n      {\n        let emptyCols;\n\n        // count currently empty cols\n        if (minCols || minSpareCols) {\n          emptyCols = instance.countEmptyCols(true);\n        }\n\n        let nrOfColumns = instance.countCols();\n\n        // should I add empty cols to meet minCols?\n        if (minCols && !tableMeta.columns && nrOfColumns < minCols) {\n          // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n          const colsToCreate = minCols - nrOfColumns;\n\n          emptyCols += colsToCreate;\n\n          datamap.createCol(nrOfColumns, colsToCreate, { source: 'auto' });\n        }\n        // should I add empty cols to meet minSpareCols?\n        if (minSpareCols && !tableMeta.columns && instance.dataType === 'array' &&\n          emptyCols < minSpareCols) {\n          nrOfColumns = instance.countCols();\n          const emptyColsMissing = minSpareCols - emptyCols;\n          const colsToCreate = Math.min(emptyColsMissing, tableMeta.maxCols - nrOfColumns);\n\n          // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n          datamap.createCol(nrOfColumns, colsToCreate, { source: 'auto' });\n        }\n      }\n\n      if (instance.view) {\n        instance.view.adjustElementsSize();\n      }\n    },\n\n    /**\n     * Populate the data from the provided 2d array from the given cell coordinates.\n     *\n     * @private\n     * @param {object} start Start selection position. Visual indexes.\n     * @param {Array} input 2d data array.\n     * @param {object} [end] End selection position (only for drag-down mode). Visual indexes.\n     * @param {string} [source=\"populateFromArray\"] Source information string.\n     * @param {string} [method=\"overwrite\"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`.\n     * @returns {object|undefined} Ending td in pasted area (only if any cell was changed).\n     */\n    populateFromArray(start, input, end, source, method) {\n      let r;\n      let rlen;\n      let c;\n      let clen;\n      const setData = [];\n      const current = {};\n      const newDataByColumns = [];\n      const startRow = start.row;\n      const startColumn = start.col;\n\n      rlen = input.length;\n\n      if (rlen === 0) {\n        return false;\n      }\n\n      let columnsPopulationEnd = 0;\n      let rowsPopulationEnd = 0;\n\n      if (isObject(end)) {\n        columnsPopulationEnd = end.col - startColumn + 1;\n        rowsPopulationEnd = end.row - startRow + 1;\n      }\n\n      // insert data with specified pasteMode method\n      switch (method) {\n        case 'shift_down':\n          // translate data from a list of rows to a list of columns\n          const populatedDataByColumns = pivot(input);\n          const numberOfDataColumns = populatedDataByColumns.length;\n          // method's argument can extend the range of data population (data would be repeated)\n          const numberOfColumnsToPopulate = Math.max(numberOfDataColumns, columnsPopulationEnd);\n          const pushedDownDataByRows = instance.getData().slice(startRow);\n\n          // translate data from a list of rows to a list of columns\n          const pushedDownDataByColumns = pivot(pushedDownDataByRows)\n            .slice(startColumn, startColumn + numberOfColumnsToPopulate);\n\n          for (c = 0; c < numberOfColumnsToPopulate; c += 1) {\n            if (c < numberOfDataColumns) {\n              for (r = 0, rlen = populatedDataByColumns[c].length; r < rowsPopulationEnd - rlen; r += 1) {\n                // repeating data for rows\n                populatedDataByColumns[c].push(populatedDataByColumns[c][r % rlen]);\n              }\n\n              if (c < pushedDownDataByColumns.length) {\n                newDataByColumns.push(populatedDataByColumns[c].concat(pushedDownDataByColumns[c]));\n\n              } else {\n                // if before data population, there was no data in the column\n                // we fill the required rows' newly-created cells with `null` values\n                newDataByColumns.push(populatedDataByColumns[c].concat(\n                  new Array(pushedDownDataByRows.length).fill(null)));\n              }\n\n            } else {\n              // Repeating data for columns.\n              newDataByColumns.push(populatedDataByColumns[c % numberOfDataColumns].concat(pushedDownDataByColumns[c]));\n            }\n          }\n\n          instance.populateFromArray(startRow, startColumn, pivot(newDataByColumns));\n\n          break;\n\n        case 'shift_right':\n          const numberOfDataRows = input.length;\n          // method's argument can extend the range of data population (data would be repeated)\n          const numberOfRowsToPopulate = Math.max(numberOfDataRows, rowsPopulationEnd);\n          const pushedRightDataByRows = instance.getData().slice(startRow).map(rowData => rowData.slice(startColumn));\n\n          for (r = 0; r < numberOfRowsToPopulate; r += 1) {\n            if (r < numberOfDataRows) {\n              for (c = 0, clen = input[r].length; c < columnsPopulationEnd - clen; c += 1) {\n                // repeating data for rows\n                input[r].push(input[r][c % clen]);\n              }\n\n              if (r < pushedRightDataByRows.length) {\n                for (let i = 0; i < pushedRightDataByRows[r].length; i += 1) {\n                  input[r].push(pushedRightDataByRows[r][i]);\n                }\n\n              } else {\n                // if before data population, there was no data in the row\n                // we fill the required columns' newly-created cells with `null` values\n                input[r].push(...new Array(pushedRightDataByRows[0].length).fill(null));\n              }\n\n            } else {\n              // Repeating data for columns.\n              input.push(input[r % rlen].slice(0, numberOfRowsToPopulate).concat(pushedRightDataByRows[r]));\n            }\n          }\n\n          instance.populateFromArray(startRow, startColumn, input);\n\n          break;\n\n        case 'overwrite':\n        default:\n          // overwrite and other not specified options\n          current.row = start.row;\n          current.col = start.col;\n\n          let skippedRow = 0;\n          let skippedColumn = 0;\n          let pushData = true;\n          let cellMeta;\n\n          const getInputValue = function getInputValue(row, col = null) {\n            const rowValue = input[row % input.length];\n\n            if (col !== null) {\n              return rowValue[col % rowValue.length];\n            }\n\n            return rowValue;\n          };\n          const rowInputLength = input.length;\n          const rowSelectionLength = end ? end.row - start.row + 1 : 0;\n\n          if (end) {\n            rlen = rowSelectionLength;\n          } else {\n            rlen = Math.max(rowInputLength, rowSelectionLength);\n          }\n          for (r = 0; r < rlen; r++) {\n            if ((end && current.row > end.row && rowSelectionLength > rowInputLength) ||\n                (!tableMeta.allowInsertRow && current.row > instance.countRows() - 1) ||\n                (current.row >= tableMeta.maxRows)) {\n              break;\n            }\n            const visualRow = r - skippedRow;\n            const colInputLength = getInputValue(visualRow).length;\n            const colSelectionLength = end ? end.col - start.col + 1 : 0;\n\n            if (end) {\n              clen = colSelectionLength;\n            } else {\n              clen = Math.max(colInputLength, colSelectionLength);\n            }\n            current.col = start.col;\n            cellMeta = instance.getCellMeta(current.row, current.col);\n\n            if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipRowOnPaste) {\n              skippedRow += 1;\n              current.row += 1;\n              rlen += 1;\n              /* eslint-disable no-continue */\n              continue;\n            }\n            skippedColumn = 0;\n\n            for (c = 0; c < clen; c++) {\n              if ((end && current.col > end.col && colSelectionLength > colInputLength) ||\n                  (!tableMeta.allowInsertColumn && current.col > instance.countCols() - 1) ||\n                  (current.col >= tableMeta.maxCols)) {\n                break;\n              }\n              cellMeta = instance.getCellMeta(current.row, current.col);\n\n              if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipColumnOnPaste) {\n                skippedColumn += 1;\n                current.col += 1;\n                clen += 1;\n                continue;\n              }\n\n              if (cellMeta.readOnly && source !== 'UndoRedo.undo') {\n                current.col += 1;\n                /* eslint-disable no-continue */\n                continue;\n              }\n\n              const visualColumn = c - skippedColumn;\n              let value = getInputValue(visualRow, visualColumn);\n              let orgValue = instance.getDataAtCell(current.row, current.col);\n\n              if (value !== null && typeof value === 'object') {\n                // when 'value' is array and 'orgValue' is null, set 'orgValue' to\n                // an empty array so that the null value can be compared to 'value'\n                // as an empty value for the array context\n                if (Array.isArray(value) && orgValue === null) orgValue = [];\n\n                if (orgValue === null || typeof orgValue !== 'object') {\n                  pushData = false;\n\n                } else {\n                  const orgValueSchema = duckSchema(Array.isArray(orgValue) ? orgValue : (orgValue[0] || orgValue));\n                  const valueSchema = duckSchema(Array.isArray(value) ? value : (value[0] || value));\n\n                  // Allow overwriting values with the same object-based schema or any array-based schema.\n                  if (\n                    isObjectEqual(orgValueSchema, valueSchema) ||\n                    (Array.isArray(orgValueSchema) && Array.isArray(valueSchema))\n                  ) {\n                    value = deepClone(value);\n\n                  } else {\n                    pushData = false;\n                  }\n                }\n\n              } else if (orgValue !== null && typeof orgValue === 'object') {\n                pushData = false;\n              }\n              if (pushData) {\n                setData.push([current.row, current.col, value]);\n              }\n              pushData = true;\n              current.col += 1;\n            }\n            current.row += 1;\n          }\n          instance.setDataAtCell(setData, null, null, source || 'populateFromArray');\n          break;\n      }\n    },\n  };\n\n  /**\n   * Internal function to set `language` key of settings.\n   *\n   * @private\n   * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n   * @fires Hooks#afterLanguageChange\n   */\n  function setLanguage(languageCode) {\n    const normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n    if (hasLanguageDictionary(normalizedLanguageCode)) {\n      instance.runHooks('beforeLanguageChange', normalizedLanguageCode);\n\n      globalMeta.language = normalizedLanguageCode;\n\n      instance.runHooks('afterLanguageChange', normalizedLanguageCode);\n\n    } else {\n      warnUserAboutLanguageRegistration(languageCode);\n    }\n  }\n\n  /**\n   * Internal function to set `className` or `tableClassName`, depending on the key from the settings object.\n   *\n   * @private\n   * @param {string} className `className` or `tableClassName` from the key in the settings object.\n   * @param {string|string[]} classSettings String or array of strings. Contains class name(s) from settings object.\n   */\n  function setClassName(className, classSettings) {\n    const element = className === 'className' ? instance.rootElement : instance.table;\n\n    if (firstRun) {\n      addClass(element, classSettings);\n\n    } else {\n      let globalMetaSettingsArray = [];\n      let settingsArray = [];\n\n      if (globalMeta[className]) {\n        globalMetaSettingsArray = Array.isArray(globalMeta[className]) ?\n          globalMeta[className] : stringToArray(globalMeta[className]);\n      }\n\n      if (classSettings) {\n        settingsArray = Array.isArray(classSettings) ? classSettings : stringToArray(classSettings);\n      }\n\n      const classNameToRemove = getDifferenceOfArrays(globalMetaSettingsArray, settingsArray);\n      const classNameToAdd = getDifferenceOfArrays(settingsArray, globalMetaSettingsArray);\n\n      if (classNameToRemove.length) {\n        removeClass(element, classNameToRemove);\n      }\n\n      if (classNameToAdd.length) {\n        addClass(element, classNameToAdd);\n      }\n    }\n\n    globalMeta[className] = classSettings;\n  }\n\n  this.init = function() {\n    dataSource.setData(tableMeta.data);\n    instance.runHooks('beforeInit');\n\n    if (isMobileBrowser() || isIpadOS()) {\n      addClass(instance.rootElement, 'mobile');\n    }\n\n    this.updateSettings(tableMeta, true);\n\n    this.view = new TableView(this);\n\n    editorManager = EditorManager.getInstance(instance, tableMeta, selection);\n    viewportScroller = createViewportScroller(instance);\n    focusManager = new FocusManager(instance);\n\n    if (isRootInstance(this)) {\n      installFocusCatcher(instance);\n    }\n\n    instance.runHooks('init');\n\n    this.forceFullRender = true; // used when data was changed\n    this.view.render();\n\n    // Run the logic only if it's the table's initialization and the root element is not visible.\n    if (!!firstRun && instance.rootElement.offsetParent === null) {\n      observeVisibilityChangeOnce(instance.rootElement, () => {\n        // Update the spreader size cache before rendering.\n        instance.view._wt.wtOverlays.updateLastSpreaderSize();\n        instance.render();\n        instance.view.adjustElementsSize();\n      });\n    }\n\n    if (typeof firstRun === 'object') {\n      instance.runHooks('afterChange', firstRun[0], firstRun[1]);\n\n      firstRun = false;\n    }\n\n    instance.runHooks('afterInit');\n  };\n\n  /**\n   * @ignore\n   * @returns {object}\n   */\n  function ValidatorsQueue() { // moved this one level up so it can be used in any function here. Probably this should be moved to a separate file\n    let resolved = false;\n\n    return {\n      validatorsInQueue: 0,\n      valid: true,\n      addValidatorToQueue() {\n        this.validatorsInQueue += 1;\n        resolved = false;\n      },\n      removeValidatorFormQueue() {\n        this.validatorsInQueue = this.validatorsInQueue - 1 < 0 ? 0 : this.validatorsInQueue - 1;\n        this.checkIfQueueIsEmpty();\n      },\n      onQueueEmpty() { },\n      checkIfQueueIsEmpty() {\n        if (this.validatorsInQueue === 0 && resolved === false) {\n          resolved = true;\n          this.onQueueEmpty(this.valid);\n        }\n      }\n    };\n  }\n\n  /**\n   * Get parsed number from numeric string.\n   *\n   * @private\n   * @param {string} numericData Float (separated by a dot or a comma) or integer.\n   * @returns {number} Number if we get data in parsable format, not changed value otherwise.\n   */\n  function getParsedNumber(numericData) {\n    // Unifying \"float like\" string. Change from value with comma determiner to value with dot determiner,\n    // for example from `450,65` to `450.65`.\n    const unifiedNumericData = numericData.replace(',', '.');\n\n    if (isNaN(parseFloat(unifiedNumericData)) === false) {\n      return parseFloat(unifiedNumericData);\n    }\n\n    return numericData;\n  }\n\n  /**\n   * @ignore\n   * @param {Array} changes The 2D array containing information about each of the edited cells.\n   * @param {string} source The string that identifies source of validation.\n   * @param {Function} callback The callback function fot async validation.\n   */\n  function validateChanges(changes, source, callback) {\n    if (!changes.length) {\n      callback();\n\n      return;\n    }\n\n    const activeEditor = instance.getActiveEditor();\n    const waitingForValidator = new ValidatorsQueue();\n    let shouldBeCanceled = true;\n\n    waitingForValidator.onQueueEmpty = () => {\n      if (activeEditor && shouldBeCanceled) {\n        activeEditor.cancelChanges();\n      }\n\n      callback(); // called when async validators are resolved and beforeChange was not async\n    };\n\n    for (let i = changes.length - 1; i >= 0; i--) {\n      const [row, prop, , newValue] = changes[i];\n      const visualCol = datamap.propToCol(prop);\n      let cellProperties;\n\n      if (Number.isInteger(visualCol)) {\n        cellProperties = instance.getCellMeta(row, visualCol);\n\n      } else {\n        // If there's no requested visual column, we can use the table meta as the cell properties when retrieving\n        // the cell validator.\n        cellProperties = { ...Object.getPrototypeOf(tableMeta), ...tableMeta };\n      }\n\n      if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericLike(newValue)) {\n        changes[i][3] = getParsedNumber(newValue);\n      }\n\n      /* eslint-disable no-loop-func */\n      if (instance.getCellValidator(cellProperties)) {\n        waitingForValidator.addValidatorToQueue();\n        instance.validateCell(changes[i][3], cellProperties, (function(index, cellPropertiesReference) {\n          return function(result) {\n            if (typeof result !== 'boolean') {\n              throw new Error('Validation error: result is not boolean');\n            }\n\n            if (result === false && cellPropertiesReference.allowInvalid === false) {\n              shouldBeCanceled = false;\n              changes.splice(index, 1); // cancel the change\n              cellPropertiesReference.valid = true; // we cancelled the change, so cell value is still valid\n            }\n            waitingForValidator.removeValidatorFormQueue();\n          };\n        }(i, cellProperties)), source);\n      }\n    }\n    waitingForValidator.checkIfQueueIsEmpty();\n  }\n\n  /**\n   * Internal function to apply changes. Called after validateChanges.\n   *\n   * @private\n   * @param {Array} changes Array in form of [row, prop, oldValue, newValue].\n   * @param {string} source String that identifies how this change will be described in changes array (useful in onChange callback).\n   * @fires Hooks#beforeChangeRender\n   * @fires Hooks#afterChange\n   */\n  function applyChanges(changes, source) {\n    for (let i = changes.length - 1; i >= 0; i--) {\n      let skipThisChange = false;\n\n      if (changes[i] === null) {\n        changes.splice(i, 1);\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if ((changes[i][2] === null || changes[i][2] === undefined)\n        && (changes[i][3] === null || changes[i][3] === undefined)) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if (tableMeta.allowInsertRow) {\n        while (changes[i][0] > instance.countRows() - 1) {\n          const {\n            delta: numberOfCreatedRows\n          } = datamap.createRow(undefined, undefined, { source });\n\n          if (numberOfCreatedRows === 0) {\n            skipThisChange = true;\n            break;\n          }\n        }\n      }\n\n      if (instance.dataType === 'array' && (!tableMeta.columns || tableMeta.columns.length === 0) &&\n          tableMeta.allowInsertColumn) {\n        while (datamap.propToCol(changes[i][1]) > instance.countCols() - 1) {\n          const {\n            delta: numberOfCreatedColumns\n          } = datamap.createCol(undefined, undefined, { source });\n\n          if (numberOfCreatedColumns === 0) {\n            skipThisChange = true;\n            break;\n          }\n        }\n      }\n\n      if (skipThisChange) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      datamap.set(changes[i][0], changes[i][1], changes[i][3]);\n    }\n\n    const hasChanges = changes.length > 0;\n\n    instance.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered\n\n    if (hasChanges) {\n      grid.adjustRowsAndCols();\n      instance.runHooks('beforeChangeRender', changes, source);\n      editorManager.closeEditor();\n      instance.view.render();\n      editorManager.prepareEditor();\n      instance.view.adjustElementsSize();\n      instance.runHooks('afterChange', changes, source || 'edit');\n\n      const activeEditor = instance.getActiveEditor();\n\n      if (activeEditor && isDefined(activeEditor.refreshValue)) {\n        activeEditor.refreshValue();\n      }\n\n    } else {\n      instance.view.render();\n    }\n  }\n\n  /**\n   * Creates and returns the CellCoords object.\n   *\n   * @private\n   * @memberof Core#\n   * @function _createCellCoords\n   * @param {number} row The row index.\n   * @param {number} column The column index.\n   * @returns {CellCoords}\n   */\n  this._createCellCoords = function(row, column) {\n    return instance.view._wt.createCellCoords(row, column);\n  };\n\n  /**\n   * Creates and returns the CellRange object.\n   *\n   * @private\n   * @memberof Core#\n   * @function _createCellRange\n   * @param {CellCoords} highlight Defines the border around a cell where selection was started and to edit the cell\n   *                               when you press Enter. The highlight cannot point to headers (negative values).\n   * @param {CellCoords} from Initial coordinates.\n   * @param {CellCoords} to Final coordinates.\n   * @returns {CellRange}\n   */\n  this._createCellRange = function(highlight, from, to) {\n    return instance.view._wt.createCellRange(highlight, from, to);\n  };\n\n  /**\n   * Validate a single cell.\n   *\n   * @memberof Core#\n   * @function validateCell\n   * @param {string|number} value The value to validate.\n   * @param {object} cellProperties The cell meta which corresponds with the value.\n   * @param {Function} callback The callback function.\n   * @param {string} source The string that identifies source of the validation.\n   */\n  this.validateCell = function(value, cellProperties, callback, source) {\n    let validator = instance.getCellValidator(cellProperties);\n\n    // the `canBeValidated = false` argument suggests, that the cell passes validation by default.\n    /**\n     * @private\n     * @function done\n     * @param {boolean} valid Indicates if the validation was successful.\n     * @param {boolean} [canBeValidated=true] Flag which controls the validation process.\n     */\n    function done(valid, canBeValidated = true) {\n      // Fixes GH#3903\n      if (!canBeValidated || cellProperties.hidden === true) {\n        callback(valid);\n\n        return;\n      }\n\n      const col = cellProperties.visualCol;\n      const row = cellProperties.visualRow;\n      const td = instance.getCell(row, col, true);\n\n      if (td && td.nodeName !== 'TH') {\n        const renderableRow = instance.rowIndexMapper.getRenderableFromVisualIndex(row);\n        const renderableColumn = instance.columnIndexMapper.getRenderableFromVisualIndex(col);\n\n        instance.view._wt.getSetting('cellRenderer', renderableRow, renderableColumn, td);\n      }\n\n      callback(valid);\n    }\n\n    if (isRegExp(validator)) {\n      validator = (function(expression) {\n        return function(cellValue, validatorCallback) {\n          validatorCallback(expression.test(cellValue));\n        };\n      }(validator));\n    }\n\n    if (isFunction(validator)) {\n      // eslint-disable-next-line no-param-reassign\n      value = instance.runHooks('beforeValidate', value, cellProperties.visualRow, cellProperties.prop, source);\n\n      // To provide consistent behaviour, validation should be always asynchronous\n      instance._registerImmediate(() => {\n        validator.call(cellProperties, value, (valid) => {\n          if (!instance) {\n            return;\n          }\n          // eslint-disable-next-line no-param-reassign\n          valid = instance\n            .runHooks('afterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n          cellProperties.valid = valid;\n\n          done(valid);\n          instance.runHooks('postAfterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n        });\n      });\n\n    } else {\n      // resolve callback even if validator function was not found\n      instance._registerImmediate(() => {\n        cellProperties.valid = true;\n        done(cellProperties.valid, false);\n      });\n    }\n  };\n\n  /**\n   * @ignore\n   * @param {number} row The visual row index.\n   * @param {string|number} propOrCol The visual prop or column index.\n   * @param {*} value The cell value.\n   * @returns {Array}\n   */\n  function setDataInputToArray(row, propOrCol, value) {\n    if (Array.isArray(row)) { // it's an array of changes\n      return row;\n    }\n\n    return [[row, propOrCol, value]];\n  }\n\n  /**\n   * Process changes prepared for applying to the dataset (unifying list of changes, closing an editor - when needed,\n   * calling a hook).\n   *\n   * @private\n   * @param {Array} changes Array of changes in format `[[row, col, value],...]`.\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   * @returns {Array} List of changes finally applied to the dataset.\n   */\n  function processChanges(changes, source) {\n    const activeEditor = instance.getActiveEditor();\n    const beforeChangeResult = instance.runHooks('beforeChange', changes, source || 'edit');\n    // The `beforeChange` hook could add a `null` for purpose of cancelling some dataset's change.\n    const filteredChanges = changes.filter(change => change !== null);\n\n    if (beforeChangeResult === false || filteredChanges.length === 0) {\n      if (activeEditor) {\n        activeEditor.cancelChanges();\n      }\n\n      return [];\n    }\n\n    return filteredChanges;\n  }\n\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, col, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtCell\n   * @param {number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.\n   * @param {number} [column] Visual column index.\n   * @param {string} [value] New value.\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   */\n  this.setDataAtCell = function(row, column, value, source) {\n    const input = setDataInputToArray(row, column, value);\n    const changes = [];\n    let changeSource = source;\n    let i;\n    let ilen;\n    let prop;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      if (typeof input[i] !== 'object') {\n        throw new Error('Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter');\n      }\n      if (typeof input[i][1] !== 'number') {\n        throw new Error('Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`'); // eslint-disable-line max-len\n      }\n\n      if (input[i][1] >= this.countCols()) {\n        prop = input[i][1];\n\n      } else {\n        prop = datamap.colToProp(input[i][1]);\n      }\n\n      changes.push([\n        input[i][0],\n        prop,\n        dataSource.getAtCell(this.toPhysicalRow(input[i][0]), input[i][1]),\n        input[i][2],\n      ]);\n    }\n\n    if (!changeSource && typeof row === 'object') {\n      changeSource = column;\n    }\n\n    const processedChanges = processChanges(changes, source);\n\n    instance.runHooks('afterSetDataAtCell', processedChanges, changeSource);\n\n    validateChanges(processedChanges, changeSource, () => {\n      applyChanges(processedChanges, changeSource);\n    });\n  };\n\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, prop, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtRowProp\n   * @param {number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.\n   * @param {string} prop Property name or the source string (e.g. `'first.name'` or `'0'`).\n   * @param {string} value Value to be set.\n   * @param {string} [source] String that identifies how this change will be described in changes array (useful in onChange callback).\n   */\n  this.setDataAtRowProp = function(row, prop, value, source) {\n    const input = setDataInputToArray(row, prop, value);\n    const changes = [];\n    let changeSource = source;\n    let i;\n    let ilen;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      changes.push([\n        input[i][0],\n        input[i][1],\n        dataSource.getAtCell(this.toPhysicalRow(input[i][0]), input[i][1]),\n        input[i][2],\n      ]);\n    }\n\n    // TODO: I don't think `prop` should be used as `changeSource` here, but removing it would be a breaking change.\n    // We should remove it with the next major release.\n    if (!changeSource && typeof row === 'object') {\n      changeSource = prop;\n    }\n\n    const processedChanges = processChanges(changes, source);\n\n    instance.runHooks('afterSetDataAtRowProp', processedChanges, changeSource);\n\n    validateChanges(processedChanges, changeSource, () => {\n      applyChanges(processedChanges, changeSource);\n    });\n  };\n\n  /**\n   * Listen to the keyboard input on document body. This allows Handsontable to capture keyboard events and respond\n   * in the right way.\n   *\n   * @memberof Core#\n   * @function listen\n   * @fires Hooks#afterListen\n   */\n  this.listen = function() {\n    if (instance && !instance.isListening()) {\n      foreignHotInstances.forEach((foreignHot) => {\n        if (instance !== foreignHot) {\n          foreignHot.unlisten();\n        }\n      });\n\n      activeGuid = instance.guid;\n      instance.runHooks('afterListen');\n    }\n  };\n\n  /**\n   * Stop listening to keyboard input on the document body. Calling this method makes the Handsontable inactive for\n   * any keyboard events.\n   *\n   * @memberof Core#\n   * @function unlisten\n   */\n  this.unlisten = function() {\n    if (this.isListening()) {\n      activeGuid = null;\n      instance.runHooks('afterUnlisten');\n    }\n  };\n\n  /**\n   * Returns `true` if the current Handsontable instance is listening to keyboard input on document body.\n   *\n   * @memberof Core#\n   * @function isListening\n   * @returns {boolean} `true` if the instance is listening, `false` otherwise.\n   */\n  this.isListening = function() {\n    return activeGuid === instance.guid;\n  };\n\n  /**\n   * Destroys the current editor, render the table and prepares the editor of the newly selected cell.\n   *\n   * @memberof Core#\n   * @function destroyEditor\n   * @param {boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.\n   * @param {boolean} [prepareEditorIfNeeded=true] If `true` the editor under the selected cell will be prepared to open.\n   */\n  this.destroyEditor = function(revertOriginal = false, prepareEditorIfNeeded = true) {\n    editorManager.closeEditor(revertOriginal);\n    instance.view.render();\n\n    if (prepareEditorIfNeeded && selection.isSelected()) {\n      editorManager.prepareEditor();\n    }\n  };\n\n  /**\n   * Populates cells at position with 2D input array (e.g. `[[1, 2], [3, 4]]`). Use `endRow`, `endCol` when you\n   * want to cut input when a certain row is reached.\n   *\n   * The `populateFromArray()` method can't change [`readOnly`](@/api/options.md#readonly) cells.\n   *\n   * Optional `method` argument has the same effect as pasteMode option (see {@link Options#pasteMode}).\n   *\n   * @memberof Core#\n   * @function populateFromArray\n   * @param {number} row Start visual row index.\n   * @param {number} column Start visual column index.\n   * @param {Array} input 2d array.\n   * @param {number} [endRow] End visual row index (use when you want to cut input when certain row is reached).\n   * @param {number} [endCol] End visual column index (use when you want to cut input when certain column is reached).\n   * @param {string} [source=populateFromArray] Used to identify this call in the resulting events (beforeChange, afterChange).\n   * @param {string} [method=overwrite] Populate method, possible values: `'shift_down'`, `'shift_right'`, `'overwrite'`.\n   * @returns {object|undefined} Ending td in pasted area (only if any cell was changed).\n   */\n  this.populateFromArray = function(row, column, input, endRow, endCol, source, method) {\n    if (!(typeof input === 'object' && typeof input[0] === 'object')) {\n      throw new Error('populateFromArray parameter `input` must be an array of arrays'); // API changed in 0.9-beta2, let's check if you use it correctly\n    }\n\n    const c = typeof endRow === 'number' ? instance._createCellCoords(endRow, endCol) : null;\n\n    return grid.populateFromArray(instance._createCellCoords(row, column), input, c, source, method);\n  };\n\n  /**\n   * Adds/removes data from the column. This method works the same as Array.splice for arrays.\n   *\n   * @memberof Core#\n   * @function spliceCol\n   * @param {number} column Index of the column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   * @returns {Array} Returns removed portion of columns.\n   */\n  this.spliceCol = function(column, index, amount, ...elements) {\n    return datamap.spliceCol(column, index, amount, ...elements);\n  };\n\n  /**\n   * Adds/removes data from the row. This method works the same as Array.splice for arrays.\n   *\n   * @memberof Core#\n   * @function spliceRow\n   * @param {number} row Index of column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   * @returns {Array} Returns removed portion of rows.\n   */\n  this.spliceRow = function(row, index, amount, ...elements) {\n    return datamap.spliceRow(row, index, amount, ...elements);\n  };\n\n  /**\n   * Returns indexes of the currently selected cells as an array of arrays `[[startRow, startCol, endRow, endCol],...]`.\n   *\n   * Start row and start column are the coordinates of the active cell (where the selection was started).\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedLast` method.\n   *\n   * @memberof Core#\n   * @function getSelected\n   * @returns {Array[]|undefined} An array of arrays of the selection's coordinates.\n   */\n  this.getSelected = function() { // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return arrayMap(selection.getSelectedRange(), ({ from, to }) => [from.row, from.col, to.row, to.col]);\n    }\n  };\n\n  /**\n   * Returns the last coordinates applied to the table as a an array `[startRow, startCol, endRow, endCol]`.\n   *\n   * @since 0.36.0\n   * @memberof Core#\n   * @function getSelectedLast\n   * @returns {Array|undefined} An array of the selection's coordinates.\n   */\n  this.getSelectedLast = function() {\n    const selected = this.getSelected();\n    let result;\n\n    if (selected && selected.length > 0) {\n      result = selected[selected.length - 1];\n    }\n\n    return result;\n  };\n\n  /**\n   * Returns the current selection as an array of CellRange objects.\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedRangeLast` method.\n   *\n   * @memberof Core#\n   * @function getSelectedRange\n   * @returns {CellRange[]|undefined} Selected range object or undefined if there is no selection.\n   */\n  this.getSelectedRange = function() { // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return Array.from(selection.getSelectedRange());\n    }\n  };\n\n  /**\n   * Returns the last coordinates applied to the table as a CellRange object.\n   *\n   * @memberof Core#\n   * @function getSelectedRangeLast\n   * @since 0.36.0\n   * @returns {CellRange|undefined} Selected range object or undefined` if there is no selection.\n   */\n  this.getSelectedRangeLast = function() {\n    const selectedRange = this.getSelectedRange();\n    let result;\n\n    if (selectedRange && selectedRange.length > 0) {\n      result = selectedRange[selectedRange.length - 1];\n    }\n\n    return result;\n  };\n\n  /**\n   * Erases content from cells that have been selected in the table.\n   *\n   * @memberof Core#\n   * @function emptySelectedCells\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   * @since 0.36.0\n   */\n  this.emptySelectedCells = function(source) {\n    if (!selection.isSelected() || this.countRows() === 0 || this.countCols() === 0) {\n      return;\n    }\n\n    const changes = [];\n\n    arrayEach(selection.getSelectedRange(), (cellRange) => {\n      if (cellRange.isSingleHeader()) {\n        return;\n      }\n\n      const topStart = cellRange.getTopStartCorner();\n      const bottomEnd = cellRange.getBottomEndCorner();\n\n      rangeEach(topStart.row, bottomEnd.row, (row) => {\n        rangeEach(topStart.col, bottomEnd.col, (column) => {\n          if (!this.getCellMeta(row, column).readOnly) {\n            changes.push([row, column, null]);\n          }\n        });\n      });\n    });\n\n    if (changes.length > 0) {\n      this.setDataAtCell(changes, source);\n    }\n  };\n\n  /**\n   * Checks if the table rendering process was suspended. See explanation in {@link Core#suspendRender}.\n   *\n   * @memberof Core#\n   * @function isRenderSuspended\n   * @since 8.3.0\n   * @returns {boolean}\n   */\n  this.isRenderSuspended = function() {\n    return this.renderSuspendedCounter > 0;\n  };\n\n  /**\n   * Suspends the rendering process. It's helpful to wrap the table render\n   * cycles triggered by API calls or UI actions (or both) and call the \"render\"\n   * once in the end. As a result, it improves the performance of wrapped operations.\n   * When the table is in the suspend state, most operations will have no visual\n   * effect until the rendering state is resumed. Resuming the state automatically\n   * invokes the table rendering. To make sure that after executing all operations,\n   * the table will be rendered, it's highly recommended to use the {@link Core#batchRender}\n   * method or {@link Core#batch}, which additionally aggregates the logic execution\n   * that happens behind the table.\n   *\n   * The method is intended to be used by advanced users. Suspending the rendering\n   * process could cause visual glitches when wrongly implemented.\n   *\n   * Every [`suspendRender()`](@/api/core.md#suspendrender) call needs to correspond with one [`resumeRender()`](@/api/core.md#resumerender) call.\n   * For example, if you call [`suspendRender()`](@/api/core.md#suspendrender) 5 times, you need to call [`resumeRender()`](@/api/core.md#resumerender) 5 times as well.\n   *\n   * @memberof Core#\n   * @function suspendRender\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendRender();\n   * hot.alter('insert_row_above', 5, 45);\n   * hot.alter('insert_col_start', 10, 40);\n   * hot.setDataAtCell(1, 1, 'John');\n   * hot.setDataAtCell(2, 2, 'Mark');\n   * hot.setDataAtCell(3, 3, 'Ann');\n   * hot.setDataAtCell(4, 4, 'Sophia');\n   * hot.setDataAtCell(5, 5, 'Mia');\n   * hot.selectCell(0, 0);\n   * hot.resumeRender(); // It re-renders the table internally\n   * ```\n   */\n  this.suspendRender = function() {\n    this.renderSuspendedCounter += 1;\n  };\n\n  /**\n   * Resumes the rendering process. In combination with the {@link Core#suspendRender}\n   * method it allows aggregating the table render cycles triggered by API calls or UI\n   * actions (or both) and calls the \"render\" once in the end. When the table is in\n   * the suspend state, most operations will have no visual effect until the rendering\n   * state is resumed. Resuming the state automatically invokes the table rendering.\n   *\n   * The method is intended to be used by advanced users. Suspending the rendering\n   * process could cause visual glitches when wrongly implemented.\n   *\n   * Every [`suspendRender()`](@/api/core.md#suspendrender) call needs to correspond with one [`resumeRender()`](@/api/core.md#resumerender) call.\n   * For example, if you call [`suspendRender()`](@/api/core.md#suspendrender) 5 times, you need to call [`resumeRender()`](@/api/core.md#resumerender) 5 times as well.\n   *\n   * @memberof Core#\n   * @function resumeRender\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendRender();\n   * hot.alter('insert_row_above', 5, 45);\n   * hot.alter('insert_col_start', 10, 40);\n   * hot.setDataAtCell(1, 1, 'John');\n   * hot.setDataAtCell(2, 2, 'Mark');\n   * hot.setDataAtCell(3, 3, 'Ann');\n   * hot.setDataAtCell(4, 4, 'Sophia');\n   * hot.setDataAtCell(5, 5, 'Mia');\n   * hot.selectCell(0, 0);\n   * hot.resumeRender(); // It re-renders the table internally\n   * ```\n   */\n  this.resumeRender = function() {\n    const nextValue = this.renderSuspendedCounter - 1;\n\n    this.renderSuspendedCounter = Math.max(nextValue, 0);\n\n    if (!this.isRenderSuspended() && nextValue === this.renderSuspendedCounter) {\n      if (this.renderCall) {\n        this.render();\n      } else {\n        instance.view.render();\n      }\n    }\n  };\n\n  /**\n   * Rerender the table. Calling this method starts the process of recalculating, redrawing and applying the changes\n   * to the DOM. While rendering the table all cell renderers are recalled.\n   *\n   * Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most\n   * optimal moments in its lifecycle.\n   *\n   * @memberof Core#\n   * @function render\n   */\n  this.render = function() {\n    if (this.view) {\n      this.renderCall = true;\n      this.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered\n\n      if (!this.isRenderSuspended()) {\n        instance.view.render();\n      }\n    }\n  };\n\n  /**\n   * The method aggregates multi-line API calls into a callback and postpones the\n   * table rendering process. After the execution of the operations, the table is\n   * rendered once. As a result, it improves the performance of wrapped operations.\n   * Without batching, a similar case could trigger multiple table render calls.\n   *\n   * @memberof Core#\n   * @function batchRender\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batchRender(() => {\n   *   hot.alter('insert_row_above', 5, 45);\n   *   hot.alter('insert_col_start', 10, 40);\n   *   hot.setDataAtCell(1, 1, 'John');\n   *   hot.setDataAtCell(2, 2, 'Mark');\n   *   hot.setDataAtCell(3, 3, 'Ann');\n   *   hot.setDataAtCell(4, 4, 'Sophia');\n   *   hot.setDataAtCell(5, 5, 'Mia');\n   *   hot.selectCell(0, 0);\n   *   // The table will be rendered once after executing the callback\n   * });\n   * ```\n   */\n  this.batchRender = function(wrappedOperations) {\n    this.suspendRender();\n\n    const result = wrappedOperations();\n\n    this.resumeRender();\n\n    return result;\n  };\n\n  /**\n   * Checks if the table indexes recalculation process was suspended. See explanation\n   * in {@link Core#suspendExecution}.\n   *\n   * @memberof Core#\n   * @function isExecutionSuspended\n   * @since 8.3.0\n   * @returns {boolean}\n   */\n  this.isExecutionSuspended = function() {\n    return this.executionSuspendedCounter > 0;\n  };\n\n  /**\n   * Suspends the execution process. It's helpful to wrap the table logic changes\n   * such as index changes into one call after which the cache is updated. As a result,\n   * it improves the performance of wrapped operations.\n   *\n   * The method is intended to be used by advanced users. Suspending the execution\n   * process could cause visual glitches caused by not updated the internal table cache.\n   *\n   * @memberof Core#\n   * @function suspendExecution\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendExecution();\n   * const filters = hot.getPlugin('filters');\n   *\n   * filters.addCondition(2, 'contains', ['3']);\n   * filters.filter();\n   * hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   * hot.resumeExecution(); // It updates the cache internally\n   * ```\n   */\n  this.suspendExecution = function() {\n    this.executionSuspendedCounter += 1;\n    this.columnIndexMapper.suspendOperations();\n    this.rowIndexMapper.suspendOperations();\n  };\n\n  /**\n   * Resumes the execution process. In combination with the {@link Core#suspendExecution}\n   * method it allows aggregating the table logic changes after which the cache is\n   * updated. Resuming the state automatically invokes the table cache updating process.\n   *\n   * The method is intended to be used by advanced users. Suspending the execution\n   * process could cause visual glitches caused by not updated the internal table cache.\n   *\n   * @memberof Core#\n   * @function resumeExecution\n   * @param {boolean} [forceFlushChanges=false] If `true`, the table internal data cache\n   * is recalculated after the execution of the batched operations. For nested\n   * {@link Core#batchExecution} calls, it can be desire to recalculate the table\n   * after each batch.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendExecution();\n   * const filters = hot.getPlugin('filters');\n   *\n   * filters.addCondition(2, 'contains', ['3']);\n   * filters.filter();\n   * hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   * hot.resumeExecution(); // It updates the cache internally\n   * ```\n   */\n  this.resumeExecution = function(forceFlushChanges = false) {\n    const nextValue = this.executionSuspendedCounter - 1;\n\n    this.executionSuspendedCounter = Math.max(nextValue, 0);\n\n    if ((!this.isExecutionSuspended() && nextValue === this.executionSuspendedCounter) || forceFlushChanges) {\n      this.columnIndexMapper.resumeOperations();\n      this.rowIndexMapper.resumeOperations();\n    }\n  };\n\n  /**\n   * The method aggregates multi-line API calls into a callback and postpones the\n   * table execution process. After the execution of the operations, the internal table\n   * cache is recalculated once. As a result, it improves the performance of wrapped\n   * operations. Without batching, a similar case could trigger multiple table cache rebuilds.\n   *\n   * @memberof Core#\n   * @function batchExecution\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @param {boolean} [forceFlushChanges=false] If `true`, the table internal data cache\n   * is recalculated after the execution of the batched operations. For nested calls,\n   * it can be a desire to recalculate the table after each batch.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batchExecution(() => {\n   *   const filters = hot.getPlugin('filters');\n   *\n   *   filters.addCondition(2, 'contains', ['3']);\n   *   filters.filter();\n   *   hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   *   // The table cache will be recalculated once after executing the callback\n   * });\n   * ```\n   */\n  this.batchExecution = function(wrappedOperations, forceFlushChanges = false) {\n    this.suspendExecution();\n\n    const result = wrappedOperations();\n\n    this.resumeExecution(forceFlushChanges);\n\n    return result;\n  };\n\n  /**\n   * It batches the rendering process and index recalculations. The method aggregates\n   * multi-line API calls into a callback and postpones the table rendering process\n   * as well aggregates the table logic changes such as index changes into one call\n   * after which the cache is updated. After the execution of the operations, the\n   * table is rendered, and the cache is updated once. As a result, it improves the\n   * performance of wrapped operations.\n   *\n   * @memberof Core#\n   * @function batch\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batch(() => {\n   *   hot.alter('insert_row_above', 5, 45);\n   *   hot.alter('insert_col_start', 10, 40);\n   *   hot.setDataAtCell(1, 1, 'x');\n   *   hot.setDataAtCell(2, 2, 'c');\n   *   hot.setDataAtCell(3, 3, 'v');\n   *   hot.setDataAtCell(4, 4, 'b');\n   *   hot.setDataAtCell(5, 5, 'n');\n   *   hot.selectCell(0, 0);\n   *\n   *   const filters = hot.getPlugin('filters');\n   *\n   *   filters.addCondition(2, 'contains', ['3']);\n   *   filters.filter();\n   *   hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   *   // The table will be re-rendered and cache will be recalculated once after executing the callback\n   * });\n   * ```\n   */\n  this.batch = function(wrappedOperations) {\n    this.suspendRender();\n    this.suspendExecution();\n\n    const result = wrappedOperations();\n\n    this.resumeExecution();\n    this.resumeRender();\n\n    return result;\n  };\n\n  /**\n   * Updates dimensions of the table. The method compares previous dimensions with the current ones and updates accordingly.\n   *\n   * @memberof Core#\n   * @function refreshDimensions\n   * @fires Hooks#beforeRefreshDimensions\n   * @fires Hooks#afterRefreshDimensions\n   */\n  this.refreshDimensions = function() {\n    if (!instance.view) {\n      return;\n    }\n\n    const { width: lastWidth, height: lastHeight } = instance.view.getLastSize();\n    const { width, height } = instance.rootElement.getBoundingClientRect();\n    const isSizeChanged = width !== lastWidth || height !== lastHeight;\n    const isResizeBlocked = instance.runHooks(\n      'beforeRefreshDimensions',\n      { width: lastWidth, height: lastHeight },\n      { width, height },\n      isSizeChanged\n    ) === false;\n\n    if (isResizeBlocked) {\n      return;\n    }\n\n    if (isSizeChanged || instance.view._wt.wtOverlays.scrollableElement === instance.rootWindow) {\n      instance.view.setLastSize(width, height);\n      instance.render();\n    }\n\n    instance.runHooks(\n      'afterRefreshDimensions',\n      { width: lastWidth, height: lastHeight },\n      { width, height },\n      isSizeChanged\n    );\n  };\n\n  /**\n   * The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.\n   *\n   * The `updateData()` method:\n   * - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)\n   * - Keeps rows' states (e.g. row order)\n   * - Keeps columns' states (e.g. column order)\n   *\n   * To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @memberof Core#\n   * @function updateData\n   * @since 11.1.0\n   * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {string} [source] The source of the `updateData()` call\n   * @fires Hooks#beforeUpdateData\n   * @fires Hooks#afterUpdateData\n   * @fires Hooks#afterChange\n   */\n  this.updateData = function(data, source) {\n    replaceData(\n      data,\n      (newDataMap) => {\n        datamap = newDataMap;\n      },\n      (newDataMap) => {\n        datamap = newDataMap;\n\n        instance.columnIndexMapper.fitToLength(this.getInitialColumnCount());\n        instance.rowIndexMapper.fitToLength(this.countSourceRows());\n\n        grid.adjustRowsAndCols();\n        selection.refresh();\n      }, {\n        hotInstance: instance,\n        dataMap: datamap,\n        dataSource,\n        internalSource: 'updateData',\n        source,\n        metaManager,\n        firstRun\n      });\n  };\n\n  /**\n   * The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.\n   *\n   * Additionally, the `loadData()` method:\n   * - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)\n   * - Resets rows' states (e.g. row order)\n   * - Resets columns' states (e.g. column order)\n   *\n   * To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @memberof Core#\n   * @function loadData\n   * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {string} [source] The source of the `loadData()` call\n   * @fires Hooks#beforeLoadData\n   * @fires Hooks#afterLoadData\n   * @fires Hooks#afterChange\n   */\n  this.loadData = function(data, source) {\n    replaceData(\n      data,\n      (newDataMap) => {\n        datamap = newDataMap;\n      },\n      () => {\n        metaManager.clearCellsCache();\n        instance.initIndexMappers();\n        grid.adjustRowsAndCols();\n        selection.refresh();\n\n        if (firstRun) {\n          firstRun = [null, 'loadData'];\n        }\n      }, {\n        hotInstance: instance,\n        dataMap: datamap,\n        dataSource,\n        internalSource: 'loadData',\n        source,\n        metaManager,\n        firstRun\n      });\n  };\n\n  /**\n   * Gets the initial column count, calculated based on the `columns` setting.\n   *\n   * @private\n   * @returns {number} The calculated number of columns.\n   */\n  this.getInitialColumnCount = function() {\n    const columnsSettings = tableMeta.columns;\n    let finalNrOfColumns = 0;\n\n    // We will check number of columns when the `columns` property was defined as an array. Columns option may\n    // narrow down or expand displayed dataset in that case.\n    if (Array.isArray(columnsSettings)) {\n      finalNrOfColumns = columnsSettings.length;\n\n    } else if (isFunction(columnsSettings)) {\n      if (instance.dataType === 'array') {\n        const nrOfSourceColumns = this.countSourceCols();\n\n        for (let columnIndex = 0; columnIndex < nrOfSourceColumns; columnIndex += 1) {\n          if (columnsSettings(columnIndex)) {\n            finalNrOfColumns += 1;\n          }\n        }\n\n        // Extended dataset by the `columns` property? Moved code right from the refactored `countCols` method.\n      } else if (instance.dataType === 'object' || instance.dataType === 'function') {\n        finalNrOfColumns = datamap.colToPropCache.length;\n      }\n\n      // In some cases we need to check columns length from the schema, i.e. `data` may be empty.\n    } else if (isDefined(tableMeta.dataSchema)) {\n      const schema = datamap.getSchema();\n\n      // Schema may be defined as an array of objects. Each object will define column.\n      finalNrOfColumns = Array.isArray(schema) ? schema.length : deepObjectSize(schema);\n\n    } else {\n      // We init index mappers by length of source data to provide indexes also for skipped indexes.\n      finalNrOfColumns = this.countSourceCols();\n    }\n\n    return finalNrOfColumns;\n  };\n\n  /**\n   * Init index mapper which manage indexes assigned to the data.\n   *\n   * @private\n   */\n  this.initIndexMappers = function() {\n    this.columnIndexMapper.initToLength(this.getInitialColumnCount());\n    this.rowIndexMapper.initToLength(this.countSourceRows());\n  };\n\n  /**\n   * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method,\n   * unless some modifications have been applied (i.e. Sequence of rows/columns was changed, some row/column was skipped).\n   * If that's the case - use the {@link Core#getSourceData} method.).\n   *\n   * Optionally you can provide cell range by defining `row`, `column`, `row2`, `column2` to get only a fragment of table data.\n   *\n   * @memberof Core#\n   * @function getData\n   * @param {number} [row] From visual row index.\n   * @param {number} [column] From visual column index.\n   * @param {number} [row2] To visual row index.\n   * @param {number} [column2] To visual column index.\n   * @returns {Array[]} Array with the data.\n   * @example\n   * ```js\n   * // Get all data (in order how it is rendered in the table).\n   * hot.getData();\n   * // Get data fragment (from top-left 0, 0 to bottom-right 3, 3).\n   * hot.getData(3, 3);\n   * // Get data fragment (from top-left 2, 1 to bottom-right 3, 3).\n   * hot.getData(2, 1, 3, 3);\n   * ```\n   */\n  this.getData = function(row, column, row2, column2) {\n    if (isUndefined(row)) {\n      return datamap.getAll();\n    }\n\n    return datamap.getRange(instance._createCellCoords(row, column),\n      instance._createCellCoords(row2, column2), datamap.DESTINATION_RENDERER);\n  };\n\n  /**\n   * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new\n   * line character.\n   *\n   * @memberof Core#\n   * @function getCopyableText\n   * @param {number} startRow From visual row index.\n   * @param {number} startCol From visual column index.\n   * @param {number} endRow To visual row index.\n   * @param {number} endCol To visual column index.\n   * @returns {string}\n   */\n  this.getCopyableText = function(startRow, startCol, endRow, endCol) {\n    return datamap.getCopyableText(instance._createCellCoords(startRow, startCol),\n      instance._createCellCoords(endRow, endCol));\n  };\n\n  /**\n   * Returns the data's copyable value at specified `row` and `column` index.\n   *\n   * @memberof Core#\n   * @function getCopyableData\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {string}\n   */\n  this.getCopyableData = function(row, column) {\n    return datamap.getCopyable(row, datamap.colToProp(column));\n  };\n\n  /**\n   * Returns schema provided by constructor settings. If it doesn't exist then it returns the schema based on the data\n   * structure in the first row.\n   *\n   * @memberof Core#\n   * @function getSchema\n   * @returns {object} Schema object.\n   */\n  this.getSchema = function() {\n    return datamap.getSchema();\n  };\n\n  /**\n   * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the changed\n   * settings, declared the same way as in the initial settings object.\n   *\n   * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset\n   * the settings made post-initialization. (for example - ignore changes made using the columnResize feature).\n   *\n   * Since 8.0.0 passing `columns` or `data` inside `settings` objects will result in resetting states corresponding to rows and columns\n   * (for example, row/column sequence, column width, row height, frozen columns etc.).\n   *\n   * Since 12.0.0 passing `data` inside `settings` objects no longer results in resetting states corresponding to rows and columns\n   * (for example, row/column sequence, column width, row height, frozen columns etc.).\n   *\n   * @memberof Core#\n   * @function updateSettings\n   * @param {object} settings A settings object (see {@link Options}). Only provide the settings that are changed, not the whole settings object that was used for initialization.\n   * @param {boolean} [init=false] Internally used for in initialization mode.\n   * @example\n   * ```js\n   * hot.updateSettings({\n   *    contextMenu: true,\n   *    colHeaders: true,\n   *    fixedRowsTop: 2\n   * });\n   * ```\n   * @fires Hooks#afterCellMetaReset\n   * @fires Hooks#afterUpdateSettings\n   */\n  this.updateSettings = function(settings, init = false) {\n    const dataUpdateFunction = (firstRun ? instance.loadData : instance.updateData).bind(this);\n    let columnsAsFunc = false;\n    let i;\n    let j;\n\n    if (isDefined(settings.rows)) {\n      throw new Error('The \"rows\" setting is no longer supported. Do you mean startRows, minRows or maxRows?');\n    }\n    if (isDefined(settings.cols)) {\n      throw new Error('The \"cols\" setting is no longer supported. Do you mean startCols, minCols or maxCols?');\n    }\n    if (isDefined(settings.ganttChart)) {\n      throw new Error('Since 8.0.0 the \"ganttChart\" setting is no longer supported.');\n    }\n\n    // eslint-disable-next-line no-restricted-syntax\n    for (i in settings) {\n      if (i === 'data') {\n        // Do nothing. loadData will be triggered later\n      } else if (i === 'language') {\n        setLanguage(settings.language);\n\n      } else if (i === 'className') {\n        setClassName('className', settings.className);\n\n      } else if (i === 'tableClassName' && instance.table) {\n        setClassName('tableClassName', settings.tableClassName);\n\n        instance.view._wt.wtOverlays.syncOverlayTableClassNames();\n\n      } else if (Hooks.getSingleton().isRegistered(i) || Hooks.getSingleton().isDeprecated(i)) {\n\n        if (isFunction(settings[i]) || Array.isArray(settings[i])) {\n          settings[i].initialHook = true;\n          instance.addHook(i, settings[i]);\n        }\n\n      } else if (!init && hasOwnProperty(settings, i)) { // Update settings\n        globalMeta[i] = settings[i];\n      }\n    }\n\n    // Load data or create data map\n    if (settings.data === undefined && tableMeta.data === undefined) {\n      dataUpdateFunction(null, 'updateSettings'); // data source created just now\n\n    } else if (settings.data !== undefined) {\n      dataUpdateFunction(settings.data, 'updateSettings'); // data source given as option\n\n    } else if (settings.columns !== undefined) {\n      datamap.createMap();\n\n      // The `column` property has changed - dataset may be expanded or narrowed down. The `loadData` do the same.\n      instance.initIndexMappers();\n    }\n\n    const clen = instance.countCols();\n    const columnSetting = tableMeta.columns;\n\n    // Init columns constructors configuration\n    if (columnSetting && isFunction(columnSetting)) {\n      columnsAsFunc = true;\n    }\n\n    // Clear cell meta cache\n    if (settings.cell !== undefined || settings.cells !== undefined || settings.columns !== undefined) {\n      metaManager.clearCache();\n    }\n\n    if (clen > 0) {\n      for (i = 0, j = 0; i < clen; i++) {\n        // Use settings provided by user\n        if (columnSetting) {\n          const column = columnsAsFunc ? columnSetting(i) : columnSetting[j];\n\n          if (column) {\n            metaManager.updateColumnMeta(j, column);\n          }\n        }\n\n        j += 1;\n      }\n    }\n\n    if (isDefined(settings.cell)) {\n      objectEach(settings.cell, (cell) => {\n        instance.setCellMetaObject(cell.row, cell.col, cell);\n      });\n    }\n\n    instance.runHooks('afterCellMetaReset');\n\n    let currentHeight = instance.rootElement.style.height;\n\n    if (currentHeight !== '') {\n      currentHeight = parseInt(instance.rootElement.style.height, 10);\n    }\n\n    let height = settings.height;\n\n    if (isFunction(height)) {\n      height = height();\n    }\n\n    if (init) {\n      const initialStyle = instance.rootElement.getAttribute('style');\n\n      if (initialStyle) {\n        instance.rootElement.setAttribute('data-initialstyle', instance.rootElement.getAttribute('style'));\n      }\n    }\n\n    if (height === null) {\n      const initialStyle = instance.rootElement.getAttribute('data-initialstyle');\n\n      if (initialStyle && (initialStyle.indexOf('height') > -1 || initialStyle.indexOf('overflow') > -1)) {\n        instance.rootElement.setAttribute('style', initialStyle);\n\n      } else {\n        instance.rootElement.style.height = '';\n        instance.rootElement.style.overflow = '';\n      }\n\n    } else if (height !== undefined) {\n      instance.rootElement.style.height = isNaN(height) ? `${height}` : `${height}px`;\n      instance.rootElement.style.overflow = 'hidden';\n    }\n\n    if (typeof settings.width !== 'undefined') {\n      let width = settings.width;\n\n      if (isFunction(width)) {\n        width = width();\n      }\n\n      instance.rootElement.style.width = isNaN(width) ? `${width}` : `${width}px`;\n    }\n\n    if (!init) {\n      if (instance.view) {\n        instance.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n        instance.view._wt.exportSettingsAsClassNames();\n      }\n\n      instance.runHooks('afterUpdateSettings', settings);\n    }\n\n    grid.adjustRowsAndCols();\n\n    if (instance.view && !firstRun) {\n      instance.forceFullRender = true; // used when data was changed\n      instance.view.render();\n      instance.view._wt.wtOverlays.adjustElementsSize();\n    }\n\n    if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) &&\n        currentHeight !== height) {\n      instance.view._wt.wtOverlays.updateMainScrollableElements();\n    }\n  };\n\n  /**\n   * Gets the value of the currently focused cell.\n   *\n   * For column headers and row headers, returns `null`.\n   *\n   * @memberof Core#\n   * @function getValue\n   * @returns {*} The value of the focused cell.\n   */\n  this.getValue = function() {\n    const sel = instance.getSelectedLast();\n\n    if (tableMeta.getValue) {\n      if (isFunction(tableMeta.getValue)) {\n        return tableMeta.getValue.call(instance);\n      } else if (sel) {\n        return instance.getData()[sel[0][0]][tableMeta.getValue];\n      }\n    } else if (sel) {\n      return instance.getDataAtCell(sel[0], sel[1]);\n    }\n  };\n\n  /**\n   * Returns the object settings.\n   *\n   * @memberof Core#\n   * @function getSettings\n   * @returns {TableMeta} Object containing the current table settings.\n   */\n  this.getSettings = function() {\n    return tableMeta;\n  };\n\n  /**\n   * Clears the data from the table (the table settings remain intact).\n   *\n   * @memberof Core#\n   * @function clear\n   */\n  this.clear = function() {\n    this.selectAll();\n    this.emptySelectedCells();\n  };\n\n  /**\n   * The `alter()` method lets you alter the grid's structure\n   * by adding or removing rows and columns at specified positions.\n   *\n   * ::: tip\n   * If you use an array of objects in your [`data`](@/api/options.md#data), the column-related actions won't work.\n   * :::\n   *\n   * ```js\n   * // above row 10 (by visual index), insert 1 new row\n   * hot.alter('insert_row_above', 10);\n   * ```\n   *\n   *  | Action               | With `index` | Without `index` |\n   *  | -------------------- | ------------ | --------------- |\n   *  | `'insert_row_above'` | Inserts rows above the `index` row. | Inserts rows above the first row. |\n   *  | `'insert_row_below'` | Inserts rows below the `index` row. | Inserts rows below the last row. |\n   *  | `'remove_row'`       | Removes rows, starting from the `index` row. | Removes rows, starting from the last row. |\n   *  | `'insert_col_start'` | Inserts columns before the `index` column. | Inserts columns before the first column. |\n   *  | `'insert_col_end'`   | Inserts columns after the `index` column. | Inserts columns after the last column. |\n   *  | `'remove_col'`       | Removes columns, starting from the `index` column. | Removes columns, starting from the last column. |\n   *\n   * Additional information about `'insert_col_start'` and `'insert_col_end'`:\n   * - Their behavior depends on your [`layoutDirection`](@/api/options.md#layoutdirection).\n   * - If the provided `index` is higher than the actual number of columns, Handsontable doesn't generate\n   * the columns missing in between. Instead, the new columns are inserted next to the last column.\n   *\n   * @memberof Core#\n   * @function alter\n   * @param {string} action Available operations:\n   * <ul>\n   *    <li> `'insert_row_above'` </li>\n   *    <li> `'insert_row_below'` </li>\n   *    <li> `'remove_row'` </li> </li>\n   *    <li> `'insert_col_start'` </li>\n   *    <li> `'insert_col_end'` </li>\n   *    <li> `'remove_col'` </li>\n   * </ul>\n   * @param {number|number[]} [index] A visual index of the row/column before or after which the new row/column will be\n   *                                inserted or removed. Can also be an array of arrays, in format `[[index, amount],...]`.\n   * @param {number} [amount] The amount of rows or columns to be inserted or removed (default: `1`).\n   * @param {string} [source] Source indicator.\n   * @param {boolean} [keepEmptyRows] If set to `true`: prevents removing empty rows.\n   * @example\n   * ```js\n   * // above row 10 (by visual index), insert 1 new row\n   * hot.alter('insert_row_above', 10);\n   *\n   * // below row 10 (by visual index), insert 3 new rows\n   * hot.alter('insert_row_below', 10, 3);\n   *\n   * // in the LTR layout direction: to the left of column 10 (by visual index), insert 3 new columns\n   * // in the RTL layout direction: to the right of column 10 (by visual index), insert 3 new columns\n   * hot.alter('insert_col_start', 10, 3);\n   *\n   * // in the LTR layout direction: to the right of column 10 (by visual index), insert 1 new column\n   * // in the RTL layout direction: to the left of column 10 (by visual index), insert 1 new column\n   * hot.alter('insert_col_end', 10);\n   *\n   * // remove 2 rows, starting from row 10 (by visual index)\n   * hot.alter('remove_row', 10, 2);\n   *\n   * // remove 3 rows, starting from row 1 (by visual index)\n   * // remove 2 rows, starting from row 5 (by visual index)\n   * hot.alter('remove_row', [[1, 3], [5, 2]]);\n   * ```\n   */\n  this.alter = function(action, index, amount, source, keepEmptyRows) {\n    grid.alter(action, index, amount, source, keepEmptyRows);\n  };\n\n  /**\n   * Returns a TD element for the given `row` and `column` arguments, if it is rendered on screen.\n   * Returns `null` if the TD is not rendered on screen (probably because that part of the table is not visible).\n   *\n   * @memberof Core#\n   * @function getCell\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {boolean} [topmost=false] If set to `true`, it returns the TD element from the topmost overlay. For example,\n   * if the wanted cell is in the range of fixed rows, it will return a TD element from the `top` overlay.\n   * @returns {HTMLTableCellElement|null} The cell's TD element.\n   */\n  this.getCell = function(row, column, topmost = false) {\n    let renderableColumnIndex = column; // Handling also column headers.\n    let renderableRowIndex = row; // Handling also row headers.\n\n    if (column >= 0) {\n      if (this.columnIndexMapper.isHidden(this.toPhysicalColumn(column))) {\n        return null;\n      }\n\n      renderableColumnIndex = this.columnIndexMapper.getRenderableFromVisualIndex(column);\n    }\n\n    if (row >= 0) {\n      if (this.rowIndexMapper.isHidden(this.toPhysicalRow(row))) {\n        return null;\n      }\n\n      renderableRowIndex = this.rowIndexMapper.getRenderableFromVisualIndex(row);\n    }\n\n    if (\n      renderableRowIndex === null ||\n      renderableColumnIndex === null ||\n      renderableRowIndex === undefined ||\n      renderableColumnIndex === undefined\n    ) {\n      return null;\n    }\n\n    return instance.view\n      .getCellAtCoords(instance._createCellCoords(renderableRowIndex, renderableColumnIndex), topmost);\n  };\n\n  /**\n   * Returns the coordinates of the cell, provided as a HTML table cell element.\n   *\n   * @memberof Core#\n   * @function getCoords\n   * @param {HTMLTableCellElement} element The HTML Element representing the cell.\n   * @returns {CellCoords|null} Visual coordinates object.\n   * @example\n   * ```js\n   * hot.getCoords(hot.getCell(1, 1));\n   * // it returns CellCoords object instance with props row: 1 and col: 1.\n   * ```\n   */\n  this.getCoords = function(element) {\n    const renderableCoords = this.view._wt.wtTable.getCoords(element);\n\n    if (renderableCoords === null) {\n      return null;\n    }\n\n    const { row: renderableRow, col: renderableColumn } = renderableCoords;\n\n    let visualRow = renderableRow;\n    let visualColumn = renderableColumn;\n\n    if (renderableRow >= 0) {\n      visualRow = this.rowIndexMapper.getVisualFromRenderableIndex(renderableRow);\n    }\n\n    if (renderableColumn >= 0) {\n      visualColumn = this.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn);\n    }\n\n    return instance._createCellCoords(visualRow, visualColumn);\n  };\n\n  /**\n   * Returns the property name that corresponds with the given column index.\n   * If the data source is an array of arrays, it returns the columns index.\n   *\n   * @memberof Core#\n   * @function colToProp\n   * @param {number} column Visual column index.\n   * @returns {string|number} Column property or physical column index.\n   */\n  this.colToProp = function(column) {\n    return datamap.colToProp(column);\n  };\n\n  /**\n   * Returns column index that corresponds with the given property.\n   *\n   * @memberof Core#\n   * @function propToCol\n   * @param {string|number} prop Property name or physical column index.\n   * @returns {number} Visual column index.\n   */\n  this.propToCol = function(prop) {\n    return datamap.propToCol(prop);\n  };\n\n  /**\n   * Translate physical row index into visual.\n   *\n   * This method is useful when you want to retrieve visual row index which can be reordered, moved or trimmed\n   * based on a physical index.\n   *\n   * @memberof Core#\n   * @function toVisualRow\n   * @param {number} row Physical row index.\n   * @returns {number} Returns visual row index.\n   */\n  this.toVisualRow = row => this.rowIndexMapper.getVisualFromPhysicalIndex(row);\n\n  /**\n   * Translate physical column index into visual.\n   *\n   * This method is useful when you want to retrieve visual column index which can be reordered, moved or trimmed\n   * based on a physical index.\n   *\n   * @memberof Core#\n   * @function toVisualColumn\n   * @param {number} column Physical column index.\n   * @returns {number} Returns visual column index.\n   */\n  this.toVisualColumn = column => this.columnIndexMapper.getVisualFromPhysicalIndex(column);\n\n  /**\n   * Translate visual row index into physical.\n   *\n   * This method is useful when you want to retrieve physical row index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalRow\n   * @param {number} row Visual row index.\n   * @returns {number} Returns physical row index.\n   */\n  this.toPhysicalRow = row => this.rowIndexMapper.getPhysicalFromVisualIndex(row);\n\n  /**\n   * Translate visual column index into physical.\n   *\n   * This method is useful when you want to retrieve physical column index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalColumn\n   * @param {number} column Visual column index.\n   * @returns {number} Returns physical column index.\n   */\n  this.toPhysicalColumn = column => this.columnIndexMapper.getPhysicalFromVisualIndex(column);\n\n  /**\n   * @description\n   * Returns the cell value at `row`, `column`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCell\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {*} Data at cell.\n   */\n  this.getDataAtCell = function(row, column) {\n    return datamap.get(row, datamap.colToProp(column));\n  };\n\n  /**\n   * Returns value at visual `row` and `prop` indexes.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRowProp\n   * @param {number} row Visual row index.\n   * @param {string} prop Property name.\n   * @returns {*} Cell value.\n   */\n  this.getDataAtRowProp = function(row, prop) {\n    return datamap.get(row, prop);\n  };\n\n  /**\n   * @description\n   * Returns array of column values from the data source.\n   *\n   * __Note__: If columns were reordered or sorted, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCol\n   * @param {number} column Visual column index.\n   * @returns {Array} Array of cell values.\n   */\n  this.getDataAtCol = function(column) {\n    const columnData = [];\n    const dataByRows = datamap.getRange(\n      instance._createCellCoords(0, column),\n      instance._createCellCoords(tableMeta.data.length - 1, column),\n      datamap.DESTINATION_RENDERER\n    );\n\n    for (let i = 0; i < dataByRows.length; i += 1) {\n      for (let j = 0; j < dataByRows[i].length; j += 1) {\n        columnData.push(dataByRows[i][j]);\n      }\n    }\n\n    return columnData;\n  };\n\n  /**\n   * Given the object property name (e.g. `'first.name'` or `'0'`), returns an array of column's values from the table data.\n   * You can also provide a column index as the first argument.\n   *\n   * @memberof Core#\n   * @function getDataAtProp\n   * @param {string|number} prop Property name or physical column index.\n   * @returns {Array} Array of cell values.\n   */\n  // TODO: Getting data from `datamap` should work on visual indexes.\n  this.getDataAtProp = function(prop) {\n    const columnData = [];\n    const dataByRows = datamap.getRange(\n      instance._createCellCoords(0, datamap.propToCol(prop)),\n      instance._createCellCoords(tableMeta.data.length - 1, datamap.propToCol(prop)),\n      datamap.DESTINATION_RENDERER);\n\n    for (let i = 0; i < dataByRows.length; i += 1) {\n      for (let j = 0; j < dataByRows[i].length; j += 1) {\n        columnData.push(dataByRows[i][j]);\n      }\n    }\n\n    return columnData;\n  };\n\n  /**\n   * Returns a clone of the source data object.\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * __Note__: This method may return incorrect values for cells that contain\n   * [formulas](@/guides/formulas/formula-calculation/formula-calculation.md). This is because `getSourceData()`\n   * operates on source data ([physical indexes](@/api/indexMapper.md)),\n   * whereas formulas operate on visual data (visual indexes).\n   *\n   * @memberof Core#\n   * @function getSourceData\n   * @param {number} [row] From physical row index.\n   * @param {number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {number} [row2] To physical row index.\n   * @param {number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array[]|object[]} The table data.\n   */\n  this.getSourceData = function(row, column, row2, column2) {\n    let data;\n\n    if (row === undefined) {\n      data = dataSource.getData();\n    } else {\n      data = dataSource\n        .getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2));\n    }\n\n    return data;\n  };\n\n  /**\n   * Returns the source data object as an arrays of arrays format even when source data was provided in another format.\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataArray\n   * @param {number} [row] From physical row index.\n   * @param {number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {number} [row2] To physical row index.\n   * @param {number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array} An array of arrays.\n   */\n  this.getSourceDataArray = function(row, column, row2, column2) {\n    let data;\n\n    if (row === undefined) {\n      data = dataSource.getData(true);\n    } else {\n      data = dataSource\n        .getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2), true);\n    }\n\n    return data;\n  };\n\n  /**\n   * Returns an array of column values from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCol\n   * @param {number} column Visual column index.\n   * @returns {Array} Array of the column's cell values.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n  this.getSourceDataAtCol = function(column) {\n    return dataSource.getAtColumn(column);\n  };\n\n  /* eslint-disable jsdoc/require-param */\n  /**\n   * Set the provided value in the source data set at the provided coordinates.\n   *\n   * @memberof Core#\n   * @function setSourceDataAtCell\n   * @param {number|Array} row Physical row index or array of changes in format `[[row, prop, value], ...]`.\n   * @param {number|string} column Physical column index / prop name.\n   * @param {*} value The value to be set at the provided coordinates.\n   * @param {string} [source] Source of the change as a string.\n   */\n  /* eslint-enable jsdoc/require-param */\n  this.setSourceDataAtCell = function(row, column, value, source) {\n    const input = setDataInputToArray(row, column, value);\n    const isThereAnySetSourceListener = this.hasHook('afterSetSourceDataAtCell');\n    const changesForHook = [];\n\n    if (isThereAnySetSourceListener) {\n      arrayEach(input, ([changeRow, changeProp, changeValue]) => {\n        changesForHook.push([\n          changeRow,\n          changeProp,\n          dataSource.getAtCell(changeRow, changeProp), // The previous value.\n          changeValue,\n        ]);\n      });\n    }\n\n    arrayEach(input, ([changeRow, changeProp, changeValue]) => {\n      dataSource.setAtCell(changeRow, changeProp, changeValue);\n    });\n\n    if (isThereAnySetSourceListener) {\n      this.runHooks('afterSetSourceDataAtCell', changesForHook, source);\n    }\n\n    this.render();\n\n    const activeEditor = instance.getActiveEditor();\n\n    if (activeEditor && isDefined(activeEditor.refreshValue)) {\n      activeEditor.refreshValue();\n    }\n  };\n\n  /**\n   * Returns a single row of the data (array or object, depending on what data format you use).\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtRow\n   * @param {number} row Physical row index.\n   * @returns {Array|object} Single row of data.\n   */\n  this.getSourceDataAtRow = function(row) {\n    return dataSource.getAtRow(row);\n  };\n\n  /**\n   * Returns a single value from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCell\n   * @param {number} row Physical row index.\n   * @param {number} column Visual column index.\n   * @returns {*} Cell data.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n  this.getSourceDataAtCell = function(row, column) {\n    return dataSource.getAtCell(row, column);\n  };\n\n  /**\n   * @description\n   * Returns a single row of the data.\n   *\n   * __Note__: If rows were reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRow\n   * @param {number} row Visual row index.\n   * @returns {Array} Array of row's cell data.\n   */\n  this.getDataAtRow = function(row) {\n    const data = datamap.getRange(\n      instance._createCellCoords(row, 0),\n      instance._createCellCoords(row, this.countCols() - 1),\n      datamap.DESTINATION_RENDERER\n    );\n\n    return data[0] || [];\n  };\n\n  /**\n   * @description\n   * Returns a data type defined in the Handsontable settings under the `type` key ({@link Options#type}).\n   * If there are cells with different types in the selected range, it returns `'mixed'`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataType\n   * @param {number} rowFrom From visual row index.\n   * @param {number} columnFrom From visual column index.\n   * @param {number} rowTo To visual row index.\n   * @param {number} columnTo To visual column index.\n   * @returns {string} Cell type (e.q: `'mixed'`, `'text'`, `'numeric'`, `'autocomplete'`).\n   */\n  this.getDataType = function(rowFrom, columnFrom, rowTo, columnTo) {\n    const coords = rowFrom === undefined ?\n      [0, 0, this.countRows(), this.countCols()] : [rowFrom, columnFrom, rowTo, columnTo];\n    const [rowStart, columnStart] = coords;\n    let [,, rowEnd, columnEnd] = coords;\n    let previousType = null;\n    let currentType = null;\n\n    if (rowEnd === undefined) {\n      rowEnd = rowStart;\n    }\n    if (columnEnd === undefined) {\n      columnEnd = columnStart;\n    }\n    let type = 'mixed';\n\n    rangeEach(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), (row) => {\n      let isTypeEqual = true;\n\n      rangeEach(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), (column) => {\n        const cellType = this.getCellMeta(row, column);\n\n        currentType = cellType.type;\n\n        if (previousType) {\n          isTypeEqual = previousType === currentType;\n        } else {\n          previousType = currentType;\n        }\n\n        return isTypeEqual;\n      });\n      type = isTypeEqual ? currentType : 'mixed';\n\n      return isTypeEqual;\n    });\n\n    return type;\n  };\n\n  /**\n   * Remove a property defined by the `key` argument from the cell meta object for the provided `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function removeCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key Property name.\n   * @fires Hooks#beforeRemoveCellMeta\n   * @fires Hooks#afterRemoveCellMeta\n   */\n  this.removeCellMeta = function(row, column, key) {\n    const [physicalRow, physicalColumn] = [this.toPhysicalRow(row), this.toPhysicalColumn(column)];\n    let cachedValue = metaManager.getCellMetaKeyValue(physicalRow, physicalColumn, key);\n\n    const hookResult = instance.runHooks('beforeRemoveCellMeta', row, column, key, cachedValue);\n\n    if (hookResult !== false) {\n      metaManager.removeCellMeta(physicalRow, physicalColumn, key);\n\n      instance.runHooks('afterRemoveCellMeta', row, column, key, cachedValue);\n    }\n\n    cachedValue = null;\n  };\n\n  /**\n   * Removes or adds one or more rows of the cell meta objects to the cell meta collections.\n   *\n   * @since 0.30.0\n   * @memberof Core#\n   * @function spliceCellsMeta\n   * @param {number} visualIndex A visual index that specifies at what position to add/remove items.\n   * @param {number} [deleteAmount=0] The number of items to be removed. If set to 0, no cell meta objects will be removed.\n   * @param {...object} [cellMetaRows] The new cell meta row objects to be added to the cell meta collection.\n   */\n  this.spliceCellsMeta = function(visualIndex, deleteAmount = 0, ...cellMetaRows) {\n    if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {\n      throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');\n    }\n\n    if (deleteAmount > 0) {\n      metaManager.removeRow(this.toPhysicalRow(visualIndex), deleteAmount);\n    }\n\n    if (cellMetaRows.length > 0) {\n      arrayEach(cellMetaRows.reverse(), (cellMetaRow) => {\n        metaManager.createRow(this.toPhysicalRow(visualIndex));\n\n        arrayEach(cellMetaRow, (cellMeta, columnIndex) => this.setCellMetaObject(visualIndex, columnIndex, cellMeta));\n      });\n    }\n\n    instance.render();\n  };\n\n  /**\n   * Set cell meta data object defined by `prop` to the corresponding params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMetaObject\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} prop Meta object.\n   */\n  this.setCellMetaObject = function(row, column, prop) {\n    if (typeof prop === 'object') {\n      objectEach(prop, (value, key) => {\n        this.setCellMeta(row, column, key, value);\n      });\n    }\n  };\n\n  /**\n   * Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key Property name.\n   * @param {string} value Property value.\n   * @fires Hooks#beforeSetCellMeta\n   * @fires Hooks#afterSetCellMeta\n   */\n  this.setCellMeta = function(row, column, key, value) {\n    const allowSetCellMeta = instance.runHooks('beforeSetCellMeta', row, column, key, value);\n\n    if (allowSetCellMeta === false) {\n      return;\n    }\n\n    let physicalRow = row;\n    let physicalColumn = column;\n\n    if (row < this.countRows()) {\n      physicalRow = this.toPhysicalRow(row);\n    }\n\n    if (column < this.countCols()) {\n      physicalColumn = this.toPhysicalColumn(column);\n    }\n\n    metaManager.setCellMeta(physicalRow, physicalColumn, key, value);\n\n    instance.runHooks('afterSetCellMeta', row, column, key, value);\n  };\n\n  /**\n   * Get all the cells meta settings at least once generated in the table (in order of cell initialization).\n   *\n   * @memberof Core#\n   * @function getCellsMeta\n   * @returns {Array} Returns an array of ColumnSettings object instances.\n   */\n  this.getCellsMeta = function() {\n    return metaManager.getCellsMeta();\n  };\n\n  /**\n   * Returns the cell properties object for the given `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function getCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {object} The cell properties object.\n   * @fires Hooks#beforeGetCellMeta\n   * @fires Hooks#afterGetCellMeta\n   */\n  this.getCellMeta = function(row, column) {\n    let physicalRow = this.toPhysicalRow(row);\n    let physicalColumn = this.toPhysicalColumn(column);\n\n    if (physicalRow === null) {\n      physicalRow = row;\n    }\n\n    if (physicalColumn === null) {\n      physicalColumn = column;\n    }\n\n    return metaManager.getCellMeta(physicalRow, physicalColumn, {\n      visualRow: row,\n      visualColumn: column,\n    });\n  };\n\n  /**\n   * Returns the meta information for the provided column.\n   *\n   * @since 14.5.0\n   * @memberof Core#\n   * @function getColumnMeta\n   * @param {number} column Visual column index.\n   * @returns {object}\n   */\n  this.getColumnMeta = function(column) {\n    return metaManager.getColumnMeta(this.toPhysicalColumn(column));\n  };\n\n  /**\n   * Returns an array of cell meta objects for specified physical row index.\n   *\n   * @memberof Core#\n   * @function getCellMetaAtRow\n   * @param {number} row Physical row index.\n   * @returns {Array}\n   */\n  this.getCellMetaAtRow = function(row) {\n    return metaManager.getCellsMetaAtRow(row);\n  };\n\n  /**\n   * Checks if your [data format](@/guides/getting-started/binding-to-data/binding-to-data.md#compatible-data-types)\n   * and [configuration options](@/guides/getting-started/configuration-options/configuration-options.md)\n   * allow for changing the number of columns.\n   *\n   * Returns `false` when your data is an array of objects,\n   * or when you use the [`columns`](@/api/options.md#columns) option.\n   * Otherwise, returns `true`.\n   *\n   * @memberof Core#\n   * @function isColumnModificationAllowed\n   * @returns {boolean}\n   */\n  this.isColumnModificationAllowed = function() {\n    return !(instance.dataType === 'object' || tableMeta.columns);\n  };\n\n  /**\n   * Returns the cell renderer function by given `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellRenderer\n   * @param {number|object} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function} Returns the renderer function.\n   * @example\n   * ```js\n   * // Get cell renderer using `row` and `column` coordinates.\n   * hot.getCellRenderer(1, 1);\n   * // Get cell renderer using cell meta object.\n   * hot.getCellRenderer(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellRenderer = function(rowOrMeta, column) {\n    const cellRenderer = typeof rowOrMeta === 'number' ?\n      instance.getCellMeta(rowOrMeta, column).renderer : rowOrMeta.renderer;\n\n    if (typeof cellRenderer === 'string') {\n      return getRenderer(cellRenderer);\n    }\n\n    return isUndefined(cellRenderer) ? getRenderer('text') : cellRenderer;\n  };\n\n  /**\n   * Returns the cell editor class by the provided `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellEditor\n   * @param {number} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function|boolean} Returns the editor class or `false` is cell editor is disabled.\n   * @example\n   * ```js\n   * // Get cell editor class using `row` and `column` coordinates.\n   * hot.getCellEditor(1, 1);\n   * // Get cell editor class using cell meta object.\n   * hot.getCellEditor(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellEditor = function(rowOrMeta, column) {\n    const cellEditor = typeof rowOrMeta === 'number' ?\n      instance.getCellMeta(rowOrMeta, column).editor : rowOrMeta.editor;\n\n    if (typeof cellEditor === 'string') {\n      return getEditor(cellEditor);\n    }\n\n    return isUndefined(cellEditor) ? getEditor('text') : cellEditor;\n  };\n\n  /**\n   * Returns the cell validator by `row` and `column`.\n   *\n   * @memberof Core#\n   * @function getCellValidator\n   * @param {number|object} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function|RegExp|undefined} The validator function.\n   * @example\n   * ```js\n   * // Get cell validator using `row` and `column` coordinates.\n   * hot.getCellValidator(1, 1);\n   * // Get cell validator using cell meta object.\n   * hot.getCellValidator(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellValidator = function(rowOrMeta, column) {\n    const cellValidator = typeof rowOrMeta === 'number' ?\n      instance.getCellMeta(rowOrMeta, column).validator : rowOrMeta.validator;\n\n    if (typeof cellValidator === 'string') {\n      return getValidator(cellValidator);\n    }\n\n    return cellValidator;\n  };\n\n  /**\n   * Validates every cell in the data set,\n   * using a [validator function](@/guides/cell-functions/cell-validator/cell-validator.md) configured for each cell.\n   *\n   * Doesn't validate cells that are currently [trimmed](@/guides/rows/row-trimming/row-trimming.md),\n   * [hidden](@/guides/rows/row-hiding/row-hiding.md), or [filtered](@/guides/columns/column-filter/column-filter.md),\n   * as such cells are not included in the data set until you bring them back again.\n   *\n   * After the validation, the `callback` function is fired, with the `valid` argument set to:\n   * - `true` for valid cells\n   * - `false` for invalid cells\n   *\n   * @memberof Core#\n   * @function validateCells\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateCells((valid) => {\n   *   if (valid) {\n   *     // ... code for validated cells\n   *   }\n   * })\n   * ```\n   */\n  this.validateCells = function(callback) {\n    this._validateCells(callback);\n  };\n\n  /**\n   * Validates rows using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateRows\n   * @param {Array} [rows] Array of validation target visual row indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateRows([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated rows\n   *   }\n   * })\n   * ```\n   */\n  this.validateRows = function(rows, callback) {\n    if (!Array.isArray(rows)) {\n      throw new Error('validateRows parameter `rows` must be an array');\n    }\n    this._validateCells(callback, rows);\n  };\n\n  /**\n   * Validates columns using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateColumns\n   * @param {Array} [columns] Array of validation target visual columns indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateColumns([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated columns\n   *   }\n   * })\n   * ```\n   */\n  this.validateColumns = function(columns, callback) {\n    if (!Array.isArray(columns)) {\n      throw new Error('validateColumns parameter `columns` must be an array');\n    }\n    this._validateCells(callback, undefined, columns);\n  };\n\n  /**\n   * Validates all cells using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n   *\n   * Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _validateCells\n   * @param {Function} [callback] The callback function.\n   * @param {Array} [rows] An array of validation target visual row indexes.\n   * @param {Array} [columns] An array of validation target visual column indexes.\n   */\n  this._validateCells = function(callback, rows, columns) {\n    const waitingForValidator = new ValidatorsQueue();\n\n    if (callback) {\n      waitingForValidator.onQueueEmpty = callback;\n    }\n\n    let i = instance.countRows() - 1;\n\n    while (i >= 0) {\n      if (rows !== undefined && rows.indexOf(i) === -1) {\n        i -= 1;\n        continue;\n      }\n      let j = instance.countCols() - 1;\n\n      while (j >= 0) {\n        if (columns !== undefined && columns.indexOf(j) === -1) {\n          j -= 1;\n          continue;\n        }\n        waitingForValidator.addValidatorToQueue();\n\n        instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), (result) => {\n          if (typeof result !== 'boolean') {\n            throw new Error('Validation error: result is not boolean');\n          }\n          if (result === false) {\n            waitingForValidator.valid = false;\n          }\n          waitingForValidator.removeValidatorFormQueue();\n        }, 'validateCells');\n        j -= 1;\n      }\n      i -= 1;\n    }\n\n    waitingForValidator.checkIfQueueIsEmpty();\n  };\n\n  /**\n   * Returns an array of row headers' values (if they are enabled). If param `row` was given, it returns the header of the given row as a string.\n   *\n   * @memberof Core#\n   * @function getRowHeader\n   * @param {number} [row] Visual row index.\n   * @fires Hooks#modifyRowHeader\n   * @returns {Array|string|number} Array of header values / single header value.\n   */\n  this.getRowHeader = function(row) {\n    let rowHeader = tableMeta.rowHeaders;\n    let physicalRow = row;\n\n    if (physicalRow !== undefined) {\n      physicalRow = instance.runHooks('modifyRowHeader', physicalRow);\n    }\n\n    if (physicalRow === undefined) {\n      rowHeader = [];\n      rangeEach(instance.countRows() - 1, (i) => {\n        rowHeader.push(instance.getRowHeader(i));\n      });\n\n    } else if (Array.isArray(rowHeader) && rowHeader[physicalRow] !== undefined) {\n      rowHeader = rowHeader[physicalRow];\n\n    } else if (isFunction(rowHeader)) {\n      rowHeader = rowHeader(physicalRow);\n\n    } else if (rowHeader && typeof rowHeader !== 'string' && typeof rowHeader !== 'number') {\n      rowHeader = physicalRow + 1;\n    }\n\n    return rowHeader;\n  };\n\n  /**\n   * Returns information about if this table is configured to display row headers.\n   *\n   * @memberof Core#\n   * @function hasRowHeaders\n   * @returns {boolean} `true` if the instance has the row headers enabled, `false` otherwise.\n   */\n  this.hasRowHeaders = function() {\n    return !!tableMeta.rowHeaders;\n  };\n\n  /**\n   * Returns information about if this table is configured to display column headers.\n   *\n   * @memberof Core#\n   * @function hasColHeaders\n   * @returns {boolean} `true` if the instance has the column headers enabled, `false` otherwise.\n   */\n  this.hasColHeaders = function() {\n    if (tableMeta.colHeaders !== undefined && tableMeta.colHeaders !== null) { // Polymer has empty value = null\n      return !!tableMeta.colHeaders;\n    }\n    for (let i = 0, ilen = instance.countCols(); i < ilen; i++) {\n      if (instance.getColHeader(i)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  /**\n   * Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).\n   *\n   * To get an array with the values of all\n   * [bottom-most](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers) column headers,\n   * call `getColHeader()` with no arguments.\n   *\n   * To get the value of the bottom-most header of a specific column, use the `column` parameter.\n   *\n   * To get the value of a [specific-level](@/guides/columns/column-groups/column-groups.md) header\n   * of a specific column, use the `column` and `headerLevel` parameters.\n   *\n   * Read more:\n   * - [Guides: Column groups](@/guides/columns/column-groups/column-groups.md)\n   * - [Options: `colHeaders`](@/api/options.md#colheaders)\n   * - [Guides: Copy with headers](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers)\n   *\n   * ```js\n   * // get the contents of all bottom-most column headers\n   * hot.getColHeader();\n   *\n   * // get the contents of the bottom-most header of a specific column\n   * hot.getColHeader(5);\n   *\n   * // get the contents of a specific column header at a specific level\n   * hot.getColHeader(5, -2);\n   * ```\n   *\n   * @memberof Core#\n   * @function getColHeader\n   * @param {number} [column] A visual column index.\n   * @param {number} [headerLevel=-1] (Since 12.3.0) Header level index. Accepts positive (0 to n)\n   *                                  and negative (-1 to -n) values. For positive values, 0 points to the\n   *                                  topmost header. For negative values, -1 points to the bottom-most\n   *                                  header (the header closest to the cells).\n   * @fires Hooks#modifyColHeader\n   * @fires Hooks#modifyColumnHeaderValue\n   * @returns {Array|string|number} Column header values.\n   */\n  this.getColHeader = function(column, headerLevel = -1) {\n    const columnIndex = instance.runHooks('modifyColHeader', column);\n\n    if (columnIndex === undefined) {\n      const out = [];\n      const ilen = instance.countCols();\n\n      for (let i = 0; i < ilen; i++) {\n        out.push(instance.getColHeader(i));\n      }\n\n      return out;\n    }\n\n    let result = tableMeta.colHeaders;\n\n    const translateVisualIndexToColumns = function(visualColumnIndex) {\n      const arr = [];\n      const columnsLen = instance.countCols();\n      let index = 0;\n\n      for (; index < columnsLen; index++) {\n        if (isFunction(tableMeta.columns) && tableMeta.columns(index)) {\n          arr.push(index);\n        }\n      }\n\n      return arr[visualColumnIndex];\n    };\n\n    const physicalColumn = instance.toPhysicalColumn(columnIndex);\n    const prop = translateVisualIndexToColumns(physicalColumn);\n\n    if (tableMeta.colHeaders === false) {\n      result = null;\n\n    } else if (tableMeta.columns && isFunction(tableMeta.columns) && tableMeta.columns(prop) &&\n               tableMeta.columns(prop).title) {\n      result = tableMeta.columns(prop).title;\n\n    } else if (tableMeta.columns && tableMeta.columns[physicalColumn] &&\n               tableMeta.columns[physicalColumn].title) {\n      result = tableMeta.columns[physicalColumn].title;\n\n    } else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== undefined) {\n      result = tableMeta.colHeaders[physicalColumn];\n\n    } else if (isFunction(tableMeta.colHeaders)) {\n      result = tableMeta.colHeaders(physicalColumn);\n\n    } else if (tableMeta.colHeaders && typeof tableMeta.colHeaders !== 'string' &&\n               typeof tableMeta.colHeaders !== 'number') {\n      result = spreadsheetColumnLabel(columnIndex); // see #1458\n    }\n\n    result = instance.runHooks('modifyColumnHeaderValue', result, column, headerLevel);\n\n    return result;\n  };\n\n  /**\n   * Return column width from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getColWidthFromSettings\n   * @param {number} col Visual col index.\n   * @returns {number}\n   */\n  this._getColWidthFromSettings = function(col) {\n    let width;\n\n    // We currently don't support cell meta objects for headers (negative values)\n    if (col >= 0) {\n      const cellProperties = instance.getCellMeta(0, col);\n\n      width = cellProperties.width;\n    }\n\n    if (width === undefined || width === tableMeta.width) {\n      width = tableMeta.colWidths;\n    }\n\n    if (width !== undefined && width !== null) {\n      switch (typeof width) {\n        case 'object': // array\n          width = width[col];\n          break;\n\n        case 'function':\n          width = width(col);\n          break;\n        default:\n          break;\n      }\n      if (typeof width === 'string') {\n        width = parseInt(width, 10);\n      }\n    }\n\n    return width;\n  };\n\n  /**\n   * Returns the width of the requested column.\n   *\n   * @memberof Core#\n   * @function getColWidth\n   * @param {number} column Visual column index.\n   * @returns {number} Column width.\n   * @fires Hooks#modifyColWidth\n   */\n  this.getColWidth = function(column) {\n    let width = instance._getColWidthFromSettings(column);\n\n    width = instance.runHooks('modifyColWidth', width, column);\n\n    if (width === undefined) {\n      width = DEFAULT_COLUMN_WIDTH;\n    }\n\n    return width;\n  };\n\n  /**\n   * Return row height from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getRowHeightFromSettings\n   * @param {number} row Visual row index.\n   * @returns {number}\n   */\n  this._getRowHeightFromSettings = function(row) {\n    let height = tableMeta.rowHeights;\n\n    if (height !== undefined && height !== null) {\n      switch (typeof height) {\n        case 'object': // array\n          height = height[row];\n          break;\n\n        case 'function':\n          height = height(row);\n          break;\n        default:\n          break;\n      }\n      if (typeof height === 'string') {\n        height = parseInt(height, 10);\n      }\n    }\n\n    return height;\n  };\n\n  /**\n   * Returns a row's height, as recognized by Handsontable.\n   *\n   * Depending on your configuration, the method returns (in order of priority):\n   *   1. The row height set by the [`ManualRowResize`](@/api/manualRowResize.md) plugin\n   *     (if the plugin is enabled).\n   *   2. The row height set by the [`rowHeights`](@/api/options.md#rowheights) configuration option\n   *     (if the option is set).\n   *   3. The row height as measured in the DOM by the [`AutoRowSize`](@/api/autoRowSize.md) plugin\n   *     (if the plugin is enabled).\n   *   4. `undefined`, if neither [`ManualRowResize`](@/api/manualRowResize.md),\n   *     nor [`rowHeights`](@/api/options.md#rowheights),\n   *     nor [`AutoRowSize`](@/api/autoRowSize.md) is used.\n   *\n   * The height returned includes 1 px of the row's bottom border.\n   *\n   * Mind that this method is different from the\n   * [`getRowHeight()`](@/api/autoRowSize.md#getrowheight) method\n   * of the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n   *\n   * @memberof Core#\n   * @function getRowHeight\n   * @param {number} row A visual row index.\n   * @returns {number|undefined} The height of the specified row, in pixels.\n   * @fires Hooks#modifyRowHeight\n   */\n  this.getRowHeight = function(row) {\n    let height = instance._getRowHeightFromSettings(row);\n\n    height = instance.runHooks('modifyRowHeight', height, row);\n\n    return height;\n  };\n\n  /**\n   * Returns the total number of rows in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceRows\n   * @returns {number} Total number of rows.\n   */\n  this.countSourceRows = function() {\n    return dataSource.countRows();\n  };\n\n  /**\n   * Returns the total number of columns in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceCols\n   * @returns {number} Total number of columns.\n   */\n  this.countSourceCols = function() {\n    return dataSource.countFirstRowKeys();\n  };\n\n  /**\n   * Returns the total number of visual rows in the table.\n   *\n   * @memberof Core#\n   * @function countRows\n   * @returns {number} Total number of rows.\n   */\n  this.countRows = function() {\n    return datamap.getLength();\n  };\n\n  /**\n   * Returns the total number of visible columns in the table.\n   *\n   * @memberof Core#\n   * @function countCols\n   * @returns {number} Total number of columns.\n   */\n  this.countCols = function() {\n    const maxCols = tableMeta.maxCols;\n    const dataLen = this.columnIndexMapper.getNotTrimmedIndexesLength();\n\n    return Math.min(maxCols, dataLen);\n  };\n\n  /**\n   * Returns the number of rendered rows including rows that are partially or fully rendered\n   * outside the table viewport.\n   *\n   * @memberof Core#\n   * @function countRenderedRows\n   * @returns {number} Returns -1 if table is not visible.\n   */\n  this.countRenderedRows = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedRowsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered rows that are only visible in the table viewport.\n   * The rows that are partially visible are not counted.\n   *\n   * @memberof Core#\n   * @function countVisibleRows\n   * @returns {number} Number of visible rows or -1.\n   */\n  this.countVisibleRows = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleRowsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered rows including columns that are partially or fully rendered\n   * outside the table viewport.\n   *\n   * @memberof Core#\n   * @function countRenderedCols\n   * @returns {number} Returns -1 if table is not visible.\n   */\n  this.countRenderedCols = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedColumnsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered columns that are only visible in the table viewport.\n   * The columns that are partially visible are not counted.\n   *\n   * @memberof Core#\n   * @function countVisibleCols\n   * @returns {number} Number of visible columns or -1.\n   */\n  this.countVisibleCols = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleColumnsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered row headers.\n   *\n   * @since 14.0.0\n   * @memberof Core#\n   * @function countRowHeaders\n   * @returns {number} Number of row headers.\n   */\n  this.countRowHeaders = function() {\n    return this.view.getRowHeadersCount();\n  };\n\n  /**\n   * Returns the number of rendered column headers.\n   *\n   * @since 14.0.0\n   * @memberof Core#\n   * @function countColHeaders\n   * @returns {number} Number of column headers.\n   */\n  this.countColHeaders = function() {\n    return this.view.getColumnHeadersCount();\n  };\n\n  /**\n   * Returns the number of empty rows. If the optional ending parameter is `true`, returns the\n   * number of empty rows at the bottom of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyRows\n   * @param {boolean} [ending=false] If `true`, will only count empty rows at the end of the data source.\n   * @returns {number} Count empty rows.\n   */\n  this.countEmptyRows = function(ending = false) {\n    let emptyRows = 0;\n\n    rangeEachReverse(instance.countRows() - 1, (visualIndex) => {\n      if (instance.isEmptyRow(visualIndex)) {\n        emptyRows += 1;\n\n      } else if (ending === true) {\n        return false;\n      }\n    });\n\n    return emptyRows;\n  };\n\n  /**\n   * Returns the number of empty columns. If the optional ending parameter is `true`, returns the number of empty\n   * columns at right hand edge of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyCols\n   * @param {boolean} [ending=false] If `true`, will only count empty columns at the end of the data source row.\n   * @returns {number} Count empty cols.\n   */\n  this.countEmptyCols = function(ending = false) {\n    let emptyColumns = 0;\n\n    rangeEachReverse(instance.countCols() - 1, (visualIndex) => {\n      if (instance.isEmptyCol(visualIndex)) {\n        emptyColumns += 1;\n\n      } else if (ending === true) {\n        return false;\n      }\n    });\n\n    return emptyColumns;\n  };\n\n  /**\n   * Check if all cells in the row declared by the `row` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyRow\n   * @param {number} row Visual row index.\n   * @returns {boolean} `true` if the row at the given `row` is empty, `false` otherwise.\n   */\n  this.isEmptyRow = function(row) {\n    return tableMeta.isEmptyRow.call(instance, row);\n  };\n\n  /**\n   * Check if all cells in the the column declared by the `column` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyCol\n   * @param {number} column Column index.\n   * @returns {boolean} `true` if the column at the given `col` is empty, `false` otherwise.\n   */\n  this.isEmptyCol = function(column) {\n    return tableMeta.isEmptyCol.call(instance, column);\n  };\n\n  /**\n   * Select a single cell, or a single range of adjacent cells.\n   *\n   * To select a cell, pass its visual row and column indexes, for example: `selectCell(2, 4)`.\n   *\n   * To select a range, pass the visual indexes of the first and last cell in the range, for example: `selectCell(2, 4, 3, 5)`.\n   *\n   * If your columns have properties, you can pass those properties' values instead of column indexes, for example: `selectCell(2, 'first_name')`.\n   *\n   * By default, `selectCell()` also:\n   *  - Scrolls the viewport to the newly-selected cells.\n   *  - Switches the keyboard focus to Handsontable (by calling Handsontable's [`listen()`](#listen) method).\n   *\n   * @example\n   * ```js\n   * // select a single cell\n   * hot.selectCell(2, 4);\n   *\n   * // select a range of cells\n   * hot.selectCell(2, 4, 3, 5);\n   *\n   * // select a single cell, using a column property\n   * hot.selectCell(2, 'first_name');\n   *\n   * // select a range of cells, using column properties\n   * hot.selectCell(2, 'first_name', 3, 'last_name');\n   *\n   * // select a range of cells, without scrolling to them\n   * hot.selectCell(2, 4, 3, 5, false);\n   *\n   * // select a range of cells, without switching the keyboard focus to Handsontable\n   * hot.selectCell(2, 4, 3, 5, null, false);\n   * ```\n   *\n   * @memberof Core#\n   * @function selectCell\n   * @param {number} row A visual row index.\n   * @param {number|string} column A visual column index (`number`), or a column property's value (`string`).\n   * @param {number} [endRow] If selecting a range: the visual row index of the last cell in the range.\n   * @param {number|string} [endColumn] If selecting a range: the visual column index (or a column property's value) of the last cell in the range.\n   * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.\n   * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the previous keyboard focus.\n   * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.\n   */\n  this.selectCell = function(row, column, endRow, endColumn, scrollToCell = true, changeListener = true) {\n    if (isUndefined(row) || isUndefined(column)) {\n      return false;\n    }\n\n    return this.selectCells([[row, column, endRow, endColumn]], scrollToCell, changeListener);\n  };\n\n  /**\n   * Select multiple cells or ranges of cells, adjacent or non-adjacent.\n   *\n   * You can pass one of the below:\n   * - An array of arrays (which matches the output of Handsontable's [`getSelected()`](#getselected) method).\n   * - An array of [`CellRange`](@/api/cellRange.md) objects (which matches the output of Handsontable's [`getSelectedRange()`](#getselectedrange) method).\n   *\n   * To select multiple cells, pass the visual row and column indexes of each cell, for example: `hot.selectCells([[1, 1], [5, 5]])`.\n   *\n   * To select multiple ranges, pass the visual indexes of the first and last cell in each range, for example: `hot.selectCells([[1, 1, 2, 2], [6, 2, 0, 2]])`.\n   *\n   * If your columns have properties, you can pass those properties' values instead of column indexes, for example: `hot.selectCells([[1, 'first_name'], [5, 'last_name']])`.\n   *\n   * By default, `selectCell()` also:\n   *  - Scrolls the viewport to the newly-selected cells.\n   *  - Switches the keyboard focus to Handsontable (by calling Handsontable's [`listen()`](#listen) method).\n   *\n   * @example\n   * ```js\n   * // select non-adjacent cells\n   * hot.selectCells([[1, 1], [5, 5], [10, 10]]);\n   *\n   * // select non-adjacent ranges of cells\n   * hot.selectCells([[1, 1, 2, 2], [10, 10, 20, 20]]);\n   *\n   * // select cells and ranges of cells\n   * hot.selectCells([[1, 1, 2, 2], [3, 3], [6, 2, 0, 2]]);\n   *\n   * // select cells, using column properties\n   * hot.selectCells([[1, 'id', 2, 'first_name'], [3, 'full_name'], [6, 'last_name', 0, 'first_name']]);\n   *\n   * // select multiple ranges, using an array of `CellRange` objects\n   * const selected = hot.getSelectedRange();\n   *\n   * selected[0].from.row = 0;\n   * selected[0].from.col = 0;\n   * selected[0].to.row = 5;\n   * selected[0].to.col = 5;\n   *\n   * selected[1].from.row = 10;\n   * selected[1].from.col = 10;\n   * selected[1].to.row = 20;\n   * selected[1].to.col = 20;\n   *\n   * hot.selectCells(selected);\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectCells\n   * @param {Array[]|CellRange[]} coords Visual coordinates,\n   * passed either as an array of arrays (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)\n   * or as an array of [`CellRange`](@/api/cellRange.md) objects.\n   * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.\n   * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the previous keyboard focus.\n   * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.\n   */\n  this.selectCells = function(coords = [[]], scrollToCell = true, changeListener = true) {\n    if (scrollToCell === false) {\n      viewportScroller.suspend();\n    }\n\n    const wasSelected = selection.selectCells(coords);\n\n    if (wasSelected && changeListener) {\n      instance.listen();\n    }\n    viewportScroller.resume();\n\n    return wasSelected;\n  };\n\n  /**\n   * Select column specified by `startColumn` visual index, column property or a range of columns finishing at `endColumn`.\n   *\n   * @example\n   * ```js\n   * // Select column using visual index.\n   * hot.selectColumns(1);\n   * // Select column using column property.\n   * hot.selectColumns('id');\n   * // Select range of columns using visual indexes.\n   * hot.selectColumns(1, 4);\n   * // Select range of columns using visual indexes and mark the first header as highlighted.\n   * hot.selectColumns(1, 2, -1);\n   * // Select range of columns using visual indexes and mark the second cell as highlighted.\n   * hot.selectColumns(2, 1, 1);\n   * // Select range of columns using visual indexes and move the focus position somewhere in the middle of the range.\n   * hot.selectColumns(2, 5, { row: 2, col: 3 });\n   * // Select range of columns using column properties.\n   * hot.selectColumns('id', 'last_name');\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectColumns\n   * @param {number} startColumn The visual column index from which the selection starts.\n   * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`\n   * is not defined the column defined by `startColumn` will be selected.\n   * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position horizontally.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectColumns = function(startColumn, endColumn = startColumn, focusPosition) {\n    return selection.selectColumns(startColumn, endColumn, focusPosition);\n  };\n\n  /**\n   * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n   *\n   * @example\n   * ```js\n   * // Select row using visual index.\n   * hot.selectRows(1);\n   * // select a range of rows, using visual indexes.\n   * hot.selectRows(1, 4);\n   * // select a range of rows, using visual indexes, and mark the header as highlighted.\n   * hot.selectRows(1, 2, -1);\n   * // Select range of rows using visual indexes and mark the second cell as highlighted.\n   * hot.selectRows(2, 1, 1);\n   * // Select range of rows using visual indexes and move the focus position somewhere in the middle of the range.\n   * hot.selectRows(2, 5, { row: 2, col: 3 });\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectRows\n   * @param {number} startRow The visual row index from which the selection starts.\n   * @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`\n   * is not defined the row defined by `startRow` will be selected.\n   * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position vertically.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectRows = function(startRow, endRow = startRow, focusPosition) {\n    return selection.selectRows(startRow, endRow, focusPosition);\n  };\n\n  /**\n   * Deselects the current cell selection on the table.\n   *\n   * @memberof Core#\n   * @function deselectCell\n   */\n  this.deselectCell = function() {\n    selection.deselect();\n  };\n\n  /**\n   * Select all cells in the table excluding headers and corner elements.\n   *\n   * The previous selection is overwritten.\n   *\n   * ```js\n   * // Select all cells in the table along with row headers, including all headers and the corner cell.\n   * // Doesn't select column headers and corner elements.\n   * hot.selectAll();\n   *\n   * // Select all cells in the table, including row headers but excluding the corner cell and column headers.\n   * hot.selectAll(true, false);\n   *\n   * // Select all cells in the table, including all headers and the corner cell, but move the focus.\n   * // highlight to position 2, 1\n   * hot.selectAll(-2, -1, {\n   *    focusPosition: { row: 2, col: 1 }\n   * });\n   *\n   * // Select all cells in the table, without headers and corner elements.\n   * hot.selectAll(false);\n   * ```\n   *\n   * @since 0.38.2\n   * @memberof Core#\n   * @function selectAll\n   * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,\n   * `false` otherwise.\n   * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column\n   * headers, `false` otherwise.\n   *\n   * @param {object} [options] Additional object with options. Since 14.0.0\n   * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header\n   * focus position. The value takes an object with a `row` and `col` properties from -N to N, where\n   * negative values point to the headers and positive values point to the cell range. If `false`, the focus\n   * position won't be changed. Example:\n   * ```js\n   * hot.selectAll(0, 0, {\n   * focusPosition: { row: 0, col: 1 },\n   * disableHeadersHighlight: true\n   * })\n   * ```\n   *\n   * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when\n   * the logical coordinates points on them.\n   */\n  this.selectAll = function(includeRowHeaders = true, includeColumnHeaders = includeRowHeaders, options) {\n    viewportScroller.skipNextScrollCycle();\n    selection.selectAll(includeRowHeaders, includeColumnHeaders, options);\n  };\n\n  const getIndexToScroll = (indexMapper, visualIndex) => {\n    // Looking for a visual index on the right and then (when not found) on the left.\n    return indexMapper.getNearestNotHiddenIndex(visualIndex, 1, true);\n  };\n\n  /**\n   * Scroll viewport to coordinates specified by the `row` and/or `col` object properties.\n   *\n   * ```js\n   * // scroll the viewport to the visual row index (leave the horizontal scroll untouched)\n   * hot.scrollViewportTo({ row: 50 });\n   *\n   * // scroll the viewport to the passed coordinates so that the cell at 50, 50 will be snapped to\n   * // the bottom-end table's edge.\n   * hot.scrollViewportTo({\n   *   row: 50,\n   *   col: 50,\n   *   verticalSnap: 'bottom',\n   *   horizontalSnap: 'end',\n   * });\n   * ```\n   *\n   * @memberof Core#\n   * @function scrollViewportTo\n   * @param {object} options A dictionary containing the following parameters:\n   * @param {number} [options.row] Specifies the number of visual rows along the Y axis to scroll the viewport.\n   * @param {number} [options.col] Specifies the number of visual columns along the X axis to scroll the viewport.\n   * @param {'top' | 'bottom'} [options.verticalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.\n   * This option is a string which must take one of the following values:\n   * - `top`: The viewport will be scrolled to a row in such a way that it will be positioned on the top of the viewport;\n   * - `bottom`: The viewport will be scrolled to a row in such a way that it will be positioned on the bottom of the viewport;\n   * - If the property is not defined the vertical auto-snapping is enabled. Depending on where the viewport is scrolled from, a row will\n   * be positioned at the top or bottom of the viewport.\n   * @param {'start' | 'end'} [options.horizontalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.\n   * This option is a string which must take one of the following values:\n   * - `start`: The viewport will be scrolled to a column in such a way that it will be positioned on the start (left edge or right, if the layout direction is set to `rtl`) of the viewport;\n   * - `end`: The viewport will be scrolled to a column in such a way that it will be positioned on the end (right edge or left, if the layout direction is set to `rtl`) of the viewport;\n   * - If the property is not defined the horizontal auto-snapping is enabled. Depending on where the viewport is scrolled from, a column will\n   * be positioned at the start or end of the viewport.\n   * @param {boolean} [options.considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which\n   * may be rendered when they are in the viewport (we don't consider hidden indexes as they aren't rendered).\n   * @returns {boolean} `true` if viewport was scrolled, `false` otherwise.\n   */\n  this.scrollViewportTo = function(options) {\n    // Support for backward compatibility arguments: (row, col, snapToBottom, snapToRight, considerHiddenIndexes)\n    if (typeof options === 'number') {\n      /* eslint-disable prefer-rest-params */\n      options = {\n        row: arguments[0],\n        col: arguments[1],\n        verticalSnap: arguments[2] ? 'bottom' : 'top',\n        horizontalSnap: arguments[3] ? 'end' : 'start',\n        considerHiddenIndexes: arguments[4] ?? true,\n      };\n      /* eslint-enable prefer-rest-params */\n    }\n\n    const {\n      row,\n      col,\n      verticalSnap,\n      horizontalSnap,\n      considerHiddenIndexes\n    } = options ?? {};\n\n    let snapToTop;\n    let snapToBottom;\n    let snapToInlineStart;\n    let snapToInlineEnd;\n\n    if (verticalSnap !== undefined) {\n      snapToTop = verticalSnap === 'top';\n      snapToBottom = !snapToTop;\n    }\n\n    if (horizontalSnap !== undefined) {\n      snapToInlineStart = horizontalSnap === 'start';\n      snapToInlineEnd = !snapToInlineStart;\n    }\n\n    let renderableRow = row;\n    let renderableColumn = col;\n\n    if (considerHiddenIndexes === undefined || considerHiddenIndexes) {\n      const isValidRowGrid = Number.isInteger(row) && row >= 0;\n      const isValidColumnGrid = Number.isInteger(col) && col >= 0;\n\n      const visualRowToScroll = isValidRowGrid ? getIndexToScroll(this.rowIndexMapper, row) : undefined;\n      const visualColumnToScroll = isValidColumnGrid ? getIndexToScroll(this.columnIndexMapper, col) : undefined;\n\n      if (visualRowToScroll === null || visualColumnToScroll === null) {\n        return false;\n      }\n\n      renderableRow = isValidRowGrid ?\n        instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : row;\n      renderableColumn = isValidColumnGrid ?\n        instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : col;\n    }\n\n    const isRowInteger = Number.isInteger(renderableRow);\n    const isColumnInteger = Number.isInteger(renderableColumn);\n\n    if (isRowInteger && renderableRow >= 0 && isColumnInteger && renderableColumn >= 0) {\n      return instance.view.scrollViewport(\n        instance._createCellCoords(renderableRow, renderableColumn),\n        snapToTop,\n        snapToInlineEnd,\n        snapToBottom,\n        snapToInlineStart\n      );\n    }\n\n    if (isRowInteger && renderableRow >= 0 && (isColumnInteger && renderableColumn < 0 || !isColumnInteger)) {\n      return instance.view.scrollViewportVertically(renderableRow, snapToTop, snapToBottom);\n    }\n\n    if (isColumnInteger && renderableColumn >= 0 && (isRowInteger && renderableRow < 0 || !isRowInteger)) {\n      return instance.view.scrollViewportHorizontally(renderableColumn, snapToInlineEnd, snapToInlineStart);\n    }\n\n    return false;\n  };\n\n  /**\n   * Scrolls the viewport to coordinates specified by the currently focused cell.\n   *\n   * @since 14.0.0\n   * @memberof Core#\n   * @fires Hooks#afterScroll\n   * @function scrollToFocusedCell\n   * @param {Function} callback The callback function to call after the viewport is scrolled.\n   */\n  this.scrollToFocusedCell = function(callback = () => {}) {\n    if (!this.selection.isSelected()) {\n      return;\n    }\n\n    this.addHookOnce('afterScroll', callback);\n\n    const { highlight } = this.getSelectedRangeLast();\n    const isScrolled = this.scrollViewportTo(highlight.toObject());\n\n    if (isScrolled) {\n      this.view.render();\n    } else {\n      this.removeHook('afterScroll', callback);\n      this._registerImmediate(() => callback());\n    }\n  };\n\n  /**\n   * Removes the table from the DOM and destroys the instance of the Handsontable.\n   *\n   * @memberof Core#\n   * @function destroy\n   * @fires Hooks#afterDestroy\n   */\n  this.destroy = function() {\n    instance._clearTimeouts();\n    instance._clearImmediates();\n\n    if (instance.view) { // in case HT is destroyed before initialization has finished\n      instance.view.destroy();\n    }\n    if (dataSource) {\n      dataSource.destroy();\n    }\n    dataSource = null;\n\n    this.getShortcutManager().destroy();\n    metaManager.clearCache();\n    foreignHotInstances.delete(this.guid);\n\n    if (isRootInstance(instance)) {\n      const licenseInfo = this.rootDocument.querySelector('.hot-display-license-info');\n\n      if (licenseInfo) {\n        licenseInfo.parentNode.removeChild(licenseInfo);\n      }\n    }\n    empty(instance.rootElement);\n    eventManager.destroy();\n\n    if (editorManager) {\n      editorManager.destroy();\n    }\n\n    // The plugin's `destroy` method is called as a consequence and it should handle\n    // unregistration of plugin's maps. Some unregistered maps reset the cache.\n    instance.batchExecution(() => {\n      instance.rowIndexMapper.unregisterAll();\n      instance.columnIndexMapper.unregisterAll();\n\n      pluginsRegistry\n        .getItems()\n        .forEach(([, plugin]) => {\n          plugin.destroy();\n        });\n      pluginsRegistry.clear();\n      instance.runHooks('afterDestroy');\n    }, true);\n\n    Hooks.getSingleton().destroy(instance);\n\n    objectEach(instance, (property, key, obj) => {\n      // replace instance methods with post mortem\n      if (isFunction(property)) {\n        obj[key] = postMortem(key);\n\n      } else if (key !== 'guid') {\n        // replace instance properties with null (restores memory)\n        // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n        obj[key] = null;\n      }\n    });\n\n    instance.isDestroyed = true;\n\n    // replace private properties with null (restores memory)\n    // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n    if (datamap) {\n      datamap.destroy();\n    }\n\n    datamap = null;\n    grid = null;\n    selection = null;\n    editorManager = null;\n    instance = null;\n  };\n\n  /**\n   * Replacement for all methods after the Handsontable was destroyed.\n   *\n   * @private\n   * @param {string} method The method name.\n   * @returns {Function}\n   */\n  function postMortem(method) {\n    return () => {\n      throw new Error(`The \"${method}\" method cannot be called because this Handsontable instance has been destroyed`);\n    };\n  }\n\n  /**\n   * Returns the active editor class instance.\n   *\n   * @memberof Core#\n   * @function getActiveEditor\n   * @returns {BaseEditor} The active editor instance.\n   */\n  this.getActiveEditor = function() {\n    return editorManager.getActiveEditor();\n  };\n\n  /**\n   * Returns the first rendered row in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstRenderedVisibleRow\n   * @returns {number | null}\n   */\n  this.getFirstRenderedVisibleRow = function() {\n    return instance.view.getFirstRenderedVisibleRow();\n  };\n\n  /**\n   * Returns the last rendered row in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastRenderedVisibleRow\n   * @returns {number | null}\n   */\n  this.getLastRenderedVisibleRow = function() {\n    return instance.view.getLastRenderedVisibleRow();\n  };\n\n  /**\n   * Returns the first rendered column in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstRenderedVisibleColumn\n   * @returns {number | null}\n   */\n  this.getFirstRenderedVisibleColumn = function() {\n    return instance.view.getFirstRenderedVisibleColumn();\n  };\n\n  /**\n   * Returns the last rendered column in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastRenderedVisibleColumn\n   * @returns {number | null}\n   */\n  this.getLastRenderedVisibleColumn = function() {\n    return instance.view.getLastRenderedVisibleColumn();\n  };\n\n  /**\n   * Returns the first fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstFullyVisibleRow\n   * @returns {number | null}\n   */\n  this.getFirstFullyVisibleRow = function() {\n    return instance.view.getFirstFullyVisibleRow();\n  };\n\n  /**\n   * Returns the last fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastFullyVisibleRow\n   * @returns {number | null}\n   */\n  this.getLastFullyVisibleRow = function() {\n    return instance.view.getLastFullyVisibleRow();\n  };\n\n  /**\n   * Returns the first fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstFullyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getFirstFullyVisibleColumn = function() {\n    return instance.view.getFirstFullyVisibleColumn();\n  };\n\n  /**\n   * Returns the last fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastFullyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getLastFullyVisibleColumn = function() {\n    return instance.view.getLastFullyVisibleColumn();\n  };\n\n  /**\n   * Returns the first partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstPartiallyVisibleRow\n   * @returns {number | null}\n   */\n  this.getFirstPartiallyVisibleRow = function() {\n    return instance.view.getFirstPartiallyVisibleRow();\n  };\n\n  /**\n   * Returns the last partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastPartiallyVisibleRow\n   * @returns {number | null}\n   */\n  this.getLastPartiallyVisibleRow = function() {\n    return instance.view.getLastPartiallyVisibleRow();\n  };\n\n  /**\n   * Returns the first partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstPartiallyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getFirstPartiallyVisibleColumn = function() {\n    return instance.view.getFirstPartiallyVisibleColumn();\n  };\n\n  /**\n   * Returns the last partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastPartiallyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getLastPartiallyVisibleColumn = function() {\n    return instance.view.getLastPartiallyVisibleColumn();\n  };\n\n  /**\n   * Returns plugin instance by provided its name.\n   *\n   * @memberof Core#\n   * @function getPlugin\n   * @param {string} pluginName The plugin name.\n   * @returns {BasePlugin|undefined} The plugin instance or undefined if there is no plugin.\n   */\n  this.getPlugin = function(pluginName) {\n    const unifiedPluginName = toUpperCaseFirst(pluginName);\n\n    // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n    if (unifiedPluginName === 'UndoRedo') {\n      return this.undoRedo;\n    }\n\n    return pluginsRegistry.getItem(unifiedPluginName);\n  };\n\n  /**\n   * Returns name of the passed plugin.\n   *\n   * @private\n   * @memberof Core#\n   * @param {BasePlugin} plugin The plugin instance.\n   * @returns {string}\n   */\n  this.getPluginName = function(plugin) {\n    // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n    if (plugin === this.undoRedo) {\n      return this.undoRedo.constructor.PLUGIN_KEY;\n    }\n\n    return pluginsRegistry.getId(plugin);\n  };\n\n  /**\n   * Returns the Handsontable instance.\n   *\n   * @memberof Core#\n   * @function getInstance\n   * @returns {Handsontable} The Handsontable instance.\n   */\n  this.getInstance = function() {\n    return instance;\n  };\n\n  /**\n   * Adds listener to the specified hook name (only for this Handsontable instance).\n   *\n   * @memberof Core#\n   * @function addHook\n   * @see Hooks#add\n   * @param {string} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   * @example\n   * ```js\n   * hot.addHook('beforeInit', myCallback);\n   * ```\n   */\n  this.addHook = function(key, callback, orderIndex) {\n    Hooks.getSingleton().add(key, callback, instance, orderIndex);\n  };\n\n  /**\n   * Check if for a specified hook name there are added listeners (only for this Handsontable instance). All available\n   * hooks you will find {@link Hooks}.\n   *\n   * @memberof Core#\n   * @function hasHook\n   * @see Hooks#has\n   * @param {string} key Hook name.\n   * @returns {boolean}\n   *\n   * @example\n   * ```js\n   * const hasBeforeInitListeners = hot.hasHook('beforeInit');\n   * ```\n   */\n  this.hasHook = function(key) {\n    return Hooks.getSingleton().has(key, instance) || Hooks.getSingleton().has(key);\n  };\n\n  /**\n   * Adds listener to specified hook name (only for this Handsontable instance). After the listener is triggered,\n   * it will be automatically removed.\n   *\n   * @memberof Core#\n   * @function addHookOnce\n   * @see Hooks#once\n   * @param {string} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   * @example\n   * ```js\n   * hot.addHookOnce('beforeInit', myCallback);\n   * ```\n   */\n  this.addHookOnce = function(key, callback, orderIndex) {\n    Hooks.getSingleton().once(key, callback, instance, orderIndex);\n  };\n\n  /**\n   * Removes the hook listener previously registered with {@link Core#addHook}.\n   *\n   * @memberof Core#\n   * @function removeHook\n   * @see Hooks#remove\n   * @param {string} key Hook name.\n   * @param {Function} callback Reference to the function which has been registered using {@link Core#addHook}.\n   *\n   * @example\n   * ```js\n   * hot.removeHook('beforeInit', myCallback);\n   * ```\n   */\n  this.removeHook = function(key, callback) {\n    Hooks.getSingleton().remove(key, callback, instance);\n  };\n\n  /**\n   * Run the callbacks for the hook provided in the `key` argument using the parameters given in the other arguments.\n   *\n   * @memberof Core#\n   * @function runHooks\n   * @see Hooks#run\n   * @param {string} key Hook name.\n   * @param {*} [p1] Argument passed to the callback.\n   * @param {*} [p2] Argument passed to the callback.\n   * @param {*} [p3] Argument passed to the callback.\n   * @param {*} [p4] Argument passed to the callback.\n   * @param {*} [p5] Argument passed to the callback.\n   * @param {*} [p6] Argument passed to the callback.\n   * @returns {*}\n   *\n   * @example\n   * ```js\n   * // Run built-in hook\n   * hot.runHooks('beforeInit');\n   * // Run custom hook\n   * hot.runHooks('customAction', 10, 'foo');\n   * ```\n   */\n  this.runHooks = function(key, p1, p2, p3, p4, p5, p6) {\n    return Hooks.getSingleton().run(instance, key, p1, p2, p3, p4, p5, p6);\n  };\n\n  /**\n   * Get language phrase for specified dictionary key.\n   *\n   * @memberof Core#\n   * @function getTranslatedPhrase\n   * @since 0.35.0\n   * @param {string} dictionaryKey Constant which is dictionary key.\n   * @param {*} extraArguments Arguments which will be handled by formatters.\n   * @returns {string}\n   */\n  this.getTranslatedPhrase = function(dictionaryKey, extraArguments) {\n    return getTranslatedPhrase(tableMeta.language, dictionaryKey, extraArguments);\n  };\n\n  /**\n   * Converts instance into outerHTML of HTMLTableElement.\n   *\n   * @memberof Core#\n   * @function toHTML\n   * @since 7.1.0\n   * @returns {string}\n   */\n  this.toHTML = () => instanceToHTML(this);\n\n  /**\n   * Converts instance into HTMLTableElement.\n   *\n   * @memberof Core#\n   * @function toTableElement\n   * @since 7.1.0\n   * @returns {HTMLTableElement}\n   */\n  this.toTableElement = () => {\n    const tempElement = this.rootDocument.createElement('div');\n\n    tempElement.insertAdjacentHTML('afterbegin', instanceToHTML(this));\n\n    return tempElement.firstElementChild;\n  };\n\n  this.timeouts = [];\n\n  /**\n   * Sets timeout. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {number|Function} handle Handler returned from setTimeout or function to execute (it will be automatically wraped\n   *                                 by setTimeout function).\n   * @param {number} [delay=0] If first argument is passed as a function this argument set delay of the execution of that function.\n   * @private\n   */\n  this._registerTimeout = function(handle, delay = 0) {\n    let handleFunc = handle;\n\n    if (typeof handleFunc === 'function') {\n      handleFunc = setTimeout(handleFunc, delay);\n    }\n\n    this.timeouts.push(handleFunc);\n  };\n\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n  this._clearTimeouts = function() {\n    arrayEach(this.timeouts, (handler) => {\n      clearTimeout(handler);\n    });\n  };\n\n  this.immediates = [];\n\n  /**\n   * Execute function execution to the next event loop cycle. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {Function} callback Function to be delayed in execution.\n   * @private\n   */\n  this._registerImmediate = function(callback) {\n    this.immediates.push(setImmediate(callback));\n  };\n\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n  this._clearImmediates = function() {\n    arrayEach(this.immediates, (handler) => {\n      clearImmediate(handler);\n    });\n  };\n\n  /**\n   * Gets the instance of the EditorManager.\n   *\n   * @private\n   * @returns {EditorManager}\n   */\n  this._getEditorManager = function() {\n    return editorManager;\n  };\n\n  /**\n   * Check if currently it is RTL direction.\n   *\n   * @private\n   * @memberof Core#\n   * @function isRtl\n   * @returns {boolean} True if RTL.\n   */\n  this.isRtl = function() {\n    return instance.rootWindow.getComputedStyle(instance.rootElement).direction === 'rtl';\n  };\n\n  /**\n   * Check if currently it is LTR direction.\n   *\n   * @private\n   * @memberof Core#\n   * @function isLtr\n   * @returns {boolean} True if LTR.\n   */\n  this.isLtr = function() {\n    return !instance.isRtl();\n  };\n\n  /**\n   * Returns 1 for LTR; -1 for RTL. Useful for calculations.\n   *\n   * @private\n   * @memberof Core#\n   * @function getDirectionFactor\n   * @returns {number} Returns 1 for LTR; -1 for RTL.\n   */\n  this.getDirectionFactor = function() {\n    return instance.isLtr() ? 1 : -1;\n  };\n\n  const shortcutManager = createShortcutManager({\n    handleEvent() {\n      return instance.isListening();\n    },\n    beforeKeyDown: (event) => {\n      return this.runHooks('beforeKeyDown', event);\n    },\n    afterKeyDown: (event) => {\n      if (this.isDestroyed) { // Handsontable could be destroyed after performing action (executing a callback).\n        return;\n      }\n\n      instance.runHooks('afterDocumentKeyDown', event);\n    },\n    ownerWindow: this.rootWindow,\n  });\n\n  this.addHook('beforeOnCellMouseDown', (event) => {\n    // Releasing keys as some browser/system shortcuts break events sequence (thus the `keyup` event isn't triggered).\n    if (event.ctrlKey === false && event.metaKey === false) {\n      shortcutManager.releasePressedKeys();\n    }\n  });\n\n  /**\n   * Returns instance of a manager responsible for handling shortcuts stored in some contexts. It run actions after\n   * pressing key combination in active Handsontable instance.\n   *\n   * @memberof Core#\n   * @since 12.0.0\n   * @function getShortcutManager\n   * @returns {ShortcutManager} Instance of {@link ShortcutManager}\n   */\n  this.getShortcutManager = function() {\n    return shortcutManager;\n  };\n\n  /**\n   * Return the Focus Manager responsible for managing the browser's focus in the table.\n   *\n   * @memberof Core#\n   * @since 14.0.0\n   * @function getFocusManager\n   * @returns {FocusManager}\n   */\n  this.getFocusManager = function() {\n    return focusManager;\n  };\n\n  getPluginsNames().forEach((pluginName) => {\n    const PluginClass = getPlugin(pluginName);\n\n    pluginsRegistry.addItem(pluginName, new PluginClass(this));\n  });\n\n  registerAllShortcutContexts(instance);\n\n  shortcutManager.setActiveContextName('grid');\n\n  Hooks.getSingleton().run(instance, 'construct');\n}\n","'use strict';\n/* eslint-disable no-unused-vars -- required for functions `.length` */\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar wrapErrorConstructorWithCause = require('../internals/wrap-error-constructor-with-cause');\n\nvar WEB_ASSEMBLY = 'WebAssembly';\nvar WebAssembly = globalThis[WEB_ASSEMBLY];\n\n// eslint-disable-next-line es/no-error-cause -- feature detection\nvar FORCED = new Error('e', { cause: 7 }).cause !== 7;\n\nvar exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {\n  var O = {};\n  O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);\n  $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);\n};\n\nvar exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {\n  if (WebAssembly && WebAssembly[ERROR_NAME]) {\n    var O = {};\n    O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);\n    $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);\n  }\n};\n\n// https://tc39.es/ecma262/#sec-nativeerror\nexportGlobalErrorCauseWrapper('Error', function (init) {\n  return function Error(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('EvalError', function (init) {\n  return function EvalError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('RangeError', function (init) {\n  return function RangeError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('ReferenceError', function (init) {\n  return function ReferenceError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('SyntaxError', function (init) {\n  return function SyntaxError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('TypeError', function (init) {\n  return function TypeError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('URIError', function (init) {\n  return function URIError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('CompileError', function (init) {\n  return function CompileError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('LinkError', function (init) {\n  return function LinkError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {\n  return function RuntimeError(message) { return apply(init, this, arguments); };\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = globalThis;\n  } else if (STATIC) {\n    target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n  } else {\n    target = globalThis[TARGET] && globalThis[TARGET].prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    defineBuiltIn(target, key, sourceProperty, options);\n  }\n};\n","'use strict';\nvar check = function (it) {\n  return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  check(typeof this == 'object' && this) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = (function () { /* empty */ }).bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n  return function () {\n    return call.apply(fn, arguments);\n  };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw new $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol('symbol detection');\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n  // of course, fail.\n  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name)) {\n    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n      ? Symbol[name]\n      : createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n  return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n  version: '3.38.1',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    globalThis[key] = value;\n  } return value;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a !== 7;\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n  if (!options) options = {};\n  var simple = options.enumerable;\n  var name = options.name !== undefined ? options.name : key;\n  if (isCallable(value)) makeBuiltIn(value, name, options);\n  if (options.global) {\n    if (simple) O[key] = value;\n    else defineGlobalProperty(key, value);\n  } else {\n    try {\n      if (!options.unsafe) delete O[key];\n      else if (O[key]) simple = true;\n    } catch (error) { /* empty */ }\n    if (simple) O[key] = value;\n    else definePropertyModule.f(O, key, {\n      value: value,\n      enumerable: false,\n      configurable: !options.nonConfigurable,\n      writable: !options.nonWritable\n    });\n  } return O;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n  if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n    name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n  }\n  if (options && options.getter) name = 'get ' + name;\n  if (options && options.setter) name = 'set ' + name;\n  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n    else value.name = name;\n  }\n  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n    defineProperty(value, 'length', { value: options.arity });\n  }\n  try {\n    if (options && hasOwn(options, 'constructor') && options.constructor) {\n      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n    } else if (value.prototype) value.prototype = undefined;\n  } catch (error) { /* empty */ }\n  var state = enforceInternalState(value);\n  if (!hasOwn(state, 'source')) {\n    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n  } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  /* eslint-disable no-self-assign -- prototype methods protection */\n  store.get = store.get;\n  store.has = store.has;\n  store.set = store.set;\n  /* eslint-enable no-self-assign -- prototype methods protection */\n  set = function (it, metadata) {\n    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    store.set(it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return store.get(it) || {};\n  };\n  has = function (it) {\n    return store.has(it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    if (length === 0) return !IS_INCLUDES && -1;\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el !== el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value !== value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  var len = toIntegerOrInfinity(argument);\n  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value === POLYFILL ? true\n    : value === NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar installErrorCause = require('../internals/install-error-cause');\nvar installErrorStack = require('../internals/error-stack-install');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nmodule.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {\n  var STACK_TRACE_LIMIT = 'stackTraceLimit';\n  var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;\n  var path = FULL_NAME.split('.');\n  var ERROR_NAME = path[path.length - 1];\n  var OriginalError = getBuiltIn.apply(null, path);\n\n  if (!OriginalError) return;\n\n  var OriginalErrorPrototype = OriginalError.prototype;\n\n  // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006\n  if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;\n\n  if (!FORCED) return OriginalError;\n\n  var BaseError = getBuiltIn('Error');\n\n  var WrappedError = wrapper(function (a, b) {\n    var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);\n    var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();\n    if (message !== undefined) createNonEnumerableProperty(result, 'message', message);\n    installErrorStack(result, WrappedError, result.stack, 2);\n    if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);\n    if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);\n    return result;\n  });\n\n  WrappedError.prototype = OriginalErrorPrototype;\n\n  if (ERROR_NAME !== 'Error') {\n    if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);\n    else copyConstructorProperties(WrappedError, BaseError, { name: true });\n  } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {\n    proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);\n    proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace');\n  }\n\n  copyConstructorProperties(WrappedError, OriginalError);\n\n  if (!IS_PURE) try {\n    // Safari 13- bug: WebAssembly errors does not have a proper `.name`\n    if (OriginalErrorPrototype.name !== ERROR_NAME) {\n      createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);\n    }\n    OriginalErrorPrototype.constructor = WrappedError;\n  } catch (error) { /* empty */ }\n\n  return WrappedError;\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    requireObjectCoercible(O);\n    aPossiblePrototype(proto);\n    if (!isObject(O)) return O;\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n  } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (isPossiblePrototype(argument)) return argument;\n  throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n  return isObject(argument) || argument === null;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n  key in Target || defineProperty(Target, key, {\n    configurable: true,\n    get: function () { return Source[key]; },\n    set: function (it) { Source[key] = it; }\n  });\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n","'use strict';\nvar toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n  return $String(argument);\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n  if (isObject(options) && 'cause' in options) {\n    createNonEnumerableProperty(O, 'cause', options.cause);\n  }\n};\n","'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\n// non-standard V8\nvar captureStackTrace = Error.captureStackTrace;\n\nmodule.exports = function (error, C, stack, dropEntries) {\n  if (ERROR_STACK_INSTALLABLE) {\n    if (captureStackTrace) captureStackTrace(error, C);\n    else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries));\n  }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } return stack;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n  var error = new Error('a');\n  if (!('stack' in error)) return true;\n  // eslint-disable-next-line es/no-object-defineproperty -- safe\n  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n  return error.stack !== 7;\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n  return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 <= 121 and Safari <= 15.4; FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).push();\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  push: function push(item) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var argCount = arguments.length;\n    doesNotExceedSafeInteger(len + argCount);\n    for (var i = 0; i < argCount; i++) {\n      O[len] = arguments[i];\n      len++;\n    }\n    setArrayLength(O, len);\n    return len;\n  }\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n  // makes no sense without proper strict mode support\n  if (this !== undefined) return true;\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).length = 1;\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n  if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n    throw new $TypeError('Cannot set read only .length');\n  } return O.length = length;\n} : function (O, length) {\n  return O.length = length;\n};\n","'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) === 'Array';\n};\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n  return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar difference = require('../internals/set-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('difference') }, {\n  difference: difference\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function difference(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = clone(O);\n  if (size(O) <= otherRec.size) iterateSet(O, function (e) {\n    if (otherRec.includes(e)) remove(result, e);\n  });\n  else iterateSimple(otherRec.getIterator(), function (e) {\n    if (has(O, e)) remove(result, e);\n  });\n  return result;\n};\n","'use strict';\nvar has = require('../internals/set-helpers').has;\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n  has(it);\n  return it;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-set -- safe\n  Set: Set,\n  add: uncurryThis(SetPrototype.add),\n  has: uncurryThis(SetPrototype.has),\n  remove: uncurryThis(SetPrototype['delete']),\n  proto: SetPrototype\n};\n","'use strict';\nvar SetHelpers = require('../internals/set-helpers');\nvar iterate = require('../internals/set-iterate');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n  var result = new Set();\n  iterate(set, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar iterateSimple = require('../internals/iterate-simple');\nvar SetHelpers = require('../internals/set-helpers');\n\nvar Set = SetHelpers.Set;\nvar SetPrototype = SetHelpers.proto;\nvar forEach = uncurryThis(SetPrototype.forEach);\nvar keys = uncurryThis(SetPrototype.keys);\nvar next = keys(new Set()).next;\n\nmodule.exports = function (set, fn, interruptible) {\n  return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n","'use strict';\nvar call = require('../internals/function-call');\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n  var next = record.next;\n  var step, result;\n  while (!(step = call(next, iterator)).done) {\n    result = fn(step.value);\n    if (result !== undefined) return result;\n  }\n};\n","'use strict';\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar SetHelpers = require('../internals/set-helpers');\n\nmodule.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n  return set.size;\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar call = require('../internals/function-call');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n  this.set = set;\n  this.size = max(intSize, 0);\n  this.has = aCallable(set.has);\n  this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n  getIterator: function () {\n    return getIteratorDirect(anObject(call(this.keys, this.set)));\n  },\n  includes: function (it) {\n    return call(this.has, this.set, it);\n  }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n  anObject(obj);\n  var numSize = +obj.size;\n  // NOTE: If size is undefined, then numSize will be NaN\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n  var intSize = toIntegerOrInfinity(numSize);\n  if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n  return new SetRecord(obj, intSize);\n};\n","'use strict';\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect\nmodule.exports = function (obj) {\n  return {\n    iterator: obj,\n    next: obj.next,\n    done: false\n  };\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nvar createSetLike = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return false;\n    },\n    keys: function () {\n      return {\n        next: function () {\n          return { done: true };\n        }\n      };\n    }\n  };\n};\n\nmodule.exports = function (name) {\n  var Set = getBuiltIn('Set');\n  try {\n    new Set()[name](createSetLike(0));\n    try {\n      // late spec change, early WebKit ~ Safari 17.0 beta implementation does not pass it\n      // https://github.com/tc39/proposal-set-methods/pull/88\n      new Set()[name](createSetLike(-1));\n      return false;\n    } catch (error2) {\n      return true;\n    }\n  } catch (error) {\n    return false;\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar intersection = require('../internals/set-intersection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () {\n  // eslint-disable-next-line es/no-array-from, es/no-set -- testing\n  return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  intersection: intersection\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function intersection(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = new Set();\n\n  if (size(O) > otherRec.size) {\n    iterateSimple(otherRec.getIterator(), function (e) {\n      if (has(O, e)) add(result, e);\n    });\n  } else {\n    iterateSet(O, function (e) {\n      if (otherRec.includes(e)) add(result, e);\n    });\n  }\n\n  return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isDisjointFrom = require('../internals/set-is-disjoint-from');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isDisjointFrom` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isDisjointFrom') }, {\n  isDisjointFrom: isDisjointFrom\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom\nmodule.exports = function isDisjointFrom(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n    if (otherRec.includes(e)) return false;\n  }, true) !== false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isSubsetOf = require('../internals/set-is-subset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSubsetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSubsetOf') }, {\n  isSubsetOf: isSubsetOf\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar size = require('../internals/set-size');\nvar iterate = require('../internals/set-iterate');\nvar getSetRecord = require('../internals/get-set-record');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf\nmodule.exports = function isSubsetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) > otherRec.size) return false;\n  return iterate(O, function (e) {\n    if (!otherRec.includes(e)) return false;\n  }, true) !== false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isSupersetOf = require('../internals/set-is-superset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSupersetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSupersetOf') }, {\n  isSupersetOf: isSupersetOf\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf\nmodule.exports = function isSupersetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) < otherRec.size) return false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar symmetricDifference = require('../internals/set-symmetric-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('symmetricDifference') }, {\n  symmetricDifference: symmetricDifference\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function symmetricDifference(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (e) {\n    if (has(O, e)) remove(result, e);\n    else add(result, e);\n  });\n  return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar union = require('../internals/set-union');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('union') }, {\n  union: union\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar add = require('../internals/set-helpers').add;\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function union(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/web.clear-immediate');\nrequire('../modules/web.set-immediate');\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar clearImmediate = require('../internals/task').clear;\n\n// `clearImmediate` method\n// http://w3c.github.io/setImmediate/#si-clearImmediate\n$({ global: true, bind: true, enumerable: true, forced: globalThis.clearImmediate !== clearImmediate }, {\n  clearImmediate: clearImmediate\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/environment-is-ios');\nvar IS_NODE = require('../internals/environment-is-node');\n\nvar set = globalThis.setImmediate;\nvar clear = globalThis.clearImmediate;\nvar process = globalThis.process;\nvar Dispatch = globalThis.Dispatch;\nvar Function = globalThis.Function;\nvar MessageChannel = globalThis.MessageChannel;\nvar String = globalThis.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar $location, defer, channel, port;\n\nfails(function () {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  $location = globalThis.location;\n});\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar eventListener = function (event) {\n  run(event.data);\n};\n\nvar globalPostMessageDefer = function (id) {\n  // old engines have not location.origin\n  globalThis.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(handler) {\n    validateArgumentsLength(arguments.length, 1);\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(fn, undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = eventListener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    globalThis.addEventListener &&\n    isCallable(globalThis.postMessage) &&\n    !globalThis.importScripts &&\n    $location && $location.protocol !== 'file:' &&\n    !fails(globalPostMessageDefer)\n  ) {\n    defer = globalPostMessageDefer;\n    globalThis.addEventListener('message', eventListener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n  // Nashorn bug:\n  //   https://github.com/zloirock/core-js/issues/1128\n  //   https://github.com/zloirock/core-js/issues/1130\n  if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw new $TypeError('Not enough arguments');\n  return passed;\n};\n","'use strict';\nvar userAgent = require('../internals/environment-user-agent');\n\n// eslint-disable-next-line redos/no-vulnerable -- safe\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","'use strict';\nvar ENVIRONMENT = require('../internals/environment');\n\nmodule.exports = ENVIRONMENT === 'NODE';\n","'use strict';\n/* global Bun, Deno -- detection */\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\nvar classof = require('../internals/classof-raw');\n\nvar userAgentStartsWith = function (string) {\n  return userAgent.slice(0, string.length) === string;\n};\n\nmodule.exports = (function () {\n  if (userAgentStartsWith('Bun/')) return 'BUN';\n  if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';\n  if (userAgentStartsWith('Deno/')) return 'DENO';\n  if (userAgentStartsWith('Node.js/')) return 'NODE';\n  if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';\n  if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';\n  if (classof(globalThis.process) === 'process') return 'NODE';\n  if (globalThis.window && globalThis.document) return 'BROWSER';\n  return 'REST';\n})();\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar setTask = require('../internals/task').set;\nvar schedulersFix = require('../internals/schedulers-fix');\n\n// https://github.com/oven-sh/bun/issues/1633\nvar setImmediate = globalThis.setImmediate ? schedulersFix(setTask, false) : setTask;\n\n// `setImmediate` method\n// http://w3c.github.io/setImmediate/#si-setImmediate\n$({ global: true, bind: true, enumerable: true, forced: globalThis.setImmediate !== setImmediate }, {\n  setImmediate: setImmediate\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar ENVIRONMENT = require('../internals/environment');\nvar USER_AGENT = require('../internals/environment-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar Function = globalThis.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENVIRONMENT === 'BUN' && (function () {\n  var version = globalThis.Bun.version.split('.');\n  return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');\n})();\n\n// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n// https://github.com/oven-sh/bun/issues/1633\nmodule.exports = function (scheduler, hasTimeArg) {\n  var firstParamIndex = hasTimeArg ? 2 : 1;\n  return WRAP ? function (handler, timeout /* , ...arguments */) {\n    var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n    var callback = boundArgs ? function () {\n      apply(fn, this, params);\n    } : fn;\n    return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n  } : scheduler;\n};\n","import { sanitize } from '../string';\nimport { A11Y_HIDDEN } from '../a11y';\n\n/**\n * Get the parent of the specified node in the DOM tree.\n *\n * @param {HTMLElement} element Element from which traversing is started.\n * @param {number} [level=0] Traversing deep level.\n * @returns {HTMLElement|null}\n */\nexport function getParent(element, level = 0) {\n  let iteration = -1;\n  let parent = null;\n  let elementToCheck = element;\n\n  while (elementToCheck !== null) {\n    if (iteration === level) {\n      parent = elementToCheck;\n      break;\n    }\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n\n    } else {\n      iteration += 1;\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return parent;\n}\n\n/**\n * Check if the provided element is a child of the provided Handsontable container.\n *\n * @param {HTMLElement} element Element to be analyzed.\n * @param {HTMLElement} thisHotContainer The Handsontable container.\n * @returns {boolean}\n */\nexport function isThisHotChild(element, thisHotContainer) {\n  const closestHandsontableContainer = element.closest('.handsontable');\n\n  return !!closestHandsontableContainer &&\n    (\n      closestHandsontableContainer.parentNode === thisHotContainer ||\n      closestHandsontableContainer === thisHotContainer\n    );\n}\n\n/**\n * Gets `frameElement` of the specified frame. Returns null if it is a top frame or if script has no access to read property.\n *\n * @param {Window} frame Frame from which should be get frameElement in safe way.\n * @returns {HTMLIFrameElement|null}\n */\nexport function getFrameElement(frame) {\n  return Object.getPrototypeOf(frame.parent) && frame.frameElement;\n}\n\n/**\n * Gets parent frame of the specified frame. Returns null if it is a top frame or if script has no access to read property.\n *\n * @param {Window} frame Frame from which should get frameElement in a safe way.\n * @returns {Window|null}\n */\nexport function getParentWindow(frame) {\n  return getFrameElement(frame) && frame.parent;\n}\n\n/**\n * Checks if script has access to read from parent frame of specified frame.\n *\n * @param {Window} frame Frame from which should get frameElement in a safe way.\n * @returns {boolean}\n */\nexport function hasAccessToParentWindow(frame) {\n  return !!Object.getPrototypeOf(frame.parent);\n}\n\n/**\n * Goes up the DOM tree (including given element) until it finds an parent element that matches the nodes or nodes name.\n * This method goes up through web components.\n *\n * @param {Node} element Element from which traversing is started.\n * @param {Array<string|Node>} [nodes] Array of elements or Array of elements name (in uppercase form).\n * @param {Node} [until] The element until the traversing ends.\n * @returns {Node|null}\n */\nexport function closest(element, nodes = [], until) {\n  const { ELEMENT_NODE, DOCUMENT_FRAGMENT_NODE } = Node;\n  let elementToCheck = element;\n\n  while (elementToCheck !== null && elementToCheck !== undefined && elementToCheck !== until) {\n    const { nodeType, nodeName } = elementToCheck;\n\n    if (nodeType === ELEMENT_NODE && (nodes.includes(nodeName) || nodes.includes(elementToCheck))) {\n      return elementToCheck;\n    }\n\n    const { host } = elementToCheck;\n\n    if (host && nodeType === DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = host;\n\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Goes \"down\" the DOM tree (including given element) until it finds an element that matches the nodes or nodes name.\n *\n * @param {HTMLElement} element Element from which traversing is started.\n * @param {Array} nodes Array of elements or Array of elements name.\n * @param {HTMLElement} [until] The list of elements until the traversing ends.\n * @returns {HTMLElement|null}\n */\nexport function closestDown(element, nodes, until) {\n  const matched = [];\n  let elementToCheck = element;\n\n  while (elementToCheck) {\n    elementToCheck = closest(elementToCheck, nodes, until);\n\n    if (!elementToCheck || (until && !until.contains(elementToCheck))) {\n      break;\n    }\n    matched.push(elementToCheck);\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n  const length = matched.length;\n\n  return length ? matched[length - 1] : null;\n}\n\n/**\n * Goes up the DOM tree and checks if element is child of another element.\n *\n * @param {HTMLElement} child Child element An element to check.\n * @param {object|string} parent Parent element OR selector of the parent element.\n *                               If string provided, function returns `true` for the first occurrence of element with that class.\n * @returns {boolean}\n */\nexport function isChildOf(child, parent) {\n  let node = child.parentNode;\n  let queriedParents = [];\n\n  if (typeof parent === 'string') {\n    if (child.defaultView) {\n      queriedParents = Array.prototype.slice.call(child.querySelectorAll(parent), 0);\n    } else {\n      queriedParents = Array.prototype.slice.call(child.ownerDocument.querySelectorAll(parent), 0);\n    }\n  } else {\n    queriedParents.push(parent);\n  }\n\n  while (node !== null) {\n    if (queriedParents.indexOf(node) > -1) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n\n  return false;\n}\n\n/**\n * Counts index of element within its parent.\n * WARNING: for performance reasons, assumes there are only element nodes (no text nodes). This is true\n * for Walkotnable, otherwise would need to check for nodeType or use previousElementSibling.\n *\n * @see http://jsperf.com/sibling-index/10\n * @param {Element} element The element to check.\n * @returns {number}\n */\nexport function index(element) {\n  let i = 0;\n  let elementToCheck = element;\n\n  if (elementToCheck.previousSibling) {\n    /* eslint-disable no-cond-assign */\n    while (elementToCheck = elementToCheck.previousSibling) {\n      i += 1;\n    }\n  }\n\n  return i;\n}\n\n/**\n * Check if the provided overlay contains the provided element.\n *\n * @param {string} overlayType The type of the overlay.\n * @param {HTMLElement} element An element to check.\n * @param {HTMLElement} root The root element.\n * @returns {boolean}\n */\nexport function overlayContainsElement(overlayType, element, root) {\n  const overlayElement = root.parentElement.querySelector(`.ht_clone_${overlayType}`);\n\n  return overlayElement ? overlayElement.contains(element) : null;\n}\n\n/**\n * @param {string[]} classNames The element \"class\" attribute string.\n * @returns {string[]}\n */\nfunction filterEmptyClassNames(classNames) {\n  if (!classNames || !classNames.length) {\n    return [];\n  }\n\n  return classNames.filter(x => !!x);\n}\n\n/**\n * Filter out the RegExp entries from an array.\n *\n * @param {(string|RegExp)[]} list Array of either strings, Regexes or a mix of both.\n * @param {boolean} [returnBoth] If `true`, both the array without regexes and an array of regexes will be returned.\n * @returns {string[]|{regexFree: string[], regexes: RegExp[]}}\n */\nfunction filterRegexes(list, returnBoth) {\n  if (!list || !list.length) {\n    return returnBoth ? { regexFree: [], regexes: [] } : [];\n  }\n\n  const regexes = [];\n  const regexFree = [];\n\n  regexFree.push(...list.filter((entry) => {\n    const isRegex = entry instanceof RegExp;\n\n    if (isRegex && returnBoth) {\n      regexes.push(entry);\n    }\n\n    return !isRegex;\n  }));\n\n  return returnBoth ? {\n    regexFree,\n    regexes\n  } : regexFree;\n}\n\n/**\n * Checks if element has class name.\n *\n * @param {HTMLElement} element An element to check.\n * @param {string} className Class name to check.\n * @returns {boolean}\n */\nexport function hasClass(element, className) {\n  if (element.classList === undefined || typeof className !== 'string' || className === '') {\n    return false;\n  }\n\n  return element.classList.contains(className);\n}\n\n/**\n * Add class name to an element.\n *\n * @param {HTMLElement} element An element to process.\n * @param {string|Array} className Class name as string or array of strings.\n */\nexport function addClass(element, className) {\n  if (typeof className === 'string') {\n    className = className.split(' ');\n  }\n\n  className = filterEmptyClassNames(className);\n\n  if (className.length > 0) {\n    element.classList.add(...className);\n  }\n}\n\n/**\n * Remove class name from an element.\n *\n * @param {HTMLElement} element An element to process.\n * @param {string|Array<string|RegExp>} className Class name as string or array of strings.\n */\nexport function removeClass(element, className) {\n  if (typeof className === 'string') {\n    className = className.split(' ');\n\n  } else if (className instanceof RegExp) {\n    className = [className];\n  }\n\n  let {\n    regexFree: stringClasses,\n    // eslint-disable-next-line prefer-const\n    regexes: regexClasses\n  } = filterRegexes(className, true);\n\n  stringClasses = filterEmptyClassNames(stringClasses);\n\n  if (stringClasses.length > 0) {\n    element.classList.remove(...stringClasses);\n  }\n\n  regexClasses.forEach((regexClassName) => {\n    element.classList.forEach((currentClassName) => {\n      if (regexClassName.test(currentClassName)) {\n        element.classList.remove(currentClassName);\n      }\n    });\n  });\n}\n\n/**\n * Set a single attribute or multiple attributes at once.\n *\n * @param {HTMLElement} domElement The HTML element to be modified.\n * @param {Array[]|string} attributes If setting multiple attributes at once, `attributes` holds an array containing the\n * attributes to be added. Each element of the array should be an array in a form of `[attributeName,\n * attributeValue]`. If setting a single attribute, `attributes` holds the name of the attribute.\n * @param {string|number|undefined} [attributeValue] If setting a single attribute, `attributeValue` holds the attribute\n * value.\n */\nexport function setAttribute(domElement, attributes = [], attributeValue) {\n  if (!Array.isArray(attributes)) {\n    attributes = [[attributes, attributeValue]];\n  }\n\n  attributes.forEach((attributeInfo) => {\n    if (Array.isArray(attributeInfo) && attributeInfo[0] !== '') {\n      domElement.setAttribute(...attributeInfo);\n    }\n  });\n}\n\n/**\n * Remove a single attribute or multiple attributes from the provided element at once.\n *\n * @param {HTMLElement} domElement The HTML element to be processed.\n * @param {Array<string|RegExp>|string} attributesToRemove If removing multiple attributes, `attributesToRemove`\n * holds an array of attribute names to be removed from the provided element. If removing a single attribute, it\n * holds the attribute name.\n */\nexport function removeAttribute(domElement, attributesToRemove = []) {\n  if (typeof attributesToRemove === 'string') {\n    attributesToRemove = attributesToRemove.split(' ');\n\n  } else if (attributesToRemove instanceof RegExp) {\n    attributesToRemove = [attributesToRemove];\n  }\n\n  const {\n    regexFree: stringAttributes,\n    regexes: regexAttributes\n  } = filterRegexes(attributesToRemove, true);\n\n  stringAttributes.forEach((attributeNameToRemove) => {\n    if (attributeNameToRemove !== '') {\n      domElement.removeAttribute(attributeNameToRemove);\n    }\n  });\n\n  regexAttributes.forEach((attributeRegex) => {\n    domElement.getAttributeNames().forEach((attributeName) => {\n      if (attributeRegex.test(attributeName)) {\n        domElement.removeAttribute(attributeName);\n      }\n    });\n  });\n}\n\n/**\n * @param {HTMLElement} element An element from the text is removed.\n */\nexport function removeTextNodes(element) {\n  if (element.nodeType === 3) {\n    element.parentNode.removeChild(element); // bye text nodes!\n\n  } else if (['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR'].indexOf(element.nodeName) > -1) {\n    const childs = element.childNodes;\n\n    for (let i = childs.length - 1; i >= 0; i--) {\n      removeTextNodes(childs[i]);\n    }\n  }\n}\n\n/**\n * Remove children function\n * WARNING - this doesn't unload events and data attached by jQuery\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method.\n *\n * @param {HTMLElement} element An element to clear.\n */\nexport function empty(element) {\n  let child;\n\n  /* eslint-disable no-cond-assign */\n  while (child = element.lastChild) {\n    element.removeChild(child);\n  }\n}\n\nexport const HTML_CHARACTERS = /(<(.*)>|&(.*);)/;\n\n/**\n * Insert content into element trying to avoid innerHTML method.\n *\n * @param {HTMLElement} element An element to write into.\n * @param {string} content The text to write.\n * @param {boolean} [sanitizeContent=true] If `true`, the content will be sanitized before writing to the element.\n */\nexport function fastInnerHTML(element, content, sanitizeContent = true) {\n  if (HTML_CHARACTERS.test(content)) {\n    element.innerHTML = sanitizeContent ? sanitize(content) : content;\n  } else {\n    fastInnerText(element, content);\n  }\n}\n\n/**\n * Insert text content into element.\n *\n * @param {HTMLElement} element An element to write into.\n * @param {string} content The text to write.\n */\nexport function fastInnerText(element, content) {\n  const child = element.firstChild;\n\n  if (child && child.nodeType === 3 && child.nextSibling === null) {\n    // fast lane - replace existing text node\n    child.textContent = content;\n\n  } else {\n    // slow lane - empty element and insert a text node\n    empty(element);\n    element.appendChild(element.ownerDocument.createTextNode(content));\n  }\n}\n\n/**\n * Returns true if element is attached to the DOM and visible, false otherwise.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\nexport function isVisible(element) {\n  const documentElement = element.ownerDocument.documentElement;\n  let next = element;\n\n  while (next !== documentElement) { // until <html> reached\n    if (next === null) { // parent detached from DOM\n      return false;\n\n    } else if (next.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      if (next.host) { // this is Web Components Shadow DOM\n        // see: http://w3c.github.io/webcomponents/spec/shadow/#encapsulation\n        // according to spec, should be if (next.ownerDocument !== window.document), but that doesn't work yet\n        if (next.host.impl) { // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features disabled\n          return isVisible(next.host.impl);\n\n        } else if (next.host) { // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features enabled\n          return isVisible(next.host);\n        }\n        throw new Error('Lost in Web Components world');\n\n      } else {\n        return false; // this is a node detached from document in IE8\n      }\n\n    } else if (getComputedStyle(next).display === 'none') {\n      return false;\n    }\n\n    next = next.parentNode;\n  }\n\n  return true;\n}\n\n/**\n * Returns elements top and left offset relative to the document. Function is not compatible with jQuery offset.\n *\n * @param {HTMLElement} element An element to get the offset position from.\n * @returns {object} Returns object with `top` and `left` props.\n */\nexport function offset(element) {\n  const rootDocument = element.ownerDocument;\n  const rootWindow = rootDocument.defaultView;\n  const documentElement = rootDocument.documentElement;\n  let elementToCheck = element;\n  let offsetLeft;\n  let offsetTop;\n  let lastElem;\n\n  offsetLeft = elementToCheck.offsetLeft;\n  offsetTop = elementToCheck.offsetTop;\n  lastElem = elementToCheck;\n\n  /* eslint-disable no-cond-assign */\n  while (elementToCheck = elementToCheck.offsetParent) {\n    // from my observation, document.body always has scrollLeft/scrollTop == 0\n    if (elementToCheck === rootDocument.body) {\n      break;\n    }\n    // If the element is inside an SVG context, the `offsetParent` can be\n    // a <foreignObject> that does not have properties `offsetLeft` and `offsetTop` defined.\n    if (!('offsetLeft' in elementToCheck)) {\n      break;\n    }\n    offsetLeft += elementToCheck.offsetLeft;\n    offsetTop += elementToCheck.offsetTop;\n    lastElem = elementToCheck;\n  }\n\n  // slow - http://jsperf.com/offset-vs-getboundingclientrect/6\n  if (lastElem && lastElem.style.position === 'fixed') {\n    // if(lastElem !== document.body) { //faster but does gives false positive in Firefox\n    offsetLeft += rootWindow.pageXOffset || documentElement.scrollLeft;\n    offsetTop += rootWindow.pageYOffset || documentElement.scrollTop;\n  }\n\n  return {\n    left: offsetLeft,\n    top: offsetTop\n  };\n}\n\n/**\n * Returns the document's scrollTop property.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getWindowScrollTop(rootWindow = window) {\n  return rootWindow.scrollY;\n}\n\n/**\n * Returns the document's scrollLeft property.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getWindowScrollLeft(rootWindow = window) {\n  return rootWindow.scrollX;\n}\n\n/**\n * Returns the provided element's scrollTop property.\n *\n * @param {HTMLElement} element An element to get the scroll top position from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getScrollTop(element, rootWindow = window) {\n  if (element === rootWindow) {\n    return getWindowScrollTop(rootWindow);\n  }\n\n  return element.scrollTop;\n}\n\n/**\n * Returns the provided element's scrollLeft property.\n *\n * @param {HTMLElement} element An element to get the scroll left position from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getScrollLeft(element, rootWindow = window) {\n  if (element === rootWindow) {\n    return getWindowScrollLeft(rootWindow);\n  }\n\n  return element.scrollLeft;\n}\n\n/**\n * Returns a DOM element responsible for scrolling of the provided element.\n *\n * @param {HTMLElement} element An element to get the scrollable element from.\n * @returns {HTMLElement} Element's scrollable parent.\n */\nexport function getScrollableElement(element) {\n  let rootDocument = element.ownerDocument;\n  let rootWindow = rootDocument ? rootDocument.defaultView : undefined;\n\n  if (!rootDocument) {\n    rootDocument = element.document ? element.document : element;\n    rootWindow = rootDocument.defaultView;\n  }\n\n  const props = ['auto', 'scroll'];\n  let el = element.parentNode;\n\n  while (el && el.style && rootDocument.body !== el) {\n    let { overflow, overflowX, overflowY } = el.style;\n\n    if ([overflow, overflowX, overflowY].includes('scroll')) {\n      return el;\n\n    } else {\n      ({ overflow, overflowX, overflowY } = rootWindow.getComputedStyle(el));\n\n      if (props.includes(overflow) || props.includes(overflowX) || props.includes(overflowY)) {\n        return el;\n      }\n    }\n\n    // The '+ 1' after the scrollHeight/scrollWidth is to prevent problems with zoomed out Chrome.\n    if (el.clientHeight <= el.scrollHeight + 1 && (props.includes(overflowY) || props.includes(overflow))) {\n      return el;\n    }\n    if (el.clientWidth <= el.scrollWidth + 1 && (props.includes(overflowX) || props.includes(overflow))) {\n      return el;\n    }\n\n    el = el.parentNode;\n  }\n\n  return rootWindow;\n}\n\n/**\n * Get the maximum available `scrollTop` value for the provided element.\n *\n * @param {HTMLElement} element The element to get the maximum scroll top value from.\n * @returns {number} The maximum scroll top value.\n */\nexport function getMaximumScrollTop(element) {\n  return element.scrollHeight - element.clientHeight;\n}\n\n/**\n * Get the maximum available `scrollLeft` value for the provided element.\n *\n * @param {HTMLElement} element The element to get the maximum scroll left value from.\n * @returns {number} The maximum scroll left value.\n */\nexport function getMaximumScrollLeft(element) {\n  return element.scrollWidth - element.clientWidth;\n}\n\n/**\n * Returns a DOM element responsible for trimming the provided element.\n *\n * @param {HTMLElement} base Base element.\n * @returns {HTMLElement} Base element's trimming parent.\n */\nexport function getTrimmingContainer(base) {\n  const rootDocument = base.ownerDocument;\n  const rootWindow = rootDocument.defaultView;\n\n  let el = base.parentNode;\n\n  while (el && el.style && rootDocument.body !== el) {\n    if (el.style.overflow !== 'visible' && el.style.overflow !== '') {\n      return el;\n    }\n\n    const computedStyle = getComputedStyle(el, rootWindow);\n    const allowedProperties = ['scroll', 'hidden', 'auto'];\n    const property = computedStyle.getPropertyValue('overflow');\n    const propertyY = computedStyle.getPropertyValue('overflow-y');\n    const propertyX = computedStyle.getPropertyValue('overflow-x');\n\n    if (allowedProperties.includes(property) ||\n        allowedProperties.includes(propertyY) ||\n        allowedProperties.includes(propertyX)) {\n      return el;\n    }\n\n    el = el.parentNode;\n  }\n\n  return rootWindow;\n}\n\n/**\n * Returns a style property for the provided element. (Be it an inline or external style).\n *\n * @param {HTMLElement} element An element to get the style from.\n * @param {string} prop Wanted property.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {string|undefined} Element's style property.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getStyle(element, prop, rootWindow = window) {\n  if (!element) {\n    return;\n\n  } else if (element === rootWindow) {\n    if (prop === 'width') {\n      return `${rootWindow.innerWidth}px`;\n\n    } else if (prop === 'height') {\n      return `${rootWindow.innerHeight}px`;\n    }\n\n    return;\n  }\n\n  const styleProp = element.style[prop];\n\n  if (styleProp !== '' && styleProp !== undefined) {\n    return styleProp;\n  }\n\n  const computedStyle = getComputedStyle(element, rootWindow);\n\n  if (computedStyle[prop] !== '' && computedStyle[prop] !== undefined) {\n    return computedStyle[prop];\n  }\n}\n\n/**\n * Verifies if element fit to provided CSSRule.\n *\n * @param {Element} element Element to verify with selector text.\n * @param {CSSRule} rule Selector text from CSSRule.\n * @returns {boolean}\n */\nexport function matchesCSSRules(element, rule) {\n  const { selectorText } = rule;\n  let result = false;\n\n  if (rule.type === CSSRule.STYLE_RULE && selectorText) {\n    if (element.msMatchesSelector) {\n      result = element.msMatchesSelector(selectorText);\n\n    } else if (element.matches) {\n      result = element.matches(selectorText);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Returns a computed style object for the provided element. (Needed if style is declared in external stylesheet).\n *\n * @param {HTMLElement} element An element to get style from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {IEElementStyle|CssStyle} Elements computed style object.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getComputedStyle(element, rootWindow = window) {\n  return element.currentStyle || rootWindow.getComputedStyle(element);\n}\n\n/**\n * Returns the element's outer width.\n *\n * @param {HTMLElement} element An element to get the width from.\n * @returns {number} Element's outer width.\n */\nexport function outerWidth(element) {\n  return element.offsetWidth;\n}\n\n/**\n * Returns the element's outer height.\n *\n * @param {HTMLElement} element An element to get the height from.\n * @returns {number} Element's outer height.\n */\nexport function outerHeight(element) {\n  return element.offsetHeight;\n}\n\n/**\n * Returns the element's inner height.\n *\n * @param {HTMLElement} element An element to get the height from.\n * @returns {number} Element's inner height.\n */\nexport function innerHeight(element) {\n  return element.clientHeight || element.innerHeight;\n}\n\n/**\n * Returns the element's inner width.\n *\n * @param {HTMLElement} element An element to get the width from.\n * @returns {number} Element's inner width.\n */\nexport function innerWidth(element) {\n  return element.clientWidth || element.innerWidth;\n}\n\n/**\n * @param {HTMLElement} element An element to which the event is added.\n * @param {string} event The event name.\n * @param {Function} callback The callback to add.\n */\nexport function addEvent(element, event, callback) {\n  element.addEventListener(event, callback, false);\n}\n\n/**\n * @param {HTMLElement} element An element from which the event is removed.\n * @param {string} event The event name.\n * @param {Function} callback The function reference to remove.\n */\nexport function removeEvent(element, event, callback) {\n  element.removeEventListener(event, callback, false);\n}\n\n/**\n * Returns caret position in text input.\n *\n * @author https://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea\n * @param {HTMLElement} el An element to check.\n * @returns {number}\n */\nexport function getCaretPosition(el) {\n  if (el.selectionStart) {\n    return el.selectionStart;\n  }\n\n  return 0;\n}\n\n/**\n * Returns end of the selection in text input.\n *\n * @param {HTMLElement} el An element to check.\n * @returns {number}\n */\nexport function getSelectionEndPosition(el) {\n  if (el.selectionEnd) {\n    return el.selectionEnd;\n  }\n\n  return 0;\n}\n\n/**\n * Returns text under selection.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {string}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getSelectionText(rootWindow = window) {\n  const rootDocument = rootWindow.document;\n  let text = '';\n\n  if (rootWindow.getSelection) {\n    text = rootWindow.getSelection().toString();\n\n  } else if (rootDocument.selection && rootDocument.selection.type !== 'Control') {\n    text = rootDocument.selection.createRange().text;\n  }\n\n  return text;\n}\n\n/**\n * Cross-platform helper to clear text selection.\n *\n * @param {Window} [rootWindow] The document window owner.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function clearTextSelection(rootWindow = window) {\n  // http://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript\n  if (rootWindow.getSelection) {\n    if (rootWindow.getSelection().empty) { // Chrome\n      rootWindow.getSelection().empty();\n    } else if (rootWindow.getSelection().removeAllRanges) { // Firefox\n      rootWindow.getSelection().removeAllRanges();\n    }\n  }\n}\n\n/**\n * Sets caret position in text input.\n *\n * @author http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/\n * @param {Element} element An element to process.\n * @param {number} pos The selection start position.\n * @param {number} endPos The selection end position.\n */\nexport function setCaretPosition(element, pos, endPos) {\n  if (endPos === undefined) {\n    endPos = pos;\n  }\n  if (element.setSelectionRange) {\n    element.focus();\n\n    try {\n      element.setSelectionRange(pos, endPos);\n    } catch (err) {\n      const elementParent = element.parentNode;\n      const parentDisplayValue = elementParent.style.display;\n\n      elementParent.style.display = 'block';\n      element.setSelectionRange(pos, endPos);\n      elementParent.style.display = parentDisplayValue;\n    }\n  }\n}\n\nlet cachedScrollbarWidth;\n\n/**\n * Helper to calculate scrollbar width.\n * Source: https://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes.\n *\n * @private\n * @param {Document} rootDocument The onwer of the document.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nfunction walkontableCalculateScrollbarWidth(rootDocument = document) {\n  const inner = rootDocument.createElement('div');\n\n  inner.style.height = '200px';\n  inner.style.width = '100%';\n\n  const outer = rootDocument.createElement('div');\n\n  outer.style.boxSizing = 'content-box';\n  outer.style.height = '150px';\n  outer.style.left = '0px';\n  outer.style.overflow = 'hidden';\n  outer.style.position = 'absolute';\n  outer.style.top = '0px';\n  outer.style.width = '200px';\n  outer.style.visibility = 'hidden';\n  outer.appendChild(inner);\n\n  (rootDocument.body || rootDocument.documentElement).appendChild(outer);\n  const w1 = inner.offsetWidth;\n\n  outer.style.overflow = 'scroll';\n  let w2 = inner.offsetWidth;\n\n  if (w1 === w2) {\n    w2 = outer.clientWidth;\n  }\n  (rootDocument.body || rootDocument.documentElement).removeChild(outer);\n\n  return (w1 - w2);\n}\n\n/**\n * Returns the computed width of the native browser scroll bar.\n *\n * @param {Document} [rootDocument] The owner of the document.\n * @returns {number} Width.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getScrollbarWidth(rootDocument = document) {\n  if (cachedScrollbarWidth === undefined) {\n    cachedScrollbarWidth = walkontableCalculateScrollbarWidth(rootDocument);\n  }\n\n  return cachedScrollbarWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\nexport function hasVerticalScrollbar(element) {\n  return element.offsetWidth !== element.clientWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\nexport function hasHorizontalScrollbar(element) {\n  return element.offsetHeight !== element.clientHeight;\n}\n\n/**\n * Sets overlay position depending on it's type and used browser.\n *\n * @param {HTMLElement} overlayElem An element to process.\n * @param {number|string} left The left position of the overlay.\n * @param {number|string} top The top position of the overlay.\n */\nexport function setOverlayPosition(overlayElem, left, top) {\n  overlayElem.style.transform = `translate3d(${left},${top},0)`;\n}\n\n/**\n * @param {HTMLElement} element An element to process.\n * @returns {number|Array}\n */\nexport function getCssTransform(element) {\n  let transform;\n\n  if (element.style.transform && (transform = element.style.transform) !== '') {\n    return ['transform', transform];\n  }\n\n  return -1;\n}\n\n/**\n * @param {HTMLElement} element An element to process.\n */\nexport function resetCssTransform(element) {\n  if (element.style.transform && element.style.transform !== '') {\n    element.style.transform = '';\n  }\n}\n\n/**\n * Determines if the given DOM element is an input field.\n * Notice: By 'input' we mean input, textarea and select nodes.\n *\n * @param {HTMLElement} element - DOM element.\n * @returns {boolean}\n */\nexport function isInput(element) {\n  const inputs = ['INPUT', 'SELECT', 'TEXTAREA'];\n\n  return element && (inputs.indexOf(element.nodeName) > -1 || element.contentEditable === 'true');\n}\n\n/**\n * Determines if the given DOM element is an input field placed OUTSIDE of HOT.\n * Notice: By 'input' we mean input, textarea and select nodes which have defined 'data-hot-input' attribute.\n *\n * @param {HTMLElement} element - DOM element.\n * @returns {boolean}\n */\nexport function isOutsideInput(element) {\n  return isInput(element) && element.hasAttribute('data-hot-input') === false;\n}\n\n/**\n * Check if the given DOM element can be focused (by using \"select\" method).\n *\n * @param {HTMLElement} element - DOM element.\n */\nexport function selectElementIfAllowed(element) {\n  const activeElement = element.ownerDocument.activeElement;\n\n  if (!isOutsideInput(activeElement)) {\n    element.select();\n  }\n}\n\n/**\n * Check if the provided element is detached from DOM.\n *\n * @param {HTMLElement} element HTML element to be checked.\n * @returns {boolean} `true` if the element is detached, `false` otherwise.\n */\nexport function isDetached(element) {\n  return !element.parentNode;\n}\n\n/**\n * Set up an observer to recognize when the provided element first becomes visible and trigger a callback when it\n * happens.\n *\n * @param {HTMLElement} elementToBeObserved Element to be observed.\n * @param {Function} callback The callback function.\n */\nexport function observeVisibilityChangeOnce(elementToBeObserved, callback) {\n  const visibilityObserver = new IntersectionObserver((entries, observer) => {\n    entries.forEach((entry) => {\n      if (entry.isIntersecting && elementToBeObserved.offsetParent !== null) {\n        callback();\n        observer.unobserve(elementToBeObserved);\n      }\n    });\n  }, {\n    root: elementToBeObserved.ownerDocument.body\n  });\n\n  visibilityObserver.observe(elementToBeObserved);\n}\n\n/**\n * Add a `contenteditable` attribute, select the contents and optionally add the `invisibleSelection`\n * class to the provided element.\n *\n * @param {HTMLElement} element Element to be processed.\n * @param {boolean} [invisibleSelection=true] `true` if the class should be added to the element.\n * @param {boolean} [ariaHidden=true] `true` if the `aria-hidden` attribute should be added to the processed element.\n */\nexport function makeElementContentEditableAndSelectItsContent(element, invisibleSelection = true, ariaHidden = true) {\n  const ownerDocument = element.ownerDocument;\n  const range = ownerDocument.createRange();\n  const sel = ownerDocument.defaultView.getSelection();\n\n  setAttribute(element, 'contenteditable', true);\n\n  if (ariaHidden) {\n    setAttribute(element, ...A11Y_HIDDEN());\n  }\n\n  if (invisibleSelection) {\n    addClass(element, 'invisibleSelection');\n  }\n\n  range.selectNodeContents(element);\n\n  sel.removeAllRanges();\n\n  sel.addRange(range);\n}\n\n/**\n * Remove the `contenteditable` attribute, deselect the contents and optionally remove the `invisibleSelection`\n * class from the provided element.\n *\n * @param {HTMLElement} selectedElement The element to be deselected.\n * @param {boolean} [removeInvisibleSelectionClass=true] `true` if the class should be removed from the element.\n */\nexport function removeContentEditableFromElementAndDeselect(selectedElement, removeInvisibleSelectionClass = true) {\n  const sel = selectedElement.ownerDocument.defaultView.getSelection();\n\n  if (selectedElement.hasAttribute('aria-hidden')) {\n    selectedElement.removeAttribute('aria-hidden');\n  }\n\n  sel.removeAllRanges();\n\n  if (removeInvisibleSelectionClass) {\n    removeClass(selectedElement, 'invisibleSelection');\n  }\n\n  selectedElement.removeAttribute('contenteditable');\n}\n\n/**\n * Run the provided callback while the provided element is selected and modified to have the `contenteditable`\n * attribute added. Optionally, the selection can be configured to be invisible.\n *\n * @param {HTMLElement} element Element to be selected.\n * @param {Function} callback Callback to be called.\n * @param {boolean} [invisibleSelection=true] `true` if the selection should be invisible.\n */\nexport function runWithSelectedContendEditableElement(element, callback, invisibleSelection = true) {\n  makeElementContentEditableAndSelectItsContent(element, invisibleSelection);\n\n  callback();\n\n  removeContentEditableFromElementAndDeselect(element, invisibleSelection);\n}\n","import DOMPurify from 'dompurify';\nimport { stringify } from './mixed';\n\n/**\n * Convert string to upper case first letter.\n *\n * @param {string} string String to convert.\n * @returns {string}\n */\nexport function toUpperCaseFirst(string) {\n  return string[0].toUpperCase() + string.substr(1);\n}\n\n/**\n * Compare strings case insensitively.\n *\n * @param {...string} strings Strings to compare.\n * @returns {boolean}\n */\nexport function equalsIgnoreCase(...strings) {\n  const unique = [];\n  let length = strings.length;\n\n  while (length) {\n    length -= 1;\n    const string = stringify(strings[length]).toLowerCase();\n\n    if (unique.indexOf(string) === -1) {\n      unique.push(string);\n    }\n  }\n\n  return unique.length === 1;\n}\n\n/**\n * Generates a random hex string. Used as namespace for Handsontable instance events.\n *\n * @returns {string} Returns 16-long character random string (eq. `'92b1bfc74ec4'`).\n */\nexport function randomString() {\n  /**\n   * @returns {string}\n   */\n  function s4() {\n    return Math.floor((1 + Math.random()) * 0x10000)\n      .toString(16)\n      .substring(1);\n  }\n\n  return s4() + s4() + s4() + s4();\n}\n\n/**\n * Checks if value is valid percent.\n *\n * @param {string} value The value to check.\n * @returns {boolean}\n */\nexport function isPercentValue(value) {\n  return /^([0-9][0-9]?%$)|(^100%$)/.test(value);\n}\n\n/**\n * Substitute strings placed beetwen square brackets into value defined in `variables` object. String names defined in\n * square brackets must be the same as property name of `variables` object.\n *\n * @param {string} template Template string.\n * @param {object} variables Object which contains all available values which can be injected into template.\n * @returns {string}\n */\nexport function substitute(template, variables = {}) {\n  return (`${template}`).replace(/(?:\\\\)?\\[([^[\\]]+)]/g, (match, name) => {\n    if (match.charAt(0) === '\\\\') {\n      return match.substr(1, match.length - 1);\n    }\n\n    return variables[name] === undefined ? '' : variables[name];\n  });\n}\n\n/**\n * Strip any HTML tag from the string.\n *\n * @param {string} string String to cut HTML from.\n * @returns {string}\n */\nexport function stripTags(string) {\n  return sanitize(`${string}`, { ALLOWED_TAGS: [] });\n}\n\n/**\n * Sanitizes string from potential security vulnerabilities.\n *\n * @param {string} string String to sanitize.\n * @param {object} [options] DOMPurify's configuration object.\n * @returns {string}\n */\nexport function sanitize(string, options) {\n  return DOMPurify.sanitize(string, options);\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__133__;","import moment from 'moment';\nimport { toSingleLine } from './templateLiteralTag';\n\n/**\n * Converts any value to string.\n *\n * @param {*} value The value to stringify.\n * @returns {string}\n */\nexport function stringify(value) {\n  let result;\n\n  switch (typeof value) {\n    case 'string':\n    case 'number':\n      result = `${value}`;\n      break;\n\n    case 'object':\n      result = value === null ? '' : value.toString();\n      break;\n    case 'undefined':\n      result = '';\n      break;\n    default:\n      result = value.toString();\n      break;\n  }\n\n  return result;\n}\n\n/**\n * Checks if given variable is defined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isDefined(variable) {\n  return typeof variable !== 'undefined';\n}\n\n/**\n * Checks if given variable is undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isUndefined(variable) {\n  return typeof variable === 'undefined';\n}\n\n/**\n * Check if given variable is null, empty string or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isEmpty(variable) {\n  return variable === null || variable === '' || isUndefined(variable);\n}\n\n/**\n * Check if given variable is a regular expression.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isRegExp(variable) {\n  return Object.prototype.toString.call(variable) === '[object RegExp]';\n}\n\n/* eslint-disable */\nconst _m = '\\x6C\\x65\\x6E\\x67\\x74\\x68';\nconst _hd = (v) => parseInt(v, 16);\nconst _pi = (v) => parseInt(v, 10);\nconst _ss = (v, s, l) => v['\\x73\\x75\\x62\\x73\\x74\\x72'](s, l);\nconst _cp = (v) => v['\\x63\\x6F\\x64\\x65\\x50\\x6F\\x69\\x6E\\x74\\x41\\x74'](0) - 65;\nconst _norm = (v) => `${v}`.replace(/\\-/g, '');\nconst _extractTime = (v) => _hd(_ss(_norm(v), _hd('12'), _cp('\\x46'))) / (_hd(_ss(_norm(v), _cp('\\x42'), ~~![][_m])) || 9);\nconst _ignored = () => typeof location !== 'undefined' && /^([a-z0-9\\-]+\\.)?\\x68\\x61\\x6E\\x64\\x73\\x6F\\x6E\\x74\\x61\\x62\\x6C\\x65\\x2E\\x63\\x6F\\x6D$/i.test(location.host);\nlet _notified = false;\n\nconst consoleMessages = {\n  invalid: () => toSingleLine`\n    The license key for Handsontable is invalid.\\x20\n    If you need any help, contact us at support@handsontable.com.`,\n  expired: ({ keyValidityDate, hotVersion }) => toSingleLine`\n    The license key for Handsontable expired on ${keyValidityDate}, and is not valid for the installed\\x20\n    version ${hotVersion}. Renew your license key at handsontable.com or downgrade to a version released prior\\x20\n    to ${keyValidityDate}. If you need any help, contact us at sales@handsontable.com.`,\n  missing: () => toSingleLine`\n    The license key for Handsontable is missing. Use your purchased key to activate the product.\\x20\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by\\x20\n    passing the key: 'non-commercial-and-evaluation'. If you need any help, contact\\x20\n    us at support@handsontable.com.`,\n  non_commercial: () => '',\n};\nconst domMessages = {\n  invalid: () => toSingleLine`\n    The license key for Handsontable is invalid.\\x20\n    <a href=\"https://handsontable.com/docs/tutorial-license-key.html\" target=\"_blank\">Read more</a> on how to\\x20\n    install it properly or contact us at <a href=\"mailto:support@handsontable.com\">support@handsontable.com</a>.`,\n  expired: ({ keyValidityDate, hotVersion }) => toSingleLine`\n    The license key for Handsontable expired on ${keyValidityDate}, and is not valid for the installed\\x20\n    version ${hotVersion}. <a href=\"https://handsontable.com/pricing\" target=\"_blank\">Renew</a> your\\x20\n    license key or downgrade to a version released prior to ${keyValidityDate}. If you need any\\x20\n    help, contact us at <a href=\"mailto:sales@handsontable.com\">sales@handsontable.com</a>.`,\n  missing: () => toSingleLine`\n    The license key for Handsontable is missing. Use your purchased key to activate the product.\\x20\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by\\x20\n    passing the key: 'non-commercial-and-evaluation'.\\x20\n    <a href=\"https://handsontable.com/docs/tutorial-license-key.html\" target=\"_blank\">Read more</a> about it in\\x20\n    the documentation or contact us at <a href=\"mailto:support@handsontable.com\">support@handsontable.com</a>.`,\n  non_commercial: () => '',\n};\n\nexport function _injectProductInfo(key, element) {\n  const hasValidType = !isEmpty(key);\n  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';\n  const hotVersion = process.env.HOT_VERSION;\n  let keyValidityDate;\n  let consoleMessageState = 'invalid';\n  let domMessageState = 'invalid';\n\n  key = _norm(key || '');\n\n  const schemaValidity = _checkKeySchema(key);\n\n  if (hasValidType || isNonCommercial || schemaValidity) {\n    if (schemaValidity) {\n      const releaseDate = moment(process.env.HOT_RELEASE_DATE, 'DD/MM/YYYY');\n      const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);\n      const keyValidityDays = _extractTime(key);\n\n      keyValidityDate = moment((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');\n\n      if (releaseDays > keyValidityDays) {\n        consoleMessageState = 'expired';\n        domMessageState = 'expired';\n      } else {\n        consoleMessageState = 'valid';\n        domMessageState = 'valid';\n      }\n\n    } else if (isNonCommercial) {\n      consoleMessageState = 'non_commercial';\n      domMessageState = 'valid';\n\n    } else {\n      consoleMessageState = 'invalid';\n      domMessageState = 'invalid';\n    }\n\n  } else {\n    consoleMessageState = 'missing';\n    domMessageState = 'missing';\n  }\n\n  if (_ignored()) {\n    consoleMessageState = 'valid';\n    domMessageState = 'valid';\n  }\n\n  if (!_notified && consoleMessageState !== 'valid') {\n    const message = consoleMessages[consoleMessageState]({\n      keyValidityDate,\n      hotVersion,\n    });\n\n    if (message) {\n      console[consoleMessageState === 'non_commercial' ? 'info' : 'warn'](consoleMessages[consoleMessageState]({\n        keyValidityDate,\n        hotVersion,\n      }));\n    }\n    _notified = true;\n  }\n\n  if (domMessageState !== 'valid' && element.parentNode) {\n    const message = domMessages[domMessageState]({\n      keyValidityDate,\n      hotVersion,\n    });\n\n    if (message) {\n      const messageNode = document.createElement('div');\n\n      messageNode.className = 'hot-display-license-info';\n      messageNode.innerHTML = domMessages[domMessageState]({\n        keyValidityDate,\n        hotVersion,\n      });\n      element.parentNode.insertBefore(messageNode, element.nextSibling);\n    }\n  }\n}\n\nfunction _checkKeySchema(v) {\n  let z = [][_m];\n  let p = z;\n\n  if (v[_m] !== _cp('\\x5A')) {\n    return false;\n  }\n\n  for (let c = '', i = '\\x42\\x3C\\x48\\x34\\x50\\x2B'.split(''), j = _cp(i.shift()); j; j = _cp(i.shift() || 'A')) {\n    --j<''[_m]?p=p|(_pi(`${_pi(_hd(c)+(_hd(_ss(v,Math.abs(j),2))+[]).padStart(2,'0'))}`)%97||2)>>1:c=_ss(v,j,!j?6:i[_m]===1?9:8);\n  }\n\n  return p === z;\n}\n/* eslint-enable */\n","module.exports = __WEBPACK_EXTERNAL_MODULE__135__;","import { arrayReduce } from '../helpers/array';\n\n/**\n * Tags a multiline string and return new one without line break characters and following spaces.\n *\n * @param {Array} strings Parts of the entire string without expressions.\n * @param {...string} expressions Expressions converted to strings, which are added to the entire string.\n * @returns {string}\n */\nexport function toSingleLine(strings, ...expressions) {\n  const result = arrayReduce(strings, (previousValue, currentValue, index) => {\n\n    const valueWithoutWhiteSpaces = currentValue.replace(/\\r?\\n\\s*/g, '');\n    const expressionForIndex = expressions[index] ? expressions[index] : '';\n\n    return previousValue + valueWithoutWhiteSpaces + expressionForIndex;\n  }, '');\n\n  return result.trim();\n}\n","/**\n * @param {Array} arr An array to process.\n */\nexport function to2dArray(arr) {\n  const ilen = arr.length;\n  let i = 0;\n\n  while (i < ilen) {\n    arr[i] = [arr[i]];\n    i += 1;\n  }\n}\n\n/**\n * @param {Array} arr An array to extend.\n * @param {Array} extension The data to extend from.\n */\nexport function extendArray(arr, extension) {\n  const ilen = extension.length;\n  let i = 0;\n\n  while (i < ilen) {\n    arr.push(extension[i]);\n    i += 1;\n  }\n}\n\n/**\n * @param {Array} arr An array to pivot.\n * @returns {Array}\n */\nexport function pivot(arr) {\n  const pivotedArr = [];\n\n  if (!arr || arr.length === 0 || !arr[0] || arr[0].length === 0) {\n    return pivotedArr;\n  }\n\n  const rowCount = arr.length;\n  const colCount = arr[0].length;\n\n  for (let i = 0; i < rowCount; i++) {\n    for (let j = 0; j < colCount; j++) {\n      if (!pivotedArr[j]) {\n        pivotedArr[j] = [];\n      }\n\n      pivotedArr[j][i] = arr[i][j];\n    }\n  }\n\n  return pivotedArr;\n}\n\n/**\n * A specialized version of `.reduce` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initFromArray] Specify using the first element of `array` as the initial value.\n * @returns {*} Returns the accumulated value.\n */\nexport function arrayReduce(array, iteratee, accumulator, initFromArray) {\n  let index = -1;\n  let iterable = array;\n  let result = accumulator;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n  const length = iterable.length;\n\n  if (initFromArray && length) {\n    index += 1;\n    result = iterable[index];\n  }\n\n  index += 1;\n\n  while (index < length) {\n    result = iteratee(result, iterable[index], index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.filter` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nexport function arrayFilter(array, predicate) {\n  let index = 0;\n  let iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  const length = iterable.length;\n  const result = [];\n  let resIndex = -1;\n\n  while (index < length) {\n    const value = iterable[index];\n\n    if (predicate(value, index, iterable)) {\n      resIndex += 1;\n      result[resIndex] = value;\n    }\n\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.map` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nexport function arrayMap(array, iteratee) {\n  let index = 0;\n  let iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  const length = iterable.length;\n  const result = [];\n  let resIndex = -1;\n\n  while (index < length) {\n    const value = iterable[index];\n\n    resIndex += 1;\n    result[resIndex] = iteratee(value, index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array|*} array The array to iterate over or an any element with implemented iterator protocol.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nexport function arrayEach(array, iteratee) {\n  let index = 0;\n  let iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  const length = iterable.length;\n\n  while (index < length) {\n    if (iteratee(iterable[index], index, iterable) === false) {\n      break;\n    }\n\n    index += 1;\n  }\n\n  return array;\n}\n\n/**\n * Calculate sum value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns calculated sum value.\n */\nexport function arraySum(array) {\n  return arrayReduce(array, (a, b) => (a + b), 0);\n}\n\n/**\n * Returns the highest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns the highest value from an array.\n */\nexport function arrayMax(array) {\n  return arrayReduce(array, (a, b) => (a > b ? a : b), Array.isArray(array) ? array[0] : undefined);\n}\n\n/**\n * Returns the lowest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns the lowest value from an array.\n */\nexport function arrayMin(array) {\n  return arrayReduce(array, (a, b) => (a < b ? a : b), Array.isArray(array) ? array[0] : undefined);\n}\n\n/**\n * Calculate average value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns calculated average value.\n */\nexport function arrayAvg(array) {\n  if (!array.length) {\n    return 0;\n  }\n\n  return arraySum(array) / array.length;\n}\n\n/**\n * Flatten multidimensional array.\n *\n * @param {Array} array Array of Arrays.\n * @returns {Array}\n */\nexport function arrayFlatten(array) {\n  return arrayReduce(array, (initial, value) => initial.concat(Array.isArray(value) ? arrayFlatten(value) : value), []);\n}\n\n/**\n * Unique values in the array.\n *\n * @param {Array} array The array to process.\n * @returns {Array}\n */\nexport function arrayUnique(array) {\n  const unique = [];\n\n  arrayEach(array, (value) => {\n    if (unique.indexOf(value) === -1) {\n      unique.push(value);\n    }\n  });\n\n  return unique;\n}\n\n/**\n * Differences from two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns the difference between arrays.\n */\nexport function getDifferenceOfArrays(...arrays) {\n  const [first, ...rest] = [...arrays];\n  let filteredFirstArray = first;\n\n  arrayEach(rest, (array) => {\n    filteredFirstArray = filteredFirstArray.filter(value => !array.includes(value));\n  });\n\n  return filteredFirstArray;\n}\n\n/**\n * Intersection of two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns elements that exists in every array.\n */\nexport function getIntersectionOfArrays(...arrays) {\n  const [first, ...rest] = [...arrays];\n  let filteredFirstArray = first;\n\n  arrayEach(rest, (array) => {\n    filteredFirstArray = filteredFirstArray.filter(value => array.includes(value));\n  });\n\n  return filteredFirstArray;\n}\n\n/**\n * Union of two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns the elements that exist in any of the arrays, without duplicates.\n */\nexport function getUnionOfArrays(...arrays) {\n  const [first, ...rest] = [...arrays];\n  const set = new Set(first);\n\n  arrayEach(rest, (array) => {\n    arrayEach(array, (value) => {\n      if (!set.has(value)) {\n        set.add(value);\n      }\n    });\n  });\n\n  return Array.from(set);\n}\n\n/**\n * Convert a separated strings to an array of strings.\n *\n * @param {string} value A string of class name(s).\n * @param {string|RegExp} delimiter The pattern describing where each split should occur.\n * @returns {string[]} Returns array of string or empty array.\n */\nexport function stringToArray(value, delimiter = ' ') {\n  return value.split(delimiter);\n}\n","export const A11Y_TABINDEX = val => ['tabindex', val];\nexport const A11Y_TREEGRID = () => ['role', 'treegrid'];\nexport const A11Y_PRESENTATION = () => ['role', 'presentation'];\nexport const A11Y_GRIDCELL = () => ['role', 'gridcell'];\nexport const A11Y_ROWHEADER = () => ['role', 'rowheader'];\nexport const A11Y_ROWGROUP = () => ['role', 'rowgroup'];\nexport const A11Y_COLUMNHEADER = () => ['role', 'columnheader'];\nexport const A11Y_ROW = () => ['role', 'row'];\nexport const A11Y_MENU = () => ['role', 'menu'];\nexport const A11Y_MENU_ITEM = () => ['role', 'menuitem'];\nexport const A11Y_MENU_ITEM_CHECKBOX = () => ['role', 'menuitemcheckbox'];\nexport const A11Y_COMBOBOX = () => ['role', 'combobox'];\nexport const A11Y_LISTBOX = () => ['role', 'listbox'];\nexport const A11Y_OPTION = () => ['role', 'option'];\nexport const A11Y_CHECKBOX = () => ['role', 'checkbox'];\nexport const A11Y_SCOPE_COL = () => ['scope', 'col'];\nexport const A11Y_SCOPE_ROW = () => ['scope', 'row'];\nexport const A11Y_TEXT = () => ['type', 'text'];\nexport const A11Y_LABEL = val => ['aria-label', val];\nexport const A11Y_HIDDEN = () => ['aria-hidden', 'true'];\nexport const A11Y_DISABLED = () => ['aria-disabled', 'true'];\nexport const A11Y_MULTISELECTABLE = () => ['aria-multiselectable', 'true'];\nexport const A11Y_HASPOPUP = val => ['aria-haspopup', val];\nexport const A11Y_ROWCOUNT = val => ['aria-rowcount', val];\nexport const A11Y_COLCOUNT = val => ['aria-colcount', val];\nexport const A11Y_ROWINDEX = val => ['aria-rowindex', val];\nexport const A11Y_COLINDEX = val => ['aria-colindex', val];\nexport const A11Y_EXPANDED = val => ['aria-expanded', val];\nexport const A11Y_SORT = val => ['aria-sort', val];\nexport const A11Y_READONLY = () => ['aria-readonly', 'true'];\nexport const A11Y_INVALID = () => ['aria-invalid', 'true'];\nexport const A11Y_CHECKED = val => ['aria-checked', val];\nexport const A11Y_SELECTED = () => ['aria-selected', 'true'];\nexport const A11Y_AUTOCOMPLETE = () => ['aria-autocomplete', 'list'];\nexport const A11Y_CONTROLS = val => ['aria-controls', val];\nexport const A11Y_ACTIVEDESCENDANT = val => ['aria-activedescendant', val];\nexport const A11Y_LIVE = val => ['aria-live', val];\nexport const A11Y_RELEVANT = val => ['aria-relevant', val];\nexport const A11Y_SETSIZE = val => ['aria-setsize', val];\nexport const A11Y_POSINSET = val => ['aria-posinset', val];\n","import { arrayReduce } from './array';\nimport { isDefined } from './mixed';\n\n/**\n * Checks if given variable is function.\n *\n * @param {*} func Variable to check.\n * @returns {boolean}\n */\nexport function isFunction(func) {\n  return typeof func === 'function';\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over time (`wait`).\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in miliseconds.\n * @returns {Function}\n */\nexport function throttle(func, wait = 200) {\n  let lastCalled = 0;\n  const result = {\n    lastCallThrottled: true\n  };\n  let lastTimer = null;\n\n  /**\n   * @param {...*} args The list of arguments passed during the function invocation.\n   * @returns {object}\n   */\n  function _throttle(...args) {\n    const stamp = Date.now();\n    let needCall = false;\n\n    result.lastCallThrottled = true;\n\n    if (!lastCalled) {\n      lastCalled = stamp;\n      needCall = true;\n    }\n    const remaining = wait - (stamp - lastCalled);\n\n    if (needCall) {\n      result.lastCallThrottled = false;\n      func.apply(this, args);\n    } else {\n      if (lastTimer) {\n        clearTimeout(lastTimer);\n      }\n      lastTimer = setTimeout(() => {\n        result.lastCallThrottled = false;\n        func.apply(this, args);\n        lastCalled = 0;\n        lastTimer = undefined;\n      }, remaining);\n    }\n\n    return result;\n  }\n\n  return _throttle;\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over\n * time (`wait`) after specified hits.\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in miliseconds.\n * @param {number} hits Number of hits after throttling will be applied.\n * @returns {Function}\n */\nexport function throttleAfterHits(func, wait = 200, hits = 10) {\n  const funcThrottle = throttle(func, wait);\n  let remainHits = hits;\n\n  /**\n   *\n   */\n  function _clearHits() {\n    remainHits = hits;\n  }\n  /**\n   * @param {*} args The list of arguments passed during the function invocation.\n   * @returns {*}\n   */\n  function _throttleAfterHits(...args) {\n    if (remainHits) {\n      remainHits -= 1;\n\n      return func.apply(this, args);\n    }\n\n    return funcThrottle.apply(this, args);\n  }\n  _throttleAfterHits.clearHits = _clearHits;\n\n  return _throttleAfterHits;\n}\n\n/**\n * Creates debounce function that enforces a function (`func`) not be called again until a certain amount of time (`wait`)\n * has passed without it being called.\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in milliseconds.\n * @returns {Function}\n */\nexport function debounce(func, wait = 200) {\n  let lastTimer = null;\n  let result;\n\n  /**\n   * @param {*} args The list of arguments passed during the function invocation.\n   * @returns {*}\n   */\n  function _debounce(...args) {\n    if (lastTimer) {\n      clearTimeout(lastTimer);\n    }\n    lastTimer = setTimeout(() => {\n      result = func.apply(this, args);\n    }, wait);\n\n    return result;\n  }\n\n  return _debounce;\n}\n\n/**\n * Creates the function that returns the result of calling the given functions. Result of the first function is passed to\n * the second as an argument and so on. Only first function in the chain can handle multiple arguments.\n *\n * @param {Function} functions Functions to compose.\n * @returns {Function}\n */\nexport function pipe(...functions) {\n  const [firstFunc, ...restFunc] = functions;\n\n  return function _pipe(...args) {\n    return arrayReduce(restFunc, (acc, fn) => fn(acc), firstFunc.apply(this, args));\n  };\n}\n\n/**\n * Creates the function that returns the function with cached arguments.\n *\n * @param {Function} func Function to partialization.\n * @param {Array} params Function arguments to cache.\n * @returns {Function}\n */\nexport function partial(func, ...params) {\n  return function _partial(...restParams) {\n    return func.apply(this, params.concat(restParams));\n  };\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the left to the right.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('foo')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'Some test with foo...');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nexport function curry(func) {\n  const argsLength = func.length;\n\n  /**\n   * @param {*} argsSoFar The list of arguments passed during the function invocation.\n   * @returns {Function}\n   */\n  function given(argsSoFar) {\n    return function _curry(...params) {\n      const passedArgsSoFar = argsSoFar.concat(params);\n      let result;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the right to the left.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('Some test with foo...')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'foo');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nexport function curryRight(func) {\n  const argsLength = func.length;\n\n  /**\n   * @param {*} argsSoFar The list of arguments passed during the function invocation.\n   * @returns {Function}\n   */\n  function given(argsSoFar) {\n    return function _curry(...params) {\n      const passedArgsSoFar = argsSoFar.concat(params.reverse());\n      let result;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n\n/**\n * Calls a function in the quickest way available.\n *\n * In contrast to the `apply()` method that passes arguments as an array,\n * the `call()` method passes arguments directly, to avoid garbage collection costs.\n *\n * @param {Function} func The function to call.\n * @param {*} context The value to use as `this` when calling the `func` function.\n * @param {*} [arg1] An argument passed to the `func` function.\n * @param {*} [arg2] An argument passed to `func` function.\n * @param {*} [arg3] An argument passed to `func` function.\n * @param {*} [arg4] An argument passed to `func` function.\n * @param {*} [arg5] An argument passed to `func` function.\n * @param {*} [arg6] An argument passed to `func` function.\n * @returns {*}\n */\nexport function fastCall(func, context, arg1, arg2, arg3, arg4, arg5, arg6) {\n  if (isDefined(arg6)) {\n    return func.call(context, arg1, arg2, arg3, arg4, arg5, arg6);\n\n  } else if (isDefined(arg5)) {\n    return func.call(context, arg1, arg2, arg3, arg4, arg5);\n\n  } else if (isDefined(arg4)) {\n    return func.call(context, arg1, arg2, arg3, arg4);\n\n  } else if (isDefined(arg3)) {\n    return func.call(context, arg1, arg2, arg3);\n\n  } else if (isDefined(arg2)) {\n    return func.call(context, arg1, arg2);\n\n  } else if (isDefined(arg1)) {\n    return func.call(context, arg1);\n  }\n\n  return func.call(context);\n}\n","import { objectEach } from './object';\nimport { isCSR } from './feature';\n\nconst tester = (testerFunc) => {\n  const result = {\n    value: false,\n  };\n\n  result.test = (ua, vendor) => {\n    result.value = testerFunc(ua, vendor);\n  };\n\n  return result;\n};\n\nconst browsers = {\n  chrome: tester((ua, vendor) => /Chrome/.test(ua) && /Google/.test(vendor)),\n  chromeWebKit: tester(ua => /CriOS/.test(ua)),\n  edge: tester(ua => /Edge/.test(ua)),\n  edgeWebKit: tester(ua => /EdgiOS/.test(ua)),\n  firefox: tester(ua => /Firefox/.test(ua)),\n  firefoxWebKit: tester(ua => /FxiOS/.test(ua)),\n  mobile: tester(ua => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua)),\n  safari: tester((ua, vendor) => /Safari/.test(ua) && /Apple Computer/.test(vendor)),\n};\n\nconst platforms = {\n  mac: tester(platform => /^Mac/.test(platform)),\n  win: tester(platform => /^Win/.test(platform)),\n  linux: tester(platform => /^Linux/.test(platform)),\n  ios: tester(ua => /iPhone|iPad|iPod/i.test(ua))\n};\n\n/**\n * @param {object} [metaObject] The browser identity collection.\n * @param {object} [metaObject.userAgent] The user agent reported by browser.\n * @param {object} [metaObject.vendor] The vendor name reported by browser.\n */\nexport function setBrowserMeta({ userAgent = navigator.userAgent, vendor = navigator.vendor } = {}) {\n  objectEach(browsers, ({ test }) => void test(userAgent, vendor));\n}\n\n/**\n * @param {object} [metaObject] The platform identity collection.\n * @param {object} [metaObject.platform] The platform ID.\n */\nexport function setPlatformMeta({ platform = navigator.platform } = {}) {\n  objectEach(platforms, ({ test }) => void test(platform));\n}\n\nif (isCSR()) {\n  setBrowserMeta();\n  setPlatformMeta();\n}\n\n/**\n * @returns {boolean}\n */\nexport function isChrome() {\n  return browsers.chrome.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isChromeWebKit() {\n  return browsers.chromeWebKit.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isFirefox() {\n  return browsers.firefox.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isFirefoxWebKit() {\n  return browsers.firefoxWebKit.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isSafari() {\n  return browsers.safari.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isEdge() {\n  return browsers.edge.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isEdgeWebKit() {\n  return browsers.edgeWebKit.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isMobileBrowser() {\n  return browsers.mobile.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isIOS() {\n  return platforms.ios.value;\n}\n\n/**\n * A hacky way to recognize the iPad. Since iOS 13, the iPad on Safari mimics macOS behavior and user agent.\n *\n * @see {@https://stackoverflow.com/a/57838385}\n * @param {object} [metaObject] The browser identity collection.\n * @param {number} [metaObject.maxTouchPoints] The maximum number of simultanous touch points.\n * @returns {boolean}\n */\nexport function isIpadOS({ maxTouchPoints } = navigator) {\n  return maxTouchPoints > 2 && platforms.mac.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isWindowsOS() {\n  return platforms.win.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isMacOS() {\n  return platforms.mac.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isLinuxOS() {\n  return platforms.linux.value;\n}\n","import { arrayEach } from './array';\n\n/**\n * Generate schema for passed object.\n *\n * @param {Array|object} object An object to analyze.\n * @returns {Array|object}\n */\nexport function duckSchema(object) {\n  let schema;\n\n  if (Array.isArray(object)) {\n    schema = object.length ? new Array(object.length).fill(null) : [];\n\n  } else {\n    schema = {};\n\n    objectEach(object, (value, key) => {\n      if (key === '__children') {\n        return;\n      }\n\n      if (value && typeof value === 'object' && !Array.isArray(value)) {\n        schema[key] = duckSchema(value);\n\n      } else if (Array.isArray(value)) {\n        if (value.length && typeof value[0] === 'object' && !Array.isArray(value[0])) {\n          schema[key] = [duckSchema(value[0])];\n        } else {\n          schema[key] = [];\n        }\n\n      } else {\n        schema[key] = null;\n      }\n    });\n  }\n\n  return schema;\n}\n\n/**\n * Inherit without without calling parent constructor, and setting `Child.prototype.constructor` to `Child` instead of `Parent`.\n * Creates temporary dummy function to call it as constructor.\n * Described in ticket: https://github.com/handsontable/handsontable/pull/516.\n *\n * @param {object} Child The child class.\n * @param {object} Parent The parent class.\n * @returns {object}\n */\nexport function inherit(Child, Parent) {\n  Parent.prototype.constructor = Parent;\n  Child.prototype = new Parent();\n  Child.prototype.constructor = Child;\n\n  return Child;\n}\n\n/**\n * Perform shallow extend of a target object with extension's own properties.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n * @param {string[]} [writableKeys] An array of keys that are writable to target object.\n * @returns {object}\n */\nexport function extend(target, extension, writableKeys) {\n  const hasWritableKeys = Array.isArray(writableKeys);\n\n  objectEach(extension, (value, key) => {\n    if (hasWritableKeys === false || writableKeys.includes(key)) {\n      target[key] = value;\n    }\n  });\n\n  return target;\n}\n\n/**\n * Perform deep extend of a target object with extension's own properties.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n */\nexport function deepExtend(target, extension) {\n  objectEach(extension, (value, key) => {\n    if (extension[key] && typeof extension[key] === 'object') {\n      if (!target[key]) {\n        if (Array.isArray(extension[key])) {\n          target[key] = [];\n        } else if (Object.prototype.toString.call(extension[key]) === '[object Date]') {\n          target[key] = extension[key];\n        } else {\n          target[key] = {};\n        }\n      }\n      deepExtend(target[key], extension[key]);\n\n    } else {\n      target[key] = extension[key];\n    }\n  });\n}\n\n/**\n * Perform deep clone of an object.\n * WARNING! Only clones JSON properties. Will cause error when `obj` contains a function, Date, etc.\n *\n * @param {object} obj An object that will be cloned.\n * @returns {object}\n */\nexport function deepClone(obj) {\n  if (typeof obj === 'object') {\n    return JSON.parse(JSON.stringify(obj));\n  }\n\n  return obj;\n}\n\n/**\n * Shallow clone object.\n *\n * @param {object} object An object to clone.\n * @returns {object}\n */\nexport function clone(object) {\n  const result = {};\n\n  objectEach(object, (value, key) => {\n    result[key] = value;\n  });\n\n  return result;\n}\n\n/**\n * Extend the Base object (usually prototype) of the functionality the `mixins` objects.\n *\n * @param {object} Base Base object which will be extended.\n * @param {object} mixins The object of the functionality will be \"copied\".\n * @returns {object}\n */\nexport function mixin(Base, ...mixins) {\n  if (!Base.MIXINS) {\n    Base.MIXINS = [];\n  }\n  arrayEach(mixins, (mixinItem) => {\n    Base.MIXINS.push(mixinItem.MIXIN_NAME);\n\n    objectEach(mixinItem, (value, key) => {\n      if (Base.prototype[key] !== undefined) {\n        throw new Error(`Mixin conflict. Property '${key}' already exist and cannot be overwritten.`);\n      }\n      if (typeof value === 'function') {\n        Base.prototype[key] = value;\n\n      } else {\n        const getter = function _getter(property, initialValue) {\n          const propertyName = `_${property}`;\n\n          const initValue = (newValue) => {\n            let result = newValue;\n\n            if (Array.isArray(result) || isObject(result)) {\n              result = deepClone(result);\n            }\n\n            return result;\n          };\n\n          return function() {\n            if (this[propertyName] === undefined) {\n              this[propertyName] = initValue(initialValue);\n            }\n\n            return this[propertyName];\n          };\n        };\n        const setter = function _setter(property) {\n          const propertyName = `_${property}`;\n\n          return function(newValue) {\n            this[propertyName] = newValue;\n          };\n        };\n\n        Object.defineProperty(Base.prototype, key, {\n          get: getter(key, value),\n          set: setter(key),\n          configurable: true,\n        });\n      }\n    });\n  });\n\n  return Base;\n}\n\n/**\n * Checks if two objects or arrays are (deep) equal.\n *\n * @param {object|Array} object1 The first object to compare.\n * @param {object|Array} object2 The second object to compare.\n * @returns {boolean}\n */\nexport function isObjectEqual(object1, object2) {\n  return JSON.stringify(object1) === JSON.stringify(object2);\n}\n\n/**\n * Determines whether given object is a plain Object.\n * Note: String and Array are not plain Objects.\n *\n * @param {*} object An object to check.\n * @returns {boolean}\n */\nexport function isObject(object) {\n  return Object.prototype.toString.call(object) === '[object Object]';\n}\n\n/**\n * @param {object} object The object on which to define the property.\n * @param {string} property The name of the property to be defined or modified.\n * @param {*} value The value associated with the property.\n * @param {object} options The descriptor for the property being defined or modified.\n */\nexport function defineGetter(object, property, value, options) {\n  options.value = value;\n  options.writable = options.writable !== false;\n  options.enumerable = options.enumerable !== false;\n  options.configurable = options.configurable !== false;\n\n  Object.defineProperty(object, property, options);\n}\n\n/**\n * A specialized version of `.forEach` for objects.\n *\n * @param {object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {object} Returns `object`.\n */\nexport function objectEach(object, iteratee) {\n  // eslint-disable-next-line no-restricted-syntax\n  for (const key in object) {\n    if (!object.hasOwnProperty || (object.hasOwnProperty && Object.prototype.hasOwnProperty.call(object, key))) {\n      if (iteratee(object[key], key, object) === false) {\n        break;\n      }\n    }\n  }\n\n  return object;\n}\n\n/**\n * Get object property by its name. Access to sub properties can be achieved by dot notation (e.q. `'foo.bar.baz'`).\n *\n * @param {object} object Object which value will be exported.\n * @param {string} name Object property name.\n * @returns {*}\n */\nexport function getProperty(object, name) {\n  const names = name.split('.');\n  let result = object;\n\n  objectEach(names, (nameItem) => {\n    result = result[nameItem];\n\n    if (result === undefined) {\n      result = undefined;\n\n      return false;\n    }\n  });\n\n  return result;\n}\n\n/**\n * Set a property value on the provided object. Works on nested object prop names as well (e.g. `first.name`).\n *\n * @param {object} object Object to work on.\n * @param {string} name Prop name.\n * @param {*} value Value to be assigned at the provided property.\n */\nexport function setProperty(object, name, value) {\n  const names = name.split('.');\n  let workingObject = object;\n\n  names.forEach((propName, index) => {\n    if (index !== names.length - 1) {\n      if (!hasOwnProperty(workingObject, propName)) {\n        workingObject[propName] = {};\n      }\n\n      workingObject = workingObject[propName];\n\n    } else {\n      workingObject[propName] = value;\n    }\n  });\n}\n\n/**\n * Return object length (recursively).\n *\n * @param {*} object Object for which we want get length.\n * @returns {number}\n */\nexport function deepObjectSize(object) {\n  if (!isObject(object)) {\n    return 0;\n  }\n\n  const recursObjLen = function(obj) {\n    let result = 0;\n\n    if (isObject(obj)) {\n      objectEach(obj, (value, key) => {\n        if (key === '__children') {\n          return;\n        }\n\n        result += recursObjLen(value);\n      });\n    } else {\n      result += 1;\n    }\n\n    return result;\n  };\n\n  return recursObjLen(object);\n}\n\n/**\n * Create object with property where its value change will be observed.\n *\n * @param {*} [defaultValue=undefined] Default value.\n * @param {string} [propertyToListen='value'] Property to listen.\n * @returns {object}\n */\nexport function createObjectPropListener(defaultValue, propertyToListen = 'value') {\n  const privateProperty = `_${propertyToListen}`;\n  const holder = {\n    _touched: false,\n    [privateProperty]: defaultValue,\n    isTouched() {\n      return this._touched;\n    }\n  };\n\n  Object.defineProperty(holder, propertyToListen, {\n    get() {\n      return this[privateProperty];\n    },\n    set(value) {\n      this._touched = true;\n      this[privateProperty] = value;\n    },\n    enumerable: true,\n    configurable: true\n  });\n\n  return holder;\n}\n\n/**\n * Check if at specified `key` there is any value for `object`.\n *\n * @param {object} object Object to search value at specific key.\n * @param {string} key String key to check.\n * @returns {boolean}\n */\nexport function hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.0.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n  var symbol = getBuiltIn('Symbol')('stringify detection');\n  // MS Edge converts symbol values to JSON as {}\n  return $stringify([symbol]) !== '[null]'\n    // WebKit converts symbol values to JSON as null\n    || $stringify({ a: symbol }) !== '{}'\n    // V8 throws on boxed symbols\n    || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n  return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n    || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n  var args = arraySlice(arguments);\n  var $replacer = getReplacerFunction(replacer);\n  if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n  args[1] = function (key, value) {\n    // some old implementations (like WebKit) could pass numbers as keys\n    if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n    if (!isSymbol(value)) return value;\n  };\n  return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n  var prev = charAt(string, offset - 1);\n  var next = charAt(string, offset + 1);\n  if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n    return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n  } return match;\n};\n\nif ($stringify) {\n  // `JSON.stringify` method\n  // https://tc39.es/ecma262/#sec-json.stringify\n  $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = arraySlice(arguments);\n      var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n      return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n    }\n  });\n}\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n  if (isCallable(replacer)) return replacer;\n  if (!isArray(replacer)) return;\n  var rawLength = replacer.length;\n  var keys = [];\n  for (var i = 0; i < rawLength; i++) {\n    var element = replacer[i];\n    if (typeof element == 'string') push(keys, element);\n    else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n  }\n  var keysLength = keys.length;\n  var root = true;\n  return function (key, value) {\n    if (root) {\n      root = false;\n      return value;\n    }\n    if (isArray(this)) return value;\n    for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n  };\n};\n","/* eslint-disable no-restricted-globals */\n/**\n * Polyfill for requestAnimationFrame.\n *\n * @param {Function} callback The function to call when it's time.\n * @returns {number}\n */\nexport function requestAnimationFrame(callback) {\n  return window.requestAnimationFrame(callback);\n}\n\n/**\n * Polyfill for cancelAnimationFrame.\n *\n * @param {number} id The request Id, generated by `requestAnimationFrame`.\n */\nexport function cancelAnimationFrame(id) {\n  window.cancelAnimationFrame(id);\n}\n\n/**\n * @returns {boolean}\n */\nexport function isTouchSupported() {\n  return ('ontouchstart' in window);\n}\n\n/**\n * Checks if the environment that the code runs in is a browser.\n *\n * @returns {boolean}\n */\nexport function isCSR() {\n  return typeof window !== 'undefined';\n}\n\nlet comparisonFunction;\n\n/**\n * Get string comparison function for sorting purposes. It supports multilingual string comparison base on Internationalization API.\n *\n * @param {string} [language] The language code used for phrases sorting.\n * @param {object} [options] Additional options for sort comparator.\n * @returns {*}\n */\nexport function getComparisonFunction(language, options = {}) {\n  if (comparisonFunction) {\n    return comparisonFunction;\n  }\n\n  if (typeof Intl === 'object') {\n    comparisonFunction = new Intl.Collator(language, options).compare;\n\n  } else if (typeof String.prototype.localeCompare === 'function') {\n    comparisonFunction = (a, b) => (`${a}`).localeCompare(b);\n\n  } else {\n    comparisonFunction = (a, b) => {\n      if (a === b) {\n        return 0;\n      }\n\n      return a > b ? -1 : 1;\n    };\n  }\n\n  return comparisonFunction;\n}\n","import { isFunctionKey, isCtrlMetaKey } from './helpers/unicode';\nimport { isImmediatePropagationStopped } from './helpers/dom/event';\nimport { getEditorInstance } from './editors/registry';\nimport EventManager from './eventManager';\n\nclass EditorManager {\n  /**\n   * Instance of {@link Handsontable}.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Reference to an instance's private GridSettings object.\n   *\n   * @private\n   * @type {GridSettings}\n   */\n  tableMeta;\n  /**\n   * Instance of {@link Selection}.\n   *\n   * @private\n   * @type {Selection}\n   */\n  selection;\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @private\n   * @type {EventManager}\n   */\n  eventManager;\n  /**\n   * Determines if EditorManager is destroyed.\n   *\n   * @private\n   * @type {boolean}\n   */\n  destroyed = false;\n  /**\n   * A reference to an instance of the activeEditor.\n   *\n   * @private\n   * @type {BaseEditor}\n   */\n  activeEditor;\n  /**\n   * Keeps a reference to the cell's properties object.\n   *\n   * @type {object}\n   */\n  cellProperties;\n\n  /**\n   * @param {Core} hotInstance The Handsontable instance.\n   * @param {TableMeta} tableMeta The table meta instance.\n   * @param {Selection} selection The selection instance.\n   */\n  constructor(hotInstance, tableMeta, selection) {\n    this.hot = hotInstance;\n    this.tableMeta = tableMeta;\n    this.selection = selection;\n    this.eventManager = new EventManager(hotInstance);\n\n    this.hot.addHook('afterDocumentKeyDown', event => this.#onAfterDocumentKeyDown(event));\n\n    // Open editor when text composition is started (IME editor)\n    this.eventManager.addEventListener(this.hot.rootDocument.documentElement, 'compositionstart', (event) => {\n      if (!this.destroyed && this.hot.isListening()) {\n        this.openEditor('', event);\n      }\n    });\n\n    this.hot.view._wt.update('onCellDblClick', (event, coords, elem) => this.#onCellDblClick(event, coords, elem));\n  }\n\n  /**\n   * Get active editor.\n   *\n   * @returns {BaseEditor}\n   */\n  getActiveEditor() {\n    return this.activeEditor;\n  }\n\n  /**\n   * Prepare text input to be displayed at given grid cell.\n   */\n  prepareEditor() {\n    if (this.activeEditor && this.activeEditor.isWaiting()) {\n      this.closeEditor(false, false, (dataSaved) => {\n        if (dataSaved) {\n          this.prepareEditor();\n        }\n      });\n\n      return;\n    }\n\n    const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n    if (!highlight || highlight.isHeader()) {\n      return;\n    }\n\n    const { row, col } = highlight;\n    const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', row, col);\n    let visualRowToCheck = row;\n    let visualColumnToCheck = col;\n\n    if (Array.isArray(modifiedCellCoords)) {\n      [visualRowToCheck, visualColumnToCheck] = modifiedCellCoords;\n    }\n\n    // Getting values using the modified coordinates.\n    this.cellProperties = this.hot.getCellMeta(visualRowToCheck, visualColumnToCheck);\n\n    if (!this.isCellEditable()) {\n      this.clearActiveEditor();\n\n      return;\n    }\n\n    const td = this.hot.getCell(row, col, true);\n\n    // Skip the preparation when the cell is not rendered in the DOM. The cell is scrolled out of\n    // the table's viewport.\n    if (td) {\n      const editorClass = this.hot.getCellEditor(this.cellProperties);\n      const prop = this.hot.colToProp(visualColumnToCheck);\n      const originalValue =\n        this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(visualRowToCheck), visualColumnToCheck);\n\n      this.activeEditor = getEditorInstance(editorClass, this.hot);\n      // Using not modified coordinates, as we need to get the table element using selection coordinates.\n      // There is an extra translation in the editor for saving value.\n      this.activeEditor.prepare(row, col, prop, td, originalValue, this.cellProperties);\n    }\n  }\n\n  /**\n   * Check is editor is opened/showed.\n   *\n   * @returns {boolean}\n   */\n  isEditorOpened() {\n    return this.activeEditor && this.activeEditor.isOpened();\n  }\n\n  /**\n   * Open editor with initial value.\n   *\n   * @param {null|string} newInitialValue New value from which editor will start if handled property it's not the `null`.\n   * @param {Event} event The event object.\n   * @param {boolean} [enableFullEditMode=false] When true, an editor works in full editing mode. Mode disallows closing an editor\n   *                                             when arrow keys are pressed.\n   */\n  openEditor(newInitialValue, event, enableFullEditMode = false) {\n    if (!this.isCellEditable()) {\n      this.clearActiveEditor();\n\n      return;\n    }\n\n    const selection = this.hot.getSelectedRangeLast();\n    let allowOpening = this.hot.runHooks(\n      'beforeBeginEditing',\n      selection.highlight.row,\n      selection.highlight.col,\n      newInitialValue,\n      event,\n      enableFullEditMode,\n    );\n\n    // If the above hook does not return boolean apply default behavior which disallows opening\n    // an editor after double mouse click for non-contiguous selection (while pressing Ctrl/Cmd) and\n    // for multiple selected cells (while pressing SHIFT).\n    if (event instanceof MouseEvent && typeof allowOpening !== 'boolean') {\n      allowOpening = this.hot.selection.getLayerLevel() === 0 && selection.isSingle();\n    }\n\n    if (allowOpening === false) {\n      this.clearActiveEditor();\n\n      return;\n    }\n\n    if (!this.activeEditor) {\n      this.hot.scrollToFocusedCell();\n      this.prepareEditor();\n    }\n\n    if (this.activeEditor) {\n      if (enableFullEditMode) {\n        this.activeEditor.enableFullEditMode();\n      }\n\n      this.activeEditor.beginEditing(newInitialValue, event);\n    }\n  }\n\n  /**\n   * Close editor, finish editing cell.\n   *\n   * @param {boolean} restoreOriginalValue If `true`, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} isCtrlPressed If `true`, then editor will save value to each cell in the last selected range.\n   * @param {Function} callback The callback function, fired after editor closing.\n   */\n  closeEditor(restoreOriginalValue, isCtrlPressed, callback) {\n    if (this.activeEditor) {\n      this.activeEditor.finishEditing(restoreOriginalValue, isCtrlPressed, callback);\n\n    } else if (callback) {\n      callback(false);\n    }\n  }\n\n  /**\n   * Close editor and save changes.\n   *\n   * @param {boolean} isCtrlPressed If `true`, then editor will save value to each cell in the last selected range.\n   */\n  closeEditorAndSaveChanges(isCtrlPressed) {\n    this.closeEditor(false, isCtrlPressed);\n  }\n\n  /**\n   * Close editor and restore original value.\n   *\n   * @param {boolean} isCtrlPressed Indication of whether the CTRL button is pressed.\n   */\n  closeEditorAndRestoreOriginalValue(isCtrlPressed) {\n    this.closeEditor(true, isCtrlPressed);\n  }\n\n  /**\n   * Clears reference to an instance of the active editor.\n   *\n   * @private\n   */\n  clearActiveEditor() {\n    this.activeEditor = undefined;\n  }\n\n  /**\n   * Checks if the currently selected cell (pointed by selection highlight coords) is editable.\n   * Editable cell is when:\n   *   - the cell has defined an editor type;\n   *   - the cell is not marked as read-only;\n   *   - the cell is not hidden.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isCellEditable() {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection) {\n      return false;\n    }\n\n    const editorClass = this.hot.getCellEditor(this.cellProperties);\n    const { row, col } = selection.highlight;\n    const {\n      rowIndexMapper,\n      columnIndexMapper\n    } = this.hot;\n    const isCellHidden = rowIndexMapper.isHidden(this.hot.toPhysicalRow(row)) ||\n      columnIndexMapper.isHidden(this.hot.toPhysicalColumn(col));\n\n    if (this.cellProperties.readOnly || !editorClass || isCellHidden) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Controls selection's behavior after clicking `Enter`.\n   *\n   * @private\n   * @param {KeyboardEvent} event The keyboard event object.\n   */\n  moveSelectionAfterEnter(event) {\n    const enterMoves = { ...typeof this.tableMeta.enterMoves === 'function' ?\n      this.tableMeta.enterMoves(event) : this.tableMeta.enterMoves };\n\n    if (event.shiftKey) {\n      enterMoves.row = -enterMoves.row;\n      enterMoves.col = -enterMoves.col;\n    }\n\n    if (this.hot.selection.isMultiple()) {\n      this.selection.transformFocus(enterMoves.row, enterMoves.col);\n    } else {\n      this.selection.transformStart(enterMoves.row, enterMoves.col, true);\n    }\n  }\n\n  /**\n   * OnAfterDocumentKeyDown callback.\n   *\n   * @param {KeyboardEvent} event The keyboard event object.\n   */\n  #onAfterDocumentKeyDown(event) {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!this.hot.isListening() || !selection || selection.highlight.isHeader() ||\n        isImmediatePropagationStopped(event)) {\n      return;\n    }\n\n    const { keyCode } = event;\n\n    // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n    const isCtrlPressed = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n    if (!this.activeEditor || (this.activeEditor && !this.activeEditor.isWaiting())) {\n      if (!isFunctionKey(keyCode) && !isCtrlMetaKey(keyCode) && !isCtrlPressed && !this.isEditorOpened()) {\n        this.openEditor('', event);\n      }\n    }\n  }\n\n  /**\n   * OnCellDblClick callback.\n   *\n   * @param {MouseEvent} event The mouse event object.\n   * @param {object} coords The cell coordinates.\n   */\n  #onCellDblClick(event, coords) {\n    if (coords.isCell()) {\n      this.openEditor(null, event, true);\n    }\n  }\n\n  /**\n   * Destroy the instance.\n   */\n  destroy() {\n    this.destroyed = true;\n    this.eventManager.destroy();\n  }\n}\n\nconst instances = new WeakMap();\n\n/**\n * @param {Core} hotInstance The Handsontable instance.\n * @param {TableMeta} tableMeta The table meta class instance.\n * @param {Selection} selection The selection instance.\n * @returns {EditorManager}\n */\nEditorManager.getInstance = function(hotInstance, tableMeta, selection) {\n  let editorManager = instances.get(hotInstance);\n\n  if (!editorManager) {\n    editorManager = new EditorManager(hotInstance, tableMeta, selection);\n    instances.set(hotInstance, editorManager);\n  }\n\n  return editorManager;\n};\n\nexport default EditorManager;\n","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { arrayEach } from './array';\nimport { isMacOS, isFirefox } from './browser';\n\nexport const KEY_CODES = {\n  ALT: 18,\n  ARROW_DOWN: 40,\n  ARROW_LEFT: 37,\n  ARROW_RIGHT: 39,\n  ARROW_UP: 38,\n  AUDIO_DOWN: isFirefox() ? 182 : 174,\n  AUDIO_MUTE: isFirefox() ? 181 : 173,\n  AUDIO_UP: isFirefox() ? 183 : 175,\n  BACKSPACE: 8,\n  CAPS_LOCK: 20,\n  COMMA: 188,\n  COMMAND_LEFT: 91,\n  COMMAND_RIGHT: 93,\n  COMMAND_FIREFOX: 224,\n  CONTROL: 17,\n  DELETE: 46,\n  END: 35,\n  ENTER: 13,\n  ESCAPE: 27,\n  F1: 112,\n  F2: 113,\n  F3: 114,\n  F4: 115,\n  F5: 116,\n  F6: 117,\n  F7: 118,\n  F8: 119,\n  F9: 120,\n  F10: 121,\n  F11: 122,\n  F12: 123,\n  F13: 124,\n  F14: 125,\n  F15: 126,\n  F16: 127,\n  F17: 128,\n  F18: 129,\n  F19: 130,\n  HOME: 36,\n  INSERT: 45,\n  MEDIA_NEXT: 176,\n  MEDIA_PLAY_PAUSE: 179,\n  MEDIA_PREV: 177,\n  MEDIA_STOP: 178,\n  NULL: 0,\n  NUM_LOCK: 144,\n  PAGE_DOWN: 34,\n  PAGE_UP: 33,\n  PAUSE: 19,\n  PERIOD: 190,\n  SCROLL_LOCK: 145,\n  SHIFT: 16,\n  SPACE: 32,\n  TAB: 9,\n  A: 65,\n  C: 67,\n  D: 68,\n  F: 70,\n  L: 76,\n  O: 79,\n  P: 80,\n  S: 83,\n  V: 86,\n  X: 88,\n  Y: 89,\n  Z: 90,\n};\n\nconst FUNCTION_KEYS = [\n  KEY_CODES.ALT,\n  KEY_CODES.ARROW_DOWN,\n  KEY_CODES.ARROW_LEFT,\n  KEY_CODES.ARROW_RIGHT,\n  KEY_CODES.ARROW_UP,\n  KEY_CODES.AUDIO_DOWN,\n  KEY_CODES.AUDIO_MUTE,\n  KEY_CODES.AUDIO_UP,\n  KEY_CODES.BACKSPACE,\n  KEY_CODES.CAPS_LOCK,\n  KEY_CODES.DELETE,\n  KEY_CODES.END,\n  KEY_CODES.ENTER,\n  KEY_CODES.ESCAPE,\n  KEY_CODES.F1,\n  KEY_CODES.F2,\n  KEY_CODES.F3,\n  KEY_CODES.F4,\n  KEY_CODES.F5,\n  KEY_CODES.F6,\n  KEY_CODES.F7,\n  KEY_CODES.F8,\n  KEY_CODES.F9,\n  KEY_CODES.F10,\n  KEY_CODES.F11,\n  KEY_CODES.F12,\n  KEY_CODES.F13,\n  KEY_CODES.F14,\n  KEY_CODES.F15,\n  KEY_CODES.F16,\n  KEY_CODES.F17,\n  KEY_CODES.F18,\n  KEY_CODES.F19,\n  KEY_CODES.HOME,\n  KEY_CODES.INSERT,\n  KEY_CODES.MEDIA_NEXT,\n  KEY_CODES.MEDIA_PLAY_PAUSE,\n  KEY_CODES.MEDIA_PREV,\n  KEY_CODES.MEDIA_STOP,\n  KEY_CODES.NULL,\n  KEY_CODES.NUM_LOCK,\n  KEY_CODES.PAGE_DOWN,\n  KEY_CODES.PAGE_UP,\n  KEY_CODES.PAUSE,\n  KEY_CODES.SCROLL_LOCK,\n  KEY_CODES.SHIFT,\n  KEY_CODES.TAB,\n];\n\n/**\n * Returns true if keyCode represents a printable character.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isPrintableChar(keyCode) {\n  return ((keyCode === 32) || // space\n      (keyCode >= 48 && keyCode <= 57) || // 0-9\n      (keyCode >= 96 && keyCode <= 111) || // numpad\n      (keyCode >= 186 && keyCode <= 192) || // ;=,-./`\n      (keyCode >= 219 && keyCode <= 222) || // []{}\\|\"'\n      keyCode >= 226 || // special chars (229 for Asian chars)\n      (keyCode >= 65 && keyCode <= 90)); // a-z\n}\n\n/**\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isFunctionKey(keyCode) {\n  return FUNCTION_KEYS.includes(keyCode);\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. Depends on what OS the code runs it check key code based on\n * different meta key codes.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isCtrlKey(keyCode) {\n  const keys = [];\n\n  if (isMacOS()) {\n    keys.push(KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX);\n  } else {\n    keys.push(KEY_CODES.CONTROL);\n  }\n\n  return keys.includes(keyCode);\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. This helper checks if the key code matches to meta keys\n * regardless of the OS on which it is running.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isCtrlMetaKey(keyCode) {\n  return [\n    KEY_CODES.CONTROL,\n    KEY_CODES.COMMAND_LEFT,\n    KEY_CODES.COMMAND_RIGHT,\n    KEY_CODES.COMMAND_FIREFOX\n  ].includes(keyCode);\n}\n\n/**\n * @param {number} keyCode The keyboard key code.\n * @param {string} baseCode The list of the key codes to compare with.\n * @returns {boolean}\n */\nexport function isKey(keyCode, baseCode) {\n  const keys = baseCode.split('|');\n  let result = false;\n\n  arrayEach(keys, (key) => {\n    if (keyCode === KEY_CODES[key]) {\n      result = true;\n\n      return false;\n    }\n  });\n\n  return result;\n}\n","/**\n * Prevent other listeners of the same event from being called.\n *\n * @param {Event} event The mouse event object.\n */\nexport function stopImmediatePropagation(event) {\n  event.isImmediatePropagationEnabled = false;\n  event.cancelBubble = true;\n}\n\n/**\n * Check if event was stopped by `stopImmediatePropagation`.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\nexport function isImmediatePropagationStopped(event) {\n  return event.isImmediatePropagationEnabled === false;\n}\n\n/**\n * Check if provided event was triggered by clicking the right mouse button.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\nexport function isRightClick(event) {\n  return event.button === 2;\n}\n\n/**\n * Check if provided event was triggered by clicking the left mouse button.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\nexport function isLeftClick(event) {\n  return event.button === 0;\n}\n\n/**\n * Check if the provided event is a touch event.\n *\n * @param {Event} event The event object.\n * @returns {boolean}\n */\nexport function isTouchEvent(event) {\n  return event instanceof TouchEvent;\n}\n\n/**\n * Calculates the event offset until reaching the element defined by `relativeElement` argument.\n *\n * @param {Event} event The mouse event object.\n * @param {HTMLElement|undefined} [untilElement] The element to which the offset will be calculated.\n * @returns {{ x: number, y: number }}\n */\nexport function offsetRelativeTo(event, untilElement) {\n  const offset = {\n    x: event.offsetX,\n    y: event.offsetY,\n  };\n  let element = event.target;\n\n  if (!(untilElement instanceof HTMLElement) ||\n      element !== untilElement && element.contains(untilElement)) {\n    return offset;\n  }\n\n  while (element !== untilElement) {\n    offset.x += element.offsetLeft;\n    offset.y += element.offsetTop;\n\n    element = element.offsetParent;\n  }\n\n  return offset;\n}\n","/**\n * Utility to register editors and common namespace for keeping reference to all editor classes.\n */\nimport Hooks from '../pluginHooks';\nimport staticRegister from '../utils/staticRegister';\n\nconst registeredEditorClasses = new WeakMap();\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('editors');\n\n/**\n * @param {BaseEditor} editorClass The editor constructor.\n */\nexport function RegisteredEditor(editorClass) {\n  const instances = {};\n  const Clazz = editorClass;\n\n  this.getConstructor = function() {\n    return editorClass;\n  };\n\n  this.getInstance = function(hotInstance) {\n    if (!(hotInstance.guid in instances)) {\n      instances[hotInstance.guid] = new Clazz(hotInstance);\n    }\n\n    return instances[hotInstance.guid];\n  };\n\n  Hooks.getSingleton().add('afterDestroy', function() {\n    instances[this.guid] = null;\n  });\n}\n\n/**\n * Returns instance (singleton) of editor class.\n *\n * @param {string} name Name of an editor under which it has been stored.\n * @param {object} hotInstance Instance of Handsontable.\n * @returns {Function} Returns instance of editor.\n */\nexport function _getEditorInstance(name, hotInstance) {\n  let editor;\n\n  if (typeof name === 'function') {\n    if (!(registeredEditorClasses.get(name))) {\n      _register(null, name);\n    }\n    editor = registeredEditorClasses.get(name);\n\n  } else if (typeof name === 'string') {\n    editor = getItem(name);\n\n  } else {\n    throw Error('Only strings and functions can be passed as \"editor\" parameter');\n  }\n\n  if (!editor) {\n    throw Error(`No editor registered under name \"${name}\"`);\n  }\n\n  return editor.getInstance(hotInstance);\n}\n\n/**\n * Retrieve editor class.\n *\n * @param {string} name Editor identification.\n * @returns {Function} Returns editor class.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error(`No registered editor found under \"${name}\" name`);\n  }\n\n  return getItem(name).getConstructor();\n}\n\n/**\n * Register editor class under specified name.\n *\n * @param {string} name Editor identification.\n * @param {Function} editorClass Editor class.\n */\nfunction _register(name, editorClass) {\n  if (name && typeof name !== 'string') {\n    editorClass = name;\n    name = editorClass.EDITOR_TYPE;\n  }\n\n  const editorWrapper = new RegisteredEditor(editorClass);\n\n  if (typeof name === 'string') {\n    register(name, editorWrapper);\n  }\n  registeredEditorClasses.set(editorClass, editorWrapper);\n}\n\nexport {\n  _register as registerEditor,\n  _getItem as getEditor,\n  _getEditorInstance as getEditorInstance,\n  hasItem as hasEditor,\n  getNames as getRegisteredEditorNames,\n  getValues as getRegisteredEditors,\n};\n","import { arrayEach } from './helpers/array';\nimport { objectEach } from './helpers/object';\nimport { substitute } from './helpers/string';\nimport { warn } from './helpers/console';\nimport { toSingleLine } from './helpers/templateLiteralTag';\nimport { fastCall } from './helpers/function';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n *\n * ::: only-for javascript\n * Handsontable events are the common interface that function in 2 ways: as __callbacks__ and as __hooks__.\n * :::\n *\n * ::: only-for react\n * This page lists all the **Handsontable hooks** – callbacks that let you react before or after an action occurs.\n *\n * Read more on the [Events and hooks](@/guides/getting-started/events-and-hooks/events-and-hooks.md) page.\n * :::\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * // using events as callbacks\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   afterChange: function(changes, source) {\n *     $.ajax({\n *       url: \"save.php',\n *       data: change\n *     });\n *   }\n * });\n * ...\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   afterChange={(changes, source) => {\n *     fetch('save.php', {\n *       method: 'POST',\n *       headers: {\n *         'Accept': 'application/json',\n *         'Content-Type': 'application/json'\n *       },\n *       body: JSON.stringify(changes)\n *     });\n *   }}\n * />\n * :::\n *\n * ::: only-for javascript\n * ```js\n * // using events as plugin hooks\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   myPlugin: true\n * });\n *\n * const hot2 = new Handsontable(document.getElementById('example2'), {\n *   myPlugin: false\n * });\n *\n * // global hook\n * Handsontable.hooks.add('afterChange', function() {\n *   // Fired twice - for hot1 and hot2\n *   if (this.getSettings().myPlugin) {\n *     // function body - will only run for hot1\n *   }\n * });\n *\n * // local hook (has same effect as a callback)\n * hot2.addHook('afterChange', function() {\n *   // function body - will only run in #example2\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef1 = useRef(null);\n * const hotRef2 = useRef(null);\n *\n * // Using events as plugin hooks:\n * ...\n *\n * <HotTable\n *   ref={hotRef1}\n *   myPlugin={true}\n * });\n *\n * <HotTable\n *   ref={hotRef2}\n *   myPlugin={false}\n * });\n *\n * ...\n *\n * const hot2 = hotRef2.current.hotInstance;\n * // local hook (has same effect as a callback)\n * hot2.addHook('afterChange', function() {\n *   // function body - will only run in #example2\n * });\n *\n * // global hook\n * Handsontable.hooks.add('afterChange', function() {\n *   // Fired twice - for hot1 and hot2\n *   if (this.getSettings().myPlugin) {\n *     // function body - will only run for first instance\n *   }\n * });\n * :::\n * ...\n */\n\n// @TODO: Move plugin description hooks to plugin?\nconst REGISTERED_HOOKS = [\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Fired after resetting a cell's meta. This happens when the {@link Core#updateSettings} method is called.\n   *\n   * @event Hooks#afterCellMetaReset\n   */\n  'afterCellMetaReset',\n\n  /**\n   * Fired after one or more cells has been changed. The changes are triggered in any situation when the\n   * value is entered using an editor or changed using API (e.q [`setDataAtCell`](@/api/core.md#setdataatcell) method).\n   *\n   * __Note:__ For performance reasons, the `changes` array is null for `\"loadData\"` source.\n   *\n   * @event Hooks#afterChange\n   * @param {Array[]} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`. `row` is a visual row index.\n   * @param {string} [source] String that identifies source of hook call ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   afterChange: (changes) => {\n   *     changes?.forEach(([row, prop, oldValue, newValue]) => {\n   *       // Some logic...\n   *     });\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterChange={(changes, source) => {\n   *     changes?.forEach(([row, prop, oldValue, newValue]) => {\n   *       // Some logic...\n   *     });\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterChange',\n\n  /**\n   * Fired each time user opens {@link ContextMenu} and after setting up the Context Menu's default options. These options are a collection\n   * which user can select by setting an array of keys or an array of objects in {@link Options#contextMenu} option.\n   *\n   * @event Hooks#afterContextMenuDefaultOptions\n   * @param {Array} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n   */\n  'afterContextMenuDefaultOptions',\n\n  /**\n   * Fired each time user opens {@link ContextMenu} plugin before setting up the Context Menu's items but after filtering these options by\n   * user ([`contextMenu`](@/api/options.md#contextmenu) option). This hook can by helpful to determine if user use specified menu item or to set up\n   * one of the menu item to by always visible.\n   *\n   * @event Hooks#beforeContextMenuSetItems\n   * @param {object[]} menuItems An array of objects containing information about to generated Context Menu items.\n   */\n  'beforeContextMenuSetItems',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin after setting up the Dropdown Menu's default options. These options are a\n   * collection which user can select by setting an array of keys or an array of objects in {@link Options#dropdownMenu}\n   * option.\n   *\n   * @event Hooks#afterDropdownMenuDefaultOptions\n   * @param {object[]} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n   */\n  'afterDropdownMenuDefaultOptions',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin before setting up the Dropdown Menu's items but after filtering these options\n   * by user ([`dropdownMenu`](@/api/options.md#dropdownmenu) option). This hook can by helpful to determine if user use specified menu item or to set\n   * up one of the menu item to by always visible.\n   *\n   * @event Hooks#beforeDropdownMenuSetItems\n   * @param {object[]} menuItems An array of objects containing information about to generated Dropdown Menu items.\n   */\n  'beforeDropdownMenuSetItems',\n\n  /**\n   * Fired by {@link ContextMenu} plugin after hiding the Context Menu. This hook is fired when {@link Options#contextMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterContextMenuHide\n   * @param {object} context The Context Menu plugin instance.\n   */\n  'afterContextMenuHide',\n\n  /**\n   * Fired by {@link ContextMenu} plugin before opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n   * option is enabled.\n   *\n   * @event Hooks#beforeContextMenuShow\n   * @param {object} context The Context Menu instance.\n   */\n  'beforeContextMenuShow',\n\n  /**\n   * Fired by {@link ContextMenu} plugin after opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterContextMenuShow\n   * @param {object} context The Context Menu plugin instance.\n   */\n  'afterContextMenuShow',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after reaching the copy limit while copying data. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#afterCopyLimit\n   * @param {number} selectedRows Count of selected copyable rows.\n   * @param {number} selectedColumns Count of selected copyable columns.\n   * @param {number} copyRowsLimit Current copy rows limit.\n   * @param {number} copyColumnsLimit Current copy columns limit.\n   */\n  'afterCopyLimit',\n\n  /**\n   * Fired before created a new column.\n   *\n   * @event Hooks#beforeCreateCol\n   * @param {number} index Represents the visual index of first newly created column in the data source array.\n   * @param {number} amount Number of newly created columns in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*} If `false` then creating columns is cancelled.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // Return `false` to cancel column inserting.\n   * new Handsontable(element, {\n   *   beforeCreateCol: function(data, coords) {\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // Return `false` to cancel column inserting.\n   * <HotTable\n   *   beforeCreateCol={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeCreateCol',\n\n  /**\n   * Fired after the order of columns has changed.\n   * This hook is fired by changing column indexes of any type supported by the {@link IndexMapper}.\n   *\n   * @event Hooks#afterColumnSequenceChange\n   * @param {'init'|'remove'|'insert'|'move'|'update'} [source] A string that indicates what caused the change to the order of columns.\n   */\n  'afterColumnSequenceChange',\n\n  /**\n   * Fired after created a new column.\n   *\n   * @event Hooks#afterCreateCol\n   * @param {number} index Represents the visual index of first newly created column in the data source.\n   * @param {number} amount Number of newly created columns in the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterCreateCol',\n\n  /**\n   * Fired before created a new row.\n   *\n   * @event Hooks#beforeCreateRow\n   * @param {number} index Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeCreateRow',\n\n  /**\n   * Fired after created a new row.\n   *\n   * @event Hooks#afterCreateRow\n   * @param {number} index Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterCreateRow',\n\n  /**\n   * Fired after all selected cells are deselected.\n   *\n   * @event Hooks#afterDeselect\n   */\n  'afterDeselect',\n\n  /**\n   * Fired after destroying the Handsontable instance.\n   *\n   * @event Hooks#afterDestroy\n   */\n  'afterDestroy',\n\n  /**\n   * Hook fired after `keydown` event is handled.\n   *\n   * @event Hooks#afterDocumentKeyDown\n   * @param {Event} event A native `keydown` event object.\n   */\n  'afterDocumentKeyDown',\n\n  /**\n   * Fired inside the Walkontable's selection `draw` method. Can be used to add additional class names to cells, depending on the current selection.\n   *\n   * @event Hooks#afterDrawSelection\n   * @param {number} currentRow Row index of the currently processed cell.\n   * @param {number} currentColumn Column index of the currently cell.\n   * @param {number[]} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n   * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n   * @since 0.38.1\n   * @returns {string|undefined} Can return a `String`, which will act as an additional `className` to be added to the currently processed cell.\n   */\n  'afterDrawSelection',\n\n  /**\n   * Fired inside the Walkontable's `refreshSelections` method. Can be used to remove additional class names from all cells in the table.\n   *\n   * @event Hooks#beforeRemoveCellClassNames\n   * @since 0.38.1\n   * @returns {string[]|undefined} Can return an `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n   */\n  'beforeRemoveCellClassNames',\n\n  /**\n   * Fired after getting the cell settings.\n   *\n   * @event Hooks#afterGetCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell properties.\n   */\n  'afterGetCellMeta',\n\n  /**\n   * Fired after retrieving information about a column header and appending it to the table header.\n   *\n   * @event Hooks#afterGetColHeader\n   * @param {number} column Visual column index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   * @param {number} [headerLevel=0] (Since 12.2.0) Header level index. Accepts positive (0 to n)\n   *                                 and negative (-1 to -n) values. For positive values, 0 points to the\n   *                                 topmost header. For negative values, -1 points to the bottom-most\n   *                                 header (the header closest to the cells).\n   */\n  'afterGetColHeader',\n\n  /**\n   * Fired after retrieving information about a row header and appending it to the table header.\n   *\n   * @event Hooks#afterGetRowHeader\n   * @param {number} row Visual row index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   */\n  'afterGetRowHeader',\n\n  /**\n   * Fired after the Handsontable instance is initiated.\n   *\n   * @event Hooks#afterInit\n   */\n  'afterInit',\n\n  /**\n   * Fired after Handsontable's [`data`](@/api/options.md#data)\n   * gets modified by the [`loadData()`](@/api/core.md#loaddata) method\n   * or the [`updateSettings()`](@/api/core.md#updatesettings) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#afterLoadData\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   */\n  'afterLoadData',\n\n  /**\n   * Fired after the [`updateData()`](@/api/core.md#updatedata) method\n   * modifies Handsontable's [`data`](@/api/options.md#data).\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#afterUpdateData\n   * @since 11.1.0\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   */\n  'afterUpdateData',\n\n  /**\n   * Fired after a scroll event, which is identified as a momentum scroll (e.g. on an iPad).\n   *\n   * @event Hooks#afterMomentumScroll\n   */\n  'afterMomentumScroll',\n\n  /**\n   * Fired after a `mousedown` event is triggered on the cell corner (the drag handle).\n   *\n   * @event Hooks#afterOnCellCornerMouseDown\n   * @param {Event} event `mousedown` event object.\n   */\n  'afterOnCellCornerMouseDown',\n\n  /**\n   * Fired after a `dblclick` event is triggered on the cell corner (the drag handle).\n   *\n   * @event Hooks#afterOnCellCornerDblClick\n   * @param {Event} event `dblclick` event object.\n   */\n  'afterOnCellCornerDblClick',\n\n  /**\n   * Fired after clicking on a cell or row/column header. In case the row/column header was clicked, the coordinate\n   * indexes are negative.\n   *\n   * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseDown` called\n   * with coordinates `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellMouseDown\n   * @param {Event} event `mousedown` event object.\n   * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseDown',\n\n  /**\n   * Fired after clicking on a cell or row/column header. In case the row/column header was clicked, the coordinate\n   * indexes are negative.\n   *\n   * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseUp` called\n   * with coordinates `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellMouseUp\n   * @param {Event} event `mouseup` event object.\n   * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseUp',\n\n  /**\n   * Fired after clicking right mouse button on a cell or row/column header.\n   *\n   * For example clicking on the row header of cell (0, 0) results with `afterOnCellContextMenu` called\n   * with coordinates `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellContextMenu\n   * @since 4.1.0\n   * @param {Event} event `contextmenu` event object.\n   * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellContextMenu',\n\n  /**\n   * Fired after hovering a cell or row/column header with the mouse cursor. In case the row/column header was\n   * hovered, the index is negative.\n   *\n   * For example, hovering over the row header of cell (0, 0) results with `afterOnCellMouseOver` called\n   * with coords `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellMouseOver\n   * @param {Event} event `mouseover` event object.\n   * @param {CellCoords} coords Hovered cell's visual coordinate object.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseOver',\n\n  /**\n   * Fired after leaving a cell or row/column header with the mouse cursor.\n   *\n   * @event Hooks#afterOnCellMouseOut\n   * @param {Event} event `mouseout` event object.\n   * @param {CellCoords} coords Leaved cell's visual coordinate object.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseOut',\n\n  /**\n   * Fired after one or more columns are removed.\n   *\n   * @event Hooks#afterRemoveCol\n   * @param {number} index Visual index of starter column.\n   * @param {number} amount An amount of removed columns.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterRemoveCol',\n\n  /**\n   * Fired after one or more rows are removed.\n   *\n   * @event Hooks#afterRemoveRow\n   * @param {number} index Visual index of starter row.\n   * @param {number} amount An amount of removed rows.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterRemoveRow',\n\n  /**\n   * Fired before starting rendering the cell.\n   *\n   * @event Hooks#beforeRenderer\n   * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n   * @param {*} value Value of the rendered cell.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  'beforeRenderer',\n\n  /**\n   * Fired after finishing rendering the cell (after the renderer finishes).\n   *\n   * @event Hooks#afterRenderer\n   * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n   * @param {*} value Value of the rendered cell.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  'afterRenderer',\n\n  /**\n   * Fired after the order of rows has changed.\n   * This hook is fired by changing row indexes of any type supported by the {@link IndexMapper}.\n   *\n   * @event Hooks#afterRowSequenceChange\n   * @param {'init'|'remove'|'insert'|'move'|'update'} [source] A string that indicates what caused the change to the order of rows.\n   */\n  'afterRowSequenceChange',\n\n  /**\n   * Fired before the vertical viewport scroll. Triggered by the [`scrollViewportTo()`](@/api/core.md#scrollviewportto)\n   * method or table internals.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeViewportScrollVertically\n   * @param {number} visualRow Visual row index.\n   * @returns {number | boolean} Returns modified row index (or the same as passed in the method argument) to which\n   * the viewport will be scrolled. If the returned value is `false`, the scrolling will be canceled.\n   */\n  'beforeViewportScrollVertically',\n\n  /**\n   * Fired before the horizontal viewport scroll. Triggered by the [`scrollViewportTo()`](@/api/core.md#scrollviewportto)\n   * method or table internals.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeViewportScrollHorizontally\n   * @param {number} visualColumn Visual column index.\n   * @returns {number | boolean} Returns modified column index (or the same as passed in the method argument) to which\n   * the viewport will be scrolled. If the returned value is `false`, the scrolling will be canceled.\n   */\n  'beforeViewportScrollHorizontally',\n\n  /**\n   * Fired before the vertical or horizontal viewport scroll. Triggered by the [`scrollViewportTo()`](@/api/core.md#scrollviewportto)\n   * method or table internals.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeViewportScroll\n   */\n  'beforeViewportScroll',\n\n  /**\n   * Fired after the horizontal scroll event.\n   *\n   * @event Hooks#afterScrollHorizontally\n   */\n  'afterScrollHorizontally',\n\n  /**\n   * Fired after the vertical scroll event.\n   *\n   * @event Hooks#afterScrollVertically\n   */\n  'afterScrollVertically',\n\n  /**\n   * Fired after the vertical or horizontal scroll event.\n   *\n   * @since 14.0.0\n   * @event Hooks#afterScroll\n   */\n  'afterScroll',\n\n  /**\n   * Fired after one or more cells are selected (e.g. during mouse move).\n   *\n   * @event Hooks#afterSelection\n   * @param {number} row Selection start visual row index.\n   * @param {number} column Selection start visual column index.\n   * @param {number} row2 Selection end visual row index.\n   * @param {number} column2 Selection end visual column index.\n   * @param {object} preventScrolling A reference to the observable object with the `value` property.\n   *                                  Property `preventScrolling.value` expects a boolean value that\n   *                                  Handsontable uses to control scroll behavior after selection.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   afterSelection: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // If set to `false` (default): when cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to cell selection's end corner.\n   *     // If set to `true`: when cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll to cell selection's end corner.\n   *     preventScrolling.value = true;\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterSelection={(row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // If set to `false` (default): when cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to cell selection's end corner.\n   *     // If set to `true`: when cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll to cell selection's end corner.\n   *     preventScrolling.value = true;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterSelection',\n\n  /**\n   * Fired after one or more cells are selected.\n   *\n   * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n   *\n   * @event Hooks#afterSelectionByProp\n   * @param {number} row Selection start visual row index.\n   * @param {string} prop Selection start data source object property name.\n   * @param {number} row2 Selection end visual row index.\n   * @param {string} prop2 Selection end data source object property name.\n   * @param {object} preventScrolling A reference to the observable object with the `value` property.\n   *                                  Property `preventScrolling.value` expects a boolean value that\n   *                                  Handsontable uses to control scroll behavior after selection.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   * @example\n   * ```js\n   * ::: only-for javascript\n   * new Handsontable(element, {\n   *   afterSelectionByProp: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // setting if prevent scrolling after selection\n   *     preventScrolling.value = true;\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterSelectionByProp={(row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // setting if prevent scrolling after selection\n   *     preventScrolling.value = true;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterSelectionByProp',\n\n  /**\n   * Fired after one or more cells are selected (e.g. on mouse up).\n   *\n   * @event Hooks#afterSelectionEnd\n   * @param {number} row Selection start visual row index.\n   * @param {number} column Selection start visual column index.\n   * @param {number} row2 Selection end visual row index.\n   * @param {number} column2 Selection end visual column index.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   */\n  'afterSelectionEnd',\n\n  /**\n   * Fired after one or more cells are selected (e.g. on mouse up).\n   *\n   * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n   *\n   * @event Hooks#afterSelectionEndByProp\n   * @param {number} row Selection start visual row index.\n   * @param {string} prop Selection start data source object property index.\n   * @param {number} row2 Selection end visual row index.\n   * @param {string} prop2 Selection end data source object property index.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   */\n  'afterSelectionEndByProp',\n\n  /**\n   * Fired after the focus position within a selected range is changed.\n   *\n   * @since 14.3.0\n   * @event Hooks#afterSelectionFocusSet\n   * @param {number} row The focus visual row index position.\n   * @param {number} column The focus visual column index position.\n   * @param {object} preventScrolling A reference to the observable object with the `value` property.\n   *                                  Property `preventScrolling.value` expects a boolean value that\n   *                                  Handsontable uses to control scroll behavior after selection.\n   * @example\n   * ```js\n   * ::: only-for javascript\n   * new Handsontable(element, {\n   *   afterSelectionFocusSet: (row, column, preventScrolling) => {\n   *     // If set to `false` (default): when focused cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to that cell.\n   *     // If set to `true`: when focused cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll the viewport.\n   *     preventScrolling.value = true;\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterSelectionFocusSet={(row, column, preventScrolling) => {\n   *     // If set to `false` (default): when focused cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to that cell.\n   *     // If set to `true`: when focused cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll the viewport.\n   *     preventScrolling.value = true;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterSelectionFocusSet',\n\n  /**\n   * Fired before one or more columns are selected (e.g. During mouse header click or {@link Core#selectColumns} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeSelectColumns\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   beforeSelectColumns: (from, to, highlight) => {\n   *     // Extend the column selection by one column left and one column right.\n   *     from.col = Math.max(from.col - 1, 0);\n   *     to.col = Math.min(to.col + 1, this.countCols() - 1);\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   beforeSelectColumns={(from, to, highlight) => {\n   *     // Extend the column selection by one column left and one column right.\n   *     from.col = Math.max(from.col - 1, 0);\n   *     to.col = Math.min(to.col + 1, this.countCols() - 1);\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeSelectColumns',\n\n  /**\n   * Fired after one or more columns are selected (e.g. during mouse header click or {@link Core#selectColumns} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#afterSelectColumns\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   */\n  'afterSelectColumns',\n\n  /**\n   * Fired before one or more rows are selected (e.g. during mouse header click or {@link Core#selectRows} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeSelectRows\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   beforeSelectRows: (from, to, highlight) => {\n   *     // Extend the row selection by one row up and one row bottom more.\n   *     from.row = Math.max(from.row - 1, 0);\n   *     to.row = Math.min(to.row + 1, this.countRows() - 1);\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   beforeSelectRows={(from, to, highlight) => {\n   *     // Extend the row selection by one row up and one row bottom more.\n   *     from.row = Math.max(from.row - 1, 0);\n   *     to.row = Math.min(to.row + 1, this.countRows() - 1);\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeSelectRows',\n\n  /**\n   * Fired after one or more rows are selected (e.g. during mouse header click or {@link Core#selectRows} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#afterSelectRows\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   */\n  'afterSelectRows',\n\n  /**\n   * Fired after cell meta is changed.\n   *\n   * @event Hooks#afterSetCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The updated meta key.\n   * @param {*} value The updated meta value.\n   */\n  'afterSetCellMeta',\n\n  /**\n   * Fired after cell meta is removed.\n   *\n   * @event Hooks#afterRemoveCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The removed meta key.\n   * @param {*} value Value which was under removed key of cell meta.\n   */\n  'afterRemoveCellMeta',\n\n  /**\n   * Fired after cell data was changed.\n   *\n   * @event Hooks#afterSetDataAtCell\n   * @param {Array} changes An array of changes in format `[[row, column, oldValue, value], ...]`.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterSetDataAtCell',\n\n  /**\n   * Fired after cell data was changed.\n   * Called only when [`setDataAtRowProp`](@/api/core.md#setdataatrowprop) was executed.\n   *\n   * @event Hooks#afterSetDataAtRowProp\n   * @param {Array} changes An array of changes in format `[[row, prop, oldValue, value], ...]`.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterSetDataAtRowProp',\n\n  /**\n   * Fired after cell source data was changed.\n   *\n   * @event Hooks#afterSetSourceDataAtCell\n   * @since 8.0.0\n   * @param {Array} changes An array of changes in format `[[row, column, oldValue, value], ...]`.\n   * @param {string} [source] String that identifies source of hook call.\n   */\n  'afterSetSourceDataAtCell',\n\n  /**\n   * Fired after calling the [`updateSettings`](@/api/core.md#updatesettings) method.\n   *\n   * @event Hooks#afterUpdateSettings\n   * @param {object} newSettings New settings object.\n   */\n  'afterUpdateSettings',\n\n  /**\n   * @description\n   * A plugin hook executed after validator function, only if validator function is defined.\n   * Validation result is the first parameter. This can be used to determinate if validation passed successfully or not.\n   *\n   * __Returning false from the callback will mark the cell as invalid__.\n   *\n   * @event Hooks#afterValidate\n   * @param {boolean} isValid `true` if valid, `false` if not.\n   * @param {*} value The value in question.\n   * @param {number} row Visual row index.\n   * @param {string|number} prop Property name / visual column index.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {undefined | boolean} If `false` the cell will be marked as invalid, `true` otherwise.\n   */\n  'afterValidate',\n\n  /**\n   * Fired before successful change of language (when proper language code was set).\n   *\n   * @event Hooks#beforeLanguageChange\n   * @since 0.35.0\n   * @param {string} languageCode New language code.\n   */\n  'beforeLanguageChange',\n\n  /**\n   * Fired after successful change of language (when proper language code was set).\n   *\n   * @event Hooks#afterLanguageChange\n   * @since 0.35.0\n   * @param {string} languageCode New language code.\n   */\n  'afterLanguageChange',\n\n  /**\n   * Fired by {@link Autofill} plugin before populating the data in the autofill feature. This hook is fired when\n   * {@link Options#fillHandle} option is enabled.\n   *\n   * @event Hooks#beforeAutofill\n   * @param {Array[]} selectionData Data the autofill operation will start from.\n   * @param {CellRange} sourceRange The range values will be filled from.\n   * @param {CellRange} targetRange The range new values will be filled into.\n   * @param {string} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n   *\n   * @returns {boolean|Array[]} If false, the operation is cancelled. If array of arrays, the returned data\n   *                              will be passed into [`populateFromArray`](@/api/core.md#populatefromarray) instead of the default autofill\n   *                              algorithm's result.\n   */\n  'beforeAutofill',\n\n  /**\n   * Fired by {@link Autofill} plugin after populating the data in the autofill feature. This hook is fired when\n   * {@link Options#fillHandle} option is enabled.\n   *\n   * @event Hooks#afterAutofill\n   * @since 8.0.0\n   * @param {Array[]} fillData The data that was used to fill the `targetRange`. If `beforeAutofill` was used\n   *                            and returned `[[]]`, this will be the same object that was returned from `beforeAutofill`.\n   * @param {CellRange} sourceRange The range values will be filled from.\n   * @param {CellRange} targetRange The range new values will be filled into.\n   * @param {string} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n   */\n  'afterAutofill',\n\n  /**\n   * Fired before aligning the cell contents.\n   *\n   * @event Hooks#beforeCellAlignment\n   * @param {object} stateBefore An object with class names defining the cell alignment.\n   * @param {CellRange[]} range An array of `CellRange` coordinates where the alignment will be applied.\n   * @param {string} type Type of the alignment - either `horizontal` or `vertical`.\n   * @param {string} alignmentClass String defining the alignment class added to the cell.\n   * Possible values: `htLeft` , `htCenter`, `htRight`, `htJustify`, `htTop`, `htMiddle`, `htBottom`.\n   */\n  'beforeCellAlignment',\n\n  /**\n   * Fired before one or more cells are changed.\n   *\n   * Use this hook to silently alter the user's changes before Handsontable re-renders.\n   *\n   * To ignore the user's changes, use a nullified array or return `false`.\n   *\n   * @event Hooks#beforeChange\n   * @param {Array[]} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`. `row` is a visual row index.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {undefined | boolean} If `false` all changes were cancelled, `true` otherwise.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // to alter a single change, overwrite the value with `changes[i][3]`\n   * new Handsontable(element, {\n   *   beforeChange: (changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0][3] = 10;\n   *   }\n   * });\n   *\n   * // to ignore a single change, set `changes[i]` to `null`\n   * // or remove `changes[i]` from the array, by using `changes.splice(i, 1)`\n   * new Handsontable(element, {\n   *   beforeChange: (changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0] = null;\n   *   }\n   * });\n   *\n   * // to ignore all changes, return `false`\n   * // or set the array's length to 0, by using `changes.length = 0`\n   * new Handsontable(element, {\n   *   beforeChange: (changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // to alter a single change, overwrite the desired value with `changes[i][3]`\n   * <HotTable\n   *   beforeChange={(changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0][3] = 10;\n   *   }}\n   * />\n   *\n   * // to ignore a single change, set `changes[i]` to `null`\n   * // or remove `changes[i]` from the array, by using changes.splice(i, 1).\n   * <HotTable\n   *   beforeChange={(changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0] = null;\n   *   }}\n   * />\n   *\n   * // to ignore all changes, return `false`\n   * // or set the array's length to 0 (`changes.length = 0`)\n   * <HotTable\n   *   beforeChange={(changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeChange',\n\n  /**\n   * Fired right before rendering the changes.\n   *\n   * @event Hooks#beforeChangeRender\n   * @param {Array[]} changes Array in form of `[row, prop, oldValue, newValue]`.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'beforeChangeRender',\n\n  /**\n   * Fired before drawing the borders.\n   *\n   * @event Hooks#beforeDrawBorders\n   * @param {Array} corners Array specifying the current selection borders.\n   * @param {string} borderClassName Specifies the border class name.\n   */\n  'beforeDrawBorders',\n\n  /**\n   * Fired before getting cell settings.\n   *\n   * @event Hooks#beforeGetCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  'beforeGetCellMeta',\n\n  /**\n   * Fired before cell meta is removed.\n   *\n   * @event Hooks#beforeRemoveCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The removed meta key.\n   * @param {*} value Value which is under removed key of cell meta.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRemoveCellMeta',\n\n  /**\n   * Fired before the Handsontable instance is initiated.\n   *\n   * @event Hooks#beforeInit\n   */\n  'beforeInit',\n\n  /**\n   * Fired before the Walkontable instance is initiated.\n   *\n   * @event Hooks#beforeInitWalkontable\n   * @param {object} walkontableConfig Walkontable configuration object.\n   */\n  'beforeInitWalkontable',\n\n  /**\n   * Fired before Handsontable's [`data`](@/api/options.md#data)\n   * gets modified by the [`loadData()`](@/api/core.md#loaddata) method\n   * or the [`updateSettings()`](@/api/core.md#updatesettings) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#beforeLoadData\n   * @since 8.0.0\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   * @returns {Array} The returned array will be used as Handsontable's new dataset.\n   */\n  'beforeLoadData',\n\n  /**\n   * Fired before the [`updateData()`](@/api/core.md#updatedata) method\n   * modifies Handsontable's [`data`](@/api/options.md#data).\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#beforeUpdateData\n   * @since 11.1.0\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   * @returns {Array} The returned array will be used as Handsontable's new dataset.\n   */\n  'beforeUpdateData',\n\n  /**\n   * Hook fired before `keydown` event is handled. It can be used to stop default key bindings.\n   *\n   * __Note__: To prevent default behavior you need to call `false` in your `beforeKeyDown` handler.\n   *\n   * @event Hooks#beforeKeyDown\n   * @param {Event} event Original DOM event.\n   */\n  'beforeKeyDown',\n\n  /**\n   * Fired after the user clicked a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellMouseDown\n   * @param {Event} event The `mousedown` event object.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  'beforeOnCellMouseDown',\n\n  /**\n   * Fired after the user clicked a cell.\n   *\n   * @event Hooks#beforeOnCellMouseUp\n   * @param {Event} event The `mouseup` event object.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   */\n  'beforeOnCellMouseUp',\n\n  /**\n   * Fired after the user clicked a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellContextMenu\n   * @since 4.1.0\n   * @param {Event} event The `contextmenu` event object.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   */\n  'beforeOnCellContextMenu',\n\n  /**\n   * Fired after the user moved cursor over a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellMouseOver\n   * @param {Event} event The `mouseover` event object.\n   * @param {CellCoords} coords CellCoords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  'beforeOnCellMouseOver',\n\n  /**\n   * Fired after the user moved cursor out from a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellMouseOut\n   * @param {Event} event The `mouseout` event object.\n   * @param {CellCoords} coords CellCoords object containing the visual coordinates of the leaved cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   */\n  'beforeOnCellMouseOut',\n\n  /**\n   * Fired before one or more columns are about to be removed.\n   *\n   * @event Hooks#beforeRemoveCol\n   * @param {number} index Visual index of starter column.\n   * @param {number} amount Amount of columns to be removed.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRemoveCol',\n\n  /**\n   * Fired when one or more rows are about to be removed.\n   *\n   * @event Hooks#beforeRemoveRow\n   * @param {number} index Visual index of starter row.\n   * @param {number} amount Amount of rows to be removed.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRemoveRow',\n\n  /**\n   * Fired before Handsontable's view-rendering engine is rendered.\n   *\n   * __Note:__ In Handsontable 9.x and earlier, the `beforeViewRender` hook was named `beforeRender`.\n   *\n   * @event Hooks#beforeViewRender\n   * @since 10.0.0\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   * @param {object} skipRender Object with `skipRender` property, if it is set to `true ` the next rendering cycle will be skipped.\n   */\n  'beforeViewRender',\n\n  /**\n   * Fired after Handsontable's view-rendering engine is rendered,\n   * but before redrawing the selection borders and before scroll syncing.\n   *\n   * __Note:__ In Handsontable 9.x and earlier, the `afterViewRender` hook was named `afterRender`.\n   *\n   * @event Hooks#afterViewRender\n   * @since 10.0.0\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   */\n  'afterViewRender',\n\n  /**\n   * Fired before Handsontable's view-rendering engine updates the view.\n   *\n   * The `beforeRender` event is fired right after the Handsontable\n   * business logic is executed and right before the rendering engine starts calling\n   * the Core logic, renderers, cell meta objects etc. to update the view.\n   *\n   * @event Hooks#beforeRender\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   */\n  'beforeRender',\n\n  /**\n   * Fired after Handsontable's view-rendering engine updates the view.\n   *\n   * @event Hooks#afterRender\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   */\n  'afterRender',\n\n  /**\n   * When the focus position is moved to the next or previous row caused by the {@link Options#autoWrapRow} option\n   * the hook is triggered.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeRowWrap\n   * @param {boolean} isWrapEnabled Tells whether the row wrapping is going to happen.\n   * There may be situations where the option does not work even though it is enabled.\n   * This is due to the priority of other options that may block the feature.\n   * For example, when the {@link Options#minSpareCols} is defined, the {@link Options#autoWrapRow} option is not checked.\n   * Thus, row wrapping is off.\n   * @param {CellCoords} newCoords The new focus position. It is an object with keys `row` and `col`, where a value of `-1` indicates a header.\n   * @param {boolean} isFlipped `true` if the row index was flipped, `false` otherwise.\n   * Flipped index means that the user reached the last row and the focus is moved to the first row or vice versa.\n   */\n  'beforeRowWrap',\n\n  /**\n   * When the focus position is moved to the next or previous column caused by the {@link Options#autoWrapCol} option\n   * the hook is triggered.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeColumnWrap\n   * @param {boolean} isWrapEnabled Tells whether the column wrapping is going to happen.\n   * There may be situations where the option does not work even though it is enabled.\n   * This is due to the priority of other options that may block the feature.\n   * For example, when the {@link Options#minSpareRows} is defined, the {@link Options#autoWrapCol} option is not checked.\n   * Thus, column wrapping is off.\n   * @param {CellCoords} newCoords The new focus position. It is an object with keys `row` and `col`, where a value of `-1` indicates a header.\n   * @param {boolean} isFlipped `true` if the column index was flipped, `false` otherwise.\n   * Flipped index means that the user reached the last column and the focus is moved to the first column or vice versa.\n   */\n  'beforeColumnWrap',\n\n  /**\n   * Fired before cell meta is changed.\n   *\n   * @event Hooks#beforeSetCellMeta\n   * @since 8.0.0\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The updated meta key.\n   * @param {*} value The updated meta value.\n   * @returns {boolean|undefined} If false is returned the action is canceled.\n   */\n  'beforeSetCellMeta',\n\n  /**\n   * Fired before setting focus selection.\n   *\n   * @since 14.3.0\n   * @event Hooks#beforeSelectionFocusSet\n   * @param {CellCoords} coords CellCoords instance.\n   */\n  'beforeSelectionFocusSet',\n\n  /**\n   * Fired before setting range is started but not finished yet.\n   *\n   * @event Hooks#beforeSetRangeStartOnly\n   * @param {CellCoords} coords `CellCoords` instance.\n   */\n  'beforeSetRangeStartOnly',\n\n  /**\n   * Fired before setting range is started.\n   *\n   * @event Hooks#beforeSetRangeStart\n   * @param {CellCoords} coords `CellCoords` instance.\n   */\n  'beforeSetRangeStart',\n\n  /**\n   * Fired before setting range is ended.\n   *\n   * @event Hooks#beforeSetRangeEnd\n   * @param {CellCoords} coords `CellCoords` instance.\n   */\n  'beforeSetRangeEnd',\n\n  /**\n   * Fired before applying selection coordinates to the renderable coordinates for Walkontable (rendering engine).\n   * It occurs even when cell coordinates remain unchanged and activates during cell selection and drag selection.\n   * The behavior of Shift+Tab differs from Arrow Left when there's no further movement possible.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeSelectionHighlightSet\n   */\n  'beforeSelectionHighlightSet',\n\n  /**\n   * Fired before the logic of handling a touch scroll, when user started scrolling on a touch-enabled device.\n   *\n   * @event Hooks#beforeTouchScroll\n   */\n  'beforeTouchScroll',\n\n  /**\n   * Fired before cell validation, only if validator function is defined. This can be used to manipulate the value\n   * of changed cell before it is applied to the validator function.\n   *\n   * __Note:__ this will not affect values of changes. This will change value *ONLY* for validation.\n   *\n   * @event Hooks#beforeValidate\n   * @param {*} value Value of the cell.\n   * @param {number} row Visual row index.\n   * @param {string|number} prop Property name / column index.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'beforeValidate',\n\n  /**\n   * Fired before cell value is rendered into the DOM (through renderer function). This can be used to manipulate the\n   * value which is passed to the renderer without modifying the renderer itself.\n   *\n   * @event Hooks#beforeValueRender\n   * @param {*} value Cell value to render.\n   * @param {object} cellProperties An object containing the cell properties.\n   */\n  'beforeValueRender',\n\n  /**\n   * Fired after Handsontable instance is constructed (using `new` operator).\n   *\n   * @event Hooks#construct\n   */\n  'construct',\n\n  /**\n   * Fired after Handsontable instance is initiated but before table is rendered.\n   *\n   * @event Hooks#init\n   */\n  'init',\n\n  /**\n   * Fired when a column header index is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyColHeader\n   * @param {number} column Visual column header index.\n   */\n  'modifyColHeader',\n\n  /**\n   * Fired when a column width is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyColWidth\n   * @param {number} width Current column width.\n   * @param {number} column Visual column index.\n   */\n  'modifyColWidth',\n\n  /**\n   * Fired when rendering the list of values in the multiple-selection component of the Filters dropdown.\n   * The hook allows modifying the displayed values in that component.\n   *\n   * @since 14.2.0\n   * @event Hooks#modifyFiltersMultiSelectValue\n   * @param {object} item The item in the list of values.\n   * @param {object} meta The cell properties object.\n   */\n  'modifyFiltersMultiSelectValue',\n\n  /**\n   * Fired when focusing a cell or a header element. Allows replacing the element to be focused by returning a\n   * different HTML element.\n   *\n   * @since 14.0.0\n   * @event Hooks#modifyFocusedElement\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @param {HTMLElement|undefined} focusedElement The element to be focused. `null` for focusedElement is intended when focused cell is hidden.\n   */\n  'modifyFocusedElement',\n\n  /**\n   * Fired when a row header index is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyRowHeader\n   * @param {number} row Visual row header index.\n   */\n  'modifyRowHeader',\n\n  /**\n   * Fired when a row height is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyRowHeight\n   * @param {number} height Row height.\n   * @param {number} row Visual row index.\n   */\n  'modifyRowHeight',\n\n  /**\n   * Fired when a row height is about to be modified by a callback function. The hook allows to change the row height\n   * for the specified overlay type.\n   *\n   * @since 14.5.0\n   * @event Hooks#modifyRowHeightByOverlayName\n   * @param {number} height Row height.\n   * @param {number} row Visual row index.\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName Overlay name.\n   */\n  'modifyRowHeightByOverlayName',\n\n  /**\n   * Fired when a data was retrieved or modified.\n   *\n   * @event Hooks#modifyData\n   * @param {number} row Physical row index.\n   * @param {number} column Visual column index.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  'modifyData',\n\n  /**\n   * Fired when a data was retrieved or modified from the source data set.\n   *\n   * @event Hooks#modifySourceData\n   * @since 8.0.0\n   * @param {number} row Physical row index.\n   * @param {number} column Physical column index or property name.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  'modifySourceData',\n\n  /**\n   * Fired when a data was retrieved or modified.\n   *\n   * @event Hooks#modifyRowData\n   * @param {number} row Physical row index.\n   */\n  'modifyRowData',\n\n  /**\n   * Used to modify the cell coordinates when using the [`getCell`](@/api/core.md#getcell) method, opening editor, getting value from the editor\n   * and saving values from the closed editor.\n   *\n   * @event Hooks#modifyGetCellCoords\n   * @since 0.36.0\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {boolean} topmost If set to `true`, it returns the TD element from the topmost overlay. For example,\n   *                          if the wanted cell is in the range of fixed rows, it will return a TD element\n   *                          from the `top` overlay.\n   * @returns {undefined|number[]}\n   */\n  'modifyGetCellCoords',\n\n  /**\n   * Used to modify the cell coordinates when the table is activated (going into the listen mode).\n   *\n   * @event Hooks#modifyFocusOnTabNavigation\n   * @since 14.0.0\n   * @param {'from_above' | 'from_below'} tabActivationDir The browsers Tab navigation direction. Depending on\n   * whether the user activated the table from the element above or below, another cell can be selected.\n   * @param {CellCoords} visualCoords The coords that will be used to select a cell.\n   */\n  'modifyFocusOnTabNavigation',\n\n  /**\n   * Allows modify the visual row index that is used to retrieve the row header element (TH) before it's\n   * highlighted (proper CSS class names are added). Modifying the visual row index allows building a custom\n   * implementation of the nested headers feature or other features that require highlighting other DOM\n   * elements than that the rendering engine, by default, would have highlighted.\n   *\n   * @event Hooks#beforeHighlightingRowHeader\n   * @since 8.4.0\n   * @param {number} row Visual row index.\n   * @param {number} headerLevel Column header level (0 = most distant to the table).\n   * @param {object} highlightMeta An object that contains additional information about processed selection.\n   * @returns {number|undefined}\n   */\n  'beforeHighlightingRowHeader',\n\n  /**\n   * Allows modify the visual column index that is used to retrieve the column header element (TH) before it's\n   * highlighted (proper CSS class names are added). Modifying the visual column index allows building a custom\n   * implementation of the nested headers feature or other features that require highlighting other DOM\n   * elements than that the rendering engine, by default, would have highlighted.\n   *\n   * @event Hooks#beforeHighlightingColumnHeader\n   * @since 8.4.0\n   * @param {number} column Visual column index.\n   * @param {number} headerLevel Row header level (0 = most distant to the table).\n   * @param {object} highlightMeta An object that contains additional information about processed selection.\n   * @returns {number|undefined}\n   */\n  'beforeHighlightingColumnHeader',\n\n  /**\n   * Fired by {@link PersistentState} plugin, after loading value, saved under given key, from browser local storage.\n   *\n   * The `persistentStateLoad` hook is fired even when the {@link Options#persistentState} option is disabled.\n   *\n   * @event Hooks#persistentStateLoad\n   * @param {string} key Key.\n   * @param {object} valuePlaceholder Object containing the loaded value under `valuePlaceholder.value` (if no value have been saved, `value` key will be undefined).\n   */\n  'persistentStateLoad',\n\n  /**\n   * Fired by {@link PersistentState} plugin after resetting data from local storage. If no key is given, all values associated with table will be cleared.\n   * This hook is fired when {@link Options#persistentState} option is enabled.\n   *\n   * @event Hooks#persistentStateReset\n   * @param {string} [key] Key.\n   */\n  'persistentStateReset',\n\n  /**\n   * Fired by {@link PersistentState} plugin, after saving value under given key in browser local storage.\n   *\n   * The `persistentStateSave` hook is fired even when the {@link Options#persistentState} option is disabled.\n   *\n   * @event Hooks#persistentStateSave\n   * @param {string} key Key.\n   * @param {Mixed} value Value to save.\n   */\n  'persistentStateSave',\n\n  /**\n   * Fired by {@link ColumnSorting} and {@link MultiColumnSorting} plugins before sorting the column. If you return `false` value inside callback for hook, then sorting\n   * will be not applied by the Handsontable (useful for server-side sorting).\n   *\n   * This hook is fired when {@link Options#columnSorting} or {@link Options#multiColumnSorting} option is enabled.\n   *\n   * @event Hooks#beforeColumnSort\n   * @param {Array} currentSortConfig Current sort configuration (for all sorted columns).\n   * @param {Array} destinationSortConfigs Destination sort configuration (for all sorted columns).\n   * @returns {boolean | undefined} If `false` the column will not be sorted, `true` otherwise.\n   */\n  'beforeColumnSort',\n\n  /**\n   * Fired by {@link ColumnSorting} and {@link MultiColumnSorting} plugins after sorting the column. This hook is fired when {@link Options#columnSorting}\n   * or {@link Options#multiColumnSorting} option is enabled.\n   *\n   * @event Hooks#afterColumnSort\n   * @param {Array} currentSortConfig Current sort configuration (for all sorted columns).\n   * @param {Array} destinationSortConfigs Destination sort configuration (for all sorted columns).\n   */\n  'afterColumnSort',\n\n  /**\n   * Fired by {@link Autofill} plugin after setting range of autofill. This hook is fired when {@link Options#fillHandle}\n   * option is enabled.\n   *\n   * @event Hooks#modifyAutofillRange\n   * @param {Array} startArea Array of visual coordinates of the starting point for the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n   * @param {Array} entireArea Array of visual coordinates of the entire area of the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n   */\n  'modifyAutofillRange',\n\n  /**\n   * Fired to allow modifying the copyable range with a callback function.\n   *\n   * @event Hooks#modifyCopyableRange\n   * @param {Array[]} copyableRanges Array of objects defining copyable cells.\n   */\n  'modifyCopyableRange',\n\n  /**\n   * Fired by {@link CopyPaste} plugin before copying the values to the clipboard and before clearing values of\n   * the selected cells. This hook is fired when {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#beforeCut\n   * @param {Array[]} data An array of arrays which contains data to cut.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       which will be cut out.\n   * @returns {*} If returns `false` then operation of the cutting out is canceled.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // To disregard a single row, remove it from the array using data.splice(i, 1).\n   * new Handsontable(element, {\n   *   beforeCut: function(data, coords) {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }\n   * });\n   * // To cancel a cutting action, just return `false`.\n   * new Handsontable(element, {\n   *   beforeCut: function(data, coords) {\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // To disregard a single row, remove it from the array using data.splice(i, 1).\n   * <HotTable\n   *   beforeCut={(data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }}\n   * />\n   * // To cancel a cutting action, just return `false`.\n   * <HotTable\n   *   beforeCut={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeCut',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after data was cut out from the table. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#afterCut\n   * @param {Array[]} data An array of arrays with the cut data.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       which was cut out.\n   */\n  'afterCut',\n\n  /**\n   * Fired before values are copied to the clipboard.\n   *\n   * @event Hooks#beforeCopy\n   * @param {Array[]} data An array of arrays which contains data to copied.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                         which will copied.\n   * @param {{ columnHeadersCount: number }} copiedHeadersCount (Since 12.3.0) The number of copied column headers.\n   * @returns {*} If returns `false` then copying is canceled.\n   *\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * ...\n   * new Handsontable(document.getElementById('example'), {\n   *   beforeCopy: (data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }\n   * });\n   * ...\n   *\n   * // To cancel copying, return false from the callback.\n   * ...\n   * new Handsontable(document.getElementById('example'), {\n   *   beforeCopy: (data, coords) => {\n   *     return false;\n   *   }\n   * });\n   * ...\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * ...\n   * <HotTable\n   *   beforeCopy={(data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }}\n   * />\n   * ...\n   *\n   * // To cancel copying, return false from the callback.\n   * ...\n   * <HotTable\n   *   beforeCopy={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ...\n   * ```\n   * :::\n   */\n  'beforeCopy',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after data are pasted into table. This hook is fired when {@link Options#copyPaste}\n   * option is enabled.\n   *\n   * @event Hooks#afterCopy\n   * @param {Array[]} data An array of arrays which contains the copied data.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                         which was copied.\n   * @param {{ columnHeadersCount: number }} copiedHeadersCount (Since 12.3.0) The number of copied column headers.\n   */\n  'afterCopy',\n\n  /**\n   * Fired by {@link CopyPaste} plugin before values are pasted into table. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#beforePaste\n   * @param {Array[]} data An array of arrays which contains data to paste.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       that correspond to the previously selected area.\n   * @returns {*} If returns `false` then pasting is canceled.\n   * @example\n   * ```js\n   * ::: only-for javascript\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * new Handsontable(example, {\n   *   beforePaste: (data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }\n   * });\n   * // To cancel pasting, return false from the callback.\n   * new Handsontable(example, {\n   *   beforePaste: (data, coords) => {\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * <HotTable\n   *   beforePaste={(data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }}\n   * />\n   * // To cancel pasting, return false from the callback.\n   * <HotTable\n   *   beforePaste={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforePaste',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after values are pasted into table. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#afterPaste\n   * @param {Array[]} data An array of arrays with the pasted data.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       that correspond to the previously selected area.\n   */\n  'afterPaste',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, before freezing a column.\n   *\n   * @event Hooks#beforeColumnFreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the column that is going to freeze.\n   * @param {boolean} freezePerformed If `true`: the column is going to freeze. If `false`: the column is not going to freeze (which might happen if the column is already frozen).\n   * @returns {boolean|undefined} If `false`: the column is not going to freeze, and the `afterColumnFreeze` hook won't fire.\n   */\n  'beforeColumnFreeze',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, right after freezing a column.\n   *\n   * @event Hooks#afterColumnFreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the frozen column.\n   * @param {boolean} freezePerformed If `true`: the column got successfully frozen. If `false`: the column didn't get frozen.\n   */\n  'afterColumnFreeze',\n\n  /**\n   * Fired by {@link ManualColumnMove} plugin before change order of the visual indexes. This hook is fired when\n   * {@link Options#manualColumnMove} option is enabled.\n   *\n   * @event Hooks#beforeColumnMove\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/columns/column-moving/column-moving.md).\n   * @param {number|undefined} dropIndex Visual column index, being a drop index for the moved columns.\n   *                                     Points to where we are going to drop the moved elements. To check\n   *                                     visualization of drop index please take a look at\n   *                                     [documentation](@/guides/columns/column-moving/column-moving.md).\n   *                                     It's `undefined` when `dragColumns` function wasn't called.\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @returns {undefined | boolean} If `false` the column will not be moved, `true` otherwise.\n   */\n  'beforeColumnMove',\n\n  /**\n   * Fired by {@link ManualColumnMove} plugin after changing order of the visual indexes.\n   * This hook is fired when {@link Options#manualColumnMove} option is enabled.\n   *\n   * @event Hooks#afterColumnMove\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/columns/column-moving/column-moving.md).\n   * @param {number|undefined} dropIndex Visual column index, being a drop index for the moved columns.\n   *                                     Points to where we are going to drop the moved elements.\n   *                                     To check visualization of drop index please take a look at\n   *                                     [documentation](@/guides/columns/column-moving/column-moving.md).\n   *                                     It's `undefined` when `dragColumns` function wasn't called.\n   * @param {boolean} movePossible Indicates if it was possible to move columns to the desired position.\n   * @param {boolean} orderChanged Indicates if order of columns was changed by move.\n   */\n  'afterColumnMove',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, before unfreezing a column.\n   *\n   * @event Hooks#beforeColumnUnfreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the column that is going to unfreeze.\n   * @param {boolean} unfreezePerformed If `true`: the column is going to unfreeze. If `false`: the column is not going to unfreeze (which might happen if the column is already unfrozen).\n   * @returns {boolean|undefined} If `false`: the column is not going to unfreeze, and the `afterColumnUnfreeze` hook won't fire.\n   */\n  'beforeColumnUnfreeze',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, right after unfreezing a column.\n   *\n   * @event Hooks#afterColumnUnfreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the unfrozen column.\n   * @param {boolean} unfreezePerformed If `true`: the column got successfully unfrozen. If `false`: the column didn't get unfrozen.\n   */\n  'afterColumnUnfreeze',\n\n  /**\n   * Fired by {@link ManualRowMove} plugin before changing the order of the visual indexes. This hook is fired when\n   * {@link Options#manualRowMove} option is enabled.\n   *\n   * @event Hooks#beforeRowMove\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {number|undefined} dropIndex Visual row index, being a drop index for the moved rows.\n   *                                     Points to where we are going to drop the moved elements.\n   *                                     To check visualization of drop index please take a look at\n   *                                     [documentation](@/guides/rows/row-moving/row-moving.md).\n   *                                     It's `undefined` when `dragRows` function wasn't called.\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRowMove',\n\n  /**\n   * Fired by {@link ManualRowMove} plugin after changing the order of the visual indexes.\n   * This hook is fired when {@link Options#manualRowMove} option is enabled.\n   *\n   * @event Hooks#afterRowMove\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {number|undefined} dropIndex Visual row index, being a drop index for the moved rows.\n   *                                     Points to where we are going to drop the moved elements.\n   *                                     To check visualization of drop index please take a look at\n   *                                     [documentation](@/guides/rows/row-moving/row-moving.md).\n   *                                     It's `undefined` when `dragRows` function wasn't called.\n   * @param {boolean} movePossible Indicates if it was possible to move rows to the desired position.\n   * @param {boolean} orderChanged Indicates if order of rows was changed by move.\n   */\n  'afterRowMove',\n\n  /**\n   * Fired by {@link ManualColumnResize} plugin before rendering the table with modified column sizes. This hook is\n   * fired when {@link Options#manualColumnResize} option is enabled.\n   *\n   * @event Hooks#beforeColumnResize\n   * @param {number} newSize Calculated new column width.\n   * @param {number} column Visual index of the resized column.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   * @returns {number} Returns a new column size or `undefined`, if column size should be calculated automatically.\n   */\n  'beforeColumnResize',\n\n  /**\n   * Fired by {@link ManualColumnResize} plugin after rendering the table with modified column sizes. This hook is\n   * fired when {@link Options#manualColumnResize} option is enabled.\n   *\n   * @event Hooks#afterColumnResize\n   * @param {number} newSize Calculated new column width.\n   * @param {number} column Visual index of the resized column.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   */\n  'afterColumnResize',\n\n  /**\n   * Fired by {@link ManualRowResize} plugin before rendering the table with modified row sizes. This hook is\n   * fired when {@link Options#manualRowResize} option is enabled.\n   *\n   * @event Hooks#beforeRowResize\n   * @param {number} newSize Calculated new row height.\n   * @param {number} row Visual index of the resized row.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   * @returns {number|undefined} Returns the new row size or `undefined` if row size should be calculated automatically.\n   */\n  'beforeRowResize',\n\n  /**\n   * Fired by {@link ManualRowResize} plugin after rendering the table with modified row sizes. This hook is\n   * fired when {@link Options#manualRowResize} option is enabled.\n   *\n   * @event Hooks#afterRowResize\n   * @param {number} newSize Calculated new row height.\n   * @param {number} row Visual index of the resized row.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   */\n  'afterRowResize',\n\n  /**\n   * Fired after getting the column header renderers.\n   *\n   * @event Hooks#afterGetColumnHeaderRenderers\n   * @param {Function[]} renderers An array of the column header renderers.\n   */\n  'afterGetColumnHeaderRenderers',\n\n  /**\n   * Fired after getting the row header renderers.\n   *\n   * @event Hooks#afterGetRowHeaderRenderers\n   * @param {Function[]} renderers An array of the row header renderers.\n   */\n  'afterGetRowHeaderRenderers',\n\n  /**\n   * Fired before applying stretched column width to column.\n   *\n   * @event Hooks#beforeStretchingColumnWidth\n   * @param {number} stretchedWidth Calculated width.\n   * @param {number} column Visual column index.\n   * @returns {number|undefined} Returns new width which will be applied to the column element.\n   */\n  'beforeStretchingColumnWidth',\n\n  /**\n   * Fired by the [`Filters`](@/api/filters.md) plugin,\n   * before a [column filter](@/guides/columns/column-filter/column-filter.md) gets applied.\n   *\n   * [`beforeFilter`](#beforefilter) takes two arguments: `conditionsStack` and `previousConditionsStack`, both are\n   * arrays of objects.\n   *\n   * Each object represents one of your [column filters](@/api/filters.md#addcondition),\n   * and consists of the following properties:\n   *\n   * | Property     | Possible values                                                         | Description                                                                                                              |\n   * | ------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n   * | `column`     | Number                                                                  | A visual index of the column to which the filter will be applied.                                                        |\n   * | `conditions` | Array of objects                                                        | Each object represents one condition. For details, see [`addCondition()`](@/api/filters.md#addcondition).                |\n   * | `operation`  | `'conjunction'` \\| `'disjunction'` \\| `'disjunctionWithExtraCondition'` | An operation to perform on your set of `conditions`. For details, see [`addCondition()`](@/api/filters.md#addcondition). |\n   *\n   * An example of the format of the `conditionsStack` argument:\n   *\n   * ```js\n   * [\n   *   {\n   *     column: 2,\n   *     conditions: [\n   *       {name: 'begins_with', args: [['S']]}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   *   {\n   *     column: 4,\n   *     conditions: [\n   *       {name: 'not_empty', args: []}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   * ]\n   * ```\n   *\n   * To perform server-side filtering (i.e., to not apply filtering to Handsontable's UI),\n   * set [`beforeFilter`](#beforefilter) to return `false`:\n   *\n   * ```js\n   * new Handsontable(document.getElementById('example'), {\n   *   beforeFilter: (conditionsStack) => {\n   *     return false;\n   *   }\n   * });\n   *```\n   *\n   * Read more:\n   * - [Guides: Column filter](@/guides/columns/column-filter/column-filter.md)\n   * - [Hooks: `afterFilter`](#afterfilter)\n   * - [Options: `filters`](@/api/options.md#filters)\n   * - [Plugins: `Filters`](@/api/filters.md)\n   * – [Plugin methods: `addCondition()`](@/api/filters.md#addcondition)\n   *\n   * @event Hooks#beforeFilter\n   * @param {object[]} conditionsStack An array of objects with your [column filters](@/api/filters.md#addcondition).\n   * @param {object[]|null} previousConditionsStack An array of objects with your previous [column filters](@/api/filters.md#addcondition). It can also be `null` if there was no previous filters applied or the conditions did not change between performing the `filter` action.\n   * @returns {boolean} To perform server-side filtering (i.e., to not apply filtering to Handsontable's UI), return `false`.\n   */\n  'beforeFilter',\n\n  /**\n   * Fired by the [`Filters`](@/api/filters.md) plugin,\n   * after a [column filter](@/guides/columns/column-filter/column-filter.md) gets applied.\n   *\n   * [`afterFilter`](#afterfilter) takes one argument (`conditionsStack`), which is an array of objects.\n   * Each object represents one of your [column filters](@/api/filters.md#addcondition),\n   * and consists of the following properties:\n   *\n   * | Property     | Possible values                                                         | Description                                                                                                              |\n   * | ------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n   * | `column`     | Number                                                                  | A visual index of the column to which the filter was applied.                                                            |\n   * | `conditions` | Array of objects                                                        | Each object represents one condition. For details, see [`addCondition()`](@/api/filters.md#addcondition).                |\n   * | `operation`  | `'conjunction'` \\| `'disjunction'` \\| `'disjunctionWithExtraCondition'` | An operation to perform on your set of `conditions`. For details, see [`addCondition()`](@/api/filters.md#addcondition). |\n   *\n   * An example of the format of the `conditionsStack` argument:\n   *\n   * ```js\n   * [\n   *   {\n   *     column: 2,\n   *     conditions: [\n   *       {name: 'begins_with', args: [['S']]}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   *   {\n   *     column: 4,\n   *     conditions: [\n   *       {name: 'not_empty', args: []}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   * ]\n   * ```\n   *\n   * Read more:\n   * - [Guides: Column filter](@/guides/columns/column-filter/column-filter.md)\n   * - [Hooks: `beforeFilter`](#beforefilter)\n   * - [Options: `filters`](@/api/options.md#filters)\n   * - [Plugins: `Filters`](@/api/filters.md)\n   * – [Plugin methods: `addCondition()`](@/api/filters.md#addcondition)\n   *\n   * @event Hooks#afterFilter\n   * @param {object[]} conditionsStack An array of objects with your [column filters](@/api/filters.md#addcondition).\n   */\n  'afterFilter',\n\n  /**\n   * Fired by the {@link Formulas} plugin, when any cell value changes.\n   *\n   * Returns an array of objects that contains:\n   * - The addresses (`sheet`, `row`, `col`) and new values (`newValue`) of the changed cells.\n   * - The addresses and new values of any cells that had to be recalculated (because their formulas depend on the cells that changed).\n   *\n   * This hook gets also fired on Handsontable's initialization, returning the addresses and values of all cells.\n   *\n   * Read more:\n   * - [Guides: Formula calculation](@/guides/formulas/formula-calculation/formula-calculation.md)\n   * - [HyperFormula documentation: `valuesUpdated`](https://hyperformula.handsontable.com/api/interfaces/listeners.html#valuesupdated)\n   *\n   * @since 9.0.0\n   * @event Hooks#afterFormulasValuesUpdate\n   * @param {Array} changes The addresses and new values of all the changed and recalculated cells.\n   */\n  'afterFormulasValuesUpdate',\n\n  /**\n   * Fired when a named expression is added to the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterNamedExpressionAdded\n   * @param {string} namedExpressionName The name of the added expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  'afterNamedExpressionAdded',\n\n  /**\n   * Fired when a named expression is removed from the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterNamedExpressionRemoved\n   * @param {string} namedExpressionName The name of the removed expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  'afterNamedExpressionRemoved',\n\n  /**\n   * Fired when a new sheet is added to the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterSheetAdded\n   * @param {string} addedSheetDisplayName The name of the added sheet.\n   */\n  'afterSheetAdded',\n\n  /**\n   * Fired when a sheet in the Formulas' engine instance is renamed.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterSheetRenamed\n   * @param {string} oldDisplayName The old name of the sheet.\n   * @param {string} newDisplayName The new name of the sheet.\n   */\n  'afterSheetRenamed',\n\n  /**\n   * Fired when a sheet is removed from the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterSheetRemoved\n   * @param {string} removedSheetDisplayName The removed sheet name.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  'afterSheetRemoved',\n\n  /**\n   * Fired while retrieving the column header height.\n   *\n   * @event Hooks#modifyColumnHeaderHeight\n   */\n  'modifyColumnHeaderHeight',\n\n  /**\n   * Fired while retrieving a column header's value.\n   *\n   * @since 12.3.0\n   * @event Hooks#modifyColumnHeaderValue\n   * @param {string} value A column header value.\n   * @param {number} visualColumnIndex A visual column index.\n   * @param {number} [headerLevel=0] Header level index. Accepts positive (`0` to `n`)\n   *                                 and negative (`-1` to `-n`) values. For positive values, `0` points to the\n   *                                 topmost header. For negative values, `-1` points to the bottom-most\n   *                                 header (the header closest to the cells).\n   * @returns {string} The column header value to be updated.\n   */\n  'modifyColumnHeaderValue',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before the undo action. Contains information about the action that is being undone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#beforeUndo\n   * @param {object} action The action object. Contains information about the action being undone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeUndo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before changing undo stack.\n   *\n   * @event Hooks#beforeUndoStackChange\n   * @since 8.4.0\n   * @param {Array} doneActions Stack of actions which may be undone.\n   * @param {string} [source] String that identifies source of action\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action of changing undo stack is canceled.\n   */\n  'beforeUndoStackChange',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after the undo action. Contains information about the action that is being undone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#afterUndo\n   * @param {object} action The action object. Contains information about the action being undone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n   */\n  'afterUndo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after changing undo stack.\n   *\n   * @event Hooks#afterUndoStackChange\n   * @since 8.4.0\n   * @param {Array} doneActionsBefore Stack of actions which could be undone before performing new action.\n   * @param {Array} doneActionsAfter Stack of actions which can be undone after performing new action.\n   */\n  'afterUndoStackChange',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before the redo action. Contains information about the action that is being redone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#beforeRedo\n   * @param {object} action The action object. Contains information about the action being redone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRedo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before changing redo stack.\n   *\n   * @event Hooks#beforeRedoStackChange\n   * @since 8.4.0\n   * @param {Array} undoneActions Stack of actions which may be redone.\n   */\n  'beforeRedoStackChange',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after the redo action. Contains information about the action that is being redone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#afterRedo\n   * @param {object} action The action object. Contains information about the action being redone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n   */\n  'afterRedo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after changing redo stack.\n   *\n   * @event Hooks#afterRedoStackChange\n   * @since 8.4.0\n   * @param {Array} undoneActionsBefore Stack of actions which could be redone before performing new action.\n   * @param {Array} undoneActionsAfter Stack of actions which can be redone after performing new action.\n   */\n  'afterRedoStackChange',\n\n  /**\n   * Fired while retrieving the row header width.\n   *\n   * @event Hooks#modifyRowHeaderWidth\n   * @param {number} rowHeaderWidth Row header width.\n   */\n  'modifyRowHeaderWidth',\n\n  /**\n   * Fired when the focus of the selection is being modified (e.g. Moving the focus with the enter/tab keys).\n   *\n   * @since 14.3.0\n   * @event Hooks#modifyTransformFocus\n   * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n   */\n  'modifyTransformFocus',\n\n  /**\n   * Fired when the start of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#modifyTransformStart\n   * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n   */\n  'modifyTransformStart',\n\n  /**\n   * Fired when the end of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#modifyTransformEnd\n   * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n   */\n  'modifyTransformEnd',\n\n  /**\n   * Fired after the focus of the selection is being modified (e.g. Moving the focus with the enter/tab keys).\n   *\n   * @since 14.3.0\n   * @event Hooks#afterModifyTransformFocus\n   * @param {CellCoords} coords Coords of the freshly focused cell.\n   * @param {number} rowTransformDir `-1` if trying to focus a cell with a negative row index. `0` otherwise.\n   * @param {number} colTransformDir `-1` if trying to focus a cell with a negative column index. `0` otherwise.\n   */\n  'afterModifyTransformFocus',\n\n  /**\n   * Fired after the start of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#afterModifyTransformStart\n   * @param {CellCoords} coords Coords of the freshly selected cell.\n   * @param {number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n   * @param {number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n   */\n  'afterModifyTransformStart',\n\n  /**\n   * Fired after the end of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#afterModifyTransformEnd\n   * @param {CellCoords} coords Visual coords of the freshly selected cell.\n   * @param {number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n   * @param {number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n   */\n  'afterModifyTransformEnd',\n\n  /**\n   * Fired inside the `viewportRowCalculatorOverride` method. Allows modifying the row calculator parameters.\n   *\n   * @event Hooks#afterViewportRowCalculatorOverride\n   * @param {object} calc The row calculator.\n   */\n  'afterViewportRowCalculatorOverride',\n\n  /**\n   * Fired inside the `viewportColumnCalculatorOverride` method. Allows modifying the row calculator parameters.\n   *\n   * @event Hooks#afterViewportColumnCalculatorOverride\n   * @param {object} calc The row calculator.\n   */\n  'afterViewportColumnCalculatorOverride',\n\n  /**\n   * Fired after initializing all the plugins.\n   * This hook should be added before Handsontable is initialized.\n   *\n   * @event Hooks#afterPluginsInitialized\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.add('afterPluginsInitialized', myCallback);\n   * ```\n   */\n  'afterPluginsInitialized',\n\n  /**\n   * Fired by {@link HiddenRows} plugin before marking the rows as hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   * Returning `false` in the callback will prevent the hiding action from completing.\n   *\n   * @event Hooks#beforeHideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n   */\n  'beforeHideRows',\n\n  /**\n   * Fired by {@link HiddenRows} plugin after marking the rows as hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   *\n   * @event Hooks#afterHideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any non-hidden rows, `false` otherwise.\n   */\n  'afterHideRows',\n\n  /**\n   * Fired by {@link HiddenRows} plugin before marking the rows as not hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   * Returning `false` in the callback will prevent the row revealing action from completing.\n   *\n   * @event Hooks#beforeUnhideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the revealing action will not be completed.\n   */\n  'beforeUnhideRows',\n\n  /**\n   * Fired by {@link HiddenRows} plugin after marking the rows as not hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   *\n   * @event Hooks#afterUnhideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any hidden rows, `false` otherwise.\n   */\n  'afterUnhideRows',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin before marking the columns as hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   * Returning `false` in the callback will prevent the hiding action from completing.\n   *\n   * @event Hooks#beforeHideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n   */\n  'beforeHideColumns',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin after marking the columns as hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   *\n   * @event Hooks#afterHideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any non-hidden columns, `false` otherwise.\n   */\n  'afterHideColumns',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin before marking the columns as not hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   * Returning `false` in the callback will prevent the column revealing action from completing.\n   *\n   * @event Hooks#beforeUnhideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n   */\n  'beforeUnhideColumns',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin after marking the columns as not hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   *\n   * @event Hooks#afterUnhideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any hidden columns, `false` otherwise.\n   */\n  'afterUnhideColumns',\n\n  /**\n   * Fired by {@link TrimRows} plugin before trimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#beforeTrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the trimming action will not be completed.\n   */\n  'beforeTrimRow',\n\n  /**\n   * Fired by {@link TrimRows} plugin after trimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#afterTrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any non-trimmed rows, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the trimming action will not be completed.\n   */\n  'afterTrimRow',\n\n  /**\n   * Fired by {@link TrimRows} plugin before untrimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#beforeUntrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the untrimming action will not be completed.\n   */\n  'beforeUntrimRow',\n\n  /**\n   * Fired by {@link TrimRows} plugin after untrimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#afterUntrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any trimmed rows, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the untrimming action will not be completed.\n   */\n  'afterUntrimRow',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin before opening the dropdown menu. This hook is fired when {@link Options#dropdownMenu}\n   * option is enabled.\n   *\n   * @event Hooks#beforeDropdownMenuShow\n   * @param {DropdownMenu} dropdownMenu The `DropdownMenu` instance.\n   */\n  'beforeDropdownMenuShow',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin after opening the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterDropdownMenuShow\n   * @param {DropdownMenu} dropdownMenu The `DropdownMenu` instance.\n   */\n  'afterDropdownMenuShow',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin after hiding the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterDropdownMenuHide\n   * @param {DropdownMenu} instance The `DropdownMenu` instance.\n   */\n  'afterDropdownMenuHide',\n\n  /**\n   * Fired by {@link NestedRows} plugin before adding a children to the `NestedRows` structure. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#beforeAddChild\n   * @param {object} parent The parent object.\n   * @param {object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n   * @param {number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n   */\n  'beforeAddChild',\n\n  /**\n   * Fired by {@link NestedRows} plugin after adding a children to the `NestedRows` structure. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#afterAddChild\n   * @param {object} parent The parent object.\n   * @param {object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n   * @param {number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n   */\n  'afterAddChild',\n\n  /**\n   * Fired by {@link NestedRows} plugin before detaching a child from its parent. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#beforeDetachChild\n   * @param {object} parent An object representing the parent from which the element is to be detached.\n   * @param {object} element The detached element.\n   */\n  'beforeDetachChild',\n\n  /**\n   * Fired by {@link NestedRows} plugin after detaching a child from its parent. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#afterDetachChild\n   * @param {object} parent An object representing the parent from which the element was detached.\n   * @param {object} element The detached element.\n   * @param {number} finalElementPosition The final row index of the detached element.\n   */\n  'afterDetachChild',\n\n  /**\n   * Fired before the editor is opened and rendered.\n   *\n   * @since 14.2.0\n   * @event Hooks#beforeBeginEditing\n   * @param {number} row Visual row index of the edited cell.\n   * @param {number} column Visual column index of the edited cell.\n   * @param {*} initialValue The initial editor value.\n   * @param {MouseEvent | KeyboardEvent} event The event which was responsible for opening the editor.\n   * @param {boolean} fullEditMode `true` if the editor is opened in full edit mode, `false` otherwise.\n   * Editor opened in full edit mode does not close after pressing Arrow keys.\n   * @returns {boolean | undefined} If the callback returns `false,` the editor won't be opened after\n   * the mouse double click or after pressing the Enter key. Returning `undefined` (or other value\n   * than boolean) will result in default behavior, which disallows opening an editor for non-contiguous\n   * selection (while pressing Ctrl/Cmd) and for multiple selected cells (while pressing SHIFT).\n   * Returning `true` removes those restrictions.\n   */\n  'beforeBeginEditing',\n\n  /**\n   * Fired after the editor is opened and rendered.\n   *\n   * @event Hooks#afterBeginEditing\n   * @param {number} row Visual row index of the edited cell.\n   * @param {number} column Visual column index of the edited cell.\n   */\n  'afterBeginEditing',\n\n  /**\n   * Fired by {@link MergeCells} plugin before cell merging. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#beforeMergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'beforeMergeCells',\n\n  /**\n   * Fired by {@link MergeCells} plugin after cell merging. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#afterMergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {object} mergeParent The parent collection of the provided cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'afterMergeCells',\n\n  /**\n   * Fired by {@link MergeCells} plugin before unmerging the cells. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#beforeUnmergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'beforeUnmergeCells',\n\n  /**\n   * Fired by {@link MergeCells} plugin after unmerging the cells. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#afterUnmergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'afterUnmergeCells',\n\n  /**\n   * Fired after the table was switched into listening mode. This allows Handsontable to capture keyboard events and\n   * respond in the right way.\n   *\n   * @event Hooks#afterListen\n   */\n  'afterListen',\n\n  /**\n   * Fired after the table was switched off from the listening mode. This makes the Handsontable inert for any\n   * keyboard events.\n   *\n   * @event Hooks#afterUnlisten\n   */\n  'afterUnlisten',\n\n  /**\n   * Fired after the window was resized or the size of the Handsontable root element was changed.\n   *\n   * @event Hooks#afterRefreshDimensions\n   * @param {{ width: number, height: number }} previousDimensions Previous dimensions of the container.\n   * @param {{ width: number, height: number }} currentDimensions Current dimensions of the container.\n   * @param {boolean} stateChanged `true`, if the container was re-render, `false` otherwise.\n   */\n  'afterRefreshDimensions',\n\n  /**\n   * Cancellable hook, called after resizing a window or after detecting size change of the\n   * Handsontable root element, but before redrawing a table.\n   *\n   * @event Hooks#beforeRefreshDimensions\n   * @param {{ width: number, height: number }} previousDimensions Previous dimensions of the container.\n   * @param {{ width: number, height: number }} currentDimensions Current dimensions of the container.\n   * @param {boolean} actionPossible `true`, if current and previous dimensions are different, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the refresh action will not be completed.\n   */\n  'beforeRefreshDimensions',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns collapse. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#beforeColumnCollapse\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} collapsePossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the collapsing action will not be completed.\n   */\n  'beforeColumnCollapse',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns collapse. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#afterColumnCollapse\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} collapsePossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @param {boolean} successfullyCollapsed `true`, if the action affected any non-collapsible column, `false` otherwise.\n   */\n  'afterColumnCollapse',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns expand. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#beforeColumnExpand\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} expandPossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the expanding action will not be completed.\n   */\n  'beforeColumnExpand',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns expand. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#afterColumnExpand\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} expandPossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @param {boolean} successfullyExpanded `true`, if the action affected any non-collapsible column, `false` otherwise.\n   */\n  'afterColumnExpand',\n\n  /**\n   * Fired by {@link AutoColumnSize} plugin within SampleGenerator utility.\n   *\n   * @event Hooks#modifyAutoColumnSizeSeed\n   * @since 8.4.0\n   * @param {string|undefined} seed Seed ID, unique name to categorize samples.\n   * @param {object} cellProperties Object containing the cell properties.\n   * @param {*} cellValue Value of the cell.\n   */\n  'modifyAutoColumnSizeSeed',\n];\n\n/**\n * Template warning message for removed hooks.\n *\n * @type {string}\n */\nconst REMOVED_MESSAGE = toSingleLine`The plugin hook \"[hookName]\" was removed in Handsontable [removedInVersion].\\x20\n  Please consult release notes https://github.com/handsontable/handsontable/releases/tag/[removedInVersion] to\\x20\n  learn about the migration path.`;\n\n/**\n * The list of the hooks which are removed from the API. The warning message is printed out in\n * the developer console when the hook is used.\n *\n * The Map key is represented by hook name and its value points to the Handsontable version\n * in which it was removed.\n *\n * @type {Map<string, string>}\n */\nconst REMOVED_HOOKS = new Map([\n  ['modifyRow', '8.0.0'],\n  ['modifyCol', '8.0.0'],\n  ['unmodifyRow', '8.0.0'],\n  ['unmodifyCol', '8.0.0'],\n  ['skipLengthCache', '8.0.0'],\n  ['hiddenColumn', '8.0.0'],\n  ['hiddenRow', '8.0.0'],\n]);\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * The list of the hooks which are deprecated. The warning message is printed out in\n * the developer console when the hook is used.\n *\n * The Map key is represented by hook name and its value keeps message which whould be\n * printed out when the hook is used.\n *\n * Usage:\n * ```js\n * ...\n * New Map([\n *   ['beforeColumnExpand', 'The plugin hook \"beforeColumnExpand\" is deprecated. Use \"beforeColumnExpand2\" instead.'],\n * ])\n * ...\n * ```\n *\n *\n * @type {Map<string, string>}\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nconst DEPRECATED_HOOKS = new Map([\n  []\n]);\n\nconst callbackOrder = new WeakMap();\n\nclass Hooks {\n  static getSingleton() {\n    return getGlobalSingleton();\n  }\n\n  /**\n   * @type {object}\n   */\n  globalBucket;\n\n  /**\n   *\n   */\n  constructor() {\n    this.globalBucket = this.createEmptyBucket();\n  }\n\n  /**\n   * Returns a new object with empty handlers related to every registered hook name.\n   *\n   * @returns {object} The empty bucket object.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.createEmptyBucket();\n   * // Results:\n   * {\n   * ...\n   * afterCreateCol: [],\n   * afterCreateRow: [],\n   * beforeInit: [],\n   * ...\n   * }\n   * ```\n   */\n  createEmptyBucket() {\n    const bucket = Object.create(null);\n\n    // eslint-disable-next-line no-return-assign\n    arrayEach(REGISTERED_HOOKS, (hook) => {\n      bucket[hook] = [];\n\n      this.initOrderMap(bucket, hook);\n    });\n\n    return bucket;\n  }\n\n  /**\n   * Get hook bucket based on the context of the object or if argument is `undefined`, get the global hook bucket.\n   *\n   * @param {object} [context=null] A Handsontable instance.\n   * @returns {object} Returns a global or Handsontable instance bucket.\n   */\n  getBucket(context = null) {\n    if (context) {\n      if (!context.pluginHookBucket) {\n        context.pluginHookBucket = this.createEmptyBucket();\n      }\n\n      return context.pluginHookBucket;\n    }\n\n    return this.globalBucket;\n  }\n\n  /**\n   * Adds a listener (globally or locally) to a specified hook name.\n   * If the `context` parameter is provided, the hook will be added only to the instance it references.\n   * Otherwise, the callback will be used everytime the hook fires on any Handsontable instance.\n   * You can provide an array of callback functions as the `callback` argument, this way they will all be fired\n   * once the hook is triggered.\n   *\n   * @see Core#addHook\n   * @param {string} key Hook name.\n   * @param {Function|Array} callback Callback function or an array of functions.\n   * @param {object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   * @returns {Hooks} Instance of Hooks.\n   *\n   * @example\n   * ```js\n   * // single callback, added locally\n   * Handsontable.hooks.add('beforeInit', myCallback, hotInstance);\n   *\n   * // single callback, added globally\n   * Handsontable.hooks.add('beforeInit', myCallback);\n   *\n   * // multiple callbacks, added locally\n   * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback], hotInstance);\n   *\n   * // multiple callbacks, added globally\n   * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback]);\n   * ```\n   */\n  add(key, callback, context = null, orderIndex) {\n    if (Array.isArray(callback)) {\n      arrayEach(callback, c => this.add(key, c, context));\n\n    } else {\n\n      if (REMOVED_HOOKS.has(key)) {\n        warn(substitute(REMOVED_MESSAGE, { hookName: key, removedInVersion: REMOVED_HOOKS.get(key) }));\n      }\n      if (DEPRECATED_HOOKS.has(key)) {\n        warn(DEPRECATED_HOOKS.get(key));\n      }\n\n      const bucket = this.getBucket(context);\n\n      if (typeof bucket[key] === 'undefined') {\n        this.register(key);\n        bucket[key] = [];\n        this.initOrderMap(bucket, key);\n      }\n      callback.skip = false;\n\n      if (bucket[key].indexOf(callback) === -1) {\n        // only add a hook if it has not already been added (adding the same hook twice is now silently ignored)\n        let foundInitialHook = false;\n\n        if (callback.initialHook) {\n          arrayEach(bucket[key], (cb, i) => {\n            if (cb.initialHook) {\n              bucket[key][i] = callback;\n              foundInitialHook = true;\n\n              return false;\n            }\n          });\n        }\n\n        if (!foundInitialHook) {\n          bucket[key].push(callback);\n        }\n      }\n\n      this.setCallbackOrderIndex(bucket, key, callback, orderIndex);\n      this.orderBucketByOrderIndex(bucket, key);\n    }\n\n    return this;\n  }\n\n  /**\n   * Adds a listener to a specified hook. After the hook runs this listener will be automatically removed from the bucket.\n   *\n   * @see Core#addHookOnce\n   * @param {string} key Hook/Event name.\n   * @param {Function|Array} callback Callback function.\n   * @param {object} [context=null] A Handsontable instance.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.once('beforeInit', myCallback, hotInstance);\n   * ```\n   */\n  once(key, callback, context = null, orderIndex) {\n    if (Array.isArray(callback)) {\n      arrayEach(callback, c => this.once(key, c, context));\n\n    } else {\n      callback.runOnce = true;\n      this.add(key, callback, context, orderIndex);\n    }\n  }\n\n  /**\n   * Removes a listener from a hook with a given name. If the `context` argument is provided, it removes a listener from a local hook assigned to the given Handsontable instance.\n   *\n   * @see Core#removeHook\n   * @param {string} key Hook/Event name.\n   * @param {Function} callback Callback function (needs the be the function that was previously added to the hook).\n   * @param {object} [context=null] Handsontable instance.\n   * @returns {boolean} Returns `true` if hook was removed, `false` otherwise.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.remove('beforeInit', myCallback);\n   * ```\n   */\n  remove(key, callback, context = null) {\n    const bucket = this.getBucket(context);\n\n    if (typeof bucket[key] !== 'undefined') {\n      if (bucket[key].indexOf(callback) >= 0) {\n        callback.skip = true;\n\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Checks whether there are any registered listeners for the provided hook name.\n   * If the `context` parameter is provided, it only checks for listeners assigned to the given Handsontable instance.\n   *\n   * @param {string} key Hook name.\n   * @param {object} [context=null] A Handsontable instance.\n   * @returns {boolean} `true` for success, `false` otherwise.\n   */\n  has(key, context = null) {\n    const bucket = this.getBucket(context);\n\n    return !!(bucket[key] !== undefined && bucket[key].length);\n  }\n\n  /**\n   * Runs all local and global callbacks assigned to the hook identified by the `key` parameter.\n   * It returns either a return value from the last called callback or the first parameter (`p1`) passed to the `run` function.\n   *\n   * @see Core#runHooks\n   * @param {object} context Handsontable instance.\n   * @param {string} key Hook/Event name.\n   * @param {*} [p1] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p2] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p3] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p4] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p5] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p6] Parameter to be passed as an argument to the callback function.\n   * @returns {*} Either a return value from the last called callback or `p1`.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.run(hot, 'beforeInit');\n   * ```\n   */\n  run(context, key, p1, p2, p3, p4, p5, p6) {\n    {\n      const globalHandlers = this.globalBucket[key];\n      const length = globalHandlers ? globalHandlers.length : 0;\n      let index = 0;\n\n      if (length) {\n        // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n        while (index < length) {\n          if (!globalHandlers[index] || globalHandlers[index].skip) {\n            index += 1;\n            /* eslint-disable no-continue */\n            continue;\n          }\n\n          const res = fastCall(globalHandlers[index], context, p1, p2, p3, p4, p5, p6);\n\n          if (res !== undefined) {\n            // eslint-disable-next-line no-param-reassign\n            p1 = res;\n          }\n          if (globalHandlers[index] && globalHandlers[index].runOnce) {\n            this.remove(key, globalHandlers[index]);\n          }\n\n          index += 1;\n        }\n      }\n    }\n    {\n      const localHandlers = this.getBucket(context)[key];\n      const length = localHandlers ? localHandlers.length : 0;\n      let index = 0;\n\n      if (length) {\n        // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n        while (index < length) {\n          if (!localHandlers[index] || localHandlers[index].skip) {\n            index += 1;\n            /* eslint-disable no-continue */\n            continue;\n          }\n\n          const res = fastCall(localHandlers[index], context, p1, p2, p3, p4, p5, p6);\n\n          if (res !== undefined) {\n            // eslint-disable-next-line no-param-reassign\n            p1 = res;\n          }\n          if (localHandlers[index] && localHandlers[index].runOnce) {\n            this.remove(key, localHandlers[index], context);\n          }\n\n          index += 1;\n        }\n      }\n    }\n\n    return p1;\n  }\n\n  /**\n   * Destroy all listeners connected to the context. If no context is provided, the global listeners will be destroyed.\n   *\n   * @param {object} [context=null] A Handsontable instance.\n   * @example\n   * ```js\n   * // destroy the global listeners\n   * Handsontable.hooks.destroy();\n   *\n   * // destroy the local listeners\n   * Handsontable.hooks.destroy(hotInstance);\n   * ```\n   */\n  destroy(context = null) {\n    // eslint-disable-next-line no-return-assign\n    objectEach(this.getBucket(context), (value, key, bucket) => (bucket[key].length = 0));\n  }\n\n  /**\n   * Registers a hook name (adds it to the list of the known hook names). Used by plugins.\n   * It is not necessary to call register, but if you use it, your plugin hook will be used returned by\n   * the `getRegistered` method. (which itself is used in the [demo](@/guides/getting-started/events-and-hooks/events-and-hooks.md)).\n   *\n   * @param {string} key The hook name.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.register('myHook');\n   * ```\n   */\n  register(key) {\n    if (!this.isRegistered(key)) {\n      REGISTERED_HOOKS.push(key);\n    }\n  }\n\n  /**\n   * Deregisters a hook name (removes it from the list of known hook names).\n   *\n   * @param {string} key The hook name.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.deregister('myHook');\n   * ```\n   */\n  deregister(key) {\n    if (this.isRegistered(key)) {\n      REGISTERED_HOOKS.splice(REGISTERED_HOOKS.indexOf(key), 1);\n    }\n  }\n\n  /**\n   * Returns a boolean value depending on if a hook by such name has been removed or deprecated.\n   *\n   * @param {string} hookName The hook name to check.\n   * @returns {boolean} Returns `true` if the provided hook name was marked as deprecated or\n   * removed from API, `false` otherwise.\n   * @example\n   * ```js\n   * Handsontable.hooks.isDeprecated('skipLengthCache');\n   *\n   * // Results:\n   * true\n   * ```\n   */\n  isDeprecated(hookName) {\n    return DEPRECATED_HOOKS.has(hookName) || REMOVED_HOOKS.has(hookName);\n  }\n\n  /**\n   * Returns a boolean depending on if a hook by such name has been registered.\n   *\n   * @param {string} hookName The hook name to check.\n   * @returns {boolean} `true` for success, `false` otherwise.\n   * @example\n   * ```js\n   * Handsontable.hooks.isRegistered('beforeInit');\n   *\n   * // Results:\n   * true\n   * ```\n   */\n  isRegistered(hookName) {\n    return REGISTERED_HOOKS.indexOf(hookName) >= 0;\n  }\n\n  /**\n   * Returns an array of registered hooks.\n   *\n   * @returns {Array} An array of registered hooks.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.getRegistered();\n   *\n   * // Results:\n   * [\n   * ...\n   *   'beforeInit',\n   *   'beforeRender',\n   *   'beforeSetRangeEnd',\n   *   'beforeDrawBorders',\n   *   'beforeChange',\n   * ...\n   * ]\n   * ```\n   */\n  getRegistered() {\n    return REGISTERED_HOOKS;\n  }\n\n  /**\n   * Sets the order index of the callback in the bucket object.\n   *\n   * @private\n   * @param {object} bucket The bucket object.\n   * @param {string} key Hook name.\n   * @param {Function} callback Callback function.\n   * @param {number|undefined} orderIndex Order index of the callback.\n   */\n  setCallbackOrderIndex(bucket, key, callback, orderIndex) {\n    const normalizedOrderIndex = Number.isInteger(orderIndex) ? orderIndex : 0;\n    const orderMap = this.getCallbackOrderMap(bucket, key);\n\n    orderMap.set(normalizedOrderIndex, [...(orderMap.get(normalizedOrderIndex) || []), callback]);\n  }\n\n  /**\n   * Reorders the callbacks in the bucket object by their order index.\n   *\n   * @private\n   * @param {objcet} bucket The bucket object.\n   * @param {string} key Hook name.\n   */\n  orderBucketByOrderIndex(bucket, key) {\n    const orderMap = this.getCallbackOrderMap(bucket, key);\n\n    if (\n      orderMap === undefined ||\n      orderMap.size === 0 ||\n      (orderMap.size === 1 && orderMap.has(0))\n    ) {\n      return;\n    }\n\n    bucket[key] = [...orderMap].sort((a, b) => a[0] - b[0]).flatMap(([, callbacks]) => callbacks);\n  }\n\n  /**\n   * Extends the bucket object with the order property.\n   *\n   * @private\n   * @param {object} bucket The bucket object.\n   * @param {string} hook The hook name.\n   */\n  initOrderMap(bucket, hook) {\n    if (!callbackOrder.has(bucket)) {\n      callbackOrder.set(bucket, []);\n    }\n\n    callbackOrder.get(bucket)[hook] = new Map();\n  }\n\n  /**\n   * Returns the order map for the provided hook.\n   *\n   * @private\n   * @param {object} bucket The bucket object.\n   * @param {string} hook The hook name.\n   * @returns {Map<number, Array<Function>>} Returns the order map for the provided hook.\n   */\n  getCallbackOrderMap(bucket, hook) {\n    return callbackOrder.get(bucket)[hook];\n  }\n}\n\nconst globalSingleton = new Hooks();\n\n/**\n * @returns {Hooks}\n */\nfunction getGlobalSingleton() {\n  return globalSingleton;\n}\n\nexport default Hooks;\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n  defineProperty(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n  activeXDocument = null;\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","/* eslint-disable no-console */\n/* eslint-disable no-restricted-globals */\n\n/**\n * \"In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened\n * for a particular tab.\".\n *\n * Source: https://stackoverflow.com/a/5473193.\n */\n\nimport { isDefined } from './mixed';\n\n/**\n * Logs message to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function log(...args) {\n  if (isDefined(console)) {\n    console.log(...args);\n  }\n}\n\n/**\n * Logs warn to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function warn(...args) {\n  if (isDefined(console)) {\n    console.warn(...args);\n  }\n}\n\n/**\n * Logs info to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function info(...args) {\n  if (isDefined(console)) {\n    console.info(...args);\n  }\n}\n\n/**\n * Logs error to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function error(...args) {\n  if (isDefined(console)) {\n    console.error(...args);\n  }\n}\n","export const collection = new Map();\n\n/**\n * @param {string} namespace The namespace for the storage.\n * @returns {object}\n */\nexport default function staticRegister(namespace = 'common') {\n  if (!collection.has(namespace)) {\n    collection.set(namespace, new Map());\n  }\n  const subCollection = collection.get(namespace);\n\n  /**\n   * Register an item to the collection. If the item under the same was exist earlier then this item will be replaced with new one.\n   *\n   * @param {string} name Identification of the item.\n   * @param {*} item Item to save in the collection.\n   */\n  function register(name, item) {\n    subCollection.set(name, item);\n  }\n\n  /**\n   * Retrieve the item from the collection.\n   *\n   * @param {string} name Identification of the item.\n   * @returns {*} Returns item which was saved in the collection.\n   */\n  function getItem(name) {\n    return subCollection.get(name);\n  }\n\n  /**\n   * Check if item under specified name is exists.\n   *\n   * @param {string} name Identification of the item.\n   * @returns {boolean} Returns `true` or `false` depends on if element exists in the collection.\n   */\n  function hasItem(name) {\n    return subCollection.has(name);\n  }\n\n  /**\n   * Retrieve list of names registered from the collection.\n   *\n   * @returns {Array} Returns an array of strings with all names under which objects are stored.\n   */\n  function getNames() {\n    return [...subCollection.keys()];\n  }\n\n  /**\n   * Retrieve all registered values from the collection.\n   *\n   * @returns {Array} Returns an array with all values stored in the collection.\n   */\n  function getValues() {\n    return [...subCollection.values()];\n  }\n\n  return {\n    register,\n    getItem,\n    hasItem,\n    getNames,\n    getValues,\n  };\n}\n","import { stopImmediatePropagation as _stopImmediatePropagation } from './helpers/dom/event';\n\n/**\n * Counter which tracks unregistered listeners (useful for detecting memory leaks).\n *\n * @type {number}\n */\nlet listenersCounter = 0;\n\n/**\n * Event DOM manager for internal use in Handsontable.\n *\n * @class EventManager\n */\nclass EventManager {\n  /**\n   * @type {object}\n   */\n  context;\n\n  /**\n   * @param {object} [context=null] An object to which event listeners will be stored.\n   * @private\n   */\n  constructor(context = null) {\n    this.context = context || this;\n\n    // TODO it modify external object. Rethink that.\n    if (!this.context.eventListeners) {\n      this.context.eventListeners = []; // TODO perf It would be more performant if every instance of EventManager tracked its own listeners only\n    }\n  }\n\n  /**\n   * Register specified listener (`eventName`) to the element.\n   *\n   * @param {Element} element Target element.\n   * @param {string} eventName Event name.\n   * @param {Function} callback Function which will be called after event occur.\n   * @param {AddEventListenerOptions|boolean} [options] Listener options if object or useCapture if boolean.\n   * @returns {Function} Returns function which you can easily call to remove that event.\n   */\n  addEventListener(element, eventName, callback, options = false) {\n    /**\n     * @private\n     * @param {Event} event The event object.\n     */\n    function callbackProxy(event) {\n      callback.call(this, extendEvent(event));\n    }\n\n    this.context.eventListeners.push({\n      element,\n      event: eventName,\n      callback,\n      callbackProxy,\n      options,\n      eventManager: this\n    });\n\n    element.addEventListener(eventName, callbackProxy, options);\n    listenersCounter += 1;\n\n    return () => {\n      this.removeEventListener(element, eventName, callback);\n    };\n  }\n\n  /**\n   * Remove the event listener previously registered.\n   *\n   * @param {Element} element Target element.\n   * @param {string} eventName Event name.\n   * @param {Function} callback Function to remove from the event target. It must be the same as during registration listener.\n   * @param {boolean} [onlyOwnEvents] Whether whould remove only events registered using this instance of EventManager.\n   */\n  removeEventListener(element, eventName, callback, onlyOwnEvents = false) {\n    let len = this.context.eventListeners.length;\n    let tmpEvent;\n\n    while (len) {\n      len -= 1;\n      tmpEvent = this.context.eventListeners[len];\n\n      if (tmpEvent.event === eventName && tmpEvent.element === element) {\n        if (callback && callback !== tmpEvent.callback) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n        // TODO rethink that, main bulk is that it needs multi instances to handle same context, but with a different scopes.\n        // TODO I suppose much more efficient way will be comparing string with scope id, or any similar approach.\n        if (onlyOwnEvents && tmpEvent.eventManager !== this) {\n          continue;\n        }\n        this.context.eventListeners.splice(len, 1);\n        tmpEvent.element.removeEventListener(tmpEvent.event, tmpEvent.callbackProxy, tmpEvent.options);\n        listenersCounter -= 1;\n      }\n    }\n  }\n\n  /**\n   * Clear all previously registered events.\n   *\n   * @private\n   * @since 0.15.0-beta3\n   * @param {boolean} [onlyOwnEvents] Whether whould remove only events registered using this instance of EventManager.\n   */\n  clearEvents(onlyOwnEvents = false) {\n    if (!this.context) {\n      return;\n    }\n    let len = this.context.eventListeners.length;\n\n    while (len) {\n      len -= 1;\n      const event = this.context.eventListeners[len];\n\n      if (onlyOwnEvents && event.eventManager !== this) {\n        continue;\n      }\n      this.context.eventListeners.splice(len, 1);\n      event.element.removeEventListener(event.event, event.callbackProxy, event.options);\n      listenersCounter -= 1;\n    }\n  }\n\n  /**\n   * Clear all previously registered events.\n   */\n  clear() {\n    this.clearEvents();\n  }\n\n  /**\n   * Destroy instance of EventManager, clearing all events of the context.\n   */\n  destroy() {\n    this.clearEvents();\n    this.context = null;\n  }\n\n  /**\n   * Destroy instance of EventManager, clearing only the own events.\n   */\n  destroyWithOwnEventsOnly() {\n    this.clearEvents(true);\n    this.context = null;\n  }\n\n  /**\n   * Trigger event at the specified target element.\n   *\n   * @param {Element} element Target element.\n   * @param {string} eventName Event name.\n   */\n  fireEvent(element, eventName) {\n    let rootDocument = element.document;\n    let rootWindow = element;\n\n    if (!rootDocument) {\n      rootDocument = element.ownerDocument ? element.ownerDocument : element;\n      rootWindow = rootDocument.defaultView;\n    }\n\n    const options = {\n      bubbles: true,\n      cancelable: (eventName !== 'mousemove'),\n      view: rootWindow,\n      detail: 0,\n      screenX: 0,\n      screenY: 0,\n      clientX: 1,\n      clientY: 1,\n      ctrlKey: false,\n      altKey: false,\n      shiftKey: false,\n      metaKey: false,\n      button: 0,\n      relatedTarget: undefined,\n    };\n    let event;\n\n    if (rootDocument.createEvent) {\n      event = rootDocument.createEvent('MouseEvents');\n      event.initMouseEvent(eventName, options.bubbles, options.cancelable,\n        options.view, options.detail,\n        options.screenX, options.screenY, options.clientX, options.clientY,\n        options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,\n        options.button, options.relatedTarget || rootDocument.body.parentNode);\n\n    } else {\n      event = rootDocument.createEventObject();\n    }\n\n    if (element.dispatchEvent) {\n      element.dispatchEvent(event);\n    } else {\n      element.fireEvent(`on${eventName}`, event);\n    }\n  }\n}\n\n/**\n * @private\n * @param {Event} event The event object.\n * @returns {Event}\n */\nfunction extendEvent(event) {\n  const nativeStopImmediatePropagation = event.stopImmediatePropagation;\n\n  event.stopImmediatePropagation = function() {\n    nativeStopImmediatePropagation.apply(this);\n    _stopImmediatePropagation(this);\n  };\n\n  return event;\n}\n\nexport default EventManager;\n\n/**\n * @private\n * @returns {number}\n */\nexport function getListenersCounter() {\n  return listenersCounter;\n}\n","import { warn } from './helpers/console';\nimport { isOutsideInput } from './helpers/dom/element';\nimport { debounce } from './helpers/function';\n\n/**\n * Possible focus modes.\n * - CELL - The browser's focus stays on the lastly selected cell element.\n * - MIXED - The browser's focus switches from the lastly selected cell element to the currently active editor's\n * `TEXTAREA` element after a delay defined in the manager.\n *\n * @type {{CELL: string, MIXED: string}}\n */\nconst FOCUS_MODES = Object.freeze({\n  CELL: 'cell',\n  MIXED: 'mixed',\n});\n\n/**\n * Manages the browser's focus in the table.\n */\nexport class FocusManager {\n  /**\n   * The Handsontable instance.\n   */\n  #hot;\n  /**\n   * The currently enabled focus mode.\n   * Can be either:\n   *\n   * - 'cell' - The browser's focus stays on the lastly selected cell element.\n   * - 'mixed' - The browser's focus switches from the lastly selected cell element to the currently active editor's\n   * `TEXTAREA` element after a delay defined in the manager.\n   *\n   * @type {'cell' | 'mixed'}\n   */\n  #focusMode;\n  /**\n   * The delay after which the focus switches from the lastly selected cell to the active editor's `TEXTAREA`\n   * element if the focus mode is set to 'mixed'.\n   *\n   * @type {number}\n   */\n  #refocusDelay = 1;\n  /**\n   * Getter function for the element to be used when refocusing the browser after a delay. If `null`, the active\n   * editor's `TEXTAREA` element will be used.\n   *\n   * @type {null|Function}\n   */\n  #refocusElementGetter = null;\n  /**\n   * Map of the debounced `select` functions.\n   *\n   * @type {Map<number, Function>}\n   */\n  #debouncedSelect = new Map();\n\n  constructor(hotInstance) {\n    const hotSettings = hotInstance.getSettings();\n\n    this.#hot = hotInstance;\n    this.#focusMode = hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL;\n\n    this.#hot.addHook('afterUpdateSettings', (...args) => this.#onUpdateSettings(...args));\n    this.#hot.addHook('afterSelection', (...args) => this.#focusCell(...args));\n    this.#hot.addHook('afterSelectionFocusSet', (...args) => this.#focusCell(...args));\n    this.#hot.addHook('afterSelectionEnd', (...args) => this.#focusEditorElement(...args));\n  }\n\n  /**\n   * Get the current focus mode.\n   *\n   * @returns {'cell' | 'mixed'}\n   */\n  getFocusMode() {\n    return this.#focusMode;\n  }\n\n  /**\n   * Set the focus mode.\n   *\n   * @param {'cell' | 'mixed'} focusMode The new focus mode.\n   */\n  setFocusMode(focusMode) {\n    if (Object.values(FOCUS_MODES).includes(focusMode)) {\n      this.#focusMode = focusMode;\n\n    } else {\n      warn(`\"${focusMode}\" is not a valid focus mode.`);\n    }\n  }\n\n  /**\n   * Get the delay after which the focus will change from the cell elements to the active editor's `TEXTAREA`\n   * element if the focus mode is set to 'mixed'.\n   *\n   * @returns {number} Delay in milliseconds.\n   */\n  getRefocusDelay() {\n    return this.#refocusDelay;\n  }\n\n  /**\n   * Set the delay after which the focus will change from the cell elements to the active editor's `TEXTAREA`\n   * element if the focus mode is set to 'mixed'.\n   *\n   * @param {number} delay Delay in milliseconds.\n   */\n  setRefocusDelay(delay) {\n    this.#refocusDelay = delay;\n  }\n\n  /**\n   * Set the function to be used as the \"refocus element\" getter. It should return a focusable HTML element.\n   *\n   * @param {Function} getRefocusElementFunction The refocus element getter.\n   */\n  setRefocusElementGetter(getRefocusElementFunction) {\n    this.#refocusElementGetter = getRefocusElementFunction;\n  }\n\n  /**\n   * Get the element to be used when refocusing the browser after a delay in case of the focus mode being 'mixed'.\n   *\n   * @returns {HTMLTextAreaElement|HTMLElement|undefined}\n   */\n  getRefocusElement() {\n    if (typeof this.#refocusElementGetter === 'function') {\n      return this.#refocusElementGetter();\n\n    } else {\n      return this.#hot.getActiveEditor()?.TEXTAREA;\n    }\n  }\n\n  /**\n   * Set the browser's focus to the highlighted cell of the last selection.\n   *\n   * @param {HTMLTableCellElement} [selectedCell] The highlighted cell/header element.\n   */\n  focusOnHighlightedCell(selectedCell) {\n    const focusElement = (element) => {\n      const currentHighlightCoords = this.#hot.getSelectedRangeLast()?.highlight;\n\n      if (!currentHighlightCoords) {\n        return;\n      }\n\n      let elementToBeFocused = this.#hot.runHooks(\n        'modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, element\n      );\n\n      if (!(elementToBeFocused instanceof HTMLElement)) {\n        elementToBeFocused = element;\n      }\n\n      if (\n        elementToBeFocused &&\n        !this.#hot.getActiveEditor()?.isOpened()\n      ) {\n        elementToBeFocused.focus({\n          preventScroll: true\n        });\n      }\n    };\n\n    if (selectedCell) {\n      focusElement(selectedCell);\n    } else {\n      this.#getSelectedCell(element => focusElement(element));\n    }\n  }\n\n  /**\n   * Set the focus to the active editor's `TEXTAREA` element after the provided delay. If no delay is provided, it\n   * will be taken from the manager's configuration.\n   *\n   * @param {number} [delay] Delay in milliseconds.\n   */\n  refocusToEditorTextarea(delay = this.#refocusDelay) {\n    const refocusElement = this.getRefocusElement();\n\n    // Re-focus on the editor's `TEXTAREA` element (or a predefined element) if the `imeFastEdit` option is enabled.\n    if (\n      this.#hot.getSettings().imeFastEdit &&\n      !this.#hot.getActiveEditor()?.isOpened() &&\n      !!refocusElement\n    ) {\n      if (!this.#debouncedSelect.has(delay)) {\n        this.#debouncedSelect.set(delay, debounce(() => {\n          refocusElement.select();\n        }, delay));\n      }\n\n      this.#debouncedSelect.get(delay)();\n    }\n  }\n\n  /**\n   * Get and return the currently selected and highlighted cell/header element.\n   *\n   * @param {Function} callback Callback function to be called after the cell element is retrieved.\n   */\n  #getSelectedCell(callback) {\n    const highlight = this.#hot.getSelectedRangeLast()?.highlight;\n\n    if (!highlight || !this.#hot.selection.isCellVisible(highlight)) {\n      callback(null);\n\n      return;\n    }\n\n    const cell = this.#hot.getCell(highlight.row, highlight.col, true);\n\n    if (cell === null) {\n      this.#hot.addHookOnce('afterScroll', () => {\n        callback(this.#hot.getCell(highlight.row, highlight.col, true));\n      });\n\n    } else {\n      callback(cell);\n    }\n  }\n\n  /**\n   * Manage the browser's focus after each cell selection change.\n   */\n  #focusCell() {\n    this.#getSelectedCell((selectedCell) => {\n      const { activeElement } = this.#hot.rootDocument;\n\n      // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)\n      // and resets the `document.activeElement` property. The blurring should happen only when the\n      // previously selected input element has not belonged to the Handsontable editor. If blurring is\n      // triggered for all elements, there is a problem with the disappearing IME editor (#9672).\n      if (activeElement && isOutsideInput(activeElement)) {\n        activeElement.blur();\n      }\n\n      this.focusOnHighlightedCell(selectedCell);\n    });\n  }\n\n  /**\n   * Manage the browser's focus after cell selection end.\n   */\n  #focusEditorElement() {\n    this.#getSelectedCell((selectedCell) => {\n      if (\n        this.getFocusMode() === FOCUS_MODES.MIXED &&\n        selectedCell.nodeName === 'TD'\n      ) {\n        this.refocusToEditorTextarea();\n      }\n    });\n  }\n\n  /**\n   * Update the manager configuration after calling `updateSettings`.\n   *\n   * @param {object} newSettings The new settings passed to the `updateSettings` method.\n   */\n  #onUpdateSettings(newSettings) {\n    if (typeof newSettings.imeFastEdit === 'boolean') {\n      this.setFocusMode(newSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);\n    }\n  }\n}\n","import { isEmpty } from './../helpers/mixed';\n\nconst ESCAPED_HTML_CHARS = {\n  '&nbsp;': '\\x20',\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n};\nconst regEscapedChars = new RegExp(Object.keys(ESCAPED_HTML_CHARS).map(key => `(${key})`).join('|'), 'gi');\n\n/**\n * Verifies if node is an HTMLTable element.\n *\n * @param {Node} element Node to verify if it's an HTMLTable.\n * @returns {boolean}\n */\nfunction isHTMLTable(element) {\n  return (element && element.nodeName || '') === 'TABLE';\n}\n\n/**\n * Converts Handsontable into HTMLTableElement.\n *\n * @param {Core} instance The Handsontable instance.\n * @returns {string} OuterHTML of the HTMLTableElement.\n */\nexport function instanceToHTML(instance) {\n  const hasColumnHeaders = instance.hasColHeaders();\n  const hasRowHeaders = instance.hasRowHeaders();\n  const coords = [\n    hasColumnHeaders ? -1 : 0,\n    hasRowHeaders ? -1 : 0,\n    instance.countRows() - 1,\n    instance.countCols() - 1,\n  ];\n  const data = instance.getData(...coords);\n  const countRows = data.length;\n  const countCols = countRows > 0 ? data[0].length : 0;\n  const TABLE = ['<table>', '</table>'];\n  const THEAD = hasColumnHeaders ? ['<thead>', '</thead>'] : [];\n  const TBODY = ['<tbody>', '</tbody>'];\n  const rowModifier = hasRowHeaders ? 1 : 0;\n  const columnModifier = hasColumnHeaders ? 1 : 0;\n\n  for (let row = 0; row < countRows; row += 1) {\n    const isColumnHeadersRow = hasColumnHeaders && row === 0;\n    const CELLS = [];\n\n    for (let column = 0; column < countCols; column += 1) {\n      const isRowHeadersColumn = !isColumnHeadersRow && hasRowHeaders && column === 0;\n      let cell = '';\n\n      if (isColumnHeadersRow) {\n        cell = `<th>${instance.getColHeader(column - rowModifier)}</th>`;\n\n      } else if (isRowHeadersColumn) {\n        cell = `<th>${instance.getRowHeader(row - columnModifier)}</th>`;\n\n      } else {\n        const cellData = data[row][column];\n        const { hidden, rowspan, colspan } = instance.getCellMeta(row - columnModifier, column - rowModifier);\n\n        if (!hidden) {\n          const attrs = [];\n\n          if (rowspan) {\n            attrs.push(`rowspan=\"${rowspan}\"`);\n          }\n          if (colspan) {\n            attrs.push(`colspan=\"${colspan}\"`);\n          }\n          if (isEmpty(cellData)) {\n            cell = `<td ${attrs.join(' ')}></td>`;\n          } else {\n            const value = cellData.toString()\n              .replace('<', '&lt;')\n              .replace('>', '&gt;')\n              .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n')\n              .replace(/\\x20/gi, '&nbsp;')\n              .replace(/\\t/gi, '&#9;');\n\n            cell = `<td ${attrs.join(' ')}>${value}</td>`;\n          }\n        }\n      }\n\n      CELLS.push(cell);\n    }\n\n    const TR = ['<tr>', ...CELLS, '</tr>'].join('');\n\n    if (isColumnHeadersRow) {\n      THEAD.splice(1, 0, TR);\n    } else {\n      TBODY.splice(-1, 0, TR);\n    }\n  }\n\n  TABLE.splice(1, 0, THEAD.join(''), TBODY.join(''));\n\n  return TABLE.join('');\n}\n\n/**\n * Converts 2D array into HTMLTableElement.\n *\n * @param {Array} input Input array which will be converted to HTMLTable.\n * @returns {string} OuterHTML of the HTMLTableElement.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function _dataToHTML(input) {\n  const inputLen = input.length;\n  const result = ['<table>'];\n\n  for (let row = 0; row < inputLen; row += 1) {\n    const rowData = input[row];\n    const columnsLen = rowData.length;\n    const columnsResult = [];\n\n    if (row === 0) {\n      result.push('<tbody>');\n    }\n\n    for (let column = 0; column < columnsLen; column += 1) {\n      const cellData = rowData[column];\n      const parsedCellData = isEmpty(cellData) ?\n        '' :\n        cellData.toString()\n          .replace(/&/g, '&amp;')\n          .replace(/</g, '&lt;')\n          .replace(/>/g, '&gt;')\n          .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n')\n          .replace(/\\x20{2,}/gi, (substring) => {\n            // The way how Excel serializes data with at least two spaces.\n            return `<span style=\"mso-spacerun: yes\">${'&nbsp;'.repeat(substring.length - 1)} </span>`;\n          })\n          .replace(/\\t/gi, '&#9;');\n\n      columnsResult.push(`<td>${parsedCellData}</td>`);\n    }\n\n    result.push('<tr>', ...columnsResult, '</tr>');\n\n    if (row + 1 === inputLen) {\n      result.push('</tbody>');\n    }\n  }\n\n  result.push('</table>');\n\n  return result.join('');\n}\n\n/**\n * Converts HTMLTable or string into Handsontable configuration object.\n *\n * @param {Element|string} element Node element which should contain `<table>...</table>`.\n * @param {Document} [rootDocument] The document window owner.\n * @returns {object} Return configuration object. Contains keys as DefaultSettings.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function htmlToGridSettings(element, rootDocument = document) {\n  const settingsObj = {};\n  const fragment = rootDocument.createDocumentFragment();\n  const tempElem = rootDocument.createElement('div');\n\n  fragment.appendChild(tempElem);\n\n  let checkElement = element;\n\n  if (typeof checkElement === 'string') {\n    const escapedAdjacentHTML = checkElement.replace(/<td\\b[^>]*?>([\\s\\S]*?)<\\/\\s*td>/g, (cellFragment) => {\n      const openingTag = cellFragment.match(/<td\\b[^>]*?>/g)[0];\n      const paragraphRegexp = /<p.*?>/g;\n      const cellValue = cellFragment\n        .substring(openingTag.length, cellFragment.lastIndexOf('<'))\n        .trim() // Removing whitespaces from the start and the end of HTML fragment\n        .replaceAll(/\\n\\s+/g, ' ') // HTML tags may be split using multiple new lines and whitespaces\n        .replaceAll(paragraphRegexp, '\\n') // Only paragraphs should split text using new line characters\n        .replace('\\n', '') // First paragraph shouldn't start with new line characters\n        .replaceAll(/<\\/(.*)>\\s+$/mg, '</$1>') // HTML tags may end with whitespace.\n        .replace(/(<(?!br)([^>]+)>)/gi, '') // Removing HTML tags\n        .replaceAll(/^&nbsp;$/mg, ''); // Removing single &nbsp; characters separating new lines\n      const closingTag = '</td>';\n\n      return `${openingTag}${cellValue}${closingTag}`;\n    });\n\n    tempElem.insertAdjacentHTML('afterbegin', `${escapedAdjacentHTML}`);\n    checkElement = tempElem.querySelector('table');\n  }\n\n  if (!checkElement || !isHTMLTable(checkElement)) {\n    return;\n  }\n\n  const generator = tempElem.querySelector('meta[name$=\"enerator\"]');\n  const hasRowHeaders = checkElement.querySelector('tbody th') !== null;\n  const trElement = checkElement.querySelector('tr');\n  const countCols = !trElement ? 0 : Array.from(trElement.cells)\n    .reduce((cols, cell) => cols + cell.colSpan, 0) - (hasRowHeaders ? 1 : 0);\n  const fixedRowsBottom = checkElement.tFoot && Array.from(checkElement.tFoot.rows) || [];\n  const fixedRowsTop = [];\n  let hasColHeaders = false;\n  let thRowsLen = 0;\n  let countRows = 0;\n\n  if (checkElement.tHead) {\n    const thRows = Array.from(checkElement.tHead.rows).filter((tr) => {\n      const isDataRow = tr.querySelector('td') !== null;\n\n      if (isDataRow) {\n        fixedRowsTop.push(tr);\n      }\n\n      return !isDataRow;\n    });\n\n    thRowsLen = thRows.length;\n    hasColHeaders = thRowsLen > 0;\n\n    if (thRowsLen > 1) {\n      settingsObj.nestedHeaders = Array.from(thRows).reduce((rows, row) => {\n        const headersRow = Array.from(row.cells).reduce((headers, header, currentIndex) => {\n          if (hasRowHeaders && currentIndex === 0) {\n            return headers;\n          }\n\n          const {\n            colSpan: colspan,\n            innerHTML,\n          } = header;\n          const nextHeader = colspan > 1 ? { label: innerHTML, colspan } : innerHTML;\n\n          headers.push(nextHeader);\n\n          return headers;\n        }, []);\n\n        rows.push(headersRow);\n\n        return rows;\n      }, []);\n\n    } else if (hasColHeaders) {\n      settingsObj.colHeaders = Array.from(thRows[0].children).reduce((headers, header, index) => {\n        if (hasRowHeaders && index === 0) {\n          return headers;\n        }\n\n        headers.push(header.innerHTML);\n\n        return headers;\n      }, []);\n    }\n  }\n\n  if (fixedRowsTop.length) {\n    settingsObj.fixedRowsTop = fixedRowsTop.length;\n  }\n  if (fixedRowsBottom.length) {\n    settingsObj.fixedRowsBottom = fixedRowsBottom.length;\n  }\n\n  const dataRows = [\n    ...fixedRowsTop,\n    ...Array.from(checkElement.tBodies).reduce((sections, section) => {\n      sections.push(...Array.from(section.rows));\n\n      return sections;\n    }, []),\n    ...fixedRowsBottom];\n\n  countRows = dataRows.length;\n\n  const dataArr = new Array(countRows);\n\n  for (let r = 0; r < countRows; r++) {\n    dataArr[r] = new Array(countCols);\n  }\n\n  const mergeCells = [];\n  const rowHeaders = [];\n\n  for (let row = 0; row < countRows; row++) {\n    const tr = dataRows[row];\n    const cells = Array.from(tr.cells);\n    const cellsLen = cells.length;\n\n    for (let cellId = 0; cellId < cellsLen; cellId++) {\n      const cell = cells[cellId];\n      const {\n        nodeName,\n        innerHTML,\n        rowSpan: rowspan,\n        colSpan: colspan,\n      } = cell;\n      const col = dataArr[row].findIndex(value => value === undefined);\n\n      if (nodeName === 'TD') {\n        if (rowspan > 1 || colspan > 1) {\n          for (let rstart = row; rstart < row + rowspan; rstart++) {\n            if (rstart < countRows) {\n              for (let cstart = col; cstart < col + colspan; cstart++) {\n                dataArr[rstart][cstart] = null;\n              }\n            }\n          }\n\n          const styleAttr = cell.getAttribute('style');\n          const ignoreMerge = styleAttr && styleAttr.includes('mso-ignore:colspan');\n\n          if (!ignoreMerge) {\n            mergeCells.push({ col, row, rowspan, colspan });\n          }\n        }\n\n        let cellValue = '';\n\n        if (generator && /excel/gi.test(generator.content)) {\n          cellValue = innerHTML.replace(/[\\r\\n][\\x20]{0,2}/g, '\\x20')\n            .replace(/<br(\\s*|\\/)>[\\r\\n]?[\\x20]{0,3}/gim, '\\r\\n');\n\n        } else {\n          cellValue = innerHTML.replace(/<br(\\s*|\\/)>[\\r\\n]?/gim, '\\r\\n');\n        }\n\n        dataArr[row][col] = cellValue.replace(regEscapedChars, match => ESCAPED_HTML_CHARS[match]);\n\n      } else {\n        rowHeaders.push(innerHTML);\n      }\n    }\n  }\n\n  if (mergeCells.length) {\n    settingsObj.mergeCells = mergeCells;\n  }\n  if (rowHeaders.length) {\n    settingsObj.rowHeaders = rowHeaders;\n  }\n\n  if (dataArr.length) {\n    settingsObj.data = dataArr;\n  }\n\n  return settingsObj;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getSubstitution = require('../internals/get-substitution');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar $TypeError = TypeError;\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\n\n// `String.prototype.replaceAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\n$({ target: 'String', proto: true }, {\n  replaceAll: function replaceAll(searchValue, replaceValue) {\n    var O = requireObjectCoercible(this);\n    var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, position, replacement;\n    var endOfLastMatch = 0;\n    var result = '';\n    if (!isNullOrUndefined(searchValue)) {\n      IS_REG_EXP = isRegExp(searchValue);\n      if (IS_REG_EXP) {\n        flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));\n        if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes');\n      }\n      replacer = getMethod(searchValue, REPLACE);\n      if (replacer) return call(replacer, searchValue, O, replaceValue);\n      if (IS_PURE && IS_REG_EXP) return replace(toString(O), searchValue, replaceValue);\n    }\n    string = toString(O);\n    searchString = toString(searchValue);\n    functionalReplace = isCallable(replaceValue);\n    if (!functionalReplace) replaceValue = toString(replaceValue);\n    searchLength = searchString.length;\n    advanceBy = max(1, searchLength);\n    position = indexOf(string, searchString);\n    while (position !== -1) {\n      replacement = functionalReplace\n        ? toString(replaceValue(searchString, position, string))\n        : getSubstitution(searchString, string, position, [], undefined, replaceValue);\n      result += stringSlice(string, endOfLastMatch, position) + replacement;\n      endOfLastMatch = position + searchLength;\n      position = position + advanceBy > string.length ? -1 : indexOf(string, searchString, position + advanceBy);\n    }\n    if (endOfLastMatch < string.length) {\n      result += stringSlice(string, endOfLastMatch);\n    }\n    return result;\n  }\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n  var flags = R.flags;\n  return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n    ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.hasIndices) result += 'd';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.unicodeSets) result += 'v';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (charAt(ch, 0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return stringSlice(str, 0, position);\n      case \"'\": return stringSlice(str, tailPos);\n      case '<':\n        capture = namedCaptures[stringSlice(ch, 1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n","/**\n * Utility to register plugins and common namespace for keeping the reference to all plugins classes.\n */\nimport { toUpperCaseFirst } from '../helpers/string';\nimport { createPriorityMap } from '../utils/dataStructures/priorityMap';\nimport { createUniqueMap } from '../utils/dataStructures/uniqueMap';\nimport { createUniqueSet } from '../utils/dataStructures/uniqueSet';\n\nconst ERROR_PLUGIN_REGISTERED = pluginName => `There is already registered \"${pluginName}\" plugin.`;\nconst ERROR_PRIORITY_REGISTERED = priority => `There is already registered plugin on priority \"${priority}\".`;\nconst ERROR_PRIORITY_NAN = priority => `The priority \"${priority}\" is not a number.`;\n\n/**\n * Stores plugins' names' queue with their priorities.\n */\nconst priorityPluginsQueue = createPriorityMap({\n  errorPriorityExists: ERROR_PRIORITY_REGISTERED,\n  errorPriorityNaN: ERROR_PRIORITY_NAN,\n});\n/**\n * Stores plugins names' queue by registration order.\n */\nconst uniquePluginsQueue = createUniqueSet({\n  errorItemExists: ERROR_PLUGIN_REGISTERED,\n});\n/**\n * Stores plugins references between their name and class.\n */\nconst uniquePluginsList = createUniqueMap({\n  errorIdExists: ERROR_PLUGIN_REGISTERED,\n});\n\n/**\n * Gets registered plugins' names in the following order:\n * 1) Plugins registered with a defined priority attribute, in the ascending order of priority.\n * 2) Plugins registered without a defined priority attribute, in the registration order.\n *\n * @returns {string[]}\n */\nexport function getPluginsNames() {\n  return [\n    ...priorityPluginsQueue.getItems(),\n    ...uniquePluginsQueue.getItems(),\n  ];\n}\n\n/**\n * Gets registered plugin's class based on the given name.\n *\n * @param {string} pluginName Plugin's name.\n * @returns {BasePlugin}\n */\nexport function getPlugin(pluginName) {\n  const unifiedPluginName = toUpperCaseFirst(pluginName);\n\n  return uniquePluginsList.getItem(unifiedPluginName);\n}\n\n/**\n * Checks if the plugin under the name is already registered.\n *\n * @param {string} pluginName Plugin's name.\n * @returns {boolean}\n */\nexport function hasPlugin(pluginName) {\n  /* eslint-disable no-unneeded-ternary */\n  return getPlugin(pluginName) ? true : false;\n}\n\n/**\n * Registers plugin under the given name only once.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n */\nexport function registerPlugin(pluginName, pluginClass, priority) {\n  [pluginName, pluginClass, priority] = unifyPluginArguments(pluginName, pluginClass, priority);\n\n  if (getPlugin(pluginName) === undefined) {\n    _registerPlugin(pluginName, pluginClass, priority);\n  }\n}\n\n/**\n * Registers plugin under the given name.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n */\nfunction _registerPlugin(pluginName, pluginClass, priority) {\n  const unifiedPluginName = toUpperCaseFirst(pluginName);\n\n  if (uniquePluginsList.hasItem(unifiedPluginName)) {\n    throw new Error(ERROR_PLUGIN_REGISTERED(unifiedPluginName));\n  }\n\n  if (priority === undefined) {\n    uniquePluginsQueue.addItem(unifiedPluginName);\n  } else {\n    priorityPluginsQueue.addItem(priority, unifiedPluginName);\n  }\n\n  uniquePluginsList.addItem(unifiedPluginName, pluginClass);\n}\n\n/**\n * Unifies arguments to register the plugin.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n * @returns {Array}\n */\nfunction unifyPluginArguments(pluginName, pluginClass, priority) {\n  if (typeof pluginName === 'function') {\n    pluginClass = pluginName;\n    pluginName = pluginClass.PLUGIN_KEY;\n    priority = pluginClass.PLUGIN_PRIORITY;\n  }\n\n  return [pluginName, pluginClass, priority];\n}\n","import { isNumeric } from '../../helpers/number';\nimport { isFunction } from '../../helpers/function';\n\nexport const ASC = 'asc';\nexport const DESC = 'desc';\nconst ORDER_MAP = new Map([\n  [ASC, [-1, 1]],\n  [DESC, [1, -1]],\n]);\nconst DEFAULT_ERROR_PRIORITY_EXISTS = priority => `The priority '${priority}' is already declared in a map.`;\nconst DEFAULT_ERROR_PRIORITY_NAN = priority => `The priority '${priority}' is not a number.`;\n\n/**\n * @typedef {object} PriorityMap\n * @property {Function} addItem Adds items to the priority map.\n * @property {Function} getItems Gets items from the passed map in a ASC or DESC order of priorities.\n */\n/**\n * Creates a new priority map.\n *\n * @param {object} config The config for priority map.\n * @param {Function} config.errorPriorityExists The function to generate a custom error message if priority is already taken.\n * @param {Function} config.errorPriorityNaN The function to generate a custom error message if priority is not a number.\n * @returns {PriorityMap}\n */\nexport function createPriorityMap({ errorPriorityExists, errorPriorityNaN } = {}) {\n  const priorityMap = new Map();\n\n  errorPriorityExists = isFunction(errorPriorityExists) ? errorPriorityExists : DEFAULT_ERROR_PRIORITY_EXISTS;\n  errorPriorityNaN = isFunction(errorPriorityNaN) ? errorPriorityNaN : DEFAULT_ERROR_PRIORITY_NAN;\n\n  /**\n   * Adds items to priority map. Throws an error if `priority` is not a number or if is already added.\n   *\n   * @param {number} priority The priority for adding item.\n   * @param {*} item The adding item.\n   */\n  function addItem(priority, item) {\n    if (!isNumeric(priority)) {\n      throw new Error(errorPriorityNaN(priority));\n    }\n    if (priorityMap.has(priority)) {\n      throw new Error(errorPriorityExists(priority));\n    }\n\n    priorityMap.set(priority, item);\n  }\n\n  /**\n   * Gets items from the passed map in a ASC or DESC order of priorities.\n   *\n   * @param {string} [order] The order for getting items. ASC is an default.\n   * @returns {*}\n   */\n  function getItems(order = ASC) {\n    const [left, right] = ORDER_MAP.get(order) || ORDER_MAP.get(ASC);\n\n    return [...priorityMap]\n      // we want to be sure we sort over a priority key\n      // if we are sure we can remove custom compare function\n      // then we should replace next line with a default `.sort()`\n      .sort((a, b) => (a[0] < b[0] ? left : right))\n      .map(item => item[1]);\n  }\n\n  return {\n    addItem,\n    getItems,\n  };\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * Checks if the passed value is numeric one. For example these values (passed as string or number)\n * are considered as numeric values:\n *  - 0.001\n *  - .001\n *  - 10000\n *  - 1e+26\n *  - 22e-26\n *  - .45e+26\n *  - 0xabcdef (hex)\n *  - 0x1 (hex)\n *\n * these values are not considered as numeric:\n *  - - 1000\n *  - 100 000\n *\n * @param {*} value The value to check.\n * @param {string[]} additionalDelimiters An additional delimiters to be used while checking the numeric value.\n * @returns {boolean}\n */\nexport function isNumeric(value, additionalDelimiters = []) {\n  const type = typeof value;\n\n  if (type === 'number') {\n    return !isNaN(value) && isFinite(value);\n\n  } else if (type === 'string') {\n    if (value.length === 0) {\n      return false;\n\n    } else if (value.length === 1) {\n      return /\\d/.test(value);\n    }\n\n    const delimiter = Array.from(new Set(['.', ...additionalDelimiters]))\n      .map(d => `\\\\${d}`)\n      .join('|');\n\n    return new RegExp(`^[+-]?(((${delimiter})?\\\\d+((${delimiter})\\\\d+)?(e[+-]?\\\\d+)?)|(0x[a-f\\\\d]+))$`, 'i')\n      .test(value.trim());\n\n  } else if (type === 'object') {\n    return !!value && typeof value.valueOf() === 'number' && !(value instanceof Date);\n  }\n\n  return false;\n}\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\n/**\n * Checks if the passed value is numeric-like value. The helper returns `true` for the same\n * values as for the `isNumeric` function plus `true` for numbers delimited by comma.\n *\n * @param {*} value The value to check.\n * @returns {boolean}\n */\nexport function isNumericLike(value) {\n  return isNumeric(value, [',']);\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges.\n *\n * @param {number} rangeFrom The number from start iterate.\n * @param {number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nexport function rangeEach(rangeFrom, rangeTo, iteratee) {\n  let index = -1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = rangeFrom;\n  } else {\n    index = rangeFrom - 1;\n  }\n\n  /* eslint-disable-next-line no-plusplus */\n  while (++index <= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges iterable in reverse order.\n *\n * @param {number} rangeFrom The number from start iterate.\n * @param {number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nexport function rangeEachReverse(rangeFrom, rangeTo, iteratee) {\n  let index = rangeFrom + 1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = 0;\n  }\n  /* eslint-disable-next-line no-plusplus */\n  while (--index >= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n\n/**\n * Calculate value from percent.\n *\n * @param {number} value Base value from percent will be calculated.\n * @param {string|number} percent Can be number or string (eq. `'33%'`).\n * @returns {number}\n */\nexport function valueAccordingPercent(value, percent) {\n  percent = parseInt(percent.toString().replace('%', ''), 10);\n  percent = isNaN(percent) ? 0 : percent;\n\n  return parseInt(value * percent / 100, 10);\n}\n\n/**\n * Clamps the value between min and max.\n *\n * @param {number} value The base number value.\n * @param {number} minValue The max number value.\n * @param {number} maxValue The min number value.\n * @returns {number}\n */\nexport function clamp(value, minValue, maxValue) {\n  if (Math.min(value, minValue) === value) {\n    return minValue;\n\n  } else if (Math.max(value, maxValue) === value) {\n    return maxValue;\n  }\n\n  return value;\n}\n","import { isFunction } from '../../helpers/function';\n\nconst DEFAULT_ERROR_ID_EXISTS = id => `The id '${id}' is already declared in a map.`;\n\n/**\n * @typedef {object} UniqueMap\n * @property {Function} addItem Adds a new item to the unique map.\n * @property {Function} clear Clears the map.\n * @property {Function} getId Returns ID for the passed item.\n * @property {Function} getItem Gets item from the passed ID.\n * @property {Function} getItems Gets all items from the map.\n * @property {Function} hasItem Verifies if the passed ID exists in a map.\n * @property {Function} removeItem Removes item from the passed id if exists.\n */\n/**\n * Creates a new unique map.\n *\n * @param {object} config The config for priority queue.\n * @param {Function} config.errorIdExists The function to generate custom message if ID is already taken.\n * @returns {UniqueMap}\n */\nexport function createUniqueMap({ errorIdExists } = {}) {\n  const uniqueMap = new Map();\n\n  errorIdExists = isFunction(errorIdExists) ? errorIdExists : DEFAULT_ERROR_ID_EXISTS;\n\n  /**\n   * Adds a new item to the unique map. Throws error if `id` is already added.\n   *\n   * @param {*} id The ID of the adding item.\n   * @param {*} item The adding item.\n   */\n  function addItem(id, item) {\n    if (hasItem(id)) {\n      throw new Error(errorIdExists(id));\n    }\n\n    uniqueMap.set(id, item);\n  }\n\n  /**\n   * Removes item from the passed id if exists.\n   *\n   * @param {*} id The ID to remove.\n   * @returns {boolean}\n   */\n  function removeItem(id) {\n    return uniqueMap.delete(id);\n  }\n\n  /**\n   * Clears the map.\n   */\n  function clear() {\n    uniqueMap.clear();\n  }\n\n  /**\n   * Returns ID for the passed item.\n   *\n   * @param {*} item The item of the getting ID.\n   * @returns {*}\n   */\n  function getId(item) {\n    const [itemId] = getItems().find(([id, element]) => {\n      if (item === element) {\n        return id;\n      }\n\n      return false;\n    }) || [null];\n\n    return itemId;\n  }\n\n  /**\n   * Returns item from the passed ID.\n   *\n   * @param {*} id The ID of the getting item.\n   * @returns {*}\n   */\n  function getItem(id) {\n    return uniqueMap.get(id);\n  }\n\n  /**\n   * Gets all items from the map.\n   *\n   * @returns {Array}\n   */\n  function getItems() {\n    return [...uniqueMap];\n  }\n\n  /**\n   * Verifies if the passed ID exists in a map.\n   *\n   * @param {*} id The ID to check if registered.\n   * @returns {boolean}\n   */\n  function hasItem(id) {\n    return uniqueMap.has(id);\n  }\n\n  return {\n    addItem,\n    clear,\n    getId,\n    getItem,\n    getItems,\n    hasItem,\n    removeItem,\n  };\n}\n","import { isFunction } from '../../helpers/function';\n\nconst DEFAULT_ERROR_ITEM_EXISTS = item => `'${item}' value is already declared in a unique set.`;\n\n/**\n * @typedef {object} UniqueSet\n * @property {Function} addItem Adds items to the priority set.\n * @property {Function} getItems Gets items from the set in order of addition.\n */\n/**\n * Creates a new unique set.\n *\n * @param {object} config The config for priority set.\n * @param {Function} config.errorItemExists The function to generate custom error message if item is already in the set.\n * @returns {UniqueSet}\n */\nexport function createUniqueSet({ errorItemExists } = {}) {\n  const uniqueSet = new Set();\n\n  errorItemExists = isFunction(errorItemExists) ? errorItemExists : DEFAULT_ERROR_ITEM_EXISTS;\n\n  /**\n   * Adds items to the unique set. Throws an error if `item` is already added.\n   *\n   * @param {*} item The adding item.\n   */\n  function addItem(item) {\n    if (uniqueSet.has(item)) {\n      throw new Error(errorItemExists(item));\n    }\n\n    uniqueSet.add(item);\n  }\n\n  /**\n   * Gets items from the set in order of addition.\n   *\n   * @returns {*}\n   */\n  function getItems() {\n    return [...uniqueSet];\n  }\n\n  /**\n   * Clears the unique set.\n   */\n  function clear() {\n    uniqueSet.clear();\n  }\n\n  return {\n    addItem,\n    clear,\n    getItems,\n  };\n}\n","import staticRegister from '../utils/staticRegister';\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('renderers');\n\n/**\n * Retrieve renderer function.\n *\n * @param {string} name Renderer identification.\n * @returns {Function} Returns renderer function.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error(`No registered renderer found under \"${name}\" name`);\n  }\n\n  return getItem(name);\n}\n\n/**\n * Register renderer under its alias.\n *\n * @param {string|Function} name Renderer's alias or renderer function with its descriptor.\n * @param {Function} [renderer] Renderer function.\n */\nfunction _register(name, renderer) {\n  if (typeof name !== 'string') {\n    renderer = name;\n    name = renderer.RENDERER_TYPE;\n  }\n\n  register(name, renderer);\n}\n\nexport {\n  _register as registerRenderer,\n  _getItem as getRenderer,\n  hasItem as hasRenderer,\n  getNames as getRegisteredRendererNames,\n  getValues as getRegisteredRenderers,\n};\n","import staticRegister from '../utils/staticRegister';\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('validators');\n\n/**\n * Retrieve validator function.\n *\n * @param {string} name Validator identification.\n * @returns {Function} Returns validator function.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error(`No registered validator found under \"${name}\" name`);\n  }\n\n  return getItem(name);\n}\n\n/**\n * Register validator under its alias.\n *\n * @param {string|Function} name Validator's alias or validator function with its descriptor.\n * @param {Function} [validator] Validator function.\n */\nfunction _register(name, validator) {\n  if (typeof name !== 'string') {\n    validator = name;\n    name = validator.VALIDATOR_TYPE;\n  }\n\n  register(name, validator);\n}\n\nexport {\n  _register as registerValidator,\n  _getItem as getValidator,\n  hasItem as hasValidator,\n  getNames as getRegisteredValidatorNames,\n  getValues as getRegisteredValidators,\n};\n","import {\n  addClass,\n  clearTextSelection,\n  empty,\n  fastInnerHTML,\n  fastInnerText,\n  getScrollbarWidth,\n  hasClass,\n  isChildOf,\n  isInput,\n  isOutsideInput,\n  isVisible,\n  setAttribute,\n  getParentWindow,\n} from './helpers/dom/element';\nimport EventManager from './eventManager';\nimport { isImmediatePropagationStopped, isRightClick, isLeftClick } from './helpers/dom/event';\nimport Walkontable from './3rdparty/walkontable/src';\nimport { handleMouseEvent } from './selection/mouseEventHandler';\nimport { isRootInstance } from './utils/rootInstance';\nimport {\n  A11Y_COLCOUNT,\n  A11Y_MULTISELECTABLE,\n  A11Y_PRESENTATION,\n  A11Y_ROWCOUNT,\n  A11Y_TREEGRID\n} from './helpers/a11y';\n\n/**\n * @class TableView\n * @private\n */\nclass TableView {\n  /**\n   * Instance of {@link Handsontable}.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @private\n   * @type {EventManager}\n   */\n  eventManager;\n  /**\n   * Current Handsontable's GridSettings object.\n   *\n   * @private\n   * @type {GridSettings}\n   */\n  settings;\n  /**\n   * Main <THEAD> element.\n   *\n   * @private\n   * @type {HTMLTableSectionElement}\n   */\n  THEAD;\n  /**\n   * Main <TBODY> element.\n   *\n   * @private\n   * @type {HTMLTableSectionElement}\n   */\n  TBODY;\n  /**\n   * Main Walkontable instance.\n   *\n   * @private\n   * @type {Walkontable}\n   */\n  _wt;\n  /**\n   * Main Walkontable instance.\n   *\n   * @type {Walkontable}\n   */\n  activeWt;\n  /**\n   * The total number of the column header renderers applied to the table through the\n   * `afterGetColumnHeaderRenderers` hook.\n   *\n   * @type {number}\n   */\n  #columnHeadersCount = 0;\n  /**\n   * The total number of the row header renderers applied to the table through the\n   * `afterGetRowHeaderRenderers` hook.\n   *\n   * @type {number}\n   */\n  #rowHeadersCount = 0;\n  /**\n   * The flag determines if the `adjustElementsSize` method call was made during\n   * the render suspending. If true, the method has to be triggered once after render\n   * resuming.\n   *\n   * @private\n   * @type {boolean}\n   */\n  postponedAdjustElementsSize = false;\n  /**\n   * Defines if the text should be selected during mousemove.\n   *\n   * @type {boolean}\n   */\n  #selectionMouseDown = false;\n  /**\n   * @type {boolean}\n   */\n  #mouseDown;\n  /**\n   * Main <TABLE> element.\n   *\n   * @type {HTMLTableElement}\n   */\n  #table;\n  /**\n   * Cached width of the rootElement.\n   *\n   * @type {number}\n   */\n  #lastWidth = 0;\n  /**\n   * Cached height of the rootElement.\n   *\n   * @type {number}\n   */\n  #lastHeight = 0;\n\n  /**\n   * @param {Hanstontable} hotInstance Instance of {@link Handsontable}.\n   */\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n    this.eventManager = new EventManager(this.hot);\n    this.settings = this.hot.getSettings();\n\n    this.createElements();\n    this.registerEvents();\n    this.initializeWalkontable();\n  }\n\n  /**\n   * Renders WalkontableUI.\n   */\n  render() {\n    if (!this.hot.isRenderSuspended()) {\n      this.hot.runHooks('beforeRender', this.hot.forceFullRender);\n\n      if (this.postponedAdjustElementsSize) {\n        this.postponedAdjustElementsSize = false;\n\n        this.adjustElementsSize(true);\n      }\n\n      this._wt.draw(!this.hot.forceFullRender);\n      this.hot.runHooks('afterRender', this.hot.forceFullRender);\n      this.hot.forceFullRender = false;\n      this.hot.renderCall = false;\n    }\n  }\n\n  /**\n   * Adjust overlays elements size and master table size.\n   */\n  adjustElementsSize() {\n    if (this.hot.isRenderSuspended()) {\n      this.postponedAdjustElementsSize = true;\n    } else {\n      this._wt.wtOverlays.adjustElementsSize();\n    }\n  }\n\n  /**\n   * Returns td object given coordinates.\n   *\n   * @param {CellCoords} coords Renderable cell coordinates.\n   * @param {boolean} topmost Indicates whether the cell should be calculated from the topmost.\n   * @returns {HTMLTableCellElement|null}\n   */\n  getCellAtCoords(coords, topmost) {\n    const td = this._wt.getCell(coords, topmost);\n\n    if (td < 0) { // there was an exit code (cell is out of bounds)\n      return null;\n    }\n\n    return td;\n  }\n\n  /**\n   * Scroll viewport to a cell.\n   *\n   * @param {CellCoords} coords Renderable cell coordinates.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right side of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom side of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left side of the table.\n   * @returns {boolean}\n   */\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    return this._wt.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n  }\n\n  /**\n   * Scroll viewport to a column.\n   *\n   * @param {number} column Renderable column index.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right side of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left side of the table.\n   * @returns {boolean}\n   */\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    return this._wt.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n  }\n\n  /**\n   * Scroll viewport to a row.\n   *\n   * @param {number} row Renderable row index.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom side of the table.\n   * @returns {boolean}\n   */\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    return this._wt.scrollViewportVertically(row, snapToTop, snapToBottom);\n  }\n\n  /**\n   * Prepares DOMElements and adds correct className to the root element.\n   *\n   * @private\n   */\n  createElements() {\n    const { rootElement, rootDocument } = this.hot;\n    const originalStyle = rootElement.getAttribute('style');\n\n    if (originalStyle) {\n      rootElement.setAttribute('data-originalstyle', originalStyle); // needed to retrieve original style in jsFiddle link generator in HT examples. may be removed in future versions\n    }\n\n    addClass(rootElement, 'handsontable');\n\n    this.#table = rootDocument.createElement('TABLE');\n    addClass(this.#table, 'htCore');\n\n    if (this.hot.getSettings().tableClassName) {\n      addClass(this.#table, this.hot.getSettings().tableClassName);\n    }\n\n    if (this.settings.ariaTags) {\n      setAttribute(this.#table, [\n        A11Y_PRESENTATION()\n      ]);\n\n      setAttribute(rootElement, [\n        A11Y_TREEGRID(),\n        A11Y_ROWCOUNT(-1),\n        A11Y_COLCOUNT(this.hot.countCols()),\n        A11Y_MULTISELECTABLE(),\n      ]);\n    }\n\n    this.THEAD = rootDocument.createElement('THEAD');\n    this.#table.appendChild(this.THEAD);\n\n    this.TBODY = rootDocument.createElement('TBODY');\n    this.#table.appendChild(this.TBODY);\n\n    this.hot.table = this.#table;\n\n    this.hot.container.insertBefore(this.#table, this.hot.container.firstChild);\n  }\n\n  /**\n   * Attaches necessary listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { rootElement, rootDocument, selection, rootWindow } = this.hot;\n    const documentElement = rootDocument.documentElement;\n\n    this.eventManager.addEventListener(rootElement, 'mousedown', (event) => {\n      this.#selectionMouseDown = true;\n\n      if (!this.isTextSelectionAllowed(event.target)) {\n\n        clearTextSelection(rootWindow);\n        event.preventDefault();\n        rootWindow.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe.\n      }\n    });\n\n    this.eventManager.addEventListener(rootElement, 'mouseup', () => {\n      this.#selectionMouseDown = false;\n    });\n    this.eventManager.addEventListener(rootElement, 'mousemove', (event) => {\n      if (this.#selectionMouseDown && !this.isTextSelectionAllowed(event.target)) {\n        // Clear selection only when fragmentSelection is enabled, otherwise clearing selection breaks the IME editor.\n        if (this.settings.fragmentSelection) {\n          clearTextSelection(rootWindow);\n        }\n        event.preventDefault();\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'keyup', (event) => {\n      // TODO: is it the best place and way to finish cell selection?\n      if (selection.isInProgress() && !event.shiftKey) {\n        selection.finish();\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'mouseup', (event) => {\n      if (selection.isInProgress() && isLeftClick(event)) {\n        selection.finish();\n      }\n\n      this.#mouseDown = false;\n\n      const isOutsideInputElement = isOutsideInput(rootDocument.activeElement);\n\n      if (isInput(rootDocument.activeElement) && !isOutsideInputElement) {\n        return;\n      }\n\n      if (isOutsideInputElement || (!selection.isSelected() && !selection.isSelectedByAnyHeader() &&\n          !rootElement.contains(event.target) && !isRightClick(event))) {\n        this.hot.unlisten();\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'contextmenu', (event) => {\n      if (selection.isInProgress() && isRightClick(event)) {\n        selection.finish();\n\n        this.#mouseDown = false;\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'touchend', () => {\n      if (selection.isInProgress()) {\n        selection.finish();\n      }\n\n      this.#mouseDown = false;\n    });\n\n    this.eventManager.addEventListener(documentElement, 'mousedown', (event) => {\n      const originalTarget = event.target;\n      const eventX = event.x || event.clientX;\n      const eventY = event.y || event.clientY;\n      let next = event.target;\n\n      if (this.#mouseDown || !rootElement || !this.hot.view) {\n        return; // it must have been started in a cell\n      }\n\n      // immediate click on \"holder\" means click on the right side of vertical scrollbar\n      const { holder } = this._wt.wtTable;\n\n      if (next === holder) {\n        const scrollbarWidth = getScrollbarWidth(rootDocument);\n\n        if (rootDocument.elementFromPoint(eventX + scrollbarWidth, eventY) !== holder ||\n          rootDocument.elementFromPoint(eventX, eventY + scrollbarWidth) !== holder) {\n          return;\n        }\n      } else {\n        while (next !== documentElement) {\n          if (next === null) {\n            if (event.isTargetWebComponent) {\n              break;\n            }\n\n            // click on something that was a row but now is detached (possibly because your click triggered a rerender)\n            return;\n          }\n          if (next === rootElement) {\n            // click inside container\n            return;\n          }\n          next = next.parentNode;\n        }\n      }\n\n      // function did not return until here, we have an outside click!\n      const outsideClickDeselects = typeof this.settings.outsideClickDeselects === 'function' ?\n        this.settings.outsideClickDeselects(originalTarget) :\n        this.settings.outsideClickDeselects;\n\n      if (outsideClickDeselects) {\n        this.hot.deselectCell();\n      } else {\n        this.hot.destroyEditor(false, false);\n      }\n    });\n\n    let parentWindow = getParentWindow(rootWindow);\n\n    while (parentWindow !== null) {\n      this.eventManager.addEventListener(parentWindow.document.documentElement, 'click', () => {\n        this.hot.unlisten();\n      });\n\n      parentWindow = getParentWindow(parentWindow);\n    }\n\n    this.eventManager.addEventListener(this.#table, 'selectstart', (event) => {\n      if (this.settings.fragmentSelection || isInput(event.target)) {\n        return;\n      }\n      // https://github.com/handsontable/handsontable/issues/160\n      // Prevent text from being selected when performing drag down.\n      event.preventDefault();\n    });\n  }\n\n  /**\n   * Translate renderable cell coordinates to visual coordinates.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @returns {CellCoords}\n   */\n  translateFromRenderableToVisualCoords({ row, col }) {\n    // TODO: To consider an idea to reusing the CellCoords instance instead creating new one.\n    return this.hot._createCellCoords(...this.translateFromRenderableToVisualIndex(row, col));\n  }\n\n  /**\n   * Translate renderable row and column indexes to visual row and column indexes.\n   *\n   * @param {number} renderableRow Renderable row index.\n   * @param {number} renderableColumn Renderable columnIndex.\n   * @returns {number[]}\n   */\n  translateFromRenderableToVisualIndex(renderableRow, renderableColumn) {\n    // TODO: Some helper may be needed.\n    // We perform translation for indexes (without headers).\n    let visualRow = renderableRow >= 0 ?\n      this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow;\n    let visualColumn = renderableColumn >= 0 ?\n      this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn;\n\n    if (visualRow === null) {\n      visualRow = renderableRow;\n    }\n    if (visualColumn === null) {\n      visualColumn = renderableColumn;\n    }\n\n    return [visualRow, visualColumn];\n  }\n\n  /**\n   * Returns the number of renderable indexes.\n   *\n   * @private\n   * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n   * @param {number} maxElements Maximum number of elements (rows or columns).\n   *\n   * @returns {number|*}\n   */\n  countRenderableIndexes(indexMapper, maxElements) {\n    const consideredElements = Math.min(indexMapper.getNotTrimmedIndexesLength(), maxElements);\n    // Don't take hidden indexes into account. We are looking just for renderable indexes.\n    const firstNotHiddenIndex = indexMapper.getNearestNotHiddenIndex(consideredElements - 1, -1);\n\n    // There are no renderable indexes.\n    if (firstNotHiddenIndex === null) {\n      return 0;\n    }\n\n    return indexMapper.getRenderableFromVisualIndex(firstNotHiddenIndex) + 1;\n  }\n\n  /**\n   * Returns the number of renderable columns.\n   *\n   * @returns {number}\n   */\n  countRenderableColumns() {\n    return this.countRenderableIndexes(this.hot.columnIndexMapper, this.settings.maxCols);\n  }\n\n  /**\n   * Returns the number of renderable rows.\n   *\n   * @returns {number}\n   */\n  countRenderableRows() {\n    return this.countRenderableIndexes(this.hot.rowIndexMapper, this.settings.maxRows);\n  }\n\n  /**\n   * Returns number of not hidden row indexes counting from the passed starting index.\n   * The counting direction can be controlled by `incrementBy` argument.\n   *\n   * @param {number} visualIndex The visual index from which the counting begins.\n   * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n   * @returns {number}\n   */\n  countNotHiddenRowIndexes(visualIndex, incrementBy) {\n    return this.countNotHiddenIndexes(\n      visualIndex, incrementBy, this.hot.rowIndexMapper, this.countRenderableRows());\n  }\n\n  /**\n   * Returns number of not hidden column indexes counting from the passed starting index.\n   * The counting direction can be controlled by `incrementBy` argument.\n   *\n   * @param {number} visualIndex The visual index from which the counting begins.\n   * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n   * @returns {number}\n   */\n  countNotHiddenColumnIndexes(visualIndex, incrementBy) {\n    return this.countNotHiddenIndexes(\n      visualIndex, incrementBy, this.hot.columnIndexMapper, this.countRenderableColumns());\n  }\n\n  /**\n   * Returns number of not hidden indexes counting from the passed starting index.\n   * The counting direction can be controlled by `incrementBy` argument.\n   *\n   * @param {number} visualIndex The visual index from which the counting begins.\n   * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n   * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n   * @param {number} renderableIndexesCount Total count of renderable indexes for specific axis.\n   * @returns {number}\n   */\n  countNotHiddenIndexes(visualIndex, incrementBy, indexMapper, renderableIndexesCount) {\n    if (isNaN(visualIndex) || visualIndex < 0) {\n      return 0;\n    }\n\n    const firstVisibleIndex = indexMapper.getNearestNotHiddenIndex(visualIndex, incrementBy);\n    const renderableIndex = indexMapper.getRenderableFromVisualIndex(firstVisibleIndex);\n\n    if (!Number.isInteger(renderableIndex)) {\n      return 0;\n    }\n\n    let notHiddenIndexes = 0;\n\n    if (incrementBy < 0) {\n      // Zero-based numbering for renderable indexes corresponds to a number of not hidden indexes.\n      notHiddenIndexes = renderableIndex + 1;\n    } else if (incrementBy > 0) {\n      notHiddenIndexes = renderableIndexesCount - renderableIndex;\n    }\n\n    return notHiddenIndexes;\n  }\n\n  /**\n   * The function returns the number of not hidden column indexes that fit between the first and\n   * last fixed column in the left (or right in RTL mode) overlay.\n   *\n   * @returns {number}\n   */\n  countNotHiddenFixedColumnsStart() {\n    const countCols = this.hot.countCols();\n    const visualFixedColumnsStart = Math.min(parseInt(this.settings.fixedColumnsStart, 10), countCols) - 1;\n\n    return this.countNotHiddenColumnIndexes(visualFixedColumnsStart, -1);\n  }\n\n  /**\n   * The function returns the number of not hidden row indexes that fit between the first and\n   * last fixed row in the top overlay.\n   *\n   * @returns {number}\n   */\n  countNotHiddenFixedRowsTop() {\n    const countRows = this.hot.countRows();\n    const visualFixedRowsTop = Math.min(parseInt(this.settings.fixedRowsTop, 10), countRows) - 1;\n\n    return this.countNotHiddenRowIndexes(visualFixedRowsTop, -1);\n  }\n\n  /**\n   * The function returns the number of not hidden row indexes that fit between the first and\n   * last fixed row in the bottom overlay.\n   *\n   * @returns {number}\n   */\n  countNotHiddenFixedRowsBottom() {\n    const countRows = this.hot.countRows();\n    const visualFixedRowsBottom = Math.max(countRows - parseInt(this.settings.fixedRowsBottom, 10), 0);\n\n    return this.countNotHiddenRowIndexes(visualFixedRowsBottom, 1);\n  }\n\n  /**\n   * The function returns the number of renderable column indexes within the passed range of the visual indexes.\n   *\n   * @param {number} columnStart The column visual start index.\n   * @param {number} columnEnd The column visual end index.\n   * @returns {number}\n   */\n  countRenderableColumnsInRange(columnStart, columnEnd) {\n    let count = 0;\n\n    for (let column = columnStart; column <= columnEnd; column++) {\n      if (this.hot.columnIndexMapper.getRenderableFromVisualIndex(column) !== null) {\n        count += 1;\n      }\n    }\n\n    return count;\n  }\n\n  /**\n   * The function returns the number of renderable row indexes within the passed range of the visual indexes.\n   *\n   * @param {number} rowStart The row visual start index.\n   * @param {number} rowEnd The row visual end index.\n   * @returns {number}\n   */\n  countRenderableRowsInRange(rowStart, rowEnd) {\n    let count = 0;\n\n    for (let row = rowStart; row <= rowEnd; row++) {\n      if (this.hot.rowIndexMapper.getRenderableFromVisualIndex(row) !== null) {\n        count += 1;\n      }\n    }\n\n    return count;\n  }\n\n  /**\n   * Checks if at least one cell than belongs to the main table is not covered by the top, left or\n   * bottom overlay.\n   *\n   * @returns {boolean}\n   */\n  isMainTableNotFullyCoveredByOverlays() {\n    const fixedAllRows = this.countNotHiddenFixedRowsTop() + this.countNotHiddenFixedRowsBottom();\n    const fixedAllColumns = this.countNotHiddenFixedColumnsStart();\n\n    return this.hot.countRenderedRows() > fixedAllRows && this.hot.countRenderedCols() > fixedAllColumns;\n  }\n\n  /**\n   * Defines default configuration and initializes WalkOnTable instance.\n   *\n   * @private\n   */\n  initializeWalkontable() {\n    const walkontableConfig = {\n      ariaTags: this.settings.ariaTags,\n      rtlMode: this.hot.isRtl(),\n      externalRowCalculator: this.hot.getPlugin('autoRowSize') &&\n        this.hot.getPlugin('autoRowSize').isEnabled(),\n      table: this.#table,\n      isDataViewInstance: () => isRootInstance(this.hot),\n      preventOverflow: () => this.settings.preventOverflow,\n      preventWheel: () => this.settings.preventWheel,\n      stretchH: () => this.settings.stretchH,\n      data: (renderableRow, renderableColumn) => {\n        return this.hot\n          .getDataAtCell(...this.translateFromRenderableToVisualIndex(renderableRow, renderableColumn));\n      },\n      totalRows: () => this.countRenderableRows(),\n      totalColumns: () => this.countRenderableColumns(),\n      // Number of renderable columns for the left overlay.\n      fixedColumnsStart: () => this.countNotHiddenFixedColumnsStart(),\n      // Number of renderable rows for the top overlay.\n      fixedRowsTop: () => this.countNotHiddenFixedRowsTop(),\n      // Number of renderable rows for the bottom overlay.\n      fixedRowsBottom: () => this.countNotHiddenFixedRowsBottom(),\n      // Enable the inline start overlay when conditions are met.\n      shouldRenderInlineStartOverlay: () => {\n        return this.settings.fixedColumnsStart > 0 || walkontableConfig.rowHeaders().length > 0;\n      },\n      // Enable the top overlay when conditions are met.\n      shouldRenderTopOverlay: () => {\n        return this.settings.fixedRowsTop > 0 || walkontableConfig.columnHeaders().length > 0;\n      },\n      // Enable the bottom overlay when conditions are met.\n      shouldRenderBottomOverlay: () => {\n        return this.settings.fixedRowsBottom > 0;\n      },\n      minSpareRows: () => this.settings.minSpareRows,\n      renderAllRows: this.settings.renderAllRows,\n      renderAllColumns: this.settings.renderAllColumns,\n      rowHeaders: () => {\n        const headerRenderers = [];\n\n        if (this.hot.hasRowHeaders()) {\n          headerRenderers.push((renderableRowIndex, TH) => {\n            // TODO: Some helper may be needed.\n            // We perform translation for row indexes (without row headers).\n            const visualRowIndex = renderableRowIndex >= 0 ?\n              this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderableRowIndex) : renderableRowIndex;\n\n            this.appendRowHeader(visualRowIndex, TH);\n          });\n        }\n\n        this.hot.runHooks('afterGetRowHeaderRenderers', headerRenderers);\n        this.#rowHeadersCount = headerRenderers.length;\n\n        if (this.hot.getSettings().ariaTags) {\n          // Update the aria-colcount attribute.\n          // Only needs to be done once after initialization/data update.\n          if (this.#getAriaColcount() === this.hot.countCols()) {\n            this.#updateAriaColcount(this.#rowHeadersCount);\n          }\n        }\n\n        return headerRenderers;\n      },\n      columnHeaders: () => {\n        const headerRenderers = [];\n\n        if (this.hot.hasColHeaders()) {\n          headerRenderers.push((renderedColumnIndex, TH) => {\n            // TODO: Some helper may be needed.\n            // We perform translation for columns indexes (without column headers).\n            const visualColumnsIndex = renderedColumnIndex >= 0 ?\n              this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex) : renderedColumnIndex;\n\n            this.appendColHeader(visualColumnsIndex, TH);\n          });\n        }\n\n        this.hot.runHooks('afterGetColumnHeaderRenderers', headerRenderers);\n        this.#columnHeadersCount = headerRenderers.length;\n\n        return headerRenderers;\n      },\n      columnWidth: (renderedColumnIndex) => {\n        const visualIndex = this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n        // It's not a bug that we can't find visual index for some handled by method indexes. The function is called also\n        // for indexes that are not displayed (indexes that are beyond the grid's boundaries), i.e. when `fixedColumnsStart` > `startCols` (wrong config?) or\n        // scrolling and dataset is empty (scroll should handle that?).\n        return this.hot.getColWidth(visualIndex === null ? renderedColumnIndex : visualIndex);\n      },\n      rowHeight: (renderedRowIndex) => {\n        const visualIndex = this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderedRowIndex);\n\n        return this.hot.getRowHeight(visualIndex === null ? renderedRowIndex : visualIndex);\n      },\n      rowHeightByOverlayName: (renderedRowIndex, overlayType) => {\n        const visualIndex = this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderedRowIndex);\n        const visualRowIndex = visualIndex === null ? renderedRowIndex : visualIndex;\n\n        return this.hot.runHooks('modifyRowHeightByOverlayName',\n          this.hot.getRowHeight(visualRowIndex), visualRowIndex, overlayType);\n      },\n      cellRenderer: (renderedRowIndex, renderedColumnIndex, TD) => {\n        const [visualRowIndex, visualColumnIndex] = this\n          .translateFromRenderableToVisualIndex(renderedRowIndex, renderedColumnIndex);\n\n        // Coords may be modified. For example, by the `MergeCells` plugin. It should affect cell value and cell meta.\n        const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowIndex, visualColumnIndex);\n\n        let visualRowToCheck = visualRowIndex;\n        let visualColumnToCheck = visualColumnIndex;\n\n        if (Array.isArray(modifiedCellCoords)) {\n          [visualRowToCheck, visualColumnToCheck] = modifiedCellCoords;\n        }\n\n        const cellProperties = this.hot.getCellMeta(visualRowToCheck, visualColumnToCheck);\n        const prop = this.hot.colToProp(visualColumnToCheck);\n        let value = this.hot.getDataAtRowProp(visualRowToCheck, prop);\n\n        if (this.hot.hasHook('beforeValueRender')) {\n          value = this.hot.runHooks('beforeValueRender', value, cellProperties);\n        }\n\n        this.hot.runHooks('beforeRenderer', TD, visualRowIndex, visualColumnIndex, prop, value, cellProperties);\n        this.hot.getCellRenderer(cellProperties)(\n          this.hot,\n          TD,\n          visualRowIndex,\n          visualColumnIndex,\n          prop,\n          value,\n          cellProperties\n        );\n\n        this.hot.runHooks('afterRenderer', TD, visualRowIndex, visualColumnIndex, prop, value, cellProperties);\n      },\n      selections: this.hot.selection.highlight,\n      hideBorderOnMouseDownOver: () => this.settings.fragmentSelection,\n      onWindowResize: () => {\n        if (this.hot && !this.hot.isDestroyed) {\n          this.hot.refreshDimensions();\n        }\n      },\n      onContainerElementResize: () => {\n        if (this.hot && !this.hot.isDestroyed && isVisible(this.hot.rootElement)) {\n          this.hot.refreshDimensions();\n        }\n      },\n      onCellMouseDown: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n        const controller = {\n          row: false,\n          column: false,\n          cell: false\n        };\n\n        this.hot.listen();\n\n        this.activeWt = wt;\n        this.#mouseDown = true;\n\n        this.hot.runHooks('beforeOnCellMouseDown', event, visualCoords, TD, controller);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        handleMouseEvent(event, {\n          coords: visualCoords,\n          selection: this.hot.selection,\n          controller,\n          cellCoordsFactory: (row, column) => this.hot._createCellCoords(row, column),\n        });\n\n        this.hot.runHooks('afterOnCellMouseDown', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellContextMenu: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        this.activeWt = wt;\n        this.#mouseDown = false;\n\n        if (this.hot.selection.isInProgress()) {\n          this.hot.selection.finish();\n        }\n\n        this.hot.runHooks('beforeOnCellContextMenu', event, visualCoords, TD);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        this.hot.runHooks('afterOnCellContextMenu', event, visualCoords, TD);\n\n        this.activeWt = this._wt;\n      },\n      onCellMouseOut: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        this.activeWt = wt;\n        this.hot.runHooks('beforeOnCellMouseOut', event, visualCoords, TD);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        this.hot.runHooks('afterOnCellMouseOut', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellMouseOver: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        const controller = {\n          row: false,\n          column: false,\n          cell: false\n        };\n\n        this.activeWt = wt;\n        this.hot.runHooks('beforeOnCellMouseOver', event, visualCoords, TD, controller);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        if (this.#mouseDown) {\n          handleMouseEvent(event, {\n            coords: visualCoords,\n            selection: this.hot.selection,\n            controller,\n            cellCoordsFactory: (row, column) => this.hot._createCellCoords(row, column),\n          });\n        }\n\n        this.hot.runHooks('afterOnCellMouseOver', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellMouseUp: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        this.activeWt = wt;\n        this.hot.runHooks('beforeOnCellMouseUp', event, visualCoords, TD);\n\n        // TODO: The second condition check is a workaround. Callback corresponding the method `updateSettings`\n        // disable plugin and enable it again. Disabling plugin closes the menu. Thus, calling the\n        // `updateSettings` in a body of any callback executed right after some context-menu action\n        // breaks the table (#7231).\n        if (isImmediatePropagationStopped(event) || this.hot.isDestroyed) {\n          return;\n        }\n\n        this.hot.runHooks('afterOnCellMouseUp', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellCornerMouseDown: (event) => {\n        event.preventDefault();\n        this.hot.runHooks('afterOnCellCornerMouseDown', event);\n      },\n      onCellCornerDblClick: (event) => {\n        event.preventDefault();\n        this.hot.runHooks('afterOnCellCornerDblClick', event);\n      },\n      beforeDraw: (force, skipRender) => this.beforeRender(force, skipRender),\n      onDraw: force => this.afterRender(force),\n      onBeforeViewportScrollVertically: (renderableRow) => {\n        const rowMapper = this.hot.rowIndexMapper;\n        const areColumnHeadersSelected = renderableRow < 0;\n        let visualRow = renderableRow;\n\n        if (!areColumnHeadersSelected) {\n          visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);\n\n          // for an empty data return index as is\n          if (visualRow === null) {\n            return renderableRow;\n          }\n        }\n\n        visualRow = this.hot.runHooks('beforeViewportScrollVertically', visualRow);\n        this.hot.runHooks('beforeViewportScroll');\n\n        if (!areColumnHeadersSelected) {\n          return rowMapper.getRenderableFromVisualIndex(visualRow);\n        }\n\n        return visualRow;\n      },\n      onBeforeViewportScrollHorizontally: (renderableColumn) => {\n        const columnMapper = this.hot.columnIndexMapper;\n        const areRowHeadersSelected = renderableColumn < 0;\n        let visualColumn = renderableColumn;\n\n        if (!areRowHeadersSelected) {\n          visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);\n\n          // for an empty data return index as is\n          if (visualColumn === null) {\n            return renderableColumn;\n          }\n        }\n\n        visualColumn = this.hot.runHooks('beforeViewportScrollHorizontally', visualColumn);\n        this.hot.runHooks('beforeViewportScroll');\n\n        if (!areRowHeadersSelected) {\n          return columnMapper.getRenderableFromVisualIndex(visualColumn);\n        }\n\n        return visualColumn;\n      },\n      onScrollVertically: () => {\n        this.hot.runHooks('afterScrollVertically');\n        this.hot.runHooks('afterScroll');\n      },\n      onScrollHorizontally: () => {\n        this.hot.runHooks('afterScrollHorizontally');\n        this.hot.runHooks('afterScroll');\n      },\n      onBeforeRemoveCellClassNames: () => this.hot.runHooks('beforeRemoveCellClassNames'),\n      onBeforeHighlightingRowHeader: (renderableRow, headerLevel, highlightMeta) => {\n        const rowMapper = this.hot.rowIndexMapper;\n        const areColumnHeadersSelected = renderableRow < 0;\n        let visualRow = renderableRow;\n\n        if (!areColumnHeadersSelected) {\n          visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);\n        }\n\n        const newVisualRow = this.hot\n          .runHooks('beforeHighlightingRowHeader', visualRow, headerLevel, highlightMeta);\n\n        if (!areColumnHeadersSelected) {\n          return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));\n        }\n\n        return newVisualRow;\n      },\n      onBeforeHighlightingColumnHeader: (renderableColumn, headerLevel, highlightMeta) => {\n        const columnMapper = this.hot.columnIndexMapper;\n        const areRowHeadersSelected = renderableColumn < 0;\n        let visualColumn = renderableColumn;\n\n        if (!areRowHeadersSelected) {\n          visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);\n        }\n\n        const newVisualColumn = this.hot\n          .runHooks('beforeHighlightingColumnHeader', visualColumn, headerLevel, highlightMeta);\n\n        if (!areRowHeadersSelected) {\n          return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));\n        }\n\n        return newVisualColumn;\n      },\n      onAfterDrawSelection: (currentRow, currentColumn, layerLevel) => {\n        let cornersOfSelection;\n        const [visualRowIndex, visualColumnIndex] =\n          this.translateFromRenderableToVisualIndex(currentRow, currentColumn);\n        const selectedRange = this.hot.selection.getSelectedRange();\n        const selectionRangeSize = selectedRange.size();\n\n        if (selectionRangeSize > 0) {\n          const selectionForLayer = selectedRange.peekByIndex(layerLevel ?? 0);\n\n          cornersOfSelection = [\n            selectionForLayer.from.row, selectionForLayer.from.col, selectionForLayer.to.row, selectionForLayer.to.col\n          ];\n        }\n\n        return this.hot\n          .runHooks('afterDrawSelection', visualRowIndex, visualColumnIndex, cornersOfSelection, layerLevel);\n      },\n      onBeforeDrawBorders: (corners, borderClassName) => {\n        const [startRenderableRow, startRenderableColumn, endRenderableRow, endRenderableColumn] = corners;\n        const visualCorners = [\n          this.hot.rowIndexMapper.getVisualFromRenderableIndex(startRenderableRow),\n          this.hot.columnIndexMapper.getVisualFromRenderableIndex(startRenderableColumn),\n          this.hot.rowIndexMapper.getVisualFromRenderableIndex(endRenderableRow),\n          this.hot.columnIndexMapper.getVisualFromRenderableIndex(endRenderableColumn),\n        ];\n\n        return this.hot.runHooks('beforeDrawBorders', visualCorners, borderClassName);\n      },\n      onBeforeTouchScroll: () => this.hot.runHooks('beforeTouchScroll'),\n      onAfterMomentumScroll: () => this.hot.runHooks('afterMomentumScroll'),\n      onBeforeStretchingColumnWidth: (stretchedWidth, renderedColumnIndex) => {\n        const visualColumnIndex = this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n        return this.hot.runHooks('beforeStretchingColumnWidth', stretchedWidth, visualColumnIndex);\n      },\n      onModifyRowHeaderWidth: rowHeaderWidth => this.hot.runHooks('modifyRowHeaderWidth', rowHeaderWidth),\n      onModifyGetCellCoords: (renderableRowIndex, renderableColumnIndex, topmost) => {\n        const rowMapper = this.hot.rowIndexMapper;\n        const columnMapper = this.hot.columnIndexMapper;\n\n        // Callback handle also headers. We shouldn't translate them.\n        const visualColumnIndex = renderableColumnIndex >= 0 ?\n          columnMapper.getVisualFromRenderableIndex(renderableColumnIndex) : renderableColumnIndex;\n        const visualRowIndex = renderableRowIndex >= 0 ?\n          rowMapper.getVisualFromRenderableIndex(renderableRowIndex) : renderableRowIndex;\n\n        const visualIndexes = this.hot.runHooks('modifyGetCellCoords', visualRowIndex, visualColumnIndex, topmost);\n\n        if (Array.isArray(visualIndexes)) {\n          const [visualRowFrom, visualColumnFrom, visualRowTo, visualColumnTo] = visualIndexes;\n\n          // Result of the hook is handled by the Walkontable (renderable indexes).\n          return [\n            visualRowFrom >= 0 ? rowMapper.getRenderableFromVisualIndex(\n              rowMapper.getNearestNotHiddenIndex(visualRowFrom, 1)) : visualRowFrom,\n            visualColumnFrom >= 0 ? columnMapper.getRenderableFromVisualIndex(\n              columnMapper.getNearestNotHiddenIndex(visualColumnFrom, 1)) : visualColumnFrom,\n            visualRowTo >= 0 ? rowMapper.getRenderableFromVisualIndex(\n              rowMapper.getNearestNotHiddenIndex(visualRowTo, -1)) : visualRowTo,\n            visualColumnTo >= 0 ? columnMapper.getRenderableFromVisualIndex(\n              columnMapper.getNearestNotHiddenIndex(visualColumnTo, -1)) : visualColumnTo\n          ];\n        }\n      },\n      viewportRowCalculatorOverride: (calc) => {\n        let viewportOffset = this.settings.viewportRowRenderingOffset;\n\n        if (viewportOffset === 'auto' && this.settings.fixedRowsTop) {\n          viewportOffset = 10;\n        }\n\n        if (viewportOffset > 0 || viewportOffset === 'auto') {\n          const renderableRows = this.countRenderableRows();\n          const firstRenderedRow = calc.startRow;\n          const lastRenderedRow = calc.endRow;\n\n          if (typeof viewportOffset === 'number') {\n            calc.startRow = Math.max(firstRenderedRow - viewportOffset, 0);\n            calc.endRow = Math.min(lastRenderedRow + viewportOffset, renderableRows - 1);\n\n          } else if (viewportOffset === 'auto') {\n            const offset = Math.ceil(lastRenderedRow / renderableRows * 12);\n\n            calc.startRow = Math.max(firstRenderedRow - offset, 0);\n            calc.endRow = Math.min(lastRenderedRow + offset, renderableRows - 1);\n          }\n        }\n        this.hot.runHooks('afterViewportRowCalculatorOverride', calc);\n      },\n      viewportColumnCalculatorOverride: (calc) => {\n        let viewportOffset = this.settings.viewportColumnRenderingOffset;\n\n        if (viewportOffset === 'auto' && this.settings.fixedColumnsStart) {\n          viewportOffset = 10;\n        }\n\n        if (viewportOffset > 0 || viewportOffset === 'auto') {\n          const renderableColumns = this.countRenderableColumns();\n          const firstRenderedColumn = calc.startColumn;\n          const lastRenderedColumn = calc.endColumn;\n\n          if (typeof viewportOffset === 'number') {\n            calc.startColumn = Math.max(firstRenderedColumn - viewportOffset, 0);\n            calc.endColumn = Math.min(lastRenderedColumn + viewportOffset, renderableColumns - 1);\n          }\n          if (viewportOffset === 'auto') {\n            const offset = Math.ceil(lastRenderedColumn / renderableColumns * 6);\n\n            calc.startColumn = Math.max(firstRenderedColumn - offset, 0);\n            calc.endColumn = Math.min(lastRenderedColumn + offset, renderableColumns - 1);\n          }\n        }\n        this.hot.runHooks('afterViewportColumnCalculatorOverride', calc);\n      },\n      rowHeaderWidth: () => this.settings.rowHeaderWidth,\n      columnHeaderHeight: () => {\n        const columnHeaderHeight = this.hot.runHooks('modifyColumnHeaderHeight');\n\n        return this.settings.columnHeaderHeight || columnHeaderHeight;\n      }\n    };\n\n    this.hot.runHooks('beforeInitWalkontable', walkontableConfig);\n\n    this._wt = new Walkontable(walkontableConfig);\n    this.activeWt = this._wt;\n\n    const spreader = this._wt.wtTable.spreader;\n    // We have to cache width and height after Walkontable initialization.\n    const { width, height } = this.hot.rootElement.getBoundingClientRect();\n\n    this.setLastSize(width, height);\n\n    this.eventManager.addEventListener(spreader, 'mousedown', (event) => {\n      // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n      if (event.target === spreader && event.which === 3) {\n        event.stopPropagation();\n      }\n    });\n\n    this.eventManager.addEventListener(spreader, 'contextmenu', (event) => {\n      // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n      if (event.target === spreader && event.which === 3) {\n        event.stopPropagation();\n      }\n    });\n\n    this.eventManager.addEventListener(this.hot.rootDocument.documentElement, 'click', () => {\n      if (this.settings.observeDOMVisibility) {\n        if (this._wt.drawInterrupted) {\n          this.hot.forceFullRender = true;\n          this.render();\n        }\n      }\n    });\n  }\n\n  /**\n   * Checks if it's possible to create text selection in element.\n   *\n   * @private\n   * @param {HTMLElement} el The element to check.\n   * @returns {boolean}\n   */\n  isTextSelectionAllowed(el) {\n    if (isInput(el)) {\n      return true;\n    }\n    const isChildOfTableBody = isChildOf(el, this._wt.wtTable.spreader);\n\n    if (this.settings.fragmentSelection === true && isChildOfTableBody) {\n      return true;\n    }\n    if (this.settings.fragmentSelection === 'cell' && this.isSelectedOnlyCell() && isChildOfTableBody) {\n      return true;\n    }\n    if (!this.settings.fragmentSelection && this.isCellEdited() && this.isSelectedOnlyCell()) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Checks if user's been called mousedown.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isMouseDown() {\n    return this.#mouseDown;\n  }\n\n  /**\n   * Check if selected only one cell.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isSelectedOnlyCell() {\n    return this.hot.getSelectedRangeLast()?.isSingleCell() ?? false;\n  }\n\n  /**\n   * Checks if active cell is editing.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isCellEdited() {\n    const activeEditor = this.hot.getActiveEditor();\n\n    return activeEditor && activeEditor.isOpened();\n  }\n\n  /**\n   * `beforeDraw` callback.\n   *\n   * @private\n   * @param {boolean} force If `true` rendering was triggered by a change of settings or data or `false` if\n   *                        rendering was triggered by scrolling or moving selection.\n   * @param {object} skipRender Object with `skipRender` property, if it is set to `true ` the next rendering\n   *                            cycle will be skipped.\n   */\n  beforeRender(force, skipRender) {\n    if (force) {\n      // this.hot.forceFullRender = did Handsontable request full render?\n      this.hot.runHooks('beforeViewRender', this.hot.forceFullRender, skipRender);\n    }\n  }\n\n  /**\n   * `afterRender` callback.\n   *\n   * @private\n   * @param {boolean} force If `true` rendering was triggered by a change of settings or data or `false` if\n   *                        rendering was triggered by scrolling or moving selection.\n   */\n  afterRender(force) {\n    if (force) {\n      // this.hot.forceFullRender = did Handsontable request full render?\n      this.hot.runHooks('afterViewRender', this.hot.forceFullRender);\n    }\n  }\n\n  /**\n   * Append row header to a TH element.\n   *\n   * @private\n   * @param {number} visualRowIndex The visual row index.\n   * @param {HTMLTableHeaderCellElement} TH The table header element.\n   */\n  appendRowHeader(visualRowIndex, TH) {\n    if (TH.firstChild) {\n      const container = TH.firstChild;\n\n      if (!hasClass(container, 'relative')) {\n        empty(TH);\n        this.appendRowHeader(visualRowIndex, TH);\n\n        return;\n      }\n\n      this.updateCellHeader(container.querySelector('.rowHeader'), visualRowIndex, this.hot.getRowHeader);\n\n    } else {\n      const { rootDocument, getRowHeader } = this.hot;\n      const div = rootDocument.createElement('div');\n      const span = rootDocument.createElement('span');\n\n      div.className = 'relative';\n      span.className = 'rowHeader';\n      this.updateCellHeader(span, visualRowIndex, getRowHeader);\n\n      div.appendChild(span);\n      TH.appendChild(div);\n    }\n\n    this.hot.runHooks('afterGetRowHeader', visualRowIndex, TH);\n  }\n\n  /**\n   * Append column header to a TH element.\n   *\n   * @private\n   * @param {number} visualColumnIndex Visual column index.\n   * @param {HTMLTableCellElement} TH The table header element.\n   * @param {Function} [label] The function that returns the header label.\n   * @param {number} [headerLevel=0] The index of header level counting from the top (positive\n   *                                 values counting from 0 to N).\n   */\n  appendColHeader(\n    visualColumnIndex,\n    TH,\n    label = this.hot.getColHeader,\n    headerLevel = 0\n  ) {\n    const getColumnHeaderClassNames = () => {\n      const metaHeaderClassNames =\n        visualColumnIndex >= 0 ?\n          this.hot.getColumnMeta(visualColumnIndex).headerClassName :\n          null;\n\n      return metaHeaderClassNames ? metaHeaderClassNames.split(' ') : [];\n    };\n\n    if (TH.firstChild) {\n      const container = TH.firstChild;\n\n      if (hasClass(container, 'relative')) {\n        this.updateCellHeader(container.querySelector('.colHeader'), visualColumnIndex, label, headerLevel);\n\n        container.className = '';\n        addClass(container, ['relative', ...getColumnHeaderClassNames()]);\n\n      } else {\n        empty(TH);\n        this.appendColHeader(visualColumnIndex, TH, label, headerLevel);\n      }\n\n    } else {\n      const { rootDocument } = this.hot;\n      const div = rootDocument.createElement('div');\n      const span = rootDocument.createElement('span');\n      const classNames = getColumnHeaderClassNames();\n\n      div.classList.add('relative', ...classNames);\n      span.className = 'colHeader';\n\n      if (this.settings.ariaTags) {\n        setAttribute(div, ...A11Y_PRESENTATION());\n        setAttribute(span, ...A11Y_PRESENTATION());\n      }\n\n      this.updateCellHeader(span, visualColumnIndex, label, headerLevel);\n\n      div.appendChild(span);\n      TH.appendChild(div);\n    }\n\n    this.hot.runHooks('afterGetColHeader', visualColumnIndex, TH, headerLevel);\n  }\n\n  /**\n   * Updates header cell content.\n   *\n   * @private\n   * @param {HTMLElement} element Element to update.\n   * @param {number} index Row index or column index.\n   * @param {Function} content Function which should be returns content for this cell.\n   * @param {number} [headerLevel=0] The index of header level counting from the top (positive\n   *                                 values counting from 0 to N).\n   */\n  updateCellHeader(element, index, content, headerLevel = 0) {\n    let renderedIndex = index;\n    const parentOverlay = this._wt.wtOverlays.getParentOverlay(element) || this._wt;\n\n    // prevent wrong calculations from SampleGenerator\n    if (element.parentNode) {\n      if (hasClass(element, 'colHeader')) {\n        renderedIndex = parentOverlay.wtTable.columnFilter.sourceToRendered(index);\n\n      } else if (hasClass(element, 'rowHeader')) {\n        renderedIndex = parentOverlay.wtTable.rowFilter.sourceToRendered(index);\n      }\n    }\n\n    if (renderedIndex > -1) {\n      fastInnerHTML(element, content(index, headerLevel));\n\n    } else {\n      // workaround for https://github.com/handsontable/handsontable/issues/1946\n      fastInnerText(element, String.fromCharCode(160));\n      addClass(element, 'cornerHeader');\n    }\n  }\n\n  /**\n   * Given a element's left (or right in RTL mode) position relative to the viewport, returns maximum\n   * element width until the right (or left) edge of the viewport (before scrollbar).\n   *\n   * @private\n   * @param {number} inlineOffset The left (or right in RTL mode) offset.\n   * @returns {number}\n   */\n  maximumVisibleElementWidth(inlineOffset) {\n    const workspaceWidth = this._wt.wtViewport.getWorkspaceWidth();\n    const maxWidth = workspaceWidth - inlineOffset;\n\n    return maxWidth > 0 ? maxWidth : 0;\n  }\n\n  /**\n   * Given a element's top position relative to the viewport, returns maximum element height until the bottom\n   * edge of the viewport (before scrollbar).\n   *\n   * @private\n   * @param {number} topOffset The top offset.\n   * @returns {number}\n   */\n  maximumVisibleElementHeight(topOffset) {\n    const workspaceHeight = this._wt.wtViewport.getWorkspaceHeight();\n    const maxHeight = workspaceHeight - topOffset;\n\n    return maxHeight > 0 ? maxHeight : 0;\n  }\n\n  /**\n   * Sets new dimensions of the container.\n   *\n   * @param {number} width The table width.\n   * @param {number} height The table height.\n   */\n  setLastSize(width, height) {\n    this.#lastWidth = width;\n    this.#lastHeight = height;\n  }\n\n  /**\n   * Returns cached dimensions.\n   *\n   * @returns {object}\n   */\n  getLastSize() {\n    return {\n      width: this.#lastWidth,\n      height: this.#lastHeight,\n    };\n  }\n\n  /**\n   * Returns the first rendered row in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getFirstRenderedVisibleRow() {\n    if (!this._wt.wtViewport.rowsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.rowIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getFirstRenderedRow(), 1);\n  }\n\n  /**\n   * Returns the last rendered row in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getLastRenderedVisibleRow() {\n    if (!this._wt.wtViewport.rowsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.rowIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getLastRenderedRow(), -1);\n  }\n\n  /**\n   * Returns the first rendered column in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getFirstRenderedVisibleColumn() {\n    if (!this._wt.wtViewport.columnsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.columnIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getFirstRenderedColumn(), 1);\n  }\n\n  /**\n   * Returns the last rendered column in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getLastRenderedVisibleColumn() {\n    if (!this._wt.wtViewport.columnsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.columnIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getLastRenderedColumn(), -1);\n  }\n\n  /**\n   * Returns the first fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstFullyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstVisibleRow());\n  }\n\n  /**\n   * Returns the last fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastFullyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastVisibleRow());\n  }\n\n  /**\n   * Returns the first fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstFullyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstVisibleColumn());\n  }\n\n  /**\n   * Returns the last fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastFullyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastVisibleColumn());\n  }\n\n  /**\n   * Returns the first partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstPartiallyVisibleRow());\n  }\n\n  /**\n   * Returns the last partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastPartiallyVisibleRow());\n  }\n\n  /**\n   * Returns the first partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstPartiallyVisibleColumn());\n  }\n\n  /**\n   * Returns the last partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastPartiallyVisibleColumn());\n  }\n\n  /**\n   * Returns the total count of the rendered column headers.\n   *\n   * @returns {number}\n   */\n  getColumnHeadersCount() {\n    return this.#columnHeadersCount;\n  }\n\n  /**\n   * Returns the total count of the rendered row headers.\n   *\n   * @returns {number}\n   */\n  getRowHeadersCount() {\n    return this.#rowHeadersCount;\n  }\n\n  /**\n   * Returns the table's viewport width. When the table has defined the size of the container,\n   * and the columns do not fill the entire viewport, the viewport width is equal to the sum of\n   * the columns' widths.\n   *\n   * @returns {number}\n   */\n  getViewportWidth() {\n    return this._wt.wtViewport.getViewportWidth();\n  }\n\n  /**\n   * Returns the table's total width including the scrollbar width.\n   *\n   * @returns {number}\n   */\n  getWorkspaceWidth() {\n    return this._wt.wtViewport.getWorkspaceWidth();\n  }\n\n  /**\n   * Returns the table's viewport height. When the table has defined the size of the container,\n   * and the rows do not fill the entire viewport, the viewport height is equal to the sum of\n   * the rows' heights.\n   *\n   * @returns {number}\n   */\n  getViewportHeight() {\n    return this._wt.wtViewport.getViewportHeight();\n  }\n\n  /**\n   * Returns the table's total height including the scrollbar height.\n   *\n   * @returns {number}\n   */\n  getWorkspaceHeight() {\n    return this._wt.wtViewport.getWorkspaceHeight();\n  }\n\n  /**\n   * Checks to what overlay the provided element belongs.\n   *\n   * @param {HTMLElement} element The DOM element to check.\n   * @returns {'master'|'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'}\n   */\n  getElementOverlayName(element) {\n    return (this._wt.wtOverlays.getParentOverlay(element) ?? this._wt).wtTable.name;\n  }\n\n  /**\n   * Gets the overlay instance by its name.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'} overlayName The overlay name.\n   * @returns {Overlay | null}\n   */\n  getOverlayByName(overlayName) {\n    return this._wt.getOverlayByName(overlayName);\n  }\n\n  /**\n   * Checks if the table is visible or not.\n   *\n   * @returns {boolean}\n   */\n  isVisible() {\n    return this._wt.wtTable.isVisible();\n  }\n\n  /**\n   * Return the value of the `aria-colcount` attribute.\n   *\n   * @returns {number} The value of the `aria-colcount` attribute.\n   */\n  #getAriaColcount() {\n    return parseInt(this.hot.rootElement.getAttribute(A11Y_COLCOUNT()[0]), 10);\n  }\n\n  /**\n   * Update the `aria-colcount` attribute by the provided value.\n   *\n   * @param {number} delta The number of columns to add or remove to the aria tag.\n   */\n  #updateAriaColcount(delta) {\n    const colCount = this.#getAriaColcount() + delta;\n\n    setAttribute(this.hot.rootElement, ...A11Y_COLCOUNT(colCount));\n  }\n\n  /**\n   * Destroys internal WalkOnTable's instance. Detaches all of the bonded listeners.\n   *\n   * @private\n   */\n  destroy() {\n    this._wt.destroy();\n    this.eventManager.destroy();\n  }\n}\n\nexport default TableView;\n","import {\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n  DEFAULT_ROW_HEIGHT,\n  DEFAULT_COLUMN_WIDTH,\n} from './calculator';\n\nimport CellCoords from './cell/coords';\nimport CellRange from './cell/range';\n\nimport Walkontable from './facade/core';\nimport {\n  Selection,\n  ACTIVE_HEADER_TYPE,\n  AREA_TYPE,\n  FOCUS_TYPE,\n  FILL_TYPE,\n  HEADER_TYPE,\n  ROW_TYPE,\n  COLUMN_TYPE,\n  CUSTOM_SELECTION_TYPE,\n} from './selection';\nimport * as Renderer from './renderer';\nimport { OrderView, SharedOrderView } from './utils/orderView';\nimport { getListenersCounter } from '../../../eventManager';\n\nexport {\n  DEFAULT_ROW_HEIGHT,\n  DEFAULT_COLUMN_WIDTH,\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n\n  CellCoords,\n  CellRange,\n\n  Walkontable as default,\n  Walkontable as Core,\n\n  Selection,\n  ACTIVE_HEADER_TYPE as HIGHLIGHT_ACTIVE_HEADER_TYPE,\n  AREA_TYPE as HIGHLIGHT_AREA_TYPE,\n  FOCUS_TYPE as HIGHLIGHT_FOCUS_TYPE,\n  FILL_TYPE as HIGHLIGHT_FILL_TYPE,\n  HEADER_TYPE as HIGHLIGHT_HEADER_TYPE,\n  ROW_TYPE as HIGHLIGHT_ROW_TYPE,\n  COLUMN_TYPE as HIGHLIGHT_COLUMN_TYPE,\n  CUSTOM_SELECTION_TYPE as HIGHLIGHT_CUSTOM_SELECTION_TYPE,\n\n  Renderer,\n  OrderView,\n  SharedOrderView,\n\n  getListenersCounter\n};\n","import { FullyVisibleColumnsCalculationType } from './calculationType/fullyVisibleColumns';\nimport { FullyVisibleRowsCalculationType } from './calculationType/fullyVisibleRows';\nimport { PartiallyVisibleColumnsCalculationType } from './calculationType/partiallyVisibleColumns';\nimport { PartiallyVisibleRowsCalculationType } from './calculationType/partiallyVisibleRows';\nimport { RenderedAllColumnsCalculationType } from './calculationType/renderedAllColumns';\nimport { RenderedAllRowsCalculationType } from './calculationType/renderedAllRows';\nimport { RenderedColumnsCalculationType } from './calculationType/renderedColumns';\nimport { RenderedRowsCalculationType } from './calculationType/renderedRows';\nimport { ViewportColumnsCalculator, DEFAULT_WIDTH } from './viewportColumns';\nimport { ViewportRowsCalculator, DEFAULT_HEIGHT } from './viewportRows';\n\nexport {\n  DEFAULT_HEIGHT as DEFAULT_ROW_HEIGHT,\n  DEFAULT_WIDTH as DEFAULT_COLUMN_WIDTH,\n  FullyVisibleColumnsCalculationType,\n  FullyVisibleRowsCalculationType,\n  PartiallyVisibleColumnsCalculationType,\n  PartiallyVisibleRowsCalculationType,\n  RenderedAllColumnsCalculationType,\n  RenderedAllRowsCalculationType,\n  RenderedColumnsCalculationType,\n  RenderedRowsCalculationType,\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n};\n","/**\n * @class FullyVisibleColumnsCalculationType\n */\nexport class FullyVisibleColumnsCalculationType {\n  /**\n   * Total number of fully visible columns in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The column index of the first fully visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  startColumn = null;\n  /**\n   * The column index of the last fully visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  endColumn = null;\n  /**\n   * Position of the first fully visible column (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the column.\n   *\n   * @param {number} column The column index.\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(column, viewportCalculator) {\n    const {\n      totalCalculatedWidth,\n      zeroBasedScrollOffset,\n      viewportWidth,\n      columnWidth,\n    } = viewportCalculator;\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n\n    if (\n      totalCalculatedWidth >= zeroBasedScrollOffset &&\n      totalCalculatedWidth + columnWidth <= zeroBasedScrollOffset + compensatedViewportWidth\n    ) {\n      if (this.startColumn === null || this.startColumn === undefined) {\n        this.startColumn = column;\n      }\n\n      this.endColumn = column;\n    }\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportWidth,\n      inlineStartOffset,\n      zeroBasedScrollOffset,\n      totalColumns,\n      needReverse,\n      startPositions,\n      columnWidth,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last column and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with columns\n    if (this.endColumn === totalColumns - 1 && needReverse) {\n      this.startColumn = this.endColumn;\n\n      while (this.startColumn > 0) {\n        const calculatedViewportHeight = startPositions[this.endColumn] +\n          columnWidth -\n          startPositions[this.startColumn - 1];\n\n        if (calculatedViewportHeight <= viewportWidth) {\n          this.startColumn -= 1;\n        }\n\n        if (calculatedViewportHeight >= viewportWidth) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startColumn] ?? null;\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n    const mostRightScrollOffset = scrollOffset + viewportWidth - compensatedViewportWidth;\n    const inlineStartColumnOffset = this.startColumn === null ? 0 : viewportCalculator.getColumnWidth(this.startColumn);\n\n    if (\n      // the table is to the left of the viewport\n      (\n        mostRightScrollOffset < (-1) * inlineStartOffset ||\n        scrollOffset > startPositions.at(-1)\n      ) ||\n      // the table is to the right of the viewport\n      (((-1) * scrollOffset) - viewportWidth > (-1) * inlineStartColumnOffset)\n    ) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalColumns < this.endColumn) {\n      this.endColumn = totalColumns - 1;\n    }\n\n    if (this.startColumn !== null) {\n      this.count = this.endColumn - this.startColumn + 1;\n    }\n  }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.at` method\n// https://tc39.es/ecma262/#sec-array.prototype.at\n$({ target: 'Array', proto: true }, {\n  at: function at(index) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var relativeIndex = toIntegerOrInfinity(index);\n    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n    return (k < 0 || k >= len) ? undefined : O[k];\n  }\n});\n\naddToUnscopables('at');\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\n\nvar charAt = uncurryThis(''.charAt);\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-string-prototype-at -- safe\n  return '𠮷'.at(-2) !== '\\uD842';\n});\n\n// `String.prototype.at` method\n// https://tc39.es/ecma262/#sec-string.prototype.at\n$({ target: 'String', proto: true, forced: FORCED }, {\n  at: function at(index) {\n    var S = toString(requireObjectCoercible(this));\n    var len = S.length;\n    var relativeIndex = toIntegerOrInfinity(index);\n    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n    return (k < 0 || k >= len) ? undefined : charAt(S, k);\n  }\n});\n","/**\n * @class FullyVisibleRowsCalculationType\n */\nexport class FullyVisibleRowsCalculationType {\n  /**\n   * Total number of fully visible rows in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The row index of the first fully visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  startRow = null;\n  /**\n   * The row index of the last fully visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  endRow = null;\n  /**\n   * Position of the first fully visible row (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the row.\n   *\n   * @param {number} row The row index.\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(row, viewportCalculator) {\n    const {\n      totalCalculatedHeight,\n      zeroBasedScrollOffset,\n      innerViewportHeight,\n      rowHeight,\n    } = viewportCalculator;\n\n    if (\n      totalCalculatedHeight >= zeroBasedScrollOffset &&\n      totalCalculatedHeight + rowHeight <= innerViewportHeight\n    ) {\n      if (this.startRow === null) {\n        this.startRow = row;\n      }\n\n      this.endRow = row;\n    }\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportHeight,\n      horizontalScrollbarHeight,\n      totalRows,\n      needReverse,\n      startPositions,\n      rowHeight,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last row and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with rows\n    if (this.endRow === totalRows - 1 && needReverse) {\n      this.startRow = this.endRow;\n\n      while (this.startRow > 0) {\n        const calculatedViewportHeight = startPositions[this.endRow] +\n          rowHeight -\n          startPositions[this.startRow - 1];\n\n        if (calculatedViewportHeight <= viewportHeight - horizontalScrollbarHeight) {\n          this.startRow -= 1;\n        }\n\n        if (calculatedViewportHeight >= viewportHeight - horizontalScrollbarHeight) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startRow] ?? null;\n\n    const mostBottomScrollOffset = scrollOffset + viewportHeight - horizontalScrollbarHeight;\n    const topRowOffset = this.startRow === null ? 0 : viewportCalculator.getRowHeight(this.startRow);\n\n    if (mostBottomScrollOffset < topRowOffset || scrollOffset > startPositions.at(-1)) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalRows < this.endRow) {\n      this.endRow = totalRows - 1;\n    }\n\n    if (this.startRow !== null) {\n      this.count = this.endRow - this.startRow + 1;\n    }\n  }\n}\n","/**\n * @class PartiallyVisibleColumnsCalculationType\n */\nexport class PartiallyVisibleColumnsCalculationType {\n  /**\n   * Total number of partially visible columns in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The column index of the first partially visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  startColumn = null;\n  /**\n   * The column index of the last partially visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  endColumn = null;\n  /**\n   * Position of the first partially visible column (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the column.\n   *\n   * @param {number} column The column index.\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(column, viewportCalculator) {\n    const {\n      totalCalculatedWidth,\n      zeroBasedScrollOffset,\n      viewportWidth,\n    } = viewportCalculator;\n\n    if (totalCalculatedWidth <= zeroBasedScrollOffset) {\n      this.startColumn = column;\n    }\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n\n    if (\n      totalCalculatedWidth >= zeroBasedScrollOffset &&\n      totalCalculatedWidth <= zeroBasedScrollOffset + compensatedViewportWidth\n    ) {\n      if (this.startColumn === null || this.startColumn === undefined) {\n        this.startColumn = column;\n      }\n    }\n\n    this.endColumn = column;\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportWidth,\n      inlineStartOffset,\n      zeroBasedScrollOffset,\n      totalColumns,\n      needReverse,\n      startPositions,\n      columnWidth,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last column and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with columns\n    if (this.endColumn === totalColumns - 1 && needReverse) {\n      this.startColumn = this.endColumn;\n\n      while (this.startColumn > 0) {\n        const calculatedViewportWidth = startPositions[this.endColumn] +\n          columnWidth -\n          startPositions[this.startColumn - 1];\n\n        this.startColumn -= 1;\n\n        if (calculatedViewportWidth > viewportWidth) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startColumn] ?? null;\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n    const mostRightScrollOffset = scrollOffset + viewportWidth - compensatedViewportWidth;\n\n    if (\n      // the table is to the left of the viewport\n      (\n        mostRightScrollOffset < (-1) * inlineStartOffset ||\n        scrollOffset > startPositions.at(-1) + columnWidth\n      ) ||\n      // the table is to the right of the viewport\n      (((-1) * scrollOffset) - viewportWidth > 0)\n    ) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalColumns < this.endColumn) {\n      this.endColumn = totalColumns - 1;\n    }\n\n    if (this.startColumn !== null) {\n      this.count = this.endColumn - this.startColumn + 1;\n    }\n  }\n}\n","/**\n * @class PartiallyVisibleRowsCalculationType\n */\nexport class PartiallyVisibleRowsCalculationType {\n  /**\n   * Total number of partially visible rows in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The row index of the first partially visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  startRow = null;\n  /**\n   * The row index of the last partially visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  endRow = null;\n  /**\n   * Position of the first partially visible row (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the row.\n   *\n   * @param {number} row The row index.\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(row, viewportCalculator) {\n    const {\n      totalCalculatedHeight,\n      zeroBasedScrollOffset,\n      innerViewportHeight,\n    } = viewportCalculator;\n\n    if (totalCalculatedHeight <= zeroBasedScrollOffset) {\n      this.startRow = row;\n    }\n\n    if (\n      totalCalculatedHeight >= zeroBasedScrollOffset &&\n      totalCalculatedHeight <= innerViewportHeight\n    ) {\n      if (this.startRow === null) {\n        this.startRow = row;\n      }\n    }\n\n    this.endRow = row;\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportHeight,\n      horizontalScrollbarHeight,\n      totalRows,\n      needReverse,\n      startPositions,\n      rowHeight,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last row and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with rows\n    if (this.endRow === totalRows - 1 && needReverse) {\n      this.startRow = this.endRow;\n\n      while (this.startRow > 0) {\n        const calculatedViewportHeight = startPositions[this.endRow] +\n          rowHeight -\n          startPositions[this.startRow - 1];\n\n        this.startRow -= 1;\n\n        if (calculatedViewportHeight >= viewportHeight - horizontalScrollbarHeight) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startRow] ?? null;\n\n    const mostBottomScrollOffset = scrollOffset + viewportHeight - horizontalScrollbarHeight;\n\n    if (mostBottomScrollOffset < 0 || scrollOffset > startPositions.at(-1) + rowHeight) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalRows < this.endRow) {\n      this.endRow = totalRows - 1;\n    }\n\n    if (this.startRow !== null) {\n      this.count = this.endRow - this.startRow + 1;\n    }\n  }\n}\n","/**\n * @typedef {object} RenderedAllColumnsCalculatorOptions\n * @property {number} totalColumns Total number of columns.\n */\n/**\n * Holds all calculations needed to perform the rendering of all columns.\n *\n * @class RenderedAllColumnsCalculationType\n */\nexport class RenderedAllColumnsCalculationType {\n  /**\n   * Number of rendered/visible columns.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * Index of the first rendered/visible column.\n   *\n   * @type {number}\n   */\n  startColumn = 0;\n  /**\n   * Index of the last rendered/visible column.\n   *\n   * @type {number}\n   */\n  endColumn = 0;\n  /**\n   * Position of the first rendered/visible column (in px).\n   *\n   * @type {number}\n   */\n  startPosition = 0;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = true;\n\n  /**\n   * Initializes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  initialize({ totalColumns }) {\n    this.count = totalColumns;\n    this.endColumn = this.count - 1;\n  }\n\n  /**\n   * Processes the column.\n   */\n  process() {}\n\n  /**\n   * Finalizes the calculation.\n   */\n  finalize() {}\n}\n","/**\n * @typedef {object} RenderedAllRowsCalculatorOptions\n * @property {number} totalRows Total number of rows.\n */\n/**\n * Holds all calculations needed to perform the rendering of all rows.\n *\n * @class RenderedAllRowsCalculationType\n */\nexport class RenderedAllRowsCalculationType {\n  /**\n   * Number of rendered/visible rows.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * Index of the first rendered/visible row.\n   *\n   * @type {number}\n   */\n  startRow = 0;\n  /**\n   * Index of the last rendered/visible row.\n   *\n   * @type {number}\n   */\n  endRow = 0;\n  /**\n   * Position of the first rendered/visible row (in px).\n   *\n   * @type {number}\n   */\n  startPosition = 0;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = true;\n\n  /**\n   * Initializes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  initialize({ totalRows }) {\n    this.count = totalRows;\n    this.endRow = this.count - 1;\n  }\n\n  /**\n   * Processes the row.\n   */\n  process() {}\n\n  /**\n   * Finalizes the calculation.\n   */\n  finalize() {}\n}\n","import { PartiallyVisibleColumnsCalculationType } from './partiallyVisibleColumns';\n\n/**\n * @class RenderedColumnsCalculationType\n */\nexport class RenderedColumnsCalculationType extends PartiallyVisibleColumnsCalculationType {\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    super.finalize(viewportCalculator);\n\n    const {\n      overrideFn,\n      totalColumns,\n      startPositions,\n    } = viewportCalculator;\n\n    if (this.startColumn !== null && typeof overrideFn === 'function') {\n      overrideFn(this);\n    }\n\n    if (this.startColumn < 0) {\n      this.startColumn = 0;\n    }\n\n    this.startPosition = startPositions[this.startColumn] ?? null;\n\n    if (totalColumns < this.endColumn) {\n      this.endColumn = totalColumns - 1;\n    }\n\n    if (this.startColumn !== null) {\n      this.count = this.endColumn - this.startColumn + 1;\n    }\n  }\n}\n","import { PartiallyVisibleRowsCalculationType } from './partiallyVisibleRows';\n\n/**\n * @class RenderedRowsCalculationType\n */\nexport class RenderedRowsCalculationType extends PartiallyVisibleRowsCalculationType {\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    super.finalize(viewportCalculator);\n\n    const {\n      overrideFn,\n      totalRows,\n      startPositions,\n    } = viewportCalculator;\n\n    if (this.startRow !== null && typeof overrideFn === 'function') {\n      overrideFn(this);\n    }\n\n    if (this.startRow < 0) {\n      this.startRow = 0;\n    }\n\n    this.startPosition = startPositions[this.startRow] ?? null;\n\n    if (totalRows < this.endRow) {\n      this.endRow = totalRows - 1;\n    }\n\n    if (this.startRow !== null) {\n      this.count = this.endRow - this.startRow + 1;\n    }\n  }\n}\n","import { ViewportBaseCalculator } from './viewportBase';\n\nexport const DEFAULT_WIDTH = 50;\n\n/**\n * @typedef {object} ViewportColumnsCalculatorOptions\n * @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.\n * @property {number} viewportWidth Width of the viewport.\n * @property {number} scrollOffset Current horizontal scroll position of the viewport.\n * @property {number} totalColumns Total number of columns.\n * @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).\n * @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.\n * @property {string} inlineStartOffset Inline-start offset of the parent container.\n */\n/**\n * Calculates indexes of columns to render OR columns that are visible OR partially visible in the viewport.\n *\n * @class ViewportColumnsCalculator\n */\nexport class ViewportColumnsCalculator extends ViewportBaseCalculator {\n  viewportWidth = 0;\n  scrollOffset = 0;\n  zeroBasedScrollOffset = 0;\n  totalColumns = 0;\n  columnWidthFn = null;\n  columnWidth = 0;\n  overrideFn = null;\n  inlineStartOffset = 0;\n  totalCalculatedWidth = 0;\n  startPositions = [];\n  needReverse = true;\n\n  /**\n   * @param {ViewportColumnsCalculatorOptions} options Object with all options specified for column viewport calculation.\n   */\n  constructor({\n    calculationTypes,\n    viewportWidth,\n    scrollOffset,\n    totalColumns,\n    columnWidthFn,\n    overrideFn,\n    inlineStartOffset,\n  }) {\n    super(calculationTypes);\n    this.viewportWidth = viewportWidth;\n    this.scrollOffset = scrollOffset;\n    this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);\n    this.totalColumns = totalColumns;\n    this.columnWidthFn = columnWidthFn;\n    this.overrideFn = overrideFn;\n    this.inlineStartOffset = inlineStartOffset;\n\n    this.calculate();\n  }\n\n  /**\n   * Calculates viewport.\n   */\n  calculate() {\n    this._initialize(this);\n\n    for (let column = 0; column < this.totalColumns; column++) {\n      this.columnWidth = this.getColumnWidth(column);\n\n      this._process(column, this);\n\n      this.startPositions.push(this.totalCalculatedWidth);\n      this.totalCalculatedWidth += this.columnWidth;\n\n      if (this.totalCalculatedWidth >= this.zeroBasedScrollOffset + this.viewportWidth) {\n        this.needReverse = false;\n        break;\n      }\n    }\n\n    this._finalize(this);\n  }\n\n  /**\n   * Gets the column width at the specified column index.\n   *\n   * @param {number} column Column index.\n   * @returns {number}\n   */\n  getColumnWidth(column) {\n    const width = this.columnWidthFn(column);\n\n    if (isNaN(width)) {\n      return DEFAULT_WIDTH;\n    }\n\n    return width;\n  }\n}\n","/**\n * @typedef {object} ColumnsCalculationType\n * @property {number | null} startColumn The column index of the first column in the viewport.\n * @property {number | null} endColumn The column index of the last column in the viewport.\n * @property {number} count Total number of columns.\n * @property {number | null} startPosition Position of the first fully column (in px).\n * @property {boolean} isVisibleInTrimmingContainer Determines if the viewport is visible in the trimming container.\n */\n/**\n * @typedef {object} RowsCalculationType\n * @property {number | null} startRow The row index of the first row in the viewport.\n * @property {number | null} endRow The row index of the last row in the viewport.\n * @property {number} count Total number of rows.\n * @property {number | null} startPosition Position of the first fully row (in px).\n * @property {boolean} isVisibleInTrimmingContainer Determines if the viewport is visible in the trimming container.\n */\n/**\n * @class ViewportBaseCalculator\n */\nexport class ViewportBaseCalculator {\n  /**\n   * The calculation types to be performed.\n   *\n   * @type {Array}\n   */\n  calculationTypes = [];\n  /**\n   * The calculation results.\n   *\n   * @type {Map<string, ColumnsCalculationType | RowsCalculationType>}\n   */\n  calculationResults = new Map();\n\n  constructor(calculationTypes) {\n    this.calculationTypes = calculationTypes;\n  }\n\n  /**\n   * Initializes all calculators (triggers all calculators before calculating the rows/columns sizes).\n   *\n   * @param {*} context The context object (rows or columns viewport calculator).\n   */\n  _initialize(context) {\n    this.calculationTypes.forEach(([id, calculator]) => {\n      this.calculationResults.set(id, calculator);\n      calculator.initialize(context);\n    });\n  }\n\n  /**\n   * Processes the row/column at the given index.\n   *\n   * @param {number} index The index of the row/column.\n   * @param {*} context The context object (rows or columns viewport calculator).\n   */\n  _process(index, context) {\n    this.calculationTypes.forEach(([, calculator]) => calculator.process(index, context));\n  }\n\n  /**\n   * Finalizes all calculators (triggers all calculators after calculating the rows/columns sizes).\n   *\n   * @param {*} context The context object (rows or columns viewport calculator).\n   */\n  _finalize(context) {\n    this.calculationTypes.forEach(([, calculator]) => calculator.finalize(context));\n  }\n\n  /**\n   * Gets the results for the given calculator.\n   *\n   * @param {string} calculatorId The id of the calculator.\n   * @returns {ColumnsCalculationType | RowsCalculationType}\n   */\n  getResultsFor(calculatorId) {\n    return this.calculationResults.get(calculatorId);\n  }\n}\n","import { ViewportBaseCalculator } from './viewportBase';\n\nexport const DEFAULT_HEIGHT = 23;\n\n/**\n * @typedef {object} ViewportRowsCalculatorOptions\n * @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.\n * @property {number} viewportHeight Height of the viewport.\n * @property {number} scrollOffset Current vertical scroll position of the viewport.\n * @property {number} totalRows Total number of rows.\n * @property {Function} rowHeightFn Function that returns the height of the row at a given index (in px).\n * @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.\n * @property {number} horizontalScrollbarHeight The scrollbar height.\n */\n/**\n * Calculates indexes of rows to render OR rows that are visible OR partially visible in the viewport.\n *\n * @class ViewportRowsCalculator\n */\nexport class ViewportRowsCalculator extends ViewportBaseCalculator {\n  viewportHeight = 0;\n  scrollOffset = 0;\n  zeroBasedScrollOffset = 0;\n  totalRows = 0;\n  rowHeightFn = null;\n  rowHeight = 0;\n  overrideFn = null;\n  horizontalScrollbarHeight = 0;\n  innerViewportHeight = 0;\n  totalCalculatedHeight = 0;\n  startPositions = [];\n  needReverse = true;\n\n  /**\n   * @param {ViewportRowsCalculatorOptions} options Object with all options specified for row viewport calculation.\n   */\n  constructor({\n    calculationTypes,\n    viewportHeight,\n    scrollOffset,\n    totalRows,\n    rowHeightFn,\n    overrideFn,\n    horizontalScrollbarHeight,\n  }) {\n    super(calculationTypes);\n    this.viewportHeight = viewportHeight;\n    this.scrollOffset = scrollOffset;\n    this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);\n    this.totalRows = totalRows;\n    this.rowHeightFn = rowHeightFn;\n    this.overrideFn = overrideFn;\n    this.horizontalScrollbarHeight = horizontalScrollbarHeight ?? 0;\n    this.innerViewportHeight = this.zeroBasedScrollOffset + this.viewportHeight - this.horizontalScrollbarHeight;\n\n    this.calculate();\n  }\n\n  /**\n   * Calculates viewport.\n   */\n  calculate() {\n    this._initialize(this);\n\n    for (let row = 0; row < this.totalRows; row++) {\n      this.rowHeight = this.getRowHeight(row);\n\n      this._process(row, this);\n\n      this.startPositions.push(this.totalCalculatedHeight);\n      this.totalCalculatedHeight += this.rowHeight;\n\n      if (this.totalCalculatedHeight >= this.innerViewportHeight) {\n        this.needReverse = false;\n        break;\n      }\n    }\n\n    this._finalize(this);\n  }\n\n  /**\n   * Gets the row height at the specified row index.\n   *\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  getRowHeight(row) {\n    const rowHeight = this.rowHeightFn(row);\n\n    if (isNaN(rowHeight)) {\n      return DEFAULT_HEIGHT;\n    }\n\n    return rowHeight;\n  }\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n *\n * The `CellCoords` class holds the coordinates (`row`, `col`) of a single cell.\n *\n * It also contains methods for validating the coordinates\n * and retrieving them as an object.\n *\n * To import the `CellCoords` class:\n *\n * ```js\n * import Handsontable, { CellCoords } from '/handsontable';\n *\n * // or, using modules\n * import Handsontable, { CellCoords } from '/handsontable/base';\n * ```\n */\nclass CellCoords {\n  /**\n   * A visual row index.\n   *\n   * @type {number}\n   */\n  row = null;\n  /**\n   * A visual column index.\n   *\n   * @type {number}\n   */\n  col = null;\n  /**\n   * A flag which determines if the coordinates run in RTL mode.\n   *\n   * @type {boolean}\n   */\n  #isRtl = false;\n\n  constructor(row, column, isRtl = false) {\n    this.#isRtl = isRtl;\n\n    if (typeof row !== 'undefined' && typeof column !== 'undefined') {\n      this.row = row;\n      this.col = column;\n    }\n  }\n\n  /**\n   * Checks if the coordinates in your `CellCoords` instance are valid\n   * in the context of given table parameters.\n   *\n   * The `row` index:\n   * - Must be an integer.\n   * - Must be higher than the number of column headers in the table.\n   * - Must be lower than the total number of rows in the table.\n   *\n   * The `col` index:\n   * - Must be an integer.\n   * - Must be higher than the number of row headers in the table.\n   * - Must be lower than the total number of columns in the table.\n   *\n   * @param {object} [tableParams] An object with a defined table size.\n   * @param {number} [tableParams.countRows=0] The total number of rows.\n   * @param {number} [tableParams.countCols=0] The total number of columns.\n   * @param {number} [tableParams.countRowHeaders=0] A number of row headers.\n   * @param {number} [tableParams.countColHeaders=0] A number of column headers.\n   * @returns {boolean} `true`: The coordinates are valid.\n   */\n  isValid(tableParams) {\n    const { countRows, countCols, countRowHeaders, countColHeaders } = {\n      countRows: 0,\n      countCols: 0,\n      countRowHeaders: 0,\n      countColHeaders: 0,\n      ...tableParams,\n    };\n\n    if (!Number.isInteger(this.row) || !Number.isInteger(this.col)) {\n      return false;\n    }\n\n    if (this.row < -countColHeaders || this.col < -countRowHeaders) {\n      return false;\n    }\n\n    if (this.row >= countRows || this.col >= countCols) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Checks if another set of coordinates (`coords`)\n   * is equal to the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} coords Coordinates to check.\n   * @returns {boolean}\n   */\n  isEqual(coords) {\n    if (coords === this) {\n      return true;\n    }\n\n    return this.row === coords.row && this.col === coords.col;\n  }\n\n  /**\n   * Checks if the coordinates point to the headers range. If one of the axis (row or col) point to\n   * the header (negative value) then method returns `true`.\n   *\n   * @returns {boolean}\n   */\n  isHeader() {\n    return !this.isCell();\n  }\n\n  /**\n   * Checks if the coordinates point to the cells range. If all axis (row and col) point to\n   * the cell (positive value) then method returns `true`.\n   *\n   * @returns {boolean}\n   */\n  isCell() {\n    return this.row >= 0 && this.col >= 0;\n  }\n\n  /**\n   * Checks if the coordinates runs in RTL mode.\n   *\n   * @returns {boolean}\n   */\n  isRtl() {\n    return this.#isRtl;\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is south-east of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isSouthEastOf(testedCoords) {\n    return this.row >= testedCoords.row &&\n      (this.#isRtl ? this.col <= testedCoords.col : this.col >= testedCoords.col);\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is north-west of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isNorthWestOf(testedCoords) {\n    return this.row <= testedCoords.row &&\n      (this.#isRtl ? this.col >= testedCoords.col : this.col <= testedCoords.col);\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is south-west of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isSouthWestOf(testedCoords) {\n    return this.row >= testedCoords.row &&\n      (this.#isRtl ? this.col >= testedCoords.col : this.col <= testedCoords.col);\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is north-east of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isNorthEastOf(testedCoords) {\n    return this.row <= testedCoords.row &&\n      (this.#isRtl ? this.col <= testedCoords.col : this.col >= testedCoords.col);\n  }\n\n  /**\n   * Normalizes the coordinates in your `CellCoords` instance to the nearest valid position.\n   *\n   * Coordinates that point to headers (negative values) are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  normalize() {\n    this.row = this.row === null ? this.row : Math.max(this.row, 0);\n    this.col = this.col === null ? this.col : Math.max(this.col, 0);\n\n    return this;\n  }\n\n  /**\n   * Assigns the coordinates from another `CellCoords` instance (or compatible literal object)\n   * to your `CellCoords` instance.\n   *\n   * @param {CellCoords | { row: number | undefined, col: number | undefined }} coords The CellCoords\n   * instance or compatible literal object.\n   * @returns {CellCoords}\n   */\n  assign(coords) {\n    if (Number.isInteger(coords?.row)) {\n      this.row = coords.row;\n    }\n    if (Number.isInteger(coords?.col)) {\n      this.col = coords.col;\n    }\n\n    if (coords instanceof CellCoords) {\n      this.#isRtl = coords.isRtl();\n    }\n\n    return this;\n  }\n\n  /**\n   * Clones your `CellCoords` instance.\n   *\n   * @returns {CellCoords}\n   */\n  clone() {\n    return new CellCoords(this.row, this.col, this.#isRtl);\n  }\n\n  /**\n   * Converts your `CellCoords` instance into an object literal with `row` and `col` properties.\n   *\n   * @returns {{row: number, col: number}} An object literal with `row` and `col` properties.\n   */\n  toObject() {\n    return {\n      row: this.row,\n      col: this.col,\n    };\n  }\n}\n\nexport default CellCoords;\n","import CellCoords from './../cell/coords';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n *\n * The `CellRange` class holds a set of cell coordinates ([`CellCoords`](@/api/cellCoords.md) instances)\n * that form a [selection range](@/guides/cell-features/selection/selection.md#select-ranges).\n *\n * A single `CellRange` instance represents a single unit of selection\n * that contains either a single cell or multiple adjacent cells.\n *\n * To import the `CellRange` class:\n *\n * ```js\n * import Handsontable, { CellRange } from '/handsontable';\n *\n * // or, using modules\n * import Handsontable, { CellRange } from '/handsontable/base';\n * ```\n */\nclass CellRange {\n  /**\n   * Used to draw bold border around a cell where selection was started and to edit the cell\n   * when you press Enter. The highlight cannot point to headers (negative values) so its\n   * coordinates object is normalized while assigning.\n   *\n   * @private\n   * @type {CellCoords}\n   */\n  highlight = null;\n  /**\n   * Usually the same as highlight, but in Excel there is distinction - one can change\n   * highlight within a selection.\n   *\n   * @private\n   * @type {CellCoords}\n   */\n  from = null;\n  /**\n   * End selection.\n   *\n   * @private\n   * @type {CellCoords}\n   */\n  to = null;\n  /**\n   * @type {boolean}\n   */\n  #isRtl = false;\n\n  constructor(highlight, from = highlight, to = highlight, isRtl = false) {\n    this.highlight = highlight.clone();\n    this.from = from.clone();\n    this.to = to.clone();\n    this.#isRtl = isRtl;\n  }\n\n  /**\n   * Highlights cell selection at the `coords` coordinates.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   * @returns {CellRange}\n   */\n  setHighlight(coords) {\n    this.highlight = coords.clone();\n\n    return this;\n  }\n\n  /**\n   * Sets the `coords` coordinates as the start of your range.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   * @returns {CellRange}\n   */\n  setFrom(coords) {\n    this.from = coords.clone();\n\n    return this;\n  }\n\n  /**\n   * Sets the `coords` coordinates as the end of your range.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   * @returns {CellRange}\n   */\n  setTo(coords) {\n    this.to = coords.clone();\n\n    return this;\n  }\n\n  /**\n   * Checks if the coordinates in your `CellRange` instance are valid\n   * in the context of given table parameters.\n   *\n   * See the [`isValid()`](@/api/cellCoords.md#isvalid) method of the [`CellCoords`](@/api/cellCoords.md) class.\n   *\n   * @param {object} tableParams An object with a defined table size.\n   * @param {number} tableParams.countRows The total number of rows.\n   * @param {number} tableParams.countCols The total number of columns.\n   * @param {number} tableParams.countRowHeaders A number of row headers.\n   * @param {number} tableParams.countColHeaders A number of column headers.\n   * @returns {boolean}\n   */\n  isValid(tableParams) {\n    return this.from.isValid(tableParams) && this.to.isValid(tableParams);\n  }\n\n  /**\n   * Checks if your range is just a single cell or header.\n   *\n   * @returns {boolean}\n   */\n  isSingle() {\n    return this.isSingleCell() || this.isSingleHeader();\n  }\n\n  /**\n   * Checks if your range is just a single cell.\n   *\n   * @returns {boolean}\n   */\n  isSingleCell() {\n    return this.from.row >= 0 && this.from.row === this.to.row &&\n           this.from.col >= 0 && this.from.col === this.to.col;\n  }\n\n  /**\n   * Checks if your range is just a single header.\n   *\n   * @returns {boolean}\n   */\n  isSingleHeader() {\n    return (this.from.row < 0 || this.from.col < 0) && this.from.row === this.to.row &&\n           this.from.col === this.to.col;\n  }\n\n  /**\n   * Checks if your range covers only headers range (negative coordinates, without any cells).\n   *\n   * @returns {boolean}\n   */\n  isHeader() {\n    if (this.from.isHeader() && this.to.isHeader()) {\n      return true;\n    }\n\n    return this.from.col < 0 && this.to.col < 0 || this.from.row < 0 && this.to.row < 0;\n  }\n\n  /**\n   * Checks if your range overlaps headers range (negative coordinates).\n   *\n   * @returns {boolean}\n   */\n  containsHeaders() {\n    return this.from.isHeader() || this.to.isHeader();\n  }\n\n  /**\n   * Returns the height of your range (as a number of rows, including row headers).\n   *\n   * @returns {number}\n   */\n  getOuterHeight() {\n    return Math.max(this.from.row, this.to.row) - Math.min(this.from.row, this.to.row) + 1;\n  }\n\n  /**\n   * Returns the width of your range (as a number of columns, including column headers).\n   *\n   * @returns {number}\n   */\n  getOuterWidth() {\n    return Math.max(this.from.col, this.to.col) - Math.min(this.from.col, this.to.col) + 1;\n  }\n\n  /**\n   * Returns the height of your range (as a number of rows, excluding row headers).\n   *\n   * @returns {number}\n   */\n  getHeight() {\n    // if the selection contains only row headers, return 0\n    if (this.from.row < 0 && this.to.row < 0) {\n      return 0;\n    }\n\n    const fromRow = Math.max(this.from.row, 0);\n    const toRow = Math.max(this.to.row, 0);\n\n    return Math.max(fromRow, toRow) - Math.min(fromRow, toRow) + 1;\n  }\n\n  /**\n   * Returns the width of your range (as a number of columns, excluding column headers).\n   *\n   * @returns {number}\n   */\n  getWidth() {\n    // if the selection contains only column headers, return 0\n    if (this.from.col < 0 && this.to.col < 0) {\n      return 0;\n    }\n\n    const fromCol = Math.max(this.from.col, 0);\n    const toCol = Math.max(this.to.col, 0);\n\n    return Math.max(fromCol, toCol) - Math.min(fromCol, toCol) + 1;\n  }\n\n  /**\n   * Returns the number of cells within your range (excluding column and row headers).\n   *\n   * @returns {number}\n   */\n  getCellsCount() {\n    return this.getWidth() * this.getHeight();\n  }\n\n  /**\n   * Checks if another set of coordinates (`cellCoords`)\n   * is within the `from` and `to` coordinates of your range.\n   *\n   * @param {CellCoords} cellCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  includes(cellCoords) {\n    const { row, col } = cellCoords;\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n\n    return topStart.row <= row && bottomEnd.row >= row && topStart.col <= col && bottomEnd.col >= col;\n  }\n\n  /**\n   * Checks if another range (`cellRange`) is within your range.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  includesRange(cellRange) {\n    return this.includes(cellRange.getOuterTopStartCorner()) &&\n           this.includes(cellRange.getOuterBottomEndCorner());\n  }\n\n  /**\n   * Checks if another range (`cellRange`) is equal to your range.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  isEqual(cellRange) {\n    return (Math.min(this.from.row, this.to.row) === Math.min(cellRange.from.row, cellRange.to.row)) &&\n      (Math.max(this.from.row, this.to.row) === Math.max(cellRange.from.row, cellRange.to.row)) &&\n      (Math.min(this.from.col, this.to.col) === Math.min(cellRange.from.col, cellRange.to.col)) &&\n      (Math.max(this.from.col, this.to.col) === Math.max(cellRange.from.col, cellRange.to.col));\n  }\n\n  /**\n   * Checks if another range (`cellRange`) overlaps your range.\n   *\n   * Range A overlaps range B if the intersection of A and B (or B and A) is not empty.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  overlaps(cellRange) {\n    return cellRange.isSouthEastOf(this.getOuterTopLeftCorner()) &&\n           cellRange.isNorthWestOf(this.getOuterBottomRightCorner());\n  }\n\n  /**\n   * Checks if coordinates point is south-east of your range.\n   *\n   * @param {CellCoords} cellCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isSouthEastOf(cellCoords) {\n    return this.getOuterTopLeftCorner().isSouthEastOf(cellCoords) ||\n           this.getOuterBottomRightCorner().isSouthEastOf(cellCoords);\n  }\n\n  /**\n   * Checks if coordinates point is north-west of your range.\n   *\n   * @param {CellRange} cellCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isNorthWestOf(cellCoords) {\n    return this.getOuterTopLeftCorner().isNorthWestOf(cellCoords) ||\n           this.getOuterBottomRightCorner().isNorthWestOf(cellCoords);\n  }\n\n  /**\n   * Checks if another range (`cellRange`) overlaps your range horizontally.\n   *\n   * For example: returns `true` if the last column of your range is `5`\n   * and the first column of the `cellRange` range is `3`.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  isOverlappingHorizontally(cellRange) {\n    return (this.getOuterTopEndCorner().col >= cellRange.getOuterTopStartCorner().col &&\n            this.getOuterTopEndCorner().col <= cellRange.getOuterTopEndCorner().col) ||\n           (this.getOuterTopStartCorner().col <= cellRange.getOuterTopEndCorner().col &&\n            this.getOuterTopStartCorner().col >= cellRange.getOuterTopStartCorner().col);\n  }\n\n  /**\n   * Checks if another range (`cellRange`) overlaps your range vertically.\n   *\n   * For example: returns `true` if the last row of your range is `5`\n   * and the first row of the `cellRange` range is `3`.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  isOverlappingVertically(cellRange) {\n    return (this.getOuterBottomStartCorner().row >= cellRange.getOuterTopRightCorner().row &&\n            this.getOuterBottomStartCorner().row <= cellRange.getOuterBottomStartCorner().row) ||\n           (this.getOuterTopEndCorner().row <= cellRange.getOuterBottomStartCorner().row &&\n            this.getOuterTopEndCorner().row >= cellRange.getOuterTopRightCorner().row);\n  }\n\n  /**\n   * Adds a cell to your range, at `cellCoords` coordinates.\n   *\n   * The `cellCoords` coordinates must exceed a corner of your range.\n   *\n   * @param {CellCoords} cellCoords A new cell's coordinates.\n   * @returns {boolean}\n   */\n  expand(cellCoords) {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n\n    if (cellCoords.row < topStart.row || cellCoords.col < topStart.col ||\n        cellCoords.row > bottomEnd.row || cellCoords.col > bottomEnd.col) {\n      this.from = this._createCellCoords(Math.min(topStart.row, cellCoords.row),\n        Math.min(topStart.col, cellCoords.col));\n      this.to = this._createCellCoords(Math.max(bottomEnd.row, cellCoords.row),\n        Math.max(bottomEnd.col, cellCoords.col));\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Expand your range with another range (`expandingRange`).\n   *\n   * @param {CellRange} expandingRange A new range.\n   * @param {boolean} [changeDirection=true] If `true`, the direction of your range is changed to the direction\n   * of the `expandingRange` range.\n   * @returns {boolean}\n   */\n  expandByRange(expandingRange, changeDirection = true) {\n    if (this.includesRange(expandingRange) || !this.overlaps(expandingRange)) {\n      return false;\n    }\n\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n    const initialDirection = this.getDirection();\n\n    const expandingTopStart = expandingRange.getOuterTopStartCorner();\n    const expandingBottomEnd = expandingRange.getOuterBottomEndCorner();\n\n    const resultTopRow = Math.min(topStart.row, expandingTopStart.row);\n    const resultTopCol = Math.min(topStart.col, expandingTopStart.col);\n    const resultBottomRow = Math.max(bottomEnd.row, expandingBottomEnd.row);\n    const resultBottomCol = Math.max(bottomEnd.col, expandingBottomEnd.col);\n\n    const finalFrom = this._createCellCoords(resultTopRow, resultTopCol);\n    const finalTo = this._createCellCoords(resultBottomRow, resultBottomCol);\n\n    this.from = finalFrom;\n    this.to = finalTo;\n\n    this.setDirection(initialDirection);\n\n    if (changeDirection) {\n      if (this.highlight.row === this.getOuterBottomRightCorner().row && this.getVerticalDirection() === 'N-S') {\n        this.flipDirectionVertically();\n      }\n\n      if (this.highlight.col === this.getOuterTopRightCorner().col && this.getHorizontalDirection() === 'W-E') {\n        this.flipDirectionHorizontally();\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Gets the direction of the selection.\n   *\n   * @returns {string} Returns one of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n   */\n  getDirection() {\n    if (this.from.isNorthWestOf(this.to)) { // NorthWest - SouthEast\n      return 'NW-SE';\n\n    } else if (this.from.isNorthEastOf(this.to)) { // NorthEast - SouthWest\n      return 'NE-SW';\n\n    } else if (this.from.isSouthEastOf(this.to)) { // SouthEast - NorthWest\n      return 'SE-NW';\n\n    } else if (this.from.isSouthWestOf(this.to)) { // SouthWest - NorthEast\n      return 'SW-NE';\n    }\n  }\n\n  /**\n   * Sets the direction of the selection.\n   *\n   * @param {string} direction One of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n   */\n  setDirection(direction) {\n    switch (direction) {\n      case 'NW-SE':\n        [this.from, this.to] = [this.getOuterTopLeftCorner(), this.getOuterBottomRightCorner()];\n        break;\n      case 'NE-SW':\n        [this.from, this.to] = [this.getOuterTopRightCorner(), this.getOuterBottomLeftCorner()];\n        break;\n      case 'SE-NW':\n        [this.from, this.to] = [this.getOuterBottomRightCorner(), this.getOuterTopLeftCorner()];\n        break;\n      case 'SW-NE':\n        [this.from, this.to] = [this.getOuterBottomLeftCorner(), this.getOuterTopRightCorner()];\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Gets the vertical direction of the selection.\n   *\n   * @returns {string} Returns one of the values: `N-S` (north->south), `S-N` (south->north).\n   */\n  getVerticalDirection() {\n    return ['NE-SW', 'NW-SE'].indexOf(this.getDirection()) > -1 ? 'N-S' : 'S-N';\n  }\n\n  /**\n   * Gets the horizontal direction of the selection.\n   *\n   * @returns {string} Returns one of the values: `W-E` (west->east), `E-W` (east->west).\n   */\n  getHorizontalDirection() {\n    return ['NW-SE', 'SW-NE'].indexOf(this.getDirection()) > -1 ? 'W-E' : 'E-W';\n  }\n\n  /**\n   * Flips the direction of your range vertically (e.g., `NW-SE` changes to `SW-NE`).\n   */\n  flipDirectionVertically() {\n    const direction = this.getDirection();\n\n    switch (direction) {\n      case 'NW-SE':\n        this.setDirection('SW-NE');\n        break;\n      case 'NE-SW':\n        this.setDirection('SE-NW');\n        break;\n      case 'SE-NW':\n        this.setDirection('NE-SW');\n        break;\n      case 'SW-NE':\n        this.setDirection('NW-SE');\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Flips the direction of your range horizontally (e.g., `NW-SE` changes to `NE-SW`).\n   */\n  flipDirectionHorizontally() {\n    const direction = this.getDirection();\n\n    switch (direction) {\n      case 'NW-SE':\n        this.setDirection('NE-SW');\n        break;\n      case 'NE-SW':\n        this.setDirection('NW-SE');\n        break;\n      case 'SE-NW':\n        this.setDirection('SW-NE');\n        break;\n      case 'SW-NE':\n        this.setDirection('SE-NW');\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Gets the top-left (in LTR) or top-right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopStartCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row),\n      Math.min(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the top-left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopLeftCorner() {\n    return this.#isRtl ? this.getTopEndCorner() : this.getTopStartCorner();\n  }\n\n  /**\n   * Gets the bottom right (in LTR) or bottom left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomEndCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row),\n      Math.max(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the bottom right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomRightCorner() {\n    return this.#isRtl ? this.getBottomStartCorner() : this.getBottomEndCorner();\n  }\n\n  /**\n   * Gets the top right (in LTR) or top left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopEndCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row),\n      Math.max(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the top right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopRightCorner() {\n    return this.#isRtl ? this.getTopStartCorner() : this.getTopEndCorner();\n  }\n\n  /**\n   * Gets the bottom left (in LTR) or bottom right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomStartCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row),\n      Math.min(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the bottom left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomLeftCorner() {\n    return this.#isRtl ? this.getBottomEndCorner() : this.getBottomStartCorner();\n  }\n\n  /**\n   * Gets the top left (in LTR) or top right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopStartCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the top left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopLeftCorner() {\n    return this.#isRtl ? this.getOuterTopEndCorner() : this.getOuterTopStartCorner();\n  }\n\n  /**\n   * Gets the bottom right (in LTR) or bottom left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomEndCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the bottom right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomRightCorner() {\n    return this.#isRtl ? this.getOuterBottomStartCorner() : this.getOuterBottomEndCorner();\n  }\n\n  /**\n   * Gets the top right (in LTR) or top left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopEndCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the top right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopRightCorner() {\n    return this.#isRtl ? this.getOuterTopStartCorner() : this.getOuterTopEndCorner();\n  }\n\n  /**\n   * Gets the bottom left (in LTR) or bottom right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomStartCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the bottom left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomLeftCorner() {\n    return this.#isRtl ? this.getOuterBottomEndCorner() : this.getOuterBottomStartCorner();\n  }\n\n  /**\n   * Checks if a set of coordinates (`coords`) matches one of the 4 corners of your range.\n   *\n   * @param {CellCoords} coords Coordinates to check.\n   * @returns {boolean}\n   */\n  isCorner(coords) {\n    return coords.isEqual(this.getOuterTopLeftCorner()) || coords.isEqual(this.getOuterTopRightCorner()) ||\n      coords.isEqual(this.getOuterBottomLeftCorner()) || coords.isEqual(this.getOuterBottomRightCorner());\n  }\n\n  /**\n   * Gets the coordinates of a range corner opposite to the provided `coords`.\n   *\n   * For example: if the `coords` coordinates match the bottom-right corner of your range,\n   * the coordinates of the top-left corner of your range are returned.\n   *\n   * @param {CellCoords} coords Coordinates to check.\n   * @returns {CellCoords}\n   */\n  getOppositeCorner(coords) {\n    if (!(coords instanceof CellCoords)) {\n      return false;\n    }\n\n    if (coords.isEqual(this.getOuterBottomEndCorner())) {\n      return this.getOuterTopStartCorner();\n\n    } else if (coords.isEqual(this.getOuterTopStartCorner())) {\n      return this.getOuterBottomEndCorner();\n\n    } else if (coords.isEqual(this.getOuterTopEndCorner())) {\n      return this.getOuterBottomStartCorner();\n\n    } else if (coords.isEqual(this.getOuterBottomStartCorner())) {\n      return this.getOuterTopEndCorner();\n    }\n  }\n\n  /**\n   * Indicates which borders (top, right, bottom, left) are shared between\n   * your `CellRange`instance and another `range` that's within your range.\n   *\n   * @param {CellRange} range A range to compare with.\n   * @returns {Array<'top' | 'right' | 'bottom' | 'left'>}\n   */\n  getBordersSharedWith(range) {\n    if (!this.includesRange(range)) {\n      return [];\n    }\n\n    const thisBorders = {\n      top: Math.min(this.from.row, this.to.row),\n      bottom: Math.max(this.from.row, this.to.row),\n      left: Math.min(this.from.col, this.to.col),\n      right: Math.max(this.from.col, this.to.col)\n    };\n    const rangeBorders = {\n      top: Math.min(range.from.row, range.to.row),\n      bottom: Math.max(range.from.row, range.to.row),\n      left: Math.min(range.from.col, range.to.col),\n      right: Math.max(range.from.col, range.to.col)\n    };\n    const result = [];\n\n    if (thisBorders.top === rangeBorders.top) {\n      result.push('top');\n    }\n    if (thisBorders.right === rangeBorders.right) {\n      result.push(this.#isRtl ? 'left' : 'right');\n    }\n    if (thisBorders.bottom === rangeBorders.bottom) {\n      result.push('bottom');\n    }\n    if (thisBorders.left === rangeBorders.left) {\n      result.push(this.#isRtl ? 'right' : 'left');\n    }\n\n    return result;\n  }\n\n  /**\n   * Gets the coordinates of the inner cells of your range.\n   *\n   * @returns {CellCoords[]}\n   */\n  getInner() {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n    const out = [];\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        if (!(this.from.row === r && this.from.col === c) && !(this.to.row === r && this.to.col === c)) {\n          out.push(this._createCellCoords(r, c));\n        }\n      }\n    }\n\n    return out;\n  }\n\n  /**\n   * Gets the coordinates of all cells of your range.\n   *\n   * @returns {CellCoords[]}\n   */\n  getAll() {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n    const out = [];\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        if (topStart.row === r && topStart.col === c) {\n          out.push(topStart);\n\n        } else if (bottomEnd.row === r && bottomEnd.col === c) {\n          out.push(bottomEnd);\n\n        } else {\n          out.push(this._createCellCoords(r, c));\n        }\n      }\n    }\n\n    return out;\n  }\n\n  /**\n   * Runs a callback function on all cells within your range.\n   *\n   * You can break the iteration by returning `false` in the callback function.\n   *\n   * @param {function(number, number): boolean} callback A callback function.\n   */\n  forAll(callback) {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        const breakIteration = callback(r, c);\n\n        if (breakIteration === false) {\n          return;\n        }\n      }\n    }\n  }\n\n  /**\n   * Clones your `CellRange` instance.\n   *\n   * @returns {CellRange}\n   */\n  clone() {\n    return new CellRange(this.highlight, this.from, this.to, this.#isRtl);\n  }\n\n  /**\n   * Converts your `CellRange` instance into an object literal with the following properties:\n   *\n   * - `from`\n   *    - `row`\n   *    - `col`\n   * - `to`\n   *    - `row`\n   *    - `col`\n   *\n   * @returns {{from: {row: number, col: number}, to: {row: number, col: number}}} An object literal with `from` and `to` properties.\n   */\n  toObject() {\n    return {\n      from: this.from.toObject(),\n      to: this.to.toObject(),\n    };\n  }\n\n  /**\n   * Creates and returns a new instance of the `CellCoords` class.\n   *\n   * The new `CellCoords` instance automatically inherits the LTR/RTL flag\n   * from your `CellRange` instance.\n   *\n   * @private\n   * @param {number} row A row index.\n   * @param {number} column A column index.\n   * @returns {CellCoords}\n   */\n  _createCellCoords(row, column) {\n    return new CellCoords(row, column, this.#isRtl);\n  }\n}\n\nexport default CellRange;\n","import Walkontable from '../core/core';\nimport CoreAbstract from '../core/_base';\n\n/**\n * This layer cares about backward compatibility.\n *\n * @class WalkontableFacade\n * @augments Walkontable\n * @inheritDoc\n */\nexport default class WalkontableFacade {\n  /**\n   * @param {SettingsPure|Walkontable} settingsOrInstance The Walkontable settings.\n   */\n  constructor(settingsOrInstance) {\n    if (settingsOrInstance instanceof CoreAbstract) {\n      this._wot = settingsOrInstance;\n    } else {\n      this._initFromSettings(settingsOrInstance);\n    }\n  }\n\n  _initFromSettings(settings) {\n    settings.facade = (instance) => {\n      const facade = new WalkontableFacade(instance);\n\n      return () => facade;\n    };\n\n    this._wot = new Walkontable(settings.table, settings);\n  }\n\n  get guid() {\n    return this._wot.guid;\n  }\n\n  get rootDocument() {\n    return this._wot.domBindings.rootDocument;\n  }\n\n  get rootWindow() {\n    return this._wot.domBindings.rootWindow;\n  }\n  get wtSettings() {\n    return this._wot.wtSettings; // todo create facade\n  }\n  get cloneSource() {\n    return this._wot.cloneSource; // todo create facade\n  }\n  get cloneOverlay() {\n    return this._wot.cloneOverlay; // todo create facade\n  }\n  get selectionManager() {\n    return this._wot.selectionManager; // todo create facade\n  }\n  get wtViewport() {\n    return this._wot.wtViewport; // todo create facade\n  }\n  get wtOverlays() {\n    return this._wot.wtOverlays; // todo create facade\n  }\n  get wtTable() {\n    return this._wot.wtTable; // todo create facade\n  }\n  get wtEvent() {\n    return this._wot.wtEvent; // todo create facade\n  }\n  get wtScroll() {\n    return this._wot.wtScroll; // todo create facade\n  }\n  get drawn() {\n    return this._wot.drawn;\n  }\n  set drawn(value) {\n    this._wot.drawn = value;\n  }\n  get drawInterrupted() {\n    return this._wot.drawInterrupted;\n  }\n  set drawInterrupted(value) {\n    this._wot.drawInterrupted = value;\n  }\n  get lastMouseOver() {\n    return this._wot.lastMouseOver;\n  }\n  set lastMouseOver(value) {\n    this._wot.lastMouseOver = value;\n  }\n  get momentumScrolling() {\n    return this._wot.momentumScrolling;\n  }\n  set momentumScrolling(value) {\n    this._wot.momentumScrolling = value;\n  }\n  get touchApplied() {\n    return this._wot.touchApplied;\n  }\n  set touchApplied(value) {\n    this._wot.touchApplied = value;\n  }\n  get domBindings() {\n    return this._wot.domBindings;\n  }\n  get eventListeners() {\n    return this._wot.eventListeners;\n  }\n  set eventListeners(value) {\n    this._wot.eventListeners = value;\n  }\n  get eventManager() {\n    return this._wot.eventManager;\n  }\n\n  createCellCoords(row, column) {\n    return this._wot.createCellCoords(row, column);\n  }\n\n  createCellRange(highlight, from, to) {\n    return this._wot.createCellRange(highlight, from, to);\n  }\n\n  draw(fastDraw = false) {\n    this._wot.draw(fastDraw);\n\n    return this;\n  }\n\n  getCell(coords, topmost = false) {\n    return this._wot.getCell(coords, topmost);\n  }\n\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    return this._wot.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n  }\n\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    return this._wot.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n  }\n\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    return this._wot.scrollViewportVertically(row, snapToTop, snapToBottom);\n  }\n\n  getViewport() {\n    return this._wot.getViewport();\n  }\n\n  getOverlayName() {\n    return this._wot.cloneOverlay ? this._wot.cloneOverlay.type : 'master';\n  }\n\n  getOverlayByName(overlayName) {\n    return this._wot.getOverlayByName(overlayName);\n  }\n\n  exportSettingsAsClassNames() {\n    return this._wot.exportSettingsAsClassNames();\n  }\n\n  update(settings, value) {\n    this._wot.wtSettings.update(settings, value);\n\n    return this;\n  }\n\n  getSetting(key, param1, param2, param3, param4) {\n    return this._wot.wtSettings.getSetting(key, param1, param2, param3, param4);\n  }\n\n  hasSetting(key) {\n    return this._wot.wtSettings.hasSetting(key);\n  }\n\n  destroy() {\n    this._wot.destroy();\n  }\n}\n","import Event from '../event';\nimport Overlays from '../overlays';\nimport { CLONE_TYPES } from '../overlay';\nimport Settings from '../settings';\nimport MasterTable from '../table/master';\nimport Viewport from '../viewport';\nimport CoreAbstract from './_base';\nimport { SelectionManager } from '../selection/manager';\nimport { objectEach } from '../../../../helpers/object';\nimport { addClass, removeClass } from '../../../../helpers/dom/element';\n\n/**\n * @class Walkontable\n */\nexport default class Walkontable extends CoreAbstract {\n  /**\n   * @param {HTMLTableElement} table Main table.\n   * @param {SettingsPure} settings The Walkontable settings.\n   */\n  constructor(table, settings) {\n    super(table, new Settings(settings));\n\n    const facadeGetter = this.wtSettings.getSetting('facade', this); // todo rethink. I would like to have no access to facade from the internal scope.\n\n    this.wtTable = new MasterTable(this.getTableDao(), facadeGetter, this.domBindings, this.wtSettings);\n    this.wtViewport = new Viewport(\n      this.getViewportDao(), this.domBindings, this.wtSettings, this.eventManager, this.wtTable\n    );\n    this.selectionManager = new SelectionManager(this.wtSettings.getSetting('selections'));\n    this.wtEvent = new Event(\n      facadeGetter, this.domBindings, this.wtSettings, this.eventManager, this.wtTable, this.selectionManager\n    );\n    this.wtOverlays = new Overlays(\n      // TODO create DAO and remove reference to the Walkontable instance.\n      this, facadeGetter, this.domBindings, this.wtSettings, this.eventManager, this.wtTable\n    );\n\n    this.exportSettingsAsClassNames();\n\n    this.findOriginalHeaders();\n  }\n\n  /**\n   * Export settings as class names added to the parent element of the table.\n   */\n  exportSettingsAsClassNames() {\n    const toExport = {\n      rowHeaders: 'htRowHeaders',\n      columnHeaders: 'htColumnHeaders'\n    };\n    const allClassNames = [];\n    const newClassNames = [];\n\n    objectEach(toExport, (className, key) => {\n      if (this.wtSettings.getSetting(key).length) {\n        newClassNames.push(className);\n      }\n      allClassNames.push(className);\n    });\n    removeClass(this.wtTable.wtRootElement.parentNode, allClassNames);\n    addClass(this.wtTable.wtRootElement.parentNode, newClassNames);\n  }\n\n  /**\n   * Gets the overlay instance by its name.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'} overlayName The overlay name.\n   * @returns {Overlay | null}\n   */\n  getOverlayByName(overlayName) {\n    if (!CLONE_TYPES.includes(overlayName)) {\n      return null;\n    }\n\n    const camelCaseOverlay = overlayName.replace(/_([a-z])/g, match => match[1].toUpperCase());\n\n    return this.wtOverlays[`${camelCaseOverlay}Overlay`] ?? null;\n  }\n\n  /**\n   * @returns {ViewportDao}\n   */\n  getViewportDao() {\n    const wot = this;\n\n    return {\n      get wot() {\n        return wot;\n      },\n      get topOverlayTrimmingContainer() {\n        return wot.wtOverlays.topOverlay.trimmingContainer;\n      },\n      get inlineStartOverlayTrimmingContainer() {\n        return wot.wtOverlays.inlineStartOverlay.trimmingContainer;\n      },\n      get topScrollPosition() {\n        return wot.wtOverlays.topOverlay.getScrollPosition();\n      },\n      get topParentOffset() {\n        return wot.wtOverlays.topOverlay.getTableParentOffset();\n      },\n      get inlineStartScrollPosition() {\n        return wot.wtOverlays.inlineStartOverlay.getScrollPosition();\n      },\n      get inlineStartParentOffset() {\n        return wot.wtOverlays.inlineStartOverlay.getTableParentOffset();\n      },\n      get topOverlay() {\n        return wot.wtOverlays.topOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get inlineStartOverlay() {\n        return wot.wtOverlays.inlineStartOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get bottomOverlay() {\n        return wot.wtOverlays.bottomOverlay; // TODO refactoring: move outside dao, use IOC\n      }\n    };\n  }\n}\n","import {\n  closestDown,\n  hasClass,\n  isChildOf,\n  getParent,\n} from '../../../helpers/dom/element';\nimport { partial } from '../../../helpers/function';\nimport { isTouchSupported } from '../../../helpers/feature';\nimport { isMobileBrowser, isChromeWebKit, isFirefoxWebKit, isIOS } from '../../../helpers/browser';\nimport { isDefined } from '../../../helpers/mixed';\n\n/**\n * @class Event\n */\nclass Event {\n  #wtSettings;\n  #domBindings;\n  #wtTable;\n  #selectionManager;\n  #parent;\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @type {EventManager}\n   */\n  #eventManager;\n  /**\n   * Should be use only for passing face called external origin methods, like registered event listeners.\n   * It provides backward compatibility by getting instance facade.\n   *\n   * @todo Consider about removing this from Event class, because it make relationship into facade (implicit circular\n   *   dependency).\n   * @todo Con. Maybe passing listener caller as an ioc from faced resolves this issue. To rethink later.\n   *\n   * @type {FacadeGetter}\n   */\n  #facadeGetter;\n  /**\n   * @type {boolean}\n   */\n  #selectedCellBeforeTouchEnd;\n  /**\n   * @type {number[]}\n   */\n  #dblClickTimeout = [null, null];\n  /**\n   * @type {number[]}\n   */\n  #dblClickOrigin = [null, null];\n\n  /**\n   * @param {FacadeGetter} facadeGetter Gets an instance facade.\n   * @param {DomBindings} domBindings Bindings into dom.\n   * @param {Settings} wtSettings The walkontable settings.\n   * @param {EventManager} eventManager The walkontable event manager.\n   * @param {Table} wtTable The table.\n   * @param {SelectionManager} selectionManager Selections.\n   * @param {Event} [parent=null] The main Event instance.\n   */\n  constructor(facadeGetter, domBindings, wtSettings, eventManager, wtTable, selectionManager, parent = null) {\n    this.#wtSettings = wtSettings;\n    this.#domBindings = domBindings;\n    this.#wtTable = wtTable;\n    this.#selectionManager = selectionManager;\n    this.#parent = parent;\n    this.#eventManager = eventManager;\n    this.#facadeGetter = facadeGetter;\n\n    this.registerEvents();\n  }\n\n  /**\n   * Adds listeners for mouse and touch events.\n   *\n   * @private\n   */\n  registerEvents() {\n    this.#eventManager.addEventListener(this.#wtTable.holder, 'contextmenu', event => this.onContextMenu(event));\n    this.#eventManager.addEventListener(this.#wtTable.TABLE, 'mouseover', event => this.onMouseOver(event));\n    this.#eventManager.addEventListener(this.#wtTable.TABLE, 'mouseout', event => this.onMouseOut(event));\n\n    const initTouchEvents = () => {\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'touchstart', event => this.onTouchStart(event));\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'touchend', event => this.onTouchEnd(event));\n\n      if (!this.momentumScrolling) {\n        this.momentumScrolling = {};\n      }\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'scroll', () => {\n        clearTimeout(this.momentumScrolling._timeout);\n\n        if (!this.momentumScrolling.ongoing) {\n          this.#wtSettings.getSetting('onBeforeTouchScroll');\n        }\n        this.momentumScrolling.ongoing = true;\n\n        this.momentumScrolling._timeout = setTimeout(() => {\n          if (!this.touchApplied) {\n            this.momentumScrolling.ongoing = false;\n\n            this.#wtSettings.getSetting('onAfterMomentumScroll');\n          }\n        }, 200);\n      });\n    };\n\n    const initMouseEvents = () => {\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'mouseup', event => this.onMouseUp(event));\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'mousedown', event => this.onMouseDown(event));\n    };\n\n    if (isMobileBrowser()) {\n      initTouchEvents();\n    } else {\n      // PC like devices which support both methods (touchscreen and ability to plug-in mouse).\n      if (isTouchSupported()) {\n        initTouchEvents();\n      }\n\n      initMouseEvents();\n    }\n  }\n\n  /**\n   * Checks if an element is already selected.\n   *\n   * @private\n   * @param {Element} touchTarget An element to check.\n   * @returns {boolean}\n   */\n  selectedCellWasTouched(touchTarget) {\n    const cellUnderFinger = this.parentCell(touchTarget);\n    const coordsOfCellUnderFinger = cellUnderFinger.coords;\n\n    if (this.#selectedCellBeforeTouchEnd && coordsOfCellUnderFinger) {\n      const [rowTouched, rowSelected] = [coordsOfCellUnderFinger.row, this.#selectedCellBeforeTouchEnd.from.row];\n      const [colTouched, colSelected] = [coordsOfCellUnderFinger.col, this.#selectedCellBeforeTouchEnd.from.col];\n\n      return rowTouched === rowSelected && colTouched === colSelected;\n    }\n\n    return false;\n  }\n\n  /**\n   * Gets closest TD or TH element.\n   *\n   * @private\n   * @param {Element} elem An element from the traversing starts.\n   * @returns {object} Contains coordinates and reference to TD or TH if it exists. Otherwise it's empty object.\n   */\n  parentCell(elem) {\n    const cell = {};\n    const TABLE = this.#wtTable.TABLE;\n    const TD = closestDown(elem, ['TD', 'TH'], TABLE);\n\n    if (TD) {\n      cell.coords = this.#wtTable.getCoords(TD);\n      cell.TD = TD;\n\n    } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'current')) {\n      cell.coords = this.#selectionManager.getFocusSelection().cellRange.highlight;\n      cell.TD = this.#wtTable.getCell(cell.coords);\n\n    } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'area')) {\n      if (this.#selectionManager.getAreaSelection().cellRange) {\n        cell.coords = this.#selectionManager.getAreaSelection().cellRange.to;\n        cell.TD = this.#wtTable.getCell(cell.coords);\n      }\n    }\n\n    return cell;\n  }\n\n  /**\n   * OnMouseDown callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseDown(event) {\n    const activeElement = this.#domBindings.rootDocument.activeElement;\n    const getParentNode = partial(getParent, event.target);\n    const realTarget = event.target;\n\n    // ignore non-TD focusable elements from mouse down processing\n    // (https://github.com/handsontable/handsontable/issues/3555)\n    if (!['TD', 'TH'].includes(activeElement.nodeName) &&\n      (\n        realTarget === activeElement ||\n        getParentNode(0) === activeElement ||\n        getParentNode(1) === activeElement\n      )\n    ) {\n      return;\n    }\n\n    const cell = this.parentCell(realTarget);\n\n    if (hasClass(realTarget, 'corner')) {\n      this.#wtSettings.getSetting('onCellCornerMouseDown', event, realTarget);\n\n    } else if (cell.TD && this.#wtSettings.has('onCellMouseDown')) {\n      this.callListener('onCellMouseDown', event, cell.coords, cell.TD);\n    }\n\n    // doubleclick reacts only for left mouse button or from touch events\n    if ((event.button === 0 || this.touchApplied) && cell.TD) {\n      this.#dblClickOrigin[0] = cell.TD;\n\n      clearTimeout(this.#dblClickTimeout[0]);\n\n      this.#dblClickTimeout[0] = setTimeout(() => {\n        this.#dblClickOrigin[0] = null;\n      }, 1000);\n    }\n  }\n\n  /**\n   * OnContextMenu callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onContextMenu(event) {\n    if (this.#wtSettings.has('onCellContextMenu')) {\n      const cell = this.parentCell(event.target);\n\n      if (cell.TD) {\n        this.callListener('onCellContextMenu', event, cell.coords, cell.TD);\n      }\n    }\n  }\n\n  /**\n   * OnMouseOver callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseOver(event) {\n    if (!this.#wtSettings.has('onCellMouseOver')) {\n      return;\n    }\n\n    const table = this.#wtTable.TABLE;\n    const td = closestDown(event.target, ['TD', 'TH'], table);\n    const parent = this.#parent || this;\n\n    if (td && td !== parent.lastMouseOver && isChildOf(td, table)) {\n      parent.lastMouseOver = td;\n\n      this.callListener('onCellMouseOver', event, this.#wtTable.getCoords(td), td);\n    }\n  }\n\n  /**\n   * OnMouseOut callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseOut(event) {\n    if (!this.#wtSettings.has('onCellMouseOut')) {\n      return;\n    }\n\n    const table = this.#wtTable.TABLE;\n    const lastTD = closestDown(event.target, ['TD', 'TH'], table);\n    const nextTD = closestDown(event.relatedTarget, ['TD', 'TH'], table);\n    const parent = this.#parent || this;\n\n    if (lastTD && lastTD !== nextTD && isChildOf(lastTD, table)) {\n      this.callListener('onCellMouseOut', event, this.#wtTable.getCoords(lastTD), lastTD);\n\n      if (nextTD === null) {\n        parent.lastMouseOver = null;\n      }\n    }\n  }\n\n  /**\n   * OnMouseUp callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseUp(event) {\n    const cell = this.parentCell(event.target);\n\n    if (cell.TD && this.#wtSettings.has('onCellMouseUp')) {\n      this.callListener('onCellMouseUp', event, cell.coords, cell.TD);\n    }\n\n    // if not left mouse button, and the origin event is not comes from touch\n    if (event.button !== 0 && !this.touchApplied) {\n      return;\n    }\n\n    if (cell.TD === this.#dblClickOrigin[0] && cell.TD === this.#dblClickOrigin[1]) {\n      if (hasClass(event.target, 'corner')) {\n        this.callListener('onCellCornerDblClick', event, cell.coords, cell.TD);\n      } else {\n        this.callListener('onCellDblClick', event, cell.coords, cell.TD);\n      }\n\n      this.#dblClickOrigin[0] = null;\n      this.#dblClickOrigin[1] = null;\n\n    } else if (cell.TD === this.#dblClickOrigin[0]) {\n      this.#dblClickOrigin[1] = cell.TD;\n\n      clearTimeout(this.#dblClickTimeout[1]);\n\n      this.#dblClickTimeout[1] = setTimeout(() => {\n        this.#dblClickOrigin[1] = null;\n      }, 500);\n    }\n  }\n\n  /**\n   * OnTouchStart callback. Simulates mousedown event.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onTouchStart(event) {\n    this.#selectedCellBeforeTouchEnd = this.#selectionManager.getFocusSelection().cellRange;\n    this.touchApplied = true;\n\n    this.onMouseDown(event);\n  }\n\n  /**\n   * OnTouchEnd callback. Simulates mouseup event.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onTouchEnd(event) {\n    const target = event.target;\n    const parentCellCoords = this.parentCell(target)?.coords;\n    const isCellsRange = isDefined(parentCellCoords) && (parentCellCoords.row >= 0 && parentCellCoords.col >= 0);\n    const isEventCancelable = event.cancelable && isCellsRange && this.#wtSettings.getSetting('isDataViewInstance');\n\n    // To prevent accidental redirects or other actions that the interactive elements (e.q \"A\" link) do\n    // while the cell is highlighted, all touch events that are triggered on different cells are\n    // \"preventDefault\"'ed. The user can interact with the element (e.q. click on the link that opens\n    // a new page) only when the same cell was previously selected (see related PR #7980).\n    if (isEventCancelable) {\n      const interactiveElements = ['A', 'BUTTON', 'INPUT'];\n\n      // For browsers that use the WebKit as an engine (excluding Safari), there is a bug. The prevent\n      // default has to be called all the time. Otherwise, the second tap won't be triggered (probably\n      // caused by the native ~300ms delay - https://webkit.org/blog/5610/more-responsive-tapping-on-ios/).\n      // To make the interactive elements work, the event target element has to be check. If the element\n      // matches the allow-list, the event is not prevented.\n      if (isIOS() &&\n          (isChromeWebKit() || isFirefoxWebKit()) &&\n          this.selectedCellWasTouched(target) &&\n          !interactiveElements.includes(target.tagName)) {\n        event.preventDefault();\n\n      } else if (!this.selectedCellWasTouched(target)) {\n        // For other browsers, prevent default is fired only for the first tap and only when the previous\n        // highlighted cell was different.\n        event.preventDefault();\n      }\n    }\n\n    this.onMouseUp(event);\n\n    this.touchApplied = false;\n  }\n\n  /**\n   * Call listener with backward compatibility.\n   *\n   * @private\n   * @param {string} name Name of listener.\n   * @param {MouseEvent} event The event object.\n   * @param {CellCoords} coords Coordinates.\n   * @param {HTMLElement} target Event target.\n   */\n  callListener(name, event, coords, target) {\n    const listener = this.#wtSettings.getSettingPure(name);\n\n    if (listener) {\n      listener(event, coords, target, this.#facadeGetter());\n    }\n  }\n\n  /**\n   * Clears double-click timeouts and destroys the internal eventManager instance.\n   */\n  destroy() {\n    clearTimeout(this.#dblClickTimeout[0]);\n    clearTimeout(this.#dblClickTimeout[1]);\n\n    this.#eventManager.destroy();\n  }\n}\n\nexport default Event;\n","import {\n  getScrollableElement,\n  getScrollbarWidth,\n} from '../../../helpers/dom/element';\nimport { requestAnimationFrame } from '../../../helpers/feature';\nimport { arrayEach } from '../../../helpers/array';\nimport { isKey } from '../../../helpers/unicode';\nimport { isChrome } from '../../../helpers/browser';\nimport { warn } from '../../../helpers/console';\nimport {\n  InlineStartOverlay,\n  TopOverlay,\n  TopInlineStartCornerOverlay,\n  BottomOverlay,\n  BottomInlineStartCornerOverlay,\n} from './overlay';\n\n/**\n * @class Overlays\n */\nclass Overlays {\n  /**\n   * Walkontable instance's reference.\n   *\n   * @protected\n   * @type {Walkontable}\n   */\n  wot = null;\n\n  /**\n   * An array of the all overlays.\n   *\n   * @type {Overlay[]}\n   */\n  #overlays = [];\n\n  /**\n   * Refer to the TopOverlay instance.\n   *\n   * @protected\n   * @type {TopOverlay}\n   */\n  topOverlay = null;\n\n  /**\n   * Refer to the BottomOverlay instance.\n   *\n   * @protected\n   * @type {BottomOverlay}\n   */\n  bottomOverlay = null;\n\n  /**\n   * Refer to the InlineStartOverlay or instance.\n   *\n   * @protected\n   * @type {InlineStartOverlay}\n   */\n  inlineStartOverlay = null;\n\n  /**\n   * Refer to the TopInlineStartCornerOverlay instance.\n   *\n   * @protected\n   * @type {TopInlineStartCornerOverlay}\n   */\n  topInlineStartCornerOverlay = null;\n\n  /**\n   * Refer to the BottomInlineStartCornerOverlay instance.\n   *\n   * @protected\n   * @type {BottomInlineStartCornerOverlay}\n   */\n  bottomInlineStartCornerOverlay = null;\n\n  /**\n   * Browser line height for purposes of translating mouse wheel.\n   *\n   * @private\n   * @type {number}\n   */\n  browserLineHeight = undefined;\n\n  /**\n   * The walkontable settings.\n   *\n   * @protected\n   * @type {Settings}\n   */\n  wtSettings = null;\n\n  /**\n   * Indicates whether the rendering state has changed for one of the overlays.\n   *\n   * @type {boolean}\n   */\n  #hasRenderingStateChanged = false;\n\n  /**\n   * The amount of times the ResizeObserver callback was fired in direct succession.\n   *\n   * @type {number}\n   */\n  #containerDomResizeCount = 0;\n\n  /**\n   * The timeout ID for the ResizeObserver endless-loop-blocking logic.\n   *\n   * @type {number}\n   */\n  #containerDomResizeCountTimeout = null;\n\n  /**\n   * The instance of the ResizeObserver that observes the size of the Walkontable wrapper element.\n   * In case of the size change detection the `onContainerElementResize` is fired.\n   *\n   * @private\n   * @type {ResizeObserver}\n   */\n  resizeObserver = new ResizeObserver((entries) => {\n    requestAnimationFrame(() => {\n      if (!Array.isArray(entries) || !entries.length) {\n        return;\n      }\n\n      this.#containerDomResizeCount += 1;\n\n      if (this.#containerDomResizeCount === 100) {\n        warn('The ResizeObserver callback was fired too many times in direct succession.' +\n          '\\nThis may be due to an infinite loop caused by setting a dynamic height/width (for example, ' +\n          'with the `dvh` units) to a Handsontable container\\'s parent. ' +\n          '\\nThe observer will be disconnected.');\n\n        this.resizeObserver.disconnect();\n      }\n\n      // This logic is required to prevent an endless loop of the ResizeObserver callback.\n      // https://github.com/handsontable/dev-handsontable/issues/1898#issuecomment-2154794817\n      if (this.#containerDomResizeCountTimeout !== null) {\n        clearTimeout(this.#containerDomResizeCountTimeout);\n      }\n\n      this.#containerDomResizeCountTimeout = setTimeout(() => {\n        this.#containerDomResizeCount = 0;\n      }, 100);\n\n      this.wtSettings.getSetting('onContainerElementResize');\n    });\n  });\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @todo refactoring remove.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {EventManager} eventManager The walkontable event manager.\n   * @param {MasterTable} wtTable The master table.\n   */\n  constructor(wotInstance, facadeGetter, domBindings, wtSettings, eventManager, wtTable) {\n    this.wot = wotInstance;\n    this.wtSettings = wtSettings;\n    this.domBindings = domBindings;\n    this.facadeGetter = facadeGetter;\n    this.wtTable = wtTable;\n    const { rootDocument, rootWindow } = this.domBindings;\n\n    // legacy support\n    this.instance = this.wot; // todo refactoring: move to facade\n    this.eventManager = eventManager;\n\n    // TODO refactoring: probably invalid place to this logic\n    this.scrollbarSize = getScrollbarWidth(rootDocument);\n\n    const isOverflowHidden = rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode)\n      .getPropertyValue('overflow') === 'hidden';\n\n    this.scrollableElement = isOverflowHidden ? wtTable.holder : getScrollableElement(wtTable.TABLE);\n\n    this.initOverlays();\n\n    this.hasScrollbarBottom = false;\n    this.hasScrollbarRight = false;\n\n    this.destroyed = false;\n    this.keyPressed = false;\n    this.spreaderLastSize = {\n      width: null,\n      height: null,\n    };\n\n    this.verticalScrolling = false;\n    this.horizontalScrolling = false;\n\n    this.initBrowserLineHeight();\n    this.registerListeners();\n    this.lastScrollX = rootWindow.scrollX;\n    this.lastScrollY = rootWindow.scrollY;\n  }\n\n  /**\n   * Get the list of references to all overlays.\n   *\n   * @param {boolean} [includeMaster = false] If set to `true`, the list will contain the master table as the last\n   * element.\n   * @returns {(TopOverlay|TopInlineStartCornerOverlay|InlineStartOverlay|BottomOverlay|BottomInlineStartCornerOverlay)[]}\n   */\n  getOverlays(includeMaster = false) {\n    const overlays = [...this.#overlays];\n\n    if (includeMaster) {\n      overlays.push(this.wtTable);\n    }\n\n    return overlays;\n  }\n\n  /**\n   * Retrieve browser line height and apply its value to `browserLineHeight`.\n   *\n   * @private\n   */\n  initBrowserLineHeight() {\n    const { rootWindow, rootDocument } = this.domBindings;\n    const computedStyle = rootWindow.getComputedStyle(rootDocument.body);\n    /**\n     * Sometimes `line-height` might be set to 'normal'. In that case, a default `font-size` should be multiplied by roughly 1.2.\n     * Https://developer.mozilla.org/pl/docs/Web/CSS/line-height#Values.\n     */\n    const lineHeight = parseInt(computedStyle.lineHeight, 10);\n    const lineHeightFalback = parseInt(computedStyle.fontSize, 10) * 1.2;\n\n    this.browserLineHeight = lineHeight || lineHeightFalback;\n  }\n\n  /**\n   * Prepare overlays based on user settings.\n   *\n   * @private\n   */\n  initOverlays() {\n    const args = [this.wot, this.facadeGetter, this.wtSettings, this.domBindings];\n\n    // todo refactoring: IOC, collection or factories.\n    // TODO refactoring, conceive about using generic collection of overlays.\n    this.topOverlay = new TopOverlay(...args);\n    this.bottomOverlay = new BottomOverlay(...args);\n    this.inlineStartOverlay = new InlineStartOverlay(...args);\n\n    // TODO discuss, the controversial here would be removing the lazy creation mechanism for corners.\n    // TODO cond. Has no any visual impact. They're initially hidden in same way like left, top, and bottom overlays.\n    this.topInlineStartCornerOverlay = new TopInlineStartCornerOverlay(...args,\n      this.topOverlay, this.inlineStartOverlay);\n    this.bottomInlineStartCornerOverlay = new BottomInlineStartCornerOverlay(...args,\n      this.bottomOverlay, this.inlineStartOverlay);\n\n    this.#overlays = [\n      this.topOverlay,\n      this.bottomOverlay,\n      this.inlineStartOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay,\n    ];\n  }\n\n  /**\n   * Runs logic for the overlays before the table is drawn.\n   */\n  beforeDraw() {\n    this.#hasRenderingStateChanged = this.#overlays.reduce((acc, overlay) => {\n      return overlay.hasRenderingStateChanged() || acc;\n    }, false);\n\n    this.#overlays.forEach(overlay => overlay.updateStateOfRendering('before'));\n  }\n\n  /**\n   * Runs logic for the overlays after the table is drawn.\n   */\n  afterDraw() {\n    this.syncScrollWithMaster();\n    this.#overlays.forEach((overlay) => {\n      const hasRenderingStateChanged = overlay.hasRenderingStateChanged();\n\n      overlay.updateStateOfRendering('after');\n\n      if (hasRenderingStateChanged && !overlay.needFullRender) {\n        overlay.reset();\n      }\n    });\n  }\n\n  /**\n   * Refresh and redraw table.\n   */\n  refreshAll() {\n    if (!this.wot.drawn) {\n      return;\n    }\n    if (!this.wtTable.holder.parentNode) {\n      // Walkontable was detached from DOM, but this handler was not removed\n      this.destroy();\n\n      return;\n    }\n    this.wot.draw(true);\n\n    if (this.verticalScrolling) {\n      this.inlineStartOverlay.onScroll(); // todo the inlineStartOverlay.onScroll() fires hook. Why is it needed there, not in any another place?\n    }\n\n    if (this.horizontalScrolling) {\n      this.topOverlay.onScroll();\n    }\n\n    this.verticalScrolling = false;\n    this.horizontalScrolling = false;\n  }\n\n  /**\n   * Register all necessary event listeners.\n   */\n  registerListeners() {\n    const { rootDocument, rootWindow } = this.domBindings;\n    const { mainTableScrollableElement: topOverlayScrollableElement } = this.topOverlay;\n    const { mainTableScrollableElement: inlineStartOverlayScrollableElement } = this.inlineStartOverlay;\n\n    this.eventManager.addEventListener(rootDocument.documentElement, 'keydown', event => this.onKeyDown(event));\n    this.eventManager.addEventListener(rootDocument.documentElement, 'keyup', () => this.onKeyUp());\n    this.eventManager.addEventListener(rootDocument, 'visibilitychange', () => this.onKeyUp());\n    this.eventManager.addEventListener(\n      topOverlayScrollableElement,\n      'scroll',\n      event => this.onTableScroll(event),\n      { passive: true }\n    );\n\n    if (topOverlayScrollableElement !== inlineStartOverlayScrollableElement) {\n      this.eventManager.addEventListener(\n        inlineStartOverlayScrollableElement,\n        'scroll',\n        event => this.onTableScroll(event),\n        { passive: true }\n      );\n    }\n\n    const isHighPixelRatio = rootWindow.devicePixelRatio && rootWindow.devicePixelRatio > 1;\n    const isScrollOnWindow = this.scrollableElement === rootWindow;\n    const preventWheel = this.wtSettings.getSetting('preventWheel');\n    const wheelEventOptions = { passive: isScrollOnWindow };\n\n    if (preventWheel || isHighPixelRatio || !isChrome()) {\n      this.eventManager.addEventListener(\n        this.wtTable.wtRootElement,\n        'wheel',\n        event => this.onCloneWheel(event, preventWheel),\n        wheelEventOptions\n      );\n    }\n\n    const overlays = [\n      this.topOverlay,\n      this.bottomOverlay,\n      this.inlineStartOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay,\n    ];\n\n    overlays.forEach((overlay) => {\n      if (overlay && overlay.needFullRender) {\n        const { holder } = overlay.clone.wtTable; // todo rethink, maybe: overlay.getHolder()\n\n        this.eventManager.addEventListener(\n          holder,\n          'wheel',\n          event => this.onCloneWheel(event, preventWheel),\n          wheelEventOptions\n        );\n      }\n    });\n\n    let resizeTimeout;\n\n    this.eventManager.addEventListener(rootWindow, 'resize', () => {\n      clearTimeout(resizeTimeout);\n\n      resizeTimeout = setTimeout(() => {\n        this.wtSettings.getSetting('onWindowResize');\n\n        // Remove resizing the window from the ResizeObserver's endless-loop-blocking logic.\n        this.#containerDomResizeCount = 0;\n      }, 200);\n    });\n\n    if (!isScrollOnWindow) {\n      this.resizeObserver.observe(this.wtTable.wtRootElement.parentElement);\n    }\n  }\n\n  /**\n   * Deregister all previously registered listeners.\n   */\n  deregisterListeners() {\n    this.eventManager.clearEvents(true);\n  }\n\n  /**\n   * Scroll listener.\n   *\n   * @param {Event} event The mouse event object.\n   */\n  onTableScroll(event) {\n    // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n    // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n    const rootWindow = this.domBindings.rootWindow;\n    const masterHorizontal = this.inlineStartOverlay.mainTableScrollableElement;\n    const masterVertical = this.topOverlay.mainTableScrollableElement;\n    const target = event.target;\n\n    // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n    // by hot.refreshBorder\n    if (this.keyPressed) {\n      if ((masterVertical !== rootWindow && target !== rootWindow && !event.target.contains(masterVertical)) ||\n          (masterHorizontal !== rootWindow && target !== rootWindow && !event.target.contains(masterHorizontal))) {\n        return;\n      }\n    }\n\n    this.syncScrollPositions(event);\n  }\n\n  /**\n   * Wheel listener for cloned overlays.\n   *\n   * @param {Event} event The mouse event object.\n   * @param {boolean} preventDefault If `true`, the `preventDefault` will be called on event object.\n   */\n  onCloneWheel(event, preventDefault) {\n    const { rootWindow } = this.domBindings;\n\n    // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n    // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n\n    const masterHorizontal = this.inlineStartOverlay.mainTableScrollableElement;\n    const masterVertical = this.topOverlay.mainTableScrollableElement;\n    const target = event.target;\n\n    // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n    // by hot.refreshBorder\n    const shouldNotWheelVertically = masterVertical !== rootWindow &&\n      target !== rootWindow && !target.contains(masterVertical);\n    const shouldNotWheelHorizontally = masterHorizontal !== rootWindow &&\n      target !== rootWindow && !target.contains(masterHorizontal);\n\n    if (\n      (this.keyPressed && (shouldNotWheelVertically || shouldNotWheelHorizontally))\n       ||\n      this.scrollableElement === rootWindow\n    ) {\n      return;\n    }\n\n    const isScrollPossible = this.translateMouseWheelToScroll(event);\n\n    if (preventDefault || (this.scrollableElement !== rootWindow && isScrollPossible)) {\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * Key down listener.\n   *\n   * @param {Event} event The keyboard event object.\n   */\n  onKeyDown(event) {\n    this.keyPressed = isKey(event.keyCode, 'ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT');\n  }\n\n  /**\n   * Key up listener.\n   */\n  onKeyUp() {\n    this.keyPressed = false;\n  }\n\n  /**\n   * Translate wheel event into scroll event and sync scroll overlays position.\n   *\n   * @private\n   * @param {Event} event The mouse event object.\n   * @returns {boolean}\n   */\n  translateMouseWheelToScroll(event) {\n    let deltaY = isNaN(event.deltaY) ? (-1) * event.wheelDeltaY : event.deltaY;\n    let deltaX = isNaN(event.deltaX) ? (-1) * event.wheelDeltaX : event.deltaX;\n\n    if (event.deltaMode === 1) {\n      deltaX += deltaX * this.browserLineHeight;\n      deltaY += deltaY * this.browserLineHeight;\n    }\n\n    const isScrollVerticallyPossible = this.scrollVertically(deltaY);\n    const isScrollHorizontallyPossible = this.scrollHorizontally(deltaX);\n\n    return isScrollVerticallyPossible || isScrollHorizontallyPossible;\n  }\n\n  /**\n   * Scrolls main scrollable element horizontally.\n   *\n   * @param {number} delta Relative value to scroll.\n   * @returns {boolean}\n   */\n  scrollVertically(delta) {\n    const previousScroll = this.scrollableElement.scrollTop;\n\n    this.scrollableElement.scrollTop += delta;\n\n    return previousScroll !== this.scrollableElement.scrollTop;\n  }\n\n  /**\n   * Scrolls main scrollable element horizontally.\n   *\n   * @param {number} delta Relative value to scroll.\n   * @returns {boolean}\n   */\n  scrollHorizontally(delta) {\n    const previousScroll = this.scrollableElement.scrollLeft;\n\n    this.scrollableElement.scrollLeft += delta;\n\n    return previousScroll !== this.scrollableElement.scrollLeft;\n  }\n\n  /**\n   * Synchronize scroll position between master table and overlay table.\n   *\n   * @private\n   */\n  syncScrollPositions() {\n    if (this.destroyed) {\n      return;\n    }\n\n    const { rootWindow } = this.domBindings;\n    const topHolder = this.topOverlay.clone.wtTable.holder; // todo rethink\n    const leftHolder = this.inlineStartOverlay.clone.wtTable.holder; // todo rethink\n\n    const [scrollLeft, scrollTop] = [this.scrollableElement.scrollLeft, this.scrollableElement.scrollTop];\n\n    this.horizontalScrolling = (topHolder.scrollLeft !== scrollLeft || this.lastScrollX !== rootWindow.scrollX);\n    this.verticalScrolling = (leftHolder.scrollTop !== scrollTop || this.lastScrollY !== rootWindow.scrollY);\n    this.lastScrollX = rootWindow.scrollX;\n    this.lastScrollY = rootWindow.scrollY;\n\n    if (this.horizontalScrolling) {\n      topHolder.scrollLeft = scrollLeft;\n\n      const bottomHolder = this.bottomOverlay.needFullRender ? this.bottomOverlay.clone.wtTable.holder : null; // todo rethink\n\n      if (bottomHolder) {\n        bottomHolder.scrollLeft = scrollLeft;\n      }\n    }\n\n    if (this.verticalScrolling) {\n      leftHolder.scrollTop = scrollTop;\n    }\n\n    this.refreshAll();\n  }\n\n  /**\n   * Synchronize overlay scrollbars with the master scrollbar.\n   */\n  syncScrollWithMaster() {\n    if (!this.#hasRenderingStateChanged) {\n      return;\n    }\n\n    const master = this.topOverlay.mainTableScrollableElement;\n    const { scrollLeft, scrollTop } = master;\n\n    if (this.topOverlay.needFullRender) {\n      this.topOverlay.clone.wtTable.holder.scrollLeft = scrollLeft; // todo rethink, *overlay.setScroll*()\n    }\n    if (this.bottomOverlay.needFullRender) {\n      this.bottomOverlay.clone.wtTable.holder.scrollLeft = scrollLeft; // todo rethink, *overlay.setScroll*()\n    }\n    if (this.inlineStartOverlay.needFullRender) {\n      this.inlineStartOverlay.clone.wtTable.holder.scrollTop = scrollTop; // todo rethink, *overlay.setScroll*()\n    }\n\n    this.#hasRenderingStateChanged = false;\n  }\n\n  /**\n   * Update the main scrollable elements for all the overlays.\n   */\n  updateMainScrollableElements() {\n    this.deregisterListeners();\n\n    this.inlineStartOverlay.updateMainScrollableElement();\n    this.topOverlay.updateMainScrollableElement();\n\n    if (this.bottomOverlay.needFullRender) {\n      this.bottomOverlay.updateMainScrollableElement();\n    }\n    const { wtTable } = this;\n    const { rootWindow } = this.domBindings;\n\n    if (rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden') {\n      this.scrollableElement = wtTable.holder;\n    } else {\n      this.scrollableElement = getScrollableElement(wtTable.TABLE);\n    }\n\n    this.registerListeners();\n  }\n\n  /**\n   *\n   */\n  destroy() {\n    this.resizeObserver.disconnect();\n    this.eventManager.destroy();\n    // todo, probably all below `destory` calls has no sense. To analyze\n    this.topOverlay.destroy();\n\n    if (this.bottomOverlay.clone) {\n      this.bottomOverlay.destroy();\n    }\n    this.inlineStartOverlay.destroy();\n\n    if (this.topInlineStartCornerOverlay) {\n      this.topInlineStartCornerOverlay.destroy();\n    }\n\n    if (this.bottomInlineStartCornerOverlay && this.bottomInlineStartCornerOverlay.clone) {\n      this.bottomInlineStartCornerOverlay.destroy();\n    }\n\n    this.destroyed = true;\n  }\n\n  /**\n   * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway.\n   */\n  refresh(fastDraw = false) {\n    const wasSpreaderSizeUpdated = this.updateLastSpreaderSize();\n\n    if (wasSpreaderSizeUpdated) {\n      this.adjustElementsSize();\n    }\n\n    if (this.bottomOverlay.clone) {\n      this.bottomOverlay.refresh(fastDraw);\n    }\n\n    this.inlineStartOverlay.refresh(fastDraw);\n    this.topOverlay.refresh(fastDraw);\n\n    if (this.topInlineStartCornerOverlay) {\n      this.topInlineStartCornerOverlay.refresh(fastDraw);\n    }\n\n    if (this.bottomInlineStartCornerOverlay && this.bottomInlineStartCornerOverlay.clone) {\n      this.bottomInlineStartCornerOverlay.refresh(fastDraw);\n    }\n  }\n\n  /**\n   * Update the last cached spreader size with the current size.\n   *\n   * @returns {boolean} `true` if the lastSpreaderSize cache was updated, `false` otherwise.\n   */\n  updateLastSpreaderSize() {\n    const spreader = this.wtTable.spreader;\n    const width = spreader.clientWidth;\n    const height = spreader.clientHeight;\n    const needsUpdating = width !== this.spreaderLastSize.width || height !== this.spreaderLastSize.height;\n\n    if (needsUpdating) {\n      this.spreaderLastSize.width = width;\n      this.spreaderLastSize.height = height;\n    }\n\n    return needsUpdating;\n  }\n\n  /**\n   * Adjust overlays elements size and master table size.\n   */\n  adjustElementsSize() {\n    const { wtViewport } = this.wot;\n    const { wtTable } = this;\n    const { rootWindow } = this.domBindings;\n    const isWindowScrolled = this.scrollableElement === rootWindow;\n    const totalColumns = this.wtSettings.getSetting('totalColumns');\n    const totalRows = this.wtSettings.getSetting('totalRows');\n    const headerRowSize = wtViewport.getRowHeaderWidth();\n    const headerColumnSize = wtViewport.getColumnHeaderHeight();\n    const proposedHiderHeight = headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + 1;\n    const proposedHiderWidth = headerRowSize + this.inlineStartOverlay.sumCellSizes(0, totalColumns);\n    const hiderElement = wtTable.hider;\n    const hiderStyle = hiderElement.style;\n    const isScrolledBeyondHiderHeight = () => {\n      return isWindowScrolled ?\n        false :\n        (this.scrollableElement.scrollTop > Math.max(0, proposedHiderHeight - wtTable.holder.clientHeight));\n    };\n    const isScrolledBeyondHiderWidth = () => {\n      return isWindowScrolled ?\n        false :\n        (this.scrollableElement.scrollLeft > Math.max(0, proposedHiderWidth - wtTable.holder.clientWidth));\n    };\n    const columnHeaderBorderCompensation = isScrolledBeyondHiderHeight() ? 1 : 0;\n    const rowHeaderBorderCompensation = isScrolledBeyondHiderWidth() ? 1 : 0;\n\n    // If the elements are being adjusted after scrolling the table from the very beginning to the very end,\n    // we need to adjust the hider dimensions by the header border size. (https://github.com/handsontable/dev-handsontable/issues/1772)\n    hiderStyle.width = `${proposedHiderWidth + rowHeaderBorderCompensation}px`;\n    hiderStyle.height = `${proposedHiderHeight + columnHeaderBorderCompensation}px`;\n\n    if (this.scrollbarSize > 0) { // todo refactoring, looking as a part of logic which should be moved outside the class\n      const {\n        scrollHeight: rootElemScrollHeight,\n        scrollWidth: rootElemScrollWidth,\n      } = wtTable.wtRootElement;\n      const {\n        scrollHeight: holderScrollHeight,\n        scrollWidth: holderScrollWidth,\n      } = wtTable.holder;\n\n      this.hasScrollbarRight = rootElemScrollHeight < holderScrollHeight;\n      this.hasScrollbarBottom = rootElemScrollWidth < holderScrollWidth;\n\n      if (this.hasScrollbarRight && wtTable.hider.scrollWidth + this.scrollbarSize > rootElemScrollWidth) {\n        this.hasScrollbarBottom = true;\n      } else if (this.hasScrollbarBottom && wtTable.hider.scrollHeight + this.scrollbarSize > rootElemScrollHeight) {\n        this.hasScrollbarRight = true;\n      }\n    }\n\n    this.topOverlay.adjustElementsSize();\n    this.inlineStartOverlay.adjustElementsSize();\n    this.bottomOverlay.adjustElementsSize();\n  }\n\n  /**\n   * Expand the hider vertically element by the provided delta value.\n   *\n   * @param {number} heightDelta The delta value to expand the hider element by.\n   */\n  expandHiderVerticallyBy(heightDelta) {\n    const { wtTable } = this;\n\n    wtTable.hider.style.height = `${parseInt(wtTable.hider.style.height, 10) + heightDelta}px`;\n  }\n\n  /**\n   * Expand the hider horizontally element by the provided delta value.\n   *\n   * @param {number} widthDelta The delta value to expand the hider element by.\n   */\n  expandHiderHorizontallyBy(widthDelta) {\n    const { wtTable } = this;\n\n    wtTable.hider.style.width = `${parseInt(wtTable.hider.style.width, 10) + widthDelta}px`;\n  }\n\n  /**\n   *\n   */\n  applyToDOM() {\n    if (!this.wtTable.isVisible()) {\n      return;\n    }\n\n    this.topOverlay.applyToDOM();\n\n    if (this.bottomOverlay.clone) {\n      this.bottomOverlay.applyToDOM();\n    }\n\n    this.inlineStartOverlay.applyToDOM();\n  }\n\n  /**\n   * Get the parent overlay of the provided element.\n   *\n   * @param {HTMLElement} element An element to process.\n   * @returns {object|null}\n   */\n  getParentOverlay(element) {\n    if (!element) {\n      return null;\n    }\n\n    const overlays = [\n      this.topOverlay,\n      this.inlineStartOverlay,\n      this.bottomOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay\n    ];\n    let result = null;\n\n    arrayEach(overlays, (overlay) => {\n      if (!overlay) {\n        return;\n      }\n\n      if (overlay.clone && overlay.clone.wtTable.TABLE.contains(element)) { // todo demeter\n        result = overlay.clone;\n      }\n    });\n\n    return result;\n  }\n\n  /**\n   * Synchronize the class names between the main overlay table and the tables on the other overlays.\n   *\n   */\n  syncOverlayTableClassNames() {\n    const masterTable = this.wtTable.TABLE;\n    const overlays = [\n      this.topOverlay,\n      this.inlineStartOverlay,\n      this.bottomOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay\n    ];\n\n    arrayEach(overlays, (elem) => {\n      if (!elem) {\n        return;\n      }\n\n      elem.clone.wtTable.TABLE.className = masterTable.className; // todo demeter\n    });\n  }\n}\n\nexport default Overlays;\n","export { BottomInlineStartCornerOverlay } from './bottomInlineStartCorner';\nexport { BottomOverlay } from './bottom';\nexport { InlineStartOverlay } from './inlineStart';\nexport { Overlay } from './_base';\nexport { TopInlineStartCornerOverlay } from './topInlineStartCorner';\nexport { TopOverlay } from './top';\nexport * from './constants';\n","import {\n  getScrollbarWidth,\n  outerHeight,\n  outerWidth,\n  resetCssTransform\n} from '../../../../helpers/dom/element';\nimport BottomInlineStartCornerOverlayTable from '../table/bottomInlineStartCorner';\nimport { Overlay } from './_base';\nimport {\n  CLONE_BOTTOM_INLINE_START_CORNER,\n} from './constants';\n\n/**\n * @class BottomInlineStartCornerOverlay\n */\nexport class BottomInlineStartCornerOverlay extends Overlay {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   * @param {BottomOverlay} bottomOverlay The instance of the Top overlay.\n   * @param {InlineStartOverlay} inlineStartOverlay The instance of the InlineStart overlay.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings, bottomOverlay, inlineStartOverlay) {\n    super(wotInstance, facadeGetter, CLONE_BOTTOM_INLINE_START_CORNER, wtSettings, domBindings);\n    this.bottomOverlay = bottomOverlay;\n    this.inlineStartOverlay = inlineStartOverlay;\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {BottomInlineStartCornerOverlayTable}\n   */\n  createTable(...args) {\n    return new BottomInlineStartCornerOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderBottomOverlay')\n      && this.wtSettings.getSetting('shouldRenderInlineStartOverlay');\n  }\n\n  /**\n   * Updates the corner overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    const { wot } = this;\n\n    this.updateTrimmingContainer();\n\n    if (!wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n\n    overlayRoot.style.top = '';\n\n    if (this.trimmingContainer === this.domBindings.rootWindow) {\n      const inlineStartOffset = this.inlineStartOverlay.getOverlayOffset();\n      const bottom = this.bottomOverlay.getOverlayOffset();\n\n      overlayRoot.style[this.isRtl() ? 'right' : 'left'] = `${inlineStartOffset}px`;\n      overlayRoot.style.bottom = `${bottom}px`;\n\n    } else {\n      resetCssTransform(overlayRoot);\n      this.repositionOverlay();\n    }\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n    const tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRoot.style.height = `${tableHeight}px`;\n    overlayRoot.style.width = `${tableWidth}px`;\n\n    return false;\n  }\n\n  /**\n   * Reposition the overlay.\n   */\n  repositionOverlay() {\n    const { wtTable, wtViewport } = this.wot;\n    const { rootDocument } = this.domBindings;\n    const cloneRoot = this.clone.wtTable.holder.parentNode;\n    let bottomOffset = 0;\n\n    if (!wtViewport.hasVerticalScroll()) {\n      bottomOffset += (wtViewport.getWorkspaceHeight() - wtTable.getTotalHeight());\n    }\n\n    if (wtViewport.hasVerticalScroll() && wtViewport.hasHorizontalScroll()) {\n      bottomOffset += getScrollbarWidth(rootDocument);\n    }\n\n    cloneRoot.style.bottom = `${bottomOffset}px`;\n  }\n}\n","import Table from '../table';\nimport stickyRowsBottom from './mixin/stickyRowsBottom';\nimport stickyColumnsStart from './mixin/stickyColumnsStart';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_BOTTOM_INLINE_START_CORNER } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to bottomInlineStartCornerOverlay\n * (in RTL mode the overlay sits on the right of the screen), implemented through mixins.\n *\n * @mixes stickyRowsBottom\n * @mixes stickyColumnsStart\n */\nclass BottomInlineStartCornerOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_BOTTOM_INLINE_START_CORNER);\n  }\n}\n\nmixin(BottomInlineStartCornerOverlayTable, stickyRowsBottom);\nmixin(BottomInlineStartCornerOverlayTable, stickyColumnsStart);\n\nexport default BottomInlineStartCornerOverlayTable;\n","import {\n  hasClass,\n  index,\n  offset,\n  removeTextNodes,\n  overlayContainsElement,\n  closest,\n  outerHeight,\n  outerWidth,\n  innerHeight,\n  isVisible,\n  setAttribute,\n} from '../../../helpers/dom/element';\nimport { isFunction } from '../../../helpers/function';\nimport ColumnFilter from './filter/column';\nimport RowFilter from './filter/row';\nimport { Renderer } from './renderer';\nimport ColumnUtils from './utils/column';\nimport RowUtils from './utils/row';\nimport {\n  CLONE_TOP,\n  CLONE_BOTTOM,\n  CLONE_INLINE_START,\n  CLONE_TOP_INLINE_START_CORNER,\n  CLONE_BOTTOM_INLINE_START_CORNER,\n} from './overlay';\nimport { A11Y_PRESENTATION } from '../../../helpers/a11y';\n\n/**\n * @todo These mixes are never added to the class Table, however their members are used here.\n * @todo Continue: Potentially it works only, because some of these mixes are added to every inherited class.\n * @todo Refactoring, move code from `if(this.isMaster)` into MasterTable, and others like that.\n * @mixes stickyColumnsStart\n * @mixes stickyRowsBottom\n * @mixes stickyRowsTop\n * @mixes calculatedRows\n * @mixes calculatedColumns\n * @abstract\n */\nclass Table {\n  /**\n   * The walkontable settings.\n   *\n   * @protected\n   * @type {Settings}\n   */\n  wtSettings = null;\n  domBindings;\n  TBODY = null;\n  THEAD = null;\n  COLGROUP = null;\n  /**\n   * Indicates if the table has height bigger than 0px.\n   *\n   * @type {boolean}\n   */\n  hasTableHeight = true;\n  /**\n   * Indicates if the table has width bigger than 0px.\n   *\n   * @type {boolean}\n   */\n  hasTableWidth = true;\n  /**\n   * Indicates if the table is visible. By visible, it means that the holder\n   * element has CSS 'display' property different than 'none'.\n   *\n   * @type {boolean}\n   */\n  isTableVisible = false;\n  tableOffset = 0;\n  holderOffset = 0;\n  /**\n   *\n   * @abstract\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {'master'|CLONE_TYPES_ENUM} name Overlay name.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings, name) {\n    this.domBindings = domBindings;\n    /**\n     * Indicates if this instance is of type `MasterTable` (i.e. It is NOT an overlay).\n     *\n     * @type {boolean}\n     */\n    this.isMaster = name === 'master';\n    this.name = name;\n    this.dataAccessObject = dataAccessObject;\n    this.facadeGetter = facadeGetter;\n    this.wtSettings = wtSettings;\n\n    // legacy support\n    this.instance = this.dataAccessObject.wot; // TODO refactoring: it might be removed here, and provides legacy support through facade.\n    this.wot = this.dataAccessObject.wot;\n    this.TABLE = domBindings.rootTable;\n\n    removeTextNodes(this.TABLE);\n\n    // TODO refactoring, to recognize the legitimacy of moving them into domBidings\n    this.spreader = this.createSpreader(this.TABLE);\n    this.hider = this.createHider(this.spreader);\n    this.holder = this.createHolder(this.hider);\n    this.wtRootElement = this.holder.parentNode;\n\n    if (this.isMaster) {\n      this.alignOverlaysWithTrimmingContainer(); // todo wow, It calls method from child class (MasterTable).\n    }\n    this.fixTableDomTree();\n\n    this.rowFilter = null; // TODO refactoring, eliminate all (re)creations of this object, then updates state when needed.\n    this.columnFilter = null; // TODO refactoring, eliminate all (re)creations of this object, then updates state when needed.\n    this.correctHeaderWidth = false;\n\n    const origRowHeaderWidth = this.wtSettings.getSettingPure('rowHeaderWidth');\n\n    // Fix for jumping row headers (https://github.com/handsontable/handsontable/issues/3850)\n    this.wtSettings.update('rowHeaderWidth', () => this._modifyRowHeaderWidth(origRowHeaderWidth));\n\n    this.rowUtils = new RowUtils(this.dataAccessObject, this.wtSettings); // TODO refactoring, It can be passed through IOC.\n    this.columnUtils = new ColumnUtils(this.dataAccessObject, this.wtSettings); // TODO refactoring, It can be passed through IOC.\n\n    this.tableRenderer = new Renderer({ // TODO refactoring, It can be passed through IOC.\n      TABLE: this.TABLE,\n      THEAD: this.THEAD,\n      COLGROUP: this.COLGROUP,\n      TBODY: this.TBODY,\n      rowUtils: this.rowUtils,\n      columnUtils: this.columnUtils,\n      cellRenderer: this.wtSettings.getSettingPure('cellRenderer'),\n    });\n  }\n\n  /**\n   * Returns a boolean that is true if this Table represents a specific overlay, identified by the overlay name.\n   * For MasterTable, it returns false.\n   *\n   * @param {string} overlayTypeName The overlay type.\n   * @returns {boolean}\n   */\n  is(overlayTypeName) { // todo refactoring: eliminate all protected and private usages\n    return this.name === overlayTypeName;\n  }\n\n  /**\n   *\n   */\n  fixTableDomTree() {\n    const rootDocument = this.domBindings.rootDocument;\n\n    this.TBODY = this.TABLE.querySelector('tbody');\n\n    if (!this.TBODY) {\n      this.TBODY = rootDocument.createElement('tbody');\n      this.TABLE.appendChild(this.TBODY);\n    }\n    this.THEAD = this.TABLE.querySelector('thead');\n\n    if (!this.THEAD) {\n      this.THEAD = rootDocument.createElement('thead');\n      this.TABLE.insertBefore(this.THEAD, this.TBODY);\n    }\n    this.COLGROUP = this.TABLE.querySelector('colgroup');\n\n    if (!this.COLGROUP) {\n      this.COLGROUP = rootDocument.createElement('colgroup');\n      this.TABLE.insertBefore(this.COLGROUP, this.THEAD);\n    }\n  }\n\n  /**\n   * @param {HTMLTableElement} table An element to process.\n   * @returns {HTMLElement}\n   */\n  createSpreader(table) {\n    const parent = table.parentNode;\n    let spreader;\n\n    if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n      spreader = this.domBindings.rootDocument.createElement('div');\n      spreader.className = 'wtSpreader';\n\n      if (parent) {\n        // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n        parent.insertBefore(spreader, table);\n      }\n      spreader.appendChild(table);\n    }\n\n    spreader.style.position = 'relative';\n\n    if (this.wtSettings.getSetting('ariaTags')) {\n      setAttribute(spreader, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    return spreader;\n  }\n\n  /**\n   * @param {HTMLElement} spreader An element to the hider element is injected.\n   * @returns {HTMLElement}\n   */\n  createHider(spreader) {\n    const parent = spreader.parentNode;\n    let hider;\n\n    if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n      hider = this.domBindings.rootDocument.createElement('div');\n      hider.className = 'wtHider';\n\n      if (parent) {\n        // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n        parent.insertBefore(hider, spreader);\n      }\n      hider.appendChild(spreader);\n    }\n\n    if (this.wtSettings.getSetting('ariaTags')) {\n      setAttribute(hider, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    return hider;\n  }\n\n  /**\n   *\n   * @param {HTMLElement} hider An element to the holder element is injected.\n   * @returns {HTMLElement}\n   */\n  createHolder(hider) {\n    const parent = hider.parentNode;\n    let holder;\n\n    if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n      holder = this.domBindings.rootDocument.createElement('div');\n      holder.style.position = 'relative';\n      holder.className = 'wtHolder';\n\n      if (parent) {\n        // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n        parent.insertBefore(holder, hider);\n      }\n      if (this.isMaster) {\n        holder.parentNode.className += 'ht_master handsontable';\n        holder.parentNode.setAttribute('dir', this.wtSettings.getSettingPure('rtlMode') ? 'rtl' : 'ltr');\n\n        if (this.wtSettings.getSetting('ariaTags')) {\n          setAttribute(holder.parentNode, [\n            A11Y_PRESENTATION()\n          ]);\n        }\n      }\n      holder.appendChild(hider);\n    }\n\n    if (this.wtSettings.getSetting('ariaTags')) {\n      setAttribute(holder, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    return holder;\n  }\n\n  /**\n   * Redraws the table.\n   *\n   * @param {boolean} [fastDraw=false] If TRUE, will try to avoid full redraw and only update the border positions.\n   *                                   If FALSE or UNDEFINED, will perform a full redraw.\n   * @returns {Table}\n   */\n  draw(fastDraw = false) {\n    const { wtSettings } = this;\n    const { wtOverlays, wtViewport } = this.dataAccessObject;\n    const totalRows = wtSettings.getSetting('totalRows');\n    const totalColumns = wtSettings.getSetting('totalColumns');\n    const rowHeaders = wtSettings.getSetting('rowHeaders');\n    const rowHeadersCount = rowHeaders.length;\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n    const columnHeadersCount = columnHeaders.length;\n    let runFastDraw = fastDraw;\n\n    if (this.isMaster) {\n      wtOverlays.beforeDraw();\n      this.holderOffset = offset(this.holder);\n      runFastDraw = wtViewport.createCalculators(runFastDraw);\n\n      if (rowHeadersCount && !wtSettings.getSetting('fixedColumnsStart')) {\n        const leftScrollPos = wtOverlays.inlineStartOverlay.getScrollPosition();\n        const previousState = this.correctHeaderWidth;\n\n        this.correctHeaderWidth = leftScrollPos !== 0;\n\n        if (previousState !== this.correctHeaderWidth) {\n          runFastDraw = false;\n        }\n      }\n    }\n\n    if (runFastDraw) {\n      if (this.isMaster) {\n        wtOverlays.refresh(true);\n      }\n    } else {\n      if (this.isMaster) {\n        this.tableOffset = offset(this.TABLE);\n      } else {\n        this.tableOffset = this.dataAccessObject.parentTableOffset;\n      }\n      const startRow = totalRows > 0 ? this.getFirstRenderedRow() : 0;\n      const startColumn = totalColumns > 0 ? this.getFirstRenderedColumn() : 0;\n\n      this.rowFilter = new RowFilter(startRow, totalRows, columnHeadersCount);\n      this.columnFilter = new ColumnFilter(startColumn, totalColumns, rowHeadersCount);\n\n      let performRedraw = true;\n\n      // Only master table rendering can be skipped\n      if (this.isMaster) {\n        this.alignOverlaysWithTrimmingContainer(); // todo It calls method from child class (MasterTable).\n        const skipRender = {};\n\n        this.wtSettings.getSetting('beforeDraw', true, skipRender);\n        performRedraw = skipRender.skipRender !== true;\n      }\n\n      if (performRedraw) {\n        this.tableRenderer.setHeaderContentRenderers(rowHeaders, columnHeaders);\n\n        if (this.is(CLONE_BOTTOM) ||\n            this.is(CLONE_BOTTOM_INLINE_START_CORNER)) {\n          // do NOT render headers on the bottom or bottom-left corner overlay\n          this.tableRenderer.setHeaderContentRenderers(rowHeaders, []);\n        }\n\n        this.resetOversizedRows();\n\n        this.tableRenderer\n          .setActiveOverlayName(this.name)\n          .setViewportSize(this.getRenderedRowsCount(), this.getRenderedColumnsCount())\n          .setFilters(this.rowFilter, this.columnFilter)\n          .render();\n\n        let workspaceWidth;\n\n        if (this.isMaster) {\n          workspaceWidth = this.dataAccessObject.workspaceWidth;\n          wtViewport.containerWidth = null;\n          this.markOversizedColumnHeaders();\n        }\n\n        this.adjustColumnHeaderHeights();\n\n        if (this.isMaster || this.is(CLONE_BOTTOM)) {\n          this.markOversizedRows();\n        }\n\n        if (this.isMaster) {\n          if (!this.wtSettings.getSetting('externalRowCalculator')) {\n            wtViewport.createVisibleCalculators();\n          }\n\n          wtOverlays.refresh(false);\n          wtOverlays.applyToDOM();\n\n          const hiderWidth = outerWidth(this.hider);\n          const tableWidth = outerWidth(this.TABLE);\n\n          if (hiderWidth !== 0 && (tableWidth !== hiderWidth)) {\n            // Recalculate the column widths, if width changes made in the overlays removed the scrollbar, thus changing the viewport width.\n            this.columnUtils.calculateWidths();\n            this.tableRenderer.renderer.colGroup.render();\n          }\n\n          if (workspaceWidth !== wtViewport.getWorkspaceWidth()) {\n            // workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching\n            wtViewport.containerWidth = null;\n            this.columnUtils.calculateWidths();\n            this.tableRenderer.renderer.colGroup.render();\n          }\n\n          this.wtSettings.getSetting('onDraw', true);\n\n        } else if (this.is(CLONE_BOTTOM)) {\n          this.dataAccessObject.cloneSource.wtOverlays.adjustElementsSize();\n        }\n      }\n    }\n\n    let positionChanged = false;\n\n    if (this.isMaster) {\n      positionChanged = wtOverlays.topOverlay.resetFixedPosition();\n\n      if (wtOverlays.bottomOverlay.clone) {\n        positionChanged = wtOverlays.bottomOverlay.resetFixedPosition() || positionChanged;\n      }\n\n      positionChanged = wtOverlays.inlineStartOverlay.resetFixedPosition() || positionChanged;\n\n      if (wtOverlays.topInlineStartCornerOverlay) {\n        wtOverlays.topInlineStartCornerOverlay.resetFixedPosition();\n      }\n\n      if (wtOverlays.bottomInlineStartCornerOverlay && wtOverlays.bottomInlineStartCornerOverlay.clone) {\n        wtOverlays.bottomInlineStartCornerOverlay.resetFixedPosition();\n      }\n    }\n\n    if (positionChanged) {\n      // It refreshes the cells borders caused by a 1px shift (introduced by overlays which add or\n      // remove `innerBorderTop` and `innerBorderInlineStart` CSS classes to the DOM element. This happens\n      // when there is a switch between rendering from 0 to N rows/columns and vice versa).\n      wtOverlays.refreshAll(); // `refreshAll()` internally already calls `refreshSelections()` method\n      wtOverlays.adjustElementsSize();\n    } else {\n      this.dataAccessObject.selectionManager\n        .setActiveOverlay(this.facadeGetter())\n        .render(runFastDraw);\n    }\n\n    if (this.isMaster) {\n      wtOverlays.afterDraw();\n    }\n\n    this.dataAccessObject.drawn = true;\n\n    return this;\n  }\n\n  /**\n   * @param {number} col The visual column index.\n   */\n  markIfOversizedColumnHeader(col) {\n    const sourceColIndex = this.columnFilter.renderedToSource(col);\n    let level = this.wtSettings.getSetting('columnHeaders').length;\n    const defaultRowHeight = this.wtSettings.getSetting('defaultRowHeight');\n    let previousColHeaderHeight;\n    let currentHeader;\n    let currentHeaderHeight;\n    const columnHeaderHeightSetting = this.wtSettings.getSetting('columnHeaderHeight') || [];\n\n    while (level) {\n      level -= 1;\n\n      previousColHeaderHeight = this.getColumnHeaderHeight(level);\n      currentHeader = this.getColumnHeader(sourceColIndex, level);\n\n      if (!currentHeader) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n      currentHeaderHeight = innerHeight(currentHeader);\n\n      if (!previousColHeaderHeight &&\n          defaultRowHeight < currentHeaderHeight || previousColHeaderHeight < currentHeaderHeight) {\n        this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = currentHeaderHeight;\n      }\n\n      if (Array.isArray(columnHeaderHeightSetting)) {\n        if (columnHeaderHeightSetting[level] !== null && columnHeaderHeightSetting[level] !== undefined) {\n          this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level];\n        }\n\n      } else if (!isNaN(columnHeaderHeightSetting)) {\n        this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting;\n      }\n\n      if (this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] < (columnHeaderHeightSetting[level] ||\n          columnHeaderHeightSetting)) {\n        this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = (columnHeaderHeightSetting[level] || columnHeaderHeightSetting); // eslint-disable-line max-len\n      }\n    }\n  }\n\n  /**\n   *\n   */\n  adjustColumnHeaderHeights() {\n    const { wtSettings } = this;\n    const children = this.THEAD.childNodes;\n    const oversizedColumnHeaders = this.dataAccessObject.wtViewport.oversizedColumnHeaders;\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n\n    for (let i = 0, len = columnHeaders.length; i < len; i++) {\n      if (oversizedColumnHeaders[i]) {\n        if (!children[i] || children[i].childNodes.length === 0) {\n          return;\n        }\n        children[i].childNodes[0].style.height = `${oversizedColumnHeaders[i]}px`;\n      }\n    }\n  }\n\n  /**\n   * Resets cache of row heights. The cache should be cached for each render cycle in a case\n   * when new cell values have content which increases/decreases cell height.\n   */\n  resetOversizedRows() {\n    const { wtSettings } = this;\n    const { wtViewport } = this.dataAccessObject;\n\n    if (!this.isMaster && !this.is(CLONE_BOTTOM)) {\n      return;\n    }\n\n    if (!wtSettings.getSetting('externalRowCalculator')) {\n      const rowsToRender = this.getRenderedRowsCount();\n\n      // Reset the oversized row cache for rendered rows\n      for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n        const sourceRow = this.rowFilter.renderedToSource(visibleRowIndex);\n\n        if (wtViewport.oversizedRows && wtViewport.oversizedRows[sourceRow]) {\n          wtViewport.oversizedRows[sourceRow] = undefined;\n        }\n      }\n    }\n  }\n\n  /**\n   * Get cell element at coords.\n   * Negative coords.row or coords.col are used to retrieve header cells. If there are multiple header levels, the\n   * negative value corresponds to the distance from the working area. For example, when there are 3 levels of column\n   * headers, coords.col=-1 corresponds to the most inner header element, while coords.col=-3 corresponds to the\n   * outmost header element.\n   *\n   * In case an element for the coords is not rendered, the method returns an error code.\n   * To produce the error code, the input parameters are validated in the order in which they\n   * are given. Thus, if both the row and the column coords are out of the rendered bounds,\n   * the method returns the error code for the row.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @returns {HTMLElement|number} HTMLElement on success or Number one of the exit codes on error:\n   *  -1 row before viewport\n   *  -2 row after viewport\n   *  -3 column before viewport\n   *  -4 column after viewport.\n   */\n  getCell(coords) {\n    let row = coords.row;\n    let column = coords.col;\n    const hookResult = this.wtSettings.getSetting('onModifyGetCellCoords', row, column);\n\n    if (hookResult && Array.isArray(hookResult)) {\n      [row, column] = hookResult;\n    }\n\n    if (this.isRowBeforeRenderedRows(row)) {\n      // row before rendered rows\n      return -1;\n\n    } else if (this.isRowAfterRenderedRows(row)) {\n      // row after rendered rows\n      return -2;\n\n    } else if (this.isColumnBeforeRenderedColumns(column)) {\n      // column before rendered columns\n      return -3;\n\n    } else if (this.isColumnAfterRenderedColumns(column)) {\n      // column after rendered columns\n      return -4;\n    }\n\n    const TR = this.getRow(row);\n\n    if (!TR && row >= 0) {\n      throw new Error('TR was expected to be rendered but is not');\n    }\n\n    const TD = TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column)];\n\n    if (!TD && column >= 0) {\n      throw new Error('TD or TH was expected to be rendered but is not');\n    }\n\n    return TD;\n  }\n\n  /**\n   * Get the DOM element of the row with the provided index.\n   *\n   * @param {number} rowIndex Row index.\n   * @returns {HTMLTableRowElement|boolean} Return the row's DOM element or `false` if the row with the provided\n   * index doesn't exist.\n   */\n  getRow(rowIndex) {\n    let renderedRowIndex = null;\n    let parentElement = null;\n\n    if (rowIndex < 0) {\n      renderedRowIndex = this.rowFilter?.sourceRowToVisibleColHeadedRow(rowIndex);\n      parentElement = this.THEAD;\n\n    } else {\n      renderedRowIndex = this.rowFilter?.sourceToRendered(rowIndex);\n      parentElement = this.TBODY;\n    }\n\n    if (renderedRowIndex !== undefined && parentElement !== undefined) {\n      if (parentElement.childNodes.length < renderedRowIndex + 1) {\n        return false;\n\n      } else {\n        return parentElement.childNodes[renderedRowIndex];\n      }\n\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * GetColumnHeader.\n   *\n   * @param {number} col Column index.\n   * @param {number} [level=0] Header level (0 = most distant to the table).\n   * @returns {object} HTMLElement on success or undefined on error.\n   */\n  getColumnHeader(col, level = 0) {\n    const TR = this.THEAD.childNodes[level];\n\n    return TR?.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(col)];\n  }\n\n  /**\n   * Gets all columns headers (TH elements) from the table.\n   *\n   * @param {number} column A source column index.\n   * @returns {HTMLTableCellElement[]}\n   */\n  getColumnHeaders(column) {\n    const THs = [];\n    const visibleColumn = this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column);\n\n    this.THEAD.childNodes.forEach((TR) => {\n      const TH = TR.childNodes[visibleColumn];\n\n      if (TH) {\n        THs.push(TH);\n      }\n    });\n\n    return THs;\n  }\n\n  /**\n   * GetRowHeader.\n   *\n   * @param {number} row Row index.\n   * @param {number} [level=0] Header level (0 = most distant to the table).\n   * @returns {HTMLElement} HTMLElement on success or Number one of the exit codes on error: `null table doesn't have\n   *   row headers`.\n   */\n  getRowHeader(row, level = 0) {\n    const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;\n\n    if (level >= rowHeadersCount) {\n      return;\n    }\n\n    const renderedRow = this.rowFilter.sourceToRendered(row);\n    const visibleRow = renderedRow < 0 ? this.rowFilter.sourceRowToVisibleColHeadedRow(row) : renderedRow;\n    const parentElement = renderedRow < 0 ? this.THEAD : this.TBODY;\n    const TR = parentElement.childNodes[visibleRow];\n\n    return TR?.childNodes[level];\n  }\n\n  /**\n   * Gets all rows headers (TH elements) from the table.\n   *\n   * @param {number} row A source row index.\n   * @returns {HTMLTableCellElement[]}\n   */\n  getRowHeaders(row) {\n    const THs = [];\n    const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;\n\n    for (let renderedRowIndex = 0; renderedRowIndex < rowHeadersCount; renderedRowIndex++) {\n      const TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n      const TH = TR?.childNodes[renderedRowIndex];\n\n      if (TH) {\n        THs.push(TH);\n      }\n    }\n\n    return THs;\n  }\n\n  /**\n   * Returns cell coords object for a given TD (or a child element of a TD element).\n   *\n   * @param {HTMLTableCellElement} TD A cell DOM element (or a child of one).\n   * @returns {CellCoords|null} The coordinates of the provided TD element (or the closest TD element) or null, if the\n   *   provided element is not applicable.\n   */\n  getCoords(TD) {\n    let cellElement = TD;\n\n    if (cellElement.nodeName !== 'TD' && cellElement.nodeName !== 'TH') {\n      cellElement = closest(cellElement, ['TD', 'TH']);\n    }\n\n    if (cellElement === null) {\n      return null;\n    }\n\n    const TR = cellElement.parentNode;\n    const CONTAINER = TR.parentNode;\n    let row = index(TR);\n    let col = cellElement.cellIndex;\n\n    if (overlayContainsElement(CLONE_TOP_INLINE_START_CORNER, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_TOP, cellElement, this.wtRootElement)) {\n      if (CONTAINER.nodeName === 'THEAD') {\n        row -= CONTAINER.childNodes.length;\n      }\n\n    } else if (overlayContainsElement(CLONE_BOTTOM_INLINE_START_CORNER, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_BOTTOM, cellElement, this.wtRootElement)) {\n      const totalRows = this.wtSettings.getSetting('totalRows');\n\n      row = totalRows - CONTAINER.childNodes.length + row;\n\n    } else if (CONTAINER === this.THEAD) {\n      row = this.rowFilter.visibleColHeadedRowToSourceRow(row);\n\n    } else {\n      row = this.rowFilter.renderedToSource(row);\n    }\n\n    if (overlayContainsElement(CLONE_TOP_INLINE_START_CORNER, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_INLINE_START, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_BOTTOM_INLINE_START_CORNER, cellElement, this.wtRootElement)) {\n      col = this.columnFilter.offsettedTH(col);\n\n    } else {\n      col = this.columnFilter.visibleRowHeadedColumnToSourceColumn(col);\n    }\n\n    return this.wot.createCellCoords(row, col);\n  }\n\n  /**\n   * Check if any of the rendered rows is higher than expected, and if so, cache them.\n   */\n  markOversizedRows() {\n    if (this.wtSettings.getSetting('externalRowCalculator')) {\n      return;\n    }\n    let rowCount = this.TBODY.childNodes.length;\n    const expectedTableHeight = rowCount * this.wtSettings.getSetting('defaultRowHeight');\n    const actualTableHeight = innerHeight(this.TBODY) - 1;\n    let previousRowHeight;\n    let rowInnerHeight;\n    let sourceRowIndex;\n    let currentTr;\n    let rowHeader;\n\n    if (expectedTableHeight === actualTableHeight && !this.wtSettings.getSetting('fixedRowsBottom')) {\n      // If the actual table height equals rowCount * default single row height, no row is oversized -> no need to iterate over them\n      return;\n    }\n\n    while (rowCount) {\n      rowCount -= 1;\n      sourceRowIndex = this.rowFilter.renderedToSource(rowCount);\n      previousRowHeight = this.getRowHeight(sourceRowIndex);\n      currentTr = this.getTrForRow(sourceRowIndex);\n      rowHeader = currentTr.querySelector('th');\n\n      if (rowHeader) {\n        rowInnerHeight = innerHeight(rowHeader);\n      } else {\n        rowInnerHeight = innerHeight(currentTr) - 1;\n      }\n\n      if ((!previousRowHeight && this.wtSettings.getSetting('defaultRowHeight') < rowInnerHeight ||\n          previousRowHeight < rowInnerHeight)) {\n        rowInnerHeight += 1;\n        this.dataAccessObject.wtViewport.oversizedRows[sourceRowIndex] = rowInnerHeight;\n      }\n    }\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @returns {HTMLTableElement}\n   */\n  getTrForRow(row) {\n    return this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n  }\n\n  /**\n   * Checks if the column index (negative value from -1 to N) is rendered.\n   *\n   * @param {number} column The column index (negative value from -1 to N).\n   * @returns {boolean}\n   */\n  isColumnHeaderRendered(column) {\n    if (column >= 0) {\n      return false;\n    }\n\n    const rowHeaders = this.wtSettings.getSetting('rowHeaders');\n    const rowHeadersCount = rowHeaders.length;\n\n    return Math.abs(column) <= rowHeadersCount;\n  }\n\n  /**\n   * Checks if the row index (negative value from -1 to N) is rendered.\n   *\n   * @param {number} row The row index (negative value from -1 to N).\n   * @returns {boolean}\n   */\n  isRowHeaderRendered(row) {\n    if (row >= 0) {\n      return false;\n    }\n\n    const columnHeaders = this.wtSettings.getSetting('columnHeaders');\n    const columnHeadersCount = columnHeaders.length;\n\n    return Math.abs(row) <= columnHeadersCount;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given row index is lower than the index of the first row that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * Negative row index is used to check the columns' headers.\n   *\n   *  Headers\n   *           +--------------+                                     │\n   *       -3  │    │    │    │                                     │\n   *           +--------------+                                     │\n   *       -2  │    │    │    │                                     │ TRUE\n   *           +--------------+                                     │\n   *       -1  │    │    │    │                                     │\n   *  Cells  +==================+                                   │\n   *        0  ┇    ┇    ┇    ┇ <--- For fixedRowsTop: 1            │\n   *           +--------------+      the master overlay do       ---+ first rendered row (index 1)\n   *        1  │ A2 │ B2 │ C2 │      not render the first row.      │\n   *           +--------------+                                     │ FALSE\n   *        2  │ A3 │ B3 │ C3 │                                     │\n   *           +--------------+                                  ---+ last rendered row\n   *                                                                │\n   *                                                                │ FALSE\n   *\n   * @param {number} row The visual row index.\n   * @memberof Table#\n   * @function isRowBeforeRenderedRows\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isRowBeforeRenderedRows(row) {\n    const first = this.getFirstRenderedRow();\n\n    // Check the headers only in case when the first rendered row is -1 or 0.\n    // This is an indication that the overlay is placed on the most top position.\n    if (row < 0 && first <= 0) {\n      return !this.isRowHeaderRendered(row);\n    }\n\n    return row < first;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given column index is greater than the index of the last column that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * The negative row index is used to check the columns' headers. However,\n   * keep in mind that for negative indexes, the method always returns FALSE as\n   * it is not possible to render headers partially. The \"after\" index can not be\n   * lower than -1.\n   *\n   *  Headers\n   *           +--------------+                                     │\n   *       -3  │    │    │    │                                     │\n   *           +--------------+                                     │\n   *       -2  │    │    │    │                                     │ FALSE\n   *           +--------------+                                     │\n   *       -1  │    │    │    │                                     │\n   *  Cells  +==================+                                   │\n   *        0  ┇    ┇    ┇    ┇ <--- For fixedRowsTop: 1            │\n   *           +--------------+      the master overlay do       ---+ first rendered row (index 1)\n   *        1  │ A2 │ B2 │ C2 │      not render the first rows      │\n   *           +--------------+                                     │ FALSE\n   *        2  │ A3 │ B3 │ C3 │                                     │\n   *           +--------------+                                  ---+ last rendered row\n   *                                                                │\n   *                                                                │ TRUE\n   *\n   * @param {number} row The visual row index.\n   * @memberof Table#\n   * @function isRowAfterRenderedRows\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isRowAfterRenderedRows(row) {\n    return row > this.getLastRenderedRow();\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given column index is lower than the index of the first column that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * Negative column index is used to check the rows' headers.\n   *\n   *                            For fixedColumnsStart: 1 the master overlay\n   *                            do not render this first columns.\n   *  Headers    -3   -2   -1    |\n   *           +----+----+----║┄ ┄ +------+------+\n   *           │    │    │    ║    │  B1  │  C1  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B2  │  C2  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B3  │  C3  │\n   *           +----+----+----║┄ ┄ +------+------+\n   *                               ╷             ╷\n   *      -------------------------+-------------+---------------->\n   *          TRUE             first    FALSE   last         FALSE\n   *                           rendered         rendered\n   *                           column           column\n   *\n   * @param {number} column The visual column index.\n   * @memberof Table#\n   * @function isColumnBeforeRenderedColumns\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isColumnBeforeRenderedColumns(column) {\n    const first = this.getFirstRenderedColumn();\n\n    // Check the headers only in case when the first rendered column is -1 or 0.\n    // This is an indication that the overlay is placed on the most left position.\n    if (column < 0 && first <= 0) {\n      return !this.isColumnHeaderRendered(column);\n    }\n\n    return column < first;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given column index is greater than the index of the last column that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * The negative column index is used to check the rows' headers. However,\n   * keep in mind that for negative indexes, the method always returns FALSE as\n   * it is not possible to render headers partially. The \"after\" index can not be\n   * lower than -1.\n   *\n   *                            For fixedColumnsStart: 1 the master overlay\n   *                            do not render this first columns.\n   *  Headers    -3   -2   -1    |\n   *           +----+----+----║┄ ┄ +------+------+\n   *           │    │    │    ║    │  B1  │  C1  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B2  │  C2  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B3  │  C3  │\n   *           +----+----+----║┄ ┄ +------+------+\n   *                               ╷             ╷\n   *      -------------------------+-------------+---------------->\n   *          FALSE             first    FALSE   last         TRUE\n   *                           rendered         rendered\n   *                           column           column\n   *\n   * @param {number} column The visual column index.\n   * @memberof Table#\n   * @function isColumnAfterRenderedColumns\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isColumnAfterRenderedColumns(column) {\n    return this.columnFilter && (column > this.getLastRenderedColumn());\n  }\n\n  isColumnAfterViewport(column) {\n    return this.columnFilter && (column > this.getLastVisibleColumn());\n  }\n\n  isRowAfterViewport(row) {\n    return this.rowFilter && (row > this.getLastVisibleRow());\n  }\n\n  isColumnBeforeViewport(column) {\n    return this.columnFilter && (this.columnFilter.sourceToRendered(column) < 0 && column >= 0);\n  }\n\n  isLastRowFullyVisible() {\n    return this.getLastVisibleRow() === this.getLastRenderedRow();\n  }\n\n  isLastColumnFullyVisible() {\n    return this.getLastVisibleColumn() === this.getLastRenderedColumn();\n  }\n\n  allRowsInViewport() {\n    return this.wtSettings.getSetting('totalRows') === this.getVisibleRowsCount();\n  }\n\n  allColumnsInViewport() {\n    return this.wtSettings.getSetting('totalColumns') === this.getVisibleColumnsCount();\n  }\n\n  /**\n   * Checks if any of the row's cells content exceeds its initial height, and if so, returns the oversized height.\n   *\n   * @param {number} sourceRow The physical row index.\n   * @returns {number}\n   */\n  getRowHeight(sourceRow) {\n    return this.rowUtils.getHeight(sourceRow);\n  }\n\n  /**\n   * @param {number} level The column level.\n   * @returns {number}\n   */\n  getColumnHeaderHeight(level) {\n    return this.columnUtils.getHeaderHeight(level);\n  }\n\n  /**\n   * @param {number} sourceColumn The physical column index.\n   * @returns {number}\n   */\n  getColumnWidth(sourceColumn) {\n    return this.columnUtils.getWidth(sourceColumn);\n  }\n\n  /**\n   * @param {number} sourceColumn The physical column index.\n   * @returns {number}\n   */\n  getStretchedColumnWidth(sourceColumn) {\n    return this.columnUtils.getStretchedColumnWidth(sourceColumn);\n  }\n\n  /**\n   * Checks if the table has defined size. It returns `true` when the table has width and height\n   * set bigger than `0px`.\n   *\n   * @returns {boolean}\n   */\n  hasDefinedSize() {\n    return this.hasTableHeight && this.hasTableWidth;\n  }\n\n  /**\n   * Gets table's width. The returned width is the width of the rendered cells that fit in the\n   * current viewport. The value may change depends on the viewport position (scroll position).\n   *\n   * @returns {number}\n   */\n  getWidth() {\n    return outerWidth(this.TABLE);\n  }\n\n  /**\n   * Gets table's height. The returned height is the height of the rendered cells that fit in the\n   * current viewport. The value may change depends on the viewport position (scroll position).\n   *\n   * @returns {number}\n   */\n  getHeight() {\n    return outerHeight(this.TABLE);\n  }\n\n  /**\n   * Gets table's total width. The returned width is the width of all rendered cells (including headers)\n   * that can be displayed in the table.\n   *\n   * @returns {number}\n   */\n  getTotalWidth() {\n    const width = outerWidth(this.hider);\n\n    // when the overlay's table does not have any cells the hider returns 0, get then width from the table element\n    return width !== 0 ? width : this.getWidth();\n  }\n\n  /**\n   * Gets table's total height. The returned height is the height of all rendered cells (including headers)\n   * that can be displayed in the table.\n   *\n   * @returns {number}\n   */\n  getTotalHeight() {\n    const height = outerHeight(this.hider);\n\n    // when the overlay's table does not have any cells the hider returns 0, get then height from the table element\n    return height !== 0 ? height : this.getHeight();\n  }\n\n  /**\n   * Checks if the table is visible. It returns `true` when the holder element (or its parents)\n   * has CSS 'display' property different than 'none'.\n   *\n   * @returns {boolean}\n   */\n  isVisible() {\n    return isVisible(this.TABLE);\n  }\n\n  /**\n   * Modify row header widths provided by user in class contructor.\n   *\n   * @private\n   * @param {Function} rowHeaderWidthFactory The function which can provide default width values for rows..\n   * @returns {number}\n   */\n  _modifyRowHeaderWidth(rowHeaderWidthFactory) {\n    let widths = isFunction(rowHeaderWidthFactory) ? rowHeaderWidthFactory() : null;\n\n    if (Array.isArray(widths)) {\n      widths = [...widths];\n      widths[widths.length - 1] = this._correctRowHeaderWidth(widths[widths.length - 1]);\n    } else {\n      widths = this._correctRowHeaderWidth(widths);\n    }\n\n    return widths;\n  }\n\n  /**\n   * Correct row header width if necessary.\n   *\n   * @private\n   * @param {number} width The width to process.\n   * @returns {number}\n   */\n  _correctRowHeaderWidth(width) {\n    let rowHeaderWidth = width;\n\n    if (typeof width !== 'number') {\n      rowHeaderWidth = this.wtSettings.getSetting('defaultColumnWidth');\n    }\n    if (this.correctHeaderWidth) {\n      rowHeaderWidth += 1;\n    }\n\n    return rowHeaderWidth;\n  }\n}\n\nexport default Table;\n","/**\n * @class ColumnFilter\n */\nclass ColumnFilter {\n  /**\n   * @type {number}\n   */\n  offset;\n  /**\n   * @type {number}\n   */\n  total;\n  /**\n   * @type {number}\n   */\n  countTH;\n\n  /**\n   * @param {number} offset The scroll horizontal offset.\n   * @param {number} total The total width of the table.\n   * @param {number} countTH The number of rendered row headers.\n   */\n  constructor(offset, total, countTH) {\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  offsetted(index) {\n    return index + this.offset;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  unOffsetted(index) {\n    return index - this.offset;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  renderedToSource(index) {\n    return this.offsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  sourceToRendered(index) {\n    return this.unOffsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  offsettedTH(index) {\n    return index - this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  unOffsettedTH(index) {\n    return index + this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  visibleRowHeadedColumnToSourceColumn(index) {\n    return this.renderedToSource(this.offsettedTH(index));\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  sourceColumnToVisibleRowHeadedColumn(index) {\n    return this.unOffsettedTH(this.sourceToRendered(index));\n  }\n}\n\nexport default ColumnFilter;\n","/**\n * @class RowFilter\n */\nclass RowFilter {\n  /**\n   * @type {number}\n   */\n  offset;\n  /**\n   * @type {number}\n   */\n  total;\n  /**\n   * @type {number}\n   */\n  countTH;\n\n  /**\n   * @param {number} offset The scroll vertical offset.\n   * @param {number} total The total height of the table.\n   * @param {number} countTH The number of rendered column headers.\n   */\n  constructor(offset, total, countTH) {\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  offsetted(index) {\n    return index + this.offset;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  unOffsetted(index) {\n    return index - this.offset;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  renderedToSource(index) {\n    return this.offsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  sourceToRendered(index) {\n    return this.unOffsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  offsettedTH(index) {\n    return index - this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  unOffsettedTH(index) {\n    return index + this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  visibleColHeadedRowToSourceRow(index) {\n    return this.renderedToSource(this.offsettedTH(index));\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  sourceRowToVisibleColHeadedRow(index) {\n    return this.unOffsettedTH(this.sourceToRendered(index));\n  }\n}\n\nexport default RowFilter;\n","import RowHeadersRenderer from './rowHeaders';\nimport ColumnHeadersRenderer from './columnHeaders';\nimport ColGroupRenderer from './colGroup';\nimport RowsRenderer from './rows';\nimport CellsRenderer from './cells';\nimport TableRenderer from './table';\n\n/**\n * Content renderer.\n *\n * @class Renderer\n */\nclass Renderer {\n  constructor({ TABLE, THEAD, COLGROUP, TBODY, rowUtils, columnUtils, cellRenderer } = {}) {\n    /**\n     * General renderer class used to render Walkontable content on screen.\n     *\n     * @type {TableRenderer}\n     */\n    this.renderer = new TableRenderer(TABLE, { cellRenderer });\n    this.renderer.setRenderers({\n      rowHeaders: new RowHeadersRenderer(),\n      columnHeaders: new ColumnHeadersRenderer(THEAD),\n      colGroup: new ColGroupRenderer(COLGROUP),\n      rows: new RowsRenderer(TBODY),\n      cells: new CellsRenderer(),\n    });\n    this.renderer.setAxisUtils(rowUtils, columnUtils);\n  }\n\n  /**\n   * Sets the overlay that is currently rendered. If `null` is provided, the master overlay is set.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName The overlay name.\n   * @returns {Renderer}\n   */\n  setActiveOverlayName(overlayName) {\n    this.renderer.setActiveOverlayName(overlayName);\n\n    return this;\n  }\n\n  /**\n   * Sets filter calculators for newly calculated row and column position. The filters are used to transform visual\n   * indexes (0 to N) to source indexes provided by Handsontable.\n   *\n   * @param {RowFilter} rowFilter The row filter instance.\n   * @param {ColumnFilter} columnFilter The column filter instance.\n   * @returns {Renderer}\n   */\n  setFilters(rowFilter, columnFilter) {\n    this.renderer.setFilters(rowFilter, columnFilter);\n\n    return this;\n  }\n\n  /**\n   * Sets the viewport size of the rendered table.\n   *\n   * @param {number} rowsCount An amount of rows to render.\n   * @param {number} columnsCount An amount of columns to render.\n   * @returns {Renderer}\n   */\n  setViewportSize(rowsCount, columnsCount) {\n    this.renderer.setViewportSize(rowsCount, columnsCount);\n\n    return this;\n  }\n\n  /**\n   * Sets row and column header functions.\n   *\n   * @param {Function[]} rowHeaders Row header functions. Factories for creating content for row headers.\n   * @param {Function[]} columnHeaders Column header functions. Factories for creating content for column headers.\n   * @returns {Renderer}\n   */\n  setHeaderContentRenderers(rowHeaders, columnHeaders) {\n    this.renderer.setHeaderContentRenderers(rowHeaders, columnHeaders);\n\n    return this;\n  }\n\n  /**\n   * Adjusts the table (preparing for render).\n   */\n  adjust() {\n    this.renderer.adjust();\n  }\n\n  /**\n   * Renders the table.\n   */\n  render() {\n    this.renderer.render();\n  }\n}\n\nexport {\n  RowHeadersRenderer,\n  ColumnHeadersRenderer,\n  ColGroupRenderer,\n  RowsRenderer,\n  CellsRenderer,\n  TableRenderer,\n  Renderer,\n};\n","import { SharedOrderView } from './../utils/orderView';\nimport BaseRenderer from './_base';\nimport { setAttribute, removeAttribute } from '../../../../helpers/dom/element';\nimport {\n  A11Y_COLINDEX,\n  A11Y_ROWHEADER,\n  A11Y_SCOPE_ROW,\n  A11Y_TABINDEX\n} from '../../../../helpers/a11y';\n\n/**\n * Row headers renderer responsible for managing (inserting, tracking, rendering) TR elements belongs to TR.\n *\n *   <tr> (root node)\n *     ├ <th>   --- RowHeadersRenderer\n *     ├ <td>   \\\n *     ├ <td>    \\\n *     ├ <td>     - CellsRenderer\n *     ├ <td>    /\n *     └ <td>   /.\n *\n * @class {CellsRenderer}\n */\nexport default class RowHeadersRenderer extends BaseRenderer {\n  /**\n   * Cache for OrderView classes connected to specified node.\n   *\n   * @type {WeakMap}\n   */\n  orderViews = new WeakMap();\n  /**\n   * Row index which specifies the row position of the processed row header.\n   *\n   * @type {number}\n   */\n  sourceRowIndex = 0;\n\n  constructor() {\n    super('TH');\n  }\n\n  /**\n   * Obtains the instance of the SharedOrderView class which is responsible for rendering the nodes to the root node.\n   *\n   * @param {HTMLTableRowElement} rootNode The TR element, which is root element for row headers (TH).\n   * @returns {SharedOrderView}\n   */\n  obtainOrderView(rootNode) {\n    let orderView;\n\n    if (this.orderViews.has(rootNode)) {\n      orderView = this.orderViews.get(rootNode);\n    } else {\n      orderView = new SharedOrderView(\n        rootNode,\n        sourceColumnIndex => this.nodesPool.obtain(this.sourceRowIndex, sourceColumnIndex),\n        this.nodeType,\n      );\n      this.orderViews.set(rootNode, orderView);\n    }\n\n    return orderView;\n  }\n\n  /**\n   * Renders the cells.\n   */\n  render() {\n    const { rowsToRender, rowHeaderFunctions, rowHeadersCount, rows, cells } = this.table;\n\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      const sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n      const TR = rows.getRenderedNode(visibleRowIndex);\n\n      this.sourceRowIndex = sourceRowIndex;\n\n      const orderView = this.obtainOrderView(TR);\n      const cellsView = cells.obtainOrderView(TR);\n\n      orderView\n        .appendView(cellsView)\n        .setSize(rowHeadersCount)\n        .setOffset(this.table.renderedColumnToSource(0))\n        .start();\n\n      for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n        orderView.render();\n\n        const TH = orderView.getCurrentNode();\n\n        TH.className = '';\n        TH.removeAttribute('style');\n\n        // Remove all accessibility-related attributes for the header to start fresh.\n        removeAttribute(TH, [\n          new RegExp('aria-(.*)'),\n          new RegExp('role')\n        ]);\n\n        if (this.table.isAriaEnabled()) {\n          setAttribute(TH, [\n            A11Y_ROWHEADER(),\n            A11Y_SCOPE_ROW(),\n            A11Y_COLINDEX(visibleColumnIndex + 1),\n            A11Y_TABINDEX(-1)\n          ]);\n        }\n\n        rowHeaderFunctions[visibleColumnIndex](sourceRowIndex, TH, visibleColumnIndex);\n      }\n\n      orderView.end();\n    }\n  }\n}\n","import OrderView from './view';\nimport SharedOrderView from './sharedView';\n\nexport {\n  OrderView,\n  SharedOrderView,\n};\n","import { WORKING_SPACE_TOP, WORKING_SPACE_BOTTOM } from './constants';\nimport ViewSizeSet from './viewSizeSet';\n\n/**\n * Executive model for each table renderer. It's responsible for injecting DOM nodes in a\n * specified order and adjusting the number of elements in the root node.\n *\n * Only this class have rights to juggling DOM elements within the root node (see render method).\n *\n * @class {OrderView}\n */\nexport default class OrderView {\n  /**\n   * The root node to manage with.\n   *\n   * @type {HTMLElement}\n   */\n  rootNode;\n  /**\n   * Factory for newly created DOM elements.\n   *\n   * @type {Function}\n   */\n  nodesPool;\n  /**\n   * Holder for sizing and positioning of the view.\n   *\n   * @type {ViewSizeSet}\n   */\n  sizeSet = new ViewSizeSet();\n  /**\n   * Node type which the order view will manage while rendering the DOM elements.\n   *\n   * @type {string}\n   */\n  childNodeType;\n  /**\n   * The visual index of currently processed row.\n   *\n   * @type {number}\n   */\n  visualIndex = 0;\n  /**\n   * The list of DOM elements which are rendered for this render cycle.\n   *\n   * @type {HTMLElement[]}\n   */\n  collectedNodes = [];\n\n  constructor(rootNode, nodesPool, childNodeType) {\n    this.rootNode = rootNode;\n    this.nodesPool = nodesPool;\n    this.childNodeType = childNodeType.toUpperCase();\n  }\n\n  /**\n   * Sets the size for rendered elements. It can be a size for rows, cells or size for row\n   * headers etc. It depends for what table renderer this instance was created.\n   *\n   * @param {number} size The size.\n   * @returns {OrderView}\n   */\n  setSize(size) {\n    this.sizeSet.setSize(size);\n\n    return this;\n  }\n\n  /**\n   * Sets the offset for rendered elements. The offset describes the shift between 0 and\n   * the first rendered element according to the scroll position.\n   *\n   * @param {number} offset The offset.\n   * @returns {OrderView}\n   */\n  setOffset(offset) {\n    this.sizeSet.setOffset(offset);\n\n    return this;\n  }\n\n  /**\n   * Checks if this instance of the view shares the root node with another instance. This happens only once when\n   * a row (TR) as a root node is managed by two OrderView instances. If this happens another DOM injection\n   * algorithm is performed to achieve consistent order.\n   *\n   * @returns {boolean}\n   */\n  isSharedViewSet() {\n    return this.sizeSet.isShared();\n  }\n\n  /**\n   * Returns rendered DOM element based on visual index.\n   *\n   * @param {number} visualIndex The visual index.\n   * @returns {HTMLElement}\n   */\n  getNode(visualIndex) {\n    return visualIndex < this.collectedNodes.length ? this.collectedNodes[visualIndex] : null;\n  }\n\n  /**\n   * Returns currently processed DOM element.\n   *\n   * @returns {HTMLElement}\n   */\n  getCurrentNode() {\n    const length = this.collectedNodes.length;\n\n    return length > 0 ? this.collectedNodes[length - 1] : null;\n  }\n\n  /**\n   * Returns rendered child count for this instance.\n   *\n   * @returns {number}\n   */\n  getRenderedChildCount() {\n    const { rootNode, sizeSet } = this;\n    let childElementCount = 0;\n\n    if (this.isSharedViewSet()) {\n      let element = rootNode.firstElementChild;\n\n      while (element) {\n        if (element.tagName === this.childNodeType) {\n          childElementCount += 1;\n\n        } else if (sizeSet.isPlaceOn(WORKING_SPACE_TOP)) {\n          break;\n        }\n        element = element.nextElementSibling;\n      }\n    } else {\n      childElementCount = rootNode.childElementCount;\n    }\n\n    return childElementCount;\n  }\n\n  /**\n   * Setups and prepares all necessary properties and start the rendering process.\n   * This method has to be called only once (at the start) for the render cycle.\n   */\n  start() {\n    this.collectedNodes.length = 0;\n    this.visualIndex = 0;\n\n    const { rootNode, sizeSet } = this;\n    const isShared = this.isSharedViewSet();\n    const { nextSize } = sizeSet.getViewSize();\n\n    let childElementCount = this.getRenderedChildCount();\n\n    while (childElementCount < nextSize) {\n      const newNode = this.nodesPool();\n\n      if (!isShared || (isShared && sizeSet.isPlaceOn(WORKING_SPACE_BOTTOM))) {\n        rootNode.appendChild(newNode);\n      } else {\n        rootNode.insertBefore(newNode, rootNode.firstChild);\n      }\n      childElementCount += 1;\n    }\n\n    const isSharedPlacedOnTop = (isShared && sizeSet.isPlaceOn(WORKING_SPACE_TOP));\n\n    while (childElementCount > nextSize) {\n      rootNode.removeChild(isSharedPlacedOnTop ? rootNode.firstChild : rootNode.lastChild);\n      childElementCount -= 1;\n    }\n  }\n\n  /**\n   * Renders the DOM element based on visual index (which is calculated internally).\n   * This method has to be called as many times as the size count is met (to cover all previously rendered DOM elements).\n   */\n  render() {\n    const { rootNode, sizeSet } = this;\n    let visualIndex = this.visualIndex;\n\n    if (this.isSharedViewSet() && sizeSet.isPlaceOn(WORKING_SPACE_BOTTOM)) {\n      visualIndex += sizeSet.sharedSize.nextSize;\n    }\n\n    let node = rootNode.childNodes[visualIndex];\n\n    if (node.tagName !== this.childNodeType) {\n      const newNode = this.nodesPool();\n\n      rootNode.replaceChild(newNode, node);\n      node = newNode;\n    }\n\n    this.collectedNodes.push(node);\n    this.visualIndex += 1;\n  }\n\n  /**\n   * Ends the render process.\n   * This method has to be called only once (at the end) for the render cycle.\n   */\n  end() { }\n}\n","/**\n * Describes that ViewSizeSet instance doesn't share sizes with another\n * instance (root node can contain only one type of children nodes).\n *\n * @type {number}\n */\nexport const WORKING_SPACE_ALL = 0;\n/**\n * Describes that ViewSizeSet instance share sizes with another instance and\n * set working space for this instance to 'top' (root node can contain multiple\n * types of children and this instance will be occupied top space of the root node).\n *\n * @type {number}\n */\nexport const WORKING_SPACE_TOP = 1;\n/**\n * Describes that ViewSizeSet instance share sizes with another instance and\n * set working space for this instance to 'bottom' (root node can contain multiple\n * types of children and this instance will be occupied bottom space of the root node).\n *\n * @type {number}\n */\nexport const WORKING_SPACE_BOTTOM = 2;\n","import ViewSize from './viewSize';\nimport { WORKING_SPACE_ALL, WORKING_SPACE_TOP, WORKING_SPACE_BOTTOM } from './constants';\n\n/**\n * The class is a source of the truth of information about the current and\n * next size of the rendered DOM elements and current and next offset of\n * the view. That information allows us to calculate diff between current\n * DOM order and this which should be rendered without touching the DOM API at all.\n *\n * Mostly the ViewSizeSet is created for each individual renderer. But in\n * the table, there is one case where this size information should be shared\n * between two different instances (different table renderers). This is a TR\n * element which can contain TH elements - managed by own renderer and\n * TD elements - managed by another renderer. To generate correct DOM order\n * for them it is required to connect these two instances by reference\n * through `sharedSize`.\n *\n * @class {ViewSizeSet}\n */\nexport default class ViewSizeSet {\n  /**\n   * Holder for current and next view size and offset.\n   *\n   * @type {ViewSize}\n   */\n  size = new ViewSize();\n  /**\n   * Defines if this instance shares its size with another instance. If it's in the shared\n   * mode it defines what space it occupies ('top' or 'bottom').\n   *\n   * @type {number}\n   */\n  workingSpace = WORKING_SPACE_ALL;\n  /**\n   * Shared Size instance.\n   *\n   * @type {ViewSize}\n   */\n  sharedSize = null;\n\n  /**\n   * Sets the size for rendered elements. It can be a size for rows, cells or size for row\n   * headers etc.\n   *\n   * @param {number} size The size.\n   */\n  setSize(size) {\n    this.size.setSize(size);\n  }\n\n  /**\n   * Sets the offset for rendered elements. The offset describes the shift between 0 and\n   * the first rendered element according to the scroll position.\n   *\n   * @param {number} offset The offset.\n   */\n  setOffset(offset) {\n    this.size.setOffset(offset);\n  }\n\n  /**\n   * Returns ViewSize instance.\n   *\n   * @returns {ViewSize}\n   */\n  getViewSize() {\n    return this.size;\n  }\n\n  /**\n   * Checks if this ViewSizeSet is sharing the size with another instance.\n   *\n   * @returns {boolean}\n   */\n  isShared() {\n    return this.sharedSize instanceof ViewSize;\n  }\n\n  /**\n   * Checks what working space describes this size instance.\n   *\n   * @param {number} workingSpace The number which describes the type of the working space (see constants.js).\n   * @returns {boolean}\n   */\n  isPlaceOn(workingSpace) {\n    return this.workingSpace === workingSpace;\n  }\n\n  /**\n   * Appends the ViewSizeSet instance to this instance that turns it into a shared mode.\n   *\n   * @param {ViewSizeSet} viewSize The instance of the ViewSizeSet class.\n   */\n  append(viewSize) {\n    this.workingSpace = WORKING_SPACE_TOP;\n    viewSize.workingSpace = WORKING_SPACE_BOTTOM;\n    this.sharedSize = viewSize.getViewSize();\n  }\n\n  /**\n   * Prepends the ViewSize instance to this instance that turns it into a shared mode.\n   *\n   * @param {ViewSizeSet} viewSize The instance of the ViewSizeSet class.\n   */\n  prepend(viewSize) {\n    this.workingSpace = WORKING_SPACE_BOTTOM;\n    viewSize.workingSpace = WORKING_SPACE_TOP;\n    this.sharedSize = viewSize.getViewSize();\n  }\n}\n","/**\n * Holder for current and next size (count of rendered and to render DOM elements) and offset.\n *\n * @class {ViewSize}\n */\nexport default class ViewSize {\n  /**\n   * Current size of the rendered DOM elements.\n   *\n   * @type {number}\n   */\n  currentSize = 0;\n  /**\n   * Next size of the rendered DOM elements which should be fulfilled.\n   *\n   * @type {number}\n   */\n  nextSize = 0;\n  /**\n   * Current offset.\n   *\n   * @type {number}\n   */\n  currentOffset = 0;\n  /**\n   * Next offset.\n   *\n   * @type {number}\n   */\n  nextOffset = 0;\n\n  /**\n   * Sets new size of the rendered DOM elements.\n   *\n   * @param {number} size The size.\n   */\n  setSize(size) {\n    this.currentSize = this.nextSize;\n    this.nextSize = size;\n  }\n\n  /**\n   * Sets new offset.\n   *\n   * @param {number} offset The offset.\n   */\n  setOffset(offset) {\n    this.currentOffset = this.nextOffset;\n    this.nextOffset = offset;\n  }\n}\n","import OrderView from './view';\n\n/**\n * Executive model for TR root nodes.\n *\n * @class {SharedOrderView}\n */\nexport default class SharedOrderView extends OrderView {\n  /**\n   * The method results in merging external order view into the current order. This happens only for order views which\n   * operate on the same root node.\n   *\n   * In the table, there is only one scenario when this happens. TR root element\n   * has a common root node with cells order view and row headers order view. Both classes have to share\n   * information about their order sizes to make proper diff calculations.\n   *\n   * @param {OrderView} orderView The order view to merging with. The view will be added at the beginning of the list.\n   * @returns {SharedOrderView}\n   */\n  prependView(orderView) {\n    this.sizeSet.prepend(orderView.sizeSet);\n    orderView.sizeSet.append(this.sizeSet);\n\n    return this;\n  }\n\n  /**\n   * The method results in merging external order view into the current order. This happens only for order views which\n   * operate on the same root node.\n   *\n   * In the table, there is only one scenario when this happens. TR root element\n   * has a common root node with cells order view and row headers order view. Both classes have to share\n   * information about their order sizes to make proper diff calculations.\n   *\n   * @param {OrderView} orderView The order view to merging with. The view will be added at the end of the list.\n   * @returns {SharedOrderView}\n   */\n  appendView(orderView) {\n    this.sizeSet.append(orderView.sizeSet);\n    orderView.sizeSet.prepend(this.sizeSet);\n\n    return this;\n  }\n}\n","import NodesPool from './../utils/nodesPool';\n\n/**\n * Base renderer class, abstract logic for specialized renderers.\n *\n * @class BaseRenderer\n */\nexport default class BaseRenderer {\n  /**\n   * Factory for newly created DOM elements.\n   *\n   * NodePool should be used for each renderer. For the first stage of the refactoring\n   * process, only some of the renderers are implemented a new approach.\n   *\n   * @type {NodesPool|null}\n   */\n  nodesPool = null;\n  /**\n   * Node type which the renderer will manage while building the table (eg. 'TD', 'TR', 'TH').\n   *\n   * @type {string}\n   */\n  nodeType;\n  /**\n   * The root node to which newly created elements will be inserted.\n   *\n   * @type {HTMLElement}\n   */\n  rootNode;\n  /**\n   * The instance of the Table class, a wrapper for all renderers and holder for properties describe table state.\n   *\n   * @type {TableRenderer}\n   */\n  table = null;\n  /**\n   * Counter of nodes already added.\n   *\n   * @type {number}\n   */\n  renderedNodes = 0;\n\n  constructor(nodeType, rootNode) {\n    this.nodesPool = typeof nodeType === 'string' ? new NodesPool(nodeType) : null;\n    this.nodeType = nodeType;\n    this.rootNode = rootNode;\n  }\n\n  /**\n   * Sets the table renderer instance to the current renderer.\n   *\n   * @param {TableRenderer} table The TableRenderer instance.\n   */\n  setTable(table) {\n    if (this.nodesPool) {\n      this.nodesPool.setRootDocument(table.rootDocument);\n    }\n\n    this.table = table;\n  }\n\n  /**\n   * Adjusts the number of rendered nodes.\n   */\n  adjust() { }\n\n  /**\n   * Renders the contents to the elements.\n   */\n  render() { }\n}\n","/**\n * Factory for newly created DOM elements.\n *\n * @class {NodesPool}\n */\nexport default class NodesPool {\n  /**\n   * Node type to generate (ew 'th', 'td').\n   *\n   * @type {string}\n   */\n  nodeType;\n\n  constructor(nodeType) {\n    this.nodeType = nodeType.toUpperCase();\n  }\n\n  /**\n   * Set document owner for this instance.\n   *\n   * @param {HTMLDocument} rootDocument The document window owner.\n   */\n  setRootDocument(rootDocument) {\n    this.rootDocument = rootDocument;\n  }\n\n  /**\n   * Obtains an element. The returned elements in the feature can be cached.\n   *\n   * @returns {HTMLElement}\n   */\n  obtain() {\n    return this.rootDocument.createElement(this.nodeType);\n  }\n}\n","import {\n  empty,\n  setAttribute,\n  removeAttribute,\n} from './../../../../helpers/dom/element';\nimport BaseRenderer from './_base';\nimport {\n  A11Y_COLINDEX,\n  A11Y_COLUMNHEADER,\n  A11Y_ROW,\n  A11Y_ROWGROUP,\n  A11Y_ROWINDEX,\n  A11Y_SCOPE_COL,\n  A11Y_TABINDEX,\n} from '../../../../helpers/a11y';\n\n/**\n * Column headers renderer responsible for managing (inserting, tracking, rendering) TR and TH elements.\n *\n *   <thead> (root node)\n *     ├ <tr>   \\\n *     ├ <tr>    \\\n *     ├ <tr>     - ColumnHeadersRenderer\n *     ├ <tr>    /\n *     └ <tr>   /.\n *\n * @class {ColumnHeadersRenderer}\n */\nexport default class ColumnHeadersRenderer extends BaseRenderer {\n  constructor(rootNode) {\n    super(null, rootNode); // NodePool is not implemented for this renderer yet\n  }\n\n  /**\n   * Adjusts the number of the rendered elements.\n   */\n  adjust() {\n    const { columnHeadersCount, rowHeadersCount } = this.table;\n    let TR = this.rootNode.firstChild;\n\n    if (columnHeadersCount) {\n      const { columnsToRender } = this.table;\n      const allColumnsToRender = columnsToRender + rowHeadersCount;\n\n      for (let i = 0, len = columnHeadersCount; i < len; i++) {\n        TR = this.rootNode.childNodes[i];\n\n        if (!TR) {\n          TR = this.table.rootDocument.createElement('tr');\n          this.rootNode.appendChild(TR);\n        }\n        this.renderedNodes = TR.childNodes.length;\n\n        while (this.renderedNodes < allColumnsToRender) {\n          TR.appendChild(this.table.rootDocument.createElement('th'));\n          this.renderedNodes += 1;\n        }\n        while (this.renderedNodes > allColumnsToRender) {\n          TR.removeChild(TR.lastChild);\n          this.renderedNodes -= 1;\n        }\n      }\n      const theadChildrenLength = this.rootNode.childNodes.length;\n\n      if (theadChildrenLength > columnHeadersCount) {\n        for (let i = columnHeadersCount; i < theadChildrenLength; i++) {\n          this.rootNode.removeChild(this.rootNode.lastChild);\n        }\n      }\n    } else if (TR) {\n      empty(TR);\n    }\n  }\n\n  /**\n   * Renders the TH elements.\n   */\n  render() {\n    const { columnHeadersCount } = this.table;\n\n    if (this.table.isAriaEnabled()) {\n      setAttribute(this.rootNode, [\n        A11Y_ROWGROUP()\n      ]);\n    }\n\n    for (let rowHeaderIndex = 0; rowHeaderIndex < columnHeadersCount; rowHeaderIndex += 1) {\n      const { columnHeaderFunctions, columnsToRender, rowHeadersCount } = this.table;\n      const TR = this.rootNode.childNodes[rowHeaderIndex];\n\n      if (this.table.isAriaEnabled()) {\n        setAttribute(TR, [\n          A11Y_ROW(),\n          A11Y_ROWINDEX(rowHeaderIndex + 1),\n        ]);\n      }\n\n      for (let renderedColumnIndex = (-1) * rowHeadersCount; renderedColumnIndex < columnsToRender; renderedColumnIndex += 1) { // eslint-disable-line max-len\n        const sourceColumnIndex = this.table.renderedColumnToSource(renderedColumnIndex);\n        const TH = TR.childNodes[renderedColumnIndex + rowHeadersCount];\n\n        TH.className = '';\n        TH.removeAttribute('style');\n\n        // Remove all accessibility-related attributes for the header to start fresh.\n        removeAttribute(TH, [\n          new RegExp('aria-(.*)'),\n          new RegExp('role')\n        ]);\n\n        if (this.table.isAriaEnabled()) {\n          setAttribute(TH, [\n            A11Y_COLINDEX(renderedColumnIndex + 1 + this.table.rowHeadersCount),\n            A11Y_TABINDEX(-1),\n            A11Y_COLUMNHEADER(),\n            ...(renderedColumnIndex >= 0 ? [\n              A11Y_SCOPE_COL(),\n            ] : [\n              // Adding `role=row` to the corner headers to prevent\n              // https://github.com/handsontable/dev-handsontable/issues/1574\n              A11Y_ROW()\n            ]),\n          ]);\n        }\n\n        columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);\n      }\n    }\n  }\n}\n","import BaseRenderer from './_base';\nimport { warn } from './../../../../helpers/console';\nimport { toSingleLine } from './../../../../helpers/templateLiteralTag';\nimport { addClass } from './../../../../helpers/dom/element';\n\nlet performanceWarningAppeared = false;\n\n/**\n * Colgroup renderer responsible for managing (inserting, tracking, rendering) COL elements.\n *\n *   <colgroup> (root node)\n *     ├ <col>   \\\n *     ├ <col>    \\\n *     ├ <col>     - ColGroupRenderer\n *     ├ <col>    /\n *     └ <col>   /.\n *\n * @class {ColGroupRenderer}\n */\nexport default class ColGroupRenderer extends BaseRenderer {\n  constructor(rootNode) {\n    super(null, rootNode); // NodePool is not implemented for this renderer yet\n  }\n\n  /**\n   * Adjusts the number of the rendered elements.\n   */\n  adjust() {\n    const { columnsToRender, rowHeadersCount } = this.table;\n    const allColumnsToRender = columnsToRender + rowHeadersCount;\n\n    while (this.renderedNodes < allColumnsToRender) {\n      this.rootNode.appendChild(this.table.rootDocument.createElement('col'));\n      this.renderedNodes += 1;\n    }\n    while (this.renderedNodes > allColumnsToRender) {\n      this.rootNode.removeChild(this.rootNode.lastChild);\n      this.renderedNodes -= 1;\n    }\n  }\n\n  /**\n   * Renders the col group elements.\n   */\n  render() {\n    this.adjust();\n\n    const { columnsToRender, rowHeadersCount } = this.table;\n\n    if (!performanceWarningAppeared && columnsToRender > 1000) {\n      performanceWarningAppeared = true;\n      warn(toSingleLine`Performance tip: Handsontable rendered more than 1000 visible columns.\\x20\n        Consider limiting the number of rendered columns by specifying the table width and/or\\x20\n        turning off the \"renderAllColumns\" option.`);\n    }\n\n    // Render column nodes for row headers\n    for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n      const sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n      const width = this.table.columnUtils.getHeaderWidth(sourceColumnIndex);\n\n      this.rootNode.childNodes[visibleColumnIndex].style.width = `${width}px`;\n    }\n\n    // Render column nodes for cells\n    for (let visibleColumnIndex = 0; visibleColumnIndex < columnsToRender; visibleColumnIndex++) {\n      const sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n      const width = this.table.columnUtils.getStretchedColumnWidth(sourceColumnIndex);\n\n      this.rootNode.childNodes[visibleColumnIndex + rowHeadersCount].style.width = `${width}px`;\n    }\n\n    const firstChild = this.rootNode.firstChild;\n\n    if (firstChild) {\n      addClass(firstChild, 'rowHeader');\n    }\n  }\n}\n","import BaseRenderer from './_base';\nimport { warn } from './../../../../helpers/console';\nimport { toSingleLine } from './../../../../helpers/templateLiteralTag';\nimport { OrderView } from './../utils/orderView';\nimport {\n  addClass,\n  removeClass,\n  setAttribute\n} from '../../../../helpers/dom/element';\nimport {\n  A11Y_ROW,\n  A11Y_ROWGROUP,\n  A11Y_ROWINDEX\n} from '../../../../helpers/a11y';\n\nconst ROW_CLASSNAMES = {\n  rowEven: 'ht__row_even',\n  rowOdd: 'ht__row_odd',\n};\nlet performanceWarningAppeared = false;\n\n/**\n * Rows renderer responsible for managing (inserting, tracking, rendering) TR elements belongs to TBODY.\n *\n *   <tbody> (root node)\n *     ├ <tr>   \\\n *     ├ <tr>    \\\n *     ├ <tr>     - RowsRenderer\n *     ├ <tr>    /\n *     └ <tr>   /.\n *\n * @class {RowsRenderer}\n */\nexport default class RowsRenderer extends BaseRenderer {\n  /**\n   * Cache for OrderView classes connected to specified node.\n   *\n   * @type {WeakMap}\n   */\n  orderView;\n\n  constructor(rootNode) {\n    super('TR', rootNode);\n\n    this.orderView = new OrderView(\n      rootNode,\n      sourceRowIndex => this.nodesPool.obtain(sourceRowIndex),\n      this.nodeType,\n    );\n  }\n\n  /**\n   * Returns currently rendered node.\n   *\n   * @param {string} visualIndex Visual index of the rendered node (it always goeas from 0 to N).\n   * @returns {HTMLTableRowElement}\n   */\n  getRenderedNode(visualIndex) {\n    return this.orderView.getNode(visualIndex);\n  }\n\n  /**\n   * Renders the cells.\n   */\n  render() {\n    const { rowsToRender } = this.table;\n\n    if (!performanceWarningAppeared && rowsToRender > 1000) {\n      performanceWarningAppeared = true;\n      warn(toSingleLine`Performance tip: Handsontable rendered more than 1000 visible rows.\\x20\n        Consider limiting the number of rendered rows by specifying the table height and/or\\x20\n        turning off the \"renderAllRows\" option.`);\n    }\n\n    if (this.table.isAriaEnabled()) {\n      setAttribute(this.rootNode, [\n        A11Y_ROWGROUP()\n      ]);\n    }\n\n    this.orderView\n      .setSize(rowsToRender)\n      .setOffset(this.table.renderedRowToSource(0))\n      .start();\n\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      this.orderView.render();\n\n      const TR = this.orderView.getCurrentNode();\n      const sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n\n      if (this.table.isAriaEnabled()) {\n        setAttribute(TR, [\n          A11Y_ROW(),\n          // `aria-rowindex` is incremented by both tbody and thead rows.\n          A11Y_ROWINDEX(sourceRowIndex + (this.table.rowUtils?.dataAccessObject?.columnHeaders.length ?? 0) + 1),\n        ]);\n      }\n\n      removeClass(TR, [ROW_CLASSNAMES.rowEven, ROW_CLASSNAMES.rowOdd]);\n\n      if ((sourceRowIndex + 1) % 2 === 0) {\n        addClass(TR, ROW_CLASSNAMES.rowEven);\n\n      } else {\n        addClass(TR, ROW_CLASSNAMES.rowOdd);\n      }\n    }\n\n    this.orderView.end();\n  }\n}\n","import {\n  hasClass,\n  removeAttribute,\n  setAttribute,\n} from './../../../../helpers/dom/element';\nimport { SharedOrderView } from './../utils/orderView';\nimport BaseRenderer from './_base';\nimport {\n  A11Y_COLINDEX,\n  A11Y_GRIDCELL,\n  A11Y_TABINDEX\n} from '../../../../helpers/a11y';\n\n/**\n * Cell renderer responsible for managing (inserting, tracking, rendering) TD elements.\n *\n *   <tr> (root node)\n *     ├ <th>   --- RowHeadersRenderer\n *     ├ <td>   \\\n *     ├ <td>    \\\n *     ├ <td>     - CellsRenderer\n *     ├ <td>    /\n *     └ <td>   /.\n *\n * @class {CellsRenderer}\n */\nexport default class CellsRenderer extends BaseRenderer {\n  /**\n   * Cache for OrderView classes connected to specified node.\n   *\n   * @type {WeakMap}\n   */\n  orderViews = new WeakMap();\n  /**\n   * Row index which specifies the row position of the processed cell.\n   *\n   * @type {number}\n   */\n  sourceRowIndex = 0;\n\n  constructor() {\n    super('TD');\n  }\n\n  /**\n   * Obtains the instance of the SharedOrderView class which is responsible for rendering the nodes to the root node.\n   *\n   * @param {HTMLTableRowElement} rootNode The TR element, which is root element for cells (TD).\n   * @returns {SharedOrderView}\n   */\n  obtainOrderView(rootNode) {\n    let orderView;\n\n    if (this.orderViews.has(rootNode)) {\n      orderView = this.orderViews.get(rootNode);\n    } else {\n      orderView = new SharedOrderView(\n        rootNode,\n        sourceColumnIndex => this.nodesPool.obtain(this.sourceRowIndex, sourceColumnIndex),\n        this.nodeType,\n      );\n      this.orderViews.set(rootNode, orderView);\n    }\n\n    return orderView;\n  }\n\n  /**\n   * Renders the cells.\n   */\n  render() {\n    const { rowsToRender, columnsToRender, rows, rowHeaders } = this.table;\n\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      const sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n      const TR = rows.getRenderedNode(visibleRowIndex);\n\n      this.sourceRowIndex = sourceRowIndex;\n\n      const orderView = this.obtainOrderView(TR);\n      const rowHeadersView = rowHeaders.obtainOrderView(TR);\n\n      // @TODO(perf-tip): For cells other than \"visual 0\" generating diff leads/commands can be skipped. New order view\n      // should share state between next orderViews.\n      orderView\n        .prependView(rowHeadersView)\n        .setSize(columnsToRender)\n        .setOffset(this.table.renderedColumnToSource(0))\n        .start();\n\n      for (let visibleColumnIndex = 0; visibleColumnIndex < columnsToRender; visibleColumnIndex++) {\n        orderView.render();\n\n        const TD = orderView.getCurrentNode();\n        const sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n\n        if (!hasClass(TD, 'hide')) { // Workaround for hidden columns plugin\n          TD.className = '';\n        }\n\n        TD.removeAttribute('style');\n        TD.removeAttribute('dir');\n\n        // Remove all accessibility-related attributes for the cell to start fresh.\n        removeAttribute(TD, [\n          new RegExp('aria-(.*)'),\n          new RegExp('role')\n        ]);\n\n        this.table.cellRenderer(sourceRowIndex, sourceColumnIndex, TD);\n\n        if (this.table.isAriaEnabled()) {\n          setAttribute(TD, [\n            ...(TD.hasAttribute('role') ? [] : [A11Y_GRIDCELL()]),\n            A11Y_TABINDEX(-1),\n            // `aria-colindex` is incremented by both tbody and thead rows.\n            A11Y_COLINDEX(sourceColumnIndex + (this.table.rowUtils?.dataAccessObject?.rowHeaders.length ?? 0) + 1),\n          ]);\n        }\n      }\n\n      orderView.end();\n    }\n  }\n}\n","/**\n * TableRenderer class collects all renderers and properties necessary for table creation. It's\n * responsible for adjusting and rendering each renderer.\n *\n * Below is a diagram of the renderers together with an indication of what they are responisble for.\n *   <table>\n *     <colgroup>  \\ (root node)\n *       <col>      \\\n *       <col>       \\___ ColGroupRenderer\n *       <col>       /\n *       <col>      /\n *     </colgroup> /\n *     <thead>     \\ (root node)\n *       <tr>       \\\n *         <th>      \\\n *         <th>       \\____ ColumnHeadersRenderer\n *         <th>       /\n *         <th>      /\n *       </tr>      /\n *     </thead>    /\n *     <tbody>   ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\\ (root node)\n *       <tr>   (root node)          \\\n *         <th>  --- RowHeadersRenderer\n *         <td>  \\                     \\\n *         <td>   -- CellsRenderer      \\\n *         <td>  /                       \\\n *       </tr>                            \\\n *       <tr>   (root node)                \\\n *         <th>  --- RowHeadersRenderer     \\\n *         <td>  \\                           \\___ RowsRenderer\n *         <td>   -- CellsRenderer           /\n *         <td>  /                          /\n *       </tr>                             /\n *       <tr>   (root node)               /\n *         <th>  --- RowHeadersRenderer  /\n *         <td>  \\                      /\n *         <td>   -- CellsRenderer     /\n *         <td>  /                    /\n *       </tr>                       /\n *     </tbody>  ___________________/\n *   </table>.\n *\n * @class {RowsRenderer}\n */\nexport default class TableRenderer {\n  /**\n   * Table element which will be used to render the children element.\n   *\n   * @type {HTMLTableElement}\n   */\n  rootNode;\n  /**\n   * Document owner of the root node.\n   *\n   * @type {HTMLDocument}\n   */\n  rootDocument;\n  /**\n   * Renderer class responsible for rendering row headers.\n   *\n   * @type {RowsRenderer}\n   */\n  rowHeaders = null;\n  /**\n   * Renderer class responsible for rendering column headers.\n   *\n   * @type {ColumnHeadersRenderer}\n   */\n  columnHeaders = null;\n  /**\n   * Renderer class responsible for rendering col in colgroup.\n   *\n   * @type {ColGroupRenderer}\n   */\n  colGroup = null;\n  /**\n   * Renderer class responsible for rendering rows in tbody.\n   *\n   * @type {RowsRenderer}\n   */\n  rows = null;\n  /**\n   * Renderer class responsible for rendering cells.\n   *\n   * @type {CellsRenderer}\n   */\n  cells = null;\n  /**\n   * Row filter which contains all necessary information about row index transformation.\n   *\n   * @type {RowFilter}\n   */\n  rowFilter = null;\n  /**\n   * Column filter which contains all necessary information about column index transformation.\n   *\n   * @type {ColumnFilter}\n   */\n  columnFilter = null;\n  /**\n   * Row utils class which contains all necessary information about sizes of the rows.\n   *\n   * @type {RowUtils}\n   */\n  rowUtils = null;\n  /**\n   * Column utils class which contains all necessary information about sizes of the columns.\n   *\n   * @type {ColumnUtils}\n   */\n  columnUtils = null;\n  /**\n   * Indicates how much rows should be rendered to fill whole table viewport.\n   *\n   * @type {number}\n   */\n  rowsToRender = 0;\n  /**\n   * Indicates how much columns should be rendered to fill whole table viewport.\n   *\n   * @type {number}\n   */\n  columnsToRender = 0;\n  /**\n   * An array of functions to be used as a content factory to row headers.\n   *\n   * @type {Function[]}\n   */\n  rowHeaderFunctions = [];\n  /**\n   * Count of the function used to render row headers.\n   *\n   * @type {number}\n   */\n  rowHeadersCount = 0;\n  /**\n   * An array of functions to be used as a content factory to column headers.\n   *\n   * @type {Function[]}\n   */\n  columnHeaderFunctions = [];\n  /**\n   * Count of the function used to render column headers.\n   *\n   * @type {number}\n   */\n  columnHeadersCount = 0;\n  /**\n   * Cell renderer used to render cells content.\n   *\n   * @type {Function}\n   */\n  cellRenderer;\n  /**\n   * Holds the name of the currently active overlay.\n   *\n   * @type {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'}\n   */\n  activeOverlayName;\n\n  constructor(rootNode, { cellRenderer } = {}) {\n    this.rootNode = rootNode;\n    this.rootDocument = this.rootNode.ownerDocument;\n    this.cellRenderer = cellRenderer;\n  }\n\n  /**\n   * Sets the overlay that is currently rendered. If `null` is provided, the master overlay is set.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName The overlay name.\n   */\n  setActiveOverlayName(overlayName) {\n    this.activeOverlayName = overlayName;\n  }\n\n  /**\n   * Set row and column util classes.\n   *\n   * @param {RowUtils} rowUtils RowUtils instance which provides useful methods related to row sizes.\n   * @param {ColumnUtils} columnUtils ColumnUtils instance which provides useful methods related to row sizes.\n   */\n  setAxisUtils(rowUtils, columnUtils) {\n    this.rowUtils = rowUtils;\n    this.columnUtils = columnUtils;\n  }\n\n  /**\n   * Sets viewport size of the table.\n   *\n   * @param {number} rowsCount An amount of rows to render.\n   * @param {number} columnsCount An amount of columns to render.\n   */\n  setViewportSize(rowsCount, columnsCount) {\n    this.rowsToRender = rowsCount;\n    this.columnsToRender = columnsCount;\n  }\n\n  /**\n   * Sets row and column filter instances.\n   *\n   * @param {RowFilter} rowFilter Row filter instance which contains all necessary information about row index transformation.\n   * @param {ColumnFilter} columnFilter Column filter instance which contains all necessary information about row\n   * index transformation.\n   */\n  setFilters(rowFilter, columnFilter) {\n    this.rowFilter = rowFilter;\n    this.columnFilter = columnFilter;\n  }\n\n  /**\n   * Sets row and column header functions.\n   *\n   * @param {Function[]} rowHeaders Row header functions. Factories for creating content for row headers.\n   * @param {Function[]} columnHeaders Column header functions. Factories for creating content for column headers.\n   */\n  setHeaderContentRenderers(rowHeaders, columnHeaders) {\n    this.rowHeaderFunctions = rowHeaders;\n    this.rowHeadersCount = rowHeaders.length;\n    this.columnHeaderFunctions = columnHeaders;\n    this.columnHeadersCount = columnHeaders.length;\n  }\n\n  /**\n   * Sets table renderers.\n   *\n   * @param {renderers} renderers The renderer units.\n   * @param {RowHeadersRenderer} renderers.rowHeaders Row headers renderer.\n   * @param {ColumnHeadersRenderer} renderers.columnHeaders Column headers renderer.\n   * @param {ColGroupRenderer} renderers.colGroup Col group renderer.\n   * @param {RowsRenderer} renderers.rows Rows renderer.\n   * @param {CellsRenderer} renderers.cells Cells renderer.\n   */\n  setRenderers({ rowHeaders, columnHeaders, colGroup, rows, cells } = {}) {\n    rowHeaders.setTable(this);\n    columnHeaders.setTable(this);\n    colGroup.setTable(this);\n    rows.setTable(this);\n    cells.setTable(this);\n\n    this.rowHeaders = rowHeaders;\n    this.columnHeaders = columnHeaders;\n    this.colGroup = colGroup;\n    this.rows = rows;\n    this.cells = cells;\n  }\n\n  /**\n   * Transforms visual/rendered row index to source index.\n   *\n   * @param {number} rowIndex Rendered index.\n   * @returns {number}\n   */\n  renderedRowToSource(rowIndex) {\n    return this.rowFilter.renderedToSource(rowIndex);\n  }\n\n  /**\n   * Transforms visual/rendered column index to source index.\n   *\n   * @param {number} columnIndex Rendered index.\n   * @returns {number}\n   */\n  renderedColumnToSource(columnIndex) {\n    return this.columnFilter.renderedToSource(columnIndex);\n  }\n\n  /**\n   * Returns `true` if the accessibility-related ARIA tags should be added to the table, `false` otherwise.\n   *\n   * @returns {boolean}\n   */\n  isAriaEnabled() {\n    return this.rowUtils.wtSettings.getSetting('ariaTags');\n  }\n\n  /**\n   * Renders the table.\n   */\n  render() {\n    this.colGroup.adjust();\n    this.columnHeaders.adjust();\n    this.rows.adjust();\n    this.rowHeaders.adjust();\n\n    this.columnHeaders.render();\n    this.rows.render();\n    this.rowHeaders.render();\n    this.cells.render();\n\n    // After the cells are rendered calculate columns width (or columns stretch width) to prepare proper values\n    // for colGroup renderer (which renders COL elements).\n    this.columnUtils.calculateWidths();\n    this.colGroup.render();\n\n    const { rowsToRender, rows } = this;\n\n    // Fix for multi-line content and for supporting `rowHeights` option.\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      const TR = rows.getRenderedNode(visibleRowIndex);\n\n      if (TR.firstChild) {\n        const sourceRowIndex = this.renderedRowToSource(visibleRowIndex);\n        const rowHeight = this.rowUtils.getHeightByOverlayName(sourceRowIndex, this.activeOverlayName);\n\n        if (rowHeight) {\n          // Decrease height. 1 pixel will be \"replaced\" by 1px border top\n          TR.firstChild.style.height = `${rowHeight - 1}px`;\n        } else {\n          TR.firstChild.style.height = '';\n        }\n      }\n    }\n  }\n}\n","import {\n  getScrollbarWidth,\n} from './../../../../helpers/dom/element';\nimport { ColumnStretching } from './columnStretching';\n\n/**\n * Column utils class contains all necessary information about sizes of the columns.\n *\n * @class {ColumnUtils}\n */\nexport default class ColumnUtils {\n  /**\n   * @type {TableDao}\n   */\n  dataAccessObject;\n  /**\n   * @type {Settings}\n   */\n  wtSettings;\n  /**\n   * @type {Map<number, number>}\n   */\n  headerWidths = new Map();\n  /**\n   * @type {ColumnStretching}\n   */\n  stretching;\n\n  /**\n   * @param {TableDao} dataAccessObject The table Data Access Object.\n   * @param {Settings} wtSettings The walkontable settings.\n   */\n  constructor(dataAccessObject, wtSettings) {\n    this.dataAccessObject = dataAccessObject;\n    this.wtSettings = wtSettings;\n\n    this.stretching = new ColumnStretching({\n      totalColumns: () => this.wtSettings.getSetting('totalColumns'),\n      stretchMode: () => this.wtSettings.getSetting('stretchH'),\n      stretchingColumnWidthFn: (stretchedWidth, column) =>\n        this.wtSettings.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column),\n      columnWidthFn: sourceCol => this.dataAccessObject.wtTable.getColumnWidth(sourceCol),\n    });\n  }\n\n  /**\n   * Returns column width based on passed source index.\n   *\n   * @param {number} sourceIndex Column source index.\n   * @returns {number}\n   */\n  getWidth(sourceIndex) {\n    const width = this.wtSettings.getSetting('columnWidth', sourceIndex)\n      || this.wtSettings.getSetting('defaultColumnWidth');\n\n    return width;\n  }\n\n  /**\n   * Returns stretched column width based on passed source index.\n   *\n   * @param {number} sourceIndex Column source index.\n   * @returns {number}\n   */\n  getStretchedColumnWidth(sourceIndex) {\n    let width = this.getWidth(sourceIndex);\n\n    const stretchedWidth = this.stretching.getStretchedColumnWidth(sourceIndex, width);\n\n    if (stretchedWidth) {\n      width = stretchedWidth;\n    }\n\n    return width;\n  }\n\n  /**\n   * Returns column header height based on passed header level.\n   *\n   * @param {number} level Column header level.\n   * @returns {number}\n   */\n  getHeaderHeight(level) {\n    let height = this.wtSettings.getSetting('defaultRowHeight');\n    const oversizedHeight = this.dataAccessObject.wtViewport.oversizedColumnHeaders[level];\n\n    if (oversizedHeight !== undefined) {\n      height = height ? Math.max(height, oversizedHeight) : oversizedHeight;\n    }\n\n    return height;\n  }\n\n  /**\n   * Returns column header width based on passed source index.\n   *\n   * @param {number} sourceIndex Column source index.\n   * @returns {number}\n   */\n  getHeaderWidth(sourceIndex) {\n    return this.headerWidths.get(this.dataAccessObject.wtTable.columnFilter.sourceToRendered(sourceIndex));\n  }\n\n  /**\n   * Refreshes the stretching column width by recalculating the widths of the columns.\n   */\n  refreshStretching() {\n    const { wtTable, wtViewport, cloneSource } = this.dataAccessObject;\n    const mainHolder = cloneSource ? cloneSource.wtTable.holder : wtTable.holder;\n    const scrollbarCompensation = mainHolder.offsetHeight < mainHolder.scrollHeight ? getScrollbarWidth() : 0;\n\n    this.stretching.refreshStretching(wtViewport.getViewportWidth() - scrollbarCompensation);\n  }\n\n  /**\n   * Calculates column header widths that can be retrieved from the cache.\n   */\n  calculateWidths() {\n    const { wtSettings } = this;\n    let rowHeaderWidthSetting = wtSettings.getSetting('rowHeaderWidth');\n\n    this.refreshStretching();\n\n    rowHeaderWidthSetting = wtSettings.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);\n\n    if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== undefined) {\n      const rowHeadersCount = wtSettings.getSetting('rowHeaders').length;\n      const defaultColumnWidth = wtSettings.getSetting('defaultColumnWidth');\n\n      for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n        let width = Array.isArray(rowHeaderWidthSetting)\n          ? rowHeaderWidthSetting[visibleColumnIndex] : rowHeaderWidthSetting;\n\n        width = (width === null || width === undefined) ? defaultColumnWidth : width;\n\n        this.headerWidths.set(visibleColumnIndex, width);\n      }\n    }\n  }\n}\n","import { DEFAULT_COLUMN_WIDTH } from '../calculator';\n\n/**\n * @typedef {object} ColumnStretchingOptions\n * @property {number} totalColumns Total number of columns.\n * @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).\n * @property {'all' | 'last' | 'none'} stretchMode Stretch mode 'all', 'last' or 'none'.\n * @property {Function} stretchingColumnWidthFn Function that returns the new width of the stretched column.\n */\n/**\n * @class ColumnStretching\n */\nexport class ColumnStretching {\n  /**\n   * @type {number}\n   */\n  stretchAllRatio = 0;\n  /**\n   * @type {number}\n   */\n  stretchLastWidth = 0;\n  /**\n   * @type {number[]}\n   */\n  stretchAllColumnsWidth = [];\n  /**\n   * @type {number}\n   */\n  #totalTargetWidth = 0;\n  /**\n   * @type {boolean}\n   */\n  needVerifyLastColumnWidth = true;\n  /**\n   * The total number of columns.\n   *\n   * @type {function(): number}\n   */\n  #totalColumns = () => 0;\n  /**\n   * Function that returns the width of the stretched column at a given index (in px).\n   *\n   * @type {function(): number}\n   */\n  #stretchingColumnWidthFn = width => width;\n  /**\n   * Function that returns the width of the column at a given index (in px).\n   *\n   * @type {function(): number}\n   */\n  #columnWidthFn = width => width;\n  /**\n   * Stretch mode.\n   *\n   * @type {function(): 'all' | 'last' | 'none'}\n   */\n  #stretchMode = () => 'none';\n\n  /**\n   * @param {ColumnStretchingOptions} options Object with all options specified for column viewport calculation.\n   */\n  constructor({ totalColumns, stretchMode, stretchingColumnWidthFn, columnWidthFn }) {\n    this.#totalColumns = totalColumns;\n    this.#stretchMode = stretchMode;\n    this.#stretchingColumnWidthFn = stretchingColumnWidthFn ?? this.#stretchingColumnWidthFn;\n    this.#columnWidthFn = columnWidthFn ?? this.#columnWidthFn;\n  }\n\n  /**\n   * Recalculate columns stretching.\n   *\n   * @param {number} totalWidth The total width of the table.\n   */\n  refreshStretching(totalWidth) {\n    if (this.#stretchMode() === 'none') {\n      return;\n    }\n\n    this.stretchAllRatio = 0;\n    this.stretchAllColumnsWidth = [];\n    this.needVerifyLastColumnWidth = true;\n    this.stretchLastWidth = 0;\n    this.#totalTargetWidth = totalWidth;\n\n    let sumAll = 0;\n\n    for (let i = 0; i < this.#totalColumns(); i++) {\n      const columnWidth = this._getColumnWidth(i);\n      const permanentColumnWidth = this.#stretchingColumnWidthFn(undefined, i);\n\n      if (typeof permanentColumnWidth === 'number') {\n        totalWidth -= permanentColumnWidth;\n      } else {\n        sumAll += columnWidth;\n      }\n    }\n    const remainingSize = totalWidth - sumAll;\n\n    if (this.#stretchMode() === 'all' && remainingSize > 0) {\n      this.stretchAllRatio = totalWidth / sumAll;\n      this.stretchAllColumnsWidth = [];\n      this.needVerifyLastColumnWidth = true;\n\n    } else if (this.#stretchMode() === 'last' && totalWidth !== Infinity) {\n      const columnWidth = this._getColumnWidth(this.#totalColumns() - 1);\n      const lastColumnWidth = remainingSize + columnWidth;\n\n      this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : columnWidth;\n    }\n  }\n\n  /**\n   * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance.\n   *\n   * @param {number} column The visual column index.\n   * @param {number} baseWidth The default column width.\n   * @returns {number|null}\n   */\n  getStretchedColumnWidth(column, baseWidth) {\n    let result = null;\n\n    if (this.#stretchMode() === 'all' && this.stretchAllRatio !== 0) {\n      result = this._getStretchedAllColumnWidth(column, baseWidth);\n\n    } else if (this.#stretchMode() === 'last' && this.stretchLastWidth !== 0) {\n      result = this._getStretchedLastColumnWidth(column);\n    }\n\n    return result;\n  }\n\n  /**\n   * @param {number} column The visual column index.\n   * @param {number} baseWidth The default column width.\n   * @returns {number}\n   * @private\n   */\n  _getStretchedAllColumnWidth(column, baseWidth) {\n    let sumRatioWidth = 0;\n\n    if (!this.stretchAllColumnsWidth[column]) {\n      const stretchedWidth = Math.round(baseWidth * this.stretchAllRatio);\n      const newStretchedWidth = this.#stretchingColumnWidthFn(stretchedWidth, column);\n\n      if (newStretchedWidth === undefined) {\n        this.stretchAllColumnsWidth[column] = stretchedWidth;\n      } else {\n        this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth)\n          ? this._getColumnWidth(column) : newStretchedWidth;\n      }\n    }\n\n    if (this.stretchAllColumnsWidth.length === this.#totalColumns() && this.needVerifyLastColumnWidth) {\n      this.needVerifyLastColumnWidth = false;\n\n      for (let i = 0; i < this.stretchAllColumnsWidth.length; i++) {\n        sumRatioWidth += this.stretchAllColumnsWidth[i];\n      }\n      if (sumRatioWidth !== this.#totalTargetWidth) {\n        this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += this.#totalTargetWidth - sumRatioWidth;\n      }\n    }\n\n    return this.stretchAllColumnsWidth[column];\n  }\n\n  /**\n   * @param {number} column The visual column index.\n   * @returns {number|null}\n   * @private\n   */\n  _getStretchedLastColumnWidth(column) {\n    if (column === this.#totalColumns() - 1) {\n      return this.stretchLastWidth;\n    }\n\n    return null;\n  }\n\n  /**\n   * @param {number} column The visual column index.\n   * @returns {number}\n   * @private\n   */\n  _getColumnWidth(column) {\n    let width = this.#columnWidthFn(column);\n\n    if (isNaN(width)) {\n      width = DEFAULT_COLUMN_WIDTH;\n    }\n\n    return width;\n  }\n}\n","/**\n * Row utils class contains all necessary information about sizes of the rows.\n *\n * @class {RowUtils}\n */\nexport default class RowUtils {\n  /**\n   * @type {TableDao}\n   */\n  dataAccessObject;\n  /**\n   * @type {Settings}\n   */\n  wtSettings;\n\n  /**\n   * @param {TableDao} dataAccessObject The table Data Access Object.\n   * @param {Settings} wtSettings The walkontable settings.\n   */\n  constructor(dataAccessObject, wtSettings) {\n    this.dataAccessObject = dataAccessObject;\n    this.wtSettings = wtSettings;\n  }\n\n  /**\n   * Returns row height based on passed source index.\n   *\n   * @param {number} sourceIndex Row source index.\n   * @returns {number}\n   */\n  getHeight(sourceIndex) {\n    let height = this.wtSettings.getSetting('rowHeight', sourceIndex);\n    const oversizedHeight = this.dataAccessObject.wtViewport.oversizedRows[sourceIndex];\n\n    if (oversizedHeight !== undefined) {\n      height = height === undefined ? oversizedHeight : Math.max(height, oversizedHeight);\n    }\n\n    return height;\n  }\n\n  /**\n   * Returns row height based on passed source index for the specified overlay type.\n   *\n   * @param {number} sourceIndex Row source index.\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName The overlay name.\n   * @returns {number}\n   */\n  getHeightByOverlayName(sourceIndex, overlayName) {\n    let height = this.wtSettings.getSetting('rowHeightByOverlayName', sourceIndex, overlayName);\n    const oversizedHeight = this.dataAccessObject.wtViewport.oversizedRows[sourceIndex];\n\n    if (oversizedHeight !== undefined) {\n      height = height === undefined ? oversizedHeight : Math.max(height, oversizedHeight);\n    }\n\n    return height;\n  }\n}\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'stickyRowsBottom';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the bottom rows in the vertical axis.\n *\n * @type {object}\n */\nconst stickyRowsBottom = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedRow() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n    const fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n    const index = totalRows - fixedRowsBottom;\n\n    if (totalRows === 0 || fixedRowsBottom === 0) {\n      return -1;\n    }\n\n    if (index < 0) {\n      return 0;\n    }\n\n    return index;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedRow() {\n    return this.wtSettings.getSetting('totalRows') - 1;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedRowsCount() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n\n    return Math.min(this.wtSettings.getSetting('fixedRowsBottom'), totalRows);\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleRowsCount() {\n    return this.getRenderedRowsCount();\n  },\n\n  /**\n   * Get the number of rendered column headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getColumnHeadersCount() {\n    return 0;\n  },\n};\n\ndefineGetter(stickyRowsBottom, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default stickyRowsBottom;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'stickyColumnsStart';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to columns.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the first columns in the horizontal axis.\n *\n * @type {object}\n */\nconst stickyColumnsStart = {\n  /**\n   * Get the source index of the first rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedColumn() {\n    const totalColumns = this.wtSettings.getSetting('totalColumns');\n\n    if (totalColumns === 0) {\n      return -1;\n    }\n\n    return 0;\n  },\n\n  /**\n   * Get the source index of the first column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleColumn() {\n    return this.getFirstRenderedColumn();\n  },\n\n  /**\n   * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleColumn() {\n    return this.getFirstRenderedColumn();\n  },\n\n  /**\n   * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedColumn() {\n    return this.getRenderedColumnsCount() - 1;\n  },\n\n  /**\n   * Get the source index of the last column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleColumn() {\n    return this.getLastRenderedColumn();\n  },\n\n  /**\n   * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleColumn() {\n    return this.getLastRenderedColumn();\n  },\n\n  /**\n   * Get the number of rendered columns.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedColumnsCount() {\n    const totalColumns = this.wtSettings.getSetting('totalColumns');\n\n    return Math.min(this.wtSettings.getSetting('fixedColumnsStart'), totalColumns);\n  },\n\n  /**\n   * Get the number of fully visible columns in the viewport.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleColumnsCount() {\n    return this.getRenderedColumnsCount();\n  },\n\n  /**\n   * Get the number of rendered row headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRowHeadersCount() {\n    return this.dataAccessObject.rowHeaders.length;\n  },\n};\n\ndefineGetter(stickyColumnsStart, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default stickyColumnsStart;\n","import {\n  getScrollableElement,\n  getTrimmingContainer,\n  getScrollbarWidth,\n  setAttribute,\n} from '../../../../helpers/dom/element';\nimport { defineGetter } from '../../../../helpers/object';\nimport { warn } from '../../../../helpers/console';\nimport {\n  CLONE_TYPES,\n  CLONE_CLASS_NAMES,\n  CLONE_TOP,\n  CLONE_INLINE_START,\n} from './constants';\nimport Clone from '../core/clone';\nimport { A11Y_PRESENTATION } from '../../../../helpers/a11y';\n\n/**\n * Creates an overlay over the original Walkontable instance. The overlay renders the clone of the original Walkontable\n * and (optionally) implements behavior needed for native horizontal and vertical scrolling.\n *\n * @abstract\n * @class Overlay\n * @property {Walkontable} wot The Walkontable instance.\n */\nexport class Overlay {\n  /**\n   *  The Walkontable settings.\n   *\n   * @private\n   * @type {Settings}\n   */\n  wtSettings = null;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {CLONE_TYPES_ENUM} type The overlay type name (clone name).\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, type, wtSettings, domBindings) {\n    defineGetter(this, 'wot', wotInstance, {\n      writable: false,\n    });\n    this.domBindings = domBindings;\n    this.facadeGetter = facadeGetter;\n    this.wtSettings = wtSettings;\n\n    const {\n      TABLE,\n      hider,\n      spreader,\n      holder,\n      wtRootElement,\n    } = this.wot.wtTable; // todo ioc\n\n    // legacy support, deprecated in the future\n    this.instance = this.wot;\n\n    this.type = type;\n    this.mainTableScrollableElement = null;\n    this.TABLE = TABLE;\n    this.hider = hider;\n    this.spreader = spreader;\n    this.holder = holder;\n    this.wtRootElement = wtRootElement;\n    this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n    this.needFullRender = this.shouldBeRendered();\n    this.clone = this.makeClone();\n  }\n\n  /**\n   * Checks if the overlay rendering state has changed.\n   *\n   * @returns {boolean}\n   */\n  hasRenderingStateChanged() {\n    return this.needFullRender !== this.shouldBeRendered();\n  }\n\n  /**\n   * Updates internal state with an information about the need of full rendering of the overlay in the next draw cycles.\n   *\n   * If the state is changed to render the overlay, the `needFullRender` property is set to `true` which means that\n   * the overlay will be fully rendered in the current draw cycle. If the state is changed to not render the overlay,\n   * the `needFullRender` property is set to `false` which means that the overlay will be fully rendered in the\n   * current draw cycle but it will not be rendered in the next draw cycles.\n   *\n   * @param {'before' | 'after'} drawPhase The phase of the rendering process.\n   */\n  updateStateOfRendering(drawPhase) {\n    if (drawPhase === 'before' && this.shouldBeRendered()) {\n      this.needFullRender = true;\n\n    } else if (drawPhase === 'after' && !this.shouldBeRendered()) {\n      this.needFullRender = false;\n    }\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return true;\n  }\n\n  /**\n   * Update the trimming container.\n   */\n  updateTrimmingContainer() {\n    this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n  }\n\n  /**\n   * Update the main scrollable element.\n   */\n  updateMainScrollableElement() {\n    const { wtTable } = this.wot;\n    const { rootWindow } = this.domBindings;\n\n    if (rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden') {\n      this.mainTableScrollableElement = this.wot.wtTable.holder;\n    } else {\n      this.mainTableScrollableElement = getScrollableElement(wtTable.TABLE);\n    }\n  }\n\n  /**\n   * Calculates coordinates of the provided element, relative to the root Handsontable element.\n   * NOTE: The element needs to be a child of the overlay in order for the method to work correctly.\n   *\n   * @param {HTMLElement} element The cell element to calculate the position for.\n   * @param {number} rowIndex Visual row index.\n   * @param {number} columnIndex Visual column index.\n   * @returns {{top: number, start: number}|undefined}\n   */\n  getRelativeCellPosition(element, rowIndex, columnIndex) {\n    if (this.clone.wtTable.holder.contains(element) === false) {\n      warn(`The provided element is not a child of the ${this.type} overlay`);\n\n      return;\n    }\n    const windowScroll = this.mainTableScrollableElement === this.domBindings.rootWindow;\n    const fixedColumnStart = columnIndex < this.wtSettings.getSetting('fixedColumnsStart');\n    const fixedRowTop = rowIndex < this.wtSettings.getSetting('fixedRowsTop');\n    const fixedRowBottom =\n      rowIndex >= this.wtSettings.getSetting('totalRows') - this.wtSettings.getSetting('fixedRowsBottom');\n    const spreader = this.clone.wtTable.spreader;\n\n    const spreaderOffset = {\n      start: this.getRelativeStartPosition(spreader),\n      top: spreader.offsetTop\n    };\n    const elementOffset = {\n      start: this.getRelativeStartPosition(element),\n      top: element.offsetTop\n    };\n    let offsetObject = null;\n\n    if (windowScroll) {\n      offsetObject = this.getRelativeCellPositionWithinWindow(\n        fixedRowTop, fixedColumnStart, elementOffset, spreaderOffset\n      );\n\n    } else {\n      offsetObject = this.getRelativeCellPositionWithinHolder(\n        fixedRowTop, fixedRowBottom, fixedColumnStart, elementOffset, spreaderOffset\n      );\n    }\n\n    return offsetObject;\n  }\n\n  /**\n   * Get inline start value depending of direction.\n   *\n   * @param {HTMLElement} el Element.\n   * @returns {number}\n   */\n  getRelativeStartPosition(el) {\n    return this.isRtl()\n      ? el.offsetParent.offsetWidth - el.offsetLeft - el.offsetWidth\n      : el.offsetLeft;\n  }\n\n  /**\n   * Calculates coordinates of the provided element, relative to the root Handsontable element within a table with window\n   * as a scrollable element.\n   *\n   * @private\n   * @param {boolean} onFixedRowTop `true` if the coordinates point to a place within the top fixed rows.\n   * @param {boolean} onFixedColumn `true` if the coordinates point to a place within the fixed columns.\n   * @param {number} elementOffset Offset position of the cell element.\n   * @param {number} spreaderOffset Offset position of the spreader element.\n   * @returns {{top: number, left: number}}\n   */\n  getRelativeCellPositionWithinWindow(onFixedRowTop, onFixedColumn, elementOffset, spreaderOffset) {\n    const absoluteRootElementPosition = this.wot.wtTable.wtRootElement.getBoundingClientRect(); // todo refactoring: DEMETER\n    let horizontalOffset = 0;\n    let verticalOffset = 0;\n\n    if (!onFixedColumn) {\n      horizontalOffset = spreaderOffset.start;\n\n    } else {\n      let absoluteRootElementStartPosition = absoluteRootElementPosition.left;\n\n      if (this.isRtl()) {\n        absoluteRootElementStartPosition = this.domBindings.rootWindow.innerWidth -\n          (absoluteRootElementPosition.left + absoluteRootElementPosition.width + getScrollbarWidth());\n      }\n\n      horizontalOffset = absoluteRootElementStartPosition <= 0 ? (-1) * absoluteRootElementStartPosition : 0;\n    }\n\n    if (onFixedRowTop) {\n      const absoluteOverlayPosition = this.clone.wtTable.TABLE.getBoundingClientRect();\n\n      verticalOffset = absoluteOverlayPosition.top - absoluteRootElementPosition.top;\n\n    } else {\n      verticalOffset = spreaderOffset.top;\n    }\n\n    return {\n      start: elementOffset.start + horizontalOffset,\n      top: elementOffset.top + verticalOffset\n    };\n  }\n\n  /**\n   * Calculates coordinates of the provided element, relative to the root Handsontable element within a table with window\n   * as a scrollable element.\n   *\n   * @private\n   * @param {boolean} onFixedRowTop `true` if the coordinates point to a place within the top fixed rows.\n   * @param {boolean} onFixedRowBottom `true` if the coordinates point to a place within the bottom fixed rows.\n   * @param {boolean} onFixedColumn `true` if the coordinates point to a place within the fixed columns.\n   * @param {number} elementOffset Offset position of the cell element.\n   * @param {number} spreaderOffset Offset position of the spreader element.\n   * @returns {{top: number, left: number}}\n   */\n  getRelativeCellPositionWithinHolder(onFixedRowTop, onFixedRowBottom, onFixedColumn, elementOffset, spreaderOffset) {\n    const tableScrollPosition = {\n      horizontal: this.wot.wtOverlays.inlineStartOverlay.getScrollPosition(),\n      vertical: this.wot.wtOverlays.topOverlay.getScrollPosition()\n    };\n    let horizontalOffset = 0;\n    let verticalOffset = 0;\n\n    if (!onFixedColumn) {\n      horizontalOffset = tableScrollPosition.horizontal - spreaderOffset.start;\n    }\n\n    if (onFixedRowBottom) {\n      const absoluteRootElementPosition = this.wot.wtTable.wtRootElement.getBoundingClientRect();// todo refactoring: DEMETER\n      const absoluteOverlayPosition = this.clone.wtTable.TABLE.getBoundingClientRect();// todo refactoring: DEMETER\n\n      verticalOffset = (absoluteOverlayPosition.top * (-1)) + absoluteRootElementPosition.top;\n\n    } else if (!onFixedRowTop) {\n      verticalOffset = tableScrollPosition.vertical - spreaderOffset.top;\n    }\n\n    return {\n      start: elementOffset.start - horizontalOffset,\n      top: elementOffset.top - verticalOffset,\n    };\n  }\n\n  /**\n   * Make a clone of table for overlay.\n   *\n   * @returns {Clone}\n   */\n  makeClone() {\n    if (CLONE_TYPES.indexOf(this.type) === -1) {\n      throw new Error(`Clone type \"${this.type}\" is not supported.`);\n    }\n    const {\n      wtTable,\n      wtSettings\n    } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const clone = rootDocument.createElement('div');\n    const clonedTable = rootDocument.createElement('table');\n    const tableParent = wtTable.wtRootElement.parentNode;\n\n    clone.className = `${CLONE_CLASS_NAMES.get(this.type)} handsontable`;\n    clone.setAttribute('dir', this.isRtl() ? 'rtl' : 'ltr');\n    clone.style.position = 'absolute';\n    clone.style.top = 0;\n    clone.style.overflow = 'visible';\n\n    if (this.isRtl()) {\n      clone.style.right = 0;\n    } else {\n      clone.style.left = 0;\n    }\n\n    if (wtSettings.getSetting('ariaTags')) {\n      setAttribute(clone, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    clonedTable.className = wtTable.TABLE.className;\n\n    // Clone the main table's `role` attribute to the cloned table.\n    const mainTableRole = wtTable.TABLE.getAttribute('role');\n\n    if (mainTableRole) {\n      clonedTable.setAttribute('role', wtTable.TABLE.getAttribute('role'));\n    }\n\n    clone.appendChild(clonedTable);\n\n    tableParent.appendChild(clone);\n\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (preventOverflow === true ||\n      preventOverflow === 'horizontal' && this.type === CLONE_TOP ||\n      preventOverflow === 'vertical' && this.type === CLONE_INLINE_START) {\n      this.mainTableScrollableElement = rootWindow;\n\n    } else if (rootWindow.getComputedStyle(tableParent).getPropertyValue('overflow') === 'hidden') {\n      this.mainTableScrollableElement = wtTable.holder;\n    } else {\n      this.mainTableScrollableElement = getScrollableElement(wtTable.TABLE);\n    }\n\n    // Create a new instance of the Walkontable class\n    return new Clone(clonedTable, this.wtSettings, { // todo ioc factory\n      source: this.wot,\n      overlay: this,\n      viewport: this.wot.wtViewport, // todo ioc , or factor func if used only here\n      event: this.wot.wtEvent, // todo ioc , or factory func if used only here\n      selectionManager: this.wot.selectionManager, // todo ioc , or factory func if used only here\n    });\n  }\n\n  /**\n   * Refresh/Redraw overlay.\n   *\n   * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway.\n   */\n  refresh(fastDraw = false) {\n    if (this.needFullRender) {\n      this.clone.draw(fastDraw);\n    }\n  }\n\n  /**\n   * Reset overlay styles to initial values.\n   */\n  reset() {\n    const holder = this.clone.wtTable.holder; // todo refactoring: DEMETER\n    const hider = this.clone.wtTable.hider; // todo refactoring: DEMETER\n    const holderStyle = holder.style;\n    const hiderStyle = hider.style;\n    const rootStyle = holder.parentNode.style;\n\n    [holderStyle, hiderStyle, rootStyle].forEach((style) => {\n      style.width = '';\n      style.height = '';\n    });\n  }\n\n  /**\n   * Determine if Walkontable is running in RTL mode.\n   *\n   * @returns {boolean}\n   */\n  isRtl() {\n    return this.wtSettings.getSetting('rtlMode');\n  }\n\n  /**\n   * Destroy overlay instance.\n   */\n  destroy() {\n    this.clone.eventManager.destroy(); // todo check if it is good place for that operation\n  }\n}\n","/**\n * @typedef {'top'|'bottom'|'inline_start'|'top_inline_start_corner'|'bottom_inline_start_corner'} CLONE_TYPES_ENUM\n */\nexport const CLONE_TOP = 'top';\nexport const CLONE_BOTTOM = 'bottom';\nexport const CLONE_INLINE_START = 'inline_start';\nexport const CLONE_TOP_INLINE_START_CORNER = 'top_inline_start_corner';\nexport const CLONE_BOTTOM_INLINE_START_CORNER = 'bottom_inline_start_corner';\nexport const CLONE_TYPES = [\n  CLONE_TOP,\n  CLONE_BOTTOM,\n  CLONE_INLINE_START,\n  CLONE_TOP_INLINE_START_CORNER,\n  CLONE_BOTTOM_INLINE_START_CORNER,\n];\n\nexport const CLONE_CLASS_NAMES = new Map([\n  [CLONE_TOP, `ht_clone_${CLONE_TOP}`],\n  [CLONE_BOTTOM, `ht_clone_${CLONE_BOTTOM}`],\n  [CLONE_INLINE_START, `ht_clone_${CLONE_INLINE_START} ht_clone_left`],\n  [CLONE_TOP_INLINE_START_CORNER, `ht_clone_${CLONE_TOP_INLINE_START_CORNER} ht_clone_top_left_corner`],\n  [CLONE_BOTTOM_INLINE_START_CORNER, `ht_clone_${CLONE_BOTTOM_INLINE_START_CORNER} ht_clone_bottom_left_corner`],\n]);\n","import Event from '../event';\nimport CoreAbstract from './_base';\n\n/**\n * @class Walkontable\n */\nexport default class Clone extends CoreAbstract {\n  /**\n   * @type {Walkontable}\n   */\n  cloneSource;\n  /**\n   * @type {Overlay}\n   */\n  cloneOverlay;\n\n  /**\n   * @param {HTMLTableElement} table Main table.\n   * @param {SettingsPure|Settings} settings The Walkontable settings.\n   * @param {WalkontableCloneOptions} clone Clone data.\n   */\n  constructor(table, settings, clone) {\n    super(table, settings);\n\n    const facadeGetter = this.wtSettings.getSetting('facade', this);\n\n    this.cloneSource = clone.source;\n    this.cloneOverlay = clone.overlay;\n    this.wtTable = this.cloneOverlay.createTable(this.getTableDao(), facadeGetter, this.domBindings, this.wtSettings);\n    this.wtViewport = clone.viewport;\n    this.selectionManager = clone.selectionManager;\n    this.wtEvent = new Event(\n      facadeGetter, this.domBindings, this.wtSettings, this.eventManager, this.wtTable,\n      this.selectionManager, clone.event\n    );\n\n    this.findOriginalHeaders();\n  }\n}\n","import {\n  fastInnerText,\n} from '../../../../helpers/dom/element';\nimport { randomString } from '../../../../helpers/string';\nimport EventManager from '../../../../eventManager';\nimport Scroll from '../scroll';\nimport CellCoords from '../cell/coords';\nimport CellRange from '../cell/range';\n\n/**\n * @abstract\n * @class Walkontable\n */\nexport default class CoreAbstract {\n  wtTable;\n  wtScroll;\n  wtViewport;\n  wtOverlays;\n  selectionManager;\n  wtEvent;\n  /**\n   * The walkontable instance id.\n   *\n   * @public\n   * @type {Readonly<string>}\n   */\n  guid = `wt_${randomString()}`;\n  drawInterrupted = false;\n  drawn = false;\n\n  /**\n   * The DOM bindings.\n   *\n   * @public\n   * @type {DomBindings}\n   */\n  domBindings;\n\n  /**\n   * Settings.\n   *\n   * @public\n   * @type {Settings}\n   */\n  wtSettings;\n\n  get eventManager() {\n    return new EventManager(this);\n  }\n\n  /**\n   * @param {HTMLTableElement} table Main table.\n   * @param {Settings} settings The Walkontable settings.\n   */\n  constructor(table, settings) {\n    this.domBindings = {\n      rootTable: table,\n      rootDocument: table.ownerDocument,\n      rootWindow: table.ownerDocument.defaultView,\n    };\n\n    this.wtSettings = settings;\n    this.wtScroll = new Scroll(this.createScrollDao());\n  }\n\n  findOriginalHeaders() {\n    const originalHeaders = [];\n\n    // find original headers\n    if (this.wtTable.THEAD.childNodes.length && this.wtTable.THEAD.childNodes[0].childNodes.length) {\n      for (let c = 0, clen = this.wtTable.THEAD.childNodes[0].childNodes.length; c < clen; c++) {\n        originalHeaders.push(this.wtTable.THEAD.childNodes[0].childNodes[c].innerHTML);\n      }\n      if (!this.wtSettings.getSetting('columnHeaders').length) {\n        this.wtSettings.update('columnHeaders', [\n          function(column, TH) {\n            fastInnerText(TH, originalHeaders[column]);\n          }\n        ]);\n      }\n    }\n  }\n\n  /**\n   * Creates and returns the CellCoords object.\n   *\n   * @param {*} row The row index.\n   * @param {*} column The column index.\n   * @returns {CellCoords}\n   */\n  createCellCoords(row, column) {\n    return new CellCoords(row, column, this.wtSettings.getSetting('rtlMode'));\n  }\n\n  /**\n   * Creates and returns the CellRange object.\n   *\n   * @param {CellCoords} highlight The highlight coordinates.\n   * @param {CellCoords} from The from coordinates.\n   * @param {CellCoords} to The to coordinates.\n   * @returns {CellRange}\n   */\n  createCellRange(highlight, from, to) {\n    return new CellRange(highlight, from, to, this.wtSettings.getSetting('rtlMode'));\n  }\n\n  /**\n   * Force rerender of Walkontable.\n   *\n   * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway.\n   * @returns {Walkontable}\n   */\n  draw(fastDraw = false) {\n    this.drawInterrupted = false;\n\n    if (!this.wtTable.isVisible()) {\n      // draw interrupted because TABLE is not visible\n      this.drawInterrupted = true;\n    } else {\n      this.wtTable.draw(fastDraw);\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the TD at coords. If topmost is set to true, returns TD from the topmost overlay layer,\n   * if not set or set to false, returns TD from the master table.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @param {boolean} [topmost=false] If set to `true`, it returns the TD element from the topmost overlay. For example,\n   *                                  if the wanted cell is in the range of fixed rows, it will return a TD element\n   *                                  from the top overlay.\n   * @returns {HTMLElement}\n   */\n  getCell(coords, topmost = false) {\n    if (!topmost) {\n      return this.wtTable.getCell(coords);\n    }\n\n    const totalRows = this.wtSettings.getSetting('totalRows');\n    const fixedRowsTop = this.wtSettings.getSetting('fixedRowsTop');\n    const fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n    const fixedColumnsStart = this.wtSettings.getSetting('fixedColumnsStart');\n\n    if (coords.row < fixedRowsTop && coords.col < fixedColumnsStart) {\n      return this.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.getCell(coords);\n\n    } else if (coords.row < fixedRowsTop) {\n      return this.wtOverlays.topOverlay.clone.wtTable.getCell(coords);\n\n    } else if (coords.col < fixedColumnsStart && coords.row >= totalRows - fixedRowsBottom) {\n      if (this.wtOverlays.bottomInlineStartCornerOverlay && this.wtOverlays.bottomInlineStartCornerOverlay.clone) {\n        return this.wtOverlays.bottomInlineStartCornerOverlay.clone.wtTable.getCell(coords);\n      }\n\n    } else if (coords.col < fixedColumnsStart) {\n      return this.wtOverlays.inlineStartOverlay.clone.wtTable.getCell(coords);\n\n    } else if (coords.row < totalRows && coords.row >= totalRows - fixedRowsBottom) {\n      if (this.wtOverlays.bottomOverlay && this.wtOverlays.bottomOverlay.clone) {\n        return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(coords);\n      }\n\n    }\n\n    return this.wtTable.getCell(coords);\n  }\n\n  /**\n   * Scrolls the viewport to a cell (rerenders if needed).\n   *\n   * @param {CellCoords} coords The cell coordinates to scroll to.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    if (coords.col < 0 || coords.row < 0) {\n      return false;\n    }\n\n    return this.wtScroll.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n  }\n\n  /**\n   * Scrolls the viewport to a column (rerenders if needed).\n   *\n   * @param {number} column Visual column index.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    if (column < 0) {\n      return false;\n    }\n\n    return this.wtScroll.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n  }\n\n  /**\n   * Scrolls the viewport to a row (rerenders if needed).\n   *\n   * @param {number} row Visual row index.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @returns {boolean}\n   */\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    if (row < 0) {\n      return false;\n    }\n\n    return this.wtScroll.scrollViewportVertically(row, snapToTop, snapToBottom);\n  }\n\n  /**\n   * @returns {Array}\n   */\n  getViewport() {\n    return [\n      this.wtTable.getFirstVisibleRow(),\n      this.wtTable.getFirstVisibleColumn(),\n      this.wtTable.getLastVisibleRow(),\n      this.wtTable.getLastVisibleColumn()\n    ];\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.wtOverlays.destroy();\n    this.wtEvent.destroy();\n  }\n\n  /**\n   * Create data access object for scroll.\n   *\n   * @protected\n   * @returns {ScrollDao}\n   */\n  createScrollDao() {\n    const wot = this;\n\n    return {\n      get drawn() {\n        return wot.drawn; // TODO refactoring: consider about injecting `isDrawn` function : ()=>return wot.drawn. (it'll enables remove dao layer)\n      },\n      get topOverlay() {\n        return wot.wtOverlays.topOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get inlineStartOverlay() {\n        return wot.wtOverlays.inlineStartOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtTable() {\n        return wot.wtTable; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtViewport() {\n        return wot.wtViewport; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtSettings() {\n        return wot.wtSettings;\n      },\n      get rootWindow() {\n        return wot.domBindings.rootWindow; // TODO refactoring: move outside dao\n      },\n      // TODO refactoring, consider about using injecting wtSettings into scroll (it'll enables remove dao layer)\n      get totalRows() {\n        return wot.wtSettings.getSetting('totalRows');\n      },\n      get totalColumns() {\n        return wot.wtSettings.getSetting('totalColumns');\n      },\n      get fixedRowsTop() {\n        return wot.wtSettings.getSetting('fixedRowsTop');\n      },\n      get fixedRowsBottom() {\n        return wot.wtSettings.getSetting('fixedRowsBottom');\n      },\n      get fixedColumnsStart() {\n        return wot.wtSettings.getSetting('fixedColumnsStart');\n      },\n    };\n  }\n  // TODO refactoring: it will be much better to not use DAO objects. They are needed for now to provide\n  // dynamically access to related objects\n  /**\n   * Create data access object for wtTable.\n   *\n   * @protected\n   * @returns {TableDao}\n   */\n  getTableDao() {\n    const wot = this;\n\n    return {\n      get wot() {\n        return wot;\n      },\n      get parentTableOffset() {\n        return wot.cloneSource.wtTable.tableOffset; // TODO rethink: cloneSource exists only in Clone type.\n      },\n      get cloneSource() {\n        return wot.cloneSource; // TODO rethink: cloneSource exists only in Clone type.\n      },\n      get workspaceWidth() {\n        return wot.wtViewport.getWorkspaceWidth();\n      },\n      get wtViewport() {\n        return wot.wtViewport; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtOverlays() {\n        return wot.wtOverlays; // TODO refactoring: move outside dao, use IOC\n      },\n      get selectionManager() {\n        return wot.selectionManager; // TODO refactoring: move outside dao, use IOC\n      },\n      get drawn() {\n        return wot.drawn;\n      },\n      set drawn(v) { // TODO rethink: this breaks assumes of data access object, however it is required until invent better way to handle WOT state.\n        wot.drawn = v;\n      },\n      get wtTable() {\n        return wot.wtTable; // TODO refactoring: it provides itself\n      },\n      get startColumnRendered() {\n        return wot.wtViewport.columnsRenderCalculator.startColumn;\n      },\n      get startColumnVisible() {\n        return wot.wtViewport.columnsVisibleCalculator.startColumn;\n      },\n      get startColumnPartiallyVisible() {\n        return wot.wtViewport.columnsPartiallyVisibleCalculator.startColumn;\n      },\n      get endColumnRendered() {\n        return wot.wtViewport.columnsRenderCalculator.endColumn;\n      },\n      get endColumnVisible() {\n        return wot.wtViewport.columnsVisibleCalculator.endColumn;\n      },\n      get endColumnPartiallyVisible() {\n        return wot.wtViewport.columnsPartiallyVisibleCalculator.endColumn;\n      },\n      get countColumnsRendered() {\n        return wot.wtViewport.columnsRenderCalculator.count;\n      },\n      get countColumnsVisible() {\n        return wot.wtViewport.columnsVisibleCalculator.count;\n      },\n      get startRowRendered() {\n        return wot.wtViewport.rowsRenderCalculator.startRow;\n      },\n      get startRowVisible() {\n        return wot.wtViewport.rowsVisibleCalculator.startRow;\n      },\n      get startRowPartiallyVisible() {\n        return wot.wtViewport.rowsPartiallyVisibleCalculator.startRow;\n      },\n      get endRowRendered() {\n        return wot.wtViewport.rowsRenderCalculator.endRow;\n      },\n      get endRowVisible() {\n        return wot.wtViewport.rowsVisibleCalculator.endRow;\n      },\n      get endRowPartiallyVisible() {\n        return wot.wtViewport.rowsPartiallyVisibleCalculator.endRow;\n      },\n      get countRowsRendered() {\n        return wot.wtViewport.rowsRenderCalculator.count;\n      },\n      get countRowsVisible() {\n        return wot.wtViewport.rowsVisibleCalculator.count;\n      },\n      get columnHeaders() {\n        return wot.wtSettings.getSetting('columnHeaders');\n      },\n      get rowHeaders() {\n        return wot.wtSettings.getSetting('rowHeaders');\n      },\n    };\n  }\n}\n","import {\n  innerHeight,\n  innerWidth,\n  getScrollLeft,\n  getScrollTop,\n  offset,\n} from '../../../helpers/dom/element';\n\n/**\n * @class Scroll\n */\nclass Scroll {\n  /**\n   * The data access object.\n   *\n   * @protected\n   * @type {ScrollDao}\n   */\n  dataAccessObject;\n\n  /**\n   * @param {ScrollDao} dataAccessObject Tha data access object.\n   */\n  constructor(dataAccessObject) {\n    this.dataAccessObject = dataAccessObject;\n  }\n\n  /**\n   * Scrolls viewport to a cell.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    const scrolledHorizontally = this.scrollViewportHorizontally(coords.col, snapToRight, snapToLeft);\n    const scrolledVertically = this.scrollViewportVertically(coords.row, snapToTop, snapToBottom);\n\n    return scrolledHorizontally || scrolledVertically;\n  }\n\n  /**\n   * Scrolls viewport to a column.\n   *\n   * @param {number} column Visual column index.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    const {\n      drawn,\n      totalColumns\n    } = this.dataAccessObject;\n\n    // do not scroll the viewport when the column points to a range outside of the dataset\n    if (!drawn || !Number.isInteger(column) || column < 0 || column > totalColumns) {\n      return false;\n    }\n\n    const autoSnapping = snapToRight === undefined && snapToLeft === undefined;\n    const {\n      fixedColumnsStart,\n      inlineStartOverlay,\n    } = this.dataAccessObject;\n\n    // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport\n    // when the columns points to the overlays\n    if (autoSnapping && column < fixedColumnsStart) {\n      return false;\n    }\n\n    column = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollHorizontally', column);\n\n    if (!Number.isInteger(column) || column < 0 || column > totalColumns) {\n      return false;\n    }\n\n    const firstColumn = this.getFirstVisibleColumn();\n    const lastColumn = this.getLastVisibleColumn();\n    let result = false;\n\n    if (autoSnapping && (column < firstColumn || column > lastColumn) || !autoSnapping) {\n      // if there is at least one fully visible column determine the snapping direction based on\n      // that columns or by snapToRight/snapToLeft flags, if provided.\n      result = inlineStartOverlay\n        .scrollTo(column, autoSnapping ? column >= this.getLastPartiallyVisibleColumn() : snapToRight);\n    }\n\n    return result;\n  }\n\n  /**\n   * Scrolls viewport to a row.\n   *\n   * @param {number} row Visual row index.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @returns {boolean}\n   */\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    const {\n      drawn,\n      totalRows\n    } = this.dataAccessObject;\n\n    // do not scroll the viewport when the row points to a range outside of the dataset\n    if (!drawn || !Number.isInteger(row) || row < 0 || row > totalRows) {\n      return false;\n    }\n\n    const autoSnapping = snapToTop === undefined && snapToBottom === undefined;\n    const {\n      fixedRowsBottom,\n      fixedRowsTop,\n      topOverlay,\n    } = this.dataAccessObject;\n\n    // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport\n    // when the rows points to the overlays\n    if (autoSnapping && (row < fixedRowsTop || row > totalRows - fixedRowsBottom - 1)) {\n      return false;\n    }\n\n    row = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollVertically', row);\n\n    if (!Number.isInteger(row) || row < 0 || row > totalRows) {\n      return false;\n    }\n\n    const firstRow = this.getFirstVisibleRow();\n    const lastRow = this.getLastVisibleRow();\n    let result = false;\n\n    if (autoSnapping && (row < firstRow || row > lastRow) || !autoSnapping) {\n      // if there is at least one fully visible row determine the snapping direction based on\n      // that rows or by snapToTop/snapToBottom flags, if provided.\n      result = topOverlay.scrollTo(row, autoSnapping ? row >= this.getLastPartiallyVisibleRow() : snapToBottom);\n    }\n\n    return result;\n  }\n\n  /**\n   * Get first visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleRow() {\n    return this.dataAccessObject.wtTable.getFirstVisibleRow();\n  }\n\n  /**\n   * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastVisibleRow() {\n    return this.#getLastRowIndex(this.dataAccessObject.wtTable.getLastVisibleRow());\n  }\n\n  /**\n   * Get first partially visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.dataAccessObject.wtTable.getFirstPartiallyVisibleRow();\n  }\n\n  /**\n   * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleRow() {\n    return this.#getLastRowIndex(this.dataAccessObject.wtTable.getLastPartiallyVisibleRow());\n  }\n\n  /**\n   * Get first visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleColumn() {\n    return this.dataAccessObject.wtTable.getFirstVisibleColumn();\n  }\n\n  /**\n   * Get last visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastVisibleColumn() {\n    return this.#getLastColumnIndex(this.dataAccessObject.wtTable.getLastVisibleColumn());\n  }\n\n  /**\n   * Get first partially visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleColumn() {\n    return this.dataAccessObject.wtTable.getFirstPartiallyVisibleColumn();\n  }\n\n  /**\n   * Get last partially visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleColumn() {\n    return this.#getLastColumnIndex(this.dataAccessObject.wtTable.getLastPartiallyVisibleColumn());\n  }\n\n  /**\n   * Get last visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @param {number} lastColumnIndex The last visible column index.\n   * @returns {number}\n   */\n  #getLastColumnIndex(lastColumnIndex) {\n    const {\n      wtSettings,\n      inlineStartOverlay,\n      wtTable,\n      wtViewport,\n      totalColumns,\n      rootWindow,\n    } = this.dataAccessObject;\n\n    if (inlineStartOverlay.mainTableScrollableElement === rootWindow) {\n      const isRtl = wtSettings.getSetting('rtlMode');\n      let inlineStartRootElementOffset = null;\n\n      if (isRtl) {\n        const tableRect = wtTable.TABLE.getBoundingClientRect();\n        const rootDocument = this.dataAccessObject.rootWindow.document;\n        const docOffsetWidth = rootDocument.documentElement.offsetWidth;\n\n        inlineStartRootElementOffset = Math.abs(tableRect.right - docOffsetWidth);\n\n      } else {\n        const rootElementOffset = offset(wtTable.wtRootElement);\n\n        inlineStartRootElementOffset = rootElementOffset.left;\n      }\n\n      const windowScrollLeft = Math.abs(getScrollLeft(rootWindow, rootWindow));\n\n      // Only calculate lastColumnIndex when table didn't filled (from right) whole viewport space\n      if (inlineStartRootElementOffset > windowScrollLeft) {\n        const windowWidth = innerWidth(rootWindow);\n        let columnsWidth = wtViewport.getRowHeaderWidth();\n\n        for (let column = 1; column <= totalColumns; column++) {\n          columnsWidth += inlineStartOverlay.sumCellSizes(column - 1, column);\n\n          if (inlineStartRootElementOffset + columnsWidth - windowScrollLeft >= windowWidth) {\n            // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements)\n            lastColumnIndex = column - 2;\n            break;\n          }\n        }\n      }\n    }\n\n    return lastColumnIndex;\n  }\n\n  /**\n   * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @param {number} lastRowIndex The last visible row index.\n   * @returns {number}\n   */\n  #getLastRowIndex(lastRowIndex) {\n    const {\n      topOverlay,\n      wtTable,\n      wtViewport,\n      totalRows,\n      rootWindow,\n    } = this.dataAccessObject;\n\n    if (topOverlay.mainTableScrollableElement === rootWindow) {\n      const rootElementOffset = offset(wtTable.wtRootElement);\n      const windowScrollTop = getScrollTop(rootWindow, rootWindow);\n\n      // Only calculate lastRowIndex when table didn't filled (from bottom) whole viewport space\n      if (rootElementOffset.top > windowScrollTop) {\n        const windowHeight = innerHeight(rootWindow);\n        let rowsHeight = wtViewport.getColumnHeaderHeight();\n\n        for (let row = 1; row <= totalRows; row++) {\n          rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n          if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) {\n            // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements)\n            lastRowIndex = row - 2;\n            break;\n          }\n        }\n      }\n    }\n\n    return lastRowIndex;\n  }\n}\n\nexport default Scroll;\n","import {\n  addClass,\n  getScrollbarWidth,\n  getScrollTop,\n  getWindowScrollLeft,\n  hasClass,\n  outerHeight,\n  removeClass,\n} from '../../../../helpers/dom/element';\nimport BottomOverlayTable from './../table/bottom';\nimport { Overlay } from './_base';\nimport {\n  CLONE_BOTTOM,\n} from './constants';\n\n/**\n * @class BottomOverlay\n */\nexport class BottomOverlay extends Overlay {\n  /**\n   * Cached value which holds the previous value of the `fixedRowsBottom` option.\n   * It is used as a comparison value that can be used to detect changes in that value.\n   *\n   * @type {number}\n   */\n  cachedFixedRowsBottom = -1;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings) {\n    super(wotInstance, facadeGetter, CLONE_BOTTOM, wtSettings, domBindings);\n    this.cachedFixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {BottomOverlayTable}\n   */\n  createTable(...args) {\n    return new BottomOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderBottomOverlay');\n  }\n\n  /**\n   * Updates the top overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    if (!this.needFullRender || !this.shouldBeRendered() || !this.wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n    const { rootWindow } = this.domBindings;\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n\n    overlayRoot.style.top = '';\n\n    let overlayPosition = 0;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      overlayPosition = this.getOverlayOffset();\n      overlayRoot.style.bottom = `${overlayPosition}px`;\n\n    } else {\n      overlayPosition = this.getScrollPosition();\n      this.repositionOverlay();\n    }\n\n    const positionChanged = this.adjustHeaderBordersPosition(overlayPosition);\n\n    this.adjustElementsSize();\n\n    return positionChanged;\n  }\n\n  /**\n   * Updates the bottom overlay position.\n   */\n  repositionOverlay() {\n    const { wtTable, wtViewport } = this.wot;\n    const { rootDocument } = this.domBindings;\n    const cloneRoot = this.clone.wtTable.holder.parentNode;\n    let bottomOffset = 0;\n\n    if (!wtViewport.hasVerticalScroll()) {\n      bottomOffset += (wtViewport.getWorkspaceHeight() - wtTable.getTotalHeight());\n    }\n\n    if (wtViewport.hasVerticalScroll() && wtViewport.hasHorizontalScroll()) {\n      bottomOffset += getScrollbarWidth(rootDocument);\n    }\n\n    cloneRoot.style.bottom = `${bottomOffset}px`;\n  }\n\n  /**\n   * Sets the main overlay's vertical scroll position.\n   *\n   * @param {number} pos The scroll position.\n   * @returns {boolean}\n   */\n  setScrollPosition(pos) {\n    const { rootWindow } = this.domBindings;\n    let result = false;\n\n    if (this.mainTableScrollableElement === rootWindow) {\n      rootWindow.scrollTo(getWindowScrollLeft(rootWindow), pos);\n      result = true;\n\n    } else if (this.mainTableScrollableElement.scrollTop !== pos) {\n      this.mainTableScrollableElement.scrollTop = pos;\n      result = true;\n    }\n\n    return result;\n  }\n\n  /**\n   * Triggers onScroll hook callback.\n   */\n  onScroll() {\n    this.wtSettings.getSetting('onScrollHorizontally');\n  }\n\n  /**\n   * Calculates total sum cells height.\n   *\n   * @param {number} from Row index which calculates started from.\n   * @param {number} to Row index where calculation is finished.\n   * @returns {number} Height sum.\n   */\n  sumCellSizes(from, to) {\n    const { wtTable, wtSettings } = this.wot;\n    const defaultRowHeight = wtSettings.getSetting('defaultRowHeight');\n    let row = from;\n    let sum = 0;\n\n    while (row < to) {\n      const height = wtTable.getRowHeight(row);\n\n      sum += height === undefined ? defaultRowHeight : height;\n      row += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * Adjust overlay root element, children and master table element sizes (width, height).\n   */\n  adjustElementsSize() {\n    this.updateTrimmingContainer();\n\n    if (this.needFullRender) {\n      this.adjustRootElementSize();\n      this.adjustRootChildrenSize();\n    }\n  }\n\n  /**\n   * Adjust overlay root element size (width and height).\n   */\n  adjustRootElementSize() {\n    const { wtTable, wtViewport } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const scrollbarWidth = getScrollbarWidth(rootDocument);\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const overlayRootStyle = overlayRoot.style;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {\n      let width = wtViewport.getWorkspaceWidth();\n\n      if (this.wot.wtOverlays.hasScrollbarRight) {\n        width -= scrollbarWidth;\n      }\n\n      width = Math.min(width, wtTable.wtRootElement.scrollWidth);\n      overlayRootStyle.width = `${width}px`;\n\n    } else {\n      overlayRootStyle.width = '';\n    }\n\n    this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRootStyle.height = `${tableHeight}px`;\n  }\n\n  /**\n   * Adjust overlay root childs size.\n   */\n  adjustRootChildrenSize() {\n    const { holder } = this.clone.wtTable;\n\n    this.clone.wtTable.hider.style.width = this.hider.style.width;\n    holder.style.width = holder.parentNode.style.width;\n    holder.style.height = holder.parentNode.style.height;\n  }\n\n  /**\n   * Adjust the overlay dimensions and position.\n   */\n  applyToDOM() {\n    const total = this.wtSettings.getSetting('totalRows');\n\n    if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n      this.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n    } else if (total === 0) {\n      // can happen if there are 0 rows\n      this.spreader.style.top = '0';\n\n    } else {\n      throw new Error('Incorrect value of the rowsRenderCalculator');\n    }\n\n    this.spreader.style.bottom = '';\n\n    if (this.needFullRender) {\n      this.syncOverlayOffset();\n    }\n  }\n\n  /**\n   * Synchronize calculated left position to an element.\n   */\n  syncOverlayOffset() {\n    const styleProperty = this.isRtl() ? 'right' : 'left';\n    const { spreader } = this.clone.wtTable;\n\n    if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n      spreader.style[styleProperty] = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n    } else {\n      spreader.style[styleProperty] = '';\n    }\n  }\n\n  /**\n   * Scrolls vertically to a row.\n   *\n   * @param {number} sourceRow Row index which you want to scroll to.\n   * @param {boolean} [bottomEdge=false] If `true`, scrolls according to the bottom edge (top edge is by default).\n   */\n  scrollTo(sourceRow, bottomEdge) {\n    let newY = this.getTableParentOffset();\n    const sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n    const mainHolder = sourceInstance.wtTable.holder;\n    let scrollbarCompensation = 0;\n\n    if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n      scrollbarCompensation = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    if (bottomEdge) {\n      newY += this.sumCellSizes(0, sourceRow + 1);\n      newY -= this.wot.wtViewport.getViewportHeight();\n      // Fix 1 pixel offset when cell is selected\n      newY += 1;\n\n    } else {\n      newY += this.sumCellSizes(this.wtSettings.getSetting('fixedRowsBottom'), sourceRow);\n    }\n    newY += scrollbarCompensation;\n\n    this.setScrollPosition(newY);\n  }\n\n  /**\n   * Gets table parent top position.\n   *\n   * @returns {number}\n   */\n  getTableParentOffset() {\n    if (this.mainTableScrollableElement === this.domBindings.rootWindow) {\n      return this.wot.wtTable.holderOffset.top;\n    }\n\n    return 0;\n  }\n\n  /**\n   * Gets the main overlay's vertical scroll position.\n   *\n   * @returns {number} Main table's vertical scroll position.\n   */\n  getScrollPosition() {\n    return getScrollTop(this.mainTableScrollableElement, this.domBindings.rootWindow);\n  }\n\n  /**\n   * Gets the main overlay's vertical overlay offset.\n   *\n   * @returns {number} Main table's vertical overlay offset.\n   */\n  getOverlayOffset() {\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayOffset = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      const rootHeight = this.wot.wtTable.getTotalHeight();\n      const overlayRootHeight = this.clone.wtTable.getTotalHeight();\n      const maxOffset = rootHeight - overlayRootHeight;\n      const docClientHeight = this.domBindings.rootDocument.documentElement.clientHeight;\n\n      overlayOffset = Math.max(\n        this.getTableParentOffset() - this.getScrollPosition() - docClientHeight + rootHeight, 0);\n\n      if (overlayOffset > maxOffset) {\n        overlayOffset = 0;\n      }\n    }\n\n    return overlayOffset;\n  }\n\n  /**\n   * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n   *\n   * @param {number} position Header Y position if trimming container is window or scroll top if not.\n   * @returns {boolean}\n   */\n  adjustHeaderBordersPosition(position) {\n    const fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n    const areFixedRowsBottomChanged = this.cachedFixedRowsBottom !== fixedRowsBottom;\n    const columnHeaders = this.wtSettings.getSetting('columnHeaders');\n    let positionChanged = false;\n\n    if ((areFixedRowsBottomChanged || fixedRowsBottom === 0) && columnHeaders.length > 0) {\n      const masterParent = this.wot.wtTable.holder.parentNode;\n      const previousState = hasClass(masterParent, 'innerBorderBottom');\n\n      this.cachedFixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n\n      if (position || this.wtSettings.getSetting('totalRows') === 0) {\n        addClass(masterParent, 'innerBorderBottom');\n        positionChanged = !previousState;\n      } else {\n        removeClass(masterParent, 'innerBorderBottom');\n        positionChanged = previousState;\n      }\n    }\n\n    return positionChanged;\n  }\n}\n","import Table from '../table';\nimport stickyRowsBottom from './mixin/stickyRowsBottom';\nimport calculatedColumns from './mixin/calculatedColumns';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_BOTTOM } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to BottomOverlay, implemented through mixins.\n *\n * @mixes stickyRowsBottom\n * @mixes calculatedColumns\n */\nclass BottomOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_BOTTOM);\n  }\n}\n\nmixin(BottomOverlayTable, stickyRowsBottom);\nmixin(BottomOverlayTable, calculatedColumns);\n\nexport default BottomOverlayTable;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'calculatedColumns';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to columns.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use virtual rendering in the horizontal axis.\n *\n * @type {object}\n */\nconst calculatedColumns = {\n  /**\n   * Get the source index of the first rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedColumn() {\n    const startColumn = this.dataAccessObject.startColumnRendered;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the first column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleColumn() {\n    const startColumn = this.dataAccessObject.startColumnVisible;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleColumn() {\n    const startColumn = this.dataAccessObject.startColumnPartiallyVisible;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedColumn() {\n    const endColumn = this.dataAccessObject.endColumnRendered;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the source index of the last column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleColumn() {\n    const endColumn = this.dataAccessObject.endColumnVisible;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleColumn() {\n    const endColumn = this.dataAccessObject.endColumnPartiallyVisible;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the number of rendered columns.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedColumnsCount() {\n    return this.dataAccessObject.countColumnsRendered;\n  },\n\n  /**\n   * Get the number of fully visible columns in the viewport.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleColumnsCount() {\n    return this.dataAccessObject.countColumnsVisible;\n  },\n\n  /**\n   * Get the number of rendered row headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRowHeadersCount() {\n    return this.dataAccessObject.rowHeaders.length;\n  },\n};\n\ndefineGetter(calculatedColumns, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default calculatedColumns;\n","import {\n  addClass,\n  getScrollbarWidth,\n  getScrollLeft,\n  getMaximumScrollLeft,\n  getWindowScrollTop,\n  hasClass,\n  outerWidth,\n  removeClass,\n  setOverlayPosition,\n  resetCssTransform,\n} from '../../../../helpers/dom/element';\nimport InlineStartOverlayTable from '../table/inlineStart';\nimport { Overlay } from './_base';\nimport { CORNER_DEFAULT_STYLE } from '../selection';\nimport {\n  CLONE_INLINE_START,\n} from './constants';\n\n/**\n * @class InlineStartOverlay\n */\nexport class InlineStartOverlay extends Overlay {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings) {\n    super(wotInstance, facadeGetter, CLONE_INLINE_START, wtSettings, domBindings);\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {InlineStartOverlayTable}\n   */\n  createTable(...args) {\n    return new InlineStartOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderInlineStartOverlay');\n  }\n\n  /**\n   * Updates the left overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    const { wtTable } = this.wot;\n\n    if (!this.needFullRender || !this.shouldBeRendered() || !wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const { rootWindow } = this.domBindings;\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayPosition = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'horizontal')) {\n      overlayPosition = this.getOverlayOffset() * (this.isRtl() ? -1 : 1);\n      setOverlayPosition(overlayRoot, `${overlayPosition}px`, '0px');\n\n    } else {\n      overlayPosition = this.getScrollPosition();\n      resetCssTransform(overlayRoot);\n    }\n\n    const positionChanged = this.adjustHeaderBordersPosition(overlayPosition);\n\n    this.adjustElementsSize();\n\n    return positionChanged;\n  }\n\n  /**\n   * Sets the main overlay's horizontal scroll position.\n   *\n   * @param {number} pos The scroll position.\n   * @returns {boolean}\n   */\n  setScrollPosition(pos) {\n    const { rootWindow } = this.domBindings;\n    let result = false;\n\n    if (this.isRtl()) {\n      pos = -pos;\n    }\n\n    if (this.mainTableScrollableElement === rootWindow && rootWindow.scrollX !== pos) {\n      rootWindow.scrollTo(pos, getWindowScrollTop(rootWindow));\n      result = true;\n\n    } else if (this.mainTableScrollableElement.scrollLeft !== pos) {\n      this.mainTableScrollableElement.scrollLeft = pos;\n      result = true;\n    }\n\n    return result;\n  }\n\n  /**\n   * Triggers onScroll hook callback.\n   */\n  onScroll() {\n    this.wtSettings.getSetting('onScrollVertically');\n  }\n\n  /**\n   * Calculates total sum cells width.\n   *\n   * @param {number} from Column index which calculates started from.\n   * @param {number} to Column index where calculation is finished.\n   * @returns {number} Width sum.\n   */\n  sumCellSizes(from, to) {\n    const defaultColumnWidth = this.wtSettings.getSetting('defaultColumnWidth');\n    let column = from;\n    let sum = 0;\n\n    while (column < to) {\n      sum += this.wot.wtTable.getStretchedColumnWidth(column) || defaultColumnWidth;\n      column += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * Adjust overlay root element, children and master table element sizes (width, height).\n   */\n  adjustElementsSize() {\n    this.updateTrimmingContainer();\n\n    if (this.needFullRender) {\n      this.adjustRootElementSize();\n      this.adjustRootChildrenSize();\n    }\n  }\n\n  /**\n   * Adjust overlay root element size (width and height).\n   */\n  adjustRootElementSize() {\n    const { wtTable } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const scrollbarHeight = getScrollbarWidth(rootDocument);\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const overlayRootStyle = overlayRoot.style;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer !== rootWindow || preventOverflow === 'vertical') {\n      let height = this.wot.wtViewport.getWorkspaceHeight();\n\n      if (this.wot.wtOverlays.hasScrollbarBottom) {\n        height -= scrollbarHeight;\n      }\n\n      height = Math.min(height, wtTable.wtRootElement.scrollHeight);\n      overlayRootStyle.height = `${height}px`;\n\n    } else {\n      overlayRootStyle.height = '';\n    }\n\n    this.clone.wtTable.holder.style.height = overlayRootStyle.height;\n\n    const tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n    overlayRootStyle.width = `${tableWidth}px`;\n  }\n\n  /**\n   * Adjust overlay root childs size.\n   */\n  adjustRootChildrenSize() {\n    const { holder } = this.clone.wtTable;\n    const selectionCornerOffset = this.wot.selectionManager\n      .getFocusSelection() ? parseInt(CORNER_DEFAULT_STYLE.width, 10) / 2 : 0;\n\n    this.clone.wtTable.hider.style.height = this.hider.style.height;\n    holder.style.height = holder.parentNode.style.height;\n    // Add selection corner protruding part to the holder total width to make sure that\n    // borders' corner won't be cut after horizontal scroll (#6937).\n    holder.style.width = `${parseInt(holder.parentNode.style.width, 10) + selectionCornerOffset}px`;\n  }\n\n  /**\n   * Adjust the overlay dimensions and position.\n   */\n  applyToDOM() {\n    const total = this.wtSettings.getSetting('totalColumns');\n    const styleProperty = this.isRtl() ? 'right' : 'left';\n\n    if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n      this.spreader.style[styleProperty] = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n    } else if (total === 0) {\n      this.spreader.style[styleProperty] = '0';\n\n    } else {\n      throw new Error('Incorrect value of the columnsRenderCalculator');\n    }\n\n    if (this.isRtl()) {\n      this.spreader.style.left = '';\n    } else {\n      this.spreader.style.right = '';\n    }\n\n    if (this.needFullRender) {\n      this.syncOverlayOffset();\n    }\n  }\n\n  /**\n   * Synchronize calculated top position to an element.\n   */\n  syncOverlayOffset() {\n    if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n      this.clone.wtTable.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n    } else {\n      this.clone.wtTable.spreader.style.top = '';\n    }\n  }\n\n  /**\n   * Scrolls horizontally to a column at the left edge of the viewport.\n   *\n   * @param {number} sourceCol  Column index which you want to scroll to.\n   * @param {boolean} [beyondRendered]  If `true`, scrolls according to the right\n   *                                    edge (left edge is by default).\n   * @returns {boolean}\n   */\n  scrollTo(sourceCol, beyondRendered) {\n    const { wtSettings } = this;\n    const rowHeaders = wtSettings.getSetting('rowHeaders');\n    const fixedColumnsStart = wtSettings.getSetting('fixedColumnsStart');\n    const sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n    const mainHolder = sourceInstance.wtTable.holder;\n    const rowHeaderBorderCompensation = (\n      fixedColumnsStart === 0 &&\n      rowHeaders.length > 0 &&\n      !hasClass(mainHolder.parentNode, 'innerBorderInlineStart')\n    ) ? 1 : 0;\n    let newX = this.getTableParentOffset();\n    let scrollbarCompensation = 0;\n\n    if (beyondRendered) {\n      const columnWidth = this.wot.wtTable.getColumnWidth(sourceCol);\n      const viewportWidth = this.wot.wtViewport.getViewportWidth();\n\n      if (columnWidth > viewportWidth) {\n        beyondRendered = false;\n      }\n    }\n\n    if (beyondRendered && mainHolder.offsetWidth !== mainHolder.clientWidth) {\n      scrollbarCompensation = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n    if (beyondRendered) {\n      newX += this.sumCellSizes(0, sourceCol + 1);\n      newX -= this.wot.wtViewport.getViewportWidth();\n      // Compensate for the right header border if scrolled from the absolute left.\n      newX += rowHeaderBorderCompensation;\n\n    } else {\n      newX += this.sumCellSizes(this.wtSettings.getSetting('fixedColumnsStart'), sourceCol);\n    }\n\n    newX += scrollbarCompensation;\n\n    // If the table is scrolled all the way left when starting the scroll and going to be scrolled to the far right,\n    // we need to compensate for the potential header border width.\n    if (\n      getMaximumScrollLeft(this.mainTableScrollableElement) === newX - rowHeaderBorderCompensation &&\n      rowHeaderBorderCompensation > 0\n    ) {\n      this.wot.wtOverlays.expandHiderHorizontallyBy(rowHeaderBorderCompensation);\n    }\n\n    return this.setScrollPosition(newX);\n  }\n\n  /**\n   * Gets table parent left position.\n   *\n   * @returns {number}\n   */\n  getTableParentOffset() {\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let offset = 0;\n\n    if (!preventOverflow && this.trimmingContainer === this.domBindings.rootWindow) {\n      offset = this.wot.wtTable.holderOffset.left;\n    }\n\n    return offset;\n  }\n\n  /**\n   * Gets the main overlay's horizontal scroll position.\n   *\n   * @returns {number} Main table's horizontal scroll position.\n   */\n  getScrollPosition() {\n    return Math.abs(getScrollLeft(this.mainTableScrollableElement, this.domBindings.rootWindow));\n  }\n\n  /**\n   * Gets the main overlay's horizontal overlay offset.\n   *\n   * @returns {number} Main table's horizontal overlay offset.\n   */\n  getOverlayOffset() {\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayOffset = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'horizontal')) {\n      if (this.isRtl()) {\n        overlayOffset = Math.abs(Math.min(this.getTableParentOffset() - this.getScrollPosition(), 0));\n      } else {\n        overlayOffset = Math.max(this.getScrollPosition() - this.getTableParentOffset(), 0);\n      }\n\n      const rootWidth = this.wot.wtTable.getTotalWidth();\n      const overlayRootWidth = this.clone.wtTable.getTotalWidth();\n      const maxOffset = rootWidth - overlayRootWidth;\n\n      if (overlayOffset > maxOffset) {\n        overlayOffset = 0;\n      }\n    }\n\n    return overlayOffset;\n  }\n\n  /**\n   * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n   *\n   * @param {number} position Header X position if trimming container is window or scroll top if not.\n   * @returns {boolean}\n   */\n  adjustHeaderBordersPosition(position) {\n    const { wtSettings } = this;\n    const masterParent = this.wot.wtTable.holder.parentNode;\n    const rowHeaders = wtSettings.getSetting('rowHeaders');\n    const fixedColumnsStart = wtSettings.getSetting('fixedColumnsStart');\n    const totalRows = wtSettings.getSetting('totalRows');\n    const preventVerticalOverflow = wtSettings.getSetting('preventOverflow') === 'vertical';\n\n    if (totalRows) {\n      removeClass(masterParent, 'emptyRows');\n    } else {\n      addClass(masterParent, 'emptyRows');\n    }\n\n    let positionChanged = false;\n\n    if (!preventVerticalOverflow) {\n      if (fixedColumnsStart && !rowHeaders.length) {\n        // \"innerBorderLeft\" is for backward compatibility\n        addClass(masterParent, 'innerBorderLeft innerBorderInlineStart');\n\n      } else if (!fixedColumnsStart && rowHeaders.length) {\n        const previousState = hasClass(masterParent, 'innerBorderInlineStart');\n\n        if (position) {\n          addClass(masterParent, 'innerBorderLeft innerBorderInlineStart');\n          positionChanged = !previousState;\n        } else {\n          removeClass(masterParent, 'innerBorderLeft innerBorderInlineStart');\n          positionChanged = previousState;\n        }\n      }\n    }\n\n    return positionChanged;\n  }\n}\n","import Table from '../table';\nimport calculatedRows from './mixin/calculatedRows';\nimport stickyColumnsStart from './mixin/stickyColumnsStart';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_INLINE_START } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to InlineStartOverlayTable, implemented through mixins.\n */\nclass InlineStartOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_INLINE_START);\n  }\n}\n\nmixin(InlineStartOverlayTable, calculatedRows);\nmixin(InlineStartOverlayTable, stickyColumnsStart);\n\nexport default InlineStartOverlayTable;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'calculatedRows';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use virtual rendering in the vertical axis.\n *\n * @type {object}\n */\nconst calculatedRows = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedRow() {\n    const startRow = this.dataAccessObject.startRowRendered;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleRow() {\n    const startRow = this.dataAccessObject.startRowVisible;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleRow() {\n    const startRow = this.dataAccessObject.startRowPartiallyVisible;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedRow() {\n    const endRow = this.dataAccessObject.endRowRendered;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleRow() {\n    const endRow = this.dataAccessObject.endRowVisible;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleRow() {\n    const endRow = this.dataAccessObject.endRowPartiallyVisible;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedRowsCount() {\n    return this.dataAccessObject.countRowsRendered;\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleRowsCount() {\n    return this.dataAccessObject.countRowsVisible;\n  },\n\n  /**\n   * Get the number of rendered column headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getColumnHeadersCount() {\n    return this.dataAccessObject.columnHeaders.length;\n  },\n};\n\ndefineGetter(calculatedRows, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default calculatedRows;\n","import Selection from './selection';\n\nexport * from './constants';\nexport * from './border/constants';\nexport { SelectionManager } from './manager';\nexport {\n  Selection\n};\n","import { mixin } from '../../../../helpers/object';\nimport localHooks from '../../../../mixins/localHooks';\n\n/**\n * The Selection class allows highlighting (by applying CSS class) the table's cells or headers\n * and setting up the borders if defined in the settings.\n *\n * The Selection coordinates may point to the cells (positive numbers) or headers (negative numbers).\n *\n * @class Selection\n */\nclass Selection {\n  /**\n   * @param {object} settings The selection settings object. @todo type.\n   * @param {CellRange} cellRange The cell range instance.\n   */\n  constructor(settings, cellRange) {\n    this.settings = settings;\n    this.cellRange = cellRange || null;\n  }\n\n  /**\n   * Checks if selection is empty.\n   *\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return this.cellRange === null;\n  }\n\n  /**\n   * Adds a cell coords to the selection.\n   *\n   * @param {CellCoords} coords The cell coordinates to add.\n   * @returns {Selection}\n   */\n  add(coords) {\n    if (this.isEmpty()) {\n      this.cellRange = this.settings.createCellRange(coords);\n\n    } else {\n      this.cellRange.expand(coords);\n    }\n\n    return this;\n  }\n\n  /**\n   * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean\n   * information about success.\n   *\n   * @param {CellCoords} oldCoords An old cell coordinates to replace.\n   * @param {CellCoords} newCoords The new cell coordinates.\n   * @returns {boolean}\n   */\n  replace(oldCoords, newCoords) {\n    if (!this.isEmpty()) {\n      if (this.cellRange.from.isEqual(oldCoords)) {\n        this.cellRange.from = newCoords;\n\n        return true;\n      }\n      if (this.cellRange.to.isEqual(oldCoords)) {\n        this.cellRange.to = newCoords;\n\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Clears selection.\n   *\n   * @returns {Selection}\n   */\n  clear() {\n    this.cellRange = null;\n\n    return this;\n  }\n\n  /**\n   * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.\n   *\n   * @returns {number[]} Returns array of coordinates for example `[1, 1, 5, 5]`.\n   */\n  getCorners() {\n    const topStart = this.cellRange.getOuterTopStartCorner();\n    const bottomEnd = this.cellRange.getOuterBottomEndCorner();\n\n    return [\n      topStart.row,\n      topStart.col,\n      bottomEnd.row,\n      bottomEnd.col,\n    ];\n  }\n\n  /**\n   * Destroys the instance.\n   */\n  destroy() {\n    this.runLocalHooks('destroy');\n  }\n}\n\nmixin(Selection, localHooks);\n\nexport default Selection;\n","import { defineGetter } from './../helpers/object';\nimport { fastCall } from './../helpers/function';\n\nconst MIXIN_NAME = 'localHooks';\n\n/**\n * Mixin object to extend objects functionality for local hooks.\n *\n * @type {object}\n */\nconst localHooks = {\n  /**\n   * Internal hooks storage.\n   */\n  _localHooks: Object.create(null),\n\n  /**\n   * Add hook to the collection.\n   *\n   * @param {string} key The hook name.\n   * @param {Function} callback The hook callback.\n   * @returns {object}\n   */\n  addLocalHook(key, callback) {\n    if (!this._localHooks[key]) {\n      this._localHooks[key] = [];\n    }\n    this._localHooks[key].push(callback);\n\n    return this;\n  },\n\n  /**\n   * Run hooks.\n   *\n   * @param {string} key The name of the hook to run.\n   * @param {*} [arg1] An additional parameter passed to the callback function.\n   * @param {*} [arg2] An additional parameter passed to the callback function.\n   * @param {*} [arg3] An additional parameter passed to the callback function.\n   * @param {*} [arg4] An additional parameter passed to the callback function.\n   * @param {*} [arg5] An additional parameter passed to the callback function.\n   * @param {*} [arg6] An additional parameter passed to the callback function.\n   */\n  runLocalHooks(key, arg1, arg2, arg3, arg4, arg5, arg6) {\n    if (this._localHooks[key]) {\n      const length = this._localHooks[key].length;\n\n      // don't optimize this loop with the `arrayEach()` method or arrow functions\n      // otherwise, performance will decrease because of garbage collection\n      // using the `...rest` syntax (ES6 and later) will decrease performance as well\n      for (let i = 0; i < length; i++) {\n        fastCall(this._localHooks[key][i], this, arg1, arg2, arg3, arg4, arg5, arg6);\n      }\n    }\n  },\n\n  /**\n   * Clear all added hooks.\n   *\n   * @returns {object}\n   */\n  clearLocalHooks() {\n    this._localHooks = {};\n\n    return this;\n  },\n};\n\ndefineGetter(localHooks, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default localHooks;\n","/**\n * Selection type that is visible only if the row or column header is clicked. If that happened\n * all row or column header layers are highlighted.\n *\n * @type {string}\n */\nexport const ACTIVE_HEADER_TYPE = 'active-header';\n/**\n * Selection type that is visible only if the a cell or cells are clicked. If that happened\n * only the most closest to the cells row or column header is highlighted.\n *\n * @type {string}\n */\nexport const HEADER_TYPE = 'header';\n/**\n * Selection type that is visible when a cell or cells are clicked. The selected cells are\n * highlighted.\n *\n * @type {string}\n */\nexport const AREA_TYPE = 'area';\n/**\n * Selection type defines a cell that follows the user (keyboard navigation).\n *\n * @type {string}\n */\nexport const FOCUS_TYPE = 'focus';\n/**\n * Selection type defines borders for the autofill functionality.\n *\n * @type {string}\n */\nexport const FILL_TYPE = 'fill';\n/**\n * Selection type defines highlights for the `currentRowClassName` option.\n *\n * @type {string}\n */\nexport const ROW_TYPE = 'row';\n/**\n * Selection type defines highlights for the `currentColumnClassName` option.\n *\n * @type {string}\n */\nexport const COLUMN_TYPE = 'column';\n/**\n * Selection type defines highlights managed by the CustomBorders plugin.\n *\n * @type {string}\n */\nexport const CUSTOM_SELECTION_TYPE = 'custom-selection';\n","/**\n * Default border corner style.\n *\n * @type {object}\n */\nexport const CORNER_DEFAULT_STYLE = Object.freeze({\n  width: '6px',\n  height: '6px',\n  borderWidth: '1px',\n  borderStyle: 'solid',\n  borderColor: '#FFF'\n});\n","import {\n  removeClass,\n  addClass,\n  setAttribute,\n  removeAttribute\n} from '../../../../helpers/dom/element';\nimport { SelectionScanner } from './scanner';\nimport Border from './border/border';\n\n/**\n * Module responsible for rendering selections (CSS classes) and borders based on the\n * collection of the Selection instances provided throughout the `selections` Walkontable\n * setting.\n *\n * @private\n */\nexport class SelectionManager {\n  /**\n   * The overlay's Walkontable instance that are currently processed.\n   *\n   * @type {Walkontable}\n   */\n  #activeOverlaysWot;\n  /**\n   * The Highlight instance that holds Selections instances within it.\n   *\n   * @type {Highlight|null}\n   */\n  #selections;\n  /**\n   * The SelectionScanner allows to scan and collect the cell and header elements that matches\n   * to the coords defined in the selections.\n   *\n   * @type {SelectionScanner}\n   */\n  #scanner = new SelectionScanner();\n  /**\n   * The Map tracks applied CSS classes. It's used to reset the elements state to their initial state.\n   *\n   * @type {WeakMap}\n   */\n  #appliedClasses = new WeakMap();\n  /**\n   * The Map tracks applied \"destroy\" listeners for Selection instances.\n   *\n   * @type {WeakMap}\n   */\n  #destroyListeners = new WeakSet();\n  /**\n   * The Map holds references to Border classes for Selection instances which requires that when\n   * the \"border\" setting is defined.\n   *\n   * @type {Map}\n   */\n  #selectionBorders = new Map();\n\n  constructor(selections) {\n    this.#selections = selections;\n  }\n\n  /**\n   * Sets the active Walkontable instance.\n   *\n   * @param {Walkontable} activeWot The overlays or master Walkontable instance.\n   * @returns {SelectionManager}\n   */\n  setActiveOverlay(activeWot) {\n    this.#activeOverlaysWot = activeWot;\n    this.#scanner.setActiveOverlay(this.#activeOverlaysWot);\n\n    if (!this.#appliedClasses.has(this.#activeOverlaysWot)) {\n      this.#appliedClasses.set(this.#activeOverlaysWot, new Set());\n    }\n\n    return this;\n  }\n\n  /**\n   * Gets the Selection instance of the \"focus\" type.\n   *\n   * @returns {Selection|null}\n   */\n  getFocusSelection() {\n    return this.#selections !== null ? this.#selections.getFocus() : null;\n  }\n\n  /**\n   * Gets the Selection instance of the \"area\" type.\n   *\n   * @returns {Selection|null}\n   */\n  getAreaSelection() {\n    return this.#selections !== null ? this.#selections.createLayeredArea() : null;\n  }\n\n  /**\n   * Gets the Border instance associated with Selection instance.\n   *\n   * @param {Selection} selection The selection instance.\n   * @returns {Border|null} Returns the Border instance (new for each overlay Walkontable instance).\n   */\n  getBorderInstance(selection) {\n    if (!selection.settings.border) {\n      return null;\n    }\n\n    if (this.#selectionBorders.has(selection)) {\n      const borders = this.#selectionBorders.get(selection);\n\n      if (borders.has(this.#activeOverlaysWot)) {\n        return borders.get(this.#activeOverlaysWot);\n      }\n\n      const border = new Border(this.#activeOverlaysWot, selection.settings);\n\n      borders.set(this.#activeOverlaysWot, border);\n\n      return border;\n    }\n\n    const border = new Border(this.#activeOverlaysWot, selection.settings);\n\n    this.#selectionBorders.set(selection, new Map([[this.#activeOverlaysWot, border]]));\n\n    return border;\n  }\n\n  /**\n   * Gets all Border instances associated with Selection instance for all overlays.\n   *\n   * @param {Selection} selection The selection instance.\n   * @returns {Border[]}\n   */\n  getBorderInstances(selection) {\n    return Array.from(this.#selectionBorders.get(selection)?.values() ?? []);\n  }\n\n  /**\n   * Destroys the Border instance associated with Selection instance.\n   *\n   * @param {Selection} selection The selection instance.\n   */\n  destroyBorders(selection) {\n    this.#selectionBorders.get(selection).forEach(border => border.destroy());\n    this.#selectionBorders.delete(selection);\n  }\n\n  /**\n   * Renders all the selections (add CSS classes to cells and draw borders).\n   *\n   * @param {boolean} fastDraw Indicates the render cycle type (fast/slow).\n   */\n  render(fastDraw) {\n    if (this.#selections === null) {\n      return;\n    }\n\n    if (fastDraw) {\n      // there was no rerender, so we need to remove classNames by ourselves\n      this.#resetCells();\n    }\n\n    const selections = Array.from(this.#selections);\n    const classNamesMap = new Map();\n    const headerAttributesMap = new Map();\n\n    for (let i = 0; i < selections.length; i++) {\n      const selection = selections[i];\n      const {\n        className,\n        headerAttributes,\n        createLayers,\n        selectionType,\n      } = selection.settings;\n\n      if (!this.#destroyListeners.has(selection)) {\n        this.#destroyListeners.add(selection);\n        selection.addLocalHook('destroy', () => this.destroyBorders(selection));\n      }\n\n      const borderInstance = this.getBorderInstance(selection);\n\n      if (selection.isEmpty()) {\n        borderInstance?.disappear();\n\n        continue; // eslint-disable-line no-continue\n      }\n\n      if (className) {\n        const elements = this.#scanner\n          .setActiveSelection(selection)\n          .scan();\n\n        elements.forEach((element) => {\n          if (classNamesMap.has(element)) {\n            const classNamesLayers = classNamesMap.get(element);\n\n            if (classNamesLayers.has(className) && createLayers === true) {\n              classNamesLayers.set(className, classNamesLayers.get(className) + 1);\n            } else {\n              classNamesLayers.set(className, 1);\n            }\n\n          } else {\n            classNamesMap.set(element, new Map([[className, 1]]));\n          }\n\n          if (headerAttributes) {\n            if (!headerAttributesMap.has(element)) {\n              headerAttributesMap.set(element, []);\n            }\n\n            if (element.nodeName === 'TH') {\n              headerAttributesMap.get(element).push(...headerAttributes);\n            }\n          }\n        });\n      }\n\n      const corners = selection.getCorners();\n\n      this.#activeOverlaysWot.getSetting('onBeforeDrawBorders', corners, selectionType);\n      borderInstance?.appear(corners);\n    }\n\n    classNamesMap.forEach((classNamesLayers, element) => {\n      const classNames = Array.from(classNamesLayers).map(([className, occurrenceCount]) => {\n        if (occurrenceCount === 1) {\n          return className;\n        }\n\n        return [className, ...Array.from({\n          length: occurrenceCount - 1\n        }, (_, i) => `${className}-${i + 1}`)];\n      }).flat();\n\n      classNames.forEach(className => this.#appliedClasses\n        .get(this.#activeOverlaysWot)\n        .add(className));\n\n      addClass(element, classNames);\n\n      if (element.nodeName === 'TD' && Array.isArray(this.#selections.options?.cellAttributes)) {\n        setAttribute(element, this.#selections.options.cellAttributes);\n\n      }\n    });\n\n    // Set the attributes for the headers if they're focused.\n    Array.from(headerAttributesMap.keys()).forEach((element) => {\n      setAttribute(element, [...headerAttributesMap.get(element)]);\n    });\n  }\n\n  /**\n   * Resets the elements to their initial state (remove the CSS classes that are added in the\n   * previous render cycle).\n   */\n  #resetCells() {\n    const appliedOverlaysClasses = this.#appliedClasses.get(this.#activeOverlaysWot);\n    const classesToRemove = this.#activeOverlaysWot.wtSettings.getSetting('onBeforeRemoveCellClassNames');\n\n    if (Array.isArray(classesToRemove)) {\n      for (let i = 0; i < classesToRemove.length; i++) {\n        appliedOverlaysClasses.add(classesToRemove[i]);\n      }\n    }\n\n    appliedOverlaysClasses.forEach((className) => {\n      const nodes = this.#activeOverlaysWot.wtTable.TABLE.querySelectorAll(`.${className}`);\n      let cellAttributes = [];\n\n      if (Array.isArray(this.#selections.options?.cellAttributes)) {\n        cellAttributes = this.#selections.options.cellAttributes.map(el => el[0]);\n      }\n\n      if (Array.isArray(this.#selections.options?.headerAttributes)) {\n        cellAttributes = [...cellAttributes, ...this.#selections.options.headerAttributes.map(el => el[0])];\n      }\n\n      for (let i = 0, len = nodes.length; i < len; i++) {\n        removeClass(nodes[i], className);\n\n        removeAttribute(nodes[i], cellAttributes);\n      }\n    });\n\n    appliedOverlaysClasses.clear();\n  }\n}\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flat');\n","/* eslint-disable no-continue */\nimport { addClass } from '../../../../helpers/dom/element';\n\n/**\n * Selection scanner module scans the rendered cells and headers and if it finds an intersection with\n * the coordinates of the Selection class (highlight) it returns the DOM elements.\n *\n * @private\n */\nexport class SelectionScanner {\n  /**\n   * Active Selection instance to process.\n   *\n   * @type {Selection}\n   */\n  #selection;\n  /**\n   * The Walkontable instance that the scans depends on.\n   *\n   * @type {Walkontable}\n   */\n  #activeOverlaysWot;\n\n  /**\n   * Sets the Walkontable instance that will be taking into account while scanning the table.\n   *\n   * @param {Walkontable} activeOverlaysWot The Walkontable instance.\n   * @returns {SelectionScanner}\n   */\n  setActiveOverlay(activeOverlaysWot) {\n    this.#activeOverlaysWot = activeOverlaysWot;\n\n    return this;\n  }\n\n  /**\n   * Sets the Selection instance to process.\n   *\n   * @param {Selection} selection The Selection instance.\n   * @returns {SelectionScanner}\n   */\n  setActiveSelection(selection) {\n    this.#selection = selection;\n\n    return this;\n  }\n\n  /**\n   * Scans the rendered table with selection and returns elements that intersects\n   * with selection coordinates.\n   *\n   * @returns {HTMLTableElement[]}\n   */\n  scan() {\n    const selectionType = this.#selection.settings.selectionType;\n    const elements = new Set();\n\n    // TODO(improvement): use heuristics from coords to detect what type of scan\n    // the Selection needs instead of using `selectionType` property.\n    if (selectionType === 'active-header') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanRowsInHeadersRange(element => elements.add(element));\n\n    } else if (selectionType === 'area') {\n      this.scanCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'focus') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanRowsInHeadersRange(element => elements.add(element));\n      this.scanCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'fill') {\n      this.scanCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'header') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanRowsInHeadersRange(element => elements.add(element));\n\n    } else if (selectionType === 'row') {\n      this.scanRowsInHeadersRange(element => elements.add(element));\n      this.scanRowsInCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'column') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanColumnsInCellsRange(element => elements.add(element));\n    }\n\n    return elements;\n  }\n\n  /**\n   * Scans the table (only rendered headers) and collect all column headers (TH) that match\n   * the coordinates passed in the Selection instance.\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanColumnsInHeadersRange(callback) {\n    const [topRow, topColumn, bottomRow, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n    const renderedColumnsCount = wtTable.getRenderedColumnsCount();\n    const columnHeadersCount = wtTable.getColumnHeadersCount();\n    let cursor = 0;\n\n    for (let column = -wtTable.getRowHeadersCount(); column < renderedColumnsCount; column++) {\n      const sourceColumn = wtTable.columnFilter.renderedToSource(column);\n\n      if (sourceColumn < topColumn || sourceColumn > bottomColumn) {\n        continue;\n      }\n\n      for (let headerLevel = -columnHeadersCount; headerLevel < 0; headerLevel++) {\n        if (headerLevel < topRow || headerLevel > bottomRow) {\n          continue;\n        }\n\n        const positiveBasedHeaderLevel = headerLevel + columnHeadersCount;\n        let TH = wtTable.getColumnHeader(sourceColumn, positiveBasedHeaderLevel);\n        const newSourceCol = this.#activeOverlaysWot\n          .getSetting('onBeforeHighlightingColumnHeader', sourceColumn, positiveBasedHeaderLevel, {\n            selectionType: this.#selection.settings.selectionType,\n            columnCursor: cursor,\n            selectionWidth: bottomColumn - topColumn + 1,\n          });\n\n        if (newSourceCol === null) {\n          continue;\n        }\n\n        if (newSourceCol !== sourceColumn) {\n          TH = wtTable.getColumnHeader(newSourceCol, positiveBasedHeaderLevel);\n        }\n\n        callback(TH);\n      }\n\n      cursor += 1;\n    }\n  }\n\n  /**\n   * Scans the table (only rendered headers) and collect all row headers (TH) that match\n   * the coordinates passed in the Selection instance.\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanRowsInHeadersRange(callback) {\n    const [topRow, topColumn, bottomRow, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n    const renderedRowsCount = wtTable.getRenderedRowsCount();\n    const rowHeadersCount = wtTable.getRowHeadersCount();\n    let cursor = 0;\n\n    for (let row = -wtTable.getColumnHeadersCount(); row < renderedRowsCount; row++) {\n      const sourceRow = wtTable.rowFilter.renderedToSource(row);\n\n      if (sourceRow < topRow || sourceRow > bottomRow) {\n        continue;\n      }\n\n      for (let headerLevel = -rowHeadersCount; headerLevel < 0; headerLevel++) {\n        if (headerLevel < topColumn || headerLevel > bottomColumn) {\n          continue;\n        }\n\n        const positiveBasedHeaderLevel = headerLevel + rowHeadersCount;\n        let TH = wtTable.getRowHeader(sourceRow, positiveBasedHeaderLevel);\n        const newSourceRow = this.#activeOverlaysWot\n          .getSetting('onBeforeHighlightingRowHeader', sourceRow, positiveBasedHeaderLevel, {\n            selectionType: this.#selection.settings.selectionType,\n            rowCursor: cursor,\n            selectionHeight: bottomRow - topRow + 1,\n          });\n\n        if (newSourceRow === null) {\n          continue;\n        }\n\n        if (newSourceRow !== sourceRow) {\n          TH = wtTable.getRowHeader(newSourceRow, positiveBasedHeaderLevel);\n        }\n\n        callback(TH);\n      }\n\n      cursor += 1;\n    }\n  }\n\n  /**\n   * Scans the table (only rendered cells) and collect all cells (TR) that match\n   * the coordinates passed in the Selection instance.\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanCellsRange(callback) {\n    const [topRow, topColumn, bottomRow, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n\n    this.#scanCellsRange((sourceRow, sourceColumn) => {\n      if (sourceRow >= topRow && sourceRow <= bottomRow && sourceColumn >= topColumn && sourceColumn <= bottomColumn) {\n        const cell = wtTable.getCell(this.#activeOverlaysWot.createCellCoords(sourceRow, sourceColumn));\n\n        // support for old API\n        const additionalSelectionClass = this.#activeOverlaysWot\n          .getSetting('onAfterDrawSelection', sourceRow, sourceColumn, this.#selection.settings.layerLevel);\n\n        if (typeof additionalSelectionClass === 'string') {\n          addClass(cell, additionalSelectionClass);\n        }\n\n        callback(cell);\n      }\n    });\n  }\n\n  /**\n   * Scans the table (only rendered cells) and collects all cells (TR) that match the coordinates\n   * passed in the Selection instance but only for the X axis (rows).\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanRowsInCellsRange(callback) {\n    // eslint-disable-next-line comma-spacing\n    const [topRow,, bottomRow,] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n\n    this.#scanCellsRange((sourceRow, sourceColumn) => {\n      if (sourceRow >= topRow && sourceRow <= bottomRow) {\n        const cell = wtTable.getCell(this.#activeOverlaysWot.createCellCoords(sourceRow, sourceColumn));\n\n        callback(cell);\n      }\n    });\n  }\n\n  /**\n   * Scans the table (only rendered cells) and collects all cells (TR) that match the coordinates\n   * passed in the Selection instance but only for the Y axis (columns).\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanColumnsInCellsRange(callback) {\n    const [, topColumn,, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n\n    this.#scanCellsRange((sourceRow, sourceColumn) => {\n      if (sourceColumn >= topColumn && sourceColumn <= bottomColumn) {\n        const cell = wtTable.getCell(this.#activeOverlaysWot.createCellCoords(sourceRow, sourceColumn));\n\n        callback(cell);\n      }\n    });\n  }\n\n  /**\n   * The method triggers a callback for each rendered cell.\n   *\n   * @param {function(number, number): void} callback The callback function to trigger.\n   */\n  #scanCellsRange(callback) {\n    const { wtTable } = this.#activeOverlaysWot;\n    const renderedRowsCount = wtTable.getRenderedRowsCount();\n    const renderedColumnsCount = wtTable.getRenderedColumnsCount();\n\n    for (let row = 0; row < renderedRowsCount; row += 1) {\n      const sourceRow = wtTable.rowFilter.renderedToSource(row);\n\n      for (let column = 0; column < renderedColumnsCount; column += 1) {\n        callback(sourceRow, wtTable.columnFilter.renderedToSource(column));\n      }\n    }\n  }\n}\n","import {\n  addClass,\n  hasClass,\n  removeClass,\n  getComputedStyle,\n  getTrimmingContainer,\n  innerWidth,\n  innerHeight,\n  offset,\n  outerHeight,\n  outerWidth,\n} from '../../../../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../../../../helpers/dom/event';\nimport { objectEach } from '../../../../../helpers/object';\nimport { isMobileBrowser } from '../../../../../helpers/browser';\nimport { CORNER_DEFAULT_STYLE } from './constants';\n\n/**\n *\n */\nclass Border {\n  // TODO As this is an internal class, should be designed for using {Walkontable}. It uses the facade,\n  // TODO Con. Because the class is created on place where the instance reference comes from external origin.\n  // TODO Imho, the discrimination for handling both, facade and non-facade should be handled.\n  /**\n   * @param {WalkontableFacade} wotInstance The Walkontable instance.\n   * @param {object} settings The border settings.\n   */\n  constructor(wotInstance, settings) {\n    if (!settings) {\n      return;\n    }\n    this.eventManager = wotInstance.eventManager;\n    this.instance = wotInstance;\n    this.wot = wotInstance;\n    this.settings = settings;\n    this.mouseDown = false;\n    this.main = null;\n\n    this.top = null;\n    this.bottom = null;\n    this.start = null;\n    this.end = null;\n\n    this.topStyle = null;\n    this.bottomStyle = null;\n    this.startStyle = null;\n    this.endStyle = null;\n\n    this.cornerDefaultStyle = CORNER_DEFAULT_STYLE;\n    // Offset to moving the corner to be centered relative to the grid.\n    this.cornerCenterPointOffset = -(parseInt(this.cornerDefaultStyle.width, 10) / 2);\n    this.corner = null;\n    this.cornerStyle = null;\n\n    this.createBorders(settings);\n    this.registerListeners();\n  }\n\n  /**\n   * Register all necessary events.\n   */\n  registerListeners() {\n    const documentBody = this.wot.rootDocument.body;\n\n    this.eventManager.addEventListener(documentBody, 'mousedown', () => this.onMouseDown());\n    this.eventManager.addEventListener(documentBody, 'mouseup', () => this.onMouseUp());\n\n    for (let c = 0, len = this.main.childNodes.length; c < len; c++) {\n      const element = this.main.childNodes[c];\n\n      this.eventManager\n        .addEventListener(element, 'mouseenter', event => this.onMouseEnter(event, this.main.childNodes[c]));\n    }\n  }\n\n  /**\n   * Mouse down listener.\n   *\n   * @private\n   */\n  onMouseDown() {\n    this.mouseDown = true;\n  }\n\n  /**\n   * Mouse up listener.\n   *\n   * @private\n   */\n  onMouseUp() {\n    this.mouseDown = false;\n  }\n\n  /**\n   * Mouse enter listener for fragment selection functionality.\n   *\n   * @private\n   * @param {Event} event Dom event.\n   * @param {HTMLElement} parentElement Part of border element.\n   */\n  onMouseEnter(event, parentElement) {\n    if (!this.mouseDown || !this.wot.getSetting('hideBorderOnMouseDownOver')) {\n      return;\n    }\n    event.preventDefault();\n    stopImmediatePropagation(event);\n\n    const _this = this;\n    const documentBody = this.wot.rootDocument.body;\n    const bounds = parentElement.getBoundingClientRect();\n\n    // Hide border to prevents selection jumping when fragmentSelection is enabled.\n    parentElement.style.display = 'none';\n\n    /**\n     * @param {Event} mouseEvent The mouse event object.\n     * @returns {boolean}\n     */\n    function isOutside(mouseEvent) {\n      if (mouseEvent.clientY < Math.floor(bounds.top)) {\n        return true;\n      }\n      if (mouseEvent.clientY > Math.ceil(bounds.top + bounds.height)) {\n        return true;\n      }\n      if (mouseEvent.clientX < Math.floor(bounds.left)) {\n        return true;\n      }\n      if (mouseEvent.clientX > Math.ceil(bounds.left + bounds.width)) {\n        return true;\n      }\n    }\n\n    /**\n     * @param {Event} handlerEvent The mouse event object.\n     */\n    function handler(handlerEvent) {\n      if (isOutside(handlerEvent)) {\n        _this.eventManager.removeEventListener(documentBody, 'mousemove', handler);\n        parentElement.style.display = 'block';\n      }\n    }\n\n    this.eventManager.addEventListener(documentBody, 'mousemove', handler);\n  }\n\n  /**\n   * Create border elements.\n   *\n   * @param {object} settings The border settings.\n   */\n  createBorders(settings) {\n    const { rootDocument } = this.wot;\n\n    this.main = rootDocument.createElement('div');\n\n    const borderDivs = ['top', 'start', 'bottom', 'end', 'corner'];\n    let style = this.main.style;\n\n    style.position = 'absolute';\n    style.top = 0;\n    style.left = 0;\n\n    for (let i = 0; i < 5; i++) {\n      const position = borderDivs[i];\n      const div = rootDocument.createElement('div');\n\n      div.className = `wtBorder ${this.settings.className || ''}`; // + borderDivs[i];\n\n      if (this.settings[position] && this.settings[position].hide) {\n        div.className += ' hidden';\n      }\n      style = div.style;\n      style.backgroundColor = (this.settings[position] && this.settings[position].color) ?\n        this.settings[position].color : settings.border.color;\n      style.height = (this.settings[position] && this.settings[position].width) ?\n        `${this.settings[position].width}px` : `${settings.border.width}px`;\n      style.width = (this.settings[position] && this.settings[position].width) ?\n        `${this.settings[position].width}px` : `${settings.border.width}px`;\n\n      this.main.appendChild(div);\n    }\n    this.top = this.main.childNodes[0];\n    this.start = this.main.childNodes[1];\n    this.bottom = this.main.childNodes[2];\n    this.end = this.main.childNodes[3];\n\n    this.topStyle = this.top.style;\n    this.startStyle = this.start.style;\n    this.bottomStyle = this.bottom.style;\n    this.endStyle = this.end.style;\n\n    this.corner = this.main.childNodes[4];\n    this.corner.className += ' corner';\n    this.cornerStyle = this.corner.style;\n    this.cornerStyle.width = this.cornerDefaultStyle.width;\n    this.cornerStyle.height = this.cornerDefaultStyle.height;\n    this.cornerStyle.border = [\n      this.cornerDefaultStyle.borderWidth,\n      this.cornerDefaultStyle.borderStyle,\n      this.cornerDefaultStyle.borderColor\n    ].join(' ');\n\n    if (isMobileBrowser() && this.instance.getSetting('isDataViewInstance')) {\n      this.createMultipleSelectorHandles();\n    }\n    this.disappear();\n\n    const { wtTable } = this.wot;\n    let bordersHolder = wtTable.bordersHolder;\n\n    if (!bordersHolder) {\n      bordersHolder = rootDocument.createElement('div');\n      bordersHolder.className = 'htBorders';\n      wtTable.bordersHolder = bordersHolder;\n      wtTable.spreader.appendChild(bordersHolder);\n    }\n    bordersHolder.appendChild(this.main);\n  }\n\n  /**\n   * Create multiple selector handler for mobile devices.\n   */\n  createMultipleSelectorHandles() {\n    const { rootDocument } = this.wot;\n\n    this.selectionHandles = {\n      top: rootDocument.createElement('DIV'),\n      topHitArea: rootDocument.createElement('DIV'),\n      bottom: rootDocument.createElement('DIV'),\n      bottomHitArea: rootDocument.createElement('DIV')\n    };\n    const width = 10;\n    const hitAreaWidth = 40;\n\n    this.selectionHandles.top.className = 'topSelectionHandle topLeftSelectionHandle';\n    this.selectionHandles.topHitArea.className = 'topSelectionHandle-HitArea topLeftSelectionHandle-HitArea';\n    this.selectionHandles.bottom.className = 'bottomSelectionHandle bottomRightSelectionHandle';\n    this.selectionHandles.bottomHitArea.className = 'bottomSelectionHandle-HitArea bottomRightSelectionHandle-HitArea';\n\n    this.selectionHandles.styles = {\n      top: this.selectionHandles.top.style,\n      topHitArea: this.selectionHandles.topHitArea.style,\n      bottom: this.selectionHandles.bottom.style,\n      bottomHitArea: this.selectionHandles.bottomHitArea.style\n    };\n\n    const hitAreaStyle = {\n      position: 'absolute',\n      height: `${hitAreaWidth}px`,\n      width: `${hitAreaWidth}px`,\n      'border-radius': `${parseInt(hitAreaWidth / 1.5, 10)}px`,\n    };\n\n    objectEach(hitAreaStyle, (value, key) => {\n      this.selectionHandles.styles.bottomHitArea[key] = value;\n      this.selectionHandles.styles.topHitArea[key] = value;\n    });\n\n    const handleStyle = {\n      position: 'absolute',\n      height: `${width}px`,\n      width: `${width}px`,\n      'border-radius': `${parseInt(width / 1.5, 10)}px`,\n      background: '#F5F5FF',\n      border: '1px solid #4285c8'\n    };\n\n    objectEach(handleStyle, (value, key) => {\n      this.selectionHandles.styles.bottom[key] = value;\n      this.selectionHandles.styles.top[key] = value;\n    });\n\n    this.main.appendChild(this.selectionHandles.top);\n    this.main.appendChild(this.selectionHandles.bottom);\n    this.main.appendChild(this.selectionHandles.topHitArea);\n    this.main.appendChild(this.selectionHandles.bottomHitArea);\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @returns {boolean}\n   */\n  isPartRange(row, col) {\n    const areaSelection = this.wot.selectionManager.getAreaSelection();\n\n    if (areaSelection.cellRange) {\n      if (row !== areaSelection.cellRange.to.row || col !== areaSelection.cellRange.to.col) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number} top The top position of the handler.\n   * @param {number} left The left position of the handler.\n   * @param {number} width The width of the handler.\n   * @param {number} height The height of the handler.\n   */\n  updateMultipleSelectionHandlesPosition(row, col, top, left, width, height) {\n    const isRtl = this.wot.wtSettings.getSetting('rtlMode');\n    const inlinePosProperty = isRtl ? 'right' : 'left';\n    const {\n      top: topStyles,\n      topHitArea: topHitAreaStyles,\n      bottom: bottomStyles,\n      bottomHitArea: bottomHitAreaStyles,\n    } = this.selectionHandles.styles;\n\n    const handleBorderSize = parseInt(topStyles.borderWidth, 10);\n    const handleSize = parseInt(topStyles.width, 10);\n    const hitAreaSize = parseInt(topHitAreaStyles.width, 10);\n    const totalTableWidth = this.wot.wtTable.getWidth();\n    const totalTableHeight = this.wot.wtTable.getHeight();\n\n    topStyles.top = `${parseInt(top - handleSize - 1, 10)}px`;\n    topStyles[inlinePosProperty] = `${parseInt(left - handleSize - 1, 10)}px`;\n\n    topHitAreaStyles.top = `${parseInt(top - ((hitAreaSize / 4) * 3), 10)}px`;\n    topHitAreaStyles[inlinePosProperty] = `${parseInt(left - ((hitAreaSize / 4) * 3), 10)}px`;\n\n    const bottomHandlerInline = Math.min(\n      parseInt(left + width, 10),\n      totalTableWidth - handleSize - (handleBorderSize * 2),\n    );\n    const bottomHandlerAreaInline = Math.min(\n      parseInt(left + width - (hitAreaSize / 4), 10),\n      totalTableWidth - hitAreaSize - (handleBorderSize * 2),\n    );\n\n    bottomStyles[inlinePosProperty] = `${bottomHandlerInline}px`;\n    bottomHitAreaStyles[inlinePosProperty] = `${bottomHandlerAreaInline}px`;\n\n    const bottomHandlerTop = Math.min(\n      parseInt(top + height, 10),\n      totalTableHeight - handleSize - (handleBorderSize * 2),\n    );\n    const bottomHandlerAreaTop = Math.min(\n      parseInt(top + height - (hitAreaSize / 4), 10),\n      totalTableHeight - hitAreaSize - (handleBorderSize * 2),\n    );\n\n    bottomStyles.top = `${bottomHandlerTop}px`;\n    bottomHitAreaStyles.top = `${bottomHandlerAreaTop}px`;\n\n    if (this.settings.border.cornerVisible && this.settings.border.cornerVisible()) {\n      topStyles.display = 'block';\n      topHitAreaStyles.display = 'block';\n\n      if (this.isPartRange(row, col)) {\n        bottomStyles.display = 'none';\n        bottomHitAreaStyles.display = 'none';\n      } else {\n        bottomStyles.display = 'block';\n        bottomHitAreaStyles.display = 'block';\n      }\n    } else {\n      topStyles.display = 'none';\n      bottomStyles.display = 'none';\n      topHitAreaStyles.display = 'none';\n      bottomHitAreaStyles.display = 'none';\n    }\n\n    if (row === this.wot.wtSettings.getSetting('fixedRowsTop') ||\n        col === this.wot.wtSettings.getSetting('fixedColumnsStart')) {\n      topStyles.zIndex = '9999';\n      topHitAreaStyles.zIndex = '9999';\n    } else {\n      topStyles.zIndex = '';\n      topHitAreaStyles.zIndex = '';\n    }\n  }\n\n  /**\n   * Show border around one or many cells.\n   *\n   * @param {Array} corners The corner coordinates.\n   */\n  appear(corners) {\n    if (this.disabled) {\n      return;\n    }\n\n    const { wtTable, rootDocument, rootWindow } = this.wot; // todo refactoring: consider about using internal facade (it is given by external code)\n    let fromRow;\n    let toRow;\n    let fromColumn;\n    let toColumn;\n    let rowHeader;\n    let columnHeader;\n\n    const rowsCount = wtTable.getRenderedRowsCount();\n\n    for (let i = 0; i < rowsCount; i += 1) {\n      const s = wtTable.rowFilter.renderedToSource(i);\n\n      if (s >= corners[0] && s <= corners[2]) {\n        fromRow = s;\n        rowHeader = corners[0];\n        break;\n      }\n    }\n\n    for (let i = rowsCount - 1; i >= 0; i -= 1) {\n      const s = wtTable.rowFilter.renderedToSource(i);\n\n      if (s >= corners[0] && s <= corners[2]) {\n        toRow = s;\n        break;\n      }\n    }\n\n    const columnsCount = wtTable.getRenderedColumnsCount();\n\n    for (let i = 0; i < columnsCount; i += 1) {\n      const s = wtTable.columnFilter.renderedToSource(i);\n\n      if (s >= corners[1] && s <= corners[3]) {\n        fromColumn = s;\n        columnHeader = corners[1];\n        break;\n      }\n    }\n\n    for (let i = columnsCount - 1; i >= 0; i -= 1) {\n      const s = wtTable.columnFilter.renderedToSource(i);\n\n      if (s >= corners[1] && s <= corners[3]) {\n        toColumn = s;\n        break;\n      }\n    }\n    if (fromRow === undefined || fromColumn === undefined) {\n      this.disappear();\n\n      return;\n    }\n\n    let fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));\n    const isMultiple = (fromRow !== toRow || fromColumn !== toColumn);\n    const toTD = isMultiple ? wtTable.getCell(this.wot.createCellCoords(toRow, toColumn)) : fromTD;\n    const fromOffset = offset(fromTD);\n    const toOffset = isMultiple ? offset(toTD) : fromOffset;\n    const containerOffset = offset(wtTable.TABLE);\n    const containerWidth = outerWidth(wtTable.TABLE);\n    const minTop = fromOffset.top;\n    const minLeft = fromOffset.left;\n    const isRtl = this.wot.wtSettings.getSetting('rtlMode');\n\n    let inlineStartPos = 0;\n    let width = 0;\n\n    if (isRtl) {\n      const fromWidth = outerWidth(fromTD);\n      const gridRightPos = rootWindow.innerWidth - containerOffset.left - containerWidth;\n\n      width = minLeft + fromWidth - toOffset.left;\n      inlineStartPos = rootWindow.innerWidth - minLeft - fromWidth - gridRightPos - 1;\n\n    } else {\n      width = toOffset.left + outerWidth(toTD) - minLeft;\n      inlineStartPos = minLeft - containerOffset.left - 1;\n    }\n\n    if (this.isEntireColumnSelected(fromRow, toRow)) {\n      const modifiedValues = this.getDimensionsFromHeader('columns', fromColumn, toColumn, rowHeader, containerOffset);\n      let fromTH = null;\n\n      if (modifiedValues) {\n        [fromTH, inlineStartPos, width] = modifiedValues;\n      }\n\n      if (fromTH) {\n        fromTD = fromTH;\n      }\n    }\n\n    let top = minTop - containerOffset.top - 1;\n    let height = toOffset.top + outerHeight(toTD) - minTop;\n\n    if (this.isEntireRowSelected(fromColumn, toColumn)) {\n      const modifiedValues = this.getDimensionsFromHeader('rows', fromRow, toRow, columnHeader, containerOffset);\n      let fromTH = null;\n\n      if (modifiedValues) {\n        [fromTH, top, height] = modifiedValues;\n      }\n\n      if (fromTH) {\n        fromTD = fromTH;\n      }\n    }\n\n    const style = getComputedStyle(fromTD, rootWindow);\n\n    if (parseInt(style.borderTopWidth, 10) > 0) {\n      top += 1;\n      height = height > 0 ? height - 1 : 0;\n    }\n    if (parseInt(style[isRtl ? 'borderRightWidth' : 'borderLeftWidth'], 10) > 0) {\n      inlineStartPos += 1;\n      width = width > 0 ? width - 1 : 0;\n    }\n\n    const inlinePosProperty = isRtl ? 'right' : 'left';\n\n    this.topStyle.top = `${top}px`;\n    this.topStyle[inlinePosProperty] = `${inlineStartPos}px`;\n    this.topStyle.width = `${width}px`;\n    this.topStyle.display = 'block';\n\n    this.startStyle.top = `${top}px`;\n    this.startStyle[inlinePosProperty] = `${inlineStartPos}px`;\n    this.startStyle.height = `${height}px`;\n    this.startStyle.display = 'block';\n\n    const delta = Math.floor(this.settings.border.width / 2);\n\n    this.bottomStyle.top = `${top + height - delta}px`;\n    this.bottomStyle[inlinePosProperty] = `${inlineStartPos}px`;\n    this.bottomStyle.width = `${width}px`;\n    this.bottomStyle.display = 'block';\n\n    this.endStyle.top = `${top}px`;\n    this.endStyle[inlinePosProperty] = `${inlineStartPos + width - delta}px`;\n    this.endStyle.height = `${height + 1}px`;\n    this.endStyle.display = 'block';\n\n    let cornerVisibleSetting = this.settings.border.cornerVisible;\n\n    cornerVisibleSetting = typeof cornerVisibleSetting === 'function' ?\n      cornerVisibleSetting(this.settings.layerLevel) : cornerVisibleSetting;\n\n    const hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn);\n    let [checkRow, checkCol] = [toRow, toColumn];\n\n    if (hookResult && Array.isArray(hookResult)) {\n      [,, checkRow, checkCol] = hookResult;\n    }\n\n    if (isMobileBrowser() || !cornerVisibleSetting || this.isPartRange(checkRow, checkCol)) {\n      this.cornerStyle.display = 'none';\n\n    } else {\n      this.cornerStyle.top = `${top + height + this.cornerCenterPointOffset - 1}px`;\n      this.cornerStyle[inlinePosProperty] = `${inlineStartPos + width + this.cornerCenterPointOffset - 1}px`;\n      this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth;\n      this.cornerStyle.width = this.cornerDefaultStyle.width;\n\n      // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars.\n      this.cornerStyle.display = 'none';\n\n      let trimmingContainer = getTrimmingContainer(wtTable.TABLE);\n      const trimToWindow = trimmingContainer === rootWindow;\n\n      if (trimToWindow) {\n        trimmingContainer = rootDocument.documentElement;\n      }\n\n      const cornerHalfWidth = parseInt(this.cornerDefaultStyle.width, 10) / 2;\n      const cornerHalfHeight = parseInt(this.cornerDefaultStyle.height, 10) / 2;\n\n      if (toColumn === this.wot.getSetting('totalColumns') - 1) {\n        const toTdOffsetLeft = trimToWindow ? toTD.getBoundingClientRect().left : toTD.offsetLeft;\n        let cornerOverlappingContainer = false;\n        let cornerEdge = 0;\n\n        if (isRtl) {\n          cornerEdge = toTdOffsetLeft - (parseInt(this.cornerDefaultStyle.width, 10) / 2);\n          cornerOverlappingContainer = cornerEdge < 0;\n\n        } else {\n          cornerEdge = toTdOffsetLeft + outerWidth(toTD) + (parseInt(this.cornerDefaultStyle.width, 10) / 2);\n          cornerOverlappingContainer = cornerEdge >= innerWidth(trimmingContainer);\n        }\n\n        if (cornerOverlappingContainer) {\n          this.cornerStyle[inlinePosProperty] = `${Math\n            .floor(inlineStartPos + width + this.cornerCenterPointOffset - cornerHalfWidth)}px`;\n          this.cornerStyle[isRtl ? 'borderLeftWidth' : 'borderRightWidth'] = 0;\n        }\n      }\n\n      if (toRow === this.wot.getSetting('totalRows') - 1) {\n        const toTdOffsetTop = trimToWindow ? toTD.getBoundingClientRect().top : toTD.offsetTop;\n        const cornerBottomEdge = toTdOffsetTop + outerHeight(toTD) + (parseInt(this.cornerDefaultStyle.height, 10) / 2);\n        const cornerOverlappingContainer = cornerBottomEdge >= innerHeight(trimmingContainer);\n\n        if (cornerOverlappingContainer) {\n          this.cornerStyle.top = `${Math.floor(top + height + this.cornerCenterPointOffset - cornerHalfHeight)}px`;\n          this.cornerStyle.borderBottomWidth = 0;\n        }\n      }\n\n      this.cornerStyle.display = 'block';\n    }\n\n    if (isMobileBrowser() && this.instance.getSetting('isDataViewInstance')) {\n      this.updateMultipleSelectionHandlesPosition(toRow, toColumn, top, inlineStartPos, width, height);\n    }\n  }\n\n  /**\n   * Check whether an entire column of cells is selected.\n   *\n   * @private\n   * @param {number} startRowIndex Start row index.\n   * @param {number} endRowIndex End row index.\n   * @returns {boolean}\n   */\n  isEntireColumnSelected(startRowIndex, endRowIndex) {\n    return startRowIndex === this.wot.wtTable.getFirstRenderedRow() &&\n      endRowIndex === this.wot.wtTable.getLastRenderedRow();\n  }\n\n  /**\n   * Check whether an entire row of cells is selected.\n   *\n   * @private\n   * @param {number} startColumnIndex Start column index.\n   * @param {number} endColumnIndex End column index.\n   * @returns {boolean}\n   */\n  isEntireRowSelected(startColumnIndex, endColumnIndex) {\n    return startColumnIndex === this.wot.wtTable.getFirstRenderedColumn() &&\n      endColumnIndex === this.wot.wtTable.getLastRenderedColumn();\n  }\n\n  /**\n   * Get left/top index and width/height depending on the `direction` provided.\n   *\n   * @private\n   * @param {string} direction `rows` or `columns`, defines if an entire column or row is selected.\n   * @param {number} fromIndex Start index of the selection.\n   * @param {number} toIndex End index of the selection.\n   * @param {number} headerIndex The header index as negative value.\n   * @param {number} containerOffset Offset of the container.\n   * @returns {Array|boolean} Returns an array of [headerElement, left, width] or [headerElement, top, height], depending on `direction` (`false` in case of an error getting the headers).\n   */\n  getDimensionsFromHeader(direction, fromIndex, toIndex, headerIndex, containerOffset) {\n    const { wtTable } = this.wot;\n    const rootHotElement = wtTable.wtRootElement.parentNode;\n    let getHeaderFn = null;\n    let dimensionFn = null;\n    let entireSelectionClassname = null;\n    let index = null;\n    let dimension = null;\n    let dimensionProperty = null;\n    let startHeader = null;\n    let endHeader = null;\n\n    switch (direction) {\n      case 'rows':\n        getHeaderFn = (...args) => wtTable.getRowHeader(...args);\n        dimensionFn = (...args) => outerHeight(...args);\n        entireSelectionClassname = 'ht__selection--rows';\n        dimensionProperty = 'top';\n\n        break;\n\n      case 'columns':\n        getHeaderFn = (...args) => wtTable.getColumnHeader(...args);\n        dimensionFn = (...args) => outerWidth(...args);\n        entireSelectionClassname = 'ht__selection--columns';\n        dimensionProperty = 'left';\n        break;\n      default:\n    }\n\n    if (rootHotElement.classList.contains(entireSelectionClassname)) {\n      const columnHeaderLevelCount = this.wot.getSetting('columnHeaders').length;\n\n      startHeader = getHeaderFn(fromIndex, columnHeaderLevelCount - headerIndex);\n      endHeader = getHeaderFn(toIndex, columnHeaderLevelCount - headerIndex);\n\n      if (!startHeader || !endHeader) {\n        return false;\n      }\n\n      const startHeaderOffset = offset(startHeader);\n      const endOffset = offset(endHeader);\n\n      if (startHeader && endHeader) {\n        index = startHeaderOffset[dimensionProperty] - containerOffset[dimensionProperty] - 1;\n        dimension = endOffset[dimensionProperty] + dimensionFn(endHeader) - startHeaderOffset[dimensionProperty];\n      }\n\n      return [startHeader, index, dimension];\n    }\n\n    return false;\n  }\n\n  /**\n   * Change border style.\n   *\n   * @private\n   * @param {string} borderElement Coordinate where add/remove border: top, bottom, start, end.\n   * @param {object} border The border object descriptor.\n   */\n  changeBorderStyle(borderElement, border) {\n    const style = this[borderElement].style;\n    const borderStyle = border[borderElement];\n\n    if (!borderStyle || borderStyle.hide) {\n      addClass(this[borderElement], 'hidden');\n\n    } else {\n      if (hasClass(this[borderElement], 'hidden')) {\n        removeClass(this[borderElement], 'hidden');\n      }\n\n      style.backgroundColor = borderStyle.color;\n\n      if (borderElement === 'top' || borderElement === 'bottom') {\n        style.height = `${borderStyle.width}px`;\n      }\n\n      if (borderElement === 'start' || borderElement === 'end') {\n        style.width = `${borderStyle.width}px`;\n      }\n    }\n  }\n\n  /**\n   * Change border style to default.\n   *\n   * @private\n   * @param {string} position The position type (\"top\", \"bottom\", \"start\", \"end\") to change.\n   */\n  changeBorderToDefaultStyle(position) {\n    const defaultBorder = {\n      width: 1,\n      color: '#000',\n    };\n    const style = this[position].style;\n\n    style.backgroundColor = defaultBorder.color;\n    style.width = `${defaultBorder.width}px`;\n    style.height = `${defaultBorder.width}px`;\n  }\n\n  /**\n   * Toggle class 'hidden' to element.\n   *\n   * @private\n   * @param {string} borderElement Coordinate where add/remove border: top, bottom, start, end.\n   * @param {boolean} [remove] Defines type of the action to perform.\n   */\n  toggleHiddenClass(borderElement, remove) {\n    this.changeBorderToDefaultStyle(borderElement);\n\n    if (remove) {\n      addClass(this[borderElement], 'hidden');\n    } else {\n      removeClass(this[borderElement], 'hidden');\n    }\n  }\n\n  /**\n   * Hide border.\n   */\n  disappear() {\n    this.topStyle.display = 'none';\n    this.bottomStyle.display = 'none';\n    this.startStyle.display = 'none';\n    this.endStyle.display = 'none';\n    this.cornerStyle.display = 'none';\n\n    if (isMobileBrowser() && this.instance.getSetting('isDataViewInstance')) {\n      this.selectionHandles.styles.top.display = 'none';\n      this.selectionHandles.styles.topHitArea.display = 'none';\n      this.selectionHandles.styles.bottom.display = 'none';\n      this.selectionHandles.styles.bottomHitArea.display = 'none';\n    }\n  }\n\n  /**\n   * Cleans up all the DOM state related to a Border instance. Call this prior to deleting a Border instance.\n   */\n  destroy() {\n    this.eventManager.destroyWithOwnEventsOnly();\n    this.main.parentNode.removeChild(this.main);\n  }\n}\n\nexport default Border;\n","import {\n  outerHeight,\n  outerWidth,\n  setOverlayPosition,\n  resetCssTransform,\n} from '../../../../helpers/dom/element';\nimport TopInlineStartCornerOverlayTable from '../table/topInlineStartCorner';\nimport { Overlay } from './_base';\nimport {\n  CLONE_TOP_INLINE_START_CORNER,\n} from './constants';\n\n/**\n * @class TopInlineStartCornerOverlay\n */\nexport class TopInlineStartCornerOverlay extends Overlay {\n  /**\n   * The instance of the Top overlay.\n   *\n   * @type {TopOverlay}\n   */\n  topOverlay;\n  /**\n   * The instance of the InlineStart overlay.\n   *\n   * @type {InlineStartOverlay}\n   */\n  inlineStartOverlay;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   * @param {TopOverlay} topOverlay The instance of the Top overlay.\n   * @param {InlineStartOverlay} inlineStartOverlay The instance of the InlineStart overlay.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings, topOverlay, inlineStartOverlay) {\n    super(wotInstance, facadeGetter, CLONE_TOP_INLINE_START_CORNER, wtSettings, domBindings);\n    this.topOverlay = topOverlay;\n    this.inlineStartOverlay = inlineStartOverlay;\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {TopInlineStartCornerOverlayTable}\n   */\n  createTable(...args) {\n    return new TopInlineStartCornerOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderTopOverlay')\n      && this.wtSettings.getSetting('shouldRenderInlineStartOverlay');\n  }\n\n  /**\n   * Updates the corner overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    this.updateTrimmingContainer();\n\n    if (!this.wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n\n    if (this.trimmingContainer === this.domBindings.rootWindow) {\n      const left = this.inlineStartOverlay.getOverlayOffset() * (this.isRtl() ? -1 : 1);\n      const top = this.topOverlay.getOverlayOffset();\n\n      setOverlayPosition(overlayRoot, `${left}px`, `${top}px`);\n    } else {\n      resetCssTransform(overlayRoot);\n    }\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n    const tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRoot.style.height = `${tableHeight}px`;\n    overlayRoot.style.width = `${tableWidth}px`;\n\n    return false;\n  }\n}\n","import Table from '../table';\nimport stickyRowsTop from './mixin/stickyRowsTop';\nimport stickyColumnsStart from './mixin/stickyColumnsStart';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_TOP_INLINE_START_CORNER } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to topInlineStartCornerOverlay\n * (in RTL mode the overlay sits on the right of the screen), implemented through mixins.\n *\n * @mixes stickyRowsTop\n * @mixes stickyColumnsStart\n */\nclass TopInlineStartCornerOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_TOP_INLINE_START_CORNER);\n  }\n}\n\nmixin(TopInlineStartCornerOverlayTable, stickyRowsTop);\nmixin(TopInlineStartCornerOverlayTable, stickyColumnsStart);\n\nexport default TopInlineStartCornerOverlayTable;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'stickyRowsTop';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the top rows in the vertical axis.\n *\n * @type {object}\n */\nconst stickyRowsTop = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedRow() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n\n    if (totalRows === 0) {\n      return -1;\n    }\n\n    return 0;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedRow() {\n    return this.getRenderedRowsCount() - 1;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedRowsCount() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n\n    return Math.min(this.wtSettings.getSetting('fixedRowsTop'), totalRows);\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleRowsCount() {\n    return this.getRenderedRowsCount();\n  },\n\n  /**\n   * Get the number of rendered column headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getColumnHeadersCount() {\n    return this.dataAccessObject.columnHeaders.length;\n  }\n};\n\ndefineGetter(stickyRowsTop, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default stickyRowsTop;\n","import {\n  addClass,\n  getMaximumScrollTop,\n  getScrollbarWidth,\n  getScrollTop,\n  getWindowScrollLeft,\n  hasClass,\n  outerHeight,\n  removeClass,\n  setOverlayPosition,\n  resetCssTransform,\n} from '../../../../helpers/dom/element';\nimport TopOverlayTable from './../table/top';\nimport { Overlay } from './_base';\nimport { CORNER_DEFAULT_STYLE } from '../selection';\nimport {\n  CLONE_TOP,\n} from './constants';\n\n/**\n * @class TopOverlay\n */\nexport class TopOverlay extends Overlay {\n  /**\n   * Cached value which holds the previous value of the `fixedRowsTop` option.\n   * It is used as a comparison value that can be used to detect changes in this value.\n   *\n   * @type {number}\n   */\n  cachedFixedRowsTop = -1;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings) {\n    super(wotInstance, facadeGetter, CLONE_TOP, wtSettings, domBindings);\n    this.cachedFixedRowsTop = this.wtSettings.getSetting('fixedRowsTop');\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {TopOverlayTable}\n   */\n  createTable(...args) {\n    return new TopOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderTopOverlay');\n  }\n\n  /**\n   * Updates the top overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    if (!this.needFullRender || !this.shouldBeRendered() || !this.wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayPosition = 0;\n    let skipInnerBorderAdjusting = false;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      const { wtTable } = this.wot;\n      const hiderRect = wtTable.hider.getBoundingClientRect();\n      const bottom = Math.ceil(hiderRect.bottom);\n      const rootHeight = overlayRoot.offsetHeight;\n\n      // This checks if the overlay is going to an infinite loop caused by added (or removed)\n      // `innerBorderTop` class name. Toggling the class name shifts the viewport by 1px and\n      // triggers the `scroll` event. It causes the table to render. The new render cycle takes into,\n      // account the shift and toggles the class name again. This causes the next loops. This\n      // happens only on Chrome (#7256).\n      //\n      // When we detect that the table bottom position is the same as the overlay bottom,\n      // do not toggle the class name.\n      //\n      // This workaround will be able to be cleared after merging the SVG borders, which introduces\n      // frozen lines (no more `innerBorderTop` workaround).\n      skipInnerBorderAdjusting = bottom === rootHeight;\n      overlayPosition = this.getOverlayOffset();\n\n      setOverlayPosition(overlayRoot, '0px', `${overlayPosition}px`);\n\n    } else {\n      overlayPosition = this.getScrollPosition();\n      resetCssTransform(overlayRoot);\n    }\n\n    const positionChanged = this.adjustHeaderBordersPosition(overlayPosition, skipInnerBorderAdjusting);\n\n    this.adjustElementsSize();\n\n    return positionChanged;\n  }\n\n  /**\n   * Sets the main overlay's vertical scroll position.\n   *\n   * @param {number} pos The scroll position.\n   * @returns {boolean}\n   */\n  setScrollPosition(pos) {\n    const rootWindow = this.domBindings.rootWindow;\n    let result = false;\n\n    if (this.mainTableScrollableElement === rootWindow && rootWindow.scrollY !== pos) {\n      rootWindow.scrollTo(getWindowScrollLeft(rootWindow), pos);\n      result = true;\n\n    } else if (this.mainTableScrollableElement.scrollTop !== pos) {\n      this.mainTableScrollableElement.scrollTop = pos;\n      result = true;\n    }\n\n    return result;\n  }\n\n  /**\n   * Triggers onScroll hook callback.\n   */\n  onScroll() {\n    this.wtSettings.getSetting('onScrollHorizontally');\n  }\n\n  /**\n   * Calculates total sum cells height.\n   *\n   * @param {number} from Row index which calculates started from.\n   * @param {number} to Row index where calculation is finished.\n   * @returns {number} Height sum.\n   */\n  sumCellSizes(from, to) {\n    const defaultRowHeight = this.wtSettings.getSetting('defaultRowHeight');\n    let row = from;\n    let sum = 0;\n\n    while (row < to) {\n      const height = this.wot.wtTable.getRowHeight(row);\n\n      sum += height === undefined ? defaultRowHeight : height;\n      row += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * Adjust overlay root element, children and master table element sizes (width, height).\n   */\n  adjustElementsSize() {\n    this.updateTrimmingContainer();\n\n    if (this.needFullRender) {\n      this.adjustRootElementSize();\n      this.adjustRootChildrenSize();\n    }\n  }\n\n  /**\n   * Adjust overlay root element size (width and height).\n   */\n  adjustRootElementSize() {\n    const { wtTable } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const scrollbarWidth = getScrollbarWidth(rootDocument);\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const overlayRootStyle = overlayRoot.style;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {\n      let width = this.wot.wtViewport.getWorkspaceWidth();\n\n      if (this.wot.wtOverlays.hasScrollbarRight) {\n        width -= scrollbarWidth;\n      }\n\n      width = Math.min(width, wtTable.wtRootElement.scrollWidth);\n      overlayRootStyle.width = `${width}px`;\n\n    } else {\n      overlayRootStyle.width = '';\n    }\n\n    this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRootStyle.height = `${tableHeight}px`;\n  }\n\n  /**\n   * Adjust overlay root childs size.\n   */\n  adjustRootChildrenSize() {\n    const { holder } = this.clone.wtTable;\n    const selectionCornerOffset = this.wot.selectionManager\n      .getFocusSelection() ? parseInt(CORNER_DEFAULT_STYLE.height, 10) / 2 : 0;\n\n    this.clone.wtTable.hider.style.width = this.hider.style.width;\n    holder.style.width = holder.parentNode.style.width;\n    // Add selection corner protruding part to the holder total height to make sure that\n    // borders' corner won't be cut after vertical scroll (#6937).\n    holder.style.height = `${parseInt(holder.parentNode.style.height, 10) + selectionCornerOffset}px`;\n  }\n\n  /**\n   * Adjust the overlay dimensions and position.\n   */\n  applyToDOM() {\n    const total = this.wtSettings.getSetting('totalRows');\n\n    if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n      this.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n    } else if (total === 0) {\n      // can happen if there are 0 rows\n      this.spreader.style.top = '0';\n\n    } else {\n      throw new Error('Incorrect value of the rowsRenderCalculator');\n    }\n    this.spreader.style.bottom = '';\n\n    if (this.needFullRender) {\n      this.syncOverlayOffset();\n    }\n  }\n\n  /**\n   * Synchronize calculated left position to an element.\n   */\n  syncOverlayOffset() {\n    const styleProperty = this.isRtl() ? 'right' : 'left';\n    const { spreader } = this.clone.wtTable;\n\n    if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n      spreader.style[styleProperty] = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n    } else {\n      spreader.style[styleProperty] = '';\n    }\n  }\n\n  /**\n   * Scrolls vertically to a row.\n   *\n   * @param {number} sourceRow Row index which you want to scroll to.\n   * @param {boolean} [bottomEdge] If `true`, scrolls according to the bottom edge (top edge is by default).\n   * @returns {boolean}\n   */\n  scrollTo(sourceRow, bottomEdge) {\n    const { wot, wtSettings } = this;\n    const sourceInstance = wot.cloneSource ? wot.cloneSource : wot;\n    const mainHolder = sourceInstance.wtTable.holder;\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n    const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n    const columnHeaderBorderCompensation = (\n      fixedRowsTop === 0 &&\n      columnHeaders.length > 0 &&\n      !hasClass(mainHolder.parentNode, 'innerBorderTop')\n    ) ? 1 : 0;\n    let newY = this.getTableParentOffset();\n    let scrollbarCompensation = 0;\n\n    if (bottomEdge) {\n      const rowHeight = this.wot.wtTable.getRowHeight(sourceRow);\n      const viewportHeight = this.wot.wtViewport.getViewportHeight();\n\n      if (rowHeight > viewportHeight) {\n        bottomEdge = false;\n      }\n    }\n\n    if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n      scrollbarCompensation = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    if (bottomEdge) {\n      const fixedRowsBottom = wtSettings.getSetting('fixedRowsBottom');\n      const totalRows = wtSettings.getSetting('totalRows');\n\n      newY += this.sumCellSizes(0, sourceRow + 1);\n      newY -= wot.wtViewport.getViewportHeight() - this.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n      // Fix 1 pixel offset when cell is selected\n      newY += 1;\n      // Compensate for the bottom header border if scrolled from the absolute top.\n      newY += columnHeaderBorderCompensation;\n\n    } else {\n      newY += this.sumCellSizes(wtSettings.getSetting('fixedRowsTop'), sourceRow);\n    }\n\n    newY += scrollbarCompensation;\n\n    // If the table is scrolled all the way up when starting the scroll and going to be scrolled to the bottom,\n    // we need to compensate for the potential header bottom border height.\n    if (\n      getMaximumScrollTop(this.mainTableScrollableElement) === newY - columnHeaderBorderCompensation &&\n      columnHeaderBorderCompensation > 0\n    ) {\n      this.wot.wtOverlays.expandHiderVerticallyBy(columnHeaderBorderCompensation);\n    }\n\n    return this.setScrollPosition(newY);\n  }\n\n  /**\n   * Gets table parent top position.\n   *\n   * @returns {number}\n   */\n  getTableParentOffset() {\n    if (this.mainTableScrollableElement === this.domBindings.rootWindow) {\n      return this.wot.wtTable.holderOffset.top;\n    }\n\n    return 0;\n  }\n\n  /**\n   * Gets the main overlay's vertical scroll position.\n   *\n   * @returns {number} Main table's vertical scroll position.\n   */\n  getScrollPosition() {\n    return getScrollTop(this.mainTableScrollableElement, this.domBindings.rootWindow);\n  }\n\n  /**\n   * Gets the main overlay's vertical overlay offset.\n   *\n   * @returns {number} Main table's vertical overlay offset.\n   */\n  getOverlayOffset() {\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayOffset = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      const rootHeight = this.wot.wtTable.getTotalHeight();\n      const overlayRootHeight = this.clone.wtTable.getTotalHeight();\n      const maxOffset = rootHeight - overlayRootHeight;\n\n      overlayOffset = Math.max(this.getScrollPosition() - this.getTableParentOffset(), 0);\n\n      if (overlayOffset > maxOffset) {\n        overlayOffset = 0;\n      }\n    }\n\n    return overlayOffset;\n  }\n\n  /**\n   * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n   *\n   * @param {number} position Header Y position if trimming container is window or scroll top if not.\n   * @param {boolean} [skipInnerBorderAdjusting=false] If `true` the inner border adjusting will be skipped.\n   * @returns {boolean}\n   */\n  adjustHeaderBordersPosition(position, skipInnerBorderAdjusting = false) {\n    const { wtSettings } = this;\n    const masterParent = this.wot.wtTable.holder.parentNode;\n    const totalColumns = wtSettings.getSetting('totalColumns');\n    const preventHorizontalOverflow = wtSettings.getSetting('preventOverflow') === 'horizontal';\n\n    if (totalColumns) {\n      removeClass(masterParent, 'emptyColumns');\n    } else {\n      addClass(masterParent, 'emptyColumns');\n    }\n\n    let positionChanged = false;\n\n    if (!skipInnerBorderAdjusting && !preventHorizontalOverflow) {\n      const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n      const areFixedRowsTopChanged = this.cachedFixedRowsTop !== fixedRowsTop;\n      const columnHeaders = wtSettings.getSetting('columnHeaders');\n\n      if ((areFixedRowsTopChanged || fixedRowsTop === 0) && columnHeaders.length > 0) {\n        const previousState = hasClass(masterParent, 'innerBorderTop');\n\n        this.cachedFixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n\n        if (position || wtSettings.getSetting('totalRows') === 0) {\n          addClass(masterParent, 'innerBorderTop');\n          positionChanged = !previousState;\n        } else {\n          removeClass(masterParent, 'innerBorderTop');\n          positionChanged = previousState;\n        }\n      }\n    }\n\n    return positionChanged;\n  }\n}\n","import Table from '../table';\nimport stickyRowsTop from './mixin/stickyRowsTop';\nimport calculatedColumns from './mixin/calculatedColumns';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_TOP } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to TopOverlay, implemented through mixins.\n *\n * @mixes stickyRowsTop\n * @mixes calculatedColumns\n */\nclass TopOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_TOP);\n  }\n}\n\nmixin(TopOverlayTable, stickyRowsTop);\nmixin(TopOverlayTable, calculatedColumns);\n\nexport default TopOverlayTable;\n","import { fastInnerText } from '../../../helpers/dom/element';\nimport { objectEach } from '../../../helpers/object';\n/**\n * @todo Describe options.\n * @typedef SettingsPure\n *\n * @property {Option} facade @todo desc.\n * @property {Option} ariaTags Option `ariaTags`.\n * @property {Option} cellRenderer Option `cellRenderer`.\n * @property {Option} columnHeaders Option `columnHeaders`.\n * @property {Option} columnWidth Option `columnWidth`.\n * @property {Option} currentRowClassName Option `currentRowClassName`.\n * @property {Option} data Option `data`.\n * @property {Option} defaultColumnWidth Option `defaultColumnWidth`.\n * @property {Option} defaultRowHeight Option `defaultRowHeight`.\n * @property {Option} externalRowCalculator Option `externalRowCalculator`.\n * @property {Option} fixedColumnsStart Option `fixedColumnsStart`.\n * @property {Option} fixedRowsBottom Option `fixedRowsBottom`.\n * @property {Option} fixedRowsTop Option `fixedRowsTop`.\n * @property {Option} freezeOverlays Option `freezeOverlays`.\n * @property {Option} groups Option `groups`.\n * @property {Option} hideBorderOnMouseDownOver Option `hideBorderOnMouseDownOver`.\n * @property {Option} isRtl Option `isRtl`.\n * @property {Option} isDataViewInstance Option `isDataViewInstance`.\n * @property {Option} minSpareRows Option `minSpareRows`.\n * @property {Option} onBeforeHighlightingColumnHeader Option `onBeforeHighlightingColumnHeader`.\n * @property {Option} onBeforeHighlightingRowHeader Option `onBeforeHighlightingRowHeader`.\n * @property {Option} onBeforeRemoveCellClassNames Option `onBeforeRemoveCellClassNames`.\n * @property {Option} onBeforeStretchingColumnWidth Option `onBeforeStretchingColumnWidth`.\n * @property {Option} preventOverflow Option `preventOverflow`.\n * @property {Option} preventWheel Option `preventWheel`.\n * @property {Option} renderAllColumns Option `renderAllColumns`.\n * @property {Option} renderAllRows Option `renderAllRows`.\n * @property {Option} rowHeaders Option `rowHeaders`.\n * @property {Option} rowHeightOption `rowHeight`.\n * @property {Option} rowHeightByOverlayName Option `rowHeightByOverlayName`.\n * @property {Option} shouldRenderBottomOverlay Option `shouldRenderBottomOverlay`.\n * @property {Option} shouldRenderInlineStartOverlay Option `shouldRenderInlineStartOverlay`.\n * @property {Option} shouldRenderTopOverlay Option `shouldRenderTopOverlay`.\n * @property {Option} stretchH Option `stretchH`.\n * @property {Option} table Option `table`.\n * @property {Option} totalColumns Option `totalColumns`.\n * @property {Option} totalRows Option `totalRows`.\n * @property {?Option} beforeDraw Option `beforeDraw`.\n * @property {?Option} columnHeaderHeight Option `columnHeaderHeight`.\n * @property {?Option} currentColumnClassName Option `currentColumnClassName`.\n * @property {?Option} headerClassName Option `headerClassName`.\n * @property {?Option} onAfterDrawSelection Option `onAfterDrawSelection`.\n * @property {?Option} onAfterMomentumScroll Option `onAfterMomentumScroll`.\n * @property {?Option} onBeforeDrawBorders Option `onBeforeDrawBorders`.\n * @property {?Option} onBeforeTouchScroll Option `onBeforeTouchScroll`.\n * @property {?Option} onCellContextMenu Option `onCellContextMenu`.\n * @property {?Option} onCellCornerDblClick Option `onCellCornerDblClick`.\n * @property {?Option} onCellCornerMouseDown Option `onCellCornerMouseDown`.\n * @property {?Option} onCellDblClick Option `onCellDblClick`.\n * @property {?Option} onCellMouseDown Option `onCellMouseDown`.\n * @property {?Option} onCellMouseOut Option `onCellMouseOut`.\n * @property {?Option} onCellMouseOver Option `onCellMouseOver`.\n * @property {?Option} onCellMouseUp Option `onCellMouseUp`.\n * @property {?Option} onDraw Option `onDraw`.\n * @property {?Option} onModifyGetCellCoords Option `onModifyGetCellCoords`.\n * @property {?Option} onModifyRowHeaderWidth Option `onModifyRowHeaderWidth`.\n * @property {?Option} onBeforeViewportScrollHorizontally Option `onBeforeViewportScrollHorizontally`.\n * @property {?Option} onBeforeViewportScrollVertically Option `onBeforeViewportScrollVertically`.\n * @property {?Option} onScrollHorizontally Option `onScrollHorizontally`.\n * @property {?Option} onScrollVertically Option `onScrollVertically`.\n * @property {?Option} onWindowResize Option `onWindowResize`.\n * @property {?Option} rowHeaderWidth Option `rowHeaderWidth`.\n * @property {?Option} selections Option `selections`.\n * @property {?Option} viewportColumnCalculatorOverride Option `viewportColumnCalculatorOverride`.\n * @property {?Option} viewportRowCalculatorOverride Option `viewportRowCalculatorOverride`.\n */\n\n/**\n * @template TValue.\n * @typedef { TValue | Array.<TValue> | (function(...*): TValue) } Option\n */\n\n/**\n * @class Settings\n */\nexport default class Settings {\n\n  /**\n   * Reference to settings.\n   *\n   * @protected\n   * @type {SettingsPure}\n   */\n  settings = {};\n\n  /**\n   * The defaults values of settings.\n   * Void 0 means it is required, null means it can be empty.\n   *\n   * @public\n   * @type {Readonly<SettingsPure>}\n   */\n  defaults = Object.freeze(this.getDefaults());\n\n  /**\n   * @param {SettingsPure} settings The user defined settings.\n   */\n  constructor(settings) {\n    objectEach(this.defaults, (value, key) => {\n      if (settings[key] !== undefined) {\n        this.settings[key] = settings[key];\n\n      } else if (value === undefined) {\n        throw new Error(`A required setting \"${key}\" was not provided`);\n\n      } else {\n        this.settings[key] = value;\n      }\n    });\n  }\n\n  /**\n   * Generate defaults for a settings.\n   * Void 0 means it is required, null means it can be empty.\n   *\n   * @private\n   * @returns {SettingsPure}\n   */\n  getDefaults() {\n    return {\n      facade: undefined,\n      table: undefined,\n\n      // Determines whether the Walkontable instance is used as dataset viewer. When its instance is used as\n      // a context menu, autocomplete list, etc, the returned value is `false`.\n      isDataViewInstance: true,\n      // presentation mode\n      externalRowCalculator: false,\n      stretchH: 'none', // values: all, last, none\n      currentRowClassName: null,\n      currentColumnClassName: null,\n      preventOverflow() {\n        return false;\n      },\n      preventWheel: false,\n\n      // data source\n      data: undefined,\n      freezeOverlays: false,\n      // Number of renderable columns for the left overlay.\n      fixedColumnsStart: 0,\n      // Number of renderable rows for the top overlay.\n      fixedRowsTop: 0,\n      // Number of renderable rows for the bottom overlay.\n      fixedRowsBottom: 0,\n      // Enable the inline start overlay when conditions are met (left for LTR and right for RTL document mode).\n      shouldRenderInlineStartOverlay: () => {\n        return this.getSetting('fixedColumnsStart') > 0 || this.getSetting('rowHeaders').length > 0;\n      },\n      // Enable the top overlay when conditions are met.\n      shouldRenderTopOverlay: () => {\n        return this.getSetting('fixedRowsTop') > 0 || this.getSetting('columnHeaders').length > 0;\n      },\n      // Enable the bottom overlay when conditions are met.\n      shouldRenderBottomOverlay: () => {\n        return this.getSetting('fixedRowsBottom') > 0;\n      },\n      minSpareRows: 0,\n\n      // this must be array of functions: [function (row, TH) {}]\n      rowHeaders() {\n        return [];\n      },\n\n      // this must be array of functions: [function (column, TH) {}]\n      columnHeaders() {\n        return [];\n      },\n      totalRows: undefined,\n      totalColumns: undefined,\n      cellRenderer: (row, column, TD) => {\n        const cellData = this.getSetting('data', row, column);\n\n        fastInnerText(TD, cellData === undefined || cellData === null ? '' : cellData);\n      },\n\n      // columnWidth: 50,\n      columnWidth() {\n        // return undefined means use default size for the rendered cell content\n      },\n      rowHeight() {\n        // return undefined means use default size for the rendered cell content\n      },\n      rowHeightByOverlayName() {\n        // return undefined means use default size for the rendered cell content\n      },\n      defaultRowHeight: 23,\n      defaultColumnWidth: 50,\n      selections: null,\n      hideBorderOnMouseDownOver: false,\n      viewportRowCalculatorOverride: null,\n      viewportColumnCalculatorOverride: null,\n\n      // callbacks\n      onCellMouseDown: null,\n      onCellContextMenu: null,\n      onCellMouseOver: null,\n      onCellMouseOut: null,\n      onCellMouseUp: null,\n\n      // onCellMouseOut: null,\n      onCellDblClick: null,\n      onCellCornerMouseDown: null,\n      onCellCornerDblClick: null,\n      beforeDraw: null,\n      onDraw: null,\n      onBeforeRemoveCellClassNames: null,\n      onAfterDrawSelection: null,\n      onBeforeDrawBorders: null,\n      // viewport scroll hooks\n      onBeforeViewportScrollHorizontally: column => column,\n      onBeforeViewportScrollVertically: row => row,\n      // native scroll hooks\n      onScrollHorizontally: null,\n      onScrollVertically: null,\n      //\n      onBeforeTouchScroll: null,\n      onAfterMomentumScroll: null,\n      onBeforeStretchingColumnWidth: width => width,\n      onModifyRowHeaderWidth: null,\n      onModifyGetCellCoords: null,\n      onBeforeHighlightingRowHeader: sourceRow => sourceRow,\n      onBeforeHighlightingColumnHeader: sourceCol => sourceCol,\n\n      onWindowResize: null,\n      onContainerElementResize: null,\n\n      renderAllColumns: false,\n      renderAllRows: false,\n      groups: false,\n      rowHeaderWidth: null,\n      columnHeaderHeight: null,\n      headerClassName: null,\n      rtlMode: false,\n      ariaTags: true\n    };\n  }\n\n  /**\n   * Update settings.\n   *\n   * @param {object|string} settings The singular settings to update or if passed as object to merge with.\n   * @param {*} value The value to set if the first argument is passed as string.\n   * @returns {Settings}\n   */\n  update(settings, value) {\n    if (value === undefined) { // settings is object\n      objectEach(settings, (settingValue, key) => {\n        this.settings[key] = settingValue;\n      });\n    } else { // if value is defined then settings is the key\n      this.settings[settings] = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Get setting by name.\n   *\n   * @param {$Keys<SettingsPure>} key The settings key to retrieve.\n   * @param {*} [param1] Additional parameter passed to the options defined as function.\n   * @param {*} [param2] Additional parameter passed to the options defined as function.\n   * @param {*} [param3] Additional parameter passed to the options defined as function.\n   * @param {*} [param4] Additional parameter passed to the options defined as function.\n   * @returns {*}\n   */\n  getSetting(key, param1, param2, param3, param4) {\n    if (typeof this.settings[key] === 'function') {\n      return this.settings[key](param1, param2, param3, param4);\n\n    } else if (param1 !== undefined && Array.isArray(this.settings[key])) {\n      return this.settings[key][param1];\n\n    }\n\n    return this.settings[key];\n  }\n\n  /**\n   * Get a setting value without any evaluation.\n   *\n   * @param {string} key The settings key to retrieve.\n   * @returns {*}\n   */\n  getSettingPure(key) {\n    return this.settings[key];\n  }\n\n  /**\n   * Checks if setting exists.\n   *\n   * @param {boolean} key The settings key to check.\n   * @returns {boolean}\n   */\n  has(key) {\n    return !!this.settings[key];\n  }\n}\n","import {\n  getStyle,\n  getComputedStyle,\n  getTrimmingContainer,\n  isVisible,\n} from './../../../../helpers/dom/element';\nimport Table from '../table';\nimport calculatedRows from './mixin/calculatedRows';\nimport calculatedColumns from './mixin/calculatedColumns';\nimport { mixin } from './../../../../helpers/object';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to the master table (not overlays), implemented through mixins.\n *\n * @mixes calculatedRows\n * @mixes calculatedColumns\n */\nclass MasterTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, 'master');\n  }\n\n  alignOverlaysWithTrimmingContainer() {\n    const trimmingElement = getTrimmingContainer(this.wtRootElement);\n    const { rootWindow } = this.domBindings;\n\n    if (trimmingElement === rootWindow) {\n      const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n      if (!preventOverflow) {\n        this.holder.style.overflow = 'visible';\n        this.wtRootElement.style.overflow = 'visible';\n      }\n    } else {\n      const trimmingElementParent = trimmingElement.parentElement;\n      const trimmingHeight = getStyle(trimmingElement, 'height', rootWindow);\n      const trimmingOverflow = getStyle(trimmingElement, 'overflow', rootWindow);\n      const holderStyle = this.holder.style;\n      const { scrollWidth, scrollHeight } = trimmingElement;\n      let width = trimmingElement.offsetWidth;\n      let height = trimmingElement.offsetHeight;\n      const overflow = ['auto', 'hidden', 'scroll'];\n\n      if (trimmingElementParent && overflow.includes(trimmingOverflow)) {\n        const cloneNode = trimmingElement.cloneNode(false);\n\n        // Before calculating the height of the trimming element, set overflow: auto to hide scrollbars.\n        // An issue occurred on Firefox, where an empty element with overflow: scroll returns an element height higher than 0px\n        // despite an empty content within.\n        cloneNode.style.overflow = 'auto';\n        // Issue #9545 shows problem with calculating height for HOT on Firefox while placing instance in some\n        // flex containers and setting overflow for some `div` section.\n        cloneNode.style.position = 'absolute';\n\n        if (trimmingElement.nextElementSibling) {\n          trimmingElementParent.insertBefore(cloneNode, trimmingElement.nextElementSibling);\n        } else {\n          trimmingElementParent.appendChild(cloneNode);\n        }\n\n        const cloneHeight = parseInt(getComputedStyle(cloneNode, rootWindow).height, 10);\n\n        trimmingElementParent.removeChild(cloneNode);\n\n        if (cloneHeight === 0) {\n          height = 0;\n        }\n      }\n\n      height = Math.min(height, scrollHeight);\n      holderStyle.height = trimmingHeight === 'auto' ? 'auto' : `${height}px`;\n\n      width = Math.min(width, scrollWidth);\n      holderStyle.width = `${width}px`;\n\n      holderStyle.overflow = '';\n      this.hasTableHeight = holderStyle.height === 'auto' ? true : height > 0;\n      this.hasTableWidth = width > 0;\n    }\n\n    this.isTableVisible = isVisible(this.TABLE);\n  }\n\n  markOversizedColumnHeaders() {\n    const { wtSettings } = this;\n    const { wtViewport } = this.dataAccessObject;\n    const overlayName = 'master';\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n    const columnHeadersCount = columnHeaders.length;\n\n    if (columnHeadersCount && !wtViewport.hasOversizedColumnHeadersMarked[overlayName]) {\n      const rowHeaders = wtSettings.getSetting('rowHeaders');\n      const rowHeaderCount = rowHeaders.length;\n      const columnCount = this.getRenderedColumnsCount();\n\n      for (let i = 0; i < columnHeadersCount; i++) {\n        for (let renderedColumnIndex = (-1) * rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) { // eslint-disable-line max-len\n          this.markIfOversizedColumnHeader(renderedColumnIndex);\n        }\n      }\n      wtViewport.hasOversizedColumnHeadersMarked[overlayName] = true;\n    }\n  }\n}\n\nmixin(MasterTable, calculatedRows);\nmixin(MasterTable, calculatedColumns);\n\nexport default MasterTable;\n","import {\n  getScrollbarWidth,\n  getStyle,\n  offset,\n  outerHeight,\n  outerWidth,\n} from '../../../helpers/dom/element';\nimport { objectEach } from '../../../helpers/object';\nimport {\n  FullyVisibleColumnsCalculationType,\n  FullyVisibleRowsCalculationType,\n  PartiallyVisibleColumnsCalculationType,\n  PartiallyVisibleRowsCalculationType,\n  RenderedAllColumnsCalculationType,\n  RenderedAllRowsCalculationType,\n  RenderedColumnsCalculationType,\n  RenderedRowsCalculationType,\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n} from './calculator';\n\n/**\n * @class Viewport\n */\nclass Viewport {\n  /**\n   * @param {ViewportDao} dataAccessObject The Walkontable instance.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {EventManager} eventManager The instance event manager.\n   * @param {Table} wtTable The table.\n   */\n  constructor(dataAccessObject, domBindings, wtSettings, eventManager, wtTable) {\n    this.dataAccessObject = dataAccessObject;\n    // legacy support\n    this.wot = dataAccessObject.wot;\n    this.instance = this.wot;\n    this.domBindings = domBindings;\n    this.wtSettings = wtSettings;\n    this.wtTable = wtTable;\n    this.oversizedRows = [];\n    this.oversizedColumnHeaders = [];\n    this.hasOversizedColumnHeadersMarked = {};\n    this.clientHeight = 0;\n    this.containerWidth = NaN;\n    this.rowHeaderWidth = NaN;\n    this.rowsVisibleCalculator = null;\n    this.columnsVisibleCalculator = null;\n    this.rowsCalculatorTypes = new Map([\n      ['rendered', () => (this.wtSettings.getSetting('renderAllRows') ?\n        new RenderedAllRowsCalculationType() : new RenderedRowsCalculationType())],\n      ['fullyVisible', () => new FullyVisibleRowsCalculationType()],\n      ['partiallyVisible', () => new PartiallyVisibleRowsCalculationType()],\n    ]);\n    this.columnsCalculatorTypes = new Map([\n      ['rendered', () => (this.wtSettings.getSetting('renderAllColumns') ?\n        new RenderedAllColumnsCalculationType() : new RenderedColumnsCalculationType())],\n      ['fullyVisible', () => new FullyVisibleColumnsCalculationType()],\n      ['partiallyVisible', () => new PartiallyVisibleColumnsCalculationType()],\n    ]);\n\n    this.eventManager = eventManager;\n    this.eventManager.addEventListener(this.domBindings.rootWindow, 'resize', () => {\n      this.clientHeight = this.getWorkspaceHeight();\n    });\n  }\n\n  /**\n   * @returns {number}\n   */\n  getWorkspaceHeight() {\n    const currentDocument = this.domBindings.rootDocument;\n    const trimmingContainer = this.dataAccessObject.topOverlayTrimmingContainer;\n    let height = 0;\n\n    if (trimmingContainer === this.domBindings.rootWindow) {\n      height = currentDocument.documentElement.clientHeight;\n\n    } else {\n      const elemHeight = outerHeight(trimmingContainer);\n\n      // returns height without DIV scrollbar\n      height = (elemHeight > 0 && trimmingContainer.clientHeight > 0) ? trimmingContainer.clientHeight : Infinity;\n    }\n\n    return height;\n  }\n\n  getWorkspaceWidth() {\n    const { wtSettings } = this;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const trimmingContainer = this.dataAccessObject.inlineStartOverlayTrimmingContainer;\n    const docOffsetWidth = rootDocument.documentElement.offsetWidth;\n    const totalColumns = wtSettings.getSetting('totalColumns');\n    const preventOverflow = wtSettings.getSetting('preventOverflow');\n    const isRtl = wtSettings.getSetting('rtlMode');\n    const tableRect = this.wtTable.TABLE.getBoundingClientRect();\n    const inlineStart = isRtl ? tableRect.right - docOffsetWidth : tableRect.left;\n    const tableOffset = docOffsetWidth - inlineStart;\n    let width;\n    let overflow;\n\n    if (preventOverflow) {\n      return outerWidth(this.wtTable.wtRootElement);\n    }\n\n    if (wtSettings.getSetting('freezeOverlays')) {\n      width = Math.min(tableOffset, docOffsetWidth);\n    } else {\n      width = Math.min(this.getContainerFillWidth(), tableOffset, docOffsetWidth);\n    }\n\n    if (trimmingContainer === rootWindow && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) {\n      // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window\n      // otherwise continue below, which will allow stretching\n      // this is used in `scroll_window.html`\n      // TODO test me\n      return rootDocument.documentElement.clientWidth;\n    }\n\n    if (trimmingContainer !== rootWindow) {\n      overflow = getStyle(this.dataAccessObject.inlineStartOverlayTrimmingContainer, 'overflow', rootWindow);\n\n      if (overflow === 'scroll' || overflow === 'hidden' || overflow === 'auto') {\n        // this is used in `scroll.html`\n        // TODO test me\n        return Math.max(width, trimmingContainer.clientWidth);\n      }\n    }\n\n    const stretchSetting = wtSettings.getSetting('stretchH');\n\n    if (stretchSetting === 'none' || !stretchSetting) {\n      // if no stretching is used, return the maximum used workspace width\n      return Math.max(width, outerWidth(this.wtTable.TABLE));\n    }\n\n    // if stretching is used, return the actual container width, so the columns can fit inside it\n    return width;\n  }\n\n  /**\n   * Checks if viewport has vertical scroll.\n   *\n   * @returns {boolean}\n   */\n  hasVerticalScroll() {\n    return this.wtTable.hider.offsetHeight > this.getWorkspaceHeight();\n  }\n\n  /**\n   * Checks if viewport has horizontal scroll.\n   *\n   * @returns {boolean}\n   */\n  hasHorizontalScroll() {\n    return this.wtTable.hider.offsetWidth > this.getWorkspaceWidth();\n  }\n\n  /**\n   * @param {number} from The visual column index from the width sum is start calculated.\n   * @param {number} length The length of the column to traverse.\n   * @returns {number}\n   */\n  sumColumnWidths(from, length) {\n    let sum = 0;\n    let column = from;\n\n    while (column < length) {\n      sum += this.wtTable.getColumnWidth(column);\n      column += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getContainerFillWidth() {\n    if (this.containerWidth) {\n      return this.containerWidth;\n    }\n\n    const mainContainer = this.wtTable.holder;\n    const dummyElement = this.domBindings.rootDocument.createElement('div');\n\n    dummyElement.style.width = '100%';\n    dummyElement.style.height = '1px';\n    mainContainer.appendChild(dummyElement);\n\n    const fillWidth = dummyElement.offsetWidth;\n\n    this.containerWidth = fillWidth;\n    mainContainer.removeChild(dummyElement);\n\n    return fillWidth;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getWorkspaceOffset() {\n    return offset(this.wtTable.TABLE);\n  }\n\n  /**\n   * @returns {number}\n   */\n  getColumnHeaderHeight() {\n    const columnHeaders = this.wtSettings.getSetting('columnHeaders');\n\n    if (!columnHeaders.length) {\n      this.columnHeaderHeight = 0;\n    } else if (isNaN(this.columnHeaderHeight)) {\n      this.columnHeaderHeight = outerHeight(this.wtTable.THEAD);\n    }\n\n    return this.columnHeaderHeight;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getViewportHeight() {\n    let containerHeight = this.getWorkspaceHeight();\n\n    if (containerHeight === Infinity) {\n      return containerHeight;\n    }\n\n    const columnHeaderHeight = this.getColumnHeaderHeight();\n\n    if (columnHeaderHeight > 0) {\n      containerHeight -= columnHeaderHeight;\n    }\n\n    return containerHeight;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getRowHeaderWidth() {\n    const rowHeadersWidthSetting = this.wtSettings.getSetting('rowHeaderWidth');\n    const rowHeaders = this.wtSettings.getSetting('rowHeaders');\n\n    if (rowHeadersWidthSetting) {\n      this.rowHeaderWidth = 0;\n\n      for (let i = 0, len = rowHeaders.length; i < len; i++) {\n        this.rowHeaderWidth += rowHeadersWidthSetting[i] || rowHeadersWidthSetting;\n      }\n    }\n\n    if (isNaN(this.rowHeaderWidth)) {\n\n      if (rowHeaders.length) {\n        let TH = this.wtTable.TABLE.querySelector('TH');\n\n        this.rowHeaderWidth = 0;\n\n        for (let i = 0, len = rowHeaders.length; i < len; i++) {\n          if (TH) {\n            this.rowHeaderWidth += outerWidth(TH);\n            TH = TH.nextSibling;\n\n          } else {\n            // yes this is a cheat but it worked like that before, just taking assumption from CSS instead of measuring.\n            // TODO: proper fix\n            this.rowHeaderWidth += 50;\n          }\n        }\n      } else {\n        this.rowHeaderWidth = 0;\n      }\n    }\n\n    this.rowHeaderWidth = this.wtSettings\n      .getSetting('onModifyRowHeaderWidth', this.rowHeaderWidth) || this.rowHeaderWidth;\n\n    return this.rowHeaderWidth;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getViewportWidth() {\n    const containerWidth = this.getWorkspaceWidth();\n\n    if (containerWidth === Infinity) {\n      return containerWidth;\n    }\n\n    const rowHeaderWidth = this.getRowHeaderWidth();\n\n    if (rowHeaderWidth > 0) {\n      return containerWidth - rowHeaderWidth;\n    }\n\n    return containerWidth;\n  }\n\n  /**\n   * Creates rows calculators. The type of the calculations can be chosen from the list:\n   *  - 'rendered' Calculates rows that should be rendered within the current table's viewport;\n   *  - 'fullyVisible' Calculates rows that are fully visible (used mostly for scrolling purposes);\n   *  - 'partiallyVisible' Calculates rows that are partially visible (used mostly for scrolling purposes).\n   *\n   * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.\n   * @returns {ViewportRowsCalculator}\n   */\n  createRowsCalculator(calculatorTypes = ['rendered', 'fullyVisible', 'partiallyVisible']) {\n    const { wtSettings, wtTable } = this;\n\n    let height = this.getViewportHeight();\n    let scrollbarHeight;\n    let fixedRowsHeight;\n\n    this.rowHeaderWidth = NaN;\n\n    let pos = this.dataAccessObject.topScrollPosition - this.dataAccessObject.topParentOffset;\n\n    const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n    const fixedRowsBottom = wtSettings.getSetting('fixedRowsBottom');\n    const totalRows = wtSettings.getSetting('totalRows');\n\n    if (fixedRowsTop && pos >= 0) {\n      fixedRowsHeight = this.dataAccessObject.topOverlay.sumCellSizes(0, fixedRowsTop);\n      pos += fixedRowsHeight;\n      height -= fixedRowsHeight;\n    }\n\n    if (fixedRowsBottom && this.dataAccessObject.bottomOverlay.clone) {\n      fixedRowsHeight = this.dataAccessObject.bottomOverlay.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n\n      height -= fixedRowsHeight;\n    }\n\n    if (wtTable.holder.clientHeight === wtTable.holder.offsetHeight) {\n      scrollbarHeight = 0;\n    } else {\n      scrollbarHeight = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    return new ViewportRowsCalculator({\n      calculationTypes: calculatorTypes.map(type => [type, this.rowsCalculatorTypes.get(type)()]),\n      viewportHeight: height,\n      scrollOffset: pos,\n      totalRows: wtSettings.getSetting('totalRows'),\n      rowHeightFn: sourceRow => wtTable.getRowHeight(sourceRow),\n      overrideFn: wtSettings.getSettingPure('viewportRowCalculatorOverride'),\n      horizontalScrollbarHeight: scrollbarHeight,\n    });\n  }\n\n  /**\n   * Creates columns calculators. The type of the calculations can be chosen from the list:\n   *  - 'rendered' Calculates columns that should be rendered within the current table's viewport;\n   *  - 'fullyVisible' Calculates columns that are fully visible (used mostly for scrolling purposes);\n   *  - 'partiallyVisible' Calculates columns that are partially visible (used mostly for scrolling purposes).\n   *\n   * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.\n   * @returns {ViewportColumnsCalculator}\n   */\n  createColumnsCalculator(calculatorTypes = ['rendered', 'fullyVisible', 'partiallyVisible']) {\n    const { wtSettings, wtTable } = this;\n\n    let width = this.getViewportWidth();\n    let pos = Math.abs(this.dataAccessObject.inlineStartScrollPosition) - this.dataAccessObject.inlineStartParentOffset;\n\n    this.columnHeaderHeight = NaN;\n\n    const fixedColumnsStart = wtSettings.getSetting('fixedColumnsStart');\n\n    if (fixedColumnsStart && pos >= 0) {\n      const fixedColumnsWidth = this.dataAccessObject.inlineStartOverlay.sumCellSizes(0, fixedColumnsStart);\n\n      pos += fixedColumnsWidth;\n      width -= fixedColumnsWidth;\n    }\n    if (wtTable.holder.clientWidth !== wtTable.holder.offsetWidth) {\n      width -= getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    return new ViewportColumnsCalculator({\n      calculationTypes: calculatorTypes.map(type => [type, this.columnsCalculatorTypes.get(type)()]),\n      viewportWidth: width,\n      scrollOffset: pos,\n      totalColumns: wtSettings.getSetting('totalColumns'),\n      columnWidthFn: sourceCol => wtTable.getColumnWidth(sourceCol),\n      overrideFn: wtSettings.getSettingPure('viewportColumnCalculatorOverride'),\n      inlineStartOffset: this.dataAccessObject.inlineStartParentOffset\n    });\n  }\n\n  /**\n   * Creates rowsRenderCalculator and columnsRenderCalculator (before draw, to determine what rows and\n   * cols should be rendered).\n   *\n   * @param {boolean} fastDraw If `true`, will try to avoid full redraw and only update the border positions.\n   *                           If `false` or `undefined`, will perform a full redraw.\n   * @returns {boolean} The fastDraw value, possibly modified.\n   */\n  createCalculators(fastDraw = false) {\n    const { wtSettings } = this;\n    const rowsCalculator = this.createRowsCalculator();\n    const columnsCalculator = this.createColumnsCalculator();\n\n    if (fastDraw && !wtSettings.getSetting('renderAllRows')) {\n      const proposedRowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');\n\n      fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);\n    }\n\n    if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {\n      const proposedColumnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');\n\n      fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);\n    }\n\n    if (!fastDraw) {\n      this.rowsRenderCalculator = rowsCalculator.getResultsFor('rendered');\n      this.columnsRenderCalculator = columnsCalculator.getResultsFor('rendered');\n    }\n\n    this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');\n    this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');\n    this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');\n    this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');\n\n    return fastDraw;\n  }\n\n  /**\n   * Creates rows and columns calculators (after draw, to determine what are\n   * the actually fully visible and partially visible rows and columns).\n   */\n  createVisibleCalculators() {\n    const rowsCalculator = this.createRowsCalculator(['fullyVisible', 'partiallyVisible']);\n    const columnsCalculator = this.createColumnsCalculator(['fullyVisible', 'partiallyVisible']);\n\n    this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');\n    this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');\n    this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');\n    this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');\n  }\n\n  /**\n   * Returns information whether proposedRowsVisibleCalculator viewport\n   * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).\n   *\n   * @param {ViewportRowsCalculator} proposedRowsVisibleCalculator The instance of the viewport calculator to compare with.\n   * @returns {boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).\n   *                    Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed).\n   */\n  areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {\n    if (!this.rowsVisibleCalculator) {\n      return false;\n    }\n\n    let { startRow, endRow } = proposedRowsVisibleCalculator;\n\n    // if there are no fully visible rows at all...\n    if (startRow === null && endRow === null) {\n      if (!proposedRowsVisibleCalculator.isVisibleInTrimmingContainer) {\n        return true;\n      }\n      // ...use partially visible rows calculator to determine what render type is needed\n      startRow = this.rowsPartiallyVisibleCalculator.startRow;\n      endRow = this.rowsPartiallyVisibleCalculator.endRow;\n    }\n\n    const { startRow: renderedStartRow, endRow: renderedEndRow } = this.rowsRenderCalculator;\n\n    if (startRow < renderedStartRow || (startRow === renderedStartRow && startRow > 0)) {\n      return false;\n\n    } else if (endRow > renderedEndRow ||\n              (endRow === renderedEndRow && endRow < this.wtSettings.getSetting('totalRows') - 1)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Returns information whether proposedColumnsVisibleCalculator viewport\n   * is contained inside column rendered in previous draw (cached in columnsRenderCalculator).\n   *\n   * @param {ViewportRowsCalculator} proposedColumnsVisibleCalculator The instance of the viewport calculator to compare with.\n   * @returns {boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).\n   *                    Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed).\n   */\n  areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {\n    if (!this.columnsVisibleCalculator) {\n      return false;\n    }\n\n    let { startColumn, endColumn } = proposedColumnsVisibleCalculator;\n\n    // if there are no fully visible columns at all...\n    if (startColumn === null && endColumn === null) {\n      if (!proposedColumnsVisibleCalculator.isVisibleInTrimmingContainer) {\n        return true;\n      }\n      // ...use partially visible columns calculator to determine what render type is needed\n      startColumn = this.columnsPartiallyVisibleCalculator.startColumn;\n      endColumn = this.columnsPartiallyVisibleCalculator.endColumn;\n    }\n\n    const { startColumn: renderedStartColumn, endColumn: renderedEndColumn } = this.columnsRenderCalculator;\n\n    if (startColumn < renderedStartColumn || (startColumn === renderedStartColumn && startColumn > 0)) {\n      return false;\n\n    } else if (endColumn > renderedEndColumn ||\n              (endColumn === renderedEndColumn && endColumn < this.wtSettings.getSetting('totalColumns') - 1)) {\n\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Resets values in keys of the hasOversizedColumnHeadersMarked object after updateSettings.\n   */\n  resetHasOversizedColumnHeadersMarked() {\n    objectEach(this.hasOversizedColumnHeadersMarked, (value, key, object) => {\n      object[key] = undefined;\n    });\n  }\n}\n\nexport default Viewport;\n","import { isRightClick as isRightClickEvent, isLeftClick as isLeftClickEvent } from './../helpers/dom/event';\n\n/**\n * MouseDown handler.\n *\n * @param {object} options The handler options.\n * @param {boolean} options.isShiftKey The flag which indicates if the shift key is pressed.\n * @param {boolean} options.isLeftClick The flag which indicates if the left mouse button is pressed.\n * @param {boolean} options.isRightClick The flag which indicates if the right mouse button is pressed.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n * @param {Function} options.cellCoordsFactory The function factory for CellCoords objects.\n */\nexport function mouseDown({ isShiftKey, isLeftClick, isRightClick, coords, selection, controller, cellCoordsFactory }) {\n  const currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n  const selectedCorner = selection.isSelectedByCorner();\n  const selectedRow = selection.isSelectedByRowHeader();\n\n  selection.markSource('mouse');\n\n  if (isShiftKey && currentSelection) {\n    if (coords.row >= 0 && coords.col >= 0 && !controller.cell) {\n      selection.setRangeEnd(coords);\n\n    } else if ((selectedCorner || selectedRow) && coords.row >= 0 && coords.col >= 0 && !controller.cell) {\n      selection.setRangeEnd(cellCoordsFactory(coords.row, coords.col));\n\n    } else if (selectedCorner && coords.row < 0 && !controller.column) {\n      selection.setRangeEnd(cellCoordsFactory(currentSelection.to.row, coords.col));\n\n    } else if (selectedRow && coords.col < 0 && !controller.row) {\n      selection.setRangeEnd(cellCoordsFactory(coords.row, currentSelection.to.col));\n\n    } else if (((!selectedCorner && !selectedRow && coords.col < 0) ||\n               (selectedCorner && coords.col < 0)) && !controller.row) {\n      selection.selectRows(Math.max(currentSelection.from.row, 0), coords.row, coords.col);\n\n    } else if (((!selectedCorner && !selectedRow && coords.row < 0) ||\n               (selectedRow && coords.row < 0)) && !controller.column) {\n      selection.selectColumns(Math.max(currentSelection.from.col, 0), coords.col, coords.row);\n    }\n\n  } else {\n    const allowRightClickSelection = !selection.inInSelection(coords);\n    const performSelection = isLeftClick || (isRightClick && allowRightClickSelection);\n\n    // clicked row header and when some column was selected\n    if (coords.row < 0 && coords.col >= 0 && !controller.column) {\n      if (performSelection) {\n        selection.selectColumns(coords.col, coords.col, coords.row);\n      }\n\n    // clicked column header and when some row was selected\n    } else if (coords.col < 0 && coords.row >= 0 && !controller.row) {\n      if (performSelection) {\n        selection.selectRows(coords.row, coords.row, coords.col);\n      }\n\n    } else if (coords.col >= 0 && coords.row >= 0 && !controller.cell) {\n      if (performSelection) {\n        selection.setRangeStart(coords);\n      }\n    } else if (coords.col < 0 && coords.row < 0) {\n      selection.selectAll(true, true, {\n        disableHeadersHighlight: true,\n        focusPosition: { row: 0, col: 0 },\n      });\n    }\n  }\n\n  selection.markEndSource();\n}\n\n/**\n * MouseOver handler.\n *\n * @param {object} options The handler options.\n * @param {boolean} options.isLeftClick Indicates that event was fired using the left mouse button.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n * @param {Function} options.cellCoordsFactory The function factory for CellCoords objects.\n */\nexport function mouseOver({ isLeftClick, coords, selection, controller, cellCoordsFactory }) {\n  if (!isLeftClick) {\n    return;\n  }\n\n  const selectedRow = selection.isSelectedByRowHeader();\n  const selectedColumn = selection.isSelectedByColumnHeader();\n  const countCols = selection.tableProps.countCols();\n  const countRows = selection.tableProps.countRows();\n\n  selection.markSource('mouse');\n\n  if (selectedColumn && !controller.column) {\n    selection.setRangeEnd(cellCoordsFactory(countRows - 1, coords.col));\n\n  } else if (selectedRow && !controller.row) {\n    selection.setRangeEnd(cellCoordsFactory(coords.row, countCols - 1));\n\n  } else if (!controller.cell) {\n    selection.setRangeEnd(coords);\n  }\n\n  selection.markEndSource();\n}\n\nconst handlers = new Map([\n  ['mousedown', mouseDown],\n  ['mouseover', mouseOver],\n  ['touchstart', mouseDown],\n]);\n\n/**\n * Mouse handler for selection functionality.\n *\n * @param {Event} event An native event to handle.\n * @param {object} options The handler options.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n * @param {Function} options.cellCoordsFactory The function factory for CellCoords objects.\n */\nexport function handleMouseEvent(event, { coords, selection, controller, cellCoordsFactory }) {\n  handlers.get(event.type)({\n    coords,\n    selection,\n    controller,\n    cellCoordsFactory,\n    isShiftKey: event.shiftKey,\n    isLeftClick: isLeftClickEvent(event) || event.type === 'touchstart',\n    isRightClick: isRightClickEvent(event),\n  });\n}\n","export const holder = new WeakMap();\n\nexport const rootInstanceSymbol = Symbol('rootInstance');\n\n/**\n * Register an object as a root instance.\n *\n * @param  {object} object An object to associate with root instance flag.\n */\nexport function registerAsRootInstance(object) {\n  holder.set(object, true);\n}\n\n/**\n * Check if the source of the root indication call is valid.\n *\n * @param  {symbol} rootSymbol A symbol as a source of truth.\n * @returns {boolean}\n */\nexport function hasValidParameter(rootSymbol) {\n  return rootSymbol === rootInstanceSymbol;\n}\n\n/**\n * Check if passed an object was flagged as a root instance.\n *\n * @param  {object} object An object to check.\n * @returns {boolean}\n */\nexport function isRootInstance(object) {\n  return holder.has(object);\n}\n","import {\n  createObjectPropListener,\n  getProperty,\n  isObject,\n  objectEach,\n  setProperty\n} from '../helpers/object';\nimport { countFirstRowKeys } from '../helpers/data';\nimport { arrayEach } from '../helpers/array';\nimport { rangeEach } from '../helpers/number';\nimport { isFunction } from '../helpers/function';\n\n/**\n * @class DataSource\n * @private\n */\nclass DataSource {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Data source.\n   *\n   * @type {Array}\n   */\n  data;\n  /**\n   * Type of data source.\n   *\n   * @type {string}\n   * @default 'array'\n   */\n  dataType = 'array';\n\n  colToProp = () => {};\n  propToCol = () => {};\n\n  constructor(hotInstance, dataSource = []) {\n    this.hot = hotInstance;\n    this.data = dataSource;\n  }\n\n  /**\n   * Run the `modifyRowData` hook and return either the modified or the source data for the provided row.\n   *\n   * @private\n   * @param {number} rowIndex Row index.\n   * @returns {Array|object} Source or modified row of data.\n   */\n  modifyRowData(rowIndex) {\n    let modifyRowData;\n\n    if (this.hot.hasHook('modifyRowData')) {\n      modifyRowData = this.hot.runHooks('modifyRowData', rowIndex);\n    }\n\n    return (modifyRowData !== undefined && !Number.isInteger(modifyRowData)) ? modifyRowData : this.data[rowIndex];\n  }\n\n  /**\n   * Get all data.\n   *\n   * @param {boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n   *                                  in another format.\n   * @returns {Array}\n   */\n  getData(toArray = false) {\n    if (!this.data || this.data.length === 0) {\n      return this.data;\n    }\n\n    return this.getByRange(\n      null,\n      null,\n      toArray\n    );\n  }\n\n  /**\n   * Set new data source.\n   *\n   * @param {Array} data The new data.\n   */\n  setData(data) {\n    this.data = data;\n  }\n\n  /**\n   * Returns array of column values from the data source. `column` is the index of the row in the data source.\n   *\n   * @param {number} column Visual column index.\n   * @returns {Array}\n   */\n  getAtColumn(column) {\n    const result = [];\n\n    arrayEach(this.data, (row, rowIndex) => {\n      const value = this.getAtCell(rowIndex, column);\n\n      result.push(value);\n    });\n\n    return result;\n  }\n\n  /**\n   * Returns a single row of the data or a subset of its columns. If a column range or `toArray` arguments are provided, it\n   * operates only on the columns declared by the `columns` setting or the data schema.\n   *\n   * @param {number} row Physical row index.\n   * @param {number} [startColumn] Starting index for the column range (optional).\n   * @param {number} [endColumn] Ending index for the column range (optional).\n   * @param {boolean} [toArray=false] `true` if the returned value should be forced to be presented as an array.\n   * @returns {Array|object}\n   */\n  getAtRow(row, startColumn, endColumn, toArray = false) {\n    const getAllProps = startColumn === undefined && endColumn === undefined;\n    const { dataDotNotation } = this.hot.getSettings();\n    let dataRow = null;\n    let newDataRow = null;\n\n    dataRow = this.modifyRowData(row);\n\n    if (Array.isArray(dataRow)) {\n      newDataRow = [];\n\n      if (getAllProps) {\n        dataRow.forEach((cell, column) => {\n          newDataRow[column] = this.getAtPhysicalCell(row, column, dataRow);\n        });\n\n      } else {\n        // Only the columns from the provided range\n        rangeEach(startColumn, endColumn, (column) => {\n          newDataRow[column - startColumn] = this.getAtPhysicalCell(row, column, dataRow);\n        });\n      }\n\n    } else if (isObject(dataRow) || isFunction(dataRow)) {\n      if (toArray) {\n        newDataRow = [];\n      } else {\n        newDataRow = {};\n      }\n\n      if (!getAllProps || toArray) {\n        const rangeStart = 0;\n        const rangeEnd = this.countFirstRowKeys() - 1;\n\n        rangeEach(rangeStart, rangeEnd, (column) => {\n          const prop = this.colToProp(column);\n\n          if (column >= (startColumn || rangeStart) && column <= (endColumn || rangeEnd) && !Number.isInteger(prop)) {\n            const cellValue = this.getAtPhysicalCell(row, prop, dataRow);\n\n            if (toArray) {\n              newDataRow.push(cellValue);\n\n            } else if (dataDotNotation) {\n              setProperty(newDataRow, prop, cellValue);\n\n            } else {\n              newDataRow[prop] = cellValue;\n            }\n          }\n        });\n\n      } else {\n        objectEach(dataRow, (value, prop) => {\n          const cellValue = this.getAtPhysicalCell(row, prop, dataRow);\n\n          if (dataDotNotation) {\n            setProperty(newDataRow, prop, cellValue);\n          } else {\n            newDataRow[prop] = cellValue;\n          }\n        });\n      }\n    }\n\n    return newDataRow;\n  }\n\n  /**\n   * Set the provided value in the source data set at the provided coordinates.\n   *\n   * @param {number} row Physical row index.\n   * @param {number|string} column Property name / physical column index.\n   * @param {*} value The value to be set at the provided coordinates.\n   */\n  setAtCell(row, column, value) {\n    if (row >= this.countRows() || column >= this.countFirstRowKeys()) {\n      // Not enough rows and/or columns.\n      return;\n    }\n\n    if (this.hot.hasHook('modifySourceData')) {\n      const valueHolder = createObjectPropListener(value);\n\n      this.hot.runHooks('modifySourceData', row, column, valueHolder, 'set');\n\n      if (valueHolder.isTouched()) {\n        value = valueHolder.value;\n      }\n    }\n\n    if (!Number.isInteger(column)) {\n      // column argument is the prop name\n      setProperty(this.data[row], column, value);\n\n    } else {\n      this.data[row][column] = value;\n    }\n  }\n\n  /**\n   * Get data from the source data set using the physical indexes.\n   *\n   * @private\n   * @param {number} row Physical row index.\n   * @param {string|number|Function} column Physical column index / property / function.\n   * @param {Array|object} dataRow A representation of a data row.\n   * @returns {*} Value at the provided coordinates.\n   */\n  getAtPhysicalCell(row, column, dataRow) {\n    let result = null;\n\n    if (dataRow) {\n      if (typeof column === 'string') {\n        const { dataDotNotation } = this.hot.getSettings();\n\n        result = dataDotNotation ? getProperty(dataRow, column) : dataRow[column];\n\n      } else if (typeof column === 'function') {\n        result = column(dataRow);\n\n      } else {\n        result = dataRow[column];\n      }\n    }\n\n    if (this.hot.hasHook('modifySourceData')) {\n      const valueHolder = createObjectPropListener(result);\n\n      this.hot.runHooks('modifySourceData', row, column, valueHolder, 'get');\n\n      if (valueHolder.isTouched()) {\n        result = valueHolder.value;\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Returns a single value from the data.\n   *\n   * @param {number} row Physical row index.\n   * @param {number} columnOrProp Visual column index or property.\n   * @returns {*}\n   */\n  getAtCell(row, columnOrProp) {\n    const dataRow = this.modifyRowData(row);\n\n    return this.getAtPhysicalCell(row, this.colToProp(columnOrProp), dataRow);\n  }\n\n  /**\n   * Returns source data by passed range.\n   *\n   * @param {object} [start] Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n   * @param {object} [end] Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n   * @param {boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n   *                                  in another format.\n   * @returns {Array}\n   */\n  getByRange(start = null, end = null, toArray = false) {\n    let getAllProps = false;\n    let startRow = null;\n    let startCol = null;\n    let endRow = null;\n    let endCol = null;\n\n    if (start === null || end === null) {\n      getAllProps = true;\n      startRow = 0;\n      endRow = this.countRows() - 1;\n\n    } else {\n      startRow = Math.min(start.row, end.row);\n      startCol = Math.min(start.col, end.col);\n      endRow = Math.max(start.row, end.row);\n      endCol = Math.max(start.col, end.col);\n    }\n\n    const result = [];\n\n    rangeEach(startRow, endRow, (currentRow) => {\n      result.push((\n        getAllProps ?\n          this.getAtRow(currentRow, undefined, undefined, toArray) :\n          this.getAtRow(currentRow, startCol, endCol, toArray)\n      ));\n    });\n\n    return result;\n  }\n\n  /**\n   * Count number of rows.\n   *\n   * @returns {number}\n   */\n  countRows() {\n    if (this.hot.hasHook('modifySourceLength')) {\n      const modifiedSourceLength = this.hot.runHooks('modifySourceLength');\n\n      if (Number.isInteger(modifiedSourceLength)) {\n        return modifiedSourceLength;\n      }\n    }\n\n    return this.data.length;\n  }\n\n  /**\n   * Count number of columns.\n   *\n   * @returns {number}\n   */\n  countFirstRowKeys() {\n    return countFirstRowKeys(this.data);\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.data = null;\n    this.hot = null;\n  }\n}\n\nexport default DataSource;\n","import { deepObjectSize, isObject } from './object';\n\nconst COLUMN_LABEL_BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst COLUMN_LABEL_BASE_LENGTH = COLUMN_LABEL_BASE.length;\n\n/**\n * Generates spreadsheet-like column names: A, B, C, ..., Z, AA, AB, etc.\n *\n * @param {number} index Column index.\n * @returns {string}\n */\nexport function spreadsheetColumnLabel(index) {\n  let dividend = index + 1;\n  let columnLabel = '';\n  let modulo;\n\n  while (dividend > 0) {\n    modulo = (dividend - 1) % COLUMN_LABEL_BASE_LENGTH;\n    columnLabel = String.fromCharCode(65 + modulo) + columnLabel;\n    dividend = parseInt((dividend - modulo) / COLUMN_LABEL_BASE_LENGTH, 10);\n  }\n\n  return columnLabel;\n}\n\n/**\n * Generates spreadsheet-like column index from theirs labels: A, B, C ...., Z, AA, AB, etc.\n *\n * @param {string} label Column label.\n * @returns {number}\n */\nexport function spreadsheetColumnIndex(label) {\n  let result = 0;\n\n  if (label) {\n    for (let i = 0, j = label.length - 1; i < label.length; i += 1, j -= 1) {\n      result += (COLUMN_LABEL_BASE_LENGTH ** j) * (COLUMN_LABEL_BASE.indexOf(label[i]) + 1);\n    }\n  }\n  result -= 1;\n\n  return result;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", ...\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} columns Number of columns to generate.\n * @returns {Array}\n */\nexport function createSpreadsheetData(rows = 100, columns = 4) {\n  const _rows = [];\n  let i;\n  let j;\n\n  for (i = 0; i < rows; i++) {\n    const row = [];\n\n    for (j = 0; j < columns; j++) {\n      row.push(spreadsheetColumnLabel(j) + (i + 1));\n    }\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", as an array of objects.\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} colCount Number of columns to generate.\n * @returns {Array}\n */\nexport function createSpreadsheetObjectData(rows = 100, colCount = 4) {\n  const _rows = [];\n  let i;\n  let j;\n\n  for (i = 0; i < rows; i++) {\n    const row = {};\n\n    for (j = 0; j < colCount; j++) {\n      row[`prop${j}`] = spreadsheetColumnLabel(j) + (i + 1);\n    }\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n\n/**\n * Generates an empty data object.\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} columns Number of columns to generate.\n * @returns {Array}\n */\nexport function createEmptySpreadsheetData(rows, columns) {\n  const data = [];\n  let row;\n\n  for (let i = 0; i < rows; i++) {\n    row = [];\n\n    for (let j = 0; j < columns; j++) {\n      row.push('');\n    }\n    data.push(row);\n  }\n\n  return data;\n}\n\n/**\n * Transform a data row (either an array or an object) or an array of data rows to array of changes in a form of `[row,\n * prop/col, value]`. Convenient to use with `setDataAtRowProp` and `setSourceDataAtCell` methods.\n *\n * @param {Array|object} dataRow Object of row data, array of row data or an array of either.\n * @param {number} rowOffset Row offset to be passed to the resulting change list. Defaults to `0`.\n * @returns {Array} Array of changes (in a form of an array).\n */\nexport function dataRowToChangesArray(dataRow, rowOffset = 0) {\n  let dataRows = dataRow;\n  const changesArray = [];\n\n  if (!Array.isArray(dataRow) || !Array.isArray(dataRow[0])) {\n    dataRows = [dataRow];\n  }\n\n  dataRows.forEach((row, rowIndex) => {\n    if (Array.isArray(row)) {\n      row.forEach((value, column) => {\n        changesArray.push([\n          rowIndex + rowOffset,\n          column,\n          value\n        ]);\n      });\n\n    } else {\n      Object.keys(row).forEach((propName) => {\n        changesArray.push([\n          rowIndex + rowOffset,\n          propName,\n          row[propName]\n        ]);\n      });\n    }\n  });\n\n  return changesArray;\n}\n\n/**\n * Count the number of keys (or, basically, columns when the data is an array or arrays) in the first row of the\n * provided dataset.\n *\n * @param {Array} data The dataset.\n * @returns {number} Number of keys in the first row of the dataset.\n */\nexport function countFirstRowKeys(data) {\n  let result = 0;\n\n  if (Array.isArray(data)) {\n    if (data[0] && Array.isArray(data[0])) {\n      result = data[0].length;\n\n    } else if (data[0] && isObject(data[0])) {\n      result = deepObjectSize(data[0]);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Check whether the provided dataset is a *non-empty* array of arrays.\n *\n * @param {Array} data Dataset to be checked.\n * @returns {boolean} `true` if data is an array of arrays, `false` otherwise.\n */\nexport function isArrayOfArrays(data) {\n  return !!(Array.isArray(data) && data.length && data.every(el => Array.isArray(el)));\n}\n\n/**\n * Check whether the provided dataset is a *non-empty* array of objects.\n *\n * @param {Array} data Dataset to be checked.\n * @returns {boolean} `true` if data is an array of objects, `false` otherwise.\n */\nexport function isArrayOfObjects(data) {\n  return !!(Array.isArray(data) &&\n    data.length &&\n    data.every(el => typeof el === 'object' && !Array.isArray(el) && el !== null));\n}\n","export { IndexMapper } from './indexMapper';\nexport { getRegisteredMapsCounter } from './mapCollections/mapCollection';\nexport { getIncreasedIndexes, getDecreasedIndexes, alterUtilsFactory } from './maps/utils';\nexport * from './maps';\n","import { arrayMap } from '../helpers/array';\nimport {\n  createIndexMap,\n  getListWithInsertedItems,\n  getListWithRemovedItems,\n  HidingMap,\n  IndexesSequence,\n  TrimmingMap,\n} from './maps';\nimport {\n  AggregatedCollection,\n  MapCollection,\n} from './mapCollections';\nimport localHooks from '../mixins/localHooks';\nimport { mixin } from '../helpers/object';\nimport { isDefined } from '../helpers/mixed';\nimport { ChangesObservable } from './changesObservable/observable';\n\n/**\n * A set of deprecated feature names.\n *\n * @type {Set<string>}\n */\n// eslint-disable-next-line no-unused-vars\nconst deprecationWarns = new Set();\n\n/**\n * @class IndexMapper\n * @description\n *\n * Index mapper stores, registers and manages the indexes on the basis of calculations collected from the subsidiary maps.\n * It should be seen as a single source of truth (regarding row and column indexes, for example, their sequence, information if they are skipped in the process of rendering (hidden or trimmed), values linked to them)\n * for any operation that considers CRUD actions such as **insertion**, **movement**, **removal** etc, and is used to properly calculate physical and visual indexes translations in both ways.\n * It has a built-in cache that is updated only when the data or structure changes.\n *\n * **Physical index** is a type of an index from the sequence of indexes assigned to the data source rows or columns\n *  (from 0 to n, where n is number of the cells on the axis of data set).\n * **Visual index** is a type of an index from the sequence of indexes assigned to rows or columns existing in {@link DataMap} (from 0 to n, where n is number of the cells on the axis of data set).\n * **Renderable index** is a type of an index from the sequence of indexes assigned to rows or columns whose may be rendered (when they are in a viewport; from 0 to n, where n is number of the cells renderable on the axis).\n *\n * There are different kinds of index maps which may be registered in the collections and can be used by a reference.\n * They also expose public API and trigger two local hooks such as `init` (on initialization) and `change` (on change).\n *\n * These are: {@link IndexesSequence}, {@link PhysicalIndexToValueMap}, {@link LinkedPhysicalIndexToValueMap}, {@link HidingMap}, and {@link TrimmingMap}.\n */\nexport class IndexMapper {\n  /**\n   * Map for storing the sequence of indexes.\n   *\n   * It is registered by default and may be used from API methods.\n   *\n   * @private\n   * @type {IndexesSequence}\n   */\n  indexesSequence = new IndexesSequence();\n  /**\n   * Collection for different trimming maps. Indexes marked as trimmed in any map WILL NOT be included in\n   * the {@link DataMap} and won't be rendered.\n   *\n   * @private\n   * @type {MapCollection}\n   */\n  trimmingMapsCollection = new AggregatedCollection(\n    valuesForIndex => valuesForIndex.some(value => value === true), false);\n  /**\n   * Collection for different hiding maps. Indexes marked as hidden in any map WILL be included in the {@link DataMap},\n   * but won't be rendered.\n   *\n   * @private\n   * @type {MapCollection}\n   */\n  hidingMapsCollection = new AggregatedCollection(\n    valuesForIndex => valuesForIndex.some(value => value === true), false);\n  /**\n   * Collection for another kind of maps. There are stored mappings from indexes (visual or physical) to values.\n   *\n   * @private\n   * @type {MapCollection}\n   */\n  variousMapsCollection = new MapCollection();\n  /**\n   * The class instance collects row and column index changes that happen while the Handsontable\n   * is running. The object allows creating observers that you can subscribe. Each event represents\n   * the index change (e.g., insert, removing, change index value), which can be consumed by a\n   * developer to update its logic.\n   *\n   * @private\n   * @type {ChangesObservable}\n   */\n  hidingChangesObservable = new ChangesObservable({\n    initialIndexValue: false,\n  });\n  /**\n   * Cache for list of not trimmed indexes, respecting the indexes sequence (physical indexes).\n   *\n   * Note: Please keep in mind that trimmed index can be also hidden.\n   *\n   * @private\n   * @type {Array}\n   */\n  notTrimmedIndexesCache = [];\n  /**\n   * Cache for list of not hidden indexes, respecting the indexes sequence (physical indexes).\n   *\n   * Note: Please keep in mind that hidden index can be also trimmed.\n   *\n   * @private\n   * @type {Array}\n   */\n  notHiddenIndexesCache = [];\n  /**\n   * Flag determining whether actions performed on index mapper have been batched. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  isBatched = false;\n  /**\n   * Flag determining whether any action on indexes sequence has been performed. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  indexesSequenceChanged = false;\n  /**\n   * Flag informing about source of the change.\n   *\n   * @type {undefined|string}\n   */\n  indexesChangeSource = undefined;\n  /**\n   * Flag determining whether any action on trimmed indexes has been performed. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  trimmedIndexesChanged = false;\n  /**\n   * Flag determining whether any action on hidden indexes has been performed. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  hiddenIndexesChanged = false;\n  /**\n   * Physical indexes (respecting the sequence of indexes) which may be rendered (when they are in a viewport).\n   *\n   * @private\n   * @type {Array}\n   */\n  renderablePhysicalIndexesCache = [];\n  /**\n   * Visual indexes (native map's value) corresponding to physical indexes (native map's index).\n   *\n   * @private\n   * @type {Map}\n   */\n  fromPhysicalToVisualIndexesCache = new Map();\n  /**\n   * Visual indexes (native map's value) corresponding to physical indexes (native map's index).\n   *\n   * @private\n   * @type {Map}\n   */\n  fromVisualToRenderableIndexesCache = new Map();\n\n  constructor() {\n    this.indexesSequence.addLocalHook('change', () => {\n      this.indexesSequenceChanged = true;\n\n      // Sequence of stored indexes might change.\n      this.updateCache();\n\n      this.runLocalHooks('indexesSequenceChange', this.indexesChangeSource);\n      this.runLocalHooks('change', this.indexesSequence, null);\n    });\n\n    this.trimmingMapsCollection.addLocalHook('change', (changedMap) => {\n      this.trimmedIndexesChanged = true;\n\n      // Number of trimmed indexes might change.\n      this.updateCache();\n\n      this.runLocalHooks('change', changedMap, this.trimmingMapsCollection);\n    });\n\n    this.hidingMapsCollection.addLocalHook('change', (changedMap) => {\n      this.hiddenIndexesChanged = true;\n\n      // Number of hidden indexes might change.\n      this.updateCache();\n\n      this.runLocalHooks('change', changedMap, this.hidingMapsCollection);\n    });\n\n    this.variousMapsCollection.addLocalHook('change', (changedMap) => {\n      this.runLocalHooks('change', changedMap, this.variousMapsCollection);\n    });\n  }\n\n  /**\n   * Suspends the cache update for this map. The method is helpful to group multiple\n   * operations, which affects the cache. In this case, the cache will be updated once after\n   * calling the `resumeOperations` method.\n   */\n  suspendOperations() {\n    this.isBatched = true;\n  }\n\n  /**\n   * Resumes the cache update for this map. It recalculates the cache and restores the\n   * default behavior where each map modification updates the cache.\n   */\n  resumeOperations() {\n    this.isBatched = false;\n    this.updateCache();\n  }\n\n  /**\n   * It creates and returns the new instance of the ChangesObserver object. The object\n   * allows listening to the index changes that happen while the Handsontable is running.\n   *\n   * @param {string} indexMapType The index map type which we want to observe.\n   *                              Currently, only the 'hiding' index map types are observable.\n   * @returns {ChangesObserver}\n   */\n  createChangesObserver(indexMapType) {\n    if (indexMapType !== 'hiding') {\n      throw new Error(`Unsupported index map type \"${indexMapType}\".`);\n    }\n\n    return this.hidingChangesObservable.createObserver();\n  }\n\n  /**\n   * Creates and registers a new `IndexMap` for a specified `IndexMapper` instance.\n   *\n   * @param {string} indexName A unique index name.\n   * @param {string} mapType The index map type (e.g., \"hiding\", \"trimming\", \"physicalIndexToValue\").\n   * @param {*} [initValueOrFn] The initial value for the index map.\n   * @returns {IndexMap}\n   */\n  createAndRegisterIndexMap(indexName, mapType, initValueOrFn) {\n    return this.registerMap(indexName, createIndexMap(mapType, initValueOrFn));\n  }\n\n  /**\n   * Register map which provide some index mappings. Type of map determining to which collection it will be added.\n   *\n   * @param {string} uniqueName Name of the index map. It should be unique.\n   * @param {IndexMap} indexMap Registered index map updated on items removal and insertion.\n   * @returns {IndexMap}\n   */\n  registerMap(uniqueName, indexMap) {\n    if (this.trimmingMapsCollection.get(uniqueName) ||\n        this.hidingMapsCollection.get(uniqueName) ||\n        this.variousMapsCollection.get(uniqueName)) {\n      throw Error(`Map with name \"${uniqueName}\" has been already registered.`);\n    }\n\n    if (indexMap instanceof TrimmingMap) {\n      this.trimmingMapsCollection.register(uniqueName, indexMap);\n\n    } else if (indexMap instanceof HidingMap) {\n      this.hidingMapsCollection.register(uniqueName, indexMap);\n\n    } else {\n      this.variousMapsCollection.register(uniqueName, indexMap);\n    }\n\n    const numberOfIndexes = this.getNumberOfIndexes();\n\n    /*\n      We initialize map ony when we have full information about number of indexes and the dataset is not empty.\n      Otherwise it's unnecessary. Initialization of empty array would not give any positive changes. After initializing\n      it with number of indexes equal to 0 the map would be still empty. What's more there would be triggered\n      not needed hook (no real change have occurred). Number of indexes is known after loading data (the `loadData`\n      function from the `Core`).\n     */\n    if (numberOfIndexes > 0) {\n      indexMap.init(numberOfIndexes);\n    }\n\n    return indexMap;\n  }\n\n  /**\n   * Unregister a map with given name.\n   *\n   * @param {string} name Name of the index map.\n   */\n  unregisterMap(name) {\n    this.trimmingMapsCollection.unregister(name);\n    this.hidingMapsCollection.unregister(name);\n    this.variousMapsCollection.unregister(name);\n  }\n\n  /**\n   * Unregisters all collected index map instances from all map collection types.\n   */\n  unregisterAll() {\n    this.trimmingMapsCollection.unregisterAll();\n    this.hidingMapsCollection.unregisterAll();\n    this.variousMapsCollection.unregisterAll();\n  }\n\n  /**\n   * Get a physical index corresponding to the given visual index.\n   *\n   * @param {number} visualIndex Visual index.\n   * @returns {number|null} Returns translated index mapped by passed visual index.\n   */\n  getPhysicalFromVisualIndex(visualIndex) {\n    // Index in the table boundaries provided by the `DataMap`.\n    const physicalIndex = this.notTrimmedIndexesCache[visualIndex];\n\n    if (isDefined(physicalIndex)) {\n      return physicalIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get a physical index corresponding to the given renderable index.\n   *\n   * @param {number} renderableIndex Renderable index.\n   * @returns {null|number}\n   */\n  getPhysicalFromRenderableIndex(renderableIndex) {\n    const physicalIndex = this.renderablePhysicalIndexesCache[renderableIndex];\n\n    // Index in the renderable table boundaries.\n    if (isDefined(physicalIndex)) {\n      return physicalIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get a visual index corresponding to the given physical index.\n   *\n   * @param {number} physicalIndex Physical index to search.\n   * @returns {number|null} Returns a visual index of the index mapper.\n   */\n  getVisualFromPhysicalIndex(physicalIndex) {\n    const visualIndex = this.fromPhysicalToVisualIndexesCache.get(physicalIndex);\n\n    // Index in the table boundaries provided by the `DataMap`.\n    if (isDefined(visualIndex)) {\n      return visualIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get a visual index corresponding to the given renderable index.\n   *\n   * @param {number} renderableIndex Renderable index.\n   * @returns {null|number}\n   */\n  getVisualFromRenderableIndex(renderableIndex) {\n    return this.getVisualFromPhysicalIndex(this.getPhysicalFromRenderableIndex(renderableIndex));\n  }\n\n  /**\n   * Get a renderable index corresponding to the given visual index.\n   *\n   * @param {number} visualIndex Visual index.\n   * @returns {null|number}\n   */\n  getRenderableFromVisualIndex(visualIndex) {\n    const renderableIndex = this.fromVisualToRenderableIndexesCache.get(visualIndex);\n\n    // Index in the renderable table boundaries.\n    if (isDefined(renderableIndex)) {\n      return renderableIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Search for the nearest not-hidden row or column.\n   *\n   * @param {number} fromVisualIndex The visual index of the row or column from which the search starts.<br><br>\n   * If the row or column from which the search starts is not hidden, the method simply returns the `fromVisualIndex` number.\n   * @param {number} searchDirection The search direction.<br><br>`1`: search from `fromVisualIndex` to the end of the dataset.<br><br>\n   * `-1`: search from `fromVisualIndex` to the beginning of the dataset (i.e., to the row or column at visual index `0`).\n   * @param {boolean} searchAlsoOtherWayAround `true`: if a search in a first direction failed, try the opposite direction.<br><br>\n   * `false`: search in one direction only.\n   *\n   * @returns {number|null} A visual index of a row or column, or `null`.\n   */\n  getNearestNotHiddenIndex(fromVisualIndex, searchDirection, searchAlsoOtherWayAround = false) {\n    const physicalIndex = this.getPhysicalFromVisualIndex(fromVisualIndex);\n\n    if (physicalIndex === null) {\n      return null;\n    }\n\n    if (this.fromVisualToRenderableIndexesCache.has(fromVisualIndex)) {\n      return fromVisualIndex;\n    }\n\n    const visibleIndexes = Array.from(this.fromVisualToRenderableIndexesCache.keys());\n    let index = -1;\n\n    if (searchDirection > 0) {\n      index = visibleIndexes.findIndex(visualIndex => visualIndex > fromVisualIndex);\n    } else {\n      index = visibleIndexes.reverse().findIndex(visualIndex => visualIndex < fromVisualIndex);\n    }\n\n    if (index === -1) {\n      if (searchAlsoOtherWayAround) {\n        return this.getNearestNotHiddenIndex(fromVisualIndex, -searchDirection, false);\n      }\n\n      return null;\n    }\n\n    return visibleIndexes[index];\n  }\n\n  /**\n   * Set default values for all indexes in registered index maps.\n   *\n   * @param {number} [length] Destination length for all stored index maps.\n   */\n  initToLength(length = this.getNumberOfIndexes()) {\n    this.notTrimmedIndexesCache = [...new Array(length).keys()];\n    this.notHiddenIndexesCache = [...new Array(length).keys()];\n\n    this.suspendOperations();\n    this.indexesChangeSource = 'init';\n    this.indexesSequence.init(length);\n    this.indexesChangeSource = undefined;\n    this.trimmingMapsCollection.initEvery(length);\n    this.resumeOperations();\n\n    // We move initialization of hidden collection to next batch for purpose of working on sequence of already trimmed indexes.\n    this.suspendOperations();\n    this.hidingMapsCollection.initEvery(length);\n\n    // It shouldn't reset the cache.\n    this.variousMapsCollection.initEvery(length);\n    this.resumeOperations();\n\n    this.runLocalHooks('init');\n  }\n\n  /**\n   * Trim/extend the mappers to fit the desired length.\n   *\n   * @param {number} length New mapper length.\n   */\n  fitToLength(length) {\n    const currentIndexCount = this.getNumberOfIndexes();\n\n    if (length < currentIndexCount) {\n      const indexesToBeRemoved = [\n        ...Array(this.getNumberOfIndexes() - length).keys()\n      ].map(i => i + length);\n\n      this.removeIndexes(indexesToBeRemoved);\n\n    } else {\n      this.insertIndexes(currentIndexCount, length - currentIndexCount);\n    }\n  }\n\n  /**\n   * Get sequence of indexes.\n   *\n   * @returns {Array} Physical indexes.\n   */\n  getIndexesSequence() {\n    return this.indexesSequence.getValues();\n  }\n\n  /**\n   * Set completely new indexes sequence.\n   *\n   * @param {Array} indexes Physical indexes.\n   */\n  setIndexesSequence(indexes) {\n    if (this.indexesChangeSource === undefined) {\n      this.indexesChangeSource = 'update';\n    }\n\n    this.indexesSequence.setValues(indexes);\n\n    if (this.indexesChangeSource === 'update') {\n      this.indexesChangeSource = undefined;\n    }\n  }\n\n  /**\n   * Get all NOT trimmed indexes.\n   *\n   * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n   *\n   * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n   * @returns {Array} List of physical indexes. Index of this native array is a \"visual index\",\n   * value of this native array is a \"physical index\".\n   */\n  getNotTrimmedIndexes(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.notTrimmedIndexesCache;\n    }\n\n    const indexesSequence = this.getIndexesSequence();\n\n    return indexesSequence.filter(physicalIndex => this.isTrimmed(physicalIndex) === false);\n  }\n\n  /**\n   * Get length of all NOT trimmed indexes.\n   *\n   * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n   *\n   * @returns {number}\n   */\n  getNotTrimmedIndexesLength() {\n    return this.getNotTrimmedIndexes().length;\n  }\n\n  /**\n   * Get all NOT hidden indexes.\n   *\n   * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n   *\n   * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n   * @returns {Array} List of physical indexes. Please keep in mind that index of this native array IS NOT a \"visual index\".\n   */\n  getNotHiddenIndexes(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.notHiddenIndexesCache;\n    }\n\n    const indexesSequence = this.getIndexesSequence();\n\n    return indexesSequence.filter(physicalIndex => this.isHidden(physicalIndex) === false);\n  }\n\n  /**\n   * Get length of all NOT hidden indexes.\n   *\n   * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n   *\n   * @returns {number}\n   */\n  getNotHiddenIndexesLength() {\n    return this.getNotHiddenIndexes().length;\n  }\n\n  /**\n   * Get list of physical indexes (respecting the sequence of indexes) which may be rendered (when they are in a viewport).\n   *\n   * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n   * @returns {Array} List of physical indexes. Index of this native array is a \"renderable index\",\n   * value of this native array is a \"physical index\".\n   */\n  getRenderableIndexes(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.renderablePhysicalIndexesCache;\n    }\n\n    const notTrimmedIndexes = this.getNotTrimmedIndexes();\n\n    return notTrimmedIndexes.filter(physicalIndex => this.isHidden(physicalIndex) === false);\n  }\n\n  /**\n   * Get length of all NOT trimmed and NOT hidden indexes.\n   *\n   * @returns {number}\n   */\n  getRenderableIndexesLength() {\n    return this.getRenderableIndexes().length;\n  }\n\n  /**\n   * Get number of all indexes.\n   *\n   * @returns {number}\n   */\n  getNumberOfIndexes() {\n    return this.getIndexesSequence().length;\n  }\n\n  /**\n   * Move indexes in the index mapper.\n   *\n   * @param {number|Array} movedIndexes Visual index(es) to move.\n   * @param {number} finalIndex Visual index being a start index for the moved elements.\n   */\n  moveIndexes(movedIndexes, finalIndex) {\n    if (typeof movedIndexes === 'number') {\n      movedIndexes = [movedIndexes];\n    }\n\n    const physicalMovedIndexes = arrayMap(movedIndexes, visualIndex => this.getPhysicalFromVisualIndex(visualIndex));\n    const notTrimmedIndexesLength = this.getNotTrimmedIndexesLength();\n    const movedIndexesLength = movedIndexes.length;\n\n    // Removing moved indexes without re-indexing.\n    const notMovedIndexes = getListWithRemovedItems(this.getIndexesSequence(), physicalMovedIndexes);\n    const notTrimmedNotMovedItems = notMovedIndexes.filter(index => this.isTrimmed(index) === false);\n\n    // When item(s) are moved after the last visible item we assign the last possible index.\n    let destinationPosition = notMovedIndexes.indexOf(notTrimmedNotMovedItems[notTrimmedNotMovedItems.length - 1]) + 1;\n\n    // Otherwise, we find proper index for inserted item(s).\n    if (finalIndex + movedIndexesLength < notTrimmedIndexesLength) {\n      // Physical index at final index position.\n      const physicalIndex = notTrimmedNotMovedItems[finalIndex];\n\n      destinationPosition = notMovedIndexes.indexOf(physicalIndex);\n    }\n\n    this.indexesChangeSource = 'move';\n\n    // Adding indexes without re-indexing.\n    this.setIndexesSequence(getListWithInsertedItems(notMovedIndexes, destinationPosition, physicalMovedIndexes));\n\n    this.indexesChangeSource = undefined;\n  }\n\n  /**\n   * Get whether index is trimmed. Index marked as trimmed isn't included in a {@link DataMap} and isn't rendered.\n   *\n   * @param {number} physicalIndex Physical index.\n   * @returns {boolean}\n   */\n  isTrimmed(physicalIndex) {\n    return this.trimmingMapsCollection.getMergedValueAtIndex(physicalIndex);\n  }\n\n  /**\n   * Get whether index is hidden. Index marked as hidden is included in a {@link DataMap}, but isn't rendered.\n   *\n   * @param {number} physicalIndex Physical index.\n   * @returns {boolean}\n   */\n  isHidden(physicalIndex) {\n    return this.hidingMapsCollection.getMergedValueAtIndex(physicalIndex);\n  }\n\n  /**\n   * Insert new indexes and corresponding mapping and update values of the others, for all stored index maps.\n   *\n   * @private\n   * @param {number} firstInsertedVisualIndex First inserted visual index.\n   * @param {number} amountOfIndexes Amount of inserted indexes.\n   */\n  insertIndexes(firstInsertedVisualIndex, amountOfIndexes) {\n    const nthVisibleIndex = this.getNotTrimmedIndexes()[firstInsertedVisualIndex];\n    const firstInsertedPhysicalIndex = isDefined(nthVisibleIndex) ? nthVisibleIndex : this.getNumberOfIndexes();\n    const insertionIndex = this.getIndexesSequence().includes(nthVisibleIndex) ?\n      this.getIndexesSequence().indexOf(nthVisibleIndex) : this.getNumberOfIndexes();\n    const insertedIndexes = arrayMap(new Array(amountOfIndexes).fill(firstInsertedPhysicalIndex),\n      (nextIndex, stepsFromStart) => nextIndex + stepsFromStart);\n\n    this.suspendOperations();\n    this.indexesChangeSource = 'insert';\n    this.indexesSequence.insert(insertionIndex, insertedIndexes);\n    this.indexesChangeSource = undefined;\n    this.trimmingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n    this.hidingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n    this.variousMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n    this.resumeOperations();\n  }\n\n  /**\n   * Remove some indexes and corresponding mappings and update values of the others, for all stored index maps.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  removeIndexes(removedIndexes) {\n    this.suspendOperations();\n    this.indexesChangeSource = 'remove';\n    this.indexesSequence.remove(removedIndexes);\n    this.indexesChangeSource = undefined;\n    this.trimmingMapsCollection.removeFromEvery(removedIndexes);\n    this.hidingMapsCollection.removeFromEvery(removedIndexes);\n    this.variousMapsCollection.removeFromEvery(removedIndexes);\n    this.resumeOperations();\n  }\n\n  /**\n   * Rebuild cache for some indexes. Every action on indexes sequence or indexes skipped in the process of rendering\n   * by default reset cache, thus batching some index maps actions is recommended.\n   *\n   * @private\n   * @param {boolean} [force=false] Determine if force cache update.\n   */\n  updateCache(force = false) {\n    const anyCachedIndexChanged = this.indexesSequenceChanged ||\n      this.trimmedIndexesChanged || this.hiddenIndexesChanged;\n\n    if (force === true || (this.isBatched === false && anyCachedIndexChanged === true)) {\n      this.trimmingMapsCollection.updateCache();\n      this.hidingMapsCollection.updateCache();\n      this.notTrimmedIndexesCache = this.getNotTrimmedIndexes(false);\n      this.notHiddenIndexesCache = this.getNotHiddenIndexes(false);\n      this.renderablePhysicalIndexesCache = this.getRenderableIndexes(false);\n      this.cacheFromPhysicalToVisualIndexes();\n      this.cacheFromVisualToRenderableIndexes();\n\n      // Currently there's support only for the \"hiding\" map type.\n      if (this.hiddenIndexesChanged) {\n        this.hidingChangesObservable.emit(this.hidingMapsCollection.getMergedValues());\n      }\n\n      this.runLocalHooks('cacheUpdated', {\n        indexesSequenceChanged: this.indexesSequenceChanged,\n        trimmedIndexesChanged: this.trimmedIndexesChanged,\n        hiddenIndexesChanged: this.hiddenIndexesChanged,\n      });\n\n      this.indexesSequenceChanged = false;\n      this.trimmedIndexesChanged = false;\n      this.hiddenIndexesChanged = false;\n    }\n  }\n\n  /**\n   * Update cache for translations from physical to visual indexes.\n   *\n   * @private\n   */\n  cacheFromPhysicalToVisualIndexes() {\n    const nrOfNotTrimmedIndexes = this.getNotTrimmedIndexesLength();\n\n    this.fromPhysicalToVisualIndexesCache.clear();\n\n    for (let visualIndex = 0; visualIndex < nrOfNotTrimmedIndexes; visualIndex += 1) {\n      const physicalIndex = this.getPhysicalFromVisualIndex(visualIndex);\n\n      // Every visual index have corresponding physical index, but some physical indexes may don't have\n      // corresponding visual indexes (physical indexes may represent trimmed indexes, beyond the table boundaries)\n      this.fromPhysicalToVisualIndexesCache.set(physicalIndex, visualIndex);\n    }\n  }\n\n  /**\n   * Update cache for translations from visual to renderable indexes.\n   *\n   * @private\n   */\n  cacheFromVisualToRenderableIndexes() {\n    const nrOfRenderableIndexes = this.getRenderableIndexesLength();\n\n    this.fromVisualToRenderableIndexesCache.clear();\n\n    for (let renderableIndex = 0; renderableIndex < nrOfRenderableIndexes; renderableIndex += 1) {\n      // Can't use getRenderableFromVisualIndex here because we're building the cache here\n      const physicalIndex = this.getPhysicalFromRenderableIndex(renderableIndex);\n      const visualIndex = this.getVisualFromPhysicalIndex(physicalIndex);\n\n      this.fromVisualToRenderableIndexesCache.set(visualIndex, renderableIndex);\n    }\n  }\n}\n\nmixin(IndexMapper, localHooks);\n","import { HidingMap } from './hidingMap';\nimport { IndexMap } from './indexMap';\nimport { LinkedPhysicalIndexToValueMap } from './linkedPhysicalIndexToValueMap';\nimport { PhysicalIndexToValueMap } from './physicalIndexToValueMap';\nimport { TrimmingMap } from './trimmingMap';\n\nexport * from './indexesSequence';\nexport * from './utils/indexesSequence';\nexport {\n  HidingMap,\n  IndexMap,\n  LinkedPhysicalIndexToValueMap,\n  PhysicalIndexToValueMap,\n  TrimmingMap\n};\n\nconst availableIndexMapTypes = new Map([\n  ['hiding', HidingMap],\n  ['index', IndexMap],\n  ['linkedPhysicalIndexToValue', LinkedPhysicalIndexToValueMap],\n  ['physicalIndexToValue', PhysicalIndexToValueMap],\n  ['trimming', TrimmingMap],\n]);\n\n/**\n * Creates and returns new IndexMap instance.\n *\n * @param {string} mapType The type of the map.\n * @param {*} [initValueOrFn=null] Initial value or function for index map.\n * @returns {IndexMap}\n */\nexport function createIndexMap(mapType, initValueOrFn = null) {\n  if (!availableIndexMapTypes.has(mapType)) {\n    throw new Error(`The provided map type (\"${mapType}\") does not exist.`);\n  }\n\n  return new (availableIndexMapTypes.get(mapType))(initValueOrFn);\n}\n","import { PhysicalIndexToValueMap } from './physicalIndexToValueMap';\nimport { arrayReduce } from '../../helpers/array';\n\n/**\n * Map for storing mappings from an physical index to a boolean value. It stores information whether physical index is\n * included in a dataset, but skipped in the process of rendering.\n *\n * @class HidingMap\n */\nexport class HidingMap extends PhysicalIndexToValueMap {\n  constructor(initValueOrFn = false) {\n    super(initValueOrFn);\n  }\n\n  /**\n   * Get physical indexes which are hidden.\n   *\n   * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n   *\n   * @returns {Array}\n   */\n  getHiddenIndexes() {\n    return arrayReduce(this.getValues(), (indexesList, isHidden, physicalIndex) => {\n      if (isHidden) {\n        indexesList.push(physicalIndex);\n      }\n\n      return indexesList;\n    }, []);\n  }\n}\n","import { IndexMap } from './indexMap';\nimport { getListWithRemovedItems, getListWithInsertedItems } from './utils/physicallyIndexed';\n\n/**\n * Map for storing mappings from an physical index to a value.\n *\n * Does not update stored values on remove/add row or column action.\n *\n * @class PhysicalIndexToValueMap\n */\nexport class PhysicalIndexToValueMap extends IndexMap {\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    this.indexedValues = getListWithInsertedItems(\n      this.indexedValues,\n      insertionIndex,\n      insertedIndexes,\n      this.initValueOrFn\n    );\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n}\n","import { rangeEach } from '../../helpers/number';\nimport { mixin } from '../../helpers/object';\nimport { isFunction } from '../../helpers/function';\nimport localHooks from '../../mixins/localHooks';\n\n/**\n * Map for storing mappings from an index to a value.\n *\n * @class IndexMap\n */\nexport class IndexMap {\n  /**\n   * List of values for particular indexes.\n   *\n   * @private\n   * @type {Array}\n   */\n  indexedValues = [];\n  /**\n   * Initial value or function for each existing index.\n   *\n   * @private\n   * @type {*}\n   */\n  initValueOrFn;\n\n  constructor(initValueOrFn = null) {\n    this.initValueOrFn = initValueOrFn;\n  }\n\n  /**\n   * Get full list of values for particular indexes.\n   *\n   * @returns {Array}\n   */\n  getValues() {\n    return this.indexedValues;\n  }\n\n  /**\n   * Get value for the particular index.\n   *\n   * @param {number} index Index for which value is got.\n   * @returns {*}\n   */\n  getValueAtIndex(index) {\n    const values = this.indexedValues;\n\n    if (index < values.length) {\n      return values[index];\n    }\n  }\n\n  /**\n   * Set new values for particular indexes.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @param {Array} values List of set values.\n   */\n  setValues(values) {\n    this.indexedValues = values.slice();\n\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Set new value for the particular index.\n   *\n   * @param {number} index The index.\n   * @param {*} value The value to save.\n   *\n   * Note: Please keep in mind that it is not possible to set value beyond the map (not respecting already set\n   * map's size). Please use the `setValues` method when you would like to extend the map.\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @returns {boolean}\n   */\n  setValueAtIndex(index, value) {\n    if (index < this.indexedValues.length) {\n      this.indexedValues[index] = value;\n\n      this.runLocalHooks('change');\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Clear all values to the defaults.\n   */\n  clear() {\n    this.setDefaultValues();\n  }\n\n  /**\n   * Get length of the index map.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    return this.getValues().length;\n  }\n\n  /**\n   * Set default values for elements from `0` to `n`, where `n` is equal to the handled variable.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   * @param {number} [length] Length of list.\n   */\n  setDefaultValues(length = this.indexedValues.length) {\n    this.indexedValues.length = 0;\n\n    if (isFunction(this.initValueOrFn)) {\n      rangeEach(length - 1, index => this.indexedValues.push(this.initValueOrFn(index)));\n\n    } else {\n      rangeEach(length - 1, () => this.indexedValues.push(this.initValueOrFn));\n    }\n\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Initialize list with default values for particular indexes.\n   *\n   * @private\n   * @param {number} length New length of indexed list.\n   * @returns {IndexMap}\n   */\n  init(length) {\n    this.setDefaultValues(length);\n\n    this.runLocalHooks('init');\n\n    return this;\n  }\n\n  /**\n   * Add values to the list.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   */\n  insert() {\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Remove values from the list.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   */\n  remove() {\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Destroys the Map instance.\n   */\n  destroy() {\n    this.clearLocalHooks();\n\n    this.indexedValues = null;\n    this.initValueOrFn = null;\n  }\n}\n\nmixin(IndexMap, localHooks);\n","import { isFunction } from '../../../helpers/function';\nimport { arrayFilter } from '../../../helpers/array';\n\n/**\n * Insert new items to the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {number} insertionIndex Position inside the actual list.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @param {*} insertedValuesMapping Mapping which may provide value or function returning value for the specific parameters.\n * @returns {Array} List with new mappings.\n */\nexport function getListWithInsertedItems(indexedValues, insertionIndex, insertedIndexes, insertedValuesMapping) {\n  const firstInsertedIndex = insertedIndexes.length ? insertedIndexes[0] : undefined;\n\n  return [\n    ...indexedValues.slice(0, firstInsertedIndex),\n    ...insertedIndexes.map((insertedIndex, ordinalNumber) => {\n      if (isFunction(insertedValuesMapping)) {\n        return insertedValuesMapping(insertedIndex, ordinalNumber);\n      }\n\n      return insertedValuesMapping;\n    }),\n    ...(firstInsertedIndex === undefined ? [] : indexedValues.slice(firstInsertedIndex)),\n  ];\n}\n\n/**\n * Filter items from the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} Reduced list of mappings.\n */\nexport function getListWithRemovedItems(indexedValues, removedIndexes) {\n  return arrayFilter(indexedValues, (_, index) => removedIndexes.includes(index) === false);\n}\n","import { IndexMap } from './indexMap';\nimport { getListWithRemovedItems, getListWithInsertedItems } from './utils/physicallyIndexed';\nimport { getListWithRemovedItems as getListWithoutIndexes } from './utils/indexesSequence';\nimport { getDecreasedIndexes, getIncreasedIndexes } from './utils/actionsOnIndexes';\nimport { isFunction } from '../../helpers/function';\n\n/**\n * Map for storing mappings from an physical index to a value. Those entries are linked and stored in a certain order.\n *\n * It does not update stored values on remove/add row or column action. Otherwise, order of entries is updated after\n * such changes.\n *\n * @class LinkedPhysicalIndexToValueMap\n */\nexport class LinkedPhysicalIndexToValueMap extends IndexMap {\n  /**\n   * Indexes and values corresponding to them (entries) are stored in a certain order.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  orderOfIndexes = []\n\n  /**\n   * Get full list of ordered values for particular indexes.\n   *\n   * @returns {Array}\n   */\n  getValues() {\n    return this.orderOfIndexes.map(physicalIndex => this.indexedValues[physicalIndex]);\n  }\n\n  /**\n   * Set new values for particular indexes. Entries are linked and stored in a certain order.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @param {Array} values List of set values.\n   */\n  setValues(values) {\n    this.orderOfIndexes = [...Array(values.length).keys()];\n\n    super.setValues(values);\n  }\n\n  /**\n   * Set value at index and add it to the linked list of entries. Entries are stored in a certain order.\n   *\n   * Note: Value will be added at the end of the queue.\n   *\n   * @param {number} index The index.\n   * @param {*} value The value to save.\n   * @param {number} position Position to which entry will be added.\n   *\n   * @returns {boolean}\n   */\n  setValueAtIndex(index, value, position = this.orderOfIndexes.length) {\n    if (index < this.indexedValues.length) {\n      this.indexedValues[index] = value;\n\n      if (this.orderOfIndexes.includes(index) === false) {\n        this.orderOfIndexes.splice(position, 0, index);\n      }\n\n      this.runLocalHooks('change');\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Clear value for particular index.\n   *\n   * @param {number} physicalIndex Physical index.\n   */\n  clearValue(physicalIndex) {\n    this.orderOfIndexes = getListWithoutIndexes(this.orderOfIndexes, [physicalIndex]);\n\n    if (isFunction(this.initValueOrFn)) {\n      super.setValueAtIndex(physicalIndex, this.initValueOrFn(physicalIndex));\n\n    } else {\n      super.setValueAtIndex(physicalIndex, this.initValueOrFn);\n    }\n  }\n\n  /**\n   * Get length of the index map.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    return this.orderOfIndexes.length;\n  }\n\n  /**\n   * Set default values for elements from `0` to `n`, where `n` is equal to the handled variable.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   * @param {number} [length] Length of list.\n   */\n  setDefaultValues(length = this.indexedValues.length) {\n    this.orderOfIndexes.length = 0;\n\n    super.setDefaultValues(length);\n  }\n\n  /**\n   * Add values to list and reorganize. It updates list of indexes related to ordered values.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    this.indexedValues = getListWithInsertedItems(\n      this.indexedValues,\n      insertionIndex,\n      insertedIndexes,\n      this.initValueOrFn\n    );\n    this.orderOfIndexes = getIncreasedIndexes(this.orderOfIndexes, insertedIndexes);\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize. It updates list of indexes related to ordered values.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n    this.orderOfIndexes = getListWithoutIndexes(this.orderOfIndexes, removedIndexes);\n    this.orderOfIndexes = getDecreasedIndexes(this.orderOfIndexes, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n\n  /**\n   * Get every entry containing index and value, respecting order of indexes.\n   *\n   * @returns {Array}\n   */\n  getEntries() {\n    return this.orderOfIndexes.map(physicalIndex => [physicalIndex, this.getValueAtIndex(physicalIndex)]);\n  }\n}\n","import { arrayFilter } from '../../../helpers/array';\n\n/**\n * Insert new items to the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {number} insertionIndex Position inside the actual list.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @returns {Array} List with new mappings.\n */\nexport function getListWithInsertedItems(indexedValues, insertionIndex, insertedIndexes) {\n  return [...indexedValues.slice(0, insertionIndex), ...insertedIndexes, ...indexedValues.slice(insertionIndex)];\n}\n\n/**\n * Filter items from the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} Reduced list of mappings.\n */\nexport function getListWithRemovedItems(indexedValues, removedIndexes) {\n  return arrayFilter(indexedValues, (index) => {\n    return removedIndexes.includes(index) === false;\n  });\n}\n","import { arrayMap } from '../../../helpers/array';\n\n/**\n * Transform mappings after removal.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} List with decreased indexes.\n */\nexport function getDecreasedIndexes(indexedValues, removedIndexes) {\n  return arrayMap(indexedValues, index => index - removedIndexes.filter(removedIndex => removedIndex < index).length);\n}\n\n/**\n * Transform mappings after insertion.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @returns {Array} List with increased indexes.\n */\nexport function getIncreasedIndexes(indexedValues, insertedIndexes) {\n  const firstInsertedIndex = insertedIndexes[0];\n  const amountOfIndexes = insertedIndexes.length;\n\n  return arrayMap(indexedValues, (index) => {\n    if (index >= firstInsertedIndex) {\n      return index + amountOfIndexes;\n    }\n\n    return index;\n  });\n}\n","import { PhysicalIndexToValueMap } from './physicalIndexToValueMap';\nimport { arrayReduce } from '../../helpers/array';\n\n/**\n * Map for storing mappings from an physical index to a boolean value. It stores information whether physical index is\n * NOT included in a dataset and skipped in the process of rendering.\n *\n * @class TrimmingMap\n */\nexport class TrimmingMap extends PhysicalIndexToValueMap {\n  constructor(initValueOrFn = false) {\n    super(initValueOrFn);\n  }\n\n  /**\n   * Get physical indexes which are trimmed.\n   *\n   * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n   *\n   * @returns {Array}\n   */\n  getTrimmedIndexes() {\n    return arrayReduce(this.getValues(), (indexesList, isTrimmed, physicalIndex) => {\n      if (isTrimmed) {\n        indexesList.push(physicalIndex);\n      }\n\n      return indexesList;\n    }, []);\n  }\n}\n","import { IndexMap } from './indexMap';\nimport { getListWithRemovedItems, getListWithInsertedItems } from './utils/indexesSequence';\nimport { getDecreasedIndexes, getIncreasedIndexes } from './utils';\n\n/**\n * Map for storing mappings from an index to a physical index.\n *\n * It also updates the physical indexes (remaining in the map) on remove/add row or column action.\n *\n * @class IndexesSequence\n */\nexport class IndexesSequence extends IndexMap {\n  constructor() {\n    // Not handling custom init function or init value.\n    super(index => index);\n  }\n\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    const listAfterUpdate = getIncreasedIndexes(this.indexedValues, insertedIndexes);\n\n    this.indexedValues = getListWithInsertedItems(listAfterUpdate, insertionIndex, insertedIndexes);\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    const listAfterUpdate = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    this.indexedValues = getDecreasedIndexes(listAfterUpdate, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n}\n","import { getDecreasedIndexes, getIncreasedIndexes } from './actionsOnIndexes';\nimport {\n  getListWithInsertedItems as sequenceStrategyInsert,\n  getListWithRemovedItems as sequenceStrategyRemove\n} from './indexesSequence';\nimport {\n  getListWithInsertedItems as physicalStrategyInsert,\n  getListWithRemovedItems as physicalStrategyRemove\n} from './physicallyIndexed';\n\nconst alterStrategies = new Map([\n  ['indexesSequence', {\n    getListWithInsertedItems: sequenceStrategyInsert,\n    getListWithRemovedItems: sequenceStrategyRemove\n  }],\n  ['physicallyIndexed', {\n    getListWithInsertedItems: physicalStrategyInsert,\n    getListWithRemovedItems: physicalStrategyRemove\n  }],\n]);\n\nconst alterUtilsFactory = (indexationStrategy) => {\n  if (alterStrategies.has(indexationStrategy) === false) {\n    throw new Error(`Alter strategy with ID '${indexationStrategy}' does not exist.`);\n  }\n\n  return alterStrategies.get(indexationStrategy);\n};\n\nexport {\n  getDecreasedIndexes,\n  getIncreasedIndexes,\n  alterUtilsFactory\n};\n","export * from './aggregatedCollection';\nexport * from './mapCollection';\n","import { MapCollection } from './mapCollection';\nimport { arrayMap } from '../../helpers/array';\nimport { isDefined } from '../../helpers/mixed';\n\n/**\n * Collection of maps. This collection aggregate maps with the same type of values. Values from the registered maps\n * can be used to calculate a single result for particular index.\n */\nexport class AggregatedCollection extends MapCollection {\n  /**\n   * List of merged values. Value for each index is calculated using values inside registered maps.\n   *\n   * @type {Array}\n   */\n  mergedValuesCache = [];\n  /**\n   * Function which do aggregation on the values for particular index.\n   */\n  aggregationFunction;\n  /**\n   * Fallback value when there is no calculated value for particular index.\n   */\n  fallbackValue;\n\n  constructor(aggregationFunction, fallbackValue) {\n    super();\n    this.aggregationFunction = aggregationFunction;\n    this.fallbackValue = fallbackValue;\n  }\n\n  /**\n   * Get merged values for all indexes.\n   *\n   * @param {boolean} [readFromCache=true] Determine if read results from the cache.\n   * @returns {Array}\n   */\n  getMergedValues(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.mergedValuesCache;\n    }\n\n    if (this.getLength() === 0) {\n      return [];\n    }\n\n    // Below variable stores values for every particular map. Example describing situation when we have 2 registered maps,\n    // with length equal to 5.\n    //\n    // +---------+---------------------------------------------+\n    // |         |                  indexes                    |\n    // +---------+---------------------------------------------+\n    // |   maps  |     0    |   1   |    2  |   3   |    4     |\n    // +---------+----------+-------+-------+-------+----------+\n    // |    0    | [[ value,  value,  value,  value,  value ], |\n    // |    1    | [  value,  value,  value,  value,  value ]] |\n    // +---------+----------+-------+-------+-------+----------+\n    const mapsValuesMatrix = arrayMap(this.get(), map => map.getValues());\n    // Below variable stores values for every particular index. Example describing situation when we have 2 registered maps,\n    // with length equal to 5.\n    //\n    // +---------+---------------------+\n    // |         |         maps        |\n    // +---------+---------------------+\n    // | indexes |     0    |    1     |\n    // +---------+----------+----------+\n    // |    0    | [[ value,  value ], |\n    // |    1    | [  value,  value ], |\n    // |    2    | [  value,  value ], |\n    // |    3    | [  value,  value ], |\n    // |    4    | [  value,  value ]] |\n    // +---------+----------+----------+\n    const indexesValuesMatrix = [];\n    const mapsLength = (isDefined(mapsValuesMatrix[0]) && mapsValuesMatrix[0].length) || 0;\n\n    for (let index = 0; index < mapsLength; index += 1) {\n      const valuesForIndex = [];\n\n      for (let mapIndex = 0; mapIndex < this.getLength(); mapIndex += 1) {\n        valuesForIndex.push(mapsValuesMatrix[mapIndex][index]);\n      }\n\n      indexesValuesMatrix.push(valuesForIndex);\n    }\n\n    return arrayMap(indexesValuesMatrix, this.aggregationFunction);\n  }\n\n  /**\n   * Get merged value for particular index.\n   *\n   * @param {number} index Index for which we calculate single result.\n   * @param {boolean} [readFromCache=true] Determine if read results from the cache.\n   * @returns {*}\n   */\n  getMergedValueAtIndex(index, readFromCache) {\n    const valueAtIndex = this.getMergedValues(readFromCache)[index];\n\n    return isDefined(valueAtIndex) ? valueAtIndex : this.fallbackValue;\n  }\n\n  /**\n   * Rebuild cache for the collection.\n   */\n  updateCache() {\n    this.mergedValuesCache = this.getMergedValues(false);\n  }\n}\n","import { isUndefined, isDefined } from '../../helpers/mixed';\nimport { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\n// Counter for checking if there is a memory leak.\nlet registeredMaps = 0;\n\n/**\n * Collection of index maps having unique names. It allow us to perform bulk operations such as init, remove, insert on all index maps that have been registered in the collection.\n */\nexport class MapCollection {\n  /**\n   * Collection of index maps.\n   *\n   * @type {Map<string, IndexMap>}\n   */\n  collection = new Map();\n\n  /**\n   * Register custom index map.\n   *\n   * @param {string} uniqueName Unique name of the index map.\n   * @param {IndexMap} indexMap Index map containing miscellaneous (i.e. Meta data, indexes sequence), updated after remove and insert data actions.\n   */\n  register(uniqueName, indexMap) {\n    if (this.collection.has(uniqueName) === false) {\n      this.collection.set(uniqueName, indexMap);\n\n      indexMap.addLocalHook('change', () => this.runLocalHooks('change', indexMap));\n\n      registeredMaps += 1;\n    }\n  }\n\n  /**\n   * Unregister custom index map.\n   *\n   * @param {string} name Name of the index map.\n   */\n  unregister(name) {\n    const indexMap = this.collection.get(name);\n\n    if (isDefined(indexMap)) {\n      indexMap.destroy();\n      this.collection.delete(name);\n\n      this.runLocalHooks('change', indexMap);\n\n      registeredMaps -= 1;\n    }\n  }\n\n  /**\n   * Unregisters and destroys all collected index map instances.\n   */\n  unregisterAll() {\n    this.collection.forEach((indexMap, name) => this.unregister(name));\n    this.collection.clear();\n  }\n\n  /**\n   * Get index map for the provided name.\n   *\n   * @param {string} [name] Name of the index map.\n   * @returns {Array|IndexMap}\n   */\n  get(name) {\n    if (isUndefined(name)) {\n      return Array.from(this.collection.values());\n    }\n\n    return this.collection.get(name);\n  }\n\n  /**\n   * Get collection size.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    return this.collection.size;\n  }\n\n  /**\n   * Remove some indexes and corresponding mappings and update values of the others within all collection's index maps.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  removeFromEvery(removedIndexes) {\n    this.collection.forEach((indexMap) => {\n      indexMap.remove(removedIndexes);\n    });\n  }\n\n  /**\n   * Insert new indexes and corresponding mapping and update values of the others all collection's index maps.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the actual list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insertToEvery(insertionIndex, insertedIndexes) {\n    this.collection.forEach((indexMap) => {\n      indexMap.insert(insertionIndex, insertedIndexes);\n    });\n  }\n\n  /**\n   * Set default values to index maps within collection.\n   *\n   * @param {number} length Destination length for all stored maps.\n   */\n  initEvery(length) {\n    this.collection.forEach((indexMap) => {\n      indexMap.init(length);\n    });\n  }\n}\n\nmixin(MapCollection, localHooks);\n\n/**\n * @returns {number}\n */\nexport function getRegisteredMapsCounter() {\n  return registeredMaps;\n}\n","import { ChangesObserver } from './observer';\nimport { arrayDiff } from './utils';\n\n/**\n * The ChangesObservable module is an object that represents a resource that provides\n * the ability to observe the changes that happened in the index map indexes during\n * the code running.\n *\n * @private\n * @class ChangesObservable\n */\nexport class ChangesObservable {\n  /**\n   * The list of registered ChangesObserver instances.\n   *\n   * @type {ChangesObserver[]}\n   */\n  #observers = new Set();\n  /**\n   * An array with default values that act as a base array that will be compared with\n   * the last saved index state. The changes are generated and immediately send through\n   * the newly created ChangesObserver object. Thanks to that, the observer initially has\n   * all information about what indexes are currently changed.\n   *\n   * @type {Array}\n   */\n  #indexMatrix = [];\n  /**\n   * An array that holds the indexes state that is currently valid. The value is changed on every\n   * index mapper cache update.\n   *\n   * @type {Array}\n   */\n  #currentIndexState = [];\n  /**\n   * The flag determines if the observable is initialized or not. Not initialized object creates\n   * index matrix once while emitting new changes.\n   *\n   * @type {boolean}\n   */\n  #isMatrixIndexesInitialized = false;\n  /**\n   * The initial index value allows control from what value the index matrix array will be created.\n   * Changing that value changes how the array diff generates the changes for the initial data\n   * sent to the subscribers. For example, the changes can be triggered by detecting the changes\n   * from `false` to `true` value or vice versa. Generally, it depends on which index map type\n   * the Observable will work with. For \"hiding\" or \"trimming\" index types, it will be boolean\n   * values. For various index maps, it can be anything, but I suspect that the most appropriate\n   * initial value will be \"undefined\" in that case.\n   *\n   * @type {boolean}\n   */\n  #initialIndexValue = false;\n\n  constructor({ initialIndexValue } = {}) {\n    this.#initialIndexValue = initialIndexValue ?? false;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Creates and returns a new instance of the ChangesObserver object. The resource\n   * allows subscribing to the index changes that during the code running may change.\n   * Changes are emitted as an array of the index change. Each change is represented\n   * separately as an object with `op`, `index`, `oldValue`, and `newValue` props.\n   *\n   * For example:\n   * ```\n   * [\n   *   { op: 'replace', index: 1, oldValue: false, newValue: true },\n   *   { op: 'replace', index: 3, oldValue: false, newValue: true },\n   *   { op: 'insert', index: 4, oldValue: false, newValue: true },\n   * ]\n   * // or when the new index map changes have less indexes\n   * [\n   *   { op: 'replace', index: 1, oldValue: false, newValue: true },\n   *   { op: 'remove', index: 4, oldValue: false, newValue: true },\n   * ]\n   * ```\n   *\n   * @returns {ChangesObserver}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  createObserver() {\n    const observer = new ChangesObserver();\n\n    this.#observers.add(observer);\n\n    observer.addLocalHook('unsubscribe', () => {\n      this.#observers.delete(observer);\n    });\n\n    observer._writeInitialChanges(arrayDiff(this.#indexMatrix, this.#currentIndexState));\n\n    return observer;\n  }\n\n  /**\n   * The method is an entry point for triggering new index map changes. Emitting the\n   * changes triggers comparing algorithm which compares last saved state with a new\n   * state. When there are some differences, the changes are sent to all subscribers.\n   *\n   * @param {Array} indexesState An array with index map state.\n   */\n  emit(indexesState) {\n    let currentIndexState = this.#currentIndexState;\n\n    if (!this.#isMatrixIndexesInitialized || this.#indexMatrix.length !== indexesState.length) {\n      if (indexesState.length === 0) {\n        indexesState = new Array(currentIndexState.length).fill(this.#initialIndexValue);\n      } else {\n        this.#indexMatrix = new Array(indexesState.length).fill(this.#initialIndexValue);\n      }\n\n      if (!this.#isMatrixIndexesInitialized) {\n        this.#isMatrixIndexesInitialized = true;\n        currentIndexState = this.#indexMatrix;\n      }\n    }\n\n    const changes = arrayDiff(currentIndexState, indexesState);\n\n    this.#observers.forEach(observer => observer._write(changes));\n    this.#currentIndexState = indexesState;\n  }\n}\n","import { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\n/**\n * The ChangesObserver module is an object that represents a disposable resource\n * provided by the ChangesObservable module.\n *\n * @class ChangesObserver\n */\nexport class ChangesObserver {\n  /**\n   * The field holds initial changes that will be used to notify the callbacks added using\n   * subscribe method. Regardless of the moment of listening for changes, the subscriber\n   * will be notified once with all changes made before subscribing.\n   *\n   * @type {Array}\n   */\n  #currentInitialChanges = [];\n\n  /**\n   * Subscribes to the observer.\n   *\n   * @param {Function} callback A function that will be called when the new changes will appear.\n   * @returns {ChangesObserver}\n   */\n  subscribe(callback) {\n    this.addLocalHook('change', callback);\n    this._write(this.#currentInitialChanges);\n\n    return this;\n  }\n\n  /**\n   * Unsubscribes all subscriptions. After the method call, the observer would not produce\n   * any new events.\n   *\n   * @returns {ChangesObserver}\n   */\n  unsubscribe() {\n    this.runLocalHooks('unsubscribe');\n    this.clearLocalHooks();\n\n    return this;\n  }\n\n  /**\n   * The write method is executed by the ChangesObservable module. The module produces all\n   * changes events that are distributed further by the observer.\n   *\n   * @private\n   * @param {object} changes The chunk of changes produced by the ChangesObservable module.\n   * @returns {ChangesObserver}\n   */\n  _write(changes) {\n    if (changes.length > 0) {\n      this.runLocalHooks('change', changes);\n    }\n\n    return this;\n  }\n\n  /**\n   * The write method is executed by the ChangesObservable module. The module produces initial\n   * changes that will be used to notify new subscribers.\n   *\n   * @private\n   * @param {object} initialChanges The chunk of changes produced by the ChangesObservable module.\n   */\n  _writeInitialChanges(initialChanges) {\n    this.#currentInitialChanges = initialChanges;\n  }\n}\n\nmixin(ChangesObserver, localHooks);\n","/**\n * An array diff implementation. The function iterates through the arrays and depends\n * on the diff results, collect the changes as a list of the objects.\n *\n * Each object contains information about the differences in the indexes of the arrays.\n * The changes also contain data about the new and previous array values.\n *\n * @private\n * @param {Array} baseArray The base array to diff from.\n * @param {Array} newArray The new array to compare with.\n * @returns {Array}\n */\nexport function arrayDiff(baseArray, newArray) {\n  const changes = [];\n  let i = 0;\n  let j = 0;\n\n  /* eslint-disable no-plusplus */\n  for (; i < baseArray.length && j < newArray.length; i++, j++) {\n    if (baseArray[i] !== newArray[j]) {\n      changes.push({\n        op: 'replace',\n        index: j,\n        oldValue: baseArray[i],\n        newValue: newArray[j],\n      });\n    }\n  }\n\n  for (; i < newArray.length; i++) {\n    changes.push({\n      op: 'insert',\n      index: i,\n      oldValue: undefined,\n      newValue: newArray[i],\n    });\n  }\n\n  for (; j < baseArray.length; j++) {\n    changes.push({\n      op: 'remove',\n      index: j,\n      oldValue: baseArray[j],\n      newValue: undefined,\n    });\n  }\n\n  return changes;\n}\n","import { isObject, deepClone } from '../helpers/object';\nimport { arrayEach } from './../helpers/array';\nimport { isUndefined } from '../helpers/mixed';\nimport { extendNotExistingKeys, normalizeLanguageCode, warnUserAboutLanguageRegistration } from './utils';\nimport staticRegister from '../utils/staticRegister';\nimport { getPhraseFormatters } from './phraseFormatters';\nimport DEFAULT_DICTIONARY from './languages/en-US';\n\nimport * as _dictionaryKeys from './constants';\n\nexport const dictionaryKeys = _dictionaryKeys;\nexport const DEFAULT_LANGUAGE_CODE = DEFAULT_DICTIONARY.languageCode;\n\nconst {\n  register: registerGloballyLanguageDictionary,\n  getItem: getGlobalLanguageDictionary,\n  hasItem: hasGlobalLanguageDictionary,\n  getValues: getGlobalLanguagesDictionaries\n} = staticRegister('languagesDictionaries');\n\n/**\n * Register automatically the default language dictionary.\n */\nregisterLanguageDictionary(DEFAULT_DICTIONARY);\n\n/**\n * Register language dictionary for specific language code.\n *\n * @param {string|object} languageCodeOrDictionary Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE' or object representing dictionary.\n * @param {object} dictionary Dictionary for specific language (optional if first parameter has already dictionary).\n * @returns {object}\n */\nexport function registerLanguageDictionary(languageCodeOrDictionary, dictionary) {\n  let languageCode = languageCodeOrDictionary;\n  let dictionaryObject = dictionary;\n\n  // Dictionary passed as first argument.\n  if (isObject(languageCodeOrDictionary)) {\n    dictionaryObject = languageCodeOrDictionary;\n    languageCode = dictionaryObject.languageCode;\n  }\n\n  extendLanguageDictionary(languageCode, dictionaryObject);\n  registerGloballyLanguageDictionary(languageCode, deepClone(dictionaryObject));\n\n  // We do not allow user to work with dictionary by reference, it can cause lot of bugs.\n  return deepClone(dictionaryObject);\n}\n\n/**\n * Extend handled dictionary by default language dictionary. As result, if any dictionary key isn't defined for specific language, it will be filled with default language value (\"dictionary gaps\" are supplemented).\n *\n * @private\n * @param {string} languageCode Language code.\n * @param {object} dictionary Dictionary which is extended.\n */\nfunction extendLanguageDictionary(languageCode, dictionary) {\n  if (languageCode !== DEFAULT_LANGUAGE_CODE) {\n    extendNotExistingKeys(dictionary, getGlobalLanguageDictionary(DEFAULT_LANGUAGE_CODE));\n  }\n}\n\n/**\n * Get language dictionary for specific language code.\n *\n * @param {string} languageCode Language code.\n * @returns {object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nexport function getLanguageDictionary(languageCode) {\n  if (!hasLanguageDictionary(languageCode)) {\n    return null;\n  }\n\n  return deepClone(getGlobalLanguageDictionary(languageCode));\n}\n\n/**\n *\n * Get if language with specified language code was registered.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {boolean}\n */\nexport function hasLanguageDictionary(languageCode) {\n  return hasGlobalLanguageDictionary(languageCode);\n}\n\n/**\n * Get default language dictionary.\n *\n * @returns {object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nexport function getDefaultLanguageDictionary() {\n  return DEFAULT_DICTIONARY;\n}\n\n/**\n * Get registered language dictionaries.\n *\n * @returns {Array}\n */\nexport function getLanguagesDictionaries() {\n  return getGlobalLanguagesDictionaries();\n}\n\n/**\n * Get phrase for specified dictionary key.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @param {string} dictionaryKey Constant which is dictionary key.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {string}\n */\nexport function getTranslatedPhrase(languageCode, dictionaryKey, argumentsForFormatters) {\n  const languageDictionary = getLanguageDictionary(languageCode);\n\n  if (languageDictionary === null) {\n    return null;\n  }\n\n  const phrasePropositions = languageDictionary[dictionaryKey];\n\n  if (isUndefined(phrasePropositions)) {\n    return null;\n  }\n\n  const formattedPhrase = getFormattedPhrase(phrasePropositions, argumentsForFormatters);\n\n  if (Array.isArray(formattedPhrase)) {\n    return formattedPhrase[0];\n  }\n\n  return formattedPhrase;\n}\n\n/**\n * Get formatted phrase from phrases propositions for specified dictionary key.\n *\n * @private\n * @param {Array|string} phrasePropositions List of phrase propositions.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {Array|string}\n */\nfunction getFormattedPhrase(phrasePropositions, argumentsForFormatters) {\n  let formattedPhrasePropositions = phrasePropositions;\n\n  arrayEach(getPhraseFormatters(), (formatter) => {\n    formattedPhrasePropositions = formatter(phrasePropositions, argumentsForFormatters);\n  });\n\n  return formattedPhrasePropositions;\n}\n\n/**\n * Returns valid language code. If the passed language code doesn't exist default one will be used.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {string}\n */\nexport function getValidLanguageCode(languageCode) {\n  let normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n  if (!hasLanguageDictionary(normalizedLanguageCode)) {\n    normalizedLanguageCode = DEFAULT_LANGUAGE_CODE;\n\n    warnUserAboutLanguageRegistration(languageCode);\n  }\n\n  return normalizedLanguageCode;\n}\n","import { isUndefined, isDefined } from './../helpers/mixed';\nimport { objectEach } from './../helpers/object';\nimport { error } from './../helpers/console';\nimport { toSingleLine } from './../helpers/templateLiteralTag';\n\n/**\n * Perform shallow extend of a target object with only this extension's properties which doesn't exist in the target.\n *\n * TODO: Maybe it should be moved to global helpers? It's changed `extend` function.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n * @returns {object}\n */\nexport function extendNotExistingKeys(target, extension) {\n  objectEach(extension, (value, key) => {\n    if (isUndefined(target[key])) {\n      target[key] = value;\n    }\n  });\n\n  return target;\n}\n\n/**\n * Create range of values basing on cell indexes. For example, it will create below ranges for specified function arguments:\n *\n * createCellHeadersRange(2, 7) => `2-7`\n * createCellHeadersRange(7, 2) => `2-7`\n * createCellHeadersRange(0, 4, 'A', 'D') => `A-D`\n * createCellHeadersRange(4, 0, 'D', 'A') => `A-D`.\n *\n * @param {number} firstRowIndex Index of \"first\" cell.\n * @param {number} nextRowIndex Index of \"next\" cell.\n * @param {*} fromValue Value which will represent \"first\" cell.\n * @param {*} toValue Value which will represent \"next\" cell.\n * @returns {string} Value representing range i.e. A-Z, 11-15.\n */\nexport function createCellHeadersRange(firstRowIndex, nextRowIndex, fromValue = firstRowIndex, toValue = nextRowIndex) {\n  // Will swap `fromValue` with `toValue` if it's necessary.\n  let [from, to] = [fromValue, toValue];\n\n  if (firstRowIndex > nextRowIndex) {\n    [from, to] = [to, from];\n  }\n\n  return `${from}-${to}`;\n}\n\n/**\n * Normalize language code. It takes handled languageCode proposition and change it to proper languageCode.\n * For example, when it takes `eN-us` as parameter it return `en-US`.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {string}\n */\nexport function normalizeLanguageCode(languageCode) {\n  const languageCodePattern = /^([a-zA-Z]{2})-([a-zA-Z]{2})$/;\n  const partsOfLanguageCode = languageCodePattern.exec(languageCode);\n\n  if (partsOfLanguageCode) {\n    return `${partsOfLanguageCode[1].toLowerCase()}-${partsOfLanguageCode[2].toUpperCase()}`;\n  }\n\n  return languageCode;\n}\n\n/**\n *\n * Warn user if there is no registered language.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n */\nexport function warnUserAboutLanguageRegistration(languageCode) {\n  if (isDefined(languageCode)) {\n    error(toSingleLine`Language with code \"${languageCode}\" was not found. You should register particular language\\x20\n    before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.`);\n  }\n}\n","import staticRegister from './../../utils/staticRegister';\nimport pluralizeFn from './pluralize';\n\nconst {\n  register: registerGloballyPhraseFormatter,\n  getValues: getGlobalPhraseFormatters,\n} = staticRegister('phraseFormatters');\n\n/**\n * Register phrase formatter.\n *\n * @param {string} name Name of formatter.\n * @param {Function} formatterFn Function which will be applied on phrase propositions. It will transform them if it's possible.\n */\nexport function register(name, formatterFn) {\n  registerGloballyPhraseFormatter(name, formatterFn);\n}\n\n/**\n * Get all registered previously formatters.\n *\n * @returns {Array}\n */\nexport function getAll() {\n  return getGlobalPhraseFormatters();\n}\n\nexport {\n  register as registerPhraseFormatter,\n  getAll as getPhraseFormatters\n};\n\nregister('pluralize', pluralizeFn);\n","/**\n * Try to choose plural form from available phrase propositions.\n *\n * @param {Array} phrasePropositions List of phrases propositions.\n * @param {number} pluralForm Number determining which phrase form should be used.\n *\n * @returns {string|Array} One particular phrase if it's possible, list of unchanged phrase propositions otherwise.\n */\nexport default function pluralize(phrasePropositions, pluralForm) {\n  const isPluralizable = Array.isArray(phrasePropositions) && Number.isInteger(pluralForm);\n\n  if (isPluralizable) {\n    return phrasePropositions[pluralForm];\n  }\n\n  return phrasePropositions;\n}\n","/**\n * @preserve\n * Authors: Handsoncode\n * Last updated: Nov 15, 2017\n *\n * Description: Definition file for English - United States language-country.\n */\nimport * as C from '../constants';\n\nconst dictionary = {\n  languageCode: 'en-US',\n  [C.CONTEXTMENU_ITEMS_NO_ITEMS]: 'No available options',\n  [C.CONTEXTMENU_ITEMS_ROW_ABOVE]: 'Insert row above',\n  [C.CONTEXTMENU_ITEMS_ROW_BELOW]: 'Insert row below',\n  [C.CONTEXTMENU_ITEMS_INSERT_LEFT]: 'Insert column left',\n  [C.CONTEXTMENU_ITEMS_INSERT_RIGHT]: 'Insert column right',\n  [C.CONTEXTMENU_ITEMS_REMOVE_ROW]: ['Remove row', 'Remove rows'],\n  [C.CONTEXTMENU_ITEMS_REMOVE_COLUMN]: ['Remove column', 'Remove columns'],\n  [C.CONTEXTMENU_ITEMS_UNDO]: 'Undo',\n  [C.CONTEXTMENU_ITEMS_REDO]: 'Redo',\n  [C.CONTEXTMENU_ITEMS_READ_ONLY]: 'Read only',\n  [C.CONTEXTMENU_ITEMS_CLEAR_COLUMN]: 'Clear column',\n\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT]: 'Alignment',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]: 'Left',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]: 'Center',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]: 'Right',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]: 'Justify',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]: 'Top',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]: 'Middle',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]: 'Bottom',\n\n  [C.CONTEXTMENU_ITEMS_FREEZE_COLUMN]: 'Freeze column',\n  [C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]: 'Unfreeze column',\n\n  [C.CONTEXTMENU_ITEMS_BORDERS]: 'Borders',\n  [C.CONTEXTMENU_ITEMS_BORDERS_TOP]: 'Top',\n  [C.CONTEXTMENU_ITEMS_BORDERS_RIGHT]: 'Right',\n  [C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]: 'Bottom',\n  [C.CONTEXTMENU_ITEMS_BORDERS_LEFT]: 'Left',\n  [C.CONTEXTMENU_ITEMS_REMOVE_BORDERS]: 'Remove border(s)',\n\n  [C.CONTEXTMENU_ITEMS_ADD_COMMENT]: 'Add comment',\n  [C.CONTEXTMENU_ITEMS_EDIT_COMMENT]: 'Edit comment',\n  [C.CONTEXTMENU_ITEMS_REMOVE_COMMENT]: 'Delete comment',\n  [C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]: 'Read-only comment',\n\n  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Merge cells',\n  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Unmerge cells',\n\n  [C.CONTEXTMENU_ITEMS_COPY]: 'Copy',\n  [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copy with header', 'Copy with headers'],\n  [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Copy with group header', 'Copy with group headers'],\n  [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copy header only', 'Copy headers only'],\n  [C.CONTEXTMENU_ITEMS_CUT]: 'Cut',\n\n  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Insert child row',\n  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Detach from parent',\n\n  [C.CONTEXTMENU_ITEMS_HIDE_COLUMN]: ['Hide column', 'Hide columns'],\n  [C.CONTEXTMENU_ITEMS_SHOW_COLUMN]: ['Show column', 'Show columns'],\n\n  [C.CONTEXTMENU_ITEMS_HIDE_ROW]: ['Hide row', 'Hide rows'],\n  [C.CONTEXTMENU_ITEMS_SHOW_ROW]: ['Show row', 'Show rows'],\n\n  [C.FILTERS_CONDITIONS_NONE]: 'None',\n  [C.FILTERS_CONDITIONS_EMPTY]: 'Is empty',\n  [C.FILTERS_CONDITIONS_NOT_EMPTY]: 'Is not empty',\n  [C.FILTERS_CONDITIONS_EQUAL]: 'Is equal to',\n  [C.FILTERS_CONDITIONS_NOT_EQUAL]: 'Is not equal to',\n  [C.FILTERS_CONDITIONS_BEGINS_WITH]: 'Begins with',\n  [C.FILTERS_CONDITIONS_ENDS_WITH]: 'Ends with',\n  [C.FILTERS_CONDITIONS_CONTAINS]: 'Contains',\n  [C.FILTERS_CONDITIONS_NOT_CONTAIN]: 'Does not contain',\n  [C.FILTERS_CONDITIONS_GREATER_THAN]: 'Greater than',\n  [C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]: 'Greater than or equal to',\n  [C.FILTERS_CONDITIONS_LESS_THAN]: 'Less than',\n  [C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]: 'Less than or equal to',\n  [C.FILTERS_CONDITIONS_BETWEEN]: 'Is between',\n  [C.FILTERS_CONDITIONS_NOT_BETWEEN]: 'Is not between',\n  [C.FILTERS_CONDITIONS_AFTER]: 'After',\n  [C.FILTERS_CONDITIONS_BEFORE]: 'Before',\n  [C.FILTERS_CONDITIONS_TODAY]: 'Today',\n  [C.FILTERS_CONDITIONS_TOMORROW]: 'Tomorrow',\n  [C.FILTERS_CONDITIONS_YESTERDAY]: 'Yesterday',\n\n  [C.FILTERS_VALUES_BLANK_CELLS]: 'Blank cells',\n\n  [C.FILTERS_DIVS_FILTER_BY_CONDITION]: 'Filter by condition',\n  [C.FILTERS_DIVS_FILTER_BY_VALUE]: 'Filter by value',\n\n  [C.FILTERS_LABELS_CONJUNCTION]: 'And',\n  [C.FILTERS_LABELS_DISJUNCTION]: 'Or',\n\n  [C.FILTERS_BUTTONS_SELECT_ALL]: 'Select all',\n  [C.FILTERS_BUTTONS_CLEAR]: 'Clear',\n  [C.FILTERS_BUTTONS_OK]: 'OK',\n  [C.FILTERS_BUTTONS_CANCEL]: 'Cancel',\n\n  [C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]: 'Search',\n  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',\n  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',\n\n  [C.CHECKBOX_CHECKED]: 'Checked',\n  [C.CHECKBOX_UNCHECKED]: 'Unchecked',\n};\n\nexport default dictionary;\n","/**\n * Constants for parts of translation.\n */\n\nexport const CONTEXT_MENU_ITEMS_NAMESPACE = 'ContextMenu:items';\n\nconst CM_ALIAS = CONTEXT_MENU_ITEMS_NAMESPACE;\n\nexport const CONTEXTMENU_ITEMS_NO_ITEMS = `${CM_ALIAS}.noItems`;\nexport const CONTEXTMENU_ITEMS_ROW_ABOVE = `${CM_ALIAS}.insertRowAbove`;\nexport const CONTEXTMENU_ITEMS_ROW_BELOW = `${CM_ALIAS}.insertRowBelow`;\nexport const CONTEXTMENU_ITEMS_INSERT_LEFT = `${CM_ALIAS}.insertColumnOnTheLeft`;\nexport const CONTEXTMENU_ITEMS_INSERT_RIGHT = `${CM_ALIAS}.insertColumnOnTheRight`;\nexport const CONTEXTMENU_ITEMS_REMOVE_ROW = `${CM_ALIAS}.removeRow`;\nexport const CONTEXTMENU_ITEMS_REMOVE_COLUMN = `${CM_ALIAS}.removeColumn`;\nexport const CONTEXTMENU_ITEMS_UNDO = `${CM_ALIAS}.undo`;\nexport const CONTEXTMENU_ITEMS_REDO = `${CM_ALIAS}.redo`;\nexport const CONTEXTMENU_ITEMS_READ_ONLY = `${CM_ALIAS}.readOnly`;\nexport const CONTEXTMENU_ITEMS_CLEAR_COLUMN = `${CM_ALIAS}.clearColumn`;\n\nexport const CONTEXTMENU_ITEMS_COPY = `${CM_ALIAS}.copy`;\nexport const CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS = `${CM_ALIAS}.copyWithHeaders`;\nexport const CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS = `${CM_ALIAS}.copyWithGroupHeaders`;\nexport const CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY = `${CM_ALIAS}.copyHeadersOnly`;\nexport const CONTEXTMENU_ITEMS_CUT = `${CM_ALIAS}.cut`;\n\nexport const CONTEXTMENU_ITEMS_FREEZE_COLUMN = `${CM_ALIAS}.freezeColumn`;\nexport const CONTEXTMENU_ITEMS_UNFREEZE_COLUMN = `${CM_ALIAS}.unfreezeColumn`;\n\nexport const CONTEXTMENU_ITEMS_MERGE_CELLS = `${CM_ALIAS}.mergeCells`;\nexport const CONTEXTMENU_ITEMS_UNMERGE_CELLS = `${CM_ALIAS}.unmergeCells`;\n\nexport const CONTEXTMENU_ITEMS_ADD_COMMENT = `${CM_ALIAS}.addComment`;\nexport const CONTEXTMENU_ITEMS_EDIT_COMMENT = `${CM_ALIAS}.editComment`;\nexport const CONTEXTMENU_ITEMS_REMOVE_COMMENT = `${CM_ALIAS}.removeComment`;\nexport const CONTEXTMENU_ITEMS_READ_ONLY_COMMENT = `${CM_ALIAS}.readOnlyComment`;\n\nexport const CONTEXTMENU_ITEMS_ALIGNMENT = `${CM_ALIAS}.align`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_LEFT = `${CM_ALIAS}.align.left`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_CENTER = `${CM_ALIAS}.align.center`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT = `${CM_ALIAS}.align.right`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY = `${CM_ALIAS}.align.justify`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_TOP = `${CM_ALIAS}.align.top`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE = `${CM_ALIAS}.align.middle`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM = `${CM_ALIAS}.align.bottom`;\n\nexport const CONTEXTMENU_ITEMS_BORDERS = `${CM_ALIAS}.borders`;\nexport const CONTEXTMENU_ITEMS_BORDERS_TOP = `${CM_ALIAS}.borders.top`;\nexport const CONTEXTMENU_ITEMS_BORDERS_RIGHT = `${CM_ALIAS}.borders.right`;\nexport const CONTEXTMENU_ITEMS_BORDERS_BOTTOM = `${CM_ALIAS}.borders.bottom`;\nexport const CONTEXTMENU_ITEMS_BORDERS_LEFT = `${CM_ALIAS}.borders.left`;\nexport const CONTEXTMENU_ITEMS_REMOVE_BORDERS = `${CM_ALIAS}.borders.remove`;\n\nexport const CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD = `${CM_ALIAS}.nestedHeaders.insertChildRow`; // eslint-disable-line max-len\nexport const CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD = `${CM_ALIAS}.nestedHeaders.detachFromParent`; // eslint-disable-line max-len\n\nexport const CONTEXTMENU_ITEMS_HIDE_COLUMN = `${CM_ALIAS}.hideColumn`;\nexport const CONTEXTMENU_ITEMS_SHOW_COLUMN = `${CM_ALIAS}.showColumn`;\n\nexport const CONTEXTMENU_ITEMS_HIDE_ROW = `${CM_ALIAS}.hideRow`;\nexport const CONTEXTMENU_ITEMS_SHOW_ROW = `${CM_ALIAS}.showRow`;\n\nexport const FILTERS_NAMESPACE = 'Filters:';\nexport const FILTERS_CONDITIONS_NAMESPACE = `${FILTERS_NAMESPACE}conditions`;\nexport const FILTERS_CONDITIONS_NONE = `${FILTERS_CONDITIONS_NAMESPACE}.none`;\nexport const FILTERS_CONDITIONS_EMPTY = `${FILTERS_CONDITIONS_NAMESPACE}.isEmpty`;\nexport const FILTERS_CONDITIONS_NOT_EMPTY = `${FILTERS_CONDITIONS_NAMESPACE}.isNotEmpty`;\nexport const FILTERS_CONDITIONS_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.isEqualTo`;\nexport const FILTERS_CONDITIONS_NOT_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.isNotEqualTo`;\nexport const FILTERS_CONDITIONS_BEGINS_WITH = `${FILTERS_CONDITIONS_NAMESPACE}.beginsWith`;\nexport const FILTERS_CONDITIONS_ENDS_WITH = `${FILTERS_CONDITIONS_NAMESPACE}.endsWith`;\nexport const FILTERS_CONDITIONS_CONTAINS = `${FILTERS_CONDITIONS_NAMESPACE}.contains`;\nexport const FILTERS_CONDITIONS_NOT_CONTAIN = `${FILTERS_CONDITIONS_NAMESPACE}.doesNotContain`;\nexport const FILTERS_CONDITIONS_BY_VALUE = `${FILTERS_CONDITIONS_NAMESPACE}.byValue`;\nexport const FILTERS_CONDITIONS_GREATER_THAN = `${FILTERS_CONDITIONS_NAMESPACE}.greaterThan`;\nexport const FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.greaterThanOrEqualTo`;\nexport const FILTERS_CONDITIONS_LESS_THAN = `${FILTERS_CONDITIONS_NAMESPACE}.lessThan`;\nexport const FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.lessThanOrEqualTo`;\nexport const FILTERS_CONDITIONS_BETWEEN = `${FILTERS_CONDITIONS_NAMESPACE}.isBetween`;\nexport const FILTERS_CONDITIONS_NOT_BETWEEN = `${FILTERS_CONDITIONS_NAMESPACE}.isNotBetween`;\nexport const FILTERS_CONDITIONS_AFTER = `${FILTERS_CONDITIONS_NAMESPACE}.after`;\nexport const FILTERS_CONDITIONS_BEFORE = `${FILTERS_CONDITIONS_NAMESPACE}.before`;\nexport const FILTERS_CONDITIONS_TODAY = `${FILTERS_CONDITIONS_NAMESPACE}.today`;\nexport const FILTERS_CONDITIONS_TOMORROW = `${FILTERS_CONDITIONS_NAMESPACE}.tomorrow`;\nexport const FILTERS_CONDITIONS_YESTERDAY = `${FILTERS_CONDITIONS_NAMESPACE}.yesterday`;\n\nexport const FILTERS_DIVS_FILTER_BY_CONDITION = `${FILTERS_NAMESPACE}labels.filterByCondition`;\nexport const FILTERS_DIVS_FILTER_BY_VALUE = `${FILTERS_NAMESPACE}labels.filterByValue`;\n\nexport const FILTERS_LABELS_CONJUNCTION = `${FILTERS_NAMESPACE}labels.conjunction`;\nexport const FILTERS_LABELS_DISJUNCTION = `${FILTERS_NAMESPACE}labels.disjunction`;\n\nexport const FILTERS_VALUES_BLANK_CELLS = `${FILTERS_NAMESPACE}values.blankCells`;\n\nexport const FILTERS_BUTTONS_SELECT_ALL = `${FILTERS_NAMESPACE}buttons.selectAll`;\nexport const FILTERS_BUTTONS_CLEAR = `${FILTERS_NAMESPACE}buttons.clear`;\nexport const FILTERS_BUTTONS_OK = `${FILTERS_NAMESPACE}buttons.ok`;\nexport const FILTERS_BUTTONS_CANCEL = `${FILTERS_NAMESPACE}buttons.cancel`;\n\nexport const FILTERS_BUTTONS_PLACEHOLDER_SEARCH = `${FILTERS_NAMESPACE}buttons.placeholder.search`;\nexport const FILTERS_BUTTONS_PLACEHOLDER_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.value`;\nexport const FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.secondValue`;\n\nexport const CHECKBOX_RENDERER_NAMESPACE = 'CheckboxRenderer:';\nexport const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;\nexport const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;\n","import Selection from './selection';\nimport { handleMouseEvent } from './mouseEventHandler';\nimport {\n  detectSelectionType,\n  normalizeSelectionFactory,\n} from './utils';\n\nexport * from './highlight/highlight';\nexport {\n  handleMouseEvent,\n  Selection,\n  detectSelectionType,\n  normalizeSelectionFactory\n};\n","import Highlight, {\n  AREA_TYPE,\n  HEADER_TYPE,\n  FOCUS_TYPE,\n} from './highlight/highlight';\nimport SelectionRange from './range';\nimport { createObjectPropListener, mixin } from './../helpers/object';\nimport { isUndefined } from './../helpers/mixed';\nimport { clamp } from './../helpers/number';\nimport { arrayEach } from './../helpers/array';\nimport localHooks from './../mixins/localHooks';\nimport Transformation from './transformation';\nimport {\n  detectSelectionType,\n  normalizeSelectionFactory,\n  SELECTION_TYPE_EMPTY,\n  SELECTION_TYPE_UNRECOGNIZED,\n} from './utils';\nimport { toSingleLine } from './../helpers/templateLiteralTag';\nimport { A11Y_SELECTED } from '../helpers/a11y';\n\n/**\n * @class Selection\n * @util\n */\nclass Selection {\n  /**\n   * Handsontable settings instance.\n   *\n   * @type {GridSettings}\n   */\n  settings;\n  /**\n   * An additional object with dynamically defined properties which describes table state.\n   *\n   * @type {object}\n   */\n  tableProps;\n  /**\n   * The flag which determines if the selection is in progress.\n   *\n   * @type {boolean}\n   */\n  inProgress = false;\n  /**\n   * Selection data layer (handle visual coordinates).\n   *\n   * @type {SelectionRange}\n   */\n  selectedRange = new SelectionRange((highlight, from, to) => {\n    return this.tableProps.createCellRange(highlight, from, to);\n  });\n  /**\n   * Visualization layer.\n   *\n   * @type {Highlight}\n   */\n  highlight;\n  /**\n   * The module for modifying coordinates of the start and end selection.\n   *\n   * @type {Transformation}\n   */\n  #transformation;\n  /**\n   * The module for modifying coordinates of the focus selection.\n   *\n   * @type {Transformation}\n   */\n  #focusTransformation;\n  /**\n   * The collection of the selection layer levels where the whole row was selected using the row header or\n   * the corner header.\n   *\n   * @type {Set<number>}\n   */\n  selectedByRowHeader = new Set();\n  /**\n   * The collection of the selection layer levels where the whole column was selected using the column header or\n   * the corner header.\n   *\n   * @type {Set<number>}\n   */\n  selectedByColumnHeader = new Set();\n  /**\n   * The flag which determines if the focus selection was changed.\n   *\n   * @type {boolean}\n   */\n  #isFocusSelectionChanged = false;\n  /**\n   * When sets disable highlighting the headers even when the logical coordinates points on them.\n   *\n   * @type {boolean}\n   */\n  #disableHeadersHighlight = false;\n  /**\n   * The source of the selection. It can be one of the following values: `mouse`, `unknown` or any other string.\n   *\n   * @type {'mouse' | 'unknown' | string}\n   */\n  #selectionSource = 'unknown';\n  /**\n   * The number of expected layers. It is used mostly to track when the last selection layer of non-contiguous\n   * selection is applied, thus the viewport scroll is triggered.\n   *\n   * @param {number}\n   */\n  #expectedLayersCount = -1;\n\n  constructor(settings, tableProps) {\n    this.settings = settings;\n    this.tableProps = tableProps;\n    this.highlight = new Highlight({\n      headerClassName: settings.currentHeaderClassName,\n      activeHeaderClassName: settings.activeHeaderClassName,\n      rowClassName: settings.currentRowClassName,\n      columnClassName: settings.currentColClassName,\n      cellAttributes: [A11Y_SELECTED()],\n      rowIndexMapper: this.tableProps.rowIndexMapper,\n      columnIndexMapper: this.tableProps.columnIndexMapper,\n      disabledCellSelection: (row, column) => this.tableProps.isDisabledCellSelection(row, column),\n      cellCornerVisible: (...args) => this.isCellCornerVisible(...args),\n      areaCornerVisible: (...args) => this.isAreaCornerVisible(...args),\n      visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),\n      renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),\n      createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),\n      createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to),\n    });\n    this.#transformation = new Transformation(this.selectedRange, {\n      rowIndexMapper: this.tableProps.rowIndexMapper,\n      columnIndexMapper: this.tableProps.columnIndexMapper,\n      countRenderableRows: () => this.tableProps.countRenderableRows(),\n      countRenderableColumns: () => this.tableProps.countRenderableColumns(),\n      visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),\n      renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),\n      findFirstNonHiddenRenderableRow: (...args) => this.tableProps.findFirstNonHiddenRenderableRow(...args),\n      findFirstNonHiddenRenderableColumn: (...args) => this.tableProps.findFirstNonHiddenRenderableColumn(...args),\n      createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),\n      fixedRowsBottom: () => settings.fixedRowsBottom,\n      minSpareRows: () => settings.minSpareRows,\n      minSpareCols: () => settings.minSpareCols,\n      autoWrapRow: () => settings.autoWrapRow,\n      autoWrapCol: () => settings.autoWrapCol,\n    });\n    this.#focusTransformation = new Transformation(this.selectedRange, {\n      rowIndexMapper: this.tableProps.rowIndexMapper,\n      columnIndexMapper: this.tableProps.columnIndexMapper,\n      countRenderableRows: () => {\n        const range = this.selectedRange.current();\n\n        return this.tableProps.countRenderableRowsInRange(0, range.getOuterBottomEndCorner().row);\n      },\n      countRenderableColumns: () => {\n        const range = this.selectedRange.current();\n\n        return this.tableProps.countRenderableColumnsInRange(0, range.getOuterBottomEndCorner().col);\n      },\n      visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),\n      renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),\n      findFirstNonHiddenRenderableRow: (...args) => this.tableProps.findFirstNonHiddenRenderableRow(...args),\n      findFirstNonHiddenRenderableColumn: (...args) => this.tableProps.findFirstNonHiddenRenderableColumn(...args),\n      createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),\n      fixedRowsBottom: () => 0,\n      minSpareRows: () => 0,\n      minSpareCols: () => 0,\n      autoWrapRow: () => true,\n      autoWrapCol: () => true,\n    });\n\n    this.#transformation.addLocalHook('beforeTransformStart',\n      (...args) => this.runLocalHooks('beforeModifyTransformStart', ...args));\n    this.#transformation.addLocalHook('afterTransformStart',\n      (...args) => this.runLocalHooks('afterModifyTransformStart', ...args));\n    this.#transformation.addLocalHook('beforeTransformEnd',\n      (...args) => this.runLocalHooks('beforeModifyTransformEnd', ...args));\n    this.#transformation.addLocalHook('afterTransformEnd',\n      (...args) => this.runLocalHooks('afterModifyTransformEnd', ...args));\n    this.#transformation.addLocalHook('insertRowRequire',\n      (...args) => this.runLocalHooks('insertRowRequire', ...args));\n    this.#transformation.addLocalHook('insertColRequire',\n      (...args) => this.runLocalHooks('insertColRequire', ...args));\n    this.#transformation.addLocalHook('beforeRowWrap',\n      (...args) => this.runLocalHooks('beforeRowWrap', ...args));\n    this.#transformation.addLocalHook('beforeColumnWrap',\n      (...args) => this.runLocalHooks('beforeColumnWrap', ...args));\n\n    this.#focusTransformation.addLocalHook('beforeTransformStart',\n      (...args) => this.runLocalHooks('beforeModifyTransformFocus', ...args));\n    this.#focusTransformation.addLocalHook('afterTransformStart',\n      (...args) => this.runLocalHooks('afterModifyTransformFocus', ...args));\n  }\n\n  /**\n   * Get data layer for current selection.\n   *\n   * @returns {SelectionRange}\n   */\n  getSelectedRange() {\n    return this.selectedRange;\n  }\n\n  /**\n   * Marks the source of the selection. It can be one of the following values: `mouse`, or any other string.\n   *\n   * @param {'mouse' | 'unknown' | string} sourceName The source name.\n   */\n  markSource(sourceName) {\n    this.#selectionSource = sourceName;\n  }\n\n  /**\n   * Marks end of the selection source. It restores the selection source to default value which is 'unknown'.\n   */\n  markEndSource() {\n    this.#selectionSource = 'unknown';\n  }\n\n  /**\n   * Returns the source of the selection.\n   *\n   * @returns {'mouse' | 'unknown' | string}\n   */\n  getSelectionSource() {\n    return this.#selectionSource;\n  }\n\n  /**\n   * Set the number of expected layers. The method is not obligatory to call. It is used mostly internally\n   * to determine when the last selection layer of non-contiguous is applied, thus the viewport scroll is triggered.\n   *\n   * @param {number} layersCount The number of expected layers.\n   */\n  setExpectedLayers(layersCount) {\n    this.#expectedLayersCount = layersCount;\n  }\n\n  /**\n   * Indicate that selection process began. It sets internally `.inProgress` property to `true`.\n   */\n  begin() {\n    this.inProgress = true;\n  }\n\n  /**\n   * Indicate that selection process finished. It sets internally `.inProgress` property to `false`.\n   */\n  finish() {\n    this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));\n    this.inProgress = false;\n    this.#expectedLayersCount = -1;\n  }\n\n  /**\n   * Check if the process of selecting the cell/cells is in progress.\n   *\n   * @returns {boolean}\n   */\n  isInProgress() {\n    return this.inProgress;\n  }\n\n  /**\n   * Starts selection range on given coordinate object.\n   *\n   * @param {CellCoords} coords Visual coords.\n   * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n   *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n   *                                      the default trigger will be used.\n   * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the\n   *                                   `setRangeEnd` method won't be called on every `setRangeStart` call.\n   * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.\n   */\n  setRangeStart(coords, multipleSelection, fragment = false, highlightCoords = coords) {\n    const isMultipleMode = this.settings.selectionMode === 'multiple';\n    const isMultipleSelection = isUndefined(multipleSelection) ?\n      this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;\n    // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords\n    // should be handled by next methods.\n    const coordsClone = coords.clone();\n\n    this.#isFocusSelectionChanged = false;\n    this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);\n\n    if (!isMultipleMode || (isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection))) {\n      this.selectedRange.clear();\n    }\n\n    this.selectedRange\n      .add(coordsClone)\n      .current()\n      .setHighlight(highlightCoords.clone());\n\n    if (this.getLayerLevel() === 0) {\n      this.selectedByRowHeader.clear();\n      this.selectedByColumnHeader.clear();\n    }\n    if (!fragment) {\n      this.setRangeEnd(coords);\n    }\n  }\n\n  /**\n   * Starts selection range on given coordinate object.\n   *\n   * @param {CellCoords} coords Visual coords.\n   * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n   *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n   *                                      the default trigger will be used.\n   * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.\n   */\n  setRangeStartOnly(coords, multipleSelection, highlightCoords = coords) {\n    this.setRangeStart(coords, multipleSelection, true, highlightCoords);\n  }\n\n  /**\n   * Ends selection range on given coordinate object.\n   *\n   * @param {CellCoords} coords Visual coords.\n   */\n  setRangeEnd(coords) {\n    if (this.selectedRange.isEmpty()) {\n      return;\n    }\n\n    const coordsClone = coords.clone();\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n    const isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();\n\n    // Ignore processing the end range when the header selection starts overlapping the corner and\n    // the selection is not a single header highlight.\n    if ((countRows > 0 || countCols > 0) &&\n       (countRows === 0 && coordsClone.col < 0 && !isSingle ||\n        countCols === 0 && coordsClone.row < 0 && !isSingle)) {\n      return;\n    }\n\n    this.runLocalHooks('beforeSetRangeEnd', coordsClone);\n    this.begin();\n\n    const cellRange = this.selectedRange.current();\n\n    if (!this.settings.navigableHeaders) {\n      cellRange.highlight.normalize();\n    }\n\n    if (this.settings.selectionMode === 'single') {\n      cellRange.setFrom(cellRange.highlight);\n      cellRange.setTo(cellRange.highlight);\n\n    } else {\n      const horizontalDir = cellRange.getHorizontalDirection();\n      const verticalDir = cellRange.getVerticalDirection();\n      const isMultiple = this.isMultiple();\n\n      cellRange.setTo(coordsClone);\n\n      if (\n        isMultiple &&\n        (horizontalDir !== cellRange.getHorizontalDirection() ||\n        cellRange.getWidth() === 1 && !cellRange.includes(cellRange.highlight))\n      ) {\n        cellRange.from.assign({\n          col: cellRange.highlight.col\n        });\n      }\n      if (\n        isMultiple &&\n        (verticalDir !== cellRange.getVerticalDirection() ||\n        cellRange.getHeight() === 1 && !cellRange.includes(cellRange.highlight))\n      ) {\n        cellRange.from.assign({\n          row: cellRange.highlight.row\n        });\n      }\n    }\n\n    // Prevent creating \"area\" selection that overlaps headers.\n    if (countRows > 0 && countCols > 0) {\n      if (!this.settings.navigableHeaders || (this.settings.navigableHeaders && !cellRange.isSingleHeader())) {\n        cellRange.to.normalize();\n      }\n    }\n\n    this.runLocalHooks('beforeHighlightSet');\n    this.setRangeFocus(this.selectedRange.current().highlight);\n    this.applyAndCommit();\n\n    const isLastLayer = this.#expectedLayersCount === -1 || this.selectedRange.size() === this.#expectedLayersCount;\n\n    this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);\n  }\n\n  /**\n   * Applies and commits the selection to all layers (using the Walkontable Selection API) based on the selection (CellRanges)\n   * collected in the `selectedRange` module.\n   *\n   * @param {CellRange} [cellRange] The cell range to apply. If not provided, the current selection is used.\n   * @param {number} [layerLevel] The layer level to apply. If not provided, the current layer level is used.\n   */\n  applyAndCommit(cellRange = this.selectedRange.current(), layerLevel = this.getLayerLevel()) {\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n\n    // If the next layer level is lower than previous then clear all area and header highlights. This is the\n    // indication that the new selection is performing.\n    if (layerLevel < this.highlight.layerLevel) {\n      arrayEach(this.highlight.getAreas(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getLayeredAreas(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getRowHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getColumnHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getRowHighlights(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getColumnHighlights(), highlight => void highlight.clear());\n    }\n\n    this.highlight.useLayerLevel(layerLevel);\n\n    const areaHighlight = this.highlight.createArea();\n    const layeredAreaHighlight = this.highlight.createLayeredArea();\n    const rowHeaderHighlight = this.highlight.createRowHeader();\n    const columnHeaderHighlight = this.highlight.createColumnHeader();\n    const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();\n    const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();\n    const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();\n    const rowHighlight = this.highlight.createRowHighlight();\n    const columnHighlight = this.highlight.createColumnHighlight();\n\n    areaHighlight.clear();\n    layeredAreaHighlight.clear();\n    rowHeaderHighlight.clear();\n    columnHeaderHighlight.clear();\n    activeRowHeaderHighlight.clear();\n    activeColumnHeaderHighlight.clear();\n    activeCornerHeaderHighlight.clear();\n    rowHighlight.clear();\n    columnHighlight.clear();\n\n    if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {\n      areaHighlight\n        .add(cellRange.from)\n        .add(cellRange.to)\n        .commit();\n      layeredAreaHighlight\n        .add(cellRange.from)\n        .add(cellRange.to)\n        .commit();\n\n      if (layerLevel === 1) {\n        // For single cell selection in the same layer, we do not create area selection to prevent blue background.\n        // When non-consecutive selection is performed we have to add that missing area selection to the previous layer\n        // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.\n        const previousRange = this.selectedRange.previous();\n\n        this.highlight.useLayerLevel(layerLevel - 1);\n        this.highlight\n          .createArea()\n          .add(previousRange.from)\n          .commit()\n          // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).\n          .syncWith(previousRange);\n        this.highlight\n          .createLayeredArea()\n          .add(previousRange.from)\n          .commit()\n          // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).\n          .syncWith(previousRange);\n\n        this.highlight.useLayerLevel(layerLevel);\n      }\n    }\n\n    if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {\n      if (!cellRange.isSingleHeader()) {\n        const rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);\n        const rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);\n        const columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));\n        const columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);\n\n        if (this.settings.selectionMode === 'single') {\n          rowHeaderHighlight.add(rowCoordsFrom).commit();\n          columnHeaderHighlight.add(columnCoordsFrom).commit();\n          rowHighlight.add(rowCoordsFrom).commit();\n          columnHighlight.add(columnCoordsFrom).commit();\n\n        } else {\n          rowHeaderHighlight\n            .add(rowCoordsFrom)\n            .add(rowCoordsTo)\n            .commit();\n          columnHeaderHighlight\n            .add(columnCoordsFrom)\n            .add(columnCoordsTo)\n            .commit();\n          rowHighlight\n            .add(rowCoordsFrom)\n            .add(rowCoordsTo)\n            .commit();\n          columnHighlight\n            .add(columnCoordsFrom)\n            .add(columnCoordsTo)\n            .commit();\n        }\n      }\n\n      const highlightRowHeaders = !this.#disableHeadersHighlight && (this.isEntireRowSelected() &&\n        (countCols > 0 && countCols === cellRange.getWidth() ||\n        countCols === 0 && this.isSelectedByRowHeader()));\n      const highlightColumnHeaders = !this.#disableHeadersHighlight && (this.isEntireColumnSelected() &&\n        (countRows > 0 && countRows === cellRange.getHeight() ||\n        countRows === 0 && this.isSelectedByColumnHeader()));\n\n      if (highlightRowHeaders) {\n        activeRowHeaderHighlight\n          .add(this.tableProps\n            .createCellCoords(Math.max(cellRange.from.row, 0), Math.min(-this.tableProps.countRowHeaders(), -1)))\n          .add(this.tableProps\n            .createCellCoords(Math.max(cellRange.to.row, 0), -1))\n          .commit();\n      }\n\n      if (highlightColumnHeaders) {\n        activeColumnHeaderHighlight\n          .add(this.tableProps\n            .createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), Math.max(cellRange.from.col, 0)))\n          .add(this.tableProps\n            .createCellCoords(-1, Math.max(cellRange.to.col, 0)))\n          .commit();\n      }\n\n      if (highlightRowHeaders && highlightColumnHeaders) {\n        activeCornerHeaderHighlight\n          .add(this.tableProps\n            .createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders()))\n          .add(this.tableProps\n            .createCellCoords(-1, -1))\n          .commit();\n      }\n    }\n  }\n\n  /**\n   * Sets the selection focus position at the specified coordinates.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   */\n  setRangeFocus(coords) {\n    if (this.selectedRange.isEmpty()) {\n      return;\n    }\n\n    const cellRange = this.selectedRange.current();\n\n    if (!this.inProgress) {\n      this.runLocalHooks('beforeSetFocus', coords);\n    }\n\n    const focusHighlight = this.highlight.getFocus();\n\n    focusHighlight.clear();\n    cellRange.setHighlight(coords);\n\n    if (!this.inProgress) {\n      this.runLocalHooks('beforeHighlightSet');\n    }\n\n    if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {\n      focusHighlight\n        .add(cellRange.highlight)\n        .commit()\n        .syncWith(cellRange);\n    }\n\n    if (!this.inProgress) {\n      this.#isFocusSelectionChanged = true;\n      this.runLocalHooks('afterSetFocus', cellRange.highlight);\n    }\n  }\n\n  /**\n   * Selects cell relative to the current cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.\n   * Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n   */\n  transformStart(rowDelta, colDelta, createMissingRecords = false) {\n    if (this.settings.navigableHeaders) {\n      this.#transformation.setOffsetSize({\n        x: this.tableProps.countRowHeaders(),\n        y: this.tableProps.countColHeaders(),\n      });\n\n    } else {\n      this.#transformation.resetOffsetSize();\n    }\n\n    this.setRangeStart(this.#transformation.transformStart(rowDelta, colDelta, createMissingRecords));\n  }\n\n  /**\n   * Sets selection end cell relative to the current selection end cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   */\n  transformEnd(rowDelta, colDelta) {\n    if (this.settings.navigableHeaders) {\n      this.#transformation.setOffsetSize({\n        x: this.tableProps.countRowHeaders(),\n        y: this.tableProps.countColHeaders(),\n      });\n\n    } else {\n      this.#transformation.resetOffsetSize();\n    }\n\n    this.setRangeEnd(this.#transformation.transformEnd(rowDelta, colDelta));\n  }\n\n  /**\n   * Transforms the focus cell selection relative to the current focus position.\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   */\n  transformFocus(rowDelta, colDelta) {\n    const range = this.selectedRange.current();\n    const { row, col } = range.getOuterTopStartCorner();\n    const columnsInRange = this.tableProps.countRenderableColumnsInRange(0, col - 1);\n    const rowsInRange = this.tableProps.countRenderableRowsInRange(0, row - 1);\n\n    if (range.highlight.isHeader()) {\n      // for header focus selection calculate the new coords based on the selection including headers\n      this.#focusTransformation.setOffsetSize({\n        x: col < 0 ? Math.abs(col) : -columnsInRange,\n        y: row < 0 ? Math.abs(row) : -rowsInRange,\n      });\n    } else {\n      // for focus selection in cells calculate the new coords only based on the selected cells\n      this.#focusTransformation.setOffsetSize({\n        x: col < 0 ? 0 : -columnsInRange,\n        y: row < 0 ? 0 : -rowsInRange,\n      });\n    }\n\n    const focusCoords = this.#focusTransformation.transformStart(rowDelta, colDelta);\n\n    this.setRangeFocus(focusCoords.normalize());\n  }\n\n  /**\n   * Transforms the last selection layer down or up by the index count.\n   *\n   * @param {number} visualRowIndex Visual row index from which the selection will be shifted.\n   * @param {number} amount The number of rows to shift the selection.\n   */\n  shiftRows(visualRowIndex, amount) {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const range = this.selectedRange.current();\n\n    if (this.isSelectedByCorner()) {\n      this.selectAll(true, true, {\n        disableHeadersHighlight: true,\n      });\n\n    } else if (this.isSelectedByColumnHeader() || range.getOuterTopStartCorner().row >= visualRowIndex) {\n      const { from, to, highlight } = range;\n      const countRows = this.tableProps.countRows();\n      const isSelectedByRowHeader = this.isSelectedByRowHeader();\n      const isSelectedByColumnHeader = this.isSelectedByColumnHeader();\n      const minRow = isSelectedByColumnHeader ? -1 : 0;\n      const coordsStartAmount = isSelectedByColumnHeader ? 0 : amount;\n\n      // Remove from the stack the last added selection as that selection below will be\n      // replaced by new transformed selection.\n      this.getSelectedRange().pop();\n\n      const coordsStart = this.tableProps.createCellCoords(\n        clamp(from.row + coordsStartAmount, minRow, countRows - 1),\n        from.col\n      );\n      const coordsEnd = this.tableProps.createCellCoords(\n        clamp(to.row + amount, minRow, countRows - 1),\n        to.col\n      );\n\n      this.markSource('shift');\n\n      if (highlight.row >= visualRowIndex) {\n        this.setRangeStartOnly(coordsStart, true, this.tableProps.createCellCoords(\n          clamp(highlight.row + amount, 0, countRows - 1),\n          highlight.col\n        ));\n\n      } else {\n        this.setRangeStartOnly(coordsStart, true);\n      }\n\n      if (isSelectedByRowHeader) {\n        this.selectedByRowHeader.add(this.getLayerLevel());\n      }\n      if (isSelectedByColumnHeader) {\n        this.selectedByColumnHeader.add(this.getLayerLevel());\n      }\n\n      this.setRangeEnd(coordsEnd);\n      this.markEndSource();\n    }\n  }\n\n  /**\n   * Transforms the last selection layer left or right by the index count.\n   *\n   * @param {number} visualColumnIndex Visual column index from which the selection will be shifted.\n   * @param {number} amount The number of columns to shift the selection.\n   */\n  shiftColumns(visualColumnIndex, amount) {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const range = this.selectedRange.current();\n\n    if (this.isSelectedByCorner()) {\n      this.selectAll(true, true, {\n        disableHeadersHighlight: true,\n      });\n\n    } else if (this.isSelectedByRowHeader() || range.getOuterTopStartCorner().col >= visualColumnIndex) {\n      const { from, to, highlight } = range;\n      const countCols = this.tableProps.countCols();\n      const isSelectedByRowHeader = this.isSelectedByRowHeader();\n      const isSelectedByColumnHeader = this.isSelectedByColumnHeader();\n      const minColumn = isSelectedByRowHeader ? -1 : 0;\n      const coordsStartAmount = isSelectedByRowHeader ? 0 : amount;\n\n      // Remove from the stack the last added selection as that selection below will be\n      // replaced by new transformed selection.\n      this.getSelectedRange().pop();\n\n      const coordsStart = this.tableProps.createCellCoords(\n        from.row,\n        clamp(from.col + coordsStartAmount, minColumn, countCols - 1)\n      );\n      const coordsEnd = this.tableProps.createCellCoords(\n        to.row,\n        clamp(to.col + amount, minColumn, countCols - 1)\n      );\n\n      this.markSource('shift');\n\n      if (highlight.col >= visualColumnIndex) {\n        this.setRangeStartOnly(coordsStart, true, this.tableProps.createCellCoords(\n          highlight.row,\n          clamp(highlight.col + amount, 0, countCols - 1)\n        ));\n\n      } else {\n        this.setRangeStartOnly(coordsStart, true);\n      }\n\n      if (isSelectedByRowHeader) {\n        this.selectedByRowHeader.add(this.getLayerLevel());\n      }\n      if (isSelectedByColumnHeader) {\n        this.selectedByColumnHeader.add(this.getLayerLevel());\n      }\n\n      this.setRangeEnd(coordsEnd);\n      this.markEndSource();\n    }\n  }\n\n  /**\n   * Returns currently used layer level.\n   *\n   * @returns {number} Returns layer level starting from 0. If no selection was added to the table -1 is returned.\n   */\n  getLayerLevel() {\n    return this.selectedRange.size() - 1;\n  }\n\n  /**\n   * Returns `true` if currently there is a selection on the screen, `false` otherwise.\n   *\n   * @returns {boolean}\n   */\n  isSelected() {\n    return !this.selectedRange.isEmpty();\n  }\n\n  /**\n   * Returns information if we have a multi-selection. This method check multi-selection only on the latest layer of\n   * the selection.\n   *\n   * @returns {boolean}\n   */\n  isMultiple() {\n    if (!this.isSelected()) {\n      return false;\n    }\n\n    const isMultipleListener = createObjectPropListener(!this.selectedRange.current().isSingle());\n\n    this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);\n\n    return isMultipleListener.value;\n  }\n\n  /**\n   * Checks if the last selection involves changing the focus cell position only.\n   *\n   * @returns {boolean}\n   */\n  isFocusSelectionChanged() {\n    return this.isSelected() && this.#isFocusSelectionChanged;\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking to the row header. If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks if any row header\n   * was clicked on any selection layer level.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isSelectedByRowHeader(layerLevel = this.getLayerLevel()) {\n    return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ?\n      this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));\n  }\n\n  /**\n   * Returns `true` if the selection consists of entire rows (including their headers). If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks the selection for all layers.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isEntireRowSelected(layerLevel = this.getLayerLevel()) {\n    const tester = (range) => {\n      const { col } = range.getOuterTopStartCorner();\n      const rowHeaders = this.tableProps.countRowHeaders();\n      const countCols = this.tableProps.countCols();\n\n      return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;\n    };\n\n    if (layerLevel === -1) {\n      return Array.from(this.selectedRange).some(range => tester(range));\n    }\n\n    const range = this.selectedRange.peekByIndex(layerLevel);\n\n    return range ? tester(range) : false;\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking to the column header. If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks if any column header\n   * was clicked on any selection layer level.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isSelectedByColumnHeader(layerLevel = this.getLayerLevel()) {\n    return !this.isSelectedByCorner() && (layerLevel === -1 ?\n      this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));\n  }\n\n  /**\n   * Returns `true` if the selection consists of entire columns (including their headers). If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks the selection for all layers.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isEntireColumnSelected(layerLevel = this.getLayerLevel()) {\n    const tester = (range) => {\n      const { row } = range.getOuterTopStartCorner();\n      const colHeaders = this.tableProps.countColHeaders();\n      const countRows = this.tableProps.countRows();\n\n      return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;\n    };\n\n    if (layerLevel === -1) {\n      return Array.from(this.selectedRange).some(range => tester(range));\n    }\n\n    const range = this.selectedRange.peekByIndex(layerLevel);\n\n    return range ? tester(range) : false;\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking on the row or column header on any layer level.\n   *\n   * @returns {boolean}\n   */\n  isSelectedByAnyHeader() {\n    return this.isSelectedByRowHeader(-1) ||\n      this.isSelectedByColumnHeader(-1) ||\n      this.isSelectedByCorner();\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking on the left-top corner overlay.\n   *\n   * @returns {boolean}\n   */\n  isSelectedByCorner() {\n    return this.selectedByColumnHeader.has(this.getLayerLevel()) &&\n      this.selectedByRowHeader.has(this.getLayerLevel());\n  }\n\n  /**\n   * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n   * the coords object is within selection range.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {boolean}\n   */\n  inInSelection(coords) {\n    return this.selectedRange.includes(coords);\n  }\n\n  /**\n   * Returns `true` if the cell corner should be visible.\n   *\n   * @private\n   * @returns {boolean} `true` if the corner element has to be visible, `false` otherwise.\n   */\n  isCellCornerVisible() {\n    return this.settings.fillHandle && !this.tableProps.isEditorOpened() && !this.isMultiple();\n  }\n\n  /**\n   * Returns `true` if the cell coordinates are visible (renderable).\n   *\n   * @private\n   * @param {CellCoords} coords The cell coordinates to check.\n   * @returns {boolean}\n   */\n  isCellVisible(coords) {\n    const renderableCoords = this.tableProps.visualToRenderableCoords(coords);\n\n    return renderableCoords.row !== null && renderableCoords.col !== null;\n  }\n\n  /**\n   * Returns `true` if the area corner should be visible.\n   *\n   * @param {number} layerLevel The layer level.\n   * @returns {boolean} `true` if the corner element has to be visible, `false` otherwise.\n   */\n  isAreaCornerVisible(layerLevel) {\n    if (Number.isInteger(layerLevel) && layerLevel !== this.getLayerLevel()) {\n      return false;\n    }\n\n    return this.settings.fillHandle && !this.tableProps.isEditorOpened() && this.isMultiple();\n  }\n\n  /**\n   * Clear the selection by resetting the collected ranges and highlights.\n   */\n  clear() {\n    // TODO: collections selectedByColumnHeader and selectedByRowHeader should be clear too.\n    this.selectedRange.clear();\n    this.highlight.clear();\n  }\n\n  /**\n   * Deselects all selected cells.\n   */\n  deselect() {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    this.inProgress = false;\n    this.clear();\n    this.runLocalHooks('afterDeselect');\n  }\n\n  /**\n   * Selects all cells and headers.\n   *\n   * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,\n   * `false` otherwise.\n   * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column\n   * headers, `false` otherwise.\n   * @param {object} [options] Additional object with options.\n   * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header\n   * focus position. The value takes an object with a `row` and `col` properties from -N to N, where\n   * negative values point to the headers and positive values point to the cell range. If `false`, the focus\n   * position won't be changed.\n   * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when\n   * the logical coordinates points on them.\n   */\n  selectAll(includeRowHeaders = false, includeColumnHeaders = false, options = {\n    focusPosition: false,\n    disableHeadersHighlight: false,\n  }) {\n    const nrOfRows = this.tableProps.countRows();\n    const nrOfColumns = this.tableProps.countCols();\n    const countRowHeaders = this.tableProps.countRowHeaders();\n    const countColHeaders = this.tableProps.countColHeaders();\n\n    const rowFrom = includeColumnHeaders ? -countColHeaders : 0;\n    const columnFrom = includeRowHeaders ? -countRowHeaders : 0;\n\n    // We can't select cells when there is no data.\n    if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {\n      return;\n    }\n\n    let highlight = this.getSelectedRange().current()?.highlight;\n    const {\n      focusPosition,\n      disableHeadersHighlight\n    } = options;\n\n    this.#disableHeadersHighlight = disableHeadersHighlight;\n\n    if (focusPosition && Number.isInteger(focusPosition?.row) && Number.isInteger(focusPosition?.col)) {\n      highlight = this.tableProps\n        .createCellCoords(\n          clamp(focusPosition.row, rowFrom, nrOfRows - 1),\n          clamp(focusPosition.col, columnFrom, nrOfColumns - 1)\n        );\n    }\n\n    const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);\n    const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);\n\n    this.clear();\n    this.setRangeStartOnly(startCoords, undefined, highlight);\n\n    if (columnFrom < 0) {\n      this.selectedByRowHeader.add(this.getLayerLevel());\n    }\n    if (rowFrom < 0) {\n      this.selectedByColumnHeader.add(this.getLayerLevel());\n    }\n\n    this.setRangeEnd(endCoords);\n    this.finish();\n\n    this.#disableHeadersHighlight = false;\n  }\n\n  /**\n   * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n   * finishing at `endRow`, `endColumn`. The method supports two input formats, first as an array of arrays such\n   * as `[[rowStart, columnStart, rowEnd, columnEnd]]` and second format as an array of CellRange objects.\n   * If the passed ranges have another format the exception will be thrown.\n   *\n   * @param {Array[]|CellRange[]} selectionRanges The coordinates which define what the cells should be selected.\n   * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n   */\n  selectCells(selectionRanges) {\n    const selectionType = detectSelectionType(selectionRanges);\n\n    if (selectionType === SELECTION_TYPE_EMPTY) {\n      return false;\n\n    } else if (selectionType === SELECTION_TYPE_UNRECOGNIZED) {\n      throw new Error(toSingleLine`Unsupported format of the selection ranges was passed. To select cells pass\\x20\n        the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd,\\x20\n        columnEnd/columnPropEnd]]) or as an array of CellRange objects.`);\n    }\n\n    const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n      createCellCoords: (...args) => this.tableProps.createCellCoords(...args),\n      createCellRange: (...args) => this.tableProps.createCellRange(...args),\n      propToCol: prop => this.tableProps.propToCol(prop),\n      keepDirection: true,\n    });\n    const navigableHeaders = this.settings.navigableHeaders;\n    const tableParams = {\n      countRows: this.tableProps.countRows(),\n      countCols: this.tableProps.countCols(),\n      countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,\n      countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0,\n    };\n\n    // Check if every layer of the coordinates are valid.\n    const isValid = !selectionRanges.some((selection) => {\n      const cellRange = selectionSchemaNormalizer(selection);\n      const rangeValidity = cellRange.isValid(tableParams);\n\n      return !(rangeValidity && !cellRange.containsHeaders() ||\n               rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());\n    });\n\n    if (isValid) {\n      this.clear();\n      this.setExpectedLayers(selectionRanges.length);\n\n      arrayEach(selectionRanges, (selection) => {\n        const { from, to } = selectionSchemaNormalizer(selection);\n\n        this.setRangeStartOnly(from.clone(), false);\n        this.setRangeEnd(to.clone());\n      });\n\n      this.finish();\n    }\n\n    return isValid;\n  }\n\n  /**\n   * Select column specified by `startColumn` visual index or column property or a range of columns finishing at\n   * `endColumn`.\n   *\n   * @param {number|string} startColumn Visual column index or column property from which the selection starts.\n   * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.\n   * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position horizontally.\n   * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n   */\n  selectColumns(startColumn, endColumn = startColumn, focusPosition = 0) {\n    const start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;\n    const end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n    const countColHeaders = this.tableProps.countColHeaders();\n    const columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;\n\n    const fromCoords = this.tableProps.createCellCoords(columnHeaderLastIndex, start);\n    const toCoords = this.tableProps.createCellCoords(countRows - 1, end);\n    const isValid = this.tableProps.createCellRange(fromCoords, fromCoords, toCoords)\n      .isValid({\n        countRows,\n        countCols,\n        countRowHeaders: 0,\n        countColHeaders,\n      });\n\n    if (isValid) {\n      let highlightRow = 0;\n      let highlightColumn = 0;\n\n      if (Number.isInteger(focusPosition?.row) && Number.isInteger(focusPosition?.col)) {\n        highlightRow = clamp(focusPosition.row, columnHeaderLastIndex, countRows - 1);\n        highlightColumn = clamp(focusPosition.col, Math.min(start, end), Math.max(start, end));\n      } else {\n        highlightRow = clamp(focusPosition, columnHeaderLastIndex, countRows - 1);\n        highlightColumn = start;\n      }\n\n      const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);\n      const fromRow = countColHeaders === 0 ? 0 : clamp(highlight.row, columnHeaderLastIndex, -1);\n      const toRow = countRows - 1;\n      const from = this.tableProps.createCellCoords(fromRow, start);\n      const to = this.tableProps.createCellCoords(toRow, end);\n\n      this.runLocalHooks('beforeSelectColumns', from, to, highlight);\n\n      // disallow modifying row axis for that hooks\n      from.row = fromRow;\n      to.row = toRow;\n\n      this.setRangeStartOnly(from, undefined, highlight);\n      this.selectedByColumnHeader.add(this.getLayerLevel());\n      this.setRangeEnd(to);\n      this.runLocalHooks('afterSelectColumns', from, to, highlight);\n      this.finish();\n    }\n\n    return isValid;\n  }\n\n  /**\n   * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n   *\n   * @param {number} startRow Visual row index from which the selection starts.\n   * @param {number} [endRow] Visual row index from to the selection finishes.\n   * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position horizontally.\n   * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n   */\n  selectRows(startRow, endRow = startRow, focusPosition = 0) {\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n    const countRowHeaders = this.tableProps.countRowHeaders();\n    const rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;\n\n    const fromCoords = this.tableProps.createCellCoords(startRow, rowHeaderLastIndex);\n    const toCoords = this.tableProps.createCellCoords(endRow, countCols - 1);\n    const isValid = this.tableProps.createCellRange(fromCoords, fromCoords, toCoords)\n      .isValid({\n        countRows,\n        countCols,\n        countRowHeaders,\n        countColHeaders: 0,\n      });\n\n    if (isValid) {\n      let highlightRow = 0;\n      let highlightColumn = 0;\n\n      if (Number.isInteger(focusPosition?.row) && Number.isInteger(focusPosition?.col)) {\n        highlightRow = clamp(focusPosition.row, Math.min(startRow, endRow), Math.max(startRow, endRow));\n        highlightColumn = clamp(focusPosition.col, rowHeaderLastIndex, countCols - 1);\n      } else {\n        highlightRow = startRow;\n        highlightColumn = clamp(focusPosition, rowHeaderLastIndex, countCols - 1);\n      }\n\n      const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);\n      const fromColumn = countRowHeaders === 0 ? 0 : clamp(highlight.col, rowHeaderLastIndex, -1);\n      const toColumn = countCols - 1;\n      const from = this.tableProps.createCellCoords(startRow, fromColumn);\n      const to = this.tableProps.createCellCoords(endRow, toColumn);\n\n      this.runLocalHooks('beforeSelectRows', from, to, highlight);\n\n      // disallow modifying column axis for that hooks\n      from.col = fromColumn;\n      to.col = toColumn;\n\n      this.setRangeStartOnly(from, undefined, highlight);\n      this.selectedByRowHeader.add(this.getLayerLevel());\n      this.setRangeEnd(to);\n      this.runLocalHooks('afterSelectRows', from, to, highlight);\n      this.finish();\n    }\n\n    return isValid;\n  }\n\n  /**\n   * Refreshes the whole selection by clearing, reapplying and committing the renderable selection (Walkontable Selection API)\n   * by using already added visual ranges.\n   */\n  refresh() {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const countRows = this.tableProps.countRows();\n    const countColumns = this.tableProps.countCols();\n\n    if (countRows === 0 || countColumns === 0) {\n      this.deselect();\n\n      return;\n    }\n\n    const range = this.selectedRange.peekByIndex(this.selectedRange.size() - 1);\n    const { from, to, highlight } = range;\n\n    this.clear();\n\n    highlight.assign({\n      row: clamp(highlight.row, -Infinity, countRows - 1),\n      col: clamp(highlight.col, -Infinity, countColumns - 1),\n    });\n    from.assign({\n      row: clamp(from.row, -Infinity, countRows - 1),\n      col: clamp(from.col, -Infinity, countColumns - 1),\n    });\n    to.assign({\n      row: clamp(to.row, 0, countRows - 1),\n      col: clamp(to.col, 0, countColumns - 1),\n    });\n\n    this.selectedRange.ranges.push(range);\n    this.highlight\n      .getFocus()\n      .add(highlight)\n      .commit()\n      .syncWith(range);\n\n    this.applyAndCommit(range);\n  }\n\n  /**\n   * Refreshes the whole selection by recommitting (recalculating visual indexes to renderable ones) the renderable selection\n   * that was already added.\n   */\n  commit() {\n    const customSelections = this.highlight.getCustomSelections();\n\n    customSelections.forEach((customSelection) => {\n      customSelection.commit();\n    });\n\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const focusHighlight = this.highlight.getFocus();\n    const currentLayer = this.getLayerLevel();\n\n    focusHighlight.commit().syncWith(this.selectedRange.current());\n\n    // Rewriting rendered ranges going through all layers.\n    for (let layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {\n      this.highlight.useLayerLevel(layerLevel);\n\n      const areaHighlight = this.highlight.createArea();\n      const areaLayeredHighlight = this.highlight.createLayeredArea();\n      const rowHeaderHighlight = this.highlight.createRowHeader();\n      const columnHeaderHighlight = this.highlight.createColumnHeader();\n      const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();\n      const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();\n      const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();\n      const rowHighlight = this.highlight.createRowHighlight();\n      const columnHighlight = this.highlight.createColumnHighlight();\n\n      areaHighlight.commit();\n      areaLayeredHighlight.commit();\n      rowHeaderHighlight.commit();\n      columnHeaderHighlight.commit();\n      activeRowHeaderHighlight.commit();\n      activeColumnHeaderHighlight.commit();\n      activeCornerHeaderHighlight.commit();\n      rowHighlight.commit();\n      columnHighlight.commit();\n    }\n\n    // Reverting starting layer for the Highlight.\n    this.highlight.useLayerLevel(currentLayer);\n  }\n}\n\nmixin(Selection, localHooks);\n\nexport default Selection;\n","import { createHighlight as createActiveHighlight } from './types/activeHeader';\nimport { createHighlight as createAreaLayeredHighlight } from './types/areaLayered';\nimport { createHighlight as createAreaHighlight } from './types/area';\nimport { createHighlight as createColumnHighlight } from './types/column';\nimport { createHighlight as createFocusHighlight } from './types/focus';\nimport { createHighlight as createCustomHighlight } from './types/customSelection';\nimport { createHighlight as createFillHighlight } from './types/fill';\nimport { createHighlight as createHeaderHighlight } from './types/header';\nimport { createHighlight as createRowHighlight } from './types/row';\nimport {\n  HIGHLIGHT_ACTIVE_HEADER_TYPE,\n  HIGHLIGHT_AREA_TYPE,\n  HIGHLIGHT_FOCUS_TYPE,\n  HIGHLIGHT_CUSTOM_SELECTION_TYPE,\n  HIGHLIGHT_FILL_TYPE,\n  HIGHLIGHT_HEADER_TYPE,\n  HIGHLIGHT_ROW_TYPE,\n  HIGHLIGHT_COLUMN_TYPE,\n} from '../../3rdparty/walkontable/src';\nimport { arrayEach } from './../../helpers/array';\n\nexport {\n  HIGHLIGHT_ACTIVE_HEADER_TYPE as ACTIVE_HEADER_TYPE,\n  HIGHLIGHT_AREA_TYPE as AREA_TYPE,\n  HIGHLIGHT_FOCUS_TYPE as FOCUS_TYPE,\n  HIGHLIGHT_CUSTOM_SELECTION_TYPE as CUSTOM_SELECTION_TYPE,\n  HIGHLIGHT_FILL_TYPE as FILL_TYPE,\n  HIGHLIGHT_HEADER_TYPE as HEADER_TYPE,\n  HIGHLIGHT_ROW_TYPE as ROW_TYPE,\n  HIGHLIGHT_COLUMN_TYPE as COLUMN_TYPE,\n};\n\n/**\n * Highlight class responsible for managing Walkontable Selection classes.\n *\n * With Highlight object you can manipulate four different highlight types:\n *  - `cell` can be added only to a single cell at a time and it defines currently selected cell;\n *  - `fill` can occur only once and its highlight defines selection of autofill functionality (managed by the plugin with the same name);\n *  - `areas` can be added to multiple cells at a time. This type highlights selected cell or multiple cells.\n *    The multiple cells have to be defined as an uninterrupted order (regular shape). Otherwise, the new layer of\n *    that type should be created to manage not-consecutive selection;\n *  - `header` can occur multiple times. This type is designed to highlight only headers. Like `area` type it\n *    can appear with multiple highlights (accessed under different level layers).\n *\n * @class Highlight\n * @util\n */\nclass Highlight {\n  /**\n   * Options consumed by Highlight class and Walkontable Selection classes.\n   *\n   * @type {object}\n   */\n  options;\n  /**\n   * The property which describes which layer level of the visual selection will be modified.\n   * This option is valid only for `area` and `header` highlight types which occurs multiple times on\n   * the table (as a non-consecutive selection).\n   *\n   * An order of the layers is the same as the order of added new non-consecutive selections.\n   *\n   * @type {number}\n   * @default 0\n   */\n  layerLevel = 0;\n  /**\n   * `cell` highlight object which describes attributes for the currently selected cell.\n   * It can only occur only once on the table.\n   *\n   * @type {Selection}\n   */\n  focus;\n  /**\n   * `fill` highlight object which describes attributes for the borders for autofill functionality.\n   * It can only occur only once on the table.\n   *\n   * @type {Selection}\n   */\n  fill;\n  /**\n   * Collection of the `area` highlights. That objects describes attributes for the borders and selection of\n   * the multiple selected cells. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  layeredAreas = new Map();\n  /**\n   * Collection of the `highlight` highlights. That objects describes attributes for the borders and selection of\n   * the multiple selected cells. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  areas = new Map();\n  /**\n   * Collection of the `header` highlights. That objects describes attributes for the selection of\n   * the multiple selected rows in the table header. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  rowHeaders = new Map();\n  /**\n   * Collection of the `header` highlights. That objects describes attributes for the selection of\n   * the multiple selected columns in the table header. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  columnHeaders = new Map();\n  /**\n   * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n   * the multiple selected rows in the table header. The table headers which have selected all items in\n   * a row will be marked as `active-header`.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  activeRowHeaders = new Map();\n  /**\n   * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n   * the multiple selected columns in the table header. The table headers which have selected all items in\n   * a row will be marked as `active-header`.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  activeColumnHeaders = new Map();\n  /**\n   * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n   * the selected corner in the table header. The table headers which have selected all items in\n   * a row will be marked as `active-header`.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  activeCornerHeaders = new Map();\n  /**\n   * Collection of the `rows` highlights. That objects describes attributes for the selection of\n   * the multiple selected cells in a row. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  rowHighlights = new Map();\n  /**\n   * Collection of the `columns` highlights. That objects describes attributes for the selection of\n   * the multiple selected cells in a column. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  columnHighlights = new Map();\n  /**\n   * Collection of the `custom-selection`, holder for example borders added through CustomBorders plugin.\n   *\n   * @type {Selection[]}\n   */\n  customSelections = [];\n\n  constructor(options) {\n    this.options = options;\n    this.focus = createFocusHighlight(options);\n    this.fill = createFillHighlight(options);\n  }\n\n  /**\n   * Check if highlight cell rendering is disabled for specified highlight type.\n   *\n   * @param {string} highlightType Highlight type. Possible values are: `cell`, `area`, `fill` or `header`.\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {boolean}\n   */\n  isEnabledFor(highlightType, coords) {\n    let type = highlightType;\n\n    // Legacy compatibility.\n    if (highlightType === HIGHLIGHT_FOCUS_TYPE) {\n      type = 'current'; // One from settings for `disableVisualSelection` up to Handsontable 0.36/Handsontable Pro 1.16.0.\n    }\n\n    let disableHighlight = this.options.disabledCellSelection(coords.row, coords.col);\n\n    if (typeof disableHighlight === 'string') {\n      disableHighlight = [disableHighlight];\n    }\n\n    return disableHighlight === false || Array.isArray(disableHighlight) && !disableHighlight.includes(type);\n  }\n\n  /**\n   * Set a new layer level to make access to the desire `area` and `header` highlights.\n   *\n   * @param {number} [level=0] Layer level to use.\n   * @returns {Highlight}\n   */\n  useLayerLevel(level = 0) {\n    this.layerLevel = level;\n\n    return this;\n  }\n\n  /**\n   * Get Walkontable Selection instance created for controlling highlight of the currently\n   * focused cell (or header).\n   *\n   * @returns {Selection}\n   */\n  getFocus() {\n    return this.focus;\n  }\n\n  /**\n   * Get Walkontable Selection instance created for controlling highlight of the autofill functionality.\n   *\n   * @returns {Selection}\n   */\n  getFill() {\n    return this.fill;\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * `area` highlights.\n   *\n   * @returns {Selection}\n   */\n  createLayeredArea() {\n    return this.#createHighlight(this.layeredAreas, createAreaLayeredHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the cells.\n   *\n   * @returns {Selection[]}\n   */\n  getLayeredAreas() {\n    return [...this.layeredAreas.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * `highlight` highlights.\n   *\n   * @returns {Selection}\n   */\n  createArea() {\n    return this.#createHighlight(this.areas, createAreaHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the cells.\n   *\n   * @returns {Selection[]}\n   */\n  getAreas() {\n    return [...this.areas.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * header highlight for rows.\n   *\n   * @returns {Selection}\n   */\n  createRowHeader() {\n    return this.#createHighlight(this.rowHeaders, createHeaderHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers.\n   *\n   * @returns {Selection[]}\n   */\n  getRowHeaders() {\n    return [...this.rowHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * header highlight for columns.\n   *\n   * @returns {Selection}\n   */\n  createColumnHeader() {\n    return this.#createHighlight(this.columnHeaders, createHeaderHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers.\n   *\n   * @returns {Selection[]}\n   */\n  getColumnHeaders() {\n    return [...this.columnHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight for active row headers.\n   *\n   * @returns {Selection}\n   */\n  createActiveRowHeader() {\n    return this.#createHighlight(this.activeRowHeaders, createActiveHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the active headers.\n   *\n   * @returns {Selection[]}\n   */\n  getActiveRowHeaders() {\n    return [...this.activeRowHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight for active column headers.\n   *\n   * @returns {Selection}\n   */\n  createActiveColumnHeader() {\n    return this.#createHighlight(this.activeColumnHeaders, createActiveHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the active headers.\n   *\n   * @returns {Selection[]}\n   */\n  getActiveColumnHeaders() {\n    return [...this.activeColumnHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight for the headers corner.\n   *\n   * @returns {Selection}\n   */\n  createActiveCornerHeader() {\n    return this.#createHighlight(this.activeCornerHeaders, createActiveHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers corner.\n   *\n   * @returns {Selection[]}\n   */\n  getActiveCornerHeaders() {\n    return [...this.activeCornerHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight cells in a row.\n   *\n   * @returns {Selection}\n   */\n  createRowHighlight() {\n    return this.#createHighlight(this.rowHighlights, createRowHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the rows highlighting.\n   *\n   * @returns {Selection[]}\n   */\n  getRowHighlights() {\n    return [...this.rowHighlights.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight cells in a column.\n   *\n   * @returns {Selection}\n   */\n  createColumnHighlight() {\n    return this.#createHighlight(this.columnHighlights, createColumnHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the columns highlighting.\n   *\n   * @returns {Selection[]}\n   */\n  getColumnHighlights() {\n    return [...this.columnHighlights.values()];\n  }\n\n  /**\n   * Get Walkontable Selection instance created for controlling highlight of the custom selection functionality.\n   *\n   * @returns {Selection}\n   */\n  getCustomSelections() {\n    return [...this.customSelections.values()];\n  }\n\n  /**\n   * Add selection to the custom selection instance. The new selection are added to the end of the selection collection.\n   *\n   * @param {object} selectionInstance The selection instance.\n   */\n  addCustomSelection(selectionInstance) {\n    this.customSelections.push(createCustomHighlight({\n      ...this.options,\n      ...selectionInstance\n    }));\n  }\n\n  /**\n   * Perform cleaning visual highlights for the whole table.\n   */\n  clear() {\n    this.focus.clear();\n    this.fill.clear();\n\n    arrayEach(this.areas.values(), highlight => void highlight.clear());\n    arrayEach(this.layeredAreas.values(), highlight => void highlight.clear());\n    arrayEach(this.rowHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.columnHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.activeRowHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.activeColumnHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.activeCornerHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.rowHighlights.values(), highlight => void highlight.clear());\n    arrayEach(this.columnHighlights.values(), highlight => void highlight.clear());\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance.\n   *\n   * @param {Map} cacheMap The map where the instance will be cached.\n   * @param {Function} highlightFactory The function factory.\n   * @returns {VisualSelection}\n   */\n  #createHighlight(cacheMap, highlightFactory) {\n    const layerLevel = this.layerLevel;\n\n    if (cacheMap.has(layerLevel)) {\n      return cacheMap.get(layerLevel);\n    }\n\n    const highlight = highlightFactory({ layerLevel, ...this.options });\n\n    cacheMap.set(layerLevel, highlight);\n\n    return highlight;\n  }\n\n  /**\n   * This object can be iterate over using `for of` syntax or using internal `arrayEach` helper.\n   *\n   * @returns {Selection[]}\n   */\n  [Symbol.iterator]() {\n    return [\n      this.focus,\n      this.fill,\n      ...this.areas.values(),\n      ...this.layeredAreas.values(),\n      ...this.rowHeaders.values(),\n      ...this.columnHeaders.values(),\n      ...this.activeRowHeaders.values(),\n      ...this.activeColumnHeaders.values(),\n      ...this.activeCornerHeaders.values(),\n      ...this.rowHighlights.values(),\n      ...this.columnHighlights.values(),\n      ...this.customSelections,\n    ][Symbol.iterator]();\n  }\n}\n\nexport default Highlight;\n","import { HIGHLIGHT_ACTIVE_HEADER_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting column or row headers\n * only when the whole column or row is selected.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.activeHeaderClassName Highlighted headers' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ activeHeaderClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: activeHeaderClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_ACTIVE_HEADER_TYPE,\n  });\n}\n","import { Selection } from './../../3rdparty/walkontable/src';\n\nclass VisualSelection extends Selection {\n  /**\n   * Range of selection visually. Visual representation may have representation in a rendered selection.\n   *\n   * @type {null|CellRange}\n   */\n  visualCellRange = null;\n\n  constructor(settings, visualCellRange) {\n    super(settings, null);\n    this.visualCellRange = visualCellRange || null;\n    this.commit();\n  }\n  /**\n   * Adds a cell coords to the selection.\n   *\n   * @param {CellCoords} coords Visual coordinates of a cell.\n   * @returns {VisualSelection}\n   */\n  add(coords) {\n    if (this.visualCellRange === null) {\n      this.visualCellRange = this.settings.createCellRange(coords);\n    } else {\n      this.visualCellRange.expand(coords);\n    }\n\n    return this;\n  }\n\n  /**\n   * Clears visual and renderable selection.\n   *\n   * @returns {VisualSelection}\n   */\n  clear() {\n    this.visualCellRange = null;\n\n    return super.clear();\n  }\n\n  /**\n   * Trims the passed cell range object by removing all coordinates that points to the hidden rows\n   * or columns. The result is a new cell range object that points only to the visible indexes or `null`.\n   *\n   * @private\n   * @param {CellRange} cellRange Cells range object to be trimmed.\n   * @returns {CellRange} Visual non-hidden cells range coordinates.\n   */\n  trimToVisibleCellsRangeOnly({ from, to }) {\n    let visibleFromCoords = this.getNearestNotHiddenCoords(from, 1);\n    let visibleToCoords = this.getNearestNotHiddenCoords(to, -1);\n\n    if (visibleFromCoords === null || visibleToCoords === null) {\n      return null;\n    }\n\n    if (visibleFromCoords.row > visibleToCoords.row || visibleFromCoords.col > visibleToCoords.col) {\n      visibleFromCoords = from;\n      visibleToCoords = to;\n    }\n\n    return this.settings.createCellRange(visibleFromCoords, visibleFromCoords, visibleToCoords);\n  }\n\n  /**\n   * Gets nearest coordinates that points to the visible row and column indexes. If there are no visible\n   * rows and/or columns the `null` value is returned.\n   *\n   * @private\n   * @param {CellCoords} coords The coords object as starting point for finding the nearest visible coordinates.\n   * @param {1|-1} rowSearchDirection The search direction. For value 1, it means searching from top to bottom for\n   *                                  rows and from left to right for columns. For -1, it is the other way around.\n   * @param {1|-1} columnSearchDirection The same as above but for rows.\n   * @returns {CellCoords|null} Visual cell coordinates.\n   */\n  getNearestNotHiddenCoords(coords, rowSearchDirection, columnSearchDirection = rowSearchDirection) {\n    const nextVisibleRow = this.getNearestNotHiddenIndex(\n      this.settings.rowIndexMapper, coords.row, rowSearchDirection);\n\n    // There are no more visual rows in the range.\n    if (nextVisibleRow === null) {\n      return null;\n    }\n\n    const nextVisibleColumn = this.getNearestNotHiddenIndex(\n      this.settings.columnIndexMapper, coords.col, columnSearchDirection);\n\n    // There are no more visual columns in the range.\n    if (nextVisibleColumn === null) {\n      return null;\n    }\n\n    return this.settings.createCellCoords(nextVisibleRow, nextVisibleColumn);\n  }\n\n  /**\n   * Gets nearest visual index. If there are no visible rows or columns the `null` value is returned.\n   *\n   * @private\n   * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n   * @param {number} visualIndex The index as starting point for finding the nearest visible index.\n   * @param {1|-1} searchDirection The search direction. For value 1, it means searching from top to bottom for\n   *                               rows and from left to right for columns. For -1, it is the other way around.\n   * @returns {number|null} Visual row/column index.\n   */\n  getNearestNotHiddenIndex(indexMapper, visualIndex, searchDirection) {\n    if (visualIndex < 0) {\n      return visualIndex;\n    }\n\n    return indexMapper.getNearestNotHiddenIndex(visualIndex, searchDirection);\n  }\n\n  /**\n   * Override internally stored visual indexes added by the Selection's `add` function. It should be executed\n   * at the end of process of adding visual selection coordinates.\n   *\n   * @returns {VisualSelection}\n   */\n  commit() {\n    // There is no information about visual ranges, thus no selection may be displayed.\n    if (this.visualCellRange === null) {\n      return this;\n    }\n\n    const trimmedCellRange = this.trimToVisibleCellsRangeOnly(this.visualCellRange);\n\n    // There is no visual start point (and also visual end point) in the range.\n    if (trimmedCellRange === null) {\n      this.cellRange = null;\n    } else {\n      this.cellRange = this.createRenderableCellRange(trimmedCellRange.from, trimmedCellRange.to);\n    }\n\n    return this;\n  }\n\n  /**\n   * Some selection may be a part of broader cell range. This function sync coordinates of current selection\n   * and the broader cell range when needed (current selection can't be presented visually).\n   *\n   * @param {CellRange} broaderCellRange Visual range. Actual cell range may be contained in the broader cell range.\n   * When there is no way to represent some cell range visually we try to find range containing just the first visible cell.\n   *\n   * Warn: Please keep in mind that this function may change coordinates of the handled broader range.\n   *\n   * @returns {VisualSelection}\n   */\n  syncWith(broaderCellRange) {\n    const coordsFrom = broaderCellRange.from.clone().normalize();\n    const rowDirection = broaderCellRange.getVerticalDirection() === 'N-S' ? 1 : -1;\n    const columnDirection = broaderCellRange.getHorizontalDirection() === 'W-E' ? 1 : -1;\n    const renderableHighlight = this.settings.visualToRenderableCoords(this.visualCellRange.highlight);\n    let cellCoordsVisual = null;\n\n    if (renderableHighlight === null || renderableHighlight.col === null || renderableHighlight.row === null) {\n      cellCoordsVisual = this.getNearestNotHiddenCoords(coordsFrom, rowDirection, columnDirection);\n    }\n\n    if (cellCoordsVisual !== null && broaderCellRange.overlaps(cellCoordsVisual)) {\n      const currentHighlight = broaderCellRange.highlight.clone();\n\n      if (currentHighlight.row >= 0) {\n        currentHighlight.row = cellCoordsVisual.row;\n      }\n      if (currentHighlight.col >= 0) {\n        currentHighlight.col = cellCoordsVisual.col;\n      }\n\n      // We can't show selection visually now, but we found first visible range in the broader cell range.\n      if (this.cellRange === null) {\n        const cellCoordsRenderable = this.settings.visualToRenderableCoords(currentHighlight);\n\n        this.cellRange = this.settings.createCellRange(cellCoordsRenderable);\n      }\n\n      // TODO\n      // We set new highlight as it might change (for example, when showing/hiding some cells from the broader selection range)\n      // TODO: It is also handled by the `MergeCells` plugin while adjusting already modified coordinates. Should it?\n      broaderCellRange.setHighlight(currentHighlight);\n    }\n\n    // TODO\n    // Sync the highlight coords from the visual selection layer with logical coords.\n    if (this.settings.selectionType === 'focus' && renderableHighlight !== null && cellCoordsVisual === null) {\n      broaderCellRange.setHighlight(this.visualCellRange.highlight);\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the top left (TL) and bottom right (BR) selection coordinates (renderable indexes).\n   * The method overwrites the original method to support header selection for hidden cells.\n   * To make the header selection working, the CellCoords and CellRange have to support not\n   * complete coordinates (`null` values for example, `row: null`, `col: 2`).\n   *\n   * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.\n   */\n  getCorners() {\n    const { from, to } = this.cellRange;\n\n    return [\n      Math.min(from.row, to.row),\n      Math.min(from.col, to.col),\n      Math.max(from.row, to.row),\n      Math.max(from.col, to.col),\n    ];\n  }\n\n  /**\n   * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection\n   * coordinates (visual indexes).\n   *\n   * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.\n   */\n  getVisualCorners() {\n    const topStart = this.settings.renderableToVisualCoords(this.cellRange.getTopStartCorner());\n    const bottomEnd = this.settings.renderableToVisualCoords(this.cellRange.getBottomEndCorner());\n\n    return [\n      topStart.row,\n      topStart.col,\n      bottomEnd.row,\n      bottomEnd.col,\n    ];\n  }\n\n  /**\n   * Creates a new CellRange object based on visual coordinates which before object creation are\n   * translated to renderable indexes.\n   *\n   * @param {CellCoords} visualFromCoords The CellCoords object which contains coordinates that\n   *                                      points to the beginning of the selection.\n   * @param {CellCoords} visualToCoords The CellCoords object which contains coordinates that\n   *                                    points to the end of the selection.\n   * @returns {CellRange|null}\n   */\n  createRenderableCellRange(visualFromCoords, visualToCoords) {\n    const renderableFromCoords = this.settings.visualToRenderableCoords(visualFromCoords);\n    const renderableToCoords = this.settings.visualToRenderableCoords(visualToCoords);\n\n    if (renderableFromCoords.row === null || renderableFromCoords.col === null ||\n        renderableToCoords.row === null || renderableToCoords.col === null) {\n      return null;\n    }\n\n    return this.settings.createCellRange(renderableFromCoords, renderableFromCoords, renderableToCoords);\n  }\n}\n\nexport default VisualSelection;\n","import { HIGHLIGHT_AREA_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection responsible for highlighting area of the selected multiple cells.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {object} highlightParams.areaCornerVisible Function to determine if area's corner should be visible.\n * @returns {Selection}\n */\nexport function createHighlight({ areaCornerVisible, ...restOptions }) {\n  return new VisualSelection({\n    className: 'area',\n    createLayers: true,\n    border: {\n      width: 1,\n      color: '#4b89ff',\n      cornerVisible: areaCornerVisible,\n    },\n    ...restOptions,\n    selectionType: HIGHLIGHT_AREA_TYPE,\n  });\n}\n","import { HIGHLIGHT_AREA_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection responsible for highlighting area of the selected multiple cells.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {object} highlightParams.areaCornerVisible Function to determine if area's corner should be visible.\n * @returns {Selection}\n */\nexport function createHighlight({ ...restOptions }) {\n  return new VisualSelection({\n    className: 'highlight',\n    ...restOptions,\n    selectionType: HIGHLIGHT_AREA_TYPE,\n  });\n}\n","import { HIGHLIGHT_COLUMN_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells in a columns and\n * column headers.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.columnClassName Highlighted column' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ columnClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: columnClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_COLUMN_TYPE,\n  });\n}\n","import { HIGHLIGHT_FOCUS_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\nimport { A11Y_SELECTED } from '../../../helpers/a11y';\n\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection\n * can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {Function} highlightParams.cellCornerVisible Function to determine if cell's corner should be visible.\n * @returns {Selection}\n */\nexport function createHighlight({ cellCornerVisible, ...restOptions }) {\n  return new VisualSelection({\n    className: 'current',\n    headerAttributes: [A11Y_SELECTED()],\n    border: {\n      width: 2,\n      color: '#4b89ff',\n      cornerVisible: cellCornerVisible,\n    },\n    ...restOptions,\n    selectionType: HIGHLIGHT_FOCUS_TYPE,\n  });\n}\n","import { HIGHLIGHT_CUSTOM_SELECTION_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell.\n * This type of selection can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {object} highlightParams.border Border configuration.\n * @param {object} highlightParams.visualCellRange Function to translate visual to renderable coords.\n * @returns {Selection}\n */\nexport function createHighlight({ border, visualCellRange, ...restOptions }) {\n  return new VisualSelection({\n    ...border,\n    ...restOptions,\n    selectionType: HIGHLIGHT_CUSTOM_SELECTION_TYPE,\n  }, visualCellRange);\n}\n","import { HIGHLIGHT_FILL_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells which are covered by fill handle\n * functionality. This type of selection can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @returns {Selection}\n */\nexport function createHighlight({ ...restOptions }) {\n  return new VisualSelection({\n    className: 'fill',\n    border: {\n      width: 1,\n      color: '#ff0000',\n    },\n    ...restOptions,\n    selectionType: HIGHLIGHT_FILL_TYPE,\n  });\n}\n","import { HIGHLIGHT_HEADER_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting column or row headers when\n * any cell is selected.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.headerClassName Highlighted headers' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ headerClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: headerClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_HEADER_TYPE,\n  });\n}\n","import { HIGHLIGHT_ROW_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells in a rows and\n * row headers.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.rowClassName Highlighted row' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ rowClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: rowClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_ROW_TYPE,\n  });\n}\n","/**\n * The SelectionRange class is a simple CellRanges collection designed for easy manipulation of the multiple\n * consecutive and non-consecutive selections.\n *\n * @class SelectionRange\n * @util\n */\nclass SelectionRange {\n  /**\n   * List of all CellRanges added to the class instance.\n   *\n   * @type {CellRange[]}\n   */\n  ranges = [];\n  /**\n   * @type {function(CellCoords): CellRange}\n   */\n  createCellRange;\n\n  constructor(createCellRange) {\n    this.createCellRange = createCellRange;\n  }\n\n  /**\n   * Check if selected range is empty.\n   *\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return this.size() === 0;\n  }\n\n  /**\n   * Set coordinates to the class instance. It clears all previously added coordinates and push `coords`\n   * to the collection.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {SelectionRange}\n   */\n  set(coords) {\n    this.clear();\n    this.ranges.push(this.createCellRange(coords));\n\n    return this;\n  }\n\n  /**\n   * Add coordinates to the class instance. The new coordinates are added to the end of the range collection.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {SelectionRange}\n   */\n  add(coords) {\n    this.ranges.push(this.createCellRange(coords));\n\n    return this;\n  }\n\n  /**\n   * Removes from the stack the last added coordinates.\n   *\n   * @returns {SelectionRange}\n   */\n  pop() {\n    this.ranges.pop();\n\n    return this;\n  }\n\n  /**\n   * Get last added coordinates from ranges, it returns a CellRange instance.\n   *\n   * @returns {CellRange|undefined}\n   */\n  current() {\n    return this.peekByIndex(this.size() - 1);\n  }\n\n  /**\n   * Get previously added coordinates from ranges, it returns a CellRange instance.\n   *\n   * @returns {CellRange|undefined}\n   */\n  previous() {\n    return this.peekByIndex(this.size() - 2);\n  }\n\n  /**\n   * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n   * the coords object is within selection range.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {boolean}\n   */\n  includes(coords) {\n    return this.ranges.some(cellRange => cellRange.includes(coords));\n  }\n\n  /**\n   * Clear collection.\n   *\n   * @returns {SelectionRange}\n   */\n  clear() {\n    this.ranges.length = 0;\n\n    return this;\n  }\n\n  /**\n   * Get count of added all coordinates added to the selection.\n   *\n   * @returns {number}\n   */\n  size() {\n    return this.ranges.length;\n  }\n\n  /**\n   * Peek the coordinates based on the index where that coordinate resides in the collection.\n   *\n   * @param {number} [index=0] An index where the coordinate will be retrieved from. The index '0' gets the\n   * latest range.\n   * @returns {CellRange|undefined}\n   */\n  peekByIndex(index = 0) {\n    let cellRange;\n\n    if (index >= 0 && index < this.size()) {\n      cellRange = this.ranges[index];\n    }\n\n    return cellRange;\n  }\n\n  [Symbol.iterator]() {\n    return this.ranges[Symbol.iterator]();\n  }\n}\n\nexport default SelectionRange;\n","import { mixin, createObjectPropListener } from '../helpers/object';\nimport localHooks from './../mixins/localHooks';\n\n/**\n * The Transformation class implements algorithms for transforming coordinates based on current settings\n * passed to the Handsontable. The class performs the calculations based on the renderable indexes.\n *\n * Transformation is always applied relative to the current selection.\n *\n * The class operates on a table size defined by the renderable indexes. If the `navigableHeaders`\n * option is enabled, the table size is increased by the number of row and/or column headers.\n * Because the headers are treated as cells as part of the table size (indexes always go from 0 to N),\n * the algorithm can be written as simply as possible (without new if's that distinguish the headers\n * logic).\n *\n * @class Transformation\n * @util\n */\nclass Transformation {\n  /**\n   * Instance of the SelectionRange, holder for visual coordinates applied to the table.\n   *\n   * @type {SelectionRange}\n   */\n  #range;\n  /**\n   * Additional options which define the state of the settings which can infer transformation and\n   * give the possibility to translate indexes.\n   *\n   * @type {object}\n   */\n  #options;\n  /**\n   * Increases the table size by applying the offsets. The option is used by the `navigableHeaders`\n   * option.\n   *\n   * @type {{ x: number, y: number }}\n   */\n  #offset = { x: 0, y: 0 };\n\n  constructor(range, options) {\n    this.#range = range;\n    this.#options = options;\n  }\n\n  /**\n   * Selects cell relative to the current cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n   *                        be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n   * @returns {CellCoords} Visual coordinates after transformation.\n   */\n  transformStart(rowDelta, colDelta, createMissingRecords = false) {\n    const delta = this.#options.createCellCoords(rowDelta, colDelta);\n    let visualCoords = this.#range.current().highlight;\n    const highlightRenderableCoords = this.#options.visualToRenderableCoords(visualCoords);\n    let rowTransformDir = 0;\n    let colTransformDir = 0;\n\n    this.runLocalHooks('beforeTransformStart', delta);\n\n    if (highlightRenderableCoords.row !== null && highlightRenderableCoords.col !== null) {\n      const { width, height } = this.#getTableSize();\n      const { row, col } = this.#visualToZeroBasedCoords(visualCoords);\n      const fixedRowsBottom = this.#options.fixedRowsBottom();\n      const minSpareRows = this.#options.minSpareRows();\n      const minSpareCols = this.#options.minSpareCols();\n      const autoWrapRow = this.#options.autoWrapRow();\n      const autoWrapCol = this.#options.autoWrapCol();\n\n      const zeroBasedCoords = this.#options.createCellCoords(\n        row + delta.row,\n        col + delta.col,\n      );\n\n      if (zeroBasedCoords.row >= height) {\n        const isActionInterrupted = createObjectPropListener(\n          createMissingRecords && minSpareRows > 0 && fixedRowsBottom === 0\n        );\n        const nextColumn = zeroBasedCoords.col + 1;\n        const newCoords = this.#options.createCellCoords(\n          zeroBasedCoords.row - height,\n          nextColumn >= width ? nextColumn - width : nextColumn,\n        );\n\n        this.runLocalHooks(\n          'beforeColumnWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          nextColumn >= width,\n        );\n\n        if (isActionInterrupted.value) {\n          this.runLocalHooks('insertRowRequire', this.#options.countRenderableRows());\n\n        } else if (autoWrapCol) {\n          zeroBasedCoords.assign(newCoords);\n        }\n\n      } else if (zeroBasedCoords.row < 0) {\n        const isActionInterrupted = createObjectPropListener(autoWrapCol);\n        const previousColumn = zeroBasedCoords.col - 1;\n        const newCoords = this.#options.createCellCoords(\n          height + zeroBasedCoords.row,\n          previousColumn < 0 ? width + previousColumn : previousColumn,\n        );\n\n        this.runLocalHooks(\n          'beforeColumnWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          previousColumn < 0,\n        );\n\n        if (autoWrapCol) {\n          zeroBasedCoords.assign(newCoords);\n        }\n      }\n\n      if (zeroBasedCoords.col >= width) {\n        const isActionInterrupted = createObjectPropListener(\n          createMissingRecords && minSpareCols > 0\n        );\n        const nextRow = zeroBasedCoords.row + 1;\n        const newCoords = this.#options.createCellCoords(\n          nextRow >= height ? nextRow - height : nextRow,\n          zeroBasedCoords.col - width,\n        );\n\n        this.runLocalHooks(\n          'beforeRowWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          nextRow >= height,\n        );\n\n        if (isActionInterrupted.value) {\n          this.runLocalHooks('insertColRequire', this.#options.countRenderableColumns());\n\n        } else if (autoWrapRow) {\n          zeroBasedCoords.assign(newCoords);\n        }\n\n      } else if (zeroBasedCoords.col < 0) {\n        const isActionInterrupted = createObjectPropListener(autoWrapRow);\n        const previousRow = zeroBasedCoords.row - 1;\n        const newCoords = this.#options.createCellCoords(\n          previousRow < 0 ? height + previousRow : previousRow,\n          width + zeroBasedCoords.col,\n        );\n\n        this.runLocalHooks(\n          'beforeRowWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          previousRow < 0,\n        );\n\n        if (autoWrapRow) {\n          zeroBasedCoords.assign(newCoords);\n        }\n      }\n\n      const { rowDir, colDir } = this.#clampCoords(zeroBasedCoords);\n\n      rowTransformDir = rowDir;\n      colTransformDir = colDir;\n      visualCoords = this.#zeroBasedToVisualCoords(zeroBasedCoords);\n    }\n\n    this.runLocalHooks('afterTransformStart', visualCoords, rowTransformDir, colTransformDir);\n\n    return visualCoords;\n  }\n\n  /**\n   * Sets selection end cell relative to the current selection end cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   * @returns {CellCoords} Visual coordinates after transformation.\n   */\n  transformEnd(rowDelta, colDelta) {\n    const delta = this.#options.createCellCoords(rowDelta, colDelta);\n    const cellRange = this.#range.current();\n    const highlightRenderableCoords = this.#options.visualToRenderableCoords(cellRange.highlight);\n    const toRow = this.#findFirstNonHiddenZeroBasedRow(cellRange.to.row, cellRange.from.row);\n    const toColumn = this.#findFirstNonHiddenZeroBasedColumn(cellRange.to.col, cellRange.from.col);\n    const visualCoords = cellRange.to.clone();\n    let rowTransformDir = 0;\n    let colTransformDir = 0;\n\n    this.runLocalHooks('beforeTransformEnd', delta);\n\n    if (\n      highlightRenderableCoords.row !== null && highlightRenderableCoords.col !== null &&\n      toRow !== null && toColumn !== null\n    ) {\n      const {\n        row: highlightRow,\n        col: highlightColumn,\n      } = this.#visualToZeroBasedCoords(cellRange.highlight);\n      const coords = this.#options.createCellCoords(toRow + delta.row, toColumn + delta.col);\n      const topStartCorner = cellRange.getTopStartCorner();\n      const topEndCorner = cellRange.getTopEndCorner();\n      const bottomEndCorner = cellRange.getBottomEndCorner();\n\n      if (delta.col < 0 && toColumn >= highlightColumn && coords.col < highlightColumn) {\n        const columnRestDelta = coords.col - highlightColumn;\n\n        coords.col = this.#findFirstNonHiddenZeroBasedColumn(topStartCorner.col, topEndCorner.col) + columnRestDelta;\n\n      } else if (delta.col > 0 && toColumn <= highlightColumn && coords.col > highlightColumn) {\n        const endColumnIndex = this.#findFirstNonHiddenZeroBasedColumn(topEndCorner.col, topStartCorner.col);\n        const columnRestDelta = Math.max(coords.col - endColumnIndex, 1);\n\n        coords.col = endColumnIndex + columnRestDelta;\n      }\n\n      if (delta.row < 0 && toRow >= highlightRow && coords.row < highlightRow) {\n        const rowRestDelta = coords.row - highlightRow;\n\n        coords.row = this.#findFirstNonHiddenZeroBasedRow(topStartCorner.row, bottomEndCorner.row) + rowRestDelta;\n\n      } else if (delta.row > 0 && toRow <= highlightRow && coords.row > highlightRow) {\n        const bottomRowIndex = this.#findFirstNonHiddenZeroBasedRow(bottomEndCorner.row, topStartCorner.row);\n        const rowRestDelta = Math.max(coords.row - bottomRowIndex, 1);\n\n        coords.row = bottomRowIndex + rowRestDelta;\n      }\n\n      const { rowDir, colDir } = this.#clampCoords(coords);\n\n      rowTransformDir = rowDir;\n      colTransformDir = colDir;\n\n      const newVisualCoords = this.#zeroBasedToVisualCoords(coords);\n\n      if (delta.row === 0 && delta.col !== 0) {\n        visualCoords.col = newVisualCoords.col;\n\n      } else if (delta.row !== 0 && delta.col === 0) {\n        visualCoords.row = newVisualCoords.row;\n\n      } else {\n        visualCoords.row = newVisualCoords.row;\n        visualCoords.col = newVisualCoords.col;\n      }\n    }\n\n    this.runLocalHooks('afterTransformEnd', visualCoords, rowTransformDir, colTransformDir);\n\n    return visualCoords;\n  }\n\n  /**\n   * Sets the additional offset in table size that may occur when the `navigableHeaders` option\n   * is enabled.\n   *\n   * @param {{x: number, y: number}} offset Offset as x and y properties.\n   */\n  setOffsetSize({ x, y }) {\n    this.#offset = { x, y };\n  }\n\n  /**\n   * Resets the offset size to the default values.\n   */\n  resetOffsetSize() {\n    this.#offset = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  /**\n   * Clamps the coords to make sure they points to the cell (or header) in the table range.\n   *\n   * @param {CellCoords} zeroBasedCoords The coords object to clamp.\n   * @returns {{rowDir: 1|0|-1, colDir: 1|0|-1}}\n   */\n  #clampCoords(zeroBasedCoords) {\n    const { width, height } = this.#getTableSize();\n    let rowDir = 0;\n    let colDir = 0;\n\n    if (zeroBasedCoords.row < 0) {\n      rowDir = -1;\n      zeroBasedCoords.row = 0;\n\n    } else if (zeroBasedCoords.row > 0 && zeroBasedCoords.row >= height) {\n      rowDir = 1;\n      zeroBasedCoords.row = height - 1;\n    }\n\n    if (zeroBasedCoords.col < 0) {\n      colDir = -1;\n      zeroBasedCoords.col = 0;\n\n    } else if (zeroBasedCoords.col > 0 && zeroBasedCoords.col >= width) {\n      colDir = 1;\n      zeroBasedCoords.col = width - 1;\n    }\n\n    return { rowDir, colDir };\n  }\n\n  /**\n   * Gets the table size in number of rows with headers as \"height\" and number of columns with\n   * headers as \"width\".\n   *\n   * @returns {{width: number, height: number}}\n   */\n  #getTableSize() {\n    return {\n      width: this.#offset.x + this.#options.countRenderableColumns(),\n      height: this.#offset.y + this.#options.countRenderableRows(),\n    };\n  }\n\n  /**\n   * Finds the first non-hidden zero-based row in the table range.\n   *\n   * @param {number} visualRowFrom The visual row from which the search should start.\n   * @param {number} visualRowTo The visual row to which the search should end.\n   * @returns {number | null}\n   */\n  #findFirstNonHiddenZeroBasedRow(visualRowFrom, visualRowTo) {\n    const row = this.#options.findFirstNonHiddenRenderableRow(visualRowFrom, visualRowTo);\n\n    if (row === null) {\n      return null;\n    }\n\n    return this.#offset.y + row;\n  }\n\n  /**\n   * Finds the first non-hidden zero-based column in the table range.\n   *\n   * @param {number} visualColumnFrom The visual column from which the search should start.\n   * @param {number} visualColumnTo The visual column to which the search should end.\n   * @returns {number | null}\n   */\n  #findFirstNonHiddenZeroBasedColumn(visualColumnFrom, visualColumnTo) {\n    const column = this.#options.findFirstNonHiddenRenderableColumn(visualColumnFrom, visualColumnTo);\n\n    if (column === null) {\n      return null;\n    }\n\n    return this.#offset.x + column;\n  }\n\n  /**\n   * Translates the visual coordinates to zero-based ones.\n   *\n   * @param {CellCoords} visualCoords The visual coords to process.\n   * @returns {CellCoords}\n   */\n  #visualToZeroBasedCoords(visualCoords) {\n    const { row, col } = this.#options.visualToRenderableCoords(visualCoords);\n\n    if (row === null || col === null) {\n      throw new Error('Renderable coords are not visible.');\n    }\n\n    return this.#options.createCellCoords(this.#offset.y + row, this.#offset.x + col);\n  }\n\n  /**\n   * Translates the zero-based coordinates to visual ones.\n   *\n   * @param {CellCoords} zeroBasedCoords The coordinates to process.\n   * @returns {CellCoords}\n   */\n  #zeroBasedToVisualCoords(zeroBasedCoords) {\n    const coords = zeroBasedCoords.clone();\n\n    coords.col = zeroBasedCoords.col - this.#offset.x;\n    coords.row = zeroBasedCoords.row - this.#offset.y;\n\n    return this.#options.renderableToVisualCoords(coords);\n  }\n}\n\nmixin(Transformation, localHooks);\n\nexport default Transformation;\n","import { CellRange } from './../3rdparty/walkontable/src';\nimport { arrayEach, arrayReduce } from './../helpers/array';\nimport { isUndefined } from './../helpers/mixed';\n\nexport const SELECTION_TYPE_UNRECOGNIZED = 0;\nexport const SELECTION_TYPE_EMPTY = 1;\nexport const SELECTION_TYPE_ARRAY = 2;\nexport const SELECTION_TYPE_OBJECT = 3;\nexport const SELECTION_TYPES = [\n  SELECTION_TYPE_OBJECT,\n  SELECTION_TYPE_ARRAY,\n];\nconst ARRAY_TYPE_PATTERN = [\n  ['number'],\n  ['number', 'string'],\n  ['number', 'undefined'],\n  ['number', 'string', 'undefined']\n];\nconst rootCall = Symbol('root');\nconst childCall = Symbol('child');\n\n/**\n * Detect selection schema structure.\n *\n * @param {*} selectionRanges The selected range or and array of selected ranges. This type of data is produced by\n * `hot.getSelected()`, `hot.getSelectedLast()`, `hot.getSelectedRange()`\n * and `hot.getSelectedRangeLast()` methods.\n * @param {symbol} _callSymbol The symbol object which indicates source of the helper invocation.\n * @returns {number} Returns a number that specifies the type of detected selection schema. If selection schema type\n * is unrecognized than it returns `0`.\n */\nexport function detectSelectionType(selectionRanges, _callSymbol = rootCall) {\n  if (_callSymbol !== rootCall && _callSymbol !== childCall) {\n    throw new Error('The second argument is used internally only and cannot be overwritten.');\n  }\n\n  const isArray = Array.isArray(selectionRanges);\n  const isRootCall = _callSymbol === rootCall;\n  let result = SELECTION_TYPE_UNRECOGNIZED;\n\n  if (isArray) {\n    const firstItem = selectionRanges[0];\n\n    if (selectionRanges.length === 0) {\n      result = SELECTION_TYPE_EMPTY;\n\n    } else if (isRootCall && firstItem instanceof CellRange) {\n      result = SELECTION_TYPE_OBJECT;\n\n    } else if (isRootCall && Array.isArray(firstItem)) {\n      result = detectSelectionType(firstItem, childCall);\n\n    } else if (selectionRanges.length >= 2 && selectionRanges.length <= 4) {\n      const isArrayType = !selectionRanges.some((value, index) => !ARRAY_TYPE_PATTERN[index].includes(typeof value));\n\n      if (isArrayType) {\n        result = SELECTION_TYPE_ARRAY;\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Factory function designed for normalization data schema from different data structures of the selection ranges.\n *\n * @param {number} type Selection type which will be processed.\n * @param {object} options The normalization options.\n * @param {function(number, number): CellCoords} options.createCellCoords The factory function that returns an instance of the `CellCoords` class.\n * @param {function(CellCoords, CellCoords, CellCoords): CellRange} options.createCellRange The factory function that returns an instance of the `CellRange` class.\n * @param {boolean} [options.keepDirection=false] If `true`, the coordinates which contain the direction of the\n *                                                selected cells won't be changed. Otherwise, the selection will be\n *                                                normalized to values starting from top-left to bottom-right.\n * @param {Function} [options.propToCol] Pass the converting function (usually `datamap.propToCol`) if the column\n *                                       defined as props should be normalized to the numeric values.\n * @returns {number[]} Returns normalized data about selected range as an array (`[rowStart, columnStart, rowEnd, columnEnd]`).\n */\nexport function normalizeSelectionFactory(type, {\n  createCellCoords,\n  createCellRange,\n  keepDirection = false,\n  propToCol,\n} = {}) {\n  if (!SELECTION_TYPES.includes(type)) {\n    throw new Error('Unsupported selection ranges schema type was provided.');\n  }\n\n  return function(selection) {\n    const isObjectType = type === SELECTION_TYPE_OBJECT;\n    let rowStart = isObjectType ? selection.from.row : selection[0];\n    let columnStart = isObjectType ? selection.from.col : selection[1];\n    let rowEnd = isObjectType ? selection.to.row : selection[2];\n    let columnEnd = isObjectType ? selection.to.col : selection[3];\n\n    if (typeof propToCol === 'function') {\n      if (typeof columnStart === 'string') {\n        columnStart = propToCol(columnStart);\n      }\n      if (typeof columnEnd === 'string') {\n        columnEnd = propToCol(columnEnd);\n      }\n    }\n\n    if (isUndefined(rowEnd)) {\n      rowEnd = rowStart;\n    }\n    if (isUndefined(columnEnd)) {\n      columnEnd = columnStart;\n    }\n\n    if (!keepDirection) {\n      const origRowStart = rowStart;\n      const origColumnStart = columnStart;\n      const origRowEnd = rowEnd;\n      const origColumnEnd = columnEnd;\n\n      rowStart = Math.min(origRowStart, origRowEnd);\n      columnStart = Math.min(origColumnStart, origColumnEnd);\n      rowEnd = Math.max(origRowStart, origRowEnd);\n      columnEnd = Math.max(origColumnStart, origColumnEnd);\n    }\n\n    const from = createCellCoords(rowStart, columnStart);\n    const to = createCellCoords(rowEnd, columnEnd);\n\n    return createCellRange(from, from, to);\n  };\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Core} hotInstance The Handsontable instance.\n * @returns {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\nexport function transformSelectionToColumnDistance(hotInstance) {\n  const selectionType = detectSelectionType(hotInstance.getSelected());\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n    createCellCoords: hotInstance._createCellCoords.bind(hotInstance),\n    createCellRange: hotInstance._createCellRange.bind(hotInstance),\n  });\n  const unorderedIndexes = new Set();\n\n  // Iterate through all ranges and collect all column indexes which are not saved yet.\n  arrayEach(hotInstance.getSelected(), (selection) => {\n    const { from, to } = selectionSchemaNormalizer(selection);\n    const columnNonHeaderStart = Math.max(from.col, 0);\n    const amount = to.col - columnNonHeaderStart + 1;\n\n    arrayEach(Array.from(new Array(amount), (_, i) => columnNonHeaderStart + i), (index) => {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  });\n\n  // Sort indexes in ascending order to easily detecting non-consecutive columns.\n  const orderedIndexes = Array.from(unorderedIndexes).sort((a, b) => a - b);\n  const normalizedColumnRanges = arrayReduce(orderedIndexes, (acc, visualColumnIndex, index, array) => {\n    if (index !== 0 && visualColumnIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n\n    } else {\n      acc.push([visualColumnIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n\n  return normalizedColumnRanges;\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Core} hotInstance The Handsontable instance.\n * @returns {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\nexport function transformSelectionToRowDistance(hotInstance) {\n  const selectionType = detectSelectionType(hotInstance.getSelected());\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n    createCellCoords: hotInstance._createCellCoords.bind(hotInstance),\n    createCellRange: hotInstance._createCellRange.bind(hotInstance),\n  });\n  const unorderedIndexes = new Set();\n\n  // Iterate through all ranges and collect all column indexes which are not saved yet.\n  arrayEach(hotInstance.getSelected(), (selection) => {\n    const { from, to } = selectionSchemaNormalizer(selection);\n    const rowNonHeaderStart = Math.max(from.row, 0);\n    const amount = to.row - rowNonHeaderStart + 1;\n\n    arrayEach(Array.from(new Array(amount), (_, i) => rowNonHeaderStart + i), (index) => {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  });\n\n  // Sort indexes in ascending order to easily detecting non-consecutive columns.\n  const orderedIndexes = Array.from(unorderedIndexes).sort((a, b) => a - b);\n  const normalizedRowRanges = arrayReduce(orderedIndexes, (acc, rowIndex, index, array) => {\n    if (index !== 0 && rowIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n\n    } else {\n      acc.push([rowIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n\n  return normalizedRowRanges;\n}\n","import DataMap from './dataMap';\nimport MetaManager from './metaManager';\nimport metaSchemaFactory from './metaManager/metaSchema';\nimport { replaceData } from './replaceData';\nimport { DynamicCellMetaMod } from './metaManager/mods/dynamicCellMeta';\nimport { ExtendMetaPropertiesMod } from './metaManager/mods/extendMetaProperties';\n\nexport {\n  DataMap,\n  MetaManager,\n  DynamicCellMetaMod,\n  ExtendMetaPropertiesMod,\n  metaSchemaFactory,\n  replaceData\n};\n","import { stringify } from '../3rdparty/SheetClip';\nimport {\n  countFirstRowKeys\n} from '../helpers/data';\nimport {\n  createObjectPropListener,\n  deepClone,\n  deepExtend,\n  deepObjectSize,\n  duckSchema,\n  hasOwnProperty,\n  isObject,\n  objectEach\n} from '../helpers/object';\nimport { extendArray, to2dArray } from '../helpers/array';\nimport { rangeEach } from '../helpers/number';\nimport { isDefined } from '../helpers/mixed';\n\n/*\nThis class contains open-source contributions covered by the MIT license.\n\n1) In the `createRow` method: Row creation using functional `dataSchema` value\n2) In the `set` method: Data setting using functional `prop` value\n3) in the `get` method: Data getting using functional `prop` value\n\nThe remaining part of this code comment contains the full license text of these contributions.\n\n======\n\nThe MIT License\n\nCopyright 2013 Nicholas Bollweg\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n*/\n\n/**\n * Utility class that gets and saves data from/to the data source using mapping of columns numbers to object property names.\n *\n * @todo Refactor arguments of methods getRange, getText to be numbers (not objects).\n * @todo Remove priv, GridSettings from object constructor.\n *\n * @class DataMap\n * @private\n */\nclass DataMap {\n  /**\n   * @type {number}\n   */\n  static get DESTINATION_RENDERER() {\n    return 1;\n  }\n\n  /**\n   * @type {number}\n   */\n  static get DESTINATION_CLIPBOARD_GENERATOR() {\n    return 2;\n  }\n\n  /**\n   * Instance of {@link Handsontable}.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Instance of {@link MetaManager}.\n   *\n   * @private\n   * @type {MetaManager}\n   */\n  metaManager;\n  /**\n   * Instance of {@link TableMeta}.\n   *\n   * @private\n   * @type {TableMeta}\n   */\n  tableMeta;\n  /**\n   * Reference to the original dataset.\n   *\n   * @type {*}\n   */\n  dataSource;\n  /**\n   * Generated schema based on the first row from the source data.\n   *\n   * @type {object}\n   */\n  duckSchema;\n  /**\n   * Cached array of properties to columns.\n   *\n   * @type {Array}\n   */\n  colToPropCache;\n  /**\n   * Cached map of properties to columns.\n   *\n   * @type {Map}\n   */\n  propToColCache;\n\n  /**\n   * @param {object} hotInstance Instance of Handsontable.\n   * @param {Array} data Array of arrays or array of objects containing data.\n   * @param {MetaManager} metaManager The meta manager instance.\n   */\n  constructor(hotInstance, data, metaManager) {\n    this.hot = hotInstance;\n    this.metaManager = metaManager;\n    this.tableMeta = metaManager.getTableMeta();\n    this.dataSource = data;\n    this.duckSchema = this.createDuckSchema();\n\n    this.createMap();\n  }\n\n  /**\n   * Generates cache for property to and from column addressation.\n   */\n  createMap() {\n    const schema = this.getSchema();\n\n    if (typeof schema === 'undefined') {\n      throw new Error('trying to create `columns` definition but you didn\\'t provide `schema` nor `data`');\n    }\n\n    const columns = this.tableMeta.columns;\n    let i;\n\n    this.colToPropCache = [];\n    this.propToColCache = new Map();\n\n    if (columns) {\n      let columnsLen = 0;\n      let filteredIndex = 0;\n      let columnsAsFunc = false;\n\n      if (typeof columns === 'function') {\n        const schemaLen = deepObjectSize(schema);\n\n        columnsLen = schemaLen > 0 ? schemaLen : this.countFirstRowKeys();\n        columnsAsFunc = true;\n\n      } else {\n        const maxCols = this.tableMeta.maxCols;\n\n        columnsLen = Math.min(maxCols, columns.length);\n      }\n\n      for (i = 0; i < columnsLen; i++) {\n        const column = columnsAsFunc ? columns(i) : columns[i];\n\n        if (isObject(column)) {\n          if (typeof column.data !== 'undefined') {\n            const index = columnsAsFunc ? filteredIndex : i;\n\n            this.colToPropCache[index] = column.data;\n            this.propToColCache.set(column.data, index);\n          }\n\n          filteredIndex += 1;\n        }\n      }\n\n    } else {\n      this.recursiveDuckColumns(schema);\n    }\n  }\n\n  /**\n   * Get the amount of physical columns in the first data row.\n   *\n   * @returns {number} Amount of physical columns in the first data row.\n   */\n  countFirstRowKeys() {\n    return countFirstRowKeys(this.dataSource);\n  }\n\n  /**\n   * Generates columns' translation cache.\n   *\n   * @param {object} schema An object to generate schema from.\n   * @param {number} lastCol The column index.\n   * @param {number} parent The property cache for recursive calls.\n   * @returns {number}\n   */\n  recursiveDuckColumns(schema, lastCol, parent) {\n    let lastColumn = lastCol;\n    let propertyParent = parent;\n    let prop;\n\n    if (typeof lastColumn === 'undefined') {\n      lastColumn = 0;\n      propertyParent = '';\n    }\n    if (typeof schema === 'object' && !Array.isArray(schema)) {\n      objectEach(schema, (value, key) => {\n        if (value === null) {\n          prop = propertyParent + key;\n          this.colToPropCache.push(prop);\n          this.propToColCache.set(prop, lastColumn);\n\n          lastColumn += 1;\n        } else {\n          lastColumn = this.recursiveDuckColumns(value, lastColumn, `${key}.`);\n        }\n      });\n    }\n\n    return lastColumn;\n  }\n\n  /**\n   * Returns property name that corresponds with the given column index.\n   *\n   * @param {string|number} column Visual column index or another passed argument.\n   * @returns {string|number} Column property, physical column index or passed argument.\n   */\n  colToProp(column) {\n    // TODO: Should it work? Please, look at the test:\n    // \"it should return the provided property name, when the user passes a property name as a column number\".\n    if (Number.isInteger(column) === false) {\n      return column;\n    }\n\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    // Out of range, not visible column index.\n    if (physicalColumn === null) {\n      return column;\n    }\n\n    // Cached property.\n    if (this.colToPropCache && isDefined(this.colToPropCache[physicalColumn])) {\n      return this.colToPropCache[physicalColumn];\n    }\n\n    return physicalColumn;\n  }\n\n  /**\n   * Translates property into visual column index.\n   *\n   * @param {string|number} prop Column property which may be also a physical column index.\n   * @returns {string|number} Visual column index or passed argument.\n   */\n  propToCol(prop) {\n    const cachedPhysicalIndex = this.propToColCache.get(prop);\n\n    if (isDefined(cachedPhysicalIndex)) {\n      return this.hot.toVisualColumn(cachedPhysicalIndex);\n    }\n\n    // Property may be a physical column index.\n    const visualColumn = this.hot.toVisualColumn(prop);\n\n    if (visualColumn === null) {\n      return prop;\n    }\n\n    return visualColumn;\n  }\n\n  /**\n   * Returns data's schema.\n   *\n   * @returns {object}\n   */\n  getSchema() {\n    const schema = this.tableMeta.dataSchema;\n\n    if (schema) {\n      if (typeof schema === 'function') {\n        return schema();\n      }\n\n      return schema;\n    }\n\n    return this.duckSchema;\n  }\n\n  /**\n   * Creates the duck schema based on the current dataset.\n   *\n   * @returns {Array|object}\n   */\n  createDuckSchema() {\n    return this.dataSource && this.dataSource[0] ? duckSchema(this.dataSource[0]) : {};\n  }\n\n  /**\n   * Refresh the data schema.\n   */\n  refreshDuckSchema() {\n    this.duckSchema = this.createDuckSchema();\n  }\n\n  /**\n   * Creates row at the bottom of the data array.\n   *\n   * @param {number} [index] Physical index of the row before which the new row will be inserted.\n   * @param {number} [amount=1] An amount of rows to add.\n   * @param {object} [options] Additional options for created rows.\n   * @param {string} [options.source] Source of method call.\n   * @param {'above'|'below'} [options.mode] Sets where the row is inserted: above or below the passed index.\n   * @fires Hooks#afterCreateRow\n   * @returns {number} Returns number of created rows.\n   */\n  createRow(index, amount = 1, { source, mode = 'above' } = {}) {\n    const sourceRowsCount = this.hot.countSourceRows();\n    let physicalRowIndex = sourceRowsCount;\n    let numberOfCreatedRows = 0;\n    let rowIndex = index;\n\n    if (typeof rowIndex !== 'number' || rowIndex >= sourceRowsCount) {\n      rowIndex = sourceRowsCount;\n    }\n\n    if (rowIndex < this.hot.countRows()) {\n      physicalRowIndex = this.hot.toPhysicalRow(rowIndex);\n    }\n\n    const continueProcess = this.hot.runHooks('beforeCreateRow', rowIndex, amount, source);\n\n    if (continueProcess === false || physicalRowIndex === null) {\n      return {\n        delta: 0,\n      };\n    }\n\n    const maxRows = this.tableMeta.maxRows;\n    const columnCount = this.getSchema().length;\n    const rowsToAdd = [];\n\n    while (numberOfCreatedRows < amount && sourceRowsCount + numberOfCreatedRows < maxRows) {\n      let row = null;\n\n      if (this.hot.dataType === 'array') {\n        if (this.tableMeta.dataSchema) {\n          // Clone template array\n          row = deepClone(this.getSchema());\n\n        } else {\n          row = [];\n          /* eslint-disable no-loop-func */\n          rangeEach(columnCount - 1, () => row.push(null));\n        }\n\n      } else if (this.hot.dataType === 'function') {\n        row = this.tableMeta.dataSchema(rowIndex + numberOfCreatedRows);\n\n      } else {\n        row = {};\n        deepExtend(row, this.getSchema());\n      }\n\n      rowsToAdd.push(row);\n\n      numberOfCreatedRows += 1;\n    }\n\n    this.hot.rowIndexMapper.insertIndexes(rowIndex, numberOfCreatedRows);\n\n    if (mode === 'below') {\n      physicalRowIndex = Math.min(physicalRowIndex + 1, sourceRowsCount);\n    }\n\n    this.spliceData(physicalRowIndex, 0, rowsToAdd);\n\n    const newVisualRowIndex = this.hot.toVisualRow(physicalRowIndex);\n\n    // In case the created rows are the only ones in the table, the column index mappers need to be rebuilt based on\n    // the number of columns created in the row or the schema.\n    if (this.hot.countSourceRows() === rowsToAdd.length) {\n      this.hot.columnIndexMapper.initToLength(this.hot.getInitialColumnCount());\n    }\n\n    if (numberOfCreatedRows > 0) {\n      if ((index === undefined || index === null)) {\n        // Creates the meta rows at the end of the rows collection without shifting the cells\n        // that were defined out of the range of the dataset.\n        this.metaManager.createRow(null, numberOfCreatedRows);\n\n      } else if (source !== 'auto') {\n        this.metaManager.createRow(physicalRowIndex, amount);\n      }\n    }\n\n    this.hot.runHooks('afterCreateRow', newVisualRowIndex, numberOfCreatedRows, source);\n    this.hot.forceFullRender = true; // used when data was changed\n\n    return {\n      delta: numberOfCreatedRows,\n      startPhysicalIndex: physicalRowIndex,\n    };\n  }\n\n  /**\n   * Creates column at the right of the data array.\n   *\n   * @param {number} [index] Visual index of the column before which the new column will be inserted.\n   * @param {number} [amount=1] An amount of columns to add.\n   * @param {object} [options] Additional options for created columns.\n   * @param {string} [options.source] Source of method call.\n   * @param {'start'|'end'} [options.mode] Sets where the column is inserted: at the start (left in [LTR](@/api/options.md#layoutdirection), right in [RTL](@/api/options.md#layoutdirection)) or at the end (right in LTR, left in LTR)\n   * the passed index.\n   * @fires Hooks#afterCreateCol\n   * @returns {number} Returns number of created columns.\n   */\n  createCol(index, amount = 1, { source, mode = 'start' } = {}) {\n    if (!this.hot.isColumnModificationAllowed()) {\n      throw new Error('Cannot create new column. When data source in an object, ' +\n        'you can only have as much columns as defined in first data row, data schema or in the \\'columns\\' setting.' +\n        'If you want to be able to add new columns, you have to use array datasource.');\n    }\n\n    const dataSource = this.dataSource;\n    const maxCols = this.tableMeta.maxCols;\n    const countSourceCols = this.hot.countSourceCols();\n    let columnIndex = index;\n\n    if (typeof columnIndex !== 'number' || columnIndex >= countSourceCols) {\n      columnIndex = countSourceCols;\n    }\n\n    const continueProcess = this.hot.runHooks('beforeCreateCol', columnIndex, amount, source);\n\n    if (continueProcess === false) {\n      return {\n        delta: 0,\n      };\n    }\n\n    let physicalColumnIndex = countSourceCols;\n\n    if (columnIndex < this.hot.countCols()) {\n      physicalColumnIndex = this.hot.toPhysicalColumn(columnIndex);\n    }\n\n    const numberOfSourceRows = this.hot.countSourceRows();\n    let nrOfColumns = this.hot.countCols();\n    let numberOfCreatedCols = 0;\n    let currentIndex = physicalColumnIndex;\n\n    if (mode === 'end') {\n      currentIndex = Math.min(currentIndex + 1, countSourceCols);\n    }\n\n    const startPhysicalIndex = currentIndex;\n\n    while (numberOfCreatedCols < amount && nrOfColumns < maxCols) {\n      if (typeof columnIndex !== 'number' || columnIndex >= nrOfColumns) {\n        if (numberOfSourceRows > 0) {\n          for (let row = 0; row < numberOfSourceRows; row += 1) {\n            if (typeof dataSource[row] === 'undefined') {\n              dataSource[row] = [];\n            }\n\n            dataSource[row].push(null);\n          }\n        } else {\n          dataSource.push([null]);\n        }\n\n      } else {\n        for (let row = 0; row < numberOfSourceRows; row++) {\n          dataSource[row].splice(currentIndex, 0, null);\n        }\n      }\n\n      numberOfCreatedCols += 1;\n      currentIndex += 1;\n      nrOfColumns += 1;\n    }\n\n    this.hot.columnIndexMapper.insertIndexes(columnIndex, numberOfCreatedCols);\n\n    if (numberOfCreatedCols > 0) {\n      if ((index === undefined || index === null)) {\n        // Creates the meta columns at the end of the columns collection without shifting the cells\n        // that were defined out of the range of the dataset.\n        this.metaManager.createColumn(null, numberOfCreatedCols);\n\n      } else if (source !== 'auto') {\n        this.metaManager.createColumn(startPhysicalIndex, amount);\n      }\n    }\n\n    const newVisualColumnIndex = this.hot.toVisualColumn(startPhysicalIndex);\n\n    this.hot.runHooks('afterCreateCol', newVisualColumnIndex, numberOfCreatedCols, source);\n    this.hot.forceFullRender = true; // used when data was changed\n\n    this.refreshDuckSchema();\n\n    return {\n      delta: numberOfCreatedCols,\n      startPhysicalIndex,\n    };\n  }\n\n  /**\n   * Removes row from the data array.\n   *\n   * @fires Hooks#beforeRemoveRow\n   * @fires Hooks#afterRemoveRow\n   * @param {number} [index] Visual index of the row to be removed. If not provided, the last row will be removed.\n   * @param {number} [amount=1] Amount of the rows to be removed. If not provided, one row will be removed.\n   * @param {string} [source] Source of method call.\n   * @returns {boolean} Returns `false` when action was cancelled, otherwise `true`.\n   */\n  removeRow(index, amount = 1, source) {\n    let rowIndex = Number.isInteger(index) ? index : -amount; // -amount = taking indexes from the end.\n    const removedPhysicalIndexes = this.visualRowsToPhysical(rowIndex, amount);\n    const sourceRowsLength = this.hot.countSourceRows();\n\n    rowIndex = (sourceRowsLength + rowIndex) % sourceRowsLength;\n\n    // It handle also callback from the `NestedRows` plugin. Removing parent node has effect in removing children nodes.\n    const actionWasNotCancelled = this.hot.runHooks(\n      'beforeRemoveRow', rowIndex, removedPhysicalIndexes.length, removedPhysicalIndexes, source\n    );\n\n    if (actionWasNotCancelled === false) {\n      return false;\n    }\n\n    // List of removed indexes might be changed in the `beforeRemoveRow` hook. There may be new values.\n    const numberOfRemovedIndexes = removedPhysicalIndexes.length;\n\n    this.filterData(rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes);\n\n    // TODO: Function `removeRow` should validate fully, probably above.\n    if (rowIndex < this.hot.countRows()) {\n      this.hot.rowIndexMapper.removeIndexes(removedPhysicalIndexes);\n\n      const customDefinedColumns = isDefined(this.tableMeta.columns) || isDefined(this.tableMeta.dataSchema);\n\n      // All rows have been removed. There shouldn't be any columns.\n      if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && customDefinedColumns === false) {\n        this.hot.columnIndexMapper.setIndexesSequence([]);\n      }\n    }\n\n    const descendingPhysicalRows = removedPhysicalIndexes.slice(0).sort((a, b) => b - a);\n\n    descendingPhysicalRows.forEach((rowPhysicalIndex) => {\n      this.metaManager.removeRow(rowPhysicalIndex, 1);\n    });\n\n    this.hot.runHooks('afterRemoveRow', rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes, source);\n    this.hot.forceFullRender = true; // used when data was changed\n\n    return true;\n  }\n\n  /**\n   * Removes column from the data array.\n   *\n   * @fires Hooks#beforeRemoveCol\n   * @fires Hooks#afterRemoveCol\n   * @param {number} [index] Visual index of the column to be removed. If not provided, the last column will be removed.\n   * @param {number} [amount=1] Amount of the columns to be removed. If not provided, one column will be removed.\n   * @param {string} [source] Source of method call.\n   * @returns {boolean} Returns `false` when action was cancelled, otherwise `true`.\n   */\n  removeCol(index, amount = 1, source) {\n    if (this.hot.dataType === 'object' || this.tableMeta.columns) {\n      throw new Error('cannot remove column with object data source or columns option specified');\n    }\n    let columnIndex = typeof index !== 'number' ? -amount : index;\n\n    columnIndex = (this.hot.countCols() + columnIndex) % this.hot.countCols();\n\n    const removedPhysicalIndexes = this.visualColumnsToPhysical(columnIndex, amount);\n    const descendingPhysicalColumns = removedPhysicalIndexes.slice(0).sort((a, b) => b - a);\n    const actionWasNotCancelled = this.hot\n      .runHooks('beforeRemoveCol', columnIndex, amount, removedPhysicalIndexes, source);\n\n    if (actionWasNotCancelled === false) {\n      return false;\n    }\n\n    let isTableUniform = true;\n    const removedColumnsCount = descendingPhysicalColumns.length;\n    const data = this.dataSource;\n\n    for (let c = 0; c < removedColumnsCount; c++) {\n      if (isTableUniform && removedPhysicalIndexes[0] !== removedPhysicalIndexes[c] - c) {\n        isTableUniform = false;\n      }\n    }\n\n    if (isTableUniform) {\n      for (let r = 0, rlen = this.hot.countSourceRows(); r < rlen; r++) {\n        data[r].splice(removedPhysicalIndexes[0], amount);\n\n        if (r === 0) {\n          this.metaManager.removeColumn(removedPhysicalIndexes[0], amount);\n        }\n      }\n\n    } else {\n      for (let r = 0, rlen = this.hot.countSourceRows(); r < rlen; r++) {\n        for (let c = 0; c < removedColumnsCount; c++) {\n          data[r].splice(descendingPhysicalColumns[c], 1);\n\n          if (r === 0) {\n            this.metaManager.removeColumn(descendingPhysicalColumns[c], 1);\n          }\n        }\n      }\n    }\n\n    // TODO: Function `removeCol` should validate fully, probably above.\n    if (columnIndex < this.hot.countCols()) {\n      this.hot.columnIndexMapper.removeIndexes(removedPhysicalIndexes);\n\n      // All columns have been removed. There shouldn't be any rows.\n      if (this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {\n        this.hot.rowIndexMapper.setIndexesSequence([]);\n      }\n    }\n\n    this.hot.runHooks('afterRemoveCol', columnIndex, amount, removedPhysicalIndexes, source);\n    this.hot.forceFullRender = true; // used when data was changed\n    this.refreshDuckSchema();\n\n    return true;\n  }\n\n  /**\n   * Add/Removes data from the column.\n   *\n   * @param {number} col Physical index of column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {Array} [elements] The new columns to add.\n   * @returns {Array} Returns removed portion of columns.\n   */\n  spliceCol(col, index, amount, ...elements) {\n    const colData = this.hot.getDataAtCol(col);\n    const removed = colData.slice(index, index + amount);\n    const after = colData.slice(index + amount);\n\n    extendArray(elements, after);\n    let i = 0;\n\n    while (i < amount) {\n      elements.push(null); // add null in place of removed elements\n      i += 1;\n    }\n    to2dArray(elements);\n    this.hot.populateFromArray(index, col, elements, null, null, 'spliceCol');\n\n    return removed;\n  }\n\n  /**\n   * Add/Removes data from the row.\n   *\n   * @param {number} row Physical index of row in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {Array} [elements] The new rows to add.\n   * @returns {Array} Returns removed portion of rows.\n   */\n  spliceRow(row, index, amount, ...elements) {\n    const rowData = this.hot.getSourceDataAtRow(row);\n    const removed = rowData.slice(index, index + amount);\n    const after = rowData.slice(index + amount);\n\n    extendArray(elements, after);\n    let i = 0;\n\n    while (i < amount) {\n      elements.push(null); // add null in place of removed elements\n      i += 1;\n    }\n    this.hot.populateFromArray(row, index, [elements], null, null, 'spliceRow');\n\n    return removed;\n  }\n\n  /**\n   * Add/remove row(s) to/from the data source.\n   *\n   * @param {number} index Physical index of the element to add/remove.\n   * @param {number} deleteCount Number of rows to remove.\n   * @param {Array<object>} elements Row elements to be added.\n   */\n  spliceData(index, deleteCount, elements) {\n    const continueSplicing = this.hot.runHooks('beforeDataSplice', index, deleteCount, elements);\n\n    if (continueSplicing !== false) {\n      const newData = [...this.dataSource.slice(0, index), ...elements, ...this.dataSource.slice(index)];\n\n      // We try not to change the reference.\n      this.dataSource.length = 0;\n\n      // Pushing to array instead of using `splice`, because Babel changes the code to one that uses the `apply` method.\n      // The used method was cause of the problem described within #7840.\n      newData.forEach(row => this.dataSource.push(row));\n    }\n  }\n\n  /**\n   * Filter unwanted data elements from the data source.\n   *\n   * @param {number} index Visual index of the element to remove.\n   * @param {number} amount Number of rows to add/remove.\n   * @param {number} physicalRows Physical row indexes.\n   */\n  filterData(index, amount, physicalRows) {\n    // Custom data filtering (run as a consequence of calling the below hook) provide an array containing new data.\n    let data = this.hot.runHooks('filterData', index, amount, physicalRows);\n\n    // Hooks by default returns first argument (when there is no callback changing execution result).\n    if (Array.isArray(data) === false) {\n      data = this.dataSource.filter((row, rowIndex) => physicalRows.indexOf(rowIndex) === -1);\n    }\n\n    this.dataSource.length = 0;\n    Array.prototype.push.apply(this.dataSource, data);\n  }\n\n  /**\n   * Returns single value from the data array.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} prop The column property.\n   * @returns {*}\n   */\n  get(row, prop) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n\n    let dataRow = this.dataSource[physicalRow];\n    // TODO: To remove, use 'modifyData' hook instead (see below)\n    const modifiedRowData = this.hot.runHooks('modifyRowData', physicalRow);\n\n    dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n    //\n\n    const { dataDotNotation } = this.hot.getSettings();\n    let value = null;\n\n    // try to get value under property `prop` (includes dot)\n    if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n      value = dataRow[prop];\n\n    } else if (dataDotNotation && typeof prop === 'string' && prop.indexOf('.') > -1) {\n      let out = dataRow;\n\n      if (!out) {\n        return null;\n      }\n\n      const sliced = prop.split('.');\n\n      for (let i = 0, ilen = sliced.length; i < ilen; i++) {\n        out = out[sliced[i]];\n\n        if (typeof out === 'undefined') {\n          return null;\n        }\n      }\n\n      value = out;\n\n    } else if (typeof prop === 'function') {\n      value = prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0]);\n    }\n\n    if (this.hot.hasHook('modifyData')) {\n      const valueHolder = createObjectPropListener(value);\n\n      this.hot.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'get');\n\n      if (valueHolder.isTouched()) {\n        value = valueHolder.value;\n      }\n    }\n\n    return value;\n  }\n\n  /**\n   * Returns single value from the data array (intended for clipboard copy to an external application).\n   *\n   * @param {number} row Physical row index.\n   * @param {number} prop The column property.\n   * @returns {string}\n   */\n  getCopyable(row, prop) {\n    if (this.hot.getCellMeta(row, this.propToCol(prop)).copyable) {\n      return this.get(row, prop);\n    }\n\n    return '';\n  }\n\n  /**\n   * Saves single value to the data array.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} prop The column property.\n   * @param {string} value The value to set.\n   */\n  set(row, prop, value) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    let newValue = value;\n    let dataRow = this.dataSource[physicalRow];\n    // TODO: To remove, use 'modifyData' hook instead (see below)\n    const modifiedRowData = this.hot.runHooks('modifyRowData', physicalRow);\n\n    dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n    //\n\n    if (this.hot.hasHook('modifyData')) {\n      const valueHolder = createObjectPropListener(newValue);\n\n      this.hot.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'set');\n\n      if (valueHolder.isTouched()) {\n        newValue = valueHolder.value;\n      }\n    }\n\n    const { dataDotNotation } = this.hot.getSettings();\n\n    // try to set value under property `prop` (includes dot)\n    if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n      dataRow[prop] = newValue;\n\n    } else if (dataDotNotation && typeof prop === 'string' && prop.indexOf('.') > -1) {\n      let out = dataRow;\n      let i = 0;\n      let ilen;\n\n      const sliced = prop.split('.');\n\n      for (i = 0, ilen = sliced.length - 1; i < ilen; i++) {\n        if (typeof out[sliced[i]] === 'undefined') {\n          out[sliced[i]] = {};\n        }\n        out = out[sliced[i]];\n      }\n\n      out[sliced[i]] = newValue;\n\n    } else if (typeof prop === 'function') {\n      prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0], newValue);\n\n    } else {\n      dataRow[prop] = newValue;\n    }\n  }\n\n  /**\n   * This ridiculous piece of code maps rows Id that are present in table data to those displayed for user.\n   * The trick is, the physical row id (stored in settings.data) is not necessary the same\n   * as the visual (displayed) row id (e.g. When sorting is applied).\n   *\n   * @param {number} index Visual row index.\n   * @param {number} amount An amount of rows to translate.\n   * @returns {number}\n   */\n  visualRowsToPhysical(index, amount) {\n    const totalRows = this.hot.countSourceRows();\n    const logicRows = [];\n    let physicRow = (totalRows + index) % totalRows;\n    let rowsToRemove = amount;\n    let row;\n\n    while (physicRow < totalRows && rowsToRemove) {\n      row = this.hot.toPhysicalRow(physicRow);\n      logicRows.push(row);\n\n      rowsToRemove -= 1;\n      physicRow += 1;\n    }\n\n    return logicRows;\n  }\n\n  /**\n   *\n   * @param {number} index Visual column index.\n   * @param {number} amount An amount of rows to translate.\n   * @returns {Array}\n   */\n  visualColumnsToPhysical(index, amount) {\n    const totalCols = this.hot.countCols();\n    const visualCols = [];\n    let physicalCol = (totalCols + index) % totalCols;\n    let colsToRemove = amount;\n\n    while (physicalCol < totalCols && colsToRemove) {\n      const col = this.hot.toPhysicalColumn(physicalCol);\n\n      visualCols.push(col);\n\n      colsToRemove -= 1;\n      physicalCol += 1;\n    }\n\n    return visualCols;\n  }\n\n  /**\n   * Clears the data array.\n   */\n  clear() {\n    for (let r = 0; r < this.hot.countSourceRows(); r++) {\n      for (let c = 0; c < this.hot.countCols(); c++) {\n        this.set(r, this.colToProp(c), '');\n      }\n    }\n  }\n\n  /**\n   * Get data length.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    const maxRowsFromSettings = this.tableMeta.maxRows;\n    let maxRows;\n\n    if (maxRowsFromSettings < 0 || maxRowsFromSettings === 0) {\n      maxRows = 0;\n\n    } else {\n      maxRows = maxRowsFromSettings || Infinity;\n    }\n\n    const length = this.hot.rowIndexMapper.getNotTrimmedIndexesLength();\n\n    return Math.min(length, maxRows);\n  }\n\n  /**\n   * Returns the data array.\n   *\n   * @returns {Array}\n   */\n  getAll() {\n    const start = {\n      row: 0,\n      col: 0,\n    };\n\n    const end = {\n      row: Math.max(this.hot.countRows() - 1, 0),\n      col: Math.max(this.hot.countCols() - 1, 0),\n    };\n\n    if (start.row - end.row === 0 && !this.hot.countSourceRows()) {\n      return [];\n    }\n\n    return this.getRange(start, end, DataMap.DESTINATION_RENDERER);\n  }\n\n  /**\n   * Count the number of columns cached in the `colToProp` cache.\n   *\n   * @returns {number} Amount of cached columns.\n   */\n  countCachedColumns() {\n    return this.colToPropCache.length;\n  }\n\n  /**\n   * Returns data range as array.\n   *\n   * @param {object} [start] Start selection position. Visual indexes.\n   * @param {object} [end] End selection position. Visual indexes.\n   * @param {number} destination Destination of datamap.get.\n   * @returns {Array}\n   */\n  getRange(start, end, destination) {\n    const output = [];\n    let r;\n    let c;\n    let row;\n\n    const maxRows = this.tableMeta.maxRows;\n    const maxCols = this.tableMeta.maxCols;\n\n    if (maxRows === 0 || maxCols === 0) {\n      return [];\n    }\n\n    const getFn = destination === DataMap.DESTINATION_CLIPBOARD_GENERATOR ? this.getCopyable : this.get;\n\n    const rlen = Math.min(Math.max(maxRows - 1, 0), Math.max(start.row, end.row));\n    const clen = Math.min(Math.max(maxCols - 1, 0), Math.max(start.col, end.col));\n\n    for (r = Math.min(start.row, end.row); r <= rlen; r++) {\n      row = [];\n      // We just store indexes for rows without headers.\n      const physicalRow = r >= 0 ? this.hot.toPhysicalRow(r) : r;\n\n      for (c = Math.min(start.col, end.col); c <= clen; c++) {\n\n        if (physicalRow === null) {\n          break;\n        }\n        row.push(getFn.call(this, r, this.colToProp(c)));\n      }\n      if (physicalRow !== null) {\n        output.push(row);\n      }\n    }\n\n    return output;\n  }\n\n  /**\n   * Return data as text (tab separated columns).\n   *\n   * @param {object} [start] Start selection position. Visual indexes.\n   * @param {object} [end] End selection position. Visual indexes.\n   * @returns {string}\n   */\n  getText(start, end) {\n    return stringify(this.getRange(start, end, DataMap.DESTINATION_RENDERER));\n  }\n\n  /**\n   * Return data as copyable text (tab separated columns intended for clipboard copy to an external application).\n   *\n   * @param {object} [start] Start selection position. Visual indexes.\n   * @param {object} [end] End selection position. Visual indexes.\n   * @returns {string}\n   */\n  getCopyableText(start, end) {\n    return stringify(this.getRange(start, end, DataMap.DESTINATION_CLIPBOARD_GENERATOR));\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.hot = null;\n    this.metaManager = null;\n    this.dataSource = null;\n    this.duckSchema = null;\n    this.colToPropCache.length = 0;\n\n    this.propToColCache.clear();\n    this.propToColCache = undefined;\n  }\n}\n\nexport default DataMap;\n","export {\n  parse,\n  stringify,\n} from './SheetClip';\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * SheetClip - Spreadsheet Clipboard Parser.\n * version 0.2\n *\n * This tiny library transforms JavaScript arrays to strings that are pasteable by LibreOffice, OpenOffice,\n * Google Docs and Microsoft Excel.\n *\n * Copyright 2012, Marcin Warpechowski\n * Licensed under the MIT license.\n * http://github.com/warpech/sheetclip/\n */\n\nconst regUniversalNewLine = /^(\\r\\n|\\n\\r|\\r|\\n)/;\nconst regNextCellNoQuotes = /^[^\\t\\r\\n]+/;\nconst regNextEmptyCell = /^\\t/;\n\n/**\n * Decode spreadsheet string into array.\n *\n * @param {string} str The string to parse.\n * @returns {Array}\n */\nexport function parse(str) {\n  const arr = [['']];\n\n  if (str.length === 0) {\n    return arr;\n  }\n\n  let column = 0;\n  let row = 0;\n  let lastLength;\n\n  while (str.length > 0) {\n    if (lastLength === str.length) {\n      // In the case If in last cycle we didn't match anything, we have to leave the infinite loop\n      break;\n    }\n\n    lastLength = str.length;\n\n    if (str.match(regNextEmptyCell)) {\n      str = str.replace(regNextEmptyCell, '');\n\n      column += 1;\n      arr[row][column] = '';\n\n    } else if (str.match(regUniversalNewLine)) {\n      str = str.replace(regUniversalNewLine, '');\n      column = 0;\n      row += 1;\n\n      arr[row] = [''];\n\n    } else {\n      let nextCell = '';\n\n      if (str.startsWith('\"')) {\n        let quoteNo = 0;\n        let isStillCell = true;\n\n        while (isStillCell) {\n          const nextChar = str.slice(0, 1);\n\n          if (nextChar === '\"') {\n            quoteNo += 1;\n          }\n\n          nextCell += nextChar;\n\n          str = str.slice(1);\n\n          if (str.length === 0 || (str.match(/^[\\t\\r\\n]/) && quoteNo % 2 === 0)) {\n            isStillCell = false;\n          }\n        }\n\n        nextCell = nextCell.replace(/^\"/, '').replace(/\"$/, '')\n          .replace(/[\"]*/g, match => (new Array(Math.floor(match.length / 2))).fill('\"').join(''));\n\n      } else {\n        const matchedText = str.match(regNextCellNoQuotes);\n\n        nextCell = matchedText ? matchedText[0] : '';\n        str = str.slice(nextCell.length);\n      }\n\n      arr[row][column] = nextCell;\n    }\n\n  }\n\n  return arr;\n}\n\n/**\n * Encode array into valid spreadsheet string.\n *\n * @param {Array} arr An array of arrays to stringify.\n * @returns {string}\n */\nexport function stringify(arr) {\n  let r;\n  let rLen;\n  let c;\n  let cLen;\n  let str = '';\n  let val;\n\n  for (r = 0, rLen = arr.length; r < rLen; r += 1) {\n    cLen = arr[r].length;\n\n    for (c = 0; c < cLen; c += 1) {\n      if (c > 0) {\n        str += '\\t';\n      }\n      val = arr[r][c];\n\n      if (typeof val === 'string') {\n        if (val.indexOf('\\n') > -1) {\n          str += `\"${val.replace(/\"/g, '\"\"')}\"`;\n        } else {\n          str += val;\n        }\n\n      } else if (val === null || val === undefined) { // undefined resolves to undefined\n        str += '';\n\n      } else {\n        str += val;\n      }\n    }\n\n    if (r !== rLen - 1) {\n      str += '\\n';\n    }\n  }\n\n  return str;\n}\n","import GlobalMeta from './metaLayers/globalMeta';\nimport TableMeta from './metaLayers/tableMeta';\nimport ColumnMeta from './metaLayers/columnMeta';\nimport CellMeta from './metaLayers/cellMeta';\nimport localHooks from '../../mixins/localHooks';\nimport { mixin } from '../../helpers/object';\n\n/**\n * With the Meta Manager class, it can be possible to manage with meta objects for different layers in\n * one place. All coordinates used to fetch, updating, removing, or creating rows or columns have to\n * be passed as physical values.\n *\n * The diagram of the meta layers:\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n *\n * A more detailed description of the specific layers can be found in the \"metaLayers/\" modules description.\n */\nexport default class MetaManager {\n  constructor(hot, customSettings = {}, metaMods = []) {\n    /**\n     * @type {Handsontable}\n     */\n    this.hot = hot;\n    /**\n     * @type {GlobalMeta}\n     */\n    this.globalMeta = new GlobalMeta(hot);\n    /**\n     * @type {TableMeta}\n     */\n    this.tableMeta = new TableMeta(this.globalMeta);\n    /**\n     * @type {ColumnMeta}\n     */\n    this.columnMeta = new ColumnMeta(this.globalMeta);\n    /**\n     * @type {CellMeta}\n     */\n    this.cellMeta = new CellMeta(this.columnMeta);\n\n    metaMods.forEach(ModifierClass => new ModifierClass(this));\n\n    this.globalMeta.updateMeta(customSettings);\n  }\n\n  /**\n   * Gets the global meta object that is a root of all default settings, which are recognizable by Handsontable.\n   * Other layers inherites all properties from this. Adding, removing, or changing property in that\n   * object has a direct reflection to all layers.\n   *\n   * @returns {object}\n   */\n  getGlobalMeta() {\n    return this.globalMeta.getMeta();\n  }\n\n  /**\n   * Updates global settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateGlobalMeta(settings) {\n    this.globalMeta.updateMeta(settings);\n  }\n\n  /**\n   * Gets settings object that was passed in the Handsontable constructor. That layer contains all\n   * default settings inherited from the GlobalMeta layer merged with settings passed by the developer.\n   * Adding, removing, or changing property in that object has no direct reflection on any other layers.\n   *\n   * @returns {TableMeta}\n   */\n  getTableMeta() {\n    return this.tableMeta.getMeta();\n  }\n\n  /**\n   * Updates table settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateTableMeta(settings) {\n    this.tableMeta.updateMeta(settings);\n  }\n\n  /**\n   * Gets column meta object that is a root of all settings defined in the column property of the Handsontable\n   * settings. Each column in the Handsontable is associated with a unique meta object which identified by\n   * the physical column index. Adding, removing, or changing property in that object has a direct reflection\n   * only for the CellMeta layer. The reflection will be visible only if the property doesn't exist in the lower\n   * layers (prototype lookup).\n   *\n   * @param {number} physicalColumn The physical column index.\n   * @returns {object}\n   */\n  getColumnMeta(physicalColumn) {\n    return this.columnMeta.getMeta(physicalColumn);\n  }\n\n  /**\n   * Updates column meta object by merging settings with the current state.\n   *\n   * @param {number} physicalColumn The physical column index which points what column meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateColumnMeta(physicalColumn, settings) {\n    this.columnMeta.updateMeta(physicalColumn, settings);\n  }\n\n  /**\n   * Gets the cell meta object that is a root of all settings defined for the specific cell rendered by\n   * the Handsontable. Each cell meta inherits settings from higher layers. When a property doesn't\n   * exist in that layer, it is looked up through a prototype to the highest layer. Starting\n   * from CellMeta -> ColumnMeta and ending to GlobalMeta, which stores default settings. Adding,\n   * removing, or changing property in that object has no direct reflection on any other layers.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {object} options Additional options that are used to extend the cell meta object.\n   * @param {number} options.visualRow The visual row index of the currently requested cell meta object.\n   * @param {number} options.visualColumn The visual column index of the currently requested cell meta object.\n   * @returns {object}\n   */\n  getCellMeta(physicalRow, physicalColumn, { visualRow, visualColumn }) {\n    const cellMeta = this.cellMeta.getMeta(physicalRow, physicalColumn);\n\n    cellMeta.visualRow = visualRow;\n    cellMeta.visualCol = visualColumn;\n    cellMeta.row = physicalRow;\n    cellMeta.col = physicalColumn;\n\n    this.runLocalHooks('afterGetCellMeta', cellMeta);\n\n    return cellMeta;\n  }\n\n  /**\n   * Gets a value (defined by the `key` property) from the cell meta object.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key Defines the value that will be returned from the cell meta object.\n   * @returns {*}\n   */\n  getCellMetaKeyValue(physicalRow, physicalColumn, key) {\n    if (typeof key !== 'string') {\n      throw new Error('The passed cell meta object key is not a string');\n    }\n\n    return this.cellMeta.getMeta(physicalRow, physicalColumn, key);\n  }\n\n  /**\n   * Sets settings object for cell meta object defined by \"key\" property.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to set.\n   * @param {*} value Value to save.\n   */\n  setCellMeta(physicalRow, physicalColumn, key, value) {\n    this.cellMeta.setMeta(physicalRow, physicalColumn, key, value);\n  }\n\n  /**\n   * Updates cell meta object by merging settings with the current state.\n   *\n   * @param {number} physicalRow The physical row index which points what cell meta object is updated.\n   * @param {number} physicalColumn The physical column index which points what cell meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateCellMeta(physicalRow, physicalColumn, settings) {\n    this.cellMeta.updateMeta(physicalRow, physicalColumn, settings);\n  }\n\n  /**\n   * Removes a property defined by the \"key\" argument from the cell meta object.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to remove.\n   */\n  removeCellMeta(physicalRow, physicalColumn, key) {\n    this.cellMeta.removeMeta(physicalRow, physicalColumn, key);\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation. As cell meta\n   * objects are created lazy, the length of the returned collection depends on how and when the\n   * table has asked for access to that meta objects.\n   *\n   * @returns {object[]}\n   */\n  getCellsMeta() {\n    return this.cellMeta.getMetas();\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation but for\n   * specific row index.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @returns {object[]}\n   */\n  getCellsMetaAtRow(physicalRow) {\n    return this.cellMeta.getMetasAtRow(physicalRow);\n  }\n\n  /**\n   * Creates one or more rows at specific position.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is added.\n   * @param {number} [amount=1] An amount of rows to add.\n   */\n  createRow(physicalRow, amount = 1) {\n    this.cellMeta.createRow(physicalRow, amount);\n  }\n\n  /**\n   * Removes one or more rows from the collection.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is removed.\n   * @param {number} [amount=1] An amount rows to remove.\n   */\n  removeRow(physicalRow, amount = 1) {\n    this.cellMeta.removeRow(physicalRow, amount);\n  }\n\n  /**\n   * Creates one or more columns at specific position.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is added.\n   * @param {number} [amount=1] An amount of columns to add.\n   */\n  createColumn(physicalColumn, amount = 1) {\n    this.cellMeta.createColumn(physicalColumn, amount);\n    this.columnMeta.createColumn(physicalColumn, amount);\n  }\n\n  /**\n   * Removes one or more columns from the collection.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n   * @param {number} [amount=1] An amount of columns to remove.\n   */\n  removeColumn(physicalColumn, amount = 1) {\n    this.cellMeta.removeColumn(physicalColumn, amount);\n    this.columnMeta.removeColumn(physicalColumn, amount);\n  }\n\n  /**\n   * Clears all saved cell meta objects. It keeps column meta, table meta, and global meta intact.\n   */\n  clearCellsCache() {\n    this.cellMeta.clearCache();\n  }\n\n  /**\n   * Clears all saved cell and columns meta objects.\n   */\n  clearCache() {\n    this.cellMeta.clearCache();\n    this.columnMeta.clearCache();\n  }\n}\n\nmixin(MetaManager, localHooks);\n","import { extend } from '../../../helpers/object';\nimport { extendByMetaType } from '../utils';\nimport metaSchemaFactory from '../metaSchema';\n\n/**\n * @typedef {Options} TableMeta\n */\n/**\n * @returns {TableMeta} Returns an empty object. The holder for global meta object.\n */\nfunction createTableMetaEmptyClass() {\n  return class TableMeta {};\n}\n\n/**\n * The global meta object is a root of all default settings, which are recognizable by Handsontable.\n * Other layers are inherited from this object. Adding, removing, or changing property in that\n * object has a direct reflection to all layers such as: TableMeta, ColumnMeta, or CellMeta layers.\n *\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n */\nexport default class GlobalMeta {\n  /**\n   * An alias for the constructor. Necessary for inheritance for creating new layers.\n   *\n   * @type {TableMeta}\n   */\n  metaCtor = createTableMetaEmptyClass();\n  /**\n   * Main object (prototype of the internal TableMeta class), holder for all default settings.\n   *\n   * @type {object}\n   */\n  meta;\n\n  constructor(hot) {\n    this.meta = this.metaCtor.prototype;\n\n    extend(this.meta, metaSchemaFactory());\n\n    this.meta.instance = hot;\n  }\n\n  /**\n   * Gets constructor of the global meta object. Necessary for inheritance for creating the next meta layers.\n   *\n   * @returns {Function}\n   */\n  getMetaConstructor() {\n    return this.metaCtor;\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @returns {object}\n   */\n  getMeta() {\n    return this.meta;\n  }\n\n  /**\n   * Updates global settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(settings) {\n    extend(this.meta, settings);\n    extendByMetaType(this.meta, {\n      ...settings,\n      type: settings.type ?? this.meta.type,\n    }, settings);\n  }\n}\n","import { hasOwnProperty, isObject, objectEach, inherit, extend } from '../../helpers/object';\nimport { getCellType } from '../../cellTypes/registry';\n\n/**\n * Checks if the given property can be overwritten.\n *\n * @param {string} propertyName The property name to check.\n * @param {object} metaObject The current object meta settings.\n * @returns {boolean}\n */\nfunction canBeOverwritten(propertyName, metaObject) {\n  if (propertyName === 'CELL_TYPE') {\n    return false;\n  }\n\n  return metaObject._automaticallyAssignedMetaProps?.has(propertyName) ||\n    !hasOwnProperty(metaObject, propertyName);\n}\n\n/**\n * Expands \"type\" property of the meta object to single values. For example `type: 'numeric'` sets\n * \"renderer\", \"editor\", \"validator\" properties to specific functions designed for numeric values.\n * If \"type\" is passed as an object that object will be returned, excluding properties that\n * already exist in the \"metaObject\".\n *\n * The function utilizes `_automaticallyAssignedMetaProps` meta property that allows tracking what\n * properties are changed by the \"type\" expanding feature. That properties can be always overwritten by\n * the user.\n *\n * @param {object} metaObject The meta object.\n * @param {object} settings The settings object with the \"type\" setting.\n * @param {object} settingsToCompareWith The object to compare which properties need to be updated.\n */\nexport function extendByMetaType(metaObject, settings, settingsToCompareWith = metaObject) {\n  const validType = typeof settings.type === 'string' ? getCellType(settings.type) : settings.type;\n\n  if (metaObject._automaticallyAssignedMetaProps) {\n    objectEach(settings, (value, key) => void metaObject._automaticallyAssignedMetaProps.delete(key));\n  }\n\n  if (!isObject(validType)) {\n    return;\n  }\n\n  if (settingsToCompareWith === metaObject && !metaObject._automaticallyAssignedMetaProps) {\n    metaObject._automaticallyAssignedMetaProps = new Set();\n  }\n\n  const expandedType = {};\n\n  objectEach(validType, (value, property) => {\n    if (canBeOverwritten(property, settingsToCompareWith)) {\n      expandedType[property] = value;\n      metaObject._automaticallyAssignedMetaProps?.add(property);\n    }\n  });\n\n  extend(metaObject, expandedType);\n}\n\n/**\n * Creates new class which extends properties from TableMeta layer class.\n *\n * @param {TableMeta} TableMeta The TableMeta which the new ColumnMeta is created from.\n * @param {string[]} [conflictList] List of the properties which are conflicted with the column meta layer.\n *                                  Conflicted properties are overwritten by `undefined` value, to separate them\n *                                  from the TableMeta layer.\n * @returns {ColumnMeta} Returns constructor ready to initialize with `new` operator.\n */\nexport function columnFactory(TableMeta, conflictList = []) {\n  // Do not use ES6 \"class extends\" syntax here. It seems that the babel produces code\n  // which drastically decreases the performance of the ColumnMeta class creation.\n\n  /**\n   * Base \"class\" for column meta.\n   */\n  function ColumnMeta() {}\n\n  inherit(ColumnMeta, TableMeta);\n\n  // Clear conflict settings\n  for (let i = 0; i < conflictList.length; i++) {\n    ColumnMeta.prototype[conflictList[i]] = undefined;\n  }\n\n  return ColumnMeta;\n}\n\n/**\n * Helper which checks if the provided argument is an unsigned number.\n *\n * @param {*} value Value to check.\n * @returns {boolean}\n */\nexport function isUnsignedNumber(value) {\n  return Number.isInteger(value) && value >= 0;\n}\n\n/**\n * Function which makes assertion by custom condition. Function throws an error when assertion doesn't meet the spec.\n *\n * @param {Function} condition Function with custom logic. The condition has to return boolean values.\n * @param {string} errorMessage String which describes assertion error.\n */\nexport function assert(condition, errorMessage) {\n  if (!condition()) {\n    throw new Error(`Assertion failed: ${errorMessage}`);\n  }\n}\n\n/**\n * Check if given variable is null or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isNullish(variable) {\n  return variable === null || variable === undefined;\n}\n","import staticRegister from '../utils/staticRegister';\nimport { registerEditor } from '../editors/registry';\nimport { registerRenderer } from '../renderers/registry';\nimport { registerValidator } from '../validators/registry';\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('cellTypes');\n\n/**\n * Retrieve cell type object.\n *\n * @param {string} name Cell type identification.\n * @returns {object} Returns cell type object.\n */\nfunction _getItem(name) {\n  if (!hasItem(name)) {\n    throw Error(`You declared cell type \"${name}\" as a string that is not mapped to a known object.\n                 Cell type must be an object or a string mapped to an object registered by\n                 \"Handsontable.cellTypes.registerCellType\" method`);\n  }\n\n  return getItem(name);\n}\n\n/**\n * Register cell type under specified name.\n *\n * @param {string} name Cell type identification.\n * @param {object} type An object with contains keys (eq: `editor`, `renderer`, `validator`) which describes specified behaviour of the cell.\n */\nfunction _register(name, type) {\n  if (typeof name !== 'string') {\n    type = name;\n    name = type.CELL_TYPE;\n  }\n\n  const { editor, renderer, validator } = type;\n\n  if (editor) {\n    registerEditor(name, editor);\n  }\n  if (renderer) {\n    registerRenderer(name, renderer);\n  }\n  if (validator) {\n    registerValidator(name, validator);\n  }\n\n  register(name, type);\n}\n\nexport {\n  _register as registerCellType,\n  _getItem as getCellType,\n  hasItem as hasCellType,\n  getNames as getRegisteredCellTypeNames,\n  getValues as getRegisteredCellTypes,\n};\n","import { isEmpty } from '../../helpers/mixed';\nimport { isObjectEqual } from '../../helpers/object';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @alias Options\n * @class Options\n * @description\n *\n * [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md) let you heavily customize your Handsontable instance. For example, you can:\n *\n * - Enable and disable built-in features\n * - Enable and configure additional [plugins](@/api/plugins.md)\n * - Personalize Handsontable's look\n * - Adjust Handsontable's behavior\n * - Implement your own custom features\n *\n * ::: only-for javascript\n *\n * To apply [configuration options](@/guides/getting-started/configuration-options/configuration-options.md), pass them as\n * a second argument of the [Handsontable constructor](@/guides/getting-started/installation/installation.md#initialize-handsontable),\n * using the [object literal notation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer):\n *\n * Read more on the [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md) page.\n *\n * ```js\n * const container = document.getElementById('example');\n *\n * const hot = new Handsontable(container, {\n *   // configuration options, in the object literal notation\n *   licenseKey: 'non-commercial-and-evaluation',\n *   data: [\n *     ['A1', 'B1', 'C1', 'D1', 'E1'],\n *     ['A2', 'B2', 'C2', 'D2', 'E2'],\n *     ['A3', 'B3', 'C3', 'D3', 'E3'],\n *     ['A4', 'B4', 'C4', 'D4', 'E4'],\n *     ['A5', 'B5', 'C5', 'D5', 'E5'],\n *   ],\n *   width: 400,\n *   height: 300,\n *   colHeaders: true,\n *   rowHeaders: true,\n *   customBorders: true,\n *   dropdownMenu: true,\n *   multiColumnSorting: true,\n *   filters: true,\n *   manualRowMove: true,\n * });\n * ```\n * :::\n *\n * ::: only-for react\n *\n * To apply configuration options, pass them as individual props\n * of the [`HotTable`](@/guides/getting-started/installation/installation.md#_4-use-the-hottable-component)\n * or [`HotColumn`](@/guides/columns/react-hot-column/react-hot-column.md) components.\n *\n * Read more on the [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md) page.\n *\n * ```jsx\n * <HotTable\n *   // configuration options, in the object literal notation\n *   licenseKey='non-commercial-and-evaluation'\n *   data={[\n *     ['A1', 'B1', 'C1', 'D1', 'E1'],\n *     ['A2', 'B2', 'C2', 'D2', 'E2'],\n *     ['A3', 'B3', 'C3', 'D3', 'E3'],\n *     ['A4', 'B4', 'C4', 'D4', 'E4'],\n *     ['A5', 'B5', 'C5', 'D5', 'E5'],\n *   ]}\n *   width={400}\n *   height={300}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   customBorders={true}\n *   dropdownMenu={true}\n *   multiColumnSorting={true}\n *   filters={true}\n *   manualRowMove={true}\n * />\n * ```\n * :::\n *\n * Depending on your needs, you can apply [configuration options](@/api/options.md) to different elements of your grid:\n * - [The entire grid](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)\n * - [Individual columns](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)\n * - [Individual rows](@/guides/getting-started/configuration-options/configuration-options.md#set-row-options)\n * - [Individual cells](@/guides/getting-started/configuration-options/configuration-options.md#set-cell-options)\n * - [Individual grid elements, based on any logic you implement](@/guides/getting-started/configuration-options/configuration-options.md#implementing-custom-logic)\n *\n * Read more:\n * - [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md)\n */\nexport default () => {\n  return {\n\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * Information on which of the meta properties were added automatically.\n     * For example: setting the `renderer` property directly won't extend the `_automaticallyAssignedMetaProps`\n     * entry, but setting a `type` will modify it to `Set(3) {'renderer', 'editor', 'validator', ...}`.\n     *\n     * @private\n     * @type {Set}\n     * @default undefined\n     */\n    _automaticallyAssignedMetaProps: undefined,\n\n    /**\n     * The `activeHeaderClassName` option lets you add a CSS class name\n     * to every currently-active, currently-selected header (when a whole column or row is selected).\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @since 0.38.2\n     * @default 'ht__active_highlight'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `ht__active_highlight` CSS class name\n     * // to every currently-active, currently-selected header\n     * activeHeaderClassName: 'ht__active_highlight',\n     * ```\n     */\n    activeHeaderClassName: 'ht__active_highlight',\n\n    /**\n     * The `allowEmpty` option determines whether Handsontable accepts the following values:\n     * - `null`\n     * - `undefined`\n     * - `''`\n     *\n     * You can set the `allowEmpty` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                          |\n     * | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `true` (default) | - Accept `null`, `undefined` and `''` values<br>- Mark cells that contain `null`, `undefined` or `''` values as `valid`              |\n     * | `false`          | - Don't accept `null`, `undefined` and `''` values<br>- Mark cells that contain `null`, `undefined` or `''` values with as `invalid` |\n     *\n     * ::: tip\n     * To use the [`allowEmpty`](#allowempty) option, you need to set the [`validator`](#validator) option (or the [`type`](#type) option).\n     * :::\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // allow empty values in each cell of the entire grid\n     * allowEmpty: true,\n     *\n     * // or\n     * columns: [\n     *   {\n     *     type: 'date',\n     *     dateFormat: 'DD/MM/YYYY',\n     *     // allow empty values in each cell of the 'date' column\n     *     allowEmpty: true\n     *   }\n     * ],\n     * ```\n     */\n    allowEmpty: true,\n\n    /**\n     * The `allowHtml` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) cells' [`source`](#source) data\n     * is treated as HTML.\n     *\n     * You can set the `allowHtml` option to one of the following:\n     *\n     * | Setting           | Description                                         |\n     * | ----------------- | --------------------------------------------------- |\n     * | `false` (default) | The [`source`](#source) data is not treated as HTML |\n     * | `true`            | The [`source`](#source) data is treated as HTML     |\n     *\n     * __Warning:__ Setting the `allowHtml` option to `true` can cause serious XSS vulnerabilities.\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     * - [`source`](#source)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['<strong>foo</strong>', '<strong>bar</strong>']\n     *   // use HTML in the `source` list\n     *   allowHtml: true,\n     *   },\n     * ],\n     * ```\n     */\n    allowHtml: false,\n\n    /**\n     * If set to `true`, the `allowInsertColumn` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Insert column left**\n     * - **Insert column right**\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Insert column left' and 'Insert column right' menu items from the context menu\n     * allowInsertColumn: false,\n     * ```\n     */\n    allowInsertColumn: true,\n\n    /**\n     * If set to `true`, the `allowInsertRow` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Insert row above**\n     * - **Insert row below**\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Insert row above' and 'Insert row below' menu items from the context menu\n     * allowInsertRow: false,\n     * ```\n     */\n    allowInsertRow: true,\n\n    /**\n     * The `allowInvalid` option determines whether Handsontable accepts values\n     * that were marked as `invalid` by the [cell validator](@/guides/cell-functions/cell-validator/cell-validator.md).\n     *\n     * You can set the `allowInvalid` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                        |\n     * | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | - Accept `invalid` values<br>- Allow the user to close the [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) with `invalid` values<br>- Save `invalid` values into the data source                   |\n     * | `false`          | - Don't accept `invalid` values<br>- Don't allow the user to close the [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) with `invalid` values<br>- Don't save `invalid` values into the data source |\n     *\n     * Setting the `allowInvalid` option to `false` can be useful when used with the [Autocomplete strict mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-strict-mode).\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [Autocomplete strict mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-strict-mode)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't accept `invalid` values\n     * // don't allow the user to close the cell editor\n     * // don't save `invalid` values into the data source\n     * allowInvalid: false,\n     * ```\n     */\n    allowInvalid: true,\n\n    /**\n     * If set to `true`, the `allowRemoveColumn` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Remove column**\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Remove column' menu item from the context menu\n     * allowRemoveColumn: false,\n     * ```\n     */\n    allowRemoveColumn: true,\n\n    /**\n     * If set to `true`, the `allowRemoveRow` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Remove row**\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Remove row' menu item from the context menu\n     * allowRemoveRow: false,\n     * ```\n     */\n    allowRemoveRow: true,\n\n    /**\n     * If set to `true`, the accessibility-related ARIA tags will be added to the table. If set to `false`, they\n     * will be omitted.\n     * Defaults to `true`.\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     * @since 14.0.0\n     */\n    ariaTags: true,\n\n    /**\n     * The `autoColumnSize` option configures the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin.\n     *\n     * You can set the `autoColumnSize` option to one of the following:\n     *\n     * | Setting   | Description                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin                               |\n     * | `true`    | Enable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin with the default configuration |\n     * | An object | Enable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin and modify the plugin options  |\n     *\n     * If you set the `autoColumnSize` option to an object, you can set the following [`AutoColumnSize`](@/api/autoColumnSize.md) plugin options:\n     *\n     * | Property                | Possible values                 | Description                                                                                                    |\n     * | ----------------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n     * | `syncLimit`             | A number \\| A percentage string | The number/percentage of columns to keep in sync<br>(default: `50`)                                            |\n     * | `useHeaders`            | `true` \\| `false`               | When calculating column widths:<br>`true`: use column headers<br>`false`: don't use column headers          |\n     * | `samplingRatio`         | A number                        | The number of samples of the same length to be used in column width calculations                               |\n     * | `allowSampleDuplicates` | `true` \\| `false`               | When calculating column widths:<br>`true`: Allow duplicate samples<br>`false`: Don't allow duplicate samples |\n     *\n     * By default, the `autoColumnSize` option is set to `undefined`,\n     * but the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin acts as enabled.\n     * To disable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin completely,\n     * set the `autoColumnSize` option to `false`.\n     *\n     * Using the [`colWidths`](#colWidths) option forcibly disables the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin.\n     *\n     * Read more:\n     * - [Plugins: `AutoColumnSize`](@/api/autoColumnSize.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default undefined\n     * @category AutoColumnSize\n     *\n     * @example\n     * ```js\n     * autoColumnSize: {\n     *   // keep 40% of columns in sync (the rest of columns: async)\n     *   syncLimit: '40%',\n     *   // when calculating column widths, use column headers\n     *   useHeaders: true,\n     *   // when calculating column widths, use 10 samples of the same length\n     *   samplingRatio: 10,\n     *   // when calculating column widths, allow duplicate samples\n     *   allowSampleDuplicates: true\n     * },\n     * ```\n     */\n    autoColumnSize: undefined,\n\n    /**\n     * The `autoRowSize` option configures the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n     *\n     * You can set the `autoRowSize` option to one of the following:\n     *\n     * | Setting   | Description                                                                            |\n     * | --------- | -------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`AutoRowSize`](@/api/autoRowSize.md) plugin                               |\n     * | `true`    | Enable the [`AutoRowSize`](@/api/autoRowSize.md) plugin with the default configuration |\n     * | An object | Enable the [`AutoRowSize`](@/api/autoRowSize.md) plugin and modify the plugin options  |\n     *\n     * To give Handsontable's scrollbar a proper size, set the `autoRowSize` option to `true`.\n     *\n     * If you set the `autoRowSize` option to an object, you can set the following [`AutoRowSize`](@/api/autoRowSize.md) plugin options:\n     *\n     * | Property    | Possible values                 | Description                                                       |\n     * | ----------- | ------------------------------- | ----------------------------------------------------------------- |\n     * | `syncLimit` | A number \\| A percentage string | The number/percentage of rows to keep in sync<br>(default: `500`) |\n     *\n     * Using the [`rowHeights`](#rowHeights) option forcibly disables the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n     *\n     * Read more:\n     * - [Plugins: `AutoRowSize`](@/api/autoRowSize.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default undefined\n     * @category AutoRowSize\n     *\n     * @example\n     * ```js\n     * autoRowSize: {\n     *   // keep 40% of rows in sync (the rest of rows: async)\n     *   syncLimit: '40%'\n     * },\n     * ```\n     */\n    autoRowSize: undefined,\n\n    /**\n     * | Setting           | Description                                                                                                                                                                                                                                  |\n     * | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | When you select a bottom-most cell, pressing <kbd>**↓**</kbd> doesn't do anything.<br><br>When you select a top-most cell, pressing <kbd>**↑**</kbd> doesn't do anything.                                                                    |\n     * | `true`            | When you select a bottom-most cell, pressing <kbd>**↓**</kbd> takes you to the top-most cell of the next column.<br><br>When you select a top-most cell, pressing <kbd>**↑**</kbd> takes you to the bottom-most cell of the previous column. |\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // when you select a bottom-most cell, pressing ⬇ doesn't do anything\n     * // when you select a top-most cell, pressing ⬆ doesn't do anything\n     * autoWrapCol: false, // default setting\n     *\n     * // when you select a bottom-most cell, pressing ⬇ takes you to the top-most cell of the next column\n     * // when you select a top-most cell, pressing ⬆ takes you to the bottom-most cell of the previous column\n     * autoWrapCol: true,\n     * ```\n     */\n    autoWrapCol: false,\n\n    /**\n     * | Setting           | Description                                                                                                                                                                                                                                                                                                        |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `false` (default) | When you select the first cell of a row, pressing <kbd>**←**</kbd>* (or <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>\\*\\*) doesn't do anything.<br><br>When you select the last cell of a row, pressing <kbd>**→**</kbd>* (or <kbd>**Tab**</kbd>**) doesn't do anything.                                                  |\n     * | `true`            | When you select the first cell of a row, pressing <kbd>**←**</kbd>* (or <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>\\*\\*) takes you to the last cell of the row above.<br><br>When you select the last cell of a row, pressing <kbd>**→**</kbd>* (or <kbd>**Tab**</kbd>**) takes you to the first cell of the row below. |\n     *\n     * \\* The exact key depends on your [`layoutDirection`](#layoutdirection) configuration.<br>\n     * \\*\\* Unless [`tabNavigation`](#tabnavigation) is set to `false`.\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // when you select the first cell of a row, pressing ⬅ (or Shift+Tab) doesn't do anything\n     * // when you select the last cell of a row, pressing ➡ (or Tab) doesn't do anything\n     * autoWrapRow: false, // default setting\n     *\n     * // when you select the first cell of a row, pressing ⬅ (or Shift+Tab) takes you to the last cell of the row above\n     * // when you select the last cell of a row, pressing ➡ (or Tab) takes you to the first cell of the row below\n     * autoWrapRow: true,\n     * ```\n     */\n    autoWrapRow: false,\n\n    /**\n     * @description\n     * The `bindRowsWithHeaders` option configures the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin.\n     *\n     * You can set the `bindRowsWithHeaders` option to one of the following:\n     *\n     * | Setting | Description                                                                  |\n     * | ------- | ---------------------------------------------------------------------------- |\n     * | `false` | Disable the the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin |\n     * | `true`  | Enable the the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin  |\n     *\n     * Read more:\n     * - [Plugins: `BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string}\n     * @default undefined\n     * @category BindRowsWithHeaders\n     *\n     * @example\n     * ```js\n     * // enable the `BindRowsWithHeaders` plugin\n     * bindRowsWithHeaders: true\n     * ```\n     */\n    bindRowsWithHeaders: undefined,\n\n    /**\n     * The `cell` option lets you apply [configuration options](@/guides/getting-started/configuration-options/configuration-options.md) to individual cells.\n     *\n     * The `cell` option overwrites the [top-level grid options](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options),\n     * and the [`columns`](#columns) options.\n     *\n     * Read more:\n     * - [Configuration options: Setting cell options](@/guides/getting-started/configuration-options/configuration-options.md#set-cell-options)\n     * - [`columns`](#columns)\n     *\n     * @memberof Options#\n     * @type {Array[]}\n     * @default []\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `cell` option to an array of objects\n     * cell: [\n     *   // make the cell with coordinates (0, 0) read-only\n     *   {\n     *     row: 0,\n     *     col: 0,\n     *     readOnly: true\n     *   }\n     * ],\n     * ```\n     */\n    cell: [],\n\n    /**\n     * @description\n     * The `cells` option lets you apply any other [configuration options](@/guides/getting-started/configuration-options/configuration-options.md) to\n     * individual grid elements (columns, rows, cells), based on any logic you implement.\n     *\n     * The `cells` option overwrites all other options (including options set by [`columns`](#columns) and [`cell`](#cell)).\n     * It takes the following parameters:\n     *\n     * | Parameter | Required | Type             | Description                                                                                                                                                                                                                                                                                                                             |\n     * | --------- | -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `row`     | Yes      | Number           | A physical row index                                                                                                                                                                                                                                                                                                                    |\n     * | `column`  | Yes      | Number           | A physical column index                                                                                                                                                                                                                                                                                                                 |\n     * | `prop`    | No       | String \\| Number | If [`data`](#data) is set to an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), `prop` is the same number as `column`.<br><br>If [`data`](#data) is set to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), `prop` is a property name for the column's data object. |\n     *\n     * Read more:\n     * - [Configuration options: Implementing custom logic](@/guides/getting-started/configuration-options/configuration-options.md#implement-custom-logic)\n     * - [Configuration options: Setting row options](@/guides/getting-started/configuration-options/configuration-options.md#set-row-options)\n     * - [`columns`](#columns)\n     * - [`cell`](#cell)\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `cells` option to your custom function\n     * cells(row, column, prop) {\n     *   const cellProperties = { readOnly: false };\n     *   const visualRowIndex = this.instance.toVisualRow(row);\n     *   const visualColIndex = this.instance.toVisualColumn(column);\n     *\n     *   if (visualRowIndex === 0 && visualColIndex === 0) {\n     *     cellProperties.readOnly = true;\n     *   }\n     *\n     *   return cellProperties;\n     * },\n     * ```\n     */\n    cells: undefined,\n\n    /**\n     * The `checkedTemplate` option lets you configure what value\n     * a checked [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell has.\n     *\n     * You can set the `checkedTemplate` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                              |\n     * | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is checked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns `true`                  |\n     * | A string         | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is checked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns a string of your choice |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox template](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md#checkbox-template)\n     * - [`getDataAtCell()`](@/api/core.md#getDataAtCell)\n     * - [`uncheckedTemplate`](#uncheckedTemplate)\n     *\n     * @memberof Options#\n     * @type {boolean|string|number}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     // when checked, the cell's value is `true`\n     *     // when unchecked, the cell's value is `false`\n     *     type: 'checkbox',\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     type: 'checkbox',\n     *     // when checked, the cell's value is `'Yes'`\n     *     checkedTemplate: 'Yes',\n     *     // when unchecked, the cell's value is `'No'`\n     *     uncheckedTemplate: 'No'\n     *  }\n     * ],\n     * ```\n     */\n    checkedTemplate: undefined,\n\n    /**\n     * The `className` option lets you add CSS class names to every currently-selected element.\n     *\n     * You can set the `className` option to one of the following:\n     *\n     * | Setting             | Description                                                      |\n     * | ------------------- | ---------------------------------------------------------------- |\n     * | A string            | Add a single CSS class name to every currently-selected element  |\n     * | An array of strings | Add multiple CSS class names to every currently-selected element |\n     *\n     * ::: tip\n     * Don't change the `className` metadata of the [column summary](@/guides/columns/column-summary/column-summary.md) row.\n     * To style the summary row, use the class name assigned automatically by the [`ColumnSummary`](@/api/columnSummary.md) plugin: `columnSummaryResult`.\n     * :::\n     *\n     * To apply different CSS class names on different levels, use Handsontable's [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration).\n     *\n     * Read more:\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`TableClassName`](#TableClassName)\n     *\n     * @memberof Options#\n     * @type {string|string[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every currently-selected element\n     * className: 'your-class-name',\n     *\n     * // add `first-class-name` and `second-class-name` CSS class names\n     * // to every currently-selected element\n     * className: ['first-class-name', 'second-class-name'],\n     * ```\n     */\n    className: undefined,\n\n    /**\n     * The `colHeaders` option configures your grid's column headers.\n     *\n     * You can set the `colHeaders` option to one of the following:\n     *\n     * | Setting  | Description                                                          |\n     * | -------- | -------------------------------------------------------------------- |\n     * | `true`   | Enable the default column headers ('A', 'B', 'C', ...)               |\n     * | `false`  | Disable column headers                                               |\n     * | An array | Define your own column headers (e.g. `['One', 'Two', 'Three', ...]`) |\n     * | A function | Define your own column headers, using a function                     |\n     *\n     * Read more:\n     * - [Column header](@/guides/columns/column-header/column-header.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|Function}\n     * @default null\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable the default column headers\n     * colHeaders: true,\n     *\n     * // set your own column headers\n     * colHeaders: ['One', 'Two', 'Three'],\n     *\n     * // set your own column headers, using a function\n     * colHeaders: function(visualColumnIndex) {\n     *   return `${visualColumnIndex} + : AB`;\n     * },\n     * ```\n     */\n    colHeaders: null,\n\n    /**\n     * @description\n     * The `collapsibleColumns` option configures the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin.\n     *\n     * You can set the `collapsibleColumns` option to one of the following:\n     *\n     * | Setting              | Description                                                                                       |\n     * | -------------------- | ------------------------------------------------------------------------------------------------- |\n     * | `false`              | Disable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin                            |\n     * | `true`               | Enable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin                             |\n     * | An array of objects  | Enable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin for selected column headers |\n     *\n     * Read more:\n     * - [Plugins: `CollapsibleColumns`](@/api/collapsibleColumns.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default undefined\n     * @category CollapsibleColumns\n     *\n     * @example\n     * ```js\n     * // enable column collapsing for all headers\n     * collapsibleColumns: true,\n     *\n     * // enable column collapsing for selected headers\n     * collapsibleColumns: [\n     *   {row: -4, col: 1, collapsible: true},\n     *   {row: -3, col: 5, collapsible: true}\n     * ],\n     * ```\n     */\n    collapsibleColumns: undefined,\n\n    /**\n     * @description\n     * The `columnHeaderHeight` option configures the height of column headers.\n     *\n     * You can set the `columnHeaderHeight` option to one of the following:\n     *\n     * | Setting  | Description                                         |\n     * | -------- | --------------------------------------------------- |\n     * | A number | Set the same height for every column header         |\n     * | An array | Set different heights for individual column headers |\n     *\n     * @memberof Options#\n     * @type {number|number[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the same height for every column header\n     * columnHeaderHeight: 25,\n     *\n     * // set different heights for individual column headers\n     * columnHeaderHeight: [25, 30, 55],\n     * ```\n     */\n    columnHeaderHeight: undefined,\n\n    /**\n     * @description\n     * The `columns` option lets you apply any other [configuration options](@/guides/getting-started/configuration-options/configuration-options.md) to individual columns (or ranges of columns).\n     *\n     * You can set the `columns` option to one of the following:\n     * - An array of objects (each object represents one column)\n     * - A function that returns an array of objects\n     *\n     * The `columns` option overwrites the [top-level grid options](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options).\n     *\n     * When you use `columns`, the [`startCols`](#startCols), [`minCols`](#minCols), and [`maxCols`](#maxCols) options are ignored.\n     *\n     * Read more:\n     * - [Configuration options: Setting column options](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)\n     * - [`startCols`](#startCols)\n     * - [`minCols`](#minCols)\n     * - [`maxCols`](#maxCols)\n     * - [`data`](#data)\n     *\n     * @memberof Options#\n     * @type {object[]|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `columns` option to an array of objects\n     * // each object represents one column\n     * columns: [\n     *   {\n     *     // column options for the first (by physical index) column\n     *     type: 'numeric',\n     *     numericFormat: {\n     *       pattern: '0,0.00 $'\n     *     }\n     *   },\n     *   {\n     *     // column options for the second (by physical index) column\n     *     type: 'text',\n     *     readOnly: true\n     *   }\n     * ],\n     *\n     * // or set the `columns` option to a function, based on physical indexes\n     * columns(index) {\n     *   return {\n     *     type: index > 0 ? 'numeric' : 'text',\n     *     readOnly: index < 1\n     *   }\n     * }\n     * ```\n     */\n    columns: undefined,\n\n    /**\n     * @description\n     * The `columnSorting` option configures the [`ColumnSorting`](@/api/columnSorting.md) plugin.\n     *\n     * You can set the `columnSorting` option to one of the following:\n     *\n     * | Setting    | Description                                                                                                                            |\n     * | ---------- | -------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`     | Enable the [`ColumnSorting`](@/api/columnSorting.md) plugin with the default configuration                                             |\n     * | `false`    | Disable the [`ColumnSorting`](@/api/columnSorting.md) plugin                                                                           |\n     * | An object  | - Enable the [`ColumnSorting`](@/api/columnSorting.md) plugin<br>- Modify the [`ColumnSorting`](@/api/columnSorting.md) plugin options |\n     *\n     * If you set the `columnSorting` option to an object,\n     * you can set the following [`ColumnSorting`](@/api/columnSorting.md) plugin options:\n     *\n     * | Option                   | Possible settings                                                                                                                                |\n     * | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `indicator`              | `true`: Display the arrow icon in the column header, to indicate a sortable column<br>`false`: Don't display the arrow icon in the column header  |\n     * | `headerAction`           | `true`: Enable clicking on the column header to sort the column<br>`false`: Disable clicking on the column header to sort the column             |\n     * | `sortEmptyCells`         | `true`: Sort empty cells as well<br>`false`: Place empty cells at the end                                                                        |\n     * | `compareFunctionFactory` | A [custom compare function](@/guides/rows/rows-sorting/rows-sorting.md#add-a-custom-comparator)                                                                |\n     *\n     * If you set the `columnSorting` option to an object,\n     * you can also sort individual columns at Handsontable's initialization.\n     * In the `columnSorting` object, add an object named `initialConfig`,\n     * with the following properties:\n     *\n     * | Option      | Possible settings   | Description                                                      |\n     * | ----------- | ------------------- | ---------------------------------------------------------------- |\n     * | `column`    | A number            | The index of the column that you want to sort at initialization  |\n     * | `sortOrder` | `'asc'` \\| `'desc'` | The sorting order:<br>`'asc'`: ascending<br>`'desc'`: descending |\n     *\n     * Read more:\n     * - [Rows sorting](@/guides/rows/rows-sorting/rows-sorting.md)\n     * - [Rows sorting: Custom compare functions](@/guides/rows/rows-sorting/rows-sorting.md#add-a-custom-comparator)\n     * - [`multiColumnSorting`](#multiColumnSorting)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category ColumnSorting\n     *\n     * @example\n     * ```js\n     * // enable the `ColumnSorting` plugin\n     * columnSorting: true\n     *\n     * // enable the `ColumnSorting` plugin with custom configuration\n     * columnSorting: {\n     *   // sort empty cells as well\n     *   sortEmptyCells: true,\n     *   // display the arrow icon in the column header\n     *   indicator: true,\n     *   // disable clicking on the column header to sort the column\n     *   headerAction: false,\n     *   // add a custom compare function\n     *   compareFunctionFactory(sortOrder, columnMeta) {\n     *     return function(value, nextValue) {\n     *       // some value comparisons which will return -1, 0 or 1...\n     *     }\n     *   }\n     * }\n     *\n     * // enable the `ColumnSorting` plugin\n     * columnSorting: {\n     *   // at initialization, sort column 1 in ascending order\n     *   initialConfig: {\n     *     column: 1,\n     *     sortOrder: 'asc'\n     *   },\n     *   // at initialization, sort column 2 in descending order\n     *   initialConfig: {\n     *     column: 2,\n     *     sortOrder: 'desc'\n     *   }\n     * }\n     * ```\n     */\n    columnSorting: undefined,\n\n    /**\n     * @description\n     * The `columnSummary` option configures the [`ColumnSummary`](@/api/columnSummary.md) plugin.\n     *\n     * You can set the `columnSummary` option to an array of objects.\n     * Each object configures a single column summary, using the following properties:\n     *\n     * | Property                 | Possible values                                                         | Description                                                                                                                  |\n     * | ------------------------ | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |\n     * | `sourceColumn`           | A number                                                                | [Column to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize)                     |\n     * | `ranges`                 | An array                                                                | [Ranges of rows to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize)             |\n     * | `type`                   | `'sum'` \\| `'min'` \\| `'max'` \\| `'count'` \\| `'average'` \\| `'custom'` | [Summary function](@/guides/columns/column-summary/column-summary.md#step-3-calculate-your-summary)                                         |\n     * | `destinationRow`         | A number                                                                | [Destination cell's row coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates)    |\n     * | `destinationColumn`      | A number                                                                | [Destination cell's column coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n     * | `forceNumeric`           | `true`  \\| `false`                                                      | [Treat non-numerics as numerics](@/guides/columns/column-summary/column-summary.md#force-numeric-values)                                  |\n     * | `reversedRowCoords`      | `true`  \\| `false`                                                      | [Reverse row coordinates](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell)                      |\n     * | `suppressDataTypeErrors` | `true`  \\| `false`                                                      | [Suppress data type errors](@/guides/columns/column-summary/column-summary.md#throw-data-type-errors)                                    |\n     * | `readOnly`               | `true`  \\| `false`                                                      | Make summary cell read-only                                                                                                  |\n     * | `roundFloat`             | `true`  \\| `false`  \\| A number                                         | [Round summary result](@/guides/columns/column-summary/column-summary.md#round-a-column-summary-result)                                  |\n     * | `customFunction`         | A function                                                              | [Custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function)                         |\n     *\n     * Read more:\n     * - [Column summary](@/guides/columns/column-summary/column-summary.md)\n     * - [Plugins: `ColumnSummary`](@/api/columnSummary.md)\n     *\n     * @memberof Options#\n     * @type {object[]|Function}\n     * @default undefined\n     * @category ColumnSummary\n     *\n     * @example\n     * ```js\n     * columnSummary: [\n     *   {\n     *     sourceColumn: 0,\n     *     ranges: [\n     *       [0, 2], [4], [6, 8]\n     *     ],\n     *     type: 'custom',\n     *     destinationRow: 4,\n     *     destinationColumn: 1,\n     *     forceNumeric: true,\n     *     reversedRowCoords: true,\n     *     suppressDataTypeErrors: false,\n     *     readOnly: true,\n     *     roundFloat: false,\n     *     customFunction(endpoint) {\n     *        return 100;\n     *     }\n     *   }\n     * ],\n     * ```\n     */\n    columnSummary: undefined,\n\n    /**\n     * The `colWidths` option sets columns' widths, in pixels.\n     *\n     * The default column width is 50px. To change it, set the `colWidths` option to one of the following:\n     *\n     * | Setting     | Description                                                                                          | Example                                                           |\n     * | ----------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |\n     * | A number    | Set the same width for every column                                                                  | `colWidths: 100`                                                  |\n     * | A string    | Set the same width for every column                                                                  | `colWidths: '100px'`                                              |\n     * | An array    | Set widths separately for each column                                                                | `colWidths: [100, 120, undefined]`                                |\n     * | A function  | Set column widths dynamically,<br>on each render                                                     | `colWidths(visualColumnIndex) { return visualColumnIndex * 10; }` |\n     * | `undefined` | Used by the [modifyColWidth](@/api/hooks.md#modifyColWidth) hook,<br>to detect column width changes. | `colWidths: undefined`                                            |\n     *\n     * Setting `colWidths` even for a single column disables the {@link AutoColumnSize} plugin\n     * for all columns. For this reason, if you use `colWidths`, we recommend you set a width for each one\n     * of your columns. Otherwise, every column with an undefined width defaults back to 50px,\n     * which may cut longer columns names.\n     *\n     * Read more:\n     * - [Column width](@/guides/columns/column-width/column-width.md)\n     * - [Hooks: `modifyColWidth`](@/api/hooks.md#modifyColWidth)\n     * - [`autoColumnSize`](#autoColumnSize)\n     *\n     * @memberof Options#\n     * @type {number|number[]|string|string[]|Array<undefined>|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set every column's width to 100px\n     * colWidths: 100,\n     *\n     * // set every column's width to 100px\n     * colWidths: '100px',\n     *\n     * // set the first (by visual index) column's width to 100\n     * // set the second (by visual index) column's width to 120\n     * // set the third (by visual index) column's width to `undefined`, so that it defaults to 50px\n     * // set any other column's width to the default 50px (note that longer cell values and column names can get cut)\n     * colWidths: [100, 120, undefined],\n     *\n     * // set each column's width individually, using a function\n     * colWidths(visualColumnIndex) {\n     *   return visualColumnIndex * 10;\n     * },\n     * ```\n     */\n    colWidths: undefined,\n\n    /**\n     * The `commentedCellClassName` option lets you add a CSS class name to cells\n     * that have comments.\n     *\n     * Read more:\n     * - [Comments](@/guides/cell-features/comments/comments.md)\n     * - [`comments`](#comments)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htCommentCell'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `has-comment` CSS class name\n     * // to each cell that has a comment\n     * commentedCellClassName: 'has-comment',\n     * ```\n     */\n    commentedCellClassName: 'htCommentCell',\n\n    /**\n     * @description\n     * The `comments` option configures the [`Comments`](@/api/comments.md) plugin.\n     *\n     * You can set the `comments` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                           |\n     * | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`    | - Enable the [`Comments`](@/api/comments.md) plugin<br>- Add comment menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)                                 |\n     * | `false`   | Disable the [`Comments`](@/api/comments.md) plugin                                                                                                                                    |\n     * | An object | - Enable the [`Comments`](@/api/comments.md) plugin<br>- Add comment menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)<br>- Configure comment settings |\n     *\n     * If you set the `comments` option to an object, you can configure the following comment options:\n     *\n     * | Option         | Possible settings           | Description                                         |\n     * | -------------- | --------------------------- | --------------------------------------------------- |\n     * | `displayDelay` | A number (default: `250`)   | Display comments after a delay (in milliseconds)    |\n     * | `readOnly`     | `true` \\| `false` (default) | `true`: Make comments read-only                     |\n     * | `style`        | An object                   | Set comment boxes' `width` and `height` (in pixels) |\n     *\n     * Read more:\n     * - [Comments](@/guides/cell-features/comments/comments.md)\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [`width`](#width)\n     * - [`height`](#height)\n     * - [`readOnly`](#readOnly)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category Comments\n     *\n     * @example\n     * ```js\n     * // enable the `Comments` plugin\n     * comments: true,\n     *\n     * // enable the `Comments` plugin\n     * // and configure its settings\n     * comments: {\n     *   // display all comments with a 1-second delay\n     *   displayDelay: 1000,\n     *   // make all comments read-only\n     *   readOnly: true,\n     *   // set the default size of all comment boxes\n     *   style: {\n     *     width: 300,\n     *     height: 100\n     *   }\n     * }\n     * ```\n     */\n    comments: false,\n\n    /**\n     * @description\n     * The `contextMenu` option configures the [`ContextMenu`](@/api/contextMenu.md) plugin.\n     *\n     * You can set the `contextMenu` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                                             |\n     * | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`ContextMenu`](@/api/contextMenu.md) plugin                                                                                                                                                |\n     * | `true`    | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Use the [default context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-default-options)                 |\n     * | An array  | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Modify [individual context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options)              |\n     * | An object | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Apply a [custom context menu configuration](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-a-fully-custom-configuration) |\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [Context menu: Context menu with default options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-default-options)\n     * - [Context menu: Context menu with specific options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options)\n     * - [Context menu: Context menu with fully custom configuration options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-a-fully-custom-configuration)\n     * - [Plugins: `ContextMenu`](@/api/contextMenu.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|object}\n     * @default undefined\n     * @category ContextMenu\n     *\n     * @example\n     * ```js\n     * // enable the `ContextMenu` plugin\n     * // use the default context menu options\n     * contextMenu: true,\n     *\n     * // enable the `ContextMenu` plugin\n     * // and modify individual context menu options\n     * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo'],\n     *\n     * // enable the `ContextMenu` plugin\n     * // and apply a custom context menu configuration\n     * contextMenu: {\n     *   items: {\n     *     'option1': {\n     *       name: 'Option 1'\n     *     },\n     *     'option2': {\n     *       name: 'Option 2',\n     *       submenu: {\n     *         items: [\n     *           {\n     *             key: 'option2:suboption1',\n     *             name: 'Suboption 1',\n     *             callback: function(key, options) {\n     *               ...\n     *             }\n     *           },\n     *           ...\n     *         ]\n     *       }\n     *     }\n     *   }\n     * },\n     * ```\n     */\n    contextMenu: undefined,\n\n    /**\n     * @description\n     * The `copyable` option determines whether a cell's value can be copied to the clipboard or not.\n     *\n     * You can set the `copyable` option to one of the following:\n     *\n     * | Setting                                                                                                        | Description                                                                                                            |\n     * | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default)                                                                                               | - On pressing <kbd>**Ctrl**</kbd>/<kbd>**Cmd**</kbd>+<kbd>**C**</kbd>, add the cell's value to the clipboard         |\n     * | `false`<br>(default for the [`password`](@/guides/cell-types/password-cell-type/password-cell-type.md) [cell type](#type))        | - On pressing <kbd>**Ctrl**</kbd>/<kbd>**Cmd**</kbd>+<kbd>**C**</kbd>, add an empty string (`\"\"`) to the clipboard   |\n     *\n     * Read more:\n     * - [Clipboard](@/guides/cell-features/clipboard/clipboard.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [Password cell type](@/guides/cell-types/password-cell-type/password-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable copying for each cell of the entire grid\n     * copyable: true,\n     *\n     * // enable copying for individual columns\n     * columns: [\n     *   {\n     *     // enable copying for each cell of this column\n     *     copyable: true\n     *   },\n     *   {\n     *     // disable copying for each cell of this column\n     *     copyable: false\n     *   }\n     * ]\n     *\n     * // enable copying for specific cells\n     * cell: [\n     *   {\n     *     col: 0,\n     *     row: 0,\n     *     // disable copying for cell (0, 0)\n     *     copyable: false,\n     *   }\n     * ],\n     * ```\n     */\n    copyable: true,\n\n    /**\n     * The `copyPaste` option configures the [`CopyPaste`](@/api/copyPaste.md) plugin.\n     *\n     * You can set the `copyPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                            |\n     * | ----------------- | ---------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default)  | Enable the [`CopyPaste`](@/api/copyPaste.md) plugin with the default configuration                                     |\n     * | `false`           | Disable the [`CopyPaste`](@/api/copyPaste.md) plugin                                                                   |\n     * | An object         | - Enable the [`CopyPaste`](@/api/copyPaste.md) plugin<br>- Modify the [`CopyPaste`](@/api/copyPaste.md) plugin options |\n     *\n     * ##### copyPaste: Additional options\n     *\n     * If you set the `copyPaste` option to an object, you can set the following `CopyPaste` plugin options:\n     *\n     * | Option                   | Possible settings                                  | Description                                                                                                                                                                                         |\n     * | ------------------------ | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `columnsLimit`           | A number (default: `Infinity`)                     | The maximum number of columns that can be copied                                                                                                                                                    |\n     * | `rowsLimit`              | A number (default: `Infinity`)                     | The maximum number of columns that can be copied                                                                                                                                                    |\n     * | `pasteMode`              | `'overwrite'` \\| `'shift_down'` \\| `'shift_right'` | When pasting:<br>`'overwrite'`: overwrite the currently-selected cells<br>`'shift_down'`: move the currently-selected cells down<br>`'shift_right'`: move the currently-selected cells to the right |\n     * | `copyColumnHeaders`      | Boolean (default: `false`)                         | `true`: add a context menu option for copying cells along with their nearest column headers                                                                                                         |\n     * | `copyColumnGroupHeaders` | Boolean (default: `false`)                         | `true`: add a context menu option for copying cells along with all their related columns headers                                                                                                    |\n     * | `copyColumnHeadersOnly`  | Boolean (default: `false`)                         | `true`: add a context menu option for copying column headers nearest to the selected cells (without copying cells)                                                                    |\n     * | `uiContainer`            | An HTML element                                    | The UI container for the secondary focusable element                                                                                                                                                |\n     *\n     * Read more:\n     * - [Plugins: `CopyPaste`](@/api/copyPaste.md)\n     * - [Guides: Clipboard](@/guides/cell-features/clipboard/clipboard.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default true\n     * @category CopyPaste\n     *\n     * @example\n     * ```js\n     * // enable the plugin with the default configuration\n     * copyPaste: true // set by default\n     *\n     * // disable the plugin\n     * copyPaste: false,\n     *\n     * // enable the plugin with a custom configuration\n     * copyPaste: {\n     *   // set a maximum number of columns that can be copied\n     *   columnsLimit: 25,\n     *\n     *   // set a maximum number of rows that can be copied\n     *   rowsLimit: 50,\n     *\n     *   // set the paste behavior\n     *   pasteMode: 'shift_down',\n     *\n     *   // add the option to copy cells along with their nearest column headers\n     *   copyColumnHeaders: true,\n     *\n     *   // add the option to copy cells along with all their related columns headers\n     *   copyColumnGroupHeaders: true,\n     *\n     *   // add the option to copy just column headers (without copying cells)\n     *   copyColumnHeadersOnly: true,\n     *\n     *   // set a UI container\n     *   uiContainer: document.body,\n     * },\n     * ```\n     */\n    copyPaste: true,\n\n    /**\n     * The `correctFormat` option configures whether incorrectly-formatted times and dates are amended or not.\n     *\n     * When the user enters dates and times, Handsontable can automatically adjust their format\n     * to match the [`dateFormat`](#dateFormat) and [`timeFormat`](@/guides/cell-types/time-cell-type/time-cell-type.md) settings.\n     *\n     * You can set the `correctFormat` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                                               |\n     * | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Don't correct the format of the entered date or time (treat the entered date or time as invalid)                                                          |\n     * | `true`            | Correct the format of the entered date or time to match the [`dateFormat`](#dateFormat) or [`timeFormat`](@/guides/cell-types/time-cell-type/time-cell-type.md) settings |\n     *\n     * Read more:\n     * - [Date cell type](@/guides/cell-types/date-cell-type/date-cell-type.md)\n     * - [Time cell type](@/guides/cell-types/time-cell-type/time-cell-type.md)\n     * - [`dateFormat`](#dateFormat)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `date`\n     *   type: 'date',\n     *   // for every `date` cell of this column, set the date format to `YYYY-MM-DD`\n     *   dateFormat: 'YYYY-MM-DD',\n     *   // enforce the `YYYY-MM-DD` date format\n     *   correctFormat: true\n     *   },\n     *\n     *   {\n     *   // set the `type` of each cell in this column to `time`\n     *   type: 'time',\n     *   // for every `time` cell of this column, set the time format to `h:mm:ss a`\n     *   timeFormat: 'h:mm:ss a',\n     *   // enforce the `h:mm:ss a` time format\n     *   correctFormat: true\n     *   },\n     * ],\n     * ```\n     */\n    correctFormat: false,\n\n    /**\n     * The `currentColClassName` option lets you add a CSS class name\n     * to each cell of the currently-visible, currently-selected columns.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to each cell of the currently-visible, currently-selected columns\n     * currentColClassName: 'your-class-name',\n     * ```\n     */\n    currentColClassName: undefined,\n\n    /**\n     * The `currentHeaderClassName` option lets you add a CSS class name\n     * to every currently-visible, currently-selected header.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'ht__highlight'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `ht__highlight` CSS class name\n     * // to every currently-visible, currently-selected header\n     * currentHeaderClassName: 'ht__highlight',\n     * ```\n     */\n    currentHeaderClassName: 'ht__highlight',\n\n    /**\n     * The `currentRowClassName` option lets you add a CSS class name\n     * to each cell of the currently-visible, currently-selected rows.\n     *\n     * Read more:\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to each cell of the currently-visible, currently-selected rows\n     * currentRowClassName: 'your-class-name',\n     * ```\n     */\n    currentRowClassName: undefined,\n\n    /**\n     * @description\n     * The `customBorders` option configures the [`CustomBorders`](@/api/customBorders.md) plugin.\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * (and add its menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)),\n     * set the `customBorders` option to `true`.\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * and add a predefined border around a particular cell,\n     * set the `customBorders` option to an array of objects.\n     * Each object represents a border configuration for one cell, and has the following properties:\n     *\n     * | Property | Sub-properties     | Types                              | Description                                                       |\n     * | -------- | ------------------ | ---------------------------------- | ----------------------------------------------------------------- |\n     * | `row`    | -                  | `row`: Number                      | The cell's row coordinate.                                        |\n     * | `col`    | -                  | `col`: Number                      | The cell's column coordinate.                                     |\n     * | `start`  | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `start` sets the width (`width`) and color (`color`) of the left-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `start` sets the width (`width`) and color (`color`) of the right-hand border. |\n     * | `end`    | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `end` sets the width (`width`) and color (`color`) of the right-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `end` sets the width (`width`) and color (`color`) of the left-hand border. |\n     * | `top`    | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the width (`width`) and color (`color`) of the top border. |\n     * | `bottom` | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the width (`width`) and color (`color`) of the bottom border. |\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * and add a predefined border around a range of cells,\n     * set the `customBorders` option to an array of objects.\n     * Each object represents a border configuration for a single range of cells, and has the following properties:\n     *\n     * | Property | Sub-properties                               | Types                                                            | Description                                                                                  |\n     * | -------- | -------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |\n     * | `range`  | `from` {`row`, `col`}<br>`to` {`row`, `col`} | `from`: Object<br>`to`: Object<br>`row`: Number<br>`col`: Number | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default):<br>- `from` selects the range's top-left corner.<br>- `to` selects the range's bottom-right corner.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: <br>- `from` selects the range's top-right corner.<br>- `to` selects the range's bottom-left corner. |\n     * | `start`  | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `start` sets the width (`width`) and color (`color`) of the left-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `start` sets the width (`width`) and color (`color`) of the right-hand border. |\n     * | `end`    | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `end` sets the width (`width`) and color (`color`) of the right-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `end` sets the width (`width`) and color (`color`) of the left-hand border. |\n     * | `top`    | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the width (`width`) and color (`color`) of the top border. |\n     * | `bottom` | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the width (`width`) and color (`color`) of the bottom border. |\n     *\n     * Read more:\n     * - [Formatting cells: Custom cell borders](@/guides/cell-features/formatting-cells/formatting-cells.md#custom-cell-borders)\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [Plugins: `CustomBorders`](@/api/customBorders.md)\n     * - [Layout direction](@/guides/internationalization/layout-direction/layout-direction.md)\n     * - [`layoutDirection`](#layoutDirection)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category CustomBorders\n     *\n     * @example\n     * ```js\n     * // enable the `CustomBorders` plugin\n     * customBorders: true,\n     *\n     * // enable the `CustomBorders` plugin\n     * // and add a predefined border for a particular cell\n     * customBorders: [\n     *   // add an object with a border configuration for one cell\n     *   {\n     *     // set the cell's row coordinate\n     *     row: 2,\n     *     // set the cell's column coordinate\n     *     col: 2,\n     *     // set the left/right border's width and color\n     *     start: {\n     *       width: 2,\n     *       color: 'red'\n     *     },\n     *     // set the right/left border's width and color\n     *     end: {\n     *       width: 1,\n     *       color: 'green'\n     *     },\n     *     // set the top border's width and color\n     *     top: '',\n     *     // set the bottom border's width and color\n     *     bottom: ''\n     *   }\n     * ],\n     *\n     * // enable the `CustomBorders` plugin\n     * // and add a predefined border for a range of cells\n     * customBorders: [\n     *   // add an object with a border configuration for one range of cells\n     *   {\n     *     // select a range of cells\n     *     range: {\n     *       // set the range's top-left corner\n     *       from: {\n     *         row: 1,\n     *         col: 1\n     *       },\n     *       // set the range's bottom-right corner\n     *       to: {\n     *         row: 3,\n     *         col: 4\n     *       }\n     *     },\n     *     // set the left/right border's width and color\n     *     start: {\n     *       width: 2,\n     *       color: 'red'\n     *     },\n     *     // set the right/left border's width and color\n     *     end: {},\n     *     // set the top border's width and color\n     *     top: {},\n     *     // set the bottom border's width and color\n     *     bottom: {}\n     *   }\n     * ],\n     * ```\n     */\n    customBorders: false,\n\n    /**\n     * @description\n     * The `data` option sets the initial [data](@/guides/getting-started/binding-to-data/binding-to-data.md) of your Handsontable instance.\n     *\n     * Handsontable's data is bound to your source data by reference (i.e. when you edit Handsontable's data, your source data alters as well).\n     *\n     * You can set the `data` option:\n     * - Either to an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).\n     * - Or to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects).\n     *\n     * If you don't set the `data` option (or set it to `null`), Handsontable renders as an empty 5x5 grid by default.\n     *\n     * Read more:\n     * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n     * - [`dataSchema`](#dataSchema)\n     * - [`startRows`](#startRows)\n     * - [`startCols`](#startCols)\n     *\n     * @memberof Options#\n     * @type {Array[]|object[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // as an array of arrays\n     * data: [\n     *   ['A', 'B', 'C'],\n     *   ['D', 'E', 'F'],\n     *   ['G', 'H', 'J']\n     * ]\n     *\n     * // as an array of objects\n     * data: [\n     *   {id: 1, name: 'Ted Right'},\n     *   {id: 2, name: 'Frank Honest'},\n     *   {id: 3, name: 'Joan Well'},\n     *   {id: 4, name: 'Gail Polite'},\n     *   {id: 5, name: 'Michael Fair'},\n     * ]\n     * ```\n     */\n    data: undefined,\n\n    /**\n     * @description\n     * If `true`, Handsontable will interpret the dots in the columns mapping as a nested object path. If your dataset contains\n     * the dots in the object keys and you don't want Handsontable to interpret them as a nested object path, set this option to `false`.\n     *\n     * The option only works when defined in the global table settings.\n     *\n     * @since 14.4.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // All dots are interpreted as nested object paths\n     * dataDotNotation: true,\n     * data: [\n     *   { id: 1, name: { first: 'Ted', last: 'Right' }, user: { address: '1234 Any Street' } },\n     * ],\n     * columns={[\n     *   { data: 'name.first' },\n     *   { data: 'user.address' },\n     * ]},\n     * ```\n     * ```js\n     * // All dots are interpreted as simple object keys\n     * dataDotNotation: false,\n     * data: [\n     *   { id: 1, 'name.first': 'Ted', 'user.address': '1234 Any Street' },\n     * ],\n     * columns={[\n     *   { data: 'name.first' },\n     *   { data: 'user.address' },\n     * ]},\n     * ```\n     */\n    dataDotNotation: true,\n\n    /**\n     * @description\n     * When the [`data`](#data) option is set to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects)\n     * (or is empty), the `dataSchema` option defines the structure of new rows.\n     *\n     * Using the `dataSchema` option, you can start out with an empty grid.\n     *\n     * You can set the `dataSchema` option to one of the following:\n     * - An object\n     * - A function\n     *\n     * Read more:\n     * - [Binding to data: Array of objects with custom data schema](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects-with-custom-data-schema)\n     * - [Binding to data: Function data source and schema](@/guides/getting-started/binding-to-data/binding-to-data.md#function-data-source-and-schema)\n     * - [`data`](#data)\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // with `dataSchema`, you can start with an empty grid\n     * data: null,\n     * dataSchema: {id: null, name: {first: null, last: null}, address: null},\n     * colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],\n     * columns: [\n     *   {data: 'id'},\n     *   {data: 'name.first'},\n     *   {data: 'name.last'},\n     *   {data: 'address'}\n     * ],\n     * startRows: 5,\n     * minSpareRows: 1\n     * ```\n     */\n    dataSchema: undefined,\n\n    /**\n     * The `dateFormat` option configures the date format accepted by [`date`](@/guides/cell-types/date-cell-type/date-cell-type.md) cells.\n     *\n     * You can set the `dateFormat` option to a string with a proper date format. The default value is: `'DD/MM/YYYY'`.\n     *\n     * To automatically correct dates whose format doesn't match the `dateFormat` setting, use the [`correctFormat`](#correctFormat) option.\n     *\n     * Read more:\n     * - [Date cell type](@/guides/cell-types/date-cell-type/date-cell-type.md)\n     * - [`correctFormat`](#correctFormat)\n     * - [`defaultDate`](#defaultDate)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'DD/MM/YYYY'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `date`\n     *   type: 'date',\n     *   // for every `date` cell of this column, set the date format to `YYYY-MM-DD`\n     *   dateFormat: 'YYYY-MM-DD',\n     *   },\n     * ],\n     * ```\n     */\n    dateFormat: 'DD/MM/YYYY',\n\n    /**\n     * The `timeFormat` option configures the time format accepted by [`time`](@/guides/cell-types/time-cell-type/time-cell-type.md) cells.\n     *\n     * You can set the `timeFormat` option to a string with a proper time format. The default value is: `'h:mm:ss a'`.\n     *\n     * To automatically correct times whose format doesn't match the `timeFormat` setting, use the [`correctFormat`](#correctFormat) option.\n     *\n     * Read more:\n     * - [Time cell type](@/guides/cell-types/time-cell-type/time-cell-type.md)\n     * - [`correctFormat`](#correctFormat)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'h:mm:ss a'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `time`\n     *   type: 'time',\n     *   // for every `time` cell of this column, set the time format to `h:mm:ss a`\n     *   timeFormat: 'h:mm:ss a',\n     *   },\n     * ],\n     * ```\n     */\n    timeFormat: 'h:mm:ss a',\n\n    /**\n     * The `datePickerConfig` option configures the `date` [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)'s date picker, which uses an external dependency: [Pikaday](https://github.com/Pikaday/Pikaday/tree/1.8.2).\n     *\n     * You can set the `datePickerConfig` option to an object with any of the available [Pikaday options](https://github.com/Pikaday/Pikaday/tree/1.8.2#configuration),\n     * except for the following, which are always overwritten by the `date` [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md):\n     * - `bound`\n     * - `container`\n     * - `field`\n     * - `trigger`\n     *\n     * If the `datePickerConfig` option is not defined, the `date` [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) overwrites the following [Pikaday options](https://github.com/Pikaday/Pikaday/tree/1.8.2#configuration) as well:\n     *\n     * | Pikaday option       | Handsontable's setting |\n     * | -------------------- | ---------------------- |\n     * | `format`             | `'DD/MM/YYYY'`         |\n     * | `reposition`         | `false`                |\n     *\n     * Read more:\n     * - [`editor`](#editor)\n     * - [`dateFormat`](#dateFormat)\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [All Pikaday options &#8594;](https://github.com/Pikaday/Pikaday/tree/1.8.2#configuration)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Core\n     */\n    datePickerConfig: undefined,\n\n    /**\n     * The `defaultDate` option configures the date displayed\n     * in empty [`date`](@/guides/cell-types/date-cell-type/date-cell-type.md) cells.\n     *\n     * You can set the `defaultDate` option to a string.\n     *\n     * Read more:\n     * - [Date cell type](@/guides/cell-types/date-cell-type/date-cell-type.md)\n     * - [`dateFormat`](#dateFormat)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `date`\n     *     type: 'date',\n     *     // in every empty `date` cell of this column, display `2015-02-02`\n     *     defaultDate: '2015-02-02'\n     *   }\n     * ],\n     * ```\n     */\n    defaultDate: undefined,\n\n    /**\n     * @description\n     * The `disableVisualSelection` option configures how\n     * [selection](@/guides/cell-features/selection/selection.md) is shown.\n     *\n     * You can set the `disableVisualSelection` option to one of the following:\n     *\n     * | Setting           | Description                                                                                         |\n     * | ----------------- | --------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | - Show single-cell selection<br>- Show range selection<br>- Show header selection                   |\n     * | `true`            | - Don't show single-cell selection<br>- Don't show range selection<br>- Don't show header selection |\n     * | `'current'`       | - Don't show single-cell selection<br>- Show range selection<br>- Show header selection             |\n     * | `'area'`          | - Show single-cell selection<br>- Don't show range selection<br>- Show header selection             |\n     * | `'header'`        | - Show single-cell selection<br>- Show range selection<br>- Don't show header selection             |\n     * | An array          | A combination of `'current'`, `'area'`, and/or `'header'`                                           |\n     *\n     * Read more:\n     * - [Selection](@/guides/cell-features/selection/selection.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string|string[]}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't show single-cell selection\n     * // don't show range selection\n     * // don't show header selection\n     * disableVisualSelection: true,\n     *\n     * // don't show single-cell selection\n     * // show range selection\n     * // show header selection\n     * disableVisualSelection: 'current',\n     *\n     * // don't show single-cell selection\n     * // don't show range selection\n     * // show header selection\n     * disableVisualSelection: ['current', 'area'],\n     * ```\n     */\n    disableVisualSelection: false,\n\n    /**\n     * @description\n     * The `dragToScroll` option configures the [`DragToScroll`](@/api/dragToScroll.md) plugin.\n     *\n     * You can set the `dragToScroll` option to one of the following:\n     *\n     * | Setting          | Description                                                                 |\n     * | ---------------- | --------------------------------------------------------------------------- |\n     * | `true` (default) | When selection reaches the edge of the grid's viewport, scroll the viewport |\n     * | `false`          | Don't scroll the viewport                                                   |\n     *\n     * Read more:\n     * - [Plugins: `DragToScroll`](@/api/dragToScroll.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category DragToScroll\n     *\n     * @example\n     * ```js\n     * // when selection reaches the edge of the grid's viewport, scroll the viewport\n     * dragToScroll: true,\n     * ```\n     */\n    dragToScroll: true,\n\n    /**\n     * The `dropdownMenu` option configures the [`DropdownMenu`](@/api/dropdownMenu.md) plugin.\n     *\n     * You can set the `dropdownMenu` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin                                                                                                                                   |\n     * | `true`    | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Use the [default context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-default-options)    |\n     * | An array  | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Modify [individual context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options) |\n     * | An object | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Apply a custom dropdown menu configuration                                                                                  |\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [Plugins: `DropdownMenu`](@/api/dropdownMenu.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object|string[]}\n     * @default undefined\n     * @category DropdownMenu\n     *\n     * @example\n     * ```js\n     * // enable the `DropdownMenu` plugin\n     * // use the default context menu options\n     * dropdownMenu: true,\n     *\n     * // enable the `DropdownMenu` plugin\n     * // and modify individual context menu options\n     * dropdownMenu: ['---------', 'undo', 'redo'],\n     *\n     * // enable the `DropdownMenu` plugin\n     * // and apply a custom dropdown menu configuration\n     * dropdownMenu: {\n     *   items: {\n     *     'option1': {\n     *       name: 'Option 1'\n     *     },\n     *     'option2': {\n     *       name: 'Option 2',\n     *       submenu: {\n     *         items: [\n     *           {\n     *             key: 'option2:suboption1',\n     *             name: 'Suboption 1',\n     *             callback(key, options) {\n     *               ...\n     *             }\n     *           },\n     *           ...\n     *         ]\n     *       }\n     *     }\n     *   }\n     * },\n     * ```\n     */\n    dropdownMenu: undefined,\n\n    /**\n     * The `editor` option sets a [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) for a cell.\n     *\n     * You can set the `editor` option to one of the following [cell editor aliases](@/guides/cell-functions/cell-editor/cell-editor.md):\n     *\n     * | Alias               | Cell editor function                                                       |\n     * | ------------------- | -------------------------------------------------------------------------- |\n     * | A custom alias      | Your [custom cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) function |\n     * | `'autocomplete'`    | `AutocompleteEditor`                                                       |\n     * | `'base'`            | `BaseEditor`                                                               |\n     * | `'checkbox'`        | `CheckboxEditor`                                                           |\n     * | `'date'`            | `DateEditor`                                                               |\n     * | `'dropdown'`        | `DropdownEditor`                                                           |\n     * | `'handsontable'`    | `HandsontableEditor`                                                       |\n     * | `'numeric'`         | `NumericEditor`                                                            |\n     * | `'password'`        | `PasswordEditor`                                                           |\n     * | `'select'`          | `SelectEditor`                                                             |\n     * | `'text'`            | `TextEditor`                                                               |\n     * | `'time'`            | `TimeEditor`                                                               |\n     *\n     * To disable editing cells through cell editors,\n     * set the `editor` option to `false`.\n     * You'll still be able to change cells' content through Handsontable's API\n     * or through plugins (e.g. [`CopyPaste`](@/api/copyPaste.md)), though.\n     *\n     * To set the [`editor`](#editor), [`renderer`](#renderer), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {string|Function|boolean}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // use the `numeric` editor for each cell of the entire grid\n     * editor: 'numeric',\n     *\n     * // apply the `editor` option to individual columns\n     * columns: [\n     *   {\n     *     // use the `autocomplete` editor for each cell of this column\n     *     editor: 'autocomplete'\n     *   },\n     *   {\n     *     // disable editing cells through cell editors for each cell of this column\n     *     editor: false\n     *   }\n     * ]\n     * ```\n     */\n    editor: undefined,\n\n    /**\n     * The `enterBeginsEditing` option configures the action of the <kbd>**Enter**</kbd> key.\n     *\n     * You can set the `enterBeginsEditing` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                                               |\n     * | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | - On pressing <kbd>**Enter**</kbd> once, enter the editing mode of the active cell<br>- On pressing <kbd>**Enter**</kbd> twice, move to another cell,<br>as configured by the [`enterMoves`](#enterMoves) setting |\n     * | `false`          | - On pressing <kbd>**Enter**</kbd> once, move to another cell,<br>as configured by the [`enterMoves`](#enterMoves) setting                                                                                    |\n     *\n     * Read more:\n     * - [`enterMoves`](#enterMoves)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // press Enter once to start editing\n     * // press Enter twice to move to another cell\n     * enterBeginsEditing: true,\n     *\n     * // press Enter once to move to another cell\n     * enterBeginsEditing: false,\n     * ```\n     */\n    enterBeginsEditing: true,\n\n    /**\n     * The `enterMoves` option configures the action of the <kbd>**Enter**</kbd> key.\n     *\n     * If the [`enterBeginsEditing`](#enterBeginsEditing) option is set to `true`,\n     * the `enterMoves` setting applies to the **second** pressing of the <kbd>**Enter**</kbd> key.\n     *\n     * If the [`enterBeginsEditing`](#enterBeginsEditing) option is set to `false`,\n     * the `enterMoves` setting applies to the **first** pressing of the <kbd>**Enter**</kbd> key.\n     *\n     * You can set the `enterMoves` option to an object with the following properties\n     * (or to a function that returns such an object):\n     *\n     * | Property | Type   | Description                                                                                                                                              |\n     * | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `col`    | Number | - On pressing <kbd>**Enter**</kbd>, move selection `col` columns right<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Enter**</kbd>, move selection `col` columns left |\n     * | `row`    | Number | - On pressing <kbd>**Enter**</kbd>, move selection `row` rows down<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Enter**</kbd>, move selection `row` rows up          |\n     *\n     * Read more:\n     * - [`enterBeginsEditing`](#enterBeginsEditing)\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default {col: 0, row: 1}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on pressing Enter, move selection 1 column right and 1 row down\n     * // on pressing Shift+Enter, move selection 1 column left and 1 row up\n     * enterMoves: {col: 1, row: 1},\n     *\n     * // the same setting, as a function\n     * // `event` is a DOM Event object received on pressing Enter\n     * // you can use it to check whether the user pressed Enter or Shift+Enter\n     * enterMoves(event) {\n     *   return {col: 1, row: 1};\n     * },\n     * ```\n     */\n    enterMoves: { col: 0, row: 1 },\n\n    /**\n     * The `fillHandle` option configures the [Autofill](@/api/autofill.md) plugin.\n     *\n     * You can set the `fillHandle` option to one the following:\n     *\n     * | Setting        | Description                                                                |\n     * | -------------- | -------------------------------------------------------------------------- |\n     * | `true`         | - Enable autofill in all directions<br>- Add the fill handle               |\n     * | `false`        | Disable autofill                                                           |\n     * | `'vertical'`   | - Enable vertical autofill<br>- Add the fill handle                        |\n     * | `'horizontal'` | - Enable horizontal autofill<br>- Add the fill handle                      |\n     * | An object      | - Enable autofill<br>- Add the fill handle<br>- Configure autofill options |\n     *\n     * If you set the `fillHandle` option to an object, you can configure the following autofill options:\n     *\n     * | Option          | Possible settings              | Description                                                                                               |\n     * | --------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------- |\n     * | `autoInsertRow` | `true` (default) \\| `false`    | `true`: When you reach the grid's bottom, add new rows<br>`false`: When you reach the grid's bottom, stop |\n     * | `direction`     | `'vertical'` \\| `'horizontal'` | `'vertical'`: Enable vertical autofill<br>`'horizontal'`: Enable horizontal autofill                      |\n     *\n     * Read more:\n     * - [AutoFill values](@/guides/cell-features/autofill-values/autofill-values.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string|object}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable autofill in all directions\n     * // with `autoInsertRow` enabled\n     * fillHandle: true,\n     *\n     * // enable vertical autofill\n     * // with `autoInsertRow` enabled\n     * fillHandle: 'vertical',\n     *\n     * // enable horizontal autofill\n     * // with `autoInsertRow` enabled\n     * fillHandle: 'horizontal',\n     *\n     * // enable autofill in all directions\n     * // with `autoInsertRow` disabled\n     * fillHandle: {\n     *   autoInsertRow: false,\n     * },\n     *\n     * // enable vertical autofill\n     * // with `autoInsertRow` disabled\n     * fillHandle: {\n     *   autoInsertRow: false,\n     *   direction: 'vertical'\n     * },\n     * ```\n     */\n    fillHandle: {\n      autoInsertRow: false,\n    },\n\n    /**\n     * The `filter` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells'\n     * lists are updated by the end user's input.\n     *\n     * You can set the `filter` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                           |\n     * | ---------------- | --------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | When the end user types into the input area, only options matching the input are displayed                            |\n     * | `false`          | When the end user types into the input area, all options are displayed<br>(options matching the input are put in bold |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     * - [`filteringCaseSensitive`](#filteringCaseSensitive)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C'],\n     *   // when the end user types in `A`, display only the A option\n     *   // when the end user types in `B`, display only the B option\n     *   // when the end user types in `C`, display only the C option\n     *   filter: true\n     * }],\n     * ```\n     */\n    filter: true,\n\n    /**\n     * The `filteringCaseSensitive` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells'\n     * input is case-sensitive.\n     *\n     * You can set the `filteringCaseSensitive` option to one of the following:\n     *\n     * | Setting           | Description                                                                                        |\n     * | ----------------- | -------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells' input is not case-sensitive |\n     * | `true`            | [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells' input is case-sensitive     |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     * - [`filter`](#filter)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     source: [ ... ],\n     *     // match case while searching autocomplete options\n     *     filteringCaseSensitive: true\n     *   }\n     * ],\n     * ```\n     */\n    filteringCaseSensitive: false,\n\n    /**\n     * The `filters` option configures the [`Filters`](@/api/filters.md) plugin.\n     *\n     * You can set the `filters` option to one of the following:\n     *\n     * | Setting | Description                                      |\n     * | ------- | ------------------------------------------------ |\n     * | `false` | Disable the [`Filters`](@/api/filters.md) plugin |\n     * | `true`  | Enable the [`Filters`](@/api/filters.md) plugin  |\n     *\n     * Read more:\n     * - [Column filter](@/guides/columns/column-filter/column-filter.md)\n     * - [Plugins: `Filters`](@/api/filters.md)\n     * - [`dropdownMenu`](#dropdownMenu)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category Filters\n     *\n     * @example\n     * ```js\n     * // enable the `Filters` plugin\n     * filters: true,\n     * ```\n     */\n    filters: undefined,\n\n    /**\n     * `fixedColumnsLeft` is a legacy option.\n     *\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default), `fixedColumnsLeft` acts like the [`fixedColumnsStart`](#fixedColumnsStart) option.\n     *\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL, using `fixedColumnsLeft` throws an error.\n     *\n     * Use [`fixedColumnsStart`](#fixedColumnsStart), which works in any layout direction.\n     *\n     * Read more:\n     * - [`fixedColumnsStart`](#fixedcolumnsstart)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the first 3 columns from the left\n     * fixedColumnsLeft: 3,\n     * ```\n     */\n    fixedColumnsLeft: 0,\n\n    /**\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default), the `fixedColumnsStart` option sets the number of [frozen columns](@/guides/columns/column-freezing/column-freezing.md) at the left-hand edge of the grid.\n     *\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL, the `fixedColumnsStart` option sets the number of [frozen columns](@/guides/columns/column-freezing/column-freezing.md) at the right-hand edge of the grid.\n     *\n     * Read more:\n     * - [Column freezing](@/guides/columns/column-freezing/column-freezing.md)\n     * - [Layout direction](@/guides/internationalization/layout-direction/layout-direction.md)\n     * - [`fixedColumnsLeft`](#fixedcolumnsleft)\n     * - [`layoutDirection`](#layoutDirection)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // when `layoutDirection` is set to `inherit` (default)\n     * // freeze the first 3 columns from the left or from the right\n     * // depending on your HTML document's `dir` attribute\n     * layoutDirection: 'inherit',\n     * fixedColumnsStart: 3,\n     *\n     * // when `layoutDirection` is set to `rtl`\n     * // freeze the first 3 columns from the right\n     * // regardless of your HTML document's `dir` attribute\n     * layoutDirection: 'rtl',\n     * fixedColumnsStart: 3,\n     *\n     * // when `layoutDirection` is set to `ltr`\n     * // freeze the first 3 columns from the left\n     * // regardless of your HTML document's `dir` attribute\n     * layoutDirection: 'ltr',\n     * fixedColumnsStart: 3,\n     * ```\n     */\n    fixedColumnsStart: 0,\n\n    /**\n     * The `fixedRowsBottom` option sets the number of [frozen rows](@/guides/rows/row-freezing/row-freezing.md)\n     * at the bottom of the grid.\n     *\n     * Read more:\n     * - [Row freezing](@/guides/rows/row-freezing/row-freezing.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the bottom 3 rows\n     * fixedRowsBottom: 3,\n     * ```\n     */\n    fixedRowsBottom: 0,\n\n    /**\n     * The `fixedRowsTop` option sets the number of [frozen rows](@/guides/rows/row-freezing/row-freezing.md) at the top of the grid.\n     *\n     * Read more:\n     * - [Row freezing](@/guides/rows/row-freezing/row-freezing.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the top 3 rows\n     * fixedRowsTop: 3,\n     * ```\n     */\n    fixedRowsTop: 0,\n\n    /**\n     * The `formulas` option configures the [`Formulas`](@/api/formulas.md) plugin.\n     *\n     * The [`Formulas`](@/api/formulas.md) plugin uses the [HyperFormula](https://handsontable.github.io/hyperformula/) calculation engine.\n     * To install [HyperFormula](https://handsontable.github.io/hyperformula/), read the following:\n     * - [Formula calculation: Initialization methods](@/guides/formulas/formula-calculation/formula-calculation.md#initialization-methods)\n     *\n     * You can set the `formulas` option to an object with the following properties:\n     *\n     * | Property    | Possible values                                                                                                                                                                                                        |\n     * | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `engine`    | `HyperFormula` \\|<br>A [HyperFormula](https://handsontable.github.io/hyperformula/) instance \\|<br>A [HyperFormula configuration](https://handsontable.github.io/hyperformula/api/interfaces/configparams.html) object |\n     * | `sheetId`   | A number                                                                                                                                                                                                               |\n     * | `sheetName` | A string                                                                                                                                                                                                               |\n     *\n     * Read more:\n     * - [Plugins: `Formulas`](@/api/formulas.md)\n     * - [Formula calculation](@/guides/formulas/formula-calculation/formula-calculation.md)\n     * - [HyperFormula documentation: Client-side installation](https://handsontable.github.io/hyperformula/guide/client-side-installation)\n     * - [HyperFormula documentation: Configuration options](https://handsontable.github.io/hyperformula/api/interfaces/configparams.html)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Formulas\n     *\n     * @example\n     * ```js\n     * // either add the `HyperFormula` class\n     * formulas: {\n     *   // set `engine` to `HyperFormula`\n     *   engine: HyperFormula,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // or, add a HyperFormula instance\n     * // initialized with the `'internal-use-in-handsontable'` license key\n     * const hyperformulaInstance = HyperFormula.buildEmpty({\n     *   licenseKey: 'internal-use-in-handsontable',\n     * });\n     *\n     * formulas: {\n     *   // set `engine` to a HyperFormula instance\n     *   engine: hyperformulaInstance,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // or, add a HyperFormula configuration object\n     * formulas: {\n     *   // set `engine` to a HyperFormula configuration object\n     *   engine: {\n     *     hyperformula: HyperFormula // or `engine: hyperformulaInstance`\n     *     leapYear1900: false,       // this option comes from HyperFormula\n     *     // add more HyperFormula configuration options\n     *   },\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // use the same HyperFormula instance in multiple Handsontable instances\n     *\n     * // a Handsontable instance `hot1`\n     * formulas: {\n     *   engine: HyperFormula,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // a Handsontable instance `hot2`\n     * formulas: {\n     *   engine: hot1.getPlugin('formulas').engine,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     * ```\n     */\n    formulas: undefined,\n\n    /**\n     * The `fragmentSelection` option configures text selection settings.\n     *\n     * You can set the `fragmentSelection` option to one of the following:\n     *\n     * | Setting           | Description                                        |\n     * | ----------------- | ------------------------------------------------- |\n     * | `false` (default) | Disable text selection                            |\n     * | `true`            | Enable text selection in multiple cells at a time |\n     * | `'cell'`          | Enable text selection in one cell at a time       |\n     *\n     * @memberof Options#\n     * @type {boolean|string}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable text selection in multiple cells at a time\n     * fragmentSelection: true,\n     *\n     * // enable text selection in one cell a time\n     * fragmentSelection: 'cell',\n     * ```\n     */\n    fragmentSelection: false,\n\n    /**\n     * The `headerClassName` option allows adding one or more class names to the column headers' inner `div` element.\n     * It can be used to align the labels in the column headers to left, center or right by setting this option to\n     * `htLeft`, `htCenter`, or `htRight` respectively.\n     *\n     * @since 14.5.0\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // Adding class names to all column headers\n     * headerClassName: 'htRight my-class',\n     *\n     * columns: [\n     *  {\n     *    // Adding class names to the column header of a single column\n     *    headerClassName: 'htRight my-class',\n     *  }\n     * ]\n     * ```\n     */\n    headerClassName: undefined,\n\n    /**\n     * The `height` option configures the height of your grid.\n     *\n     * You can set `height` option to one of the following:\n     *\n     * | Setting                                                                    | Example                    |\n     * | -------------------------------------------------------------------------- | -------------------------- |\n     * | A number of pixels                                                         | `height: 500`              |\n     * | A string with a [CSS unit](https://www.w3schools.com/cssref/css_units.asp) | `height: '75vw'`           |\n     * | A function that returns a valid number or string                           | `height() { return 500; }` |\n     *\n     * Read more:\n     * - [Grid size](@/guides/getting-started/grid-size/grid-size.md)\n     *\n     * @memberof Options#\n     * @type {number|string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the grid's height to 500px\n     * height: 500,\n     *\n     * // set the grid's height to 75vh\n     * height: '75vh',\n     *\n     * // set the grid's height to 500px, using a function\n     * height() {\n     *   return 500;\n     * },\n     * ```\n     */\n    height: undefined,\n\n    /**\n     * The `hiddenColumns` option configures the [`HiddenColumns`](@/api/hiddenColumns.md) plugin.\n     *\n     * You can set the `hiddenColumns` option to one of the following:\n     *\n     * | Setting   | Description                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin                                 |\n     * | `true`    | Enable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin with the default plugin options  |\n     * | An object | - Enable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin<br>- Modify the plugin options |\n     *\n     * If you set the `hiddenColumns` to an object, you can set the following [`HiddenColumns`](@/api/hiddenColumns.md) plugin options:\n     *\n     * | Property           | Possible values     | Description                                                                                                                                             |\n     * | ------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `columns`          | An array of indexes | An array of indexes of columns that are hidden at initialization                                                                                        |\n     * | `copyPasteEnabled` | `true` \\| `false`   | `true`: when copying or pasting data, take hidden columns into account<br>`false`: when copying or pasting data, don't take hidden columns into account |\n     * | `indicators`       | `true` \\| `false`   | `true`: display UI markers to indicate the presence of hidden columns<br>`false`: display UI markers                                                    |\n     *\n     * Read more:\n     * - [Plugins: `HiddenColumns`](@/api/hiddenColumns.md)\n     * - [Column hiding](@/guides/columns/column-hiding/column-hiding.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category HiddenColumns\n     *\n     * @example\n     * ```js\n     * // enable the `HiddenColumns` plugin\n     * hiddenColumns: true,\n     *\n     * // enable `HiddenColumns` plugin, and modify the plugin options\n     * hiddenColumns: {\n     *   // set columns that are hidden by default\n     *   columns: [5, 10, 15],\n     *   // when copying or pasting data, take hidden columns into account\n     *   copyPasteEnabled: true,\n     *   // show where hidden columns are\n     *   indicators: true\n     * }\n     * ```\n     */\n    hiddenColumns: undefined,\n\n    /**\n     * The `hiddenRows` option configures the [`HiddenRows`](@/api/hiddenRows.md) plugin.\n     *\n     * You can set the `hiddenRows` option to one of the following:\n     *\n     * | Setting   | Description                                                                            |\n     * | --------- | -------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`HiddenRows`](@/api/hiddenRows.md) plugin                                 |\n     * | `true`    | Enable the [`HiddenRows`](@/api/hiddenRows.md) plugin with the default plugin options  |\n     * | An object | - Enable the [`HiddenRows`](@/api/hiddenRows.md) plugin<br>- Modify the plugin options |\n     *\n     * If you set the `hiddenRows` to an object, you can set the following [`HiddenRows`](@/api/hiddenRows.md) plugin options:\n     *\n     * | Property           | Possible values     | Description                                                                                                                                       |\n     * | ------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `rows   `          | An array of indexes | An array of indexes of rows that are hidden at initialization                                                                                     |\n     * | `copyPasteEnabled` | `true` \\| `false`   | `true`: when copying or pasting data, take hidden rows into account<br>`false`: when copying or pasting data, don't take hidden rows into account |\n     * | `indicators`       | `true` \\| `false`   | `true`: display UI markers to indicate the presence of hidden rows<br>`false`: display UI markers                                                 |\n     *\n     * Read more:\n     * - [Plugins: `HiddenRows`](@/api/hiddenRows.md)\n     * - [Row hiding](@/guides/rows/row-hiding/row-hiding.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category HiddenRows\n     *\n     * @example\n     * ```js\n     * // enable the `HiddenRows` plugin\n     * hiddenRows: true,\n     *\n     * // enable `HiddenRows` plugin, and modify the plugin options\n     * hiddenRows: {\n     *   // set rows that are hidden by default\n     *   rows: [5, 10, 15],\n     *   // when copying or pasting data, take hidden rows into account\n     *   copyPasteEnabled: true,\n     *   // show where hidden rows are\n     *   indicators: true\n     * }\n     * ```\n     */\n    hiddenRows: undefined,\n\n    /**\n     * The `invalidCellClassName` option lets you add a CSS class name to cells\n     * that were marked as `invalid` by the [cell validator](@/guides/cell-functions/cell-validator/cell-validator.md).\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htInvalid'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `highlight-error` CSS class name\n     * // to every `invalid` cell`\n     * invalidCellClassName: 'highlight-error',\n     * ```\n     */\n    invalidCellClassName: 'htInvalid',\n\n    /**\n     * The `imeFastEdit` option allows using the \"fast edit\" feature for the IME users. It's disabled by default\n     * because of its incompatibility with some of the accessibility features.\n     *\n     * Enabling this option can make a negative impact on how some screen readers handle reading the table cells.\n     *\n     * @since 14.0.0\n     * @memberof Options#\n     * @type {boolean}\n     * @category Core\n     */\n    imeFastEdit: false,\n\n    /**\n     * The `isEmptyCol` option lets you define your own custom method\n     * for checking if a column at a given visual index is empty.\n     *\n     * The `isEmptyCol` setting overwrites the built-in [`isEmptyCol`](@/api/core.md#isEmptyCol) method.\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @param {number} col Visual column index.\n     * @returns {boolean}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // overwrite the built-in `isEmptyCol` method\n     * isEmptyCol(visualColumnIndex) {\n     *    // your custom method\n     *    ...\n     * },\n     * ```\n     */\n    isEmptyCol(col) {\n      let row;\n      let rowLen;\n      let value;\n\n      for (row = 0, rowLen = this.countRows(); row < rowLen; row++) {\n        value = this.getDataAtCell(row, col);\n\n        if (isEmpty(value) === false) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * The `isEmptyRow` option lets you define your own custom method\n     * for checking if a row at a given visual index is empty.\n     *\n     * The `isEmptyRow` setting overwrites the built-in [`isEmptyRow`](@/api/core.md#isEmptyRow) method.\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @param {number} row Visual row index.\n     * @returns {boolean}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // overwrite the built-in `isEmptyRow` method\n     * isEmptyRow(visualRowIndex) {\n     *    // your custom method\n     *    ...\n     * },\n     * ```\n     */\n    isEmptyRow(row) {\n      let col;\n      let colLen;\n      let value;\n      let meta;\n\n      for (col = 0, colLen = this.countCols(); col < colLen; col++) {\n        value = this.getDataAtCell(row, col);\n\n        if (isEmpty(value) === false) {\n          if (typeof value === 'object') {\n            meta = this.getCellMeta(row, col);\n\n            return isObjectEqual(this.getSchema()[meta.prop], value);\n          }\n\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * @description\n     * The `label` option configures [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cells` labels.\n     *\n     * You can set the `label` option to an object with the following properties:\n     *\n     * | Property    | Possible values                   | Description                                                                                                                                                                                                             |\n     * | ----------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `position`  | `'after'` (default) \\| `'before'` | `'after'`: place the label to the right of the checkbox<br>`'before'`: place the label to the left of the checkbox                                                                                                      |\n     * | `value`     | A string \\| A function            | The label's text                                                                                                                                                                                                        |\n     * | `separated` | `false` (default) \\| `true`       | `false`: don't separate the label from the checkbox<br>`true`: separate the label from the checkbox                                                                                                                     |\n     * | `property`  | A string                          | - A [`data`](#data) object property name that's used as the label's text <br>- Works only when the [`data`](#data) option is set to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects) |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox labels](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md#checkbox-labels)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   type: 'checkbox',\n     *   // add 'My label:' after the checkbox\n     *   label: { position: 'after', value: 'My label: ', separated: true }\n     * }],\n     * ```\n     */\n    label: undefined,\n\n    /**\n     * The `language` option configures Handsontable's [language](@/guides/internationalization/language/language.md) settings.\n     *\n     * You can set the `language` option to one of the following:\n     *\n     * | Setting             | Description                 |\n     * | ------------------- | --------------------------- |\n     * | `'en-US'` (default) | English - United States     |\n     * | `'ar-AR'`           | Arabic - Global<br><br>To properly render this language, set the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) to RTL. |\n     * | `'cs-CZ'`           | Czech - Czech Republic      |\n     * | `'de-CH'`           | German - Switzerland        |\n     * | `'de-DE'`           | German - Germany            |\n     * | `'es-MX'`           | Spanish - Mexico            |\n     * | `'fr-FR'`           | French - France             |\n     * | `'hr-HR'`           | Croatian - Croatia          |\n     * | `'it-IT'`           | Italian - Italy             |\n     * | `'ja-JP'`           | Japanese - Japan            |\n     * | `'ko-KR'`           | Korean - Korea              |\n     * | `'lv-LV'`           | Latvian - Latvia            |\n     * | `'nb-NO'`           | Norwegian (Bokmål) - Norway |\n     * | `'nl-NL'`           | Dutch - Netherlands         |\n     * | `'pl-PL'`           | Polish - Poland             |\n     * | `'pt-BR'`           | Portuguese - Brazil         |\n     * | `'ru-RU'`           | Russian - Russia            |\n     * | `'sr-SP'`           | Serbian (Latin) - Serbia    |\n     * | `'zh-CN'`           | Chinese - China             |\n     * | `'zh-TW'`           | Chinese - Taiwan            |\n     *\n     * Read more:\n     * - [Language](@/guides/internationalization/language/language.md)\n     * - [`locale`](#locale)\n     * - [`layoutDirection`](#layoutdirection)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'en-US'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set Handsontable's language to Polish\n     * language: 'pl-PL',\n     * ```\n     */\n    language: 'en-US',\n\n    /**\n     * The `layoutDirection` option configures whether Handsontable renders from the left to the right, or from the right to the left.\n     *\n     * You can set the layout direction only at Handsontable's [initialization](@/guides/getting-started/installation/installation.md#initialize-handsontable). Any change of the `layoutDirection` option after the initialization (e.g. using the [`updateSettings()`](@/api/core.md#updatesettings) method) is ignored.\n     *\n     * You can set the `layoutDirection` option only [for the entire grid](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options).\n     * You can't set it for individual columns, rows, or cells.\n     *\n     * You can set the `layoutDirection` option to one of the following strings:\n     *\n     * | Setting             | Description                                                                                                                                                                                  |\n     * | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `inherit` (default) | Set Handsontable's layout direction automatically,<br>based on the value of your HTML document's [`dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) attribute  |\n     * | `rtl`               | Render Handsontable from the right to the left,<br>even when your HTML document's [`dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) attribute is set to `ltr` |\n     * | `ltr`               | Render Handsontable from the left to the right,<br>even when your HTML document's [`dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) attribute is set to `rtl` |\n     *\n     * Read more:\n     * - [Layout direction](@/guides/internationalization/layout-direction/layout-direction.md)\n     * - [Language](@/guides/internationalization/language/language.md)\n     * - [`language`](#language)\n     * - [`locale`](#locale)\n     * - [`fixedColumnsStart`](#fixedcolumnsstart)\n     * - [`customBorders`](#customBorders)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'inherit'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // inherit Handsontable's layout direction\n     * // from the value of your HTML document's `dir` attribute\n     * layoutDirection: 'inherit',\n     *\n     * // render Handsontable from the right to the left\n     * // regardless of your HTML document's `dir`\n     * layoutDirection: 'rtl',\n     *\n     * // render Handsontable from the left to the right\n     * // regardless of your HTML document's `dir`\n     * layoutDirection: 'ltr',\n     * ```\n     */\n    layoutDirection: 'inherit',\n\n    /**\n     * The `licenseKey` option sets your Handsontable license key.\n     *\n     * You can set the `licenseKey` option to one of the following:\n     *\n     * | Setting                                                                                                 | Description                                                                                       |\n     * | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |\n     * | A string with your [commercial license key](@/guides/getting-started/license-key/license-key.md#commercial-license) | For [commercial use](@/guides/technical-specification/software-license/software-license.md#commercial-use)         |\n     * | `'non-commercial-and-evaluation'`                                                                       | For [non-commercial use](@/guides/technical-specification/software-license/software-license.md#non-commercial-use) |\n     *\n     * Read more:\n     * - [License key](@/guides/getting-started/license-key/license-key.md)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // for commercial use\n     * licenseKey: 'xxxxx-xxxxx-xxxxx-xxxxx-xxxxx', // your commercial license key\n     *\n     * // for non-commercial use\n     * licenseKey: 'non-commercial-and-evaluation',\n     * ```\n     */\n    licenseKey: undefined,\n\n    /**\n     * The `locale` option configures Handsontable's [locale](@/guides/internationalization/locale/locale.md) settings.\n     *\n     * You can set the `locale` option to any valid and canonicalized Unicode BCP 47 locale tag,\n     * both for the [entire grid](@/guides/internationalization/locale/locale.md#set-the-grid-s-locale),\n     * and for [individual columns](@/guides/internationalization/locale/locale.md#set-a-column-s-locale).\n     *\n     * Read more:\n     * - [Locale](@/guides/internationalization/locale/locale.md)\n     * - [`language`](#language)\n     * - [`layoutDirection`](#layoutdirection)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'en-US'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the entire grid's locale to Polish\n     * locale: 'pl-PL',\n     *\n     * // set individual columns' locales\n     * columns: [\n     *   {\n     *     // set the first column's locale to Polish\n     *     locale: 'pl-PL',\n     *   },\n     *   {\n     *     // set the second column's locale to German\n     *     locale: 'de-DE',\n     *   },\n     * ],\n     * ```\n     */\n    locale: 'en-US',\n\n    /**\n     * The `manualColumnFreeze` option configures the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin.\n     *\n     * You can set the `manualColumnFreeze` option to one of the following:\n     *\n     * | Setting  | Description                                                            |\n     * | -------- | ---------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin  |\n     * | `false`  | Disable the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin |\n     *\n     * Read more:\n     * - [Column freezing](@/guides/columns/column-freezing/column-freezing.md#user-triggered-freeze)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category ManualColumnFreeze\n     *\n     * @example\n     * ```js\n     * // enable the `ManualColumnFreeze` plugin\n     * manualColumnFreeze: true,\n     * ```\n     */\n    manualColumnFreeze: undefined,\n\n    /**\n     * The `manualColumnMove` option configures the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin.\n     *\n     * You can set the `manualColumnMove` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                        |\n     * | -------- | ------------------------------------------------------------------------------------------------------------------ |\n     * | `true`   | Enable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin                                                  |\n     * | `false`  | Disable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin                                                 |\n     * | An array | - Enable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin<br>- Move individual columns at initialization |\n     *\n     * Read more:\n     * - [Column moving](@/guides/columns/column-moving/column-moving.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualColumnMove\n     *\n     * @example\n     * ```js\n     * // enable the `ManualColumnMove` plugin\n     * manualColumnMove: true,\n     *\n     * // enable the `ManualColumnMove` plugin\n     * // at initialization, move column 0 to 1\n     * // at initialization, move column 1 to 4\n     * // at initialization, move column 2 to 6\n     * manualColumnMove: [1, 4, 6],\n     * ```\n     */\n    manualColumnMove: undefined,\n\n    /**\n     * @description\n     * The `manualColumnResize` option configures the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin.\n     *\n     * You can set the `manualColumnResize` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                           |\n     * | -------- | --------------------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin                                                 |\n     * | `false`  | Disable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin                                                |\n     * | An array | - Enable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin<br>- Set initial widths of individual columns |\n     *\n     * Read more:\n     * - [Column width: Column stretching](@/guides/columns/column-width/column-width.md#column-stretching)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualColumnResize\n     *\n     * @example\n     * ```js\n     * // enable the `manualColumnResize` plugin\n     * manualColumnResize: true,\n     *\n     * // enable the `manualColumnResize` plugin\n     * // set the initial width of column 0 to 40 pixels\n     * // set the initial width of column 1 to 50 pixels\n     * // set the initial width of column 2 to 60 pixels\n     * manualColumnResize: [40, 50, 60],\n     * ```\n     */\n    manualColumnResize: undefined,\n\n    /**\n     * @description\n     * The `manualRowMove` option configures the [`ManualRowMove`](@/api/manualRowMove.md) plugin.\n     *\n     * You can set the `manualRowMove` option to one of the following:\n     *\n     * | Setting  | Description                                                                                               |\n     * | -------- | --------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualRowMove`](@/api/manualRowMove.md) plugin                                               |\n     * | `false`  | Disable the [`ManualRowMove`](@/api/manualRowMove.md) plugin                                              |\n     * | An array | - Enable the [`ManualRowMove`](@/api/manualRowMove.md) plugin<br>- Move individual rows at initialization |\n     *\n     * Read more:\n     * - [Row moving](@/guides/rows/row-moving/row-moving.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualRowMove\n     *\n     * @example\n     * ```js\n     * // enable the `ManualRowMove` plugin\n     * manualRowMove: true,\n     *\n     * // enable the `ManualRowMove` plugin\n     * // at initialization, move row 1 to 0\n     * // at initialization, move row 4 to 1\n     * // at initialization, move row 6 to 2\n     * manualRowMove: [1, 4, 6],\n     * ```\n     */\n    manualRowMove: undefined,\n\n    /**\n     * @description\n     * The `manualRowResize` option configures the [`ManualRowResize`](@/api/manualRowResize.md) plugin.\n     *\n     * You can set the `manualRowResize` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                   |\n     * | -------- | ------------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualRowResize`](@/api/manualRowResize.md) plugin                                               |\n     * | `false`  | Disable the [`ManualRowResize`](@/api/manualRowResize.md) plugin                                              |\n     * | An array | - Enable the [`ManualRowResize`](@/api/manualRowResize.md) plugin<br>- Set initial heights of individual rows |\n     *\n     * Read more:\n     * - [Row height: Adjust the row height manually](@/guides/rows/row-height/row-height.md#adjust-the-row-height-manually)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualRowResize\n     *\n     * @example\n     * ```js\n     * // enable the `ManualRowResize` plugin\n     * manualRowResize: true,\n     *\n     * // enable the `ManualRowResize` plugin\n     * // set the initial height of row 0 to 40 pixels\n     * // set the initial height of row 1 to 50 pixels\n     * // set the initial height of row 2 to 60 pixels\n     * manualRowResize: [40, 50, 60],\n     * ```\n     */\n    manualRowResize: undefined,\n\n    /**\n     * The `maxCols` option sets a maximum number of columns.\n     *\n     * The `maxCols` option is used:\n     * - At initialization: if the `maxCols` value is lower than the initial number of columns,\n     * Handsontable trims columns from the right.\n     * - At runtime: for example, when inserting columns.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default Infinity\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the maximum number of columns to 300\n     * maxCols: 300,\n     * ```\n     */\n    maxCols: Infinity,\n\n    /**\n     * The `maxRows` option sets a maximum number of rows.\n     *\n     * The `maxRows` option is used:\n     * - At initialization: if the `maxRows` value is lower than the initial number of rows,\n     * Handsontable trims rows from the bottom.\n     * - At runtime: for example, when inserting rows.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default Infinity\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the maximum number of rows to 300\n     * maxRows: 300,\n     * ```\n     */\n    maxRows: Infinity,\n\n    /**\n     * @description\n     * The `mergeCells` option configures the [`MergeCells`](@/api/mergeCells.md) plugin.\n     *\n     * You can set the `mergeCells` option to one of the following:\n     *\n     * | Setting             | Description                                                                                         |\n     * | ------------------- | --------------------------------------------------------------------------------------------------- |\n     * | `true`              | Enable the [`MergeCells`](@/api/mergeCells.md) plugin                                               |\n     * | `false`             | Disable the [`MergeCells`](@/api/mergeCells.md) plugin                                              |\n     * | An array of objects | - Enable the [`MergeCells`](@/api/mergeCells.md) plugin<br>- Merge specific cells at initialization |\n     *\n     * To merge specific cells at Handsontable's initialization,\n     * set the `mergeCells` option to an array of objects, with the following properties:\n     *\n     * | Property  | Description                                                |\n     * | --------- | ---------------------------------------------------------- |\n     * | `row`     | The row index of the merged section's beginning            |\n     * | `col`     | The column index of the merged section's beginning         |\n     * | `rowspan` | The width (as a number of rows) of the merged section      |\n     * | `colspan` | The height (as a number of columns ) of the merged section |\n     *\n     * Read more:\n     * - [Merge cells](@/guides/cell-features/merge-cells/merge-cells.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category MergeCells\n     *\n     * @example\n     * ```js\n     * // enable the `MergeCells` plugin\n     * mergeCells: true,\n     *\n     * // enable the `MergeCells` plugin\n     * // and merge specific cells at initialization\n     * mergeCells: [\n     *   // merge cells from cell (1,1) to cell (3,3)\n     *   {row: 1, col: 1, rowspan: 3, colspan: 3},\n     *   // merge cells from cell (3,4) to cell (2,2)\n     *   {row: 3, col: 4, rowspan: 2, colspan: 2},\n     *   // merge cells from cell (5,6) to cell (3,3)\n     *   {row: 5, col: 6, rowspan: 3, colspan: 3}\n     * ],\n     * ```\n     */\n    mergeCells: false,\n\n    /**\n     * The `minCols` option sets a minimum number of columns.\n     *\n     * The `minCols` option is used:\n     * - At initialization: if the `minCols` value is higher than the initial number of columns,\n     * Handsontable adds empty columns to the right.\n     * - At runtime: for example, when removing columns.\n     *\n     * The `minCols` option works only when your [`data`](#data) is an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).\n     * When your [`data`](#data) is an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects),\n     * you can only have as many columns as defined in:\n     * - The first data row\n     * - The [`dataSchema`](#dataSchema) option\n     * - The [`columns`](#columns) option\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the minimum number of columns to 10\n     * minCols: 10,\n     * ```\n     */\n    minCols: 0,\n\n    /**\n     * The `minRows` option sets a minimum number of rows.\n     *\n     * The `minRows` option is used:\n     * - At initialization: if the `minRows` value is higher than the initial number of rows,\n     * Handsontable adds empty rows at the bottom.\n     * - At runtime: for example, when removing rows.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the minimum number of rows to 10\n     * minRows: 10,\n     * ```\n     */\n    minRows: 0,\n\n    /**\n     * The `minSpareCols` option sets a minimum number of empty columns\n     * at the grid's right-hand end.\n     *\n     * If there already are other empty columns at the grid's right-hand end,\n     * they are counted into the `minSpareCols` value.\n     *\n     * The total number of columns can't exceed the [`maxCols`](#maxCols) value.\n     *\n     * The `minSpareCols` option works only when your [`data`](#data) is an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).\n     * When your [`data`](#data) is an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects),\n     * you can only have as many columns as defined in:\n     * - The first data row\n     * - The [`dataSchema`](#dataSchema) option\n     * - The [`columns`](#columns) option\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // at Handsontable's initialization, add at least 3 empty columns on the right\n     * minSpareCols: 3,\n     * ```\n     */\n    minSpareCols: 0,\n\n    /**\n     * The `minSpareRows` option sets a minimum number of empty rows\n     * at the bottom of the grid.\n     *\n     * If there already are other empty rows at the bottom,\n     * they are counted into the `minSpareRows` value.\n     *\n     * The total number of rows can't exceed the [`maxRows`](#maxRows) value.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // at Handsontable's initialization, add at least 3 empty rows at the bottom\n     * minSpareRows: 3,\n     * ```\n     */\n    minSpareRows: 0,\n\n    /**\n     * @description\n     * The `multiColumnSorting` option configures the [`MultiColumnSorting`](@/api/columnSorting.md) plugin.\n     *\n     * You can set the `multiColumnSorting` option to one of the following:\n     *\n     * | Setting    | Description                                                                                                                                                |\n     * | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`     | Enable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin with the default configuration                                                       |\n     * | `false`    | Disable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin                                                                                     |\n     * | An object  | - Enable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin<br>- Modify the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin options |\n     *\n     * If you set the `multiColumnSorting` option to an object,\n     * you can set the following [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin options:\n     *\n     * | Option                   | Possible settings                                                                                                                                |\n     * | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `indicator`              | `true`: Display the arrow icon in the column header, to indicate a sortable column<br>`false`: Don't display the arrow icon in the column header |\n     * | `headerAction`           | `true`: Enable clicking on the column header to sort the column<br>`false`: Disable clicking on the column header to sort the column             |\n     * | `sortEmptyCells`         | `true`: Sort empty cells as well<br>`false`: Place empty cells at the end                                                                        |\n     * | `compareFunctionFactory` | A [custom compare function](@/guides/rows/rows-sorting/rows-sorting.md#add-a-custom-comparator)                                                               |\n     *\n     * If you set the `multiColumnSorting` option to an object,\n     * you can also sort individual columns at Handsontable's initialization.\n     * In the `multiColumnSorting` object, add an object named `initialConfig`,\n     * with the following properties:\n     *\n     * | Option      | Possible settings   | Description                                                      |\n     * | ----------- | ------------------- | ---------------------------------------------------------------- |\n     * | `column`    | A number            | The index of the column that you want to sort at initialization  |\n     * | `sortOrder` | `'asc'` \\| `'desc'` | The sorting order:<br>`'asc'`: ascending<br>`'desc'`: descending |\n     *\n     * Read more:\n     * - [Rows sorting](@/guides/rows/rows-sorting/rows-sorting.md)\n     * - [`columnSorting`](#columnSorting)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category MultiColumnSorting\n     *\n     * @example\n     * ```js\n     * // enable the `MultiColumnSorting` plugin\n     * multiColumnSorting: true\n     *\n     * // enable the `MultiColumnSorting` plugin with custom configuration\n     * multiColumnSorting: {\n     *   // sort empty cells as well\n     *   sortEmptyCells: true,\n     *   // display the arrow icon in the column header\n     *   indicator: true,\n     *   // disable clicking on the column header to sort the column\n     *   headerAction: false,\n     *   // add a custom compare function\n     *   compareFunctionFactory(sortOrder, columnMeta) {\n     *     return function(value, nextValue) {\n     *       // some value comparisons which will return -1, 0 or 1...\n     *     }\n     *   }\n     * }\n     *\n     * // enable the `MultiColumnSorting` plugin\n     * multiColumnSorting: {\n     *   // at initialization, sort column 1 in ascending order\n     *   initialConfig: {\n     *     column: 1,\n     *     sortOrder: 'asc'\n     *   },\n     *   // at initialization, sort column 2 in descending order\n     *   initialConfig: {\n     *     column: 2,\n     *     sortOrder: 'desc'\n     *   }\n     * }\n     * ```\n     */\n    multiColumnSorting: undefined,\n\n    /**\n     * When set to `true`, the `navigableHeaders` option lets you navigate [row headers](@/guides/rows/row-header/row-header.md) and [column headers](@/guides/columns/column-header/column-header.md), using the arrow keys or the <kbd>**Tab**</kbd> key (if the [`tabNavigation`](#tabNavigation) option is set to `true`).\n     *\n     * @since 14.0.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // you can navigate row and column headers with the keyboard\n     * navigableHeaders: true,\n     *\n     * // default behavior: you can't navigate row and column headers with the keyboard\n     * navigableHeaders: false,\n     * ```\n     */\n    navigableHeaders: false,\n\n    /**\n     * When set to `false`, the `tabNavigation` option changes the behavior of the\n     * <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts. The Handsontable\n     * no more captures that shortcuts to make the grid navigation available (`tabNavigation: true`)\n     * but returns control to the browser so the native page navigation is possible.\n     *\n     * @since 14.0.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // you can't navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts\n     * tabNavigation: false,\n     *\n     * // default behavior: you can navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts\n     * tabNavigation: true,\n     * ```\n     */\n    tabNavigation: true,\n\n    /**\n     * @description\n     * The `nestedHeaders` option configures the [`NestedHeaders`](@/api/nestedHeaders.md) plugin.\n     *\n     * You can set the `nestedHeaders` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                           |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Disable the [`NestedHeaders`](@/api/nestedHeaders.md) plugin                                                                          |\n     * | `true`            | - Enable the [`NestedHeaders`](@/api/nestedHeaders.md) plugin<br>- Don't configure any nested headers                                 |\n     * | Array of arrays   | - Enable the [`NestedHeaders`](@/api/nestedHeaders.md) plugin<br>- Configure headers that are nested on Handsontable's initialization |\n     *\n     * If you set the `nestedHeaders` option to an array of arrays, each array configures one set of nested headers.\n     *\n     * Each array element configures one header, and can be one of the following:\n     *\n     * | Array element | Description                                                                                  |\n     * | ------------- | -------------------------------------------------------------------------------------------- |\n     * | A string      | The header's label                                                                           |\n     * | An object     | Properties:<br>`label` (string): the header's label<br>`colspan` (integer): the column width |\n     *\n     * Read more:\n     * - [Plugins: `NestedHeaders`](@/api/nestedHeaders.md)\n     * - [Column groups: Nested headers](@/guides/columns/column-groups/column-groups.md#nested-headers)\n     *\n     * @memberof Options#\n     * @type {boolean|Array[]}\n     * @default undefined\n     * @category NestedHeaders\n     *\n     * @example\n     * ```js\n     * nestedHeaders: [\n     *   ['A', {label: 'B', colspan: 8}, 'C'],\n     *   ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n     *   ['H', 'I', 'J', 'K', 'L', 'M', 'N', 'R', 'S', 'T']\n     * ],\n     * ```\n     */\n    nestedHeaders: undefined,\n\n    /**\n     * @description\n     * The `nestedRows` option configures the [`NestedRows`](@/api/nestedRows.md) plugin.\n     *\n     * You can set the `nestedRows` option to one of the following:\n     *\n     * | Setting           | Description                                            |\n     * | ----------------- | ------------------------------------------------------ |\n     * | `false` (default) | Disable the [`NestedRows`](@/api/nestedRows.md) plugin |\n     * | `true`            | Enable the [`NestedRows`](@/api/nestedRows.md) plugin  |\n     *\n     * Read more:\n     * - [Plugins: `NestedRows`](@/guides/rows/row-parent-child/row-parent-child.md)\n     *\n     * @example\n     * ```js\n     * // enable the `NestedRows` plugin\n     * nestedRows: true,\n     * ```\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category NestedRows\n     */\n    nestedRows: undefined,\n\n    /**\n     * The `noWordWrapClassName` option lets you add a CSS class name\n     * to each cell that has the [`wordWrap`](#wordWrap) option set to `false`.\n     *\n     * Read more:\n     * - [`wordWrap`](#wordWrap)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htNoWrap'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `is-noWrapCell` CSS class name\n     * // to each cell that doesn't wrap content\n     * noWordWrapClassName: 'is-noWrapCell',\n     * ```\n     */\n    noWordWrapClassName: 'htNoWrap',\n\n    /**\n     * The `numericFormat` option configures the number format and the currency format\n     * of [`numeric`](@/guides/cell-types/numeric-cell-type/numeric-cell-type.md) cells` displayed output\n     * in the numeric cell renderer.\n     *\n     * You can set the `numericFormat` option to an object with the following properties:\n     *\n     * | Property    | Possible values                                                               | Description     |\n     * | ----------- | ----------------------------------------------------------------------------- | --------------- |\n     * | `pattern`   | All [`numbro.js` number formats](https://numbrojs.com/format.html#numbers)    | Number format   |\n     * | `culture`   | All [`numbro.js` currency formats](https://numbrojs.com/format.html#currency) | Currency format |\n     *\n     * The `numericFormat` option as no effect on the numeric cell editor.\n     *\n     * In the source data, numeric data is stored as JavaScript numbers.\n     *\n     * Read more:\n     * - [Numeric cell type](@/guides/cell-types/numeric-cell-type/numeric-cell-type.md)\n     * - [Third-party licenses](@/guides/technical-specification/third-party-licenses/third-party-licenses.md)\n     *\n     * @memberof Options#\n     * @since 0.35.0\n     * @type {object}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `numeric`\n     *     type: 'numeric',\n     *     // set the `numericFormat` option for every `numeric` cell of this column\n     *     numericFormat: {\n     *       // set the number format\n     *       pattern: '0,00',\n     *       // set the currency format\n     *       culture: 'en-US'\n     *     }\n     *   }\n     * ],\n     * ```\n     */\n    numericFormat: undefined,\n\n    /**\n     * If the `observeDOMVisibility` option is set to `true`,\n     * Handsontable rerenders every time it detects that the grid was made visible in the DOM.\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't rerender the grid on visibility changes\n     * observeDOMVisibility: false,\n     * ```\n     */\n    observeDOMVisibility: true,\n\n    /**\n     * The `outsideClickDeselects` option determines what happens to the current [selection](@/guides/cell-features/selection/selection.md)\n     * when you click outside of the grid.\n     *\n     * You can set the `outsideClickDeselects` option to one of the following:\n     *\n     * | Setting          | Description                                                                                              |\n     * | ---------------- | -------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | On a mouse click outside of the grid, clear the current [selection](@/guides/cell-features/selection/selection.md) |\n     * | `false`          | On a mouse click outside of the grid, keep the current [selection](@/guides/cell-features/selection/selection.md)  |\n     * | A function       | A function that takes the click event target and returns a boolean                                       |\n     *\n     * @memberof Options#\n     * @type {boolean|Function}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on a mouse click outside of the grid, clear the current selection\n     * outsideClickDeselects: true,\n     *\n     * // on a mouse click outside of the grid, keep the current selection\n     * outsideClickDeselects: false,\n     *\n     * // take the click event target and return `false`\n     * outsideClickDeselects(event) {\n     *   return false;\n     * }\n     *\n     * // take the click event target and return `true`\n     * outsideClickDeselects(event) {\n     *   return false;\n     * }\n     * ```\n     */\n    outsideClickDeselects: true,\n\n    /**\n     * @description\n     * The `persistentState` option configures the [`PersistentState`](@/api/persistentState.md) plugin.\n     *\n     * You can set the `persistentState` to one of the following:\n     *\n     * | Setting           | Description                                                      |\n     * | ----------------- | ---------------------------------------------------------------- |\n     * | `false` (default) | Disable the [`PersistentState`](@/api/persistentState.md) plugin |\n     * | `true`            | Enable the [`PersistentState`](@/api/persistentState.md) plugin  |\n     *\n     * Read more:\n     * - [Saving data: Saving data locally](@/guides/getting-started/saving-data/saving-data.md#save-data-locally)\n     * - [Plugins: `PersistentState`](@/api/persistentState.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category PersistentState\n     *\n     * @example\n     * ```js\n     * // enable the `PersistentState` plugin\n     * persistentState: true,\n     * ```\n     */\n    persistentState: undefined,\n\n    /**\n     * The `placeholder` option lets you display placeholder text in every empty cell.\n     *\n     * You can set the `placeholder` option to one of the following:\n     *\n     * | Setting            | Example        | Description                                                           |\n     * | ------------------ | -------------- | --------------------------------------------------------------------- |\n     * | A non-empty string | `'Empty cell'` | Display `Empty cell` text in empty cells                              |\n     * | A non-string value | `000`          | Display `000` text in empty cells (non-string values get stringified) |\n     *\n     * Read more:\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // display 'Empty cell' text\n     * // in every empty cell of the entire grid\n     * placeholder: 'Empty cell',\n     *\n     * // or\n     * columns: [\n     *   {\n     *     data: 'date',\n     *     dateFormat: 'DD/MM/YYYY',\n     *     // display 'Empty date cell' text\n     *     // in every empty cell of the `date` column\n     *     placeholder: 'Empty date cell'\n     *   }\n     * ],\n     * ```\n     */\n    placeholder: undefined,\n\n    /**\n     * The `placeholderCellClassName` option lets you add a CSS class name to cells\n     * that contain [`placeholder`](#placeholder) text.\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [`placeholder`](#placeholder)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htPlaceholder'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `has-placeholder` CSS class name\n     * // to each cell that contains `placeholder` text\n     * placeholderCellClassName: 'has-placeholder',\n     * ```\n     */\n    placeholderCellClassName: 'htPlaceholder',\n\n    /**\n     * The `preventOverflow` option configures preventing Handsontable\n     * from overflowing outside of its parent element.\n     *\n     * You can set the `preventOverflow` option to one of the following:\n     *\n     * | Setting           | Description                      |\n     * | ----------------- | -------------------------------- |\n     * | `false` (default) | Don't prevent overflowing        |\n     * | `'horizontal'`      | Prevent horizontal overflowing |\n     * | `'vertical'`        | Prevent vertical overflowing   |\n     *\n     * @memberof Options#\n     * @type {string|boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // prevent horizontal overflowing\n     * preventOverflow: 'horizontal',\n     * ```\n     */\n    preventOverflow: false,\n\n    /**\n     * The `preventWheel` option configures preventing the `wheel` event's default action\n     * on overlays.\n     *\n     * You can set the `preventWheel` option to one of the following:\n     *\n     * | Setting           | Description                                      |\n     * | ----------------- | ------------------------------------------------ |\n     * | `false` (default) | Don't prevent the `wheel` event's default action |\n     * | `true`            | Prevent the `wheel` event's default action       |\n     *\n     * @memberof Options#\n     * @private\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't prevent the `wheel` event's default action\n     * preventWheel: false,\n     * ```\n     */\n    preventWheel: false,\n\n    /**\n     * @description\n     * The `readOnly` option determines whether a [cell](@/guides/cell-features/disabled-cells/disabled-cells.md#read-only-specific-cells),\n     * [comment](@/guides/cell-features/comments/comments.md#make-a-comment-read-only), [column](@/guides/cell-features/disabled-cells/disabled-cells.md#read-only-columns)\n     * or the [entire grid](@/guides/cell-features/disabled-cells/disabled-cells.md#read-only-grid) is editable or not. You can configure it as follows:\n     *\n     * | Setting           | Description                                                                                                                |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Set as editable                                                                                                           |\n     * | `true`            | - Set as read-only<br>- Add the [`readOnlyCellClassName`](#readOnlyCellClassName) CSS class name (by default: `htDimmed`) |\n     *\n     * `readOnly` cells can't be changed by the [`populateFromArray()`](@/api/core.md#populatefromarray) method.\n     *\n     * Read more:\n     * - [Disabled cells](@/guides/cell-features/disabled-cells/disabled-cells.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // make the entire grid read-only\n     * const configurationOptions = {\n     *   columnSorting: true,\n     * };\n     *\n     * // make the third column read-only\n     * const configurationOptions = {\n     *   columns: [\n     *     {},\n     *     {},\n     *     {\n     *       readOnly: true,\n     *     },\n     *   ],\n     * };\n     *\n     * // make a specific cell read-only\n     * const configurationOptions = {\n     *   cell: [\n     *     {\n     *       row: 0,\n     *       col: 0,\n     *       readOnly: true,\n     *     },\n     * };\n     * ```\n     */\n    readOnly: false,\n\n    /**\n     * The `readOnlyCellClassName` option lets you add a CSS class name to [read-only](#readOnly) cells.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`TableClassName`](#TableClassName)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htDimmed'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `is-readOnly` CSS class name\n     * // to every read-only cell\n     * readOnlyCellClassName: 'is-readOnly',\n     * ```\n     */\n    readOnlyCellClassName: 'htDimmed',\n\n    /**\n     * The `renderAllRows` option controls Handsontable's [row virtualization](@/guides/rows/row-virtualization/row-virtualization.md).\n     * You can configure it as follows:\n     *\n     * | Setting           | Description                                                                                                                                                                                     |\n     * | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable [row virtualization](@/guides/rows/row-virtualization/row-virtualization.md), rendering only the visible rows for optimal performance with large datasets.                                                  |\n     * | `true`            | Disable [row virtualization](@/guides/rows/row-virtualization/row-virtualization.md)<br>(render all rows of the grid), rendering all rows in the dataset for consistent rendering and screen reader accessibility. |\n     *\n     * Setting `renderAllRows` to `true` overwrites the [`viewportRowRenderingOffset`](#viewportRowRenderingOffset) setting.\n     *\n     * Read more:\n     * - [Row virtualization](@/guides/rows/row-virtualization/row-virtualization.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // disable row virtualization\n     * renderAllRows: true,\n     * ```\n     */\n    renderAllRows: false,\n\n    /**\n     * The `renderAllColumns` option configures Handsontable's [column virtualization](@/guides/columns/column-virtualization/column-virtualization.md).\n     *\n     * You can set the `renderAllColumns` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                                                                                                                      |\n     * | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable [column virtualization](@/guides/columns/column-virtualization/column-virtualization.md), rendering only visible columns for better performance with many columns.                                                                              |\n     * | `true`            | Disable [column virtualization](@/guides/columns/column-virtualization/column-virtualization.md)<br>(render all columns of the grid), rendering all columns in the dataset, and ensuring all columns are available regardless of horizontal scrolling. |\n     *\n     * Setting `renderAllColumns` to `true` overwrites the [`viewportColumnRenderingOffset`](#viewportColumnRenderingOffset) setting.\n     *\n     * Read more:\n     * - [Column virtualization](@/guides/columns/column-virtualization/column-virtualization.md)\n     *\n     * @since 14.1.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // disable column virtualization\n     * renderAllColumns: true,\n     * ```\n     */\n    renderAllColumns: false,\n\n    /**\n     * @description\n     * The `renderer` option sets a [cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md) for a cell.\n     *\n     * You can set the `renderer` option to one of the following:\n     * - A custom renderer function\n     * - One of the following [cell renderer aliases](@/guides/cell-functions/cell-renderer/cell-renderer.md):\n     *\n     * | Alias               | Cell renderer function                                                         |\n     * | ------------------- | ------------------------------------------------------------------------------ |\n     * | A custom alias      | Your [custom cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md) function |\n     * | `'autocomplete'`    | `AutocompleteRenderer`                                                         |\n     * | `'base'`            | `BaseRenderer`                                                                 |\n     * | `'checkbox'`        | `CheckboxRenderer`                                                             |\n     * | `'date'`            | `DateRenderer`                                                                 |\n     * | `'dropdown'`        | `DropdownRenderer`                                                             |\n     * | `'html'`            | `HtmlRenderer`                                                                 |\n     * | `'numeric'`         | `NumericRenderer`                                                              |\n     * | `'password'`        | `PasswordRenderer`                                                             |\n     * | `'text'`            | `TextRenderer`                                                                 |\n     * | `'time'`            | `TimeRenderer`                                                                 |\n     *\n     * To set the [`renderer`](#renderer), [`editor`](#editor), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md)\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // use the `numeric` renderer for each cell of the entire grid\n     * renderer: `'numeric'`,\n     *\n     * // add a custom renderer function\n     * renderer(hotInstance, td, row, column, prop, value, cellProperties) {\n     *   // your custom renderer's logic\n     *   ...\n     * }\n     *\n     * // apply the `renderer` option to individual columns\n     * columns: [\n     *   {\n     *     // use the `autocomplete` renderer for each cell of this column\n     *     renderer: 'autocomplete'\n     *   },\n     *   {\n     *     // use the `myCustomRenderer` renderer for each cell of this column\n     *     renderer: 'myCustomRenderer'\n     *   }\n     * ]\n     * ```\n     */\n    renderer: undefined,\n\n    /**\n     * The `rowHeaders` option configures your grid's row headers.\n     *\n     * You can set the `rowHeaders` option to one of the following:\n     *\n     * | Setting    | Description                                                       |\n     * | ---------- | ----------------------------------------------------------------- |\n     * | `true`     | Enable the default row headers ('1', '2', '3', ...)               |\n     * | `false`    | Disable row headers                                               |\n     * | An array   | Define your own row headers (e.g. `['One', 'Two', 'Three', ...]`) |\n     * | A function | Define your own row headers, using a function                     |\n     *\n     * Read more:\n     * - [Row header](@/guides/rows/row-header/row-header.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable the default row headers\n     * rowHeaders: true,\n     *\n     * // set your own row headers\n     * rowHeaders: ['One', 'Two', 'Three'],\n     *\n     * // set your own row headers, using a function\n     * rowHeaders: function(visualRowIndex) {\n     *   return `${visualRowIndex}: AB`;\n     * },\n     * ```\n     */\n    rowHeaders: undefined,\n\n    /**\n     * @description\n     * The `rowHeaderWidth` option configures the width of row headers.\n     *\n     * You can set the `rowHeaderWidth` option to one of the following:\n     *\n     * | Setting  | Description                                     |\n     * | -------- | ----------------------------------------------- |\n     * | A number | Set the same width for every row header         |\n     * | An array | Set different widths for individual row headers |\n     *\n     * @memberof Options#\n     * @type {number|number[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the same width for every row header\n     * rowHeaderWidth: 25,\n     *\n     * // set different widths for individual row headers\n     * rowHeaderWidth: [25, 30, 55],\n     * ```\n     */\n    rowHeaderWidth: undefined,\n\n    /**\n     * The `rowHeights` option sets rows' heights, in pixels.\n     *\n     * In the rendering process, the default row height is 23 px (22 px + 1 px of the row's bottom border).\n     * You can change it to equal or greater than 23px, by setting the `rowHeights` option to one of the following:\n     *\n     * | Setting     | Description                                                                                         | Example                                                      |\n     * | ----------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |\n     * | A number    | Set the same height for every row                                                                   | `rowHeights: 100`                                            |\n     * | A string    | Set the same height for every row                                                                   | `rowHeights: '100px'`                                        |\n     * | An array    | Set heights separately for each row                                                                 | `rowHeights: [100, 120, undefined]`                          |\n     * | A function  | Set row heights dynamically,<br>on each render                                                      | `rowHeights(visualRowIndex) { return visualRowIndex * 10; }` |\n     * | `undefined` | Used by the [modifyRowHeight](@/api/hooks.md#modifyRowHeight) hook,<br>to detect row height changes | `rowHeights: undefined`                                      |\n     *\n     * The `rowHeights` option also sets the minimum row height that can be set\n     * via the {@link ManualRowResize} and {@link AutoRowSize} plugins (if they are enabled).\n     *\n     * Read more:\n     * - [Row height](@/guides/rows/row-height/row-height.md)\n     *\n     * @memberof Options#\n     * @type {number|number[]|string|string[]|Array<undefined>|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set every row's height to 100px\n     * rowHeights: 100,\n     *\n     * // set every row's height to 100px\n     * rowHeights: '100px',\n     *\n     * // set the first (by visual index) row's height to 100\n     * // set the second (by visual index) row's height to 120\n     * // set the third (by visual index) row's height to `undefined`\n     * // set any other row's height to the default 23px\n     * rowHeights: [100, 120, undefined],\n     *\n     * // set each row's height individually, using a function\n     * rowHeights(visualRowIndex) {\n     *   return visualRowIndex * 10;\n     * },\n     * ```\n     */\n    rowHeights: undefined,\n\n    /**\n     * @description\n     * The `search` option configures the [`Search`](@/api/search.md) plugin.\n     *\n     * You can set the `search` option to one of the following:\n     *\n     * | Setting           | Description                                                                          |\n     * | ----------------- | ------------------------------------------------------------------------------------ |\n     * | `false` (default) | Disable the [`Search`](@/api/search.md) plugin                                       |\n     * | `true`            | Enable the [`Search`](@/api/search.md) plugin with the default configuration         |\n     * | An object         | - Enable the [`Search`](@/api/search.md) plugin<br>- Apply your custom configuration |\n     *\n     * If you set the `search` option to an object, you can configure the following search options:\n     *\n     * | Option              | Possible settings | Description                                                                                          |\n     * | ------------------- | ----------------- | ---------------------------------------------------------------------------------------------------- |\n     * | `searchResultClass` | A string          | Add a custom CSS class name to search results                                                        |\n     * | `queryMethod`       | A function        | Add a [custom query method](@/guides/navigation/searching-values/searching-values.md#custom-query-method)  |\n     * | `callback`          | A function        | Add a [custom callback function](@/guides/navigation/searching-values/searching-values.md#custom-callback) |\n     *\n     * Read more:\n     * - [Searching values](@/guides/navigation/searching-values/searching-values.md)\n     * - [Searching values: Custom query method](@/guides/navigation/searching-values/searching-values.md#custom-query-method)\n     * - [Searching values: Custom callback](@/guides/navigation/searching-values/searching-values.md#custom-callback)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default false\n     * @category Search\n     *\n     * @example\n     * ```js\n     * // enable the `Search` plugin with the default configuration\n     * search: true,\n     *\n     * // enable the `Search` plugin with a custom configuration\n     * search: {\n     *   // add a `customClass` CSS class name to search results\n     *   searchResultClass: 'customClass',\n     *   // add a custom query method\n     *   queryMethod(queryStr, value) {\n     *     ...\n     *   },\n     *   // add a custom callback function\n     *   callback(instance, row, column, value, result) {\n     *     ...\n     *   }\n     * }\n     * ```\n     */\n    search: false,\n\n    /**\n     * @description\n     * The `selectionMode` option configures how [selection](@/guides/cell-features/selection/selection.md) works.\n     *\n     * You can set the `selectionMode` option to one of the following:\n     *\n     * | Setting      | Description                                                  |\n     * | ------------ | ------------------------------------------------------------ |\n     * | `'single'`   | Allow the user to select only one cell at a time.            |\n     * | `'range'`    | Allow the user to select one range of cells at a time.       |\n     * | `'multiple'` | Allow the user to select multiple ranges of cells at a time. |\n     *\n     * Read more:\n     * - [Selection: Selecting ranges](@/guides/cell-features/selection/selection.md#select-ranges)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'multiple'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // you can only select one cell at at a time\n     * selectionMode: 'single',\n     *\n     * // you can select one range of cells at a time\n     * selectionMode: 'range',\n     *\n     * // you can select multiple ranges of cells at a time\n     * selectionMode: 'multiple',\n     * ```\n     */\n    selectionMode: 'multiple',\n\n    /**\n     * The `selectOptions` option configures options that the end user can choose from in [`select`](@/guides/cell-types/select-cell-type/select-cell-type.md) cells.\n     *\n     * You can set the `selectOptions` option to one of the following:\n     *\n     * | Setting                         | Description                                                                   |\n     * | ------------------------------- | ----------------------------------------------------------------------------- |\n     * | An array of strings             | Each string is one option's value and label                                   |\n     * | An object with key-string pairs | - Each key is one option's value<br>- The key's string is that option's label |\n     * | A function                      | A function that returns an object with key-string pairs                       |\n     *\n     * Read more:\n     * - [Select cell type](@/guides/cell-types/select-cell-type/select-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {string[]|object|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `select`\n     *     type: 'select',\n     *     // set the first option's value and label to `A`\n     *     // set the second option's value and label to `B`\n     *     // set the third option's value and label to `C`\n     *     selectOptions: ['A', 'B', 'C'],\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `select`\n     *     type: 'select',\n     *     selectOptions: {\n     *       // set the first option's value to `value1` and label to `Label 1`\n     *       value1: 'Label 1',\n     *       // set the second option's value to `value2` and label to `Label 2`\n     *       value2: 'Label 2',\n     *       // set the third option's value to `value3` and label to `Label 3`\n     *       value3: 'Label 3',\n     *     },\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `select`\n     *     type: 'select',\n     *     // set `selectOption` to a function that returns available options as an object\n     *     selectOptions(visualRow, visualColumn, prop) {\n     *       return {\n     *         value1: 'Label 1',\n     *         value2: 'Label 2',\n     *         value3: 'Label 3',\n     *       };\n     *   },\n     * ],\n     * ```\n     */\n    selectOptions: undefined,\n\n    /**\n     * @description\n     * The `skipColumnOnPaste` option determines whether you can paste data into a given column.\n     *\n     * You can only apply the `skipColumnOnPaste` option to an entire column, using the [`columns`](#columns) option.\n     *\n     * You can set the `skipColumnOnPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                                           |\n     * | ----------------- | ----------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable pasting data into this column                                                                  |\n     * | `true`            | - Disable pasting data into this column<br>- On pasting, paste data into the next column to the right |\n     *\n     * Read more:\n     * - [Configuration options: Setting column options](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // disable pasting data into this column\n     *     skipColumnOnPaste: true\n     *   }\n     * ],\n     * ```\n     */\n    skipColumnOnPaste: false,\n\n    /**\n     * @description\n     *\n     * The `skipRowOnPaste` option determines whether you can paste data into a given row.\n     *\n     * You can only apply the `skipRowOnPaste` option to an entire row, using the [`cells`](#cells) option.\n     *\n     * You can set the `skipRowOnPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                         |\n     * | ----------------- | ----------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable pasting data into this row                                                   |\n     * | `true`            | - Disable pasting data into this row<br>- On pasting, paste data into the row below |\n     *\n     * Read more:\n     * - [Configuration options: Setting row options](@/guides/getting-started/configuration-options/configuration-options.md#set-row-options)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * cells(row, column) {\n     *  const cellProperties = {};\n     *\n     *  // disable pasting data into row 1\n     *  if (row === 1) {\n     *    cellProperties.skipRowOnPaste = true;\n     *  }\n     *\n     *  return cellProperties;\n     * }\n     * ```\n     */\n    skipRowOnPaste: false,\n\n    /**\n     * The `sortByRelevance` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells'\n     * lists are sorted in the same order as provided in the [`source`](#source) option.\n     *\n     * You can set the `sortByRelevance` option to one of the following:\n     *\n     * | Setting          | Description                                                                  |\n     * | ---------------- | ---------------------------------------------------------------------------- |\n     * | `true` (default) | Sort options in the same order as provided in the [`source`](#source) option |\n     * | `false`          | Sort options alphabetically                                                  |\n     *\n     * Read more:\n     * - [`source`](#source)\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['D', 'C', 'B', 'A'],\n     *   // sort the `autocomplete` option in this order: D, C, B, A\n     *   sortByRelevance: true\n     * }],\n     * ```\n     */\n    sortByRelevance: true,\n\n    /**\n     * The `source` option sets options available in [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) cells.\n     *\n     * You can set the `source` option to one of the following:\n     *\n     * - An array\n     * - A function\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     * - [`strict`](#strict)\n     * - [`allowHtml`](#allowHtml)\n     * - [`filter`](#filter)\n     * - [`sortByRelevance`](#sortByRelevance)\n     *\n     * @memberof Options#\n     * @type {Array|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set `source` to an array\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C', 'D']\n     * }],\n     *\n     * // set `source` to a function\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // for every `autocomplete` cell in this column, fetch data from an external source\n     *   source(query, callback) {\n     *     fetch('https://example.com/query?q=' + query, function(response) {\n     *       callback(response.items);\n     *     })\n     *   }\n     * }],\n     * ```\n     */\n    source: undefined,\n\n    /**\n     * @description\n     * If the [`data`](#data) option is not set, the `startCols` option sets the initial number of empty columns.\n     *\n     * The `startCols` option works only in Handsontable's constructor.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 5\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // start with 15 empty columns\n     * startCols: 15,\n     * ```\n     */\n    startCols: 5,\n\n    /**\n     * @description\n     * If the [`data`](#data) option is not set, the `startRows` option sets the initial number of empty rows.\n     *\n     * The `startRows` option works only in Handsontable's constructor.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 5\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // start with 15 empty rows\n     * startRows: 15,\n     * ```\n     */\n    startRows: 5,\n\n    /**\n     * @description\n     * The `stretchH` option determines what happens when the declared grid width\n     * is different from the calculated sum of all column widths.\n     *\n     * You can set the `stretchH` option to one of the following:\n     *\n     * | Setting            | Description                                                       |\n     * | ------------------ | ----------------------------------------------------------------- |\n     * | `'none'` (default) | Don't fit the grid to the container (disable column stretching)   |\n     * | `'last'`           | Fit the grid to the container, by stretching only the last column |\n     * | `'all'`            | Fit the grid to the container, by stretching all columns evenly   |\n     *\n     * Read more:\n     * - [Column width: Column stretching](@/guides/columns/column-width/column-width.md#column-stretching)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'none'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // fit the grid to the container\n     * // by stretching all columns evenly\n     * stretchH: 'all',\n     * ```\n     */\n    stretchH: 'none',\n\n    /**\n     * The `strict` option configures the behavior of [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells.\n     *\n     * You can set the `strict` option to one of the following:\n     *\n     * | Setting | Mode                                                                                          | Description                                                                                |\n     * | ------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |\n     * | `true`  | [Strict mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-strict-mode)         | The end user:<br>- Can only choose one of suggested values<br>- Can't enter a custom value |\n     * | `false` | [Flexible mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-flexible-mode)     | The end user:<br>- Can choose one of suggested values<br>- Can enter a custom value        |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C'],\n     *   // values entered must match `A`, `B`, or `C`\n     *   strict: true\n     *   },\n     * ],\n     * ```\n     */\n    strict: undefined,\n\n    /**\n     * The `tableClassName` option lets you add CSS class names\n     * to every Handsontable instance inside the `container` element.\n     *\n     * You can set the `tableClassName` option to one of the following:\n     *\n     * | Setting             | Description                                                                                |\n     * | ------------------- | ------------------------------------------------------------------------------------------ |\n     * | A string            | Add a single CSS class name to every Handsontable instance inside the `container` element  |\n     * | An array of strings | Add multiple CSS class names to every Handsontable instance inside the `container` element |\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string|string[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every Handsontable instance inside the `container` element\n     * tableClassName: 'your-class-name',\n     *\n     * // add `first-class-name` and `second-class-name` CSS class names\n     * // to every Handsontable instance inside the `container` element\n     * tableClassName: ['first-class-name', 'second-class-name'],\n     * ```\n     */\n    tableClassName: undefined,\n\n    /**\n     * The `tabMoves` option configures the action of the <kbd>**Tab**</kbd> key.\n     *\n     * You can set the `tabMoves` option to an object with the following properties\n     * (or to a function that returns such an object):\n     *\n     * | Property | Type   | Description                                                                                                                                              |\n     * | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `row`    | Number | - On pressing <kbd>**Tab**</kbd>, move selection `row` rows down<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>, move selection `row` rows up              |\n     * | `col`    | Number | - On pressing <kbd>**Tab**</kbd>, move selection `col` columns right<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>, move selection `col` columns left     |\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default {row: 0, col: 1}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on pressing Tab, move selection 2 rows down and 2 columns right\n     * // on pressing Shift+Tab, move selection 2 rows up and 2 columns left\n     * tabMoves: {row: 2, col: 2},\n     *\n     * // the same setting, as a function\n     * // `event` is a DOM Event object received on pressing Tab\n     * // you can use it to check whether the user pressed Tab or Shift+Tab\n     * tabMoves(event) {\n     *   return {row: 2, col: 2};\n     * },\n     * ```\n     */\n    tabMoves: { row: 0, col: 1 },\n\n    /**\n     * @description\n     * The `title` option configures [column header](@/guides/columns/column-header/column-header.md) names.\n     *\n     * You can set the `title` option to a string.\n     *\n     * Read more:\n     * - [Column header](@/guides/columns/column-header/column-header.md)\n     * - [`columns`](#columns)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the first column header name to `First name`\n     *     title: 'First name',\n     *     type: 'text',\n     *   },\n     *   {\n     *     // set the second column header name to `Last name`\n     *     title: 'Last name',\n     *     type: 'text',\n     *   }\n     * ],\n     * ```\n     */\n    title: undefined,\n\n    /**\n     * The `trimDropdown` option configures the width of the [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) lists.\n     *\n     * You can set the `trimDropdown` option to one of the following:\n     *\n     * | Setting          | Description                                                                     |\n     * | ---------------- | ------------------------------------------------------------------------------- |\n     * | `true` (default) | Make the dropdown/autocomplete list's width the same as the edited cell's width |\n     * | `false`          | Scale the dropdown/autocomplete list's width to the list's content              |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     // for each cell of this column\n     *     // make the `autocomplete` list's width the same as the edited cell's width\n     *     trimDropdown: true,\n     *   },\n     *   {\n     *     type: 'dropdown',\n     *     // for each cell of this column\n     *     // scale the `dropdown` list's width to the list's content\n     *     trimDropdown: false,\n     *   }\n     * ],\n     * ```\n     */\n    trimDropdown: true,\n\n    /**\n     * @description\n     * The `trimRows` option configures the [`TrimRows`](@/api/trimRows.md) plugin.\n     *\n     * You can set the `trimRows` option to one of the following:\n     *\n     * | Setting                          | Description                                                                                   |\n     * | -------------------------------- | --------------------------------------------------------------------------------------------- |\n     * | `false`                          | Disable the [`TrimRows`](@/api/trimRows.md) plugin                                            |\n     * | `true`                           | Enable the [`TrimRows`](@/api/trimRows.md) plugin                                             |\n     * | An array of physical row indexes | - Enable the [`TrimRows`](@/api/trimRows.md) plugin<br>- Trim selected rows at initialization |\n     *\n     * Read more:\n     * - [Plugins: `TrimRows`](@/api/trimRows.md)\n     * - [Row trimming](@/guides/rows/row-trimming/row-trimming.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category TrimRows\n     *\n     * @example\n     * ```js\n     * // enable the `TrimRows` plugin\n     * trimRows: true,\n     *\n     * // enable the `TrimRows` plugin\n     * // at Handsontable's initialization, trim rows 5, 10, and 15\n     * trimRows: [5, 10, 15],\n     * ```\n     */\n    trimRows: undefined,\n\n    /**\n     * The `trimWhitespace` option configures automatic whitespace removal. This option\n     * affects the cell renderer and the cell editor.\n     *\n     * You can set the `trimWhitespace` option to one of the following:\n     *\n     * | Setting          | Description                                                     |\n     * | ---------------- | --------------------------------------------------------------- |\n     * | `true` (default) | Remove whitespace at the beginning and at the end of each cell |\n     * | `false`          | Don't remove whitespace                                         |\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // don't remove whitespace\n     *     // from any cell of this column\n     *     trimWhitespace: false\n     *   }\n     * ]\n     * ```\n     */\n    trimWhitespace: true,\n\n    /**\n     * @description\n     * The `type` option lets you set the [`renderer`](#renderer), [`editor`](#editor), and [`validator`](#validator)\n     * options all at once, by selecting a [cell type](@/guides/cell-types/cell-type/cell-type.md).\n     *\n     * You can set the `type` option to one of the following:\n     *\n     * | Cell type                                                         | Renderer, editor & validator                                                                                                                                                                                                                       |\n     * | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | A [custom cell type](@/guides/cell-types/cell-type/cell-type.md)            | Renderer: your [custom cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md)<br>Editor: your [custom cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)<br>Validator: your [custom cell validator](@/guides/cell-functions/cell-validator/cell-validator.md) |\n     * | [`'autocomplete'`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) | Renderer: `AutocompleteRenderer`<br>Editor: `AutocompleteEditor`<br>Validator: `AutocompleteValidator`                                                                         |\n     * | [`'checkbox'`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md)         | Renderer: `CheckboxRenderer`<br>Editor: `CheckboxEditor`<br>Validator: -                                                                                                                               |\n     * | [`'date'`](@/guides/cell-types/date-cell-type/date-cell-type.md)                 | Renderer: `DateRenderer`<br>Editor: `DateEditor`<br>Validator: `DateValidator`                                                                                                 |\n     * | [`'dropdown'`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)         | Renderer: `DropdownRenderer`<br>Editor: `DropdownEditor`<br>Validator: `DropdownValidator`                                                                                     |\n     * | [`'handsontable'`](@/guides/cell-types/handsontable-cell-type/handsontable-cell-type.md) | Renderer: `AutocompleteRenderer`<br>Editor: `HandsontableEditor`<br>Validator: -                                                                                                                       |\n     * | [`'numeric'`](@/guides/cell-types/numeric-cell-type/numeric-cell-type.md)           | Renderer: `NumericRenderer`<br>Editor: `NumericEditor`<br>Validator: `NumericValidator`                                                                                        |\n     * | [`'password'`](@/guides/cell-types/password-cell-type/password-cell-type.md)         | Renderer: `PasswordRenderer`<br>Editor: `PasswordEditor`<br>Validator: -                                                                                                                               |\n     * | `'text'`                                                          | Renderer: `TextRenderer`<br>Editor: `TextEditor`<br>Validator: -                                                                                                                                       |\n     * | [`'time`'](@/guides/cell-types/time-cell-type/time-cell-type.md)                 | Renderer: `TimeRenderer`<br>Editor: `TimeEditor`<br>Validator: `TimeValidator`                                                                                                 |\n     *\n     * Read more:\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md)\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`renderer`](#renderer)\n     * - [`editor`](#editor)\n     * - [`validator`](#validator)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'text'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `numeric` cell type for each cell of the entire grid\n     * type: `'numeric'`,\n     *\n     * // apply the `type` option to individual columns\n     * columns: [\n     *   {\n     *     // set the `autocomplete` cell type for each cell of this column\n     *     type: 'autocomplete'\n     *   },\n     *   {\n     *     // set the `myCustomCellType` cell type for each cell of this column\n     *     type: 'myCustomCellType'\n     *   }\n     * ]\n     * ```\n     */\n    type: 'text',\n\n    /**\n     * The `uncheckedTemplate` option lets you configure what value\n     * an unchecked [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell has.\n     *\n     * You can set the `uncheckedTemplate` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                                                                                |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `false` (default) | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is unchecked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns `false`                 |\n     * | A string          | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is unchecked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns a string of your choice |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox template](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md#checkbox-template)\n     * - [`getDataAtCell()`](@/api/core.md#getDataAtCell)\n     * - [`checkedTemplate`](#checkedTemplate)\n     *\n     * @memberof Options#\n     * @type {boolean|string|number}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     // when unchecked, the cell's value is `false`\n     *     // when checked, the cell's value is `true`\n     *     type: 'checkbox',\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     // when unchecked, the cell's value is `'No'`\n     *     // when checked, the cell's value is `'Yes'`\n     *     type: 'checkbox',\n     *     uncheckedTemplate: 'No'\n     *     checkedTemplate: 'Yes',\n     *  }\n     * ],\n     * ```\n     */\n    uncheckedTemplate: undefined,\n\n    /**\n     * The `undo` option configures the [`UndoRedo`](@/api/undoRedo.md) plugin.\n     *\n     * You can set the `undo` option to one of the following:\n     *\n     * | Setting | Description                                        |\n     * | ------- | -------------------------------------------------- |\n     * | `true`  | Enable the [`UndoRedo`](@/api/undoRedo.md) plugin  |\n     * | `false` | Disable the [`UndoRedo`](@/api/undoRedo.md) plugin |\n     *\n     * By default, the `undo` option is set to `undefined`,\n     * but the [`UndoRedo`](@/api/undoRedo.md) plugin acts as enabled.\n     * To disable the [`UndoRedo`](@/api/undoRedo.md) plugin completely,\n     * set the `undo` option to `false`.\n     *\n     * Read more:\n     * - [Undo and redo](@/guides/accessories-and-menus/undo-redo/undo-redo.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category UndoRedo\n     *\n     * @example\n     * ```js\n     * // enable the `UndoRedo` plugin\n     * undo: true,\n     * ```\n     */\n    undo: undefined,\n\n    /**\n     * @description\n     * The `validator` option sets a [cell validator](@/guides/cell-functions/cell-validator/cell-validator.md) for a cell.\n     *\n     * You can set the `validator` option to one of the following:\n     *\n     * | Setting              | Description                                                                      |\n     * | -------------------- | -------------------------------------------------------------------------------- |\n     * | A string             | A [cell validator alias](@/guides/cell-functions/cell-validator/cell-validator.md)              |\n     * | A function           | Your [custom cell validator function](@/guides/cell-functions/cell-validator/cell-validator.md) |\n     * | A regular expression | A regular expression used for cell validation                                    |\n     *\n     * By setting the `validator` option to a string,\n     * you can use one of the following [cell validator aliases](@/guides/cell-functions/cell-validator/cell-validator.md):\n     *\n     * | Alias               | Cell validator function                                                 |\n     * | ------------------- | ----------------------------------------------------------------------- |\n     * | A custom alias      | Your [custom cell validator](@/guides/cell-functions/cell-validator/cell-validator.md) |\n     * | `'autocomplete'`    | `AutocompleteValidator`                                                 |\n     * | `'date'`            | `DateValidator`                                                         |\n     * | `'dropdown'`        | `DropdownValidator`                                                     |\n     * | `'numeric'`         | `NumericValidator`                                                      |\n     * | `'time'`            | `TimeValidator`                                                         |\n     *\n     * To set the [`editor`](#editor), [`renderer`](#renderer), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {Function|RegExp|string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *    {\n     *      // use a built-in `numeric` cell validator\n     *      validator: 'numeric'\n     *    },\n     *    {\n     *      // validate against a regular expression\n     *      validator: /^[0-9]$/\n     *    },\n     *    {\n     *      // add a custom cell validator function\n     *      validator(value, callback) {\n     *          ...\n     *      }\n     *    },\n     * ],\n     * ```\n     */\n    validator: undefined,\n\n    /**\n     * @description\n     * The `viewportColumnRenderingOffset` option configures the number of columns\n     * to be rendered outside of the grid's viewport.\n     *\n     * You can set the `viewportColumnRenderingOffset` option to one of the following:\n     *\n     * | Setting            | Description                                             |\n     * | ------------------ | ------------------------------------------------------- |\n     * | `auto` (default)   | Use the offset calculated automatically by Handsontable |\n     * | A number           | Set the offset manually                                 |\n     *\n     * The `viewportColumnRenderingOffset` setting is ignored when [`renderAllColumns`](#renderAllColumns) is set to `true`.\n     *\n     * Read more:\n     * - [Performance: Define the number of pre-rendered rows and columns](@/guides/optimization/performance/performance.md#define-the-number-of-pre-rendered-rows-and-columns)\n     *\n     * @memberof Options#\n     * @type {number|string}\n     * @default 'auto'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // render 70 columns outside of the grid's viewport\n     * viewportColumnRenderingOffset: 70,\n     * ```\n     */\n    viewportColumnRenderingOffset: 'auto',\n\n    /**\n     * @description\n     * The `viewportRowRenderingOffset` option configures the number of rows\n     * to be rendered outside of the grid's viewport.\n     *\n     * You can set the `viewportRowRenderingOffset` option to one of the following:\n     *\n     * | Setting            | Description                                             |\n     * | ------------------ | ------------------------------------------------------- |\n     * | `auto` (default)   | Use the offset calculated automatically by Handsontable |\n     * | A number           | Set the offset manually                                 |\n     *\n     * The `viewportRowRenderingOffset` setting is ignored when [`renderAllRows`](#renderAllRows) is set to `true`.\n     *\n     * Read more:\n     * - [Performance: Define the number of pre-rendered rows and columns](@/guides/optimization/performance/performance.md#define-the-number-of-pre-rendered-rows-and-columns)\n     * - [Column virtualization](@/guides/columns/column-virtualization/column-virtualization.md)\n     *\n     * @memberof Options#\n     * @type {number|string}\n     * @default 'auto'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // render 70 rows outside of the grid's viewport\n     * viewportRowRenderingOffset: 70,\n     * ```\n     */\n    viewportRowRenderingOffset: 'auto',\n\n    /**\n     * The `visibleRows` option sets the height of the [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) lists.\n     *\n     * When the number of list options exceeds the `visibleRows` number, a scrollbar appears.\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 10\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     // set the `autocomplete` list's height to 15 options\n     *     // for each cell of this column\n     *     visibleRows: 15,\n     *   },\n     *   {\n     *     type: 'dropdown',\n     *     // set the `dropdown` list's height to 5 options\n     *     // for each cell of this column\n     *     visibleRows: 5,\n     *   }\n     * ],\n     * ```\n     */\n    visibleRows: 10,\n\n    /**\n     * The `width` option configures the width of your grid.\n     *\n     * You can set the `width` option to one of the following:\n     *\n     * | Setting                                                                    | Example                   |\n     * | -------------------------------------------------------------------------- | ------------------------- |\n     * | A number of pixels                                                         | `width: 500`              |\n     * | A string with a [CSS unit](https://www.w3schools.com/cssref/css_units.asp) | `width: '75vw'`           |\n     * | A function that returns a valid number or string                           | `width() { return 500; }` |\n     *\n     * Read more:\n     * - [Grid size](@/guides/getting-started/grid-size/grid-size.md)\n     *\n     * @memberof Options#\n     * @type {number|string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the grid's width to 500px\n     * width: 500,\n     *\n     * // set the grid's width to 75vw\n     * width: '75vw',\n     *\n     * // set the grid's width to 500px, using a function\n     * width() {\n     *   return 500;\n     * },\n     * ```\n     */\n    width: undefined,\n\n    /**\n     * The `wordWrap` option configures whether content that exceeds a column's width is wrapped or not.\n     *\n     * You can set the `wordWrap` option to one of the following:\n     *\n     * | Setting          | Description                                             |\n     * | ---------------- | ------------------------------------------------------- |\n     * | `true` (default) | If content exceeds the column's width, wrap the content |\n     * | `false`          | Don't wrap content                                      |\n     *\n     * To style cells that don't wrap content, use the [`noWordWrapClassName`](#noWordWrapClassName) option.\n     *\n     * Read more:\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set column width for every column of the entire grid\n     * colWidths: 100,\n     *\n     * columns: [\n     *   {\n     *     // don't wrap content in this column\n     *     wordWrap: false,\n     *   },\n     *   {\n     *     // if content exceeds this column's width, wrap the content\n     *     wordWrap: true,\n     *   }\n     * ],\n     * ```\n     */\n    wordWrap: true,\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n  };\n};\n","import { extend } from '../../../helpers/object';\nimport { extendByMetaType } from '../utils';\n\n/**\n * The table meta object is a layer that keeps all settings of the Handsontable that was passed in\n * the constructor. That layer contains all default settings inherited from the GlobalMeta layer\n * merged with settings passed by the developer. Adding, removing, or changing property in that\n * object has no direct reflection on any other layers.\n *\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n */\nexport default class TableMeta {\n  /**\n   * Main object (instance of the internal TableMeta class from GlobalMeta), holder for all settings defined in the table scope.\n   *\n   * @type {TableMeta}\n   */\n  meta;\n\n  constructor(globalMeta) {\n    const MetaCtor = globalMeta.getMetaConstructor();\n\n    this.meta = new MetaCtor();\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @returns {TableMeta}\n   */\n  getMeta() {\n    return this.meta;\n  }\n\n  /**\n   * Updates table settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(settings) {\n    extend(this.meta, settings);\n    extendByMetaType(this.meta, settings, settings);\n  }\n}\n","import { extend } from '../../../helpers/object';\nimport { columnFactory, extendByMetaType } from '../utils';\nimport LazyFactoryMap from '../lazyFactoryMap';\n\n/**\n * List of props which have to be cleared in the column meta-layer. That props have a\n * different meaning when using in column meta.\n *\n * @type {string[]}\n */\nconst COLUMNS_PROPS_CONFLICTS = ['data', 'width'];\n\n/**\n * The column meta object is a root of all settings defined in the column property of the Handsontable\n * settings. Each column in the Handsontable is associated with a unique meta object which is managed by\n * this layer. Adding, removing, or changing property in that object has a direct reflection only for\n * the CellMeta layer. The reflection will be visible only if the property doesn't exist in the lower\n * layers (prototype lookup).\n *\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n */\nexport default class ColumnMeta {\n  /**\n   * Reference to the GlobalMeta layer. While creating new column meta objects, all new objects\n   * inherit properties from the GlobalMeta layer.\n   *\n   * @type {GlobalMeta}\n   */\n  globalMeta;\n  /**\n   * The LazyFactoryMap structure, holder for column meta objects where each column meta is\n   * stored under the physical column index.\n   *\n   * @type {LazyFactoryMap}\n   */\n  metas = new LazyFactoryMap(() => this._createMeta());\n\n  constructor(globalMeta) {\n    this.globalMeta = globalMeta;\n    this.metas = new LazyFactoryMap(() => this._createMeta());\n  }\n\n  /**\n   * Updates column meta object by merging settings with the current state.\n   *\n   * @param {number} physicalColumn The physical column index which points what column meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(physicalColumn, settings) {\n    const meta = this.getMeta(physicalColumn);\n\n    extend(meta, settings);\n    extendByMetaType(meta, settings);\n  }\n\n  /**\n   * Creates one or more columns at specific position.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is added.\n   * @param {number} amount An amount of columns to add.\n   */\n  createColumn(physicalColumn, amount) {\n    this.metas.insert(physicalColumn, amount);\n  }\n\n  /**\n   * Removes one or more columns from the collection.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n   * @param {number} amount An amount columns to remove.\n   */\n  removeColumn(physicalColumn, amount) {\n    this.metas.remove(physicalColumn, amount);\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @param {number} physicalColumn The physical column index.\n   * @returns {object}\n   */\n  getMeta(physicalColumn) {\n    return this.metas.obtain(physicalColumn);\n  }\n\n  /**\n   * Gets constructor of the column meta object. Necessary for inheritance - creating the next meta layers.\n   *\n   * @param {number} physicalColumn The physical column index.\n   * @returns {Function}\n   */\n  getMetaConstructor(physicalColumn) {\n    return this.metas.obtain(physicalColumn).constructor;\n  }\n\n  /**\n   * Clears all saved column meta objects.\n   */\n  clearCache() {\n    this.metas.clear();\n  }\n\n  /**\n   * Creates and returns new column meta object with properties inherited from the global meta layer.\n   *\n   * @private\n   * @returns {object}\n   */\n  _createMeta() {\n    return columnFactory(this.globalMeta.getMetaConstructor(), COLUMNS_PROPS_CONFLICTS).prototype;\n  }\n}\n","import { arrayFilter } from '../../helpers/array';\nimport { assert, isUnsignedNumber, isNullish } from './utils';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @class LazyFactoryMap\n *\n * The LazyFactoryMap object holds key-value pairs in the structure similar to the\n * regular Map. Once created, items can be moved around a grid depending on the operations\n * performed on that grid - adding or removing rows. The collection requires \"key\"\n * to be a zero-based index.\n *\n * It's essential to notice that the \"key\" index under which the item was created\n * is volatile. After altering the grid, the \"key\" index can change.\n *\n * Having created N items with corresponding example data where the data has 10\n * holes (`undefined` values) within (that's why internal storage index counts from 10).\n * +------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/12 | 3/13 | 4/14 |  Keys (volatile zero-based index / internal storage index)\n * +------+------+------+------+------+.\n *    │      │      │      │      │\n * +------+------+------+------+------+.\n * | AAA  | BBB  | CCC  | DDD  | EEE  |  Data\n * +------+------+------+------+------+.\n *\n * Map.obtain(0) // returns \"AAA\"\n * map.obtain(2) // returns \"CCC\".\n *\n * After inserting 2 new rows, keys that hold the data positioned after the place\n * where the new rows are added are upshifted by 2.\n *               │\n *               │ Insert 2 rows\n *              \\│/\n * +------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/12 | 3/13 | 4/14 |  Keys before\n * +------+------+------+------+------+.\n *\n *                / 2 new rows \\\n * +------+------+------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/15 | 3/16 | 4/12 | 5/13 | 6/14 |  Keys after\n * +------+------+------+------+------+------+------+.\n *    │       │      │      │      │      │     │\n *    │       │      └──────┼──────┼──────┼┐    │\n *    │       │             └──────┼──────┼┼────┼┐\n *    │       │      ┌─────────────┘      ││    ││\n *    │       │      │      ┌─────────────┘│    ││\n *    │       │      │      │      ┌───────┼────┘│\n *    │       │      │      │      │       │     │\n * +------+------+------+------+------+------+------+.\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *\n * Now at index 2 and 3 we have access to new items.\n *\n * map.obtain(2) // returns new value \"FFF\" for newly created row.\n * map.obtain(4) // index shifted by 2 has access to the old \"CCC\" value, as before inserting.\n *\n * after removing 4 rows, keys that hold the data positioned after the place where the\n * rows are removed are downshifted by 4.\n *        │\n *        │ Remove 4 rows\n *        ├───────────────────────────┐\n *       \\│/                          │\n * +------+------+------+------+------+------+------+\n * | 0/10 | 1/11 | 2/15 | 3/16 | 4/12 | 5/13 | 6/14 |  Keys after\n * +------+------+------+------+------+------+------+\n *    │       │      │      │      │      │     │\n *    │       │      └──────┼──────┼──────┼┐    │\n *    │       │             └──────┼──────┼┼────┼┐\n *    │       │      ┌─────────────┘      ││    ││\n *    │       │      │      ┌─────────────┘│    ││\n *    │       │      │      │      ┌───────┼────┘│\n *    │       │      │      │      │       │     │\n * +------+------+------+------+------+------+------+\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *\n * +------+------+------+\n * | 0/10 | 1/13 | 2/14 |  Keys after\n * +------+------+------+\n *    │       │      │\n *    │       │      └─────────────┐\n *    │       └────────────┐       │\n *    │                    │       │\n *    │                    │       │\n *    │                    │       │\n *    │                    │       │\n * +------+------+------+------+------+------+------+\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *           /│\\   /│\\                   /│\\   /│\\\n *            └──┬──┘                     └──┬──┘\n *           This data is marked as \"hole\" which\n *           means that can be replaced by new item\n *           when that will be created.\n *\n * map.obtain(2) // returns the value (\"EEE\") as it should. Access to the value is\n *               // changed (the key was downshifted). However, the internal index has not changed,\n *               // which means that the data does not need to be changed (spliced) too.\n *\n * After previous remove operation which creates some \"holes\" obtaining new\n * items replaces that \"holes\" as follows:\n *\n * // Obtains new item\n * map.obtain(90) // Returns \"NEW\" value\n *\n * +------+------+------+...+------+\n * | 0/10 | 1/13 | 2/14 |   | 90/0 |  Keys after\n * +------+------+------+...+------+\n *    │       │      │          │\n *    │       │      └──────────┼────────────┐\n *    │       └─────────────────┼─────┐      │\n *    └──────────┐              │     │      │\n *               │              │     │      │\n *    ┌──────────┼──────────────┘     │      │\n *    │          │                    │      │\n * +------+...+------+------+------+------+------+-----+\n * | NEW  |   | AAA  | BBB  | CCC  | DDD  | EEE  | FFF |  Data\n * +------+...+------+------+------+------+------+-----+\n *   /│\\\n *    │\n * The first \"hole\" (at index 0) item is permanently removed and replaced by a new item.\n * The hole index is taken from the hole collection which act as FIFO (First In First Out).\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport default class LazyFactoryMap {\n  /**\n   * The data factory function.\n   *\n   * @type {Function}\n   */\n  valueFactory;\n  /**\n   * An array which contains data.\n   *\n   * @type {Array}\n   */\n  data = [];\n  /**\n   * An array of indexes where the key of the array is mapped to the value which points to the\n   * specific position of the data array.\n   *\n   * @type {number[]}\n   */\n  index = [];\n  /**\n   * The collection of indexes that points to the data items which can be replaced by obtaining new\n   * ones. The \"holes\" are an intended effect of deleting entries.\n   *\n   * The idea of \"holes\" generally allows us to not modify the \"data\" structure while removing\n   * items from the collection.\n   *\n   * @type {Set<number>}\n   */\n  holes = new Set();\n\n  constructor(valueFactory) {\n    this.valueFactory = valueFactory;\n  }\n\n  /**\n   * Gets or if data not exist creates and returns new data.\n   *\n   * @param {number} key The item key as zero-based index.\n   * @returns {*}\n   */\n  obtain(key) {\n    assert(() => isUnsignedNumber(key), 'Expecting an unsigned number.');\n\n    const dataIndex = this._getStorageIndexByKey(key);\n    let result;\n\n    if (dataIndex >= 0) {\n      result = this.data[dataIndex];\n\n      if (result === undefined) {\n        result = this.valueFactory(key);\n        this.data[dataIndex] = result;\n      }\n    } else {\n      result = this.valueFactory(key);\n\n      if (this.holes.size > 0) {\n        const reuseIndex = this.holes.values().next().value; // Gets first item from the collection\n\n        this.holes.delete(reuseIndex);\n\n        this.data[reuseIndex] = result;\n        this.index[key] = reuseIndex;\n      } else {\n        this.data.push(result);\n        this.index[key] = this.data.length - 1;\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Inserts an empty data to the map. This method creates an empty space for obtaining\n   * new data.\n   *\n   * @param {number} key The key as volatile zero-based index at which to begin inserting space for new data.\n   * @param {number} [amount=1] Ammount of data to insert.\n   */\n  insert(key, amount = 1) {\n    assert(() => (isUnsignedNumber(key) || isNullish(key)), 'Expecting an unsigned number or null/undefined argument.');\n\n    const newIndexes = [];\n    const dataLength = this.data.length;\n\n    for (let i = 0; i < amount; i++) {\n      newIndexes.push(dataLength + i);\n      this.data.push(undefined);\n    }\n\n    const insertionIndex = isNullish(key) ? this.index.length : key;\n\n    this.index = [...this.index.slice(0, insertionIndex), ...newIndexes, ...this.index.slice(insertionIndex)];\n  }\n\n  /**\n   * Removes (soft remove) data from \"index\" and according to the amount of data.\n   *\n   * @param {number} key The key as volatile zero-based index at which to begin removing the data.\n   * @param {number} [amount=1] Ammount data to remove.\n   */\n  remove(key, amount = 1) {\n    assert(() => (isUnsignedNumber(key) || isNullish(key)), 'Expecting an unsigned number or null/undefined argument.');\n\n    const removed = this.index.splice(isNullish(key) ? this.index.length - amount : key, amount);\n\n    for (let i = 0; i < removed.length; i++) {\n      const removedIndex = removed[i];\n\n      if (typeof removedIndex === 'number') {\n        this.holes.add(removedIndex);\n      }\n    }\n  }\n\n  /**\n   * Returns the size of the data which this map holds.\n   *\n   * @returns {number}\n   */\n  size() {\n    return this.data.length - this.holes.size;\n  }\n\n  /**\n   * Returns a new Iterator object that contains the values for each item in the LazyMap object.\n   *\n   * @returns {Iterator}\n   */\n  values() {\n    return arrayFilter(this.data, (_, index) => !this.holes.has(index))[Symbol.iterator]();\n  }\n\n  /**\n   * Returns a new Iterator object that contains an array of `[index, value]` for each item in the LazyMap object.\n   *\n   * @returns {Iterator}\n   */\n  entries() {\n    const validEntries = [];\n\n    for (let i = 0; i < this.data.length; i++) {\n      const keyIndex = this._getKeyByStorageIndex(i);\n\n      if (keyIndex !== -1) {\n        validEntries.push([keyIndex, this.data[i]]);\n      }\n    }\n\n    let dataIndex = 0;\n\n    return {\n      next: () => {\n        if (dataIndex < validEntries.length) {\n          const value = validEntries[dataIndex];\n\n          dataIndex += 1;\n\n          return { value, done: false };\n        }\n\n        return { done: true };\n      }\n    };\n  }\n\n  /**\n   * Clears the map.\n   */\n  clear() {\n    this.data = [];\n    this.index = [];\n    this.holes.clear();\n  }\n\n  /**\n   * Gets storage index calculated from the key associated with the specified value.\n   *\n   * @param {number} key Volatile zero-based index.\n   * @returns {number} Returns index 0-N or -1 if no storage index found.\n   */\n  _getStorageIndexByKey(key) {\n    return this.index.length > key ? this.index[key] : -1;\n  }\n\n  /**\n   * Gets the key associated with the specified value calculated from storage index.\n   *\n   * @param {number} dataIndex Zero-based storage index.\n   * @returns {number} Returns index 0-N or -1 if no key found.\n   */\n  _getKeyByStorageIndex(dataIndex) {\n    return this.index.indexOf(dataIndex);\n  }\n\n  /**\n   * Makes this object iterable.\n   *\n   * @returns {Iterator}\n   */\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n}\n","import { extend } from '../../../helpers/object';\nimport { extendByMetaType, assert, isUnsignedNumber } from '../utils';\nimport LazyFactoryMap from '../lazyFactoryMap';\nimport { isDefined } from '../../../helpers/mixed';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @class CellMeta\n *\n * The cell meta object is a root of all settings defined for the specific cell rendered by the\n * Handsontable. Each cell meta inherits settings from higher layers. When a property doesn't\n * exist in that layer, it is looked up through a prototype to the highest layer. Starting\n * from CellMeta -> ColumnMeta and ending to GlobalMeta, which stores default settings. Adding,\n * removing, or changing property in that object has no direct reflection on any other layers.\n *\n * +-------------+\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport default class CellMeta {\n  /**\n   * Reference to the ColumnMeta layer. While creating new cell meta objects, all new objects\n   * inherit properties from the ColumnMeta layer.\n   *\n   * @type {ColumnMeta}\n   */\n  columnMeta;\n  /**\n   * Holder for cell meta objects, organized as a grid of LazyFactoryMap of LazyFactoryMaps.\n   * The access to the cell meta object is done through access to the row defined by the physical\n   * row index and then by accessing the second LazyFactory Map under the physical column index.\n   *\n   * @type {LazyFactoryMap<number, LazyFactoryMap<number, object>>}\n   */\n  metas = new LazyFactoryMap(() => this._createRow());\n\n  constructor(columnMeta) {\n    this.columnMeta = columnMeta;\n  }\n\n  /**\n   * Updates cell meta object by merging settings with the current state.\n   *\n   * @param {number} physicalRow The physical row index which points what cell meta object is updated.\n   * @param {number} physicalColumn The physical column index which points what cell meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(physicalRow, physicalColumn, settings) {\n    const meta = this.getMeta(physicalRow, physicalColumn);\n\n    extend(meta, settings);\n    extendByMetaType(meta, settings);\n  }\n\n  /**\n   * Creates one or more rows at specific position.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is added.\n   * @param {number} amount An amount of rows to add.\n   */\n  createRow(physicalRow, amount) {\n    this.metas.insert(physicalRow, amount);\n  }\n\n  /**\n   * Creates one or more columns at specific position.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is added.\n   * @param {number} amount An amount of columns to add.\n   */\n  createColumn(physicalColumn, amount) {\n    for (let i = 0; i < this.metas.size(); i++) {\n      this.metas.obtain(i).insert(physicalColumn, amount);\n    }\n  }\n\n  /**\n   * Removes one or more rows from the collection.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is removed.\n   * @param {number} amount An amount of rows to remove.\n   */\n  removeRow(physicalRow, amount) {\n    this.metas.remove(physicalRow, amount);\n  }\n\n  /**\n   * Removes one or more columns from the collection.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n   * @param {number} amount An amount of columns to remove.\n   */\n  removeColumn(physicalColumn, amount) {\n    for (let i = 0; i < this.metas.size(); i++) {\n      this.metas.obtain(i).remove(physicalColumn, amount);\n    }\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} [key] If the key exists its value will be returned, otherwise the whole cell meta object.\n   * @returns {object}\n   */\n  getMeta(physicalRow, physicalColumn, key) {\n    const cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n\n    if (key === undefined) {\n      return cellMeta;\n    }\n\n    return cellMeta[key];\n  }\n\n  /**\n   * Sets settings object for this layer defined by \"key\" property.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to set.\n   * @param {*} value Value to save.\n   */\n  setMeta(physicalRow, physicalColumn, key, value) {\n    const cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n\n    cellMeta._automaticallyAssignedMetaProps?.delete(key);\n    cellMeta[key] = value;\n  }\n\n  /**\n   * Removes a property defined by the \"key\" argument from the cell meta object.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to remove.\n   */\n  removeMeta(physicalRow, physicalColumn, key) {\n    const cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n\n    delete cellMeta[key];\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation. As cell meta\n   * objects are created lazy, the length of the returned collection depends on how and when the\n   * table has asked for access to that meta objects.\n   *\n   * @returns {object[]}\n   */\n  getMetas() {\n    const metas = [];\n    const rows = Array.from(this.metas.values());\n\n    for (let row = 0; row < rows.length; row++) {\n      // Getting a meta for already added row (new row already exist - it has been added using `createRow` method).\n      // However, is not ready until the first `getMeta` call (lazy loading).\n      if (isDefined(rows[row])) {\n        metas.push(...rows[row].values());\n      }\n    }\n\n    return metas;\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation but for\n   * specific row index.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @returns {object[]}\n   */\n  getMetasAtRow(physicalRow) {\n    assert(() => isUnsignedNumber(physicalRow), 'Expecting an unsigned number.');\n\n    const rowsMeta = new Map(this.metas);\n\n    return rowsMeta.has(physicalRow) ? Array.from(rowsMeta.get(physicalRow).values()) : [];\n  }\n\n  /**\n   * Clears all saved cell meta objects.\n   */\n  clearCache() {\n    this.metas.clear();\n  }\n\n  /**\n   * Creates and returns new structure for cell meta objects stored in columnar axis.\n   *\n   * @private\n   * @returns {object}\n   */\n  _createRow() {\n    return new LazyFactoryMap(physicalColumn => this._createMeta(physicalColumn));\n  }\n\n  /**\n   * Creates and returns new cell meta object with properties inherited from the column meta layer.\n   *\n   * @private\n   * @param {number} physicalColumn The physical column index.\n   * @returns {object}\n   */\n  _createMeta(physicalColumn) {\n    const ColumnMeta = this.columnMeta.getMetaConstructor(physicalColumn);\n\n    return new ColumnMeta();\n  }\n}\n","import { toUpperCaseFirst } from '../helpers/string';\nimport { isFunction } from '../helpers/function';\nimport DataMap from './dataMap';\nimport { deepClone } from '../helpers/object';\nimport { setAttribute } from '../helpers/dom/element';\nimport { A11Y_COLCOUNT, A11Y_ROWCOUNT } from '../helpers/a11y';\n\n/**\n * Loads new data to Handsontable.\n *\n * @private\n * @param {Array} data Array of arrays or array of objects containing data.\n * @param {Function} setDataMapFunction Function that updates the datamap instance.\n * @param {Function} callbackFunction Function that takes care of updating Handsontable to the new dataset. Called\n * right before the `after-` hooks.\n * @param {object} config The configuration object containing all the needed dependency references and information.\n * @param {Handsontable.Core} config.hotInstance The Handsontable instance.\n * @param {DataMap} config.dataMap The current `dataMap` instance.\n * @param {DataSource} config.dataSource The current `dataSource` instance.\n * @param {string} config.internalSource The immediate internal source of the `replaceData` call.\n * @param {string} config.source The source of the call.\n * @param {boolean} config.firstRun `true` if it's a first call in the Handsontable lifecycle, `false` otherwise.\n * @fires Hooks#beforeLoadData\n * @fires Hooks#beforeUpdateData\n * @fires Hooks#afterLoadData\n * @fires Hooks#afterUpdateData\n * @fires Hooks#afterChange\n */\nfunction replaceData(data, setDataMapFunction, callbackFunction, config) {\n  const {\n    hotInstance,\n    dataMap,\n    dataSource,\n    internalSource,\n    source,\n    metaManager,\n    firstRun\n  } = config;\n  const capitalizedInternalSource = toUpperCaseFirst(internalSource);\n  const tableMeta = hotInstance.getSettings();\n\n  if (Array.isArray(tableMeta.dataSchema)) {\n    hotInstance.dataType = 'array';\n  } else if (isFunction(tableMeta.dataSchema)) {\n    hotInstance.dataType = 'function';\n  } else {\n    hotInstance.dataType = 'object';\n  }\n\n  if (dataMap) {\n    dataMap.destroy();\n  }\n\n  data = hotInstance.runHooks(`before${capitalizedInternalSource}`, data, firstRun, source);\n\n  const newDataMap = new DataMap(hotInstance, data, metaManager);\n\n  // We need to apply the new dataMap immediately, because of some asynchronous logic in the\n  // `autoRowSize`/`autoColumnSize` plugins.\n  setDataMapFunction(newDataMap);\n\n  if (typeof data === 'object' && data !== null) {\n    if (!(data.push && data.splice)) { // check if data is array. Must use duck-type check so Backbone Collections also pass it\n      // when data is not an array, attempt to make a single-row array of it\n      // eslint-disable-next-line no-param-reassign\n      data = [data];\n    }\n\n  } else if (data === null) {\n    const dataSchema = newDataMap.getSchema();\n\n    // eslint-disable-next-line no-param-reassign\n    data = [];\n    let row;\n    let r = 0;\n    let rlen = 0;\n\n    for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {\n      if ((hotInstance.dataType === 'object' || hotInstance.dataType === 'function') && tableMeta.dataSchema) {\n        row = deepClone(dataSchema);\n        data.push(row);\n\n      } else if (hotInstance.dataType === 'array') {\n        row = deepClone(dataSchema[0]);\n        data.push(row);\n\n      } else {\n        row = [];\n\n        for (let c = 0, clen = tableMeta.startCols; c < clen; c++) {\n          row.push(null);\n        }\n\n        data.push(row);\n      }\n    }\n\n  } else {\n    throw new Error(`${internalSource} only accepts array of objects or array of arrays (${typeof data} given)`);\n  }\n\n  if (Array.isArray(data[0])) {\n    hotInstance.dataType = 'array';\n  }\n\n  tableMeta.data = data;\n\n  newDataMap.dataSource = data;\n  dataSource.data = data;\n  dataSource.dataType = hotInstance.dataType;\n  dataSource.colToProp = newDataMap.colToProp.bind(newDataMap);\n  dataSource.propToCol = newDataMap.propToCol.bind(newDataMap);\n  dataSource.countCachedColumns = newDataMap.countCachedColumns.bind(newDataMap);\n\n  // Run the logic for reassuring that the table structure fits the new dataset.\n  callbackFunction(newDataMap);\n\n  hotInstance.runHooks(`after${capitalizedInternalSource}`, data, firstRun, source);\n\n  // TODO: rethink the way the `afterChange` hook is being run here in the core `init` method.\n  if (!firstRun) {\n    hotInstance.runHooks('afterChange', null, internalSource);\n    hotInstance.render();\n  }\n\n  if (hotInstance.getSettings().ariaTags) {\n    setAttribute(hotInstance.rootElement, [\n      A11Y_ROWCOUNT(-1),\n      // If run after initialization, add the number of row headers.\n      A11Y_COLCOUNT(hotInstance.countCols() + (hotInstance.view ? hotInstance.countRowHeaders() : 0)),\n    ]);\n  }\n}\n\nexport {\n  replaceData\n};\n","import Hooks from '../../../pluginHooks';\nimport { hasOwnProperty } from '../../../helpers/object';\nimport { isFunction } from '../../../helpers/function';\n\n/**\n * @class DynamicCellMetaMod\n *\n * The `DynamicCellMetaMod` modifier allows for extending cell meta objects\n * (returned by `getCellMeta()` from `MetaManager`)\n * by user-specific properties.\n *\n * The user-specific properties can be added and changed dynamically,\n * either by Handsontable's hooks (`beforeGetCellMeta` and`afterGetCellMeta`),\n * or by Handsontable's `cells` option.\n *\n * The `getCellMeta()` method is used widely throughout the source code.\n * To boost the method's execution time,\n * the logic is triggered only once per one Handsontable slow render cycle.\n */\nexport class DynamicCellMetaMod {\n  /**\n   * @type {MetaManager}\n   */\n  metaManager;\n  /**\n   * @type {Map}\n   */\n  metaSyncMemo = new Map();\n\n  constructor(metaManager) {\n    this.metaManager = metaManager;\n\n    metaManager.addLocalHook('afterGetCellMeta', cellMeta => this.extendCellMeta(cellMeta));\n\n    Hooks.getSingleton().add('beforeRender', (forceFullRender) => {\n      if (forceFullRender) {\n        this.metaSyncMemo.clear();\n      }\n    }, this.metaManager.hot);\n  }\n\n  /**\n   * Extends the cell meta object by user-specific properties.\n   *\n   * The cell meta object can be extended dynamically,\n   * either by Handsontable's hooks (`beforeGetCellMeta` and`afterGetCellMeta`),\n   * or by Handsontable's `cells` option.\n   *\n   * To boost performance, the extending process is triggered only once per one slow Handsontable render cycle.\n   *\n   * @param {object} cellMeta The cell meta object.\n   */\n  extendCellMeta(cellMeta) {\n    const {\n      row: physicalRow,\n      col: physicalColumn,\n    } = cellMeta;\n\n    if (this.metaSyncMemo.get(physicalRow)?.has(physicalColumn)) {\n      return;\n    }\n\n    const {\n      visualRow,\n      visualCol,\n    } = cellMeta;\n    const hot = this.metaManager.hot;\n    const prop = hot.colToProp(visualCol);\n\n    cellMeta.prop = prop;\n\n    hot.runHooks('beforeGetCellMeta', visualRow, visualCol, cellMeta);\n\n    // extend a `type` value, added or changed in the `beforeGetCellMeta` hook\n    const cellType = hasOwnProperty(cellMeta, 'type') ? cellMeta.type : null;\n    let cellSettings = isFunction(cellMeta.cells) ? cellMeta.cells(physicalRow, physicalColumn, prop) : null;\n\n    if (cellType) {\n      if (cellSettings) {\n        cellSettings.type = cellSettings.type ?? cellType;\n      } else {\n        cellSettings = {\n          type: cellType,\n        };\n      }\n    }\n\n    if (cellSettings) {\n      this.metaManager.updateCellMeta(physicalRow, physicalColumn, cellSettings);\n    }\n\n    hot.runHooks('afterGetCellMeta', visualRow, visualCol, cellMeta);\n\n    if (!this.metaSyncMemo.has(physicalRow)) {\n      this.metaSyncMemo.set(physicalRow, new Set());\n    }\n\n    this.metaSyncMemo.get(physicalRow).add(physicalColumn);\n  }\n}\n","/**\n * @class ExtendMetaPropertiesMod\n */\nexport class ExtendMetaPropertiesMod {\n  /**\n   * @type {MetaManager}\n   */\n  metaManager;\n  /**\n   * @type {Set}\n   */\n  usageTracker = new Set();\n  /**\n   * @type {Map}\n   */\n  propDescriptors = new Map([\n    [\n      'ariaTags', {\n        initOnly: true,\n      }],\n    ['fixedColumnsLeft', {\n      target: 'fixedColumnsStart',\n      onChange(propName) {\n        const isRtl = this.metaManager.hot.isRtl();\n\n        if (isRtl && propName === 'fixedColumnsLeft') {\n          throw new Error('The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.');\n        }\n\n        if (this.usageTracker.has('fixedColumnsLeft') && this.usageTracker.has('fixedColumnsStart')) {\n          throw new Error('The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. ' +\n            'Please use only the option `fixedColumnsStart`.');\n        }\n      }\n    }],\n    ['layoutDirection', {\n      initOnly: true,\n    }],\n    ['renderAllColumns', {\n      initOnly: true,\n    }],\n    ['renderAllRows', {\n      initOnly: true,\n    }],\n  ]);\n\n  constructor(metaManager) {\n    this.metaManager = metaManager;\n\n    this.extendMetaProps();\n  }\n\n  /**\n   * Callback called when the prop is marked as `initOnly`.\n   *\n   * @param {string} propName The property name.\n   * @param {*} value The new value.\n   * @param {boolean} isInitialChange Is the change initial.\n   */\n  #initOnlyCallback = (propName, value, isInitialChange) => {\n    if (!isInitialChange) {\n      throw new Error(`The \\`${propName}\\` option can not be updated after the Handsontable is initialized.`);\n    }\n  }\n\n  /**\n   * Extends the meta options based on the object descriptors from the `propDescriptors` list.\n   */\n  extendMetaProps() {\n    this.propDescriptors.forEach((descriptor, alias) => {\n      const { initOnly, target, onChange } = descriptor;\n      const hasTarget = typeof target === 'string';\n      const targetProp = hasTarget ? target : alias;\n      const origProp = `_${targetProp}`;\n\n      this.metaManager.globalMeta.meta[origProp] = this.metaManager.globalMeta.meta[targetProp];\n\n      if (onChange) {\n        this.installPropWatcher(alias, origProp, onChange);\n\n        if (hasTarget) {\n          this.installPropWatcher(target, origProp, onChange);\n        }\n\n      } else if (initOnly) {\n        this.installPropWatcher(alias, origProp, this.#initOnlyCallback);\n\n        if (!this.metaManager.globalMeta.meta._initOnlySettings) {\n          this.metaManager.globalMeta.meta._initOnlySettings = [];\n        }\n\n        this.metaManager.globalMeta.meta._initOnlySettings.push(alias);\n      }\n    });\n  }\n\n  /**\n   * Installs the property watcher to the `propName` option and forwards getter and setter to\n   * the new one.\n   *\n   * @param {string} propName The property to watch.\n   * @param {string} origProp The property from/to the value is forwarded.\n   * @param {Function} onChange The callback.\n   */\n  installPropWatcher(propName, origProp, onChange) {\n    const self = this;\n\n    Object.defineProperty(this.metaManager.globalMeta.meta, propName, {\n      get() {\n        return this[origProp];\n      },\n      set(value) {\n        const isInitialChange = !self.usageTracker.has(propName);\n\n        self.usageTracker.add(propName);\n\n        onChange.call(self, propName, value, isInitialChange);\n\n        this[origProp] = value;\n      },\n      enumerable: true,\n      configurable: true\n    });\n  }\n}\n","export * from './focusCatcher';\nexport * from './viewportScroll';\n","import { GRID_GROUP } from '../../shortcutContexts';\nimport { installFocusDetector } from './focusDetector';\n\n/**\n * Installs a focus catcher module. The module observes when the table is focused and depending on\n * from the which side it was focused on it selects a specified cell or releases the TAB navigation\n * to the browser.\n *\n * @param {Core} hot The Handsontable instance.\n */\nexport function installFocusCatcher(hot) {\n  const clampCoordsIfNeeded = normalizeCoordsIfNeeded(hot);\n  let recentlyAddedFocusCoords;\n\n  const { activate, deactivate } = installFocusDetector(hot, {\n    onFocusFromTop() {\n      const mostTopStartCoords = clampCoordsIfNeeded(recentlyAddedFocusCoords) ?? getMostTopStartPosition(hot);\n\n      if (mostTopStartCoords) {\n        hot.runHooks('modifyFocusOnTabNavigation', 'from_above', mostTopStartCoords);\n        hot.selectCell(mostTopStartCoords.row, mostTopStartCoords.col);\n      }\n\n      hot.listen();\n    },\n    onFocusFromBottom() {\n      const mostBottomEndCoords = clampCoordsIfNeeded(recentlyAddedFocusCoords) ?? getMostBottomEndPosition(hot);\n\n      if (mostBottomEndCoords) {\n        hot.runHooks('modifyFocusOnTabNavigation', 'from_below', mostBottomEndCoords);\n        hot.selectCell(mostBottomEndCoords.row, mostBottomEndCoords.col);\n      }\n\n      hot.listen();\n    },\n  });\n\n  const rowWrapState = {\n    wrapped: false,\n    flipped: false,\n  };\n  let isSavingCoordsEnabled = true;\n  let isTabOrShiftTabPressed = false;\n  let preventViewportScroll = false;\n\n  hot.addHook('afterListen', () => deactivate());\n  hot.addHook('afterUnlisten', () => activate());\n  hot.addHook('afterSelection', (row, column, row2, column2, preventScrolling) => {\n    if (isTabOrShiftTabPressed && (rowWrapState.wrapped && rowWrapState.flipped || preventViewportScroll)) {\n      preventViewportScroll = false;\n      preventScrolling.value = true;\n    }\n\n    if (isSavingCoordsEnabled) {\n      recentlyAddedFocusCoords = hot.getSelectedRangeLast()?.highlight;\n    }\n  });\n  hot.addHook('beforeRowWrap', (interruptedByAutoInsertMode, newCoords, isFlipped) => {\n    rowWrapState.wrapped = true;\n    rowWrapState.flipped = isFlipped;\n  });\n\n  /**\n   * Unselects the cell and deactivates the table.\n   */\n  function deactivateTable() {\n    rowWrapState.wrapped = false;\n    rowWrapState.flipped = false;\n    hot.deselectCell();\n    hot.unlisten();\n  }\n\n  const shortcutOptions = {\n    keys: [['Tab'], ['Shift', 'Tab']],\n    preventDefault: false,\n    stopPropagation: false,\n    relativeToGroup: GRID_GROUP,\n    group: 'focusCatcher',\n  };\n\n  hot.getShortcutManager()\n    .getContext('grid')\n    .addShortcuts([\n      {\n        ...shortcutOptions,\n        callback: () => {\n          const { tabNavigation } = hot.getSettings();\n\n          isTabOrShiftTabPressed = true;\n\n          if (hot.getSelectedRangeLast() && !tabNavigation) {\n            isSavingCoordsEnabled = false;\n          }\n\n          if (!tabNavigation) {\n            preventViewportScroll = true;\n          }\n        },\n        position: 'before',\n      },\n      {\n        ...shortcutOptions,\n        callback: (event) => {\n          const { tabNavigation, autoWrapRow } = hot.getSettings();\n\n          isTabOrShiftTabPressed = false;\n          isSavingCoordsEnabled = true;\n\n          if (\n            !tabNavigation ||\n            !hot.selection.isSelected() ||\n            autoWrapRow && rowWrapState.wrapped && rowWrapState.flipped ||\n            !autoWrapRow && rowWrapState.wrapped\n          ) {\n            if (autoWrapRow && rowWrapState.wrapped && rowWrapState.flipped) {\n              recentlyAddedFocusCoords = event.shiftKey\n                ? getMostTopStartPosition(hot) : getMostBottomEndPosition(hot);\n            }\n\n            deactivateTable();\n\n            return false;\n          }\n\n          // if the selection is still within the table's range then prevent default action\n          event.preventDefault();\n        },\n        position: 'after',\n      }\n    ]);\n}\n\n/**\n * Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {CellCoords|null}\n */\nfunction getMostTopStartPosition(hot) {\n  const { rowIndexMapper, columnIndexMapper } = hot;\n  const { navigableHeaders } = hot.getSettings();\n  let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;\n  let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;\n\n  if (topRow === 0) {\n    topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);\n  }\n\n  if (startColumn === 0) {\n    startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);\n  }\n\n  if (topRow === null || startColumn === null) {\n    return null;\n  }\n\n  return hot._createCellCoords(topRow, startColumn);\n}\n\n/**\n * Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {CellCoords|null}\n */\nfunction getMostBottomEndPosition(hot) {\n  const { rowIndexMapper, columnIndexMapper } = hot;\n  const { navigableHeaders } = hot.getSettings();\n  let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;\n  let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;\n\n  if (bottomRow < 0) {\n    if (!navigableHeaders || hot.countColHeaders() === 0) {\n      return null;\n    }\n\n    bottomRow = -1;\n  }\n\n  if (endColumn < 0) {\n    if (!navigableHeaders || hot.countColHeaders() === 0) {\n      return null;\n    }\n\n    endColumn = -1;\n  }\n\n  return hot._createCellCoords(\n    rowIndexMapper.getVisualFromRenderableIndex(bottomRow) ?? bottomRow,\n    columnIndexMapper.getVisualFromRenderableIndex(endColumn) ?? endColumn,\n  );\n}\n\n/**\n * Normalizes the coordinates (clamps to nearest visible cell position within dataset range).\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {function(Coords | undefined): Coords | null}\n */\nfunction normalizeCoordsIfNeeded(hot) {\n  return (coords) => {\n    if (!coords) {\n      return null;\n    }\n\n    const mostTopStartCoords = getMostTopStartPosition(hot);\n    const mostBottomEndCoords = getMostBottomEndPosition(hot);\n\n    if (coords.col < mostTopStartCoords.col) {\n      coords.col = mostTopStartCoords.col;\n    }\n    if (coords.col > mostBottomEndCoords.col) {\n      coords.col = mostBottomEndCoords.col;\n    }\n\n    if (coords.row < mostTopStartCoords.row) {\n      coords.row = mostTopStartCoords.row;\n    }\n    if (coords.row > mostBottomEndCoords.row) {\n      coords.row = mostBottomEndCoords.row;\n    }\n\n    return coords;\n  };\n}\n","import { shortcutsEditorContext } from './editor';\nimport { shortcutsGridContext } from './grid';\n\nexport * from './constants';\n\n/**\n * Register all shortcut contexts.\n *\n * @param {Handsontable} hotInstance The Handsontable instance.\n */\nexport function registerAllShortcutContexts(hotInstance) {\n  [\n    shortcutsGridContext,\n    shortcutsEditorContext,\n  ].forEach(context => context(hotInstance));\n}\n","import { EDITOR_EDIT_GROUP } from './constants';\nimport { createKeyboardShortcutCommandsPool } from './commands';\n\n/**\n * The context that defines a base shortcut list available for cells editors.\n *\n * @param {Handsontable} hot The Handsontable instance.\n */\nexport function shortcutsEditorContext(hot) {\n  const context = hot.getShortcutManager().addContext('editor');\n  const commandsPool = createKeyboardShortcutCommandsPool(hot);\n  const config = { group: EDITOR_EDIT_GROUP };\n\n  context.addShortcuts([{\n    keys: [['Enter'], ['Enter', 'Shift']],\n    callback: (event, keys) => commandsPool.editorCloseAndSaveByEnter(event, keys),\n  }, {\n    keys: [['Enter', 'Control/Meta'], ['Enter', 'Control/Meta', 'Shift']],\n    captureCtrl: true,\n    callback: (event, keys) => commandsPool.editorCloseAndSaveByEnter(event, keys),\n  }, {\n    keys: [['Tab'], ['Tab', 'Shift'], ['PageDown'], ['PageUp']],\n    forwardToContext: hot.getShortcutManager().getContext('grid'),\n    callback: (event, keys) => commandsPool.editorCloseAndSave(event, keys),\n  }, {\n    keys: [['ArrowDown'], ['ArrowUp'], ['ArrowLeft'], ['ArrowRight']],\n    preventDefault: false,\n    callback: (event, keys) => commandsPool.editorCloseAndSaveByArrowKeys(event, keys),\n  }, {\n    keys: [['Escape'], ['Escape', 'Control/Meta']],\n    callback: () => commandsPool.editorCloseWithoutSaving(),\n  }], config);\n}\n","/**\n * Group name for keyboard shortcuts that are active when the cell is selected.\n */\nexport const GRID_GROUP = 'gridDefault';\n/**\n * Group name for keyboard shortcuts that are active when the cell editor is active.\n */\nexport const EDITOR_EDIT_GROUP = 'editorManager.handlingEditor';\n","import { getAllCommands as getAllEditorCommands } from './editor';\nimport { getAllCommands as getAllSelectionExtendCommands } from './extendCellsSelection';\nimport { getAllCommands as getAllSelectionMoveCommands } from './moveCellSelection';\nimport { command as emptySelectedCells } from './emptySelectedCells';\nimport { command as scrollToFocusedCell } from './scrollToFocusedCell';\nimport { command as selectAllCells } from './selectAllCells';\nimport { command as selectAllCellsAndHeaders } from './selectAllCellsAndHeaders';\nimport { command as populateSelectedCellsData } from './populateSelectedCellsData';\n\nconst allCommands = [\n  ...getAllEditorCommands(),\n  ...getAllSelectionExtendCommands(),\n  ...getAllSelectionMoveCommands(),\n  emptySelectedCells,\n  scrollToFocusedCell,\n  selectAllCells,\n  selectAllCellsAndHeaders,\n  populateSelectedCellsData,\n];\n\n/**\n * Prepares and creates an object with all available commands to trigger.\n *\n * @param {Handsontable} hot The Handsontable instance.\n * @returns {object}\n */\nexport function createKeyboardShortcutCommandsPool(hot) {\n  const commands = {};\n\n  allCommands.forEach(({ name, callback }) => {\n    commands[name] = (...args) => callback(hot, ...args);\n  });\n\n  return commands;\n}\n","import { command as closeAndSave } from './closeAndSave';\nimport { command as closeAndSaveByArrowKeys } from './closeAndSaveByArrowKeys';\nimport { command as closeAndSaveByEnter } from './closeAndSaveByEnter';\nimport { command as closeWithoutSaving } from './closeWithoutSaving';\nimport { command as fastOpen } from './fastOpen';\nimport { command as open } from './open';\n\n/**\n * Returns complete list of the shortcut commands for the cells editing feature.\n *\n * @returns {Function[]}\n */\nexport function getAllCommands() {\n  return [\n    closeAndSave,\n    closeAndSaveByArrowKeys,\n    closeAndSaveByEnter,\n    closeWithoutSaving,\n    fastOpen,\n    open,\n  ];\n}\n","export const command = {\n  name: 'editorCloseAndSave',\n  callback(hot) {\n    const editorManager = hot._getEditorManager();\n\n    editorManager.closeEditorAndSaveChanges();\n  },\n};\n","import { EDITOR_STATE } from '../../../editors/baseEditor';\n\nexport const command = {\n  name: 'editorCloseAndSaveByArrowKeys',\n  callback(hot, event, keys) {\n    const editorManager = hot._getEditorManager();\n    const activeEditor = editorManager.getActiveEditor();\n\n    if (activeEditor.isInFullEditMode() && activeEditor.state === EDITOR_STATE.EDITING) {\n      return;\n    }\n\n    editorManager.closeEditorAndSaveChanges();\n\n    if (hot.getSelected()) {\n      if (keys.includes('arrowdown')) {\n        hot.selection.transformStart(1, 0);\n\n      } else if (keys.includes('arrowup')) {\n        hot.selection.transformStart(-1, 0);\n\n      } else if (keys.includes('arrowleft')) {\n        hot.selection.transformStart(0, -1 * hot.getDirectionFactor());\n\n      } else if (keys.includes('arrowright')) {\n        hot.selection.transformStart(0, hot.getDirectionFactor());\n      }\n    }\n\n    event.preventDefault();\n  },\n};\n","export {\n  EDITOR_STATE,\n  EDITOR_TYPE,\n  BaseEditor,\n} from './baseEditor';\n","import { stringify } from '../../helpers/mixed';\nimport { mixin } from '../../helpers/object';\nimport hooksRefRegisterer from '../../mixins/hooksRefRegisterer';\nimport {\n  getScrollbarWidth,\n  offset,\n  hasVerticalScrollbar,\n  hasHorizontalScrollbar,\n  outerWidth,\n  outerHeight,\n  getComputedStyle,\n} from '../../helpers/dom/element';\n\nexport const EDITOR_TYPE = 'base';\nexport const EDITOR_STATE = Object.freeze({\n  VIRGIN: 'STATE_VIRGIN', // before editing\n  EDITING: 'STATE_EDITING',\n  WAITING: 'STATE_WAITING', // waiting for async validation\n  FINISHED: 'STATE_FINISHED'\n});\n\n/**\n * @class BaseEditor\n */\nexport class BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * A reference to the source instance of the Handsontable.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Editor's state.\n   *\n   * @type {string}\n   */\n  state = EDITOR_STATE.VIRGIN;\n  /**\n   * Flag to store information about editor's opening status.\n   *\n   * @private\n   *\n   * @type {boolean}\n   */\n  _opened = false;\n  /**\n   * Defines the editor's editing mode. When false, then an editor works in fast editing mode.\n   *\n   * @private\n   *\n   * @type {boolean}\n   */\n  _fullEditMode = false;\n  /**\n   * Callback to call after closing editor.\n   *\n   * @type {Function}\n   */\n  _closeCallback = null;\n  /**\n   * Currently rendered cell's TD element.\n   *\n   * @type {HTMLTableCellElement}\n   */\n  TD = null;\n  /**\n   * Visual row index.\n   *\n   * @type {number}\n   */\n  row = null;\n  /**\n   * Visual column index.\n   *\n   * @type {number}\n   */\n  col = null;\n  /**\n   * Column property name or a column index, if datasource is an array of arrays.\n   *\n   * @type {number|string}\n   */\n  prop = null;\n  /**\n   * Original cell's value.\n   *\n   * @type {*}\n   */\n  originalValue = null;\n  /**\n   * Object containing the cell's properties.\n   *\n   * @type {object}\n   */\n  cellProperties = null;\n\n  /**\n   * @param {Handsontable} hotInstance A reference to the source instance of the Handsontable.\n   */\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n    this.init();\n  }\n\n  /**\n   * Fires callback after closing editor.\n   *\n   * @private\n   * @param {boolean} result The editor value.\n   */\n  _fireCallbacks(result) {\n    if (this._closeCallback) {\n      this._closeCallback(result);\n      this._closeCallback = null;\n    }\n  }\n\n  /**\n   * Initializes an editor's intance.\n   */\n  init() {}\n\n  /**\n   * Required method to get current value from editable element.\n   */\n  getValue() {\n    throw Error('Editor getValue() method unimplemented');\n  }\n\n  /**\n   * Required method to set new value into editable element.\n   */\n  setValue() {\n    throw Error('Editor setValue() method unimplemented');\n  }\n\n  /**\n   * Required method to open editor.\n   */\n  open() {\n    throw Error('Editor open() method unimplemented');\n  }\n\n  /**\n   * Required method to close editor.\n   */\n  close() {\n    throw Error('Editor close() method unimplemented');\n  }\n\n  /**\n   * Prepares editor's meta data.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    this.TD = td;\n    this.row = row;\n    this.col = col;\n    this.prop = prop;\n    this.originalValue = value;\n    this.cellProperties = cellProperties;\n    this.state = this.isOpened() ? this.state : EDITOR_STATE.VIRGIN;\n  }\n\n  /**\n   * Fallback method to provide extendable editors in ES5.\n   *\n   * @returns {Function}\n   */\n  extend() {\n    return (class Editor extends this.constructor {});\n  }\n\n  /**\n   * Saves value from editor into data storage.\n   *\n   * @param {*} value The editor value.\n   * @param {boolean} ctrlDown If `true`, applies value to each cell in the last selected range.\n   */\n  saveValue(value, ctrlDown) {\n    let visualRowFrom;\n    let visualColumnFrom;\n    let visualRowTo;\n    let visualColumnTo;\n\n    // if ctrl+enter and multiple cells selected, behave like Excel (finish editing and apply to all cells)\n    if (ctrlDown) {\n      const selectedLast = this.hot.getSelectedLast();\n\n      visualRowFrom = Math.max(Math.min(selectedLast[0], selectedLast[2]), 0); // Math.max eliminate headers coords.\n      visualColumnFrom = Math.max(Math.min(selectedLast[1], selectedLast[3]), 0); // Math.max eliminate headers coords.\n      visualRowTo = Math.max(selectedLast[0], selectedLast[2]);\n      visualColumnTo = Math.max(selectedLast[1], selectedLast[3]);\n\n    } else {\n      [visualRowFrom, visualColumnFrom, visualRowTo, visualColumnTo] = [this.row, this.col, null, null];\n    }\n\n    const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowFrom, visualColumnFrom);\n\n    if (Array.isArray(modifiedCellCoords)) {\n      [visualRowFrom, visualColumnFrom] = modifiedCellCoords;\n    }\n\n    // Saving values using the modified coordinates.\n    this.hot.populateFromArray(visualRowFrom, visualColumnFrom, value, visualRowTo, visualColumnTo, 'edit');\n  }\n\n  /**\n   * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n   *\n   * @param {*} newInitialValue The initial editor value.\n   * @param {Event} event The keyboard event object.\n   */\n  beginEditing(newInitialValue, event) {\n    if (this.state !== EDITOR_STATE.VIRGIN) {\n      return;\n    }\n\n    const hotInstance = this.hot;\n    // We have to convert visual indexes into renderable indexes\n    // due to hidden columns don't participate in the rendering process\n    const renderableRowIndex = hotInstance.rowIndexMapper.getRenderableFromVisualIndex(this.row);\n    const renderableColumnIndex = hotInstance.columnIndexMapper.getRenderableFromVisualIndex(this.col);\n\n    hotInstance.view.scrollViewport(hotInstance._createCellCoords(renderableRowIndex, renderableColumnIndex));\n    this.state = EDITOR_STATE.EDITING;\n\n    // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,\n    // otherwise IME (editor for Asia users) doesn't work.\n    if (this.isInFullEditMode()) {\n      const stringifiedInitialValue = typeof newInitialValue === 'string' ?\n        newInitialValue : stringify(this.originalValue);\n\n      this.setValue(stringifiedInitialValue);\n    }\n\n    this.open(event);\n    this._opened = true;\n    this.focus();\n\n    // only rerender the selections (FillHandle should disappear when beginEditing is triggered)\n    hotInstance.view.render();\n\n    hotInstance.runHooks('afterBeginEditing', this.row, this.col);\n  }\n\n  /**\n   * Finishes editing and start saving or restoring process for editing cell or last selected range.\n   *\n   * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n   * @param {Function} callback The callback function, fired after editor closing.\n   */\n  finishEditing(restoreOriginalValue, ctrlDown, callback) {\n    let val;\n\n    if (callback) {\n      const previousCloseCallback = this._closeCallback;\n\n      this._closeCallback = (result) => {\n        if (previousCloseCallback) {\n          previousCloseCallback(result);\n        }\n\n        callback(result);\n        this.hot.view.render();\n      };\n    }\n\n    if (this.isWaiting()) {\n      return;\n    }\n\n    if (this.state === EDITOR_STATE.VIRGIN) {\n      this.hot._registerTimeout(() => {\n        this._fireCallbacks(true);\n      });\n\n      return;\n    }\n\n    if (this.state === EDITOR_STATE.EDITING) {\n      if (restoreOriginalValue) {\n        this.cancelChanges();\n        this.hot.view.render();\n\n        return;\n      }\n\n      const value = this.getValue();\n\n      if (this.cellProperties.trimWhitespace) {\n        // We trim only string values\n        val = [\n          [typeof value === 'string' ? String.prototype.trim.call(value || '') : value]\n        ];\n      } else {\n        val = [\n          [value]\n        ];\n      }\n\n      this.state = EDITOR_STATE.WAITING;\n      this.saveValue(val, ctrlDown);\n\n      if (this.hot.getCellValidator(this.cellProperties)) {\n        this.hot.addHookOnce('postAfterValidate', (result) => {\n          this.state = EDITOR_STATE.FINISHED;\n          this.discardEditor(result);\n        });\n      } else {\n        this.state = EDITOR_STATE.FINISHED;\n        this.discardEditor(true);\n      }\n    }\n  }\n\n  /**\n   * Finishes editing without singout saving value.\n   */\n  cancelChanges() {\n    this.state = EDITOR_STATE.FINISHED;\n    this.discardEditor();\n  }\n\n  /**\n   * Verifies result of validation or closes editor if user's cancelled changes.\n   *\n   * @param {boolean|undefined} result If `false` and the cell using allowInvalid option,\n   *                                   then an editor won't be closed until validation is passed.\n   */\n  discardEditor(result) {\n    if (this.state !== EDITOR_STATE.FINISHED) {\n      return;\n    }\n\n    // validator was defined and failed\n    if (result === false && this.cellProperties.allowInvalid !== true) {\n      this.hot.selectCell(this.row, this.col);\n      this.focus();\n      this.state = EDITOR_STATE.EDITING;\n      this._fireCallbacks(false);\n\n    } else {\n      this.close();\n      this._opened = false;\n      this._fullEditMode = false;\n      this.state = EDITOR_STATE.VIRGIN;\n      this._fireCallbacks(true);\n\n      const shortcutManager = this.hot.getShortcutManager();\n\n      shortcutManager.setActiveContextName('grid');\n    }\n  }\n\n  /**\n   * Switch editor into full edit mode. In this state navigation keys don't close editor. This mode is activated\n   * automatically after hit ENTER or F2 key on the cell or while editing cell press F2 key.\n   */\n  enableFullEditMode() {\n    this._fullEditMode = true;\n  }\n\n  /**\n   * Checks if editor is in full edit mode.\n   *\n   * @returns {boolean}\n   */\n  isInFullEditMode() {\n    return this._fullEditMode;\n  }\n\n  /**\n   * Returns information whether the editor is open.\n   *\n   * @returns {boolean}\n   */\n  isOpened() {\n    return this._opened;\n  }\n\n  /**\n   * Returns information whether the editor is waiting, eg.: for async validation.\n   *\n   * @returns {boolean}\n   */\n  isWaiting() {\n    return this.state === EDITOR_STATE.WAITING;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Gets the object that provides information about the edited cell size and its position\n   * relative to the table viewport.\n   *\n   * The rectangle has six integer properties:\n   *  - `top` The top position relative to the table viewport\n   *  - `start` The left (or right in RTL) position relative to the table viewport\n   *  - `width` The cell's current width;\n   *  - `maxWidth` The maximum cell's width after which the editor goes out of the table viewport\n   *  - `height` The cell's current height;\n   *  - `maxHeight` The maximum cell's height after which the editor goes out of the table viewport\n   *\n   * @returns {{top: number, start: number, width: number, maxWidth: number, height: number, maxHeight: number} | undefined}\n   */\n  getEditedCellRect() {\n    const TD = this.getEditedCell();\n\n    // TD is outside of the viewport.\n    if (!TD) {\n      return;\n    }\n\n    const { wtOverlays, wtViewport } = this.hot.view._wt;\n    const rootWindow = this.hot.rootWindow;\n    const currentOffset = offset(TD);\n    const cellWidth = outerWidth(TD);\n    const containerOffset = offset(this.hot.rootElement);\n    const containerWidth = outerWidth(this.hot.rootElement);\n    const scrollableContainerTop = wtOverlays.topOverlay.holder;\n    const scrollableContainerLeft = wtOverlays.inlineStartOverlay.holder;\n    const containerScrollTop = scrollableContainerTop !== rootWindow ?\n      scrollableContainerTop.scrollTop : 0;\n    const containerScrollLeft = scrollableContainerLeft !== rootWindow ?\n      scrollableContainerLeft.scrollLeft : 0;\n    const gridMostRightPos = rootWindow.innerWidth - containerOffset.left - containerWidth;\n    const { wtTable: overlayTable } = wtOverlays.getParentOverlay(TD) ?? this.hot.view._wt;\n    const overlayName = overlayTable.name;\n\n    const scrollTop = ['master', 'inline_start'].includes(overlayName) ? containerScrollTop : 0;\n    const scrollLeft = ['master', 'top', 'bottom'].includes(overlayName) ? containerScrollLeft : 0;\n\n    // If colHeaders is disabled, cells in the first row have border-top\n    const editTopModifier = currentOffset.top === containerOffset.top ? 0 : 1;\n\n    let topPos = currentOffset.top - containerOffset.top - editTopModifier - scrollTop;\n    let inlineStartPos = 0;\n\n    if (this.hot.isRtl()) {\n      inlineStartPos = rootWindow.innerWidth - currentOffset.left - cellWidth - gridMostRightPos - 1 + scrollLeft;\n    } else {\n      inlineStartPos = currentOffset.left - containerOffset.left - 1 - scrollLeft;\n    }\n\n    // When the scrollable element is Window object then the editor position needs to be compensated\n    // by the overlays' position (position relative to the table viewport). In other cases, the overlay's\n    // position always returns 0.\n    if (['top', 'top_inline_start_corner'].includes(overlayName)) {\n      topPos += wtOverlays.topOverlay.getOverlayOffset();\n    }\n\n    if (['inline_start', 'top_inline_start_corner'].includes(overlayName)) {\n      inlineStartPos += Math.abs(wtOverlays.inlineStartOverlay.getOverlayOffset());\n    }\n\n    const hasColumnHeaders = this.hot.hasColHeaders();\n    const renderableRow = this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row);\n    const renderableColumn = this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col);\n    const nrOfRenderableRowIndexes = this.hot.rowIndexMapper.getRenderableIndexesLength();\n    const firstRowIndexOfTheBottomOverlay = nrOfRenderableRowIndexes - this.hot.view._wt.getSetting('fixedRowsBottom');\n\n    if (hasColumnHeaders && renderableRow <= 0 || renderableRow === firstRowIndexOfTheBottomOverlay) {\n      topPos += 1;\n    }\n\n    if (renderableColumn <= 0) {\n      inlineStartPos += 1;\n    }\n\n    const firstRowOffset = wtViewport.rowsRenderCalculator.startPosition;\n    const firstColumnOffset = wtViewport.columnsRenderCalculator.startPosition;\n    const horizontalScrollPosition = Math.abs(wtOverlays.inlineStartOverlay.getScrollPosition());\n    const verticalScrollPosition = wtOverlays.topOverlay.getScrollPosition();\n    const scrollbarWidth = getScrollbarWidth(this.hot.rootDocument);\n    let cellTopOffset = TD.offsetTop;\n\n    if (['inline_start', 'master'].includes(overlayName)) {\n      cellTopOffset += firstRowOffset - verticalScrollPosition;\n    }\n\n    if (['bottom', 'bottom_inline_start_corner'].includes(overlayName)) {\n      const {\n        wtViewport: bottomWtViewport,\n        wtTable: bottomWtTable,\n      } = wtOverlays.bottomOverlay.clone;\n\n      cellTopOffset += bottomWtViewport.getWorkspaceHeight() - bottomWtTable.getHeight() - scrollbarWidth;\n    }\n\n    let cellStartOffset = TD.offsetLeft;\n\n    if (this.hot.isRtl()) {\n      if (cellStartOffset >= 0) {\n        cellStartOffset = overlayTable.getWidth() - TD.offsetLeft;\n      } else {\n        // The `offsetLeft` returns negative values when the parent offset element has position relative\n        // (it happens when on the cell the selection is applied - the `area` CSS class).\n        // When it happens the `offsetLeft` value is calculated from the right edge of the parent element.\n        cellStartOffset = Math.abs(cellStartOffset);\n      }\n\n      cellStartOffset += firstColumnOffset - horizontalScrollPosition - cellWidth;\n\n    } else if (['top', 'master', 'bottom'].includes(overlayName)) {\n      cellStartOffset += firstColumnOffset - horizontalScrollPosition;\n    }\n\n    const cellComputedStyle = getComputedStyle(this.TD, this.hot.rootWindow);\n    const borderPhysicalWidthProp = this.hot.isRtl() ? 'borderRightWidth' : 'borderLeftWidth';\n    const inlineStartBorderCompensation = parseInt(cellComputedStyle[borderPhysicalWidthProp], 10) > 0 ? 0 : 1;\n    const topBorderCompensation = parseInt(cellComputedStyle.borderTopWidth, 10) > 0 ? 0 : 1;\n    const width = outerWidth(TD) + inlineStartBorderCompensation;\n    const height = outerHeight(TD) + topBorderCompensation;\n    const actualVerticalScrollbarWidth = hasVerticalScrollbar(scrollableContainerTop) ? scrollbarWidth : 0;\n    const actualHorizontalScrollbarWidth = hasHorizontalScrollbar(scrollableContainerLeft) ? scrollbarWidth : 0;\n    const maxWidth = this.hot.view.maximumVisibleElementWidth(cellStartOffset) -\n      actualVerticalScrollbarWidth + inlineStartBorderCompensation;\n    const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) -\n      actualHorizontalScrollbarWidth + topBorderCompensation, 23);\n\n    return {\n      top: topPos,\n      start: inlineStartPos,\n      height,\n      maxHeight,\n      width,\n      maxWidth,\n    };\n  }\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  /**\n   * Gets className of the edited cell if exist.\n   *\n   * @returns {string}\n   */\n  getEditedCellsLayerClass() {\n    const editorSection = this.checkEditorSection();\n\n    switch (editorSection) {\n      case 'inline-start':\n        return 'ht_clone_left ht_clone_inline_start';\n      case 'bottom':\n        return 'ht_clone_bottom';\n      case 'bottom-inline-start-corner':\n        return 'ht_clone_bottom_left_corner ht_clone_bottom_inline_start_corner';\n      case 'top':\n        return 'ht_clone_top';\n      case 'top-inline-start-corner':\n        return 'ht_clone_top_left_corner ht_clone_top_inline_start_corner';\n      default:\n        return 'ht_clone_master';\n    }\n  }\n\n  /**\n   * Gets HTMLTableCellElement of the edited cell if exist.\n   *\n   * @returns {HTMLTableCellElement|null}\n   */\n  getEditedCell() {\n    return this.hot.getCell(this.row, this.col, true);\n  }\n\n  /**\n   * Returns name of the overlay, where editor is placed.\n   *\n   * @private\n   * @returns {string}\n   */\n  checkEditorSection() {\n    const totalRows = this.hot.countRows();\n    let section = '';\n\n    if (this.row < this.hot.getSettings().fixedRowsTop) {\n      if (this.col < this.hot.getSettings().fixedColumnsStart) {\n        section = 'top-inline-start-corner';\n      } else {\n        section = 'top';\n      }\n    } else if (this.hot.getSettings().fixedRowsBottom &&\n               this.row >= totalRows - this.hot.getSettings().fixedRowsBottom) {\n      if (this.col < this.hot.getSettings().fixedColumnsStart) {\n        section = 'bottom-inline-start-corner';\n      } else {\n        section = 'bottom';\n      }\n    } else if (this.col < this.hot.getSettings().fixedColumnsStart) {\n      section = 'inline-start';\n    }\n\n    return section;\n  }\n}\n\nmixin(BaseEditor, hooksRefRegisterer);\n","import { arrayEach } from './../helpers/array';\nimport { defineGetter, objectEach } from './../helpers/object';\n\nconst MIXIN_NAME = 'hooksRefRegisterer';\n\n/**\n * Mixin object to extend objects functionality for auto registering hooks in an Handsontable instance.\n *\n * @type {object}\n */\nconst hooksRefRegisterer = {\n  /**\n   * Internal hooks storage.\n   */\n  _hooksStorage: Object.create(null),\n\n  /**\n   * Add hook to the collection.\n   *\n   * @param {string} key The hook name.\n   * @param {Function} callback The hook callback.\n   * @returns {object}\n   */\n  addHook(key, callback) {\n    if (!this._hooksStorage[key]) {\n      this._hooksStorage[key] = [];\n    }\n\n    this.hot.addHook(key, callback);\n    this._hooksStorage[key].push(callback);\n\n    return this;\n  },\n\n  /**\n   * Remove all hooks listeners by hook name.\n   *\n   * @param {string} key The hook name.\n   */\n  removeHooksByKey(key) {\n    arrayEach(this._hooksStorage[key] || [], (callback) => {\n      this.hot.removeHook(key, callback);\n    });\n  },\n\n  /**\n   * Clear all added hooks.\n   */\n  clearHooks() {\n    objectEach(this._hooksStorage, (callbacks, name) => this.removeHooksByKey(name));\n\n    this._hooksStorage = {};\n  },\n};\n\ndefineGetter(hooksRefRegisterer, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default hooksRefRegisterer;\n","export const command = {\n  name: 'editorCloseAndSaveByEnter',\n  callback(hot, event) {\n    const editorManager = hot._getEditorManager();\n\n    editorManager.closeEditorAndSaveChanges(event.ctrlKey || event.metaKey);\n    editorManager.moveSelectionAfterEnter(event);\n  },\n};\n","export const command = {\n  name: 'editorCloseWithoutSaving',\n  callback(hot) {\n    const editorManager = hot._getEditorManager();\n\n    editorManager.closeEditorAndRestoreOriginalValue(hot.getShortcutManager().isCtrlPressed());\n    editorManager.activeEditor.focus();\n  },\n};\n","export const command = {\n  name: 'editorFastOpen',\n  callback(hot, event) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (highlight.isHeader()) {\n      return;\n    }\n\n    hot._getEditorManager().openEditor(null, event, true);\n  },\n};\n","import { stopImmediatePropagation } from '../../../helpers/dom/event';\n\nexport const command = {\n  name: 'editorOpen',\n  callback(hot, event, keys) {\n    const editorManager = hot._getEditorManager();\n    const selectedRange = hot.getSelectedRangeLast();\n    const { highlight } = selectedRange;\n\n    // supports for navigating with enter key when multiple cells are selected\n    if (\n      hot.selection.isMultiple() &&\n      !selectedRange.isHeader() &&\n      hot.countRenderedCols() > 0 &&\n      hot.countRenderedRows() > 0\n    ) {\n      const settings = hot.getSettings();\n      const enterMoves = typeof settings.enterMoves === 'function'\n        ? settings.enterMoves(event)\n        : settings.enterMoves;\n\n      if (keys.includes('shift')) {\n        hot.selection.transformFocus(-enterMoves.row, -enterMoves.col);\n      } else {\n        hot.selection.transformFocus(enterMoves.row, enterMoves.col);\n      }\n\n      return;\n    }\n\n    if (highlight.isHeader()) {\n      return;\n    }\n\n    // supports editor opening with enter key\n    if (hot.getSettings().enterBeginsEditing) {\n      if (editorManager.cellProperties.readOnly) {\n        editorManager.moveSelectionAfterEnter(event);\n\n      } else {\n        editorManager.openEditor(null, event, true);\n      }\n\n    } else {\n      editorManager.moveSelectionAfterEnter(event);\n    }\n\n    stopImmediatePropagation(event); // required by HandsontableEditor\n  },\n};\n","import { command as down } from './down';\nimport { command as downByViewportHeight } from './downByViewportHeight';\nimport { command as left } from './left';\nimport { command as right } from './right';\nimport { command as toColumns } from './toColumns';\nimport { command as toMostBottom } from './toMostBottom';\nimport { command as toMostInlineEnd } from './toMostInlineEnd';\nimport { command as toMostInlineStart } from './toMostInlineStart';\nimport { command as toMostLeft } from './toMostLeft';\nimport { command as toMostRight } from './toMostRight';\nimport { command as toMostTop } from './toMostTop';\nimport { command as toRows } from './toRows';\nimport { command as up } from './up';\nimport { command as upByViewportHeight } from './upByViewportHeight';\n\n/**\n * Returns complete list of the shortcut commands for the cells selection extending feature.\n *\n * @returns {Function[]}\n */\nexport function getAllCommands() {\n  return [\n    down,\n    downByViewportHeight,\n    left,\n    right,\n    toColumns,\n    toMostBottom,\n    toMostInlineEnd,\n    toMostInlineStart,\n    toMostLeft,\n    toMostRight,\n    toMostTop,\n    toRows,\n    up,\n    upByViewportHeight,\n  ];\n}\n","export const command = {\n  name: 'extendCellsSelectionDown',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByColumnHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByRowHeader())\n    ) {\n      hot.selection.transformEnd(1, 0);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionDownByViewportHeight',\n  callback(hot) {\n    const { to } = hot.getSelectedRangeLast();\n    const nextRowIndexToSelect = Math.min(to.row + hot.countVisibleRows(), hot.countRows() - 1);\n    const row = hot.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, -1);\n\n    if (row !== null) {\n      const coords = hot._createCellCoords(row, to.col);\n      const scrollPadding = to.row - hot.view.getFirstFullyVisibleRow();\n      const nextVerticalScroll = Math.min(coords.row - scrollPadding, hot.countRows() - 1);\n\n      hot.selection.setRangeEnd(coords);\n      hot.scrollViewportTo({\n        row: nextVerticalScroll,\n        verticalSnap: 'top',\n        horizontalSnap: 'start',\n      });\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionLeft',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByColumnHeader())\n    ) {\n      hot.selection.transformEnd(0, -1 * hot.getDirectionFactor());\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionRight',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByColumnHeader())\n    ) {\n      hot.selection.transformEnd(0, hot.getDirectionFactor());\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToColumns',\n  callback(hot) {\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (hot.selection.isSelectedByRowHeader()) {\n      hot.selection.selectAll(true, true);\n    } else {\n      hot.selectColumns(from.col, to.col, highlight);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostBottom',\n  callback(hot) {\n    const { selection, rowIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByRowHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const row = rowIndexMapper.getNearestNotHiddenIndex(hot.countRows() - 1, -1);\n      const newFrom = from.clone();\n\n      newFrom.row = highlight.row;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the row highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByRowHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(row, to.col));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostInlineEnd',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      highlight.isCell()\n    ) {\n      const column = columnIndexMapper.getNearestNotHiddenIndex(hot.countCols() - 1, -1);\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostInlineStart',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      highlight.isCell()\n    ) {\n      const fixedColumns = parseInt(hot.getSettings().fixedColumnsStart, 10);\n      const column = columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostLeft',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByColumnHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const column = columnIndexMapper.getNearestNotHiddenIndex(\n        ...(hot.isRtl() ? [hot.countCols() - 1, -1] : [0, 1])\n      );\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the column highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByColumnHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostRight',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByColumnHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const column = columnIndexMapper.getNearestNotHiddenIndex(\n        ...(hot.isRtl() ? [0, 1] : [hot.countCols() - 1, -1])\n      );\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the column highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByColumnHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostTop',\n  callback(hot) {\n    const { selection, rowIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByRowHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const row = rowIndexMapper.getNearestNotHiddenIndex(0, 1);\n      const newFrom = from.clone();\n\n      newFrom.row = highlight.row;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the row highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByRowHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(row, to.col));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToRows',\n  callback(hot) {\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (hot.selection.isSelectedByColumnHeader()) {\n      hot.selection.selectAll(true, true);\n    } else {\n      hot.selectRows(from.row, to.row, highlight);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionUp',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByColumnHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByRowHeader())\n    ) {\n      hot.selection.transformEnd(-1, 0);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionUpByViewportHeight',\n  callback(hot) {\n    const { to } = hot.getSelectedRangeLast();\n    const nextRowIndexToSelect = Math.max(to.row - hot.countVisibleRows(), 0);\n    const row = hot.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, 1);\n\n    if (row !== null) {\n      const coords = hot._createCellCoords(row, to.col);\n      const scrollPadding = to.row - hot.view.getFirstFullyVisibleRow();\n      const nextVerticalScroll = Math.max(coords.row - scrollPadding, 0);\n\n      hot.selection.setRangeEnd(coords);\n      hot.scrollViewportTo({\n        row: nextVerticalScroll,\n        verticalSnap: 'top',\n        horizontalSnap: 'start',\n      });\n    }\n  },\n};\n","import { command as down } from './down';\nimport { command as downByViewportHeight } from './downByViewportHeight';\nimport { command as inlineEnd } from './inlineEnd';\nimport { command as inlineStart } from './inlineStart';\nimport { command as left } from './left';\nimport { command as right } from './right';\nimport { command as toMostBottom } from './toMostBottom';\nimport { command as toMostBottomInlineEnd } from './toMostBottomInlineEnd';\nimport { command as toMostInlineEnd } from './toMostInlineEnd';\nimport { command as toMostInlineStart } from './toMostInlineStart';\nimport { command as toMostLeft } from './toMostLeft';\nimport { command as toMostRight } from './toMostRight';\nimport { command as toMostTop } from './toMostTop';\nimport { command as toMostTopInlineStart } from './toMostTopInlineStart';\nimport { command as up } from './up';\nimport { command as upByViewportHeight } from './upByViewportHeight';\n\n/**\n * Returns complete list of the shortcut commands for the cells moving feature.\n *\n * @returns {Function[]}\n */\nexport function getAllCommands() {\n  return [\n    down,\n    downByViewportHeight,\n    inlineEnd,\n    inlineStart,\n    left,\n    right,\n    toMostBottom,\n    toMostBottomInlineEnd,\n    toMostInlineEnd,\n    toMostInlineStart,\n    toMostLeft,\n    toMostRight,\n    toMostTop,\n    toMostTopInlineStart,\n    up,\n    upByViewportHeight,\n  ];\n}\n","export const command = {\n  name: 'moveCellSelectionDown',\n  callback({ selection }) {\n    selection.transformStart(1, 0);\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionDownByViewportHeight',\n  callback(hot) {\n    const { navigableHeaders } = hot.getSettings();\n    const columnHeadersCount = (navigableHeaders ? hot.countColHeaders() : 0);\n    const { row } = hot.getSelectedRangeLast().highlight;\n    let rowsStep = hot.countVisibleRows() + columnHeadersCount;\n\n    // if the last row is currently selected move the focus to the first row (if autoWrap is enabled)\n    if (row === hot.countRows() - 1) {\n      rowsStep = 1;\n\n    // if the next move would move the focus off the table calculate the delta to move the selection to\n    // the last row\n    } else if (row + rowsStep > hot.countRows()) {\n      rowsStep = hot.countRows() - row - 1;\n    }\n\n    hot.selection.transformStart(rowsStep, 0);\n\n    if (hot.getSelectedRangeLast().highlight.row < 0) {\n      hot.scrollViewportTo({ row: 0 });\n    }\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionInlineEnd',\n  callback(hot, event) {\n    const settings = hot.getSettings();\n    const selectedRange = hot.getSelectedRangeLast();\n    const tabMoves = typeof settings.tabMoves === 'function'\n      ? settings.tabMoves(event)\n      : settings.tabMoves;\n\n    if (\n      hot.selection.isMultiple() &&\n      !selectedRange.isHeader() &&\n      hot.countRenderedCols() > 0 &&\n      hot.countRenderedRows() > 0\n    ) {\n      hot.selection.transformFocus(-tabMoves.row, -tabMoves.col);\n    } else {\n      hot.selection.transformStart(-tabMoves.row, -tabMoves.col);\n    }\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionInlineStart',\n  callback(hot, event) {\n    const settings = hot.getSettings();\n    const selectedRange = hot.getSelectedRangeLast();\n    const tabMoves = typeof settings.tabMoves === 'function'\n      ? settings.tabMoves(event)\n      : settings.tabMoves;\n\n    if (\n      hot.selection.isMultiple() &&\n      !selectedRange.isHeader() &&\n      hot.countRenderedCols() > 0 &&\n      hot.countRenderedRows() > 0\n    ) {\n      hot.selection.transformFocus(tabMoves.row, tabMoves.col);\n    } else {\n      hot.selection.transformStart(tabMoves.row, tabMoves.col);\n    }\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionLeft',\n  callback(hot) {\n    hot.selection.transformStart(0, -1 * hot.getDirectionFactor());\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionRight',\n  callback(hot) {\n    hot.selection.transformStart(0, hot.getDirectionFactor());\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostBottom',\n  callback(hot) {\n    const { col } = hot.getSelectedRangeLast().highlight;\n    let row = hot.rowIndexMapper.getNearestNotHiddenIndex(hot.countRows() - 1, -1);\n\n    if (row === null) {\n      row = -1;\n    }\n\n    hot.selection.setRangeStart(hot._createCellCoords(row, col));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostBottomInlineEnd',\n  callback(hot) {\n    const { selection, rowIndexMapper, columnIndexMapper } = hot;\n    const fixedRows = parseInt(hot.getSettings().fixedRowsBottom, 10);\n    const row = rowIndexMapper.getNearestNotHiddenIndex(hot.countRows() - fixedRows - 1, -1);\n    const column = columnIndexMapper.getNearestNotHiddenIndex(hot.countCols() - 1, -1);\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostInlineEnd',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n\n    selection.setRangeStart(hot._createCellCoords(\n      hot.getSelectedRangeLast().highlight.row,\n      columnIndexMapper.getNearestNotHiddenIndex(hot.countCols() - 1, -1),\n    ));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostInlineStart',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const fixedColumns = parseInt(hot.getSettings().fixedColumnsStart, 10);\n    const row = hot.getSelectedRangeLast().highlight.row;\n    const column = columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostLeft',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const row = hot.getSelectedRangeLast().highlight.row;\n    let column = columnIndexMapper.getNearestNotHiddenIndex(\n      ...(hot.isRtl() ? [hot.countCols() - 1, -1] : [0, 1])\n    );\n\n    if (column === null) {\n      column = hot.isRtl() ? -1 : -hot.countRowHeaders();\n    }\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostRight',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { row } = hot.getSelectedRangeLast().highlight;\n    let column = columnIndexMapper.getNearestNotHiddenIndex(\n      ...(hot.isRtl() ? [0, 1] : [hot.countCols() - 1, -1])\n    );\n\n    if (column === null) {\n      column = hot.isRtl() ? -hot.countRowHeaders() : -1;\n    }\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostTop',\n  callback(hot) {\n    const { col } = hot.getSelectedRangeLast().highlight;\n    let row = hot.rowIndexMapper.getNearestNotHiddenIndex(0, 1);\n\n    if (row === null) {\n      row = -hot.countColHeaders();\n    }\n\n    hot.selection.setRangeStart(hot._createCellCoords(row, col));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostTopInlineStart',\n  callback(hot) {\n    const { selection, rowIndexMapper, columnIndexMapper } = hot;\n    const fixedRows = parseInt(hot.getSettings().fixedRowsTop, 10);\n    const fixedColumns = parseInt(hot.getSettings().fixedColumnsStart, 10);\n    const row = rowIndexMapper.getNearestNotHiddenIndex(fixedRows, 1);\n    const column = columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionUp',\n  callback({ selection }) {\n    selection.transformStart(-1, 0);\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionUpByViewportHight',\n  callback(hot) {\n    const { navigableHeaders } = hot.getSettings();\n    const columnHeadersCount = (navigableHeaders ? hot.countColHeaders() : 0);\n    const { row } = hot.getSelectedRangeLast().highlight;\n    let rowsStep = -(hot.countVisibleRows() + columnHeadersCount);\n\n    // if the first row is currently selected move the focus to the last row (if autoWrap is enabled)\n    if (row === -columnHeadersCount) {\n      rowsStep = -1;\n\n    // if the next move would move the focus off the table calculate the delta to move the selection to\n    // the first row\n    } else if (row + rowsStep < columnHeadersCount) {\n      rowsStep = -(row + columnHeadersCount);\n    }\n\n    hot.selection.transformStart(rowsStep, 0);\n\n    if (hot.getSelectedRangeLast().highlight.row < 0) {\n      hot.scrollViewportTo({ row: 0 });\n    }\n  },\n};\n","export const command = {\n  name: 'emptySelectedCells',\n  callback(hot) {\n    hot.emptySelectedCells();\n    hot._getEditorManager().prepareEditor();\n  },\n};\n","export const command = {\n  name: 'scrollToFocusedCell',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n    const firstVisibleRow = hot.view.getFirstFullyVisibleRow() - 1;\n    const firstVisibleColumn = hot.view.getFirstFullyVisibleColumn() - 1;\n    const lastVisibleRow = hot.view.getLastFullyVisibleRow() + 1;\n    const lastVisibleColumn = hot.view.getLastFullyVisibleColumn() + 1;\n\n    const visibleCoordsFrom = hot._createCellCoords(firstVisibleRow, firstVisibleColumn);\n    const visibleCoordsTo = hot._createCellCoords(lastVisibleRow, lastVisibleColumn);\n    const visibleRange = hot._createCellRange(visibleCoordsFrom, visibleCoordsFrom, visibleCoordsTo);\n\n    if (!visibleRange.includes(highlight) && (highlight.row >= 0 || highlight.col >= 0)) {\n      const scrollCoords = {};\n\n      if (highlight.col >= 0) {\n        const offsetColumns = Math.floor(hot.countVisibleCols() / 2);\n\n        scrollCoords.col = Math.max(highlight.col - offsetColumns, 0);\n      }\n\n      if (highlight.row >= 0) {\n        const offsetRows = Math.floor(hot.countVisibleRows() / 2);\n\n        scrollCoords.row = Math.max(highlight.row - offsetRows, 0);\n      }\n\n      hot.scrollViewportTo({\n        ...scrollCoords,\n        verticalSnap: 'top',\n        horizontalSnap: 'start',\n      });\n    }\n  },\n};\n","export const command = {\n  name: 'selectAllCells',\n  callback(hot) {\n    hot.selection.selectAll(true, true, {\n      disableHeadersHighlight: true,\n    });\n  },\n};\n","export const command = {\n  name: 'selectAllCellsAndHeaders',\n  callback(hot) {\n    hot.selection.selectAll(true, true, {\n      disableHeadersHighlight: false,\n    });\n  },\n};\n","export const command = {\n  name: 'populateSelectedCellsData',\n  callback(hot) {\n    const selectedRange = hot.getSelectedRange();\n    const {\n      row: highlightRow,\n      col: highlightColumn,\n    } = selectedRange[selectedRange.length - 1].highlight.normalize();\n    const valueToPopulate = hot.getDataAtCell(highlightRow, highlightColumn);\n    const cellValues = new Map();\n\n    for (let i = 0; i < selectedRange.length; i++) {\n      selectedRange[i].forAll((row, column) => {\n        if (row >= 0 && column >= 0 && (row !== highlightRow || column !== highlightColumn)) {\n          const { readOnly } = hot.getCellMeta(row, column);\n\n          if (!readOnly) {\n            cellValues.set(`${row}x${column}`, [row, column, valueToPopulate]);\n          }\n        }\n      });\n    }\n\n    hot.setDataAtCell(Array.from(cellValues.values()));\n  },\n};\n","import { isDefined } from '../helpers/mixed';\nimport { GRID_GROUP, EDITOR_EDIT_GROUP } from './constants';\nimport { createKeyboardShortcutCommandsPool } from './commands';\n\n/**\n * The context that defines shortcut list available for selected cell or cells.\n *\n * @param {Handsontable} hot The Handsontable instance.\n */\nexport function shortcutsGridContext(hot) {\n  const context = hot.getShortcutManager().addContext('grid');\n  const commandsPool = createKeyboardShortcutCommandsPool(hot);\n  const config = {\n    runOnlyIf: () => {\n      const { navigableHeaders } = hot.getSettings();\n\n      return isDefined(hot.getSelected()) &&\n        (navigableHeaders || !navigableHeaders && hot.countRenderedRows() > 0 && hot.countRenderedCols() > 0);\n    },\n    group: GRID_GROUP,\n  };\n\n  context.addShortcuts([{\n    keys: [['F2']],\n    callback: event => commandsPool.editorFastOpen(event),\n  }, {\n    keys: [['Enter'], ['Enter', 'Shift']],\n    callback: (event, keys) => commandsPool.editorOpen(event, keys),\n  }, {\n    keys: [['Backspace'], ['Delete']],\n    callback: () => commandsPool.emptySelectedCells(),\n  }], {\n    group: EDITOR_EDIT_GROUP,\n    runOnlyIf: () => isDefined(hot.getSelected()),\n  });\n\n  context.addShortcuts([{\n    keys: [['Control/Meta', 'A']],\n    callback: () => commandsPool.selectAllCells(),\n    runOnlyIf: () => !hot.getSelectedRangeLast()?.highlight.isHeader(),\n  }, {\n    keys: [['Control/Meta', 'A']],\n    callback: () => {},\n    runOnlyIf: () => hot.getSelectedRangeLast()?.highlight.isHeader(),\n    preventDefault: true,\n  }, {\n    keys: [['Control/Meta', 'Shift', 'Space']],\n    callback: () => commandsPool.selectAllCellsAndHeaders(),\n  }, {\n    keys: [['Control/Meta', 'Enter']],\n    callback: () => commandsPool.populateSelectedCellsData(),\n    runOnlyIf: () => {\n      return !hot.getSelectedRangeLast()?.highlight.isHeader() && hot.getSelectedRangeLast()?.getCellsCount() > 1;\n    },\n  }, {\n    keys: [['Control', 'Space']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToColumns(),\n  }, {\n    keys: [['Shift', 'Space']],\n    stopPropagation: true,\n    callback: () => commandsPool.extendCellsSelectionToRows(),\n  }, {\n    keys: [['ArrowUp']],\n    callback: () => commandsPool.moveCellSelectionUp(),\n  }, {\n    keys: [['ArrowUp', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostTop(),\n  }, {\n    keys: [['ArrowUp', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionUp(),\n  }, {\n    keys: [['ArrowUp', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostTop(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByColumnHeader()),\n  }, {\n    keys: [['ArrowDown']],\n    callback: () => commandsPool.moveCellSelectionDown(),\n  }, {\n    keys: [['ArrowDown', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostBottom(),\n  }, {\n    keys: [['ArrowDown', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionDown(),\n  }, {\n    keys: [['ArrowDown', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostBottom(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByColumnHeader()),\n  }, {\n    keys: [['ArrowLeft']],\n    callback: () => commandsPool.moveCellSelectionLeft(),\n  }, {\n    keys: [['ArrowLeft', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostLeft(),\n  }, {\n    keys: [['ArrowLeft', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionLeft(),\n  }, {\n    keys: [['ArrowLeft', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostLeft(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByRowHeader()),\n  }, {\n    keys: [['ArrowRight']],\n    callback: () => commandsPool.moveCellSelectionRight(),\n  }, {\n    keys: [['ArrowRight', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostRight(),\n  }, {\n    keys: [['ArrowRight', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionRight(),\n  }, {\n    keys: [['ArrowRight', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostRight(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByRowHeader()),\n  }, {\n    keys: [['Home']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostInlineStart(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['Home', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionToMostInlineStart(),\n  }, {\n    keys: [['Home', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostTopInlineStart(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['End']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostInlineEnd(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['End', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionToMostInlineEnd(),\n  }, {\n    keys: [['End', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostBottomInlineEnd(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['PageUp']],\n    callback: () => commandsPool.moveCellSelectionUpByViewportHight(),\n  }, {\n    keys: [['PageUp', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionUpByViewportHeight(),\n  }, {\n    keys: [['PageDown']],\n    callback: () => commandsPool.moveCellSelectionDownByViewportHeight(),\n  }, {\n    keys: [['PageDown', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionDownByViewportHeight(),\n  }, {\n    keys: [['Tab']],\n    // The property value is controlled by focusCatcher module (https://github.com/handsontable/handsontable/blob/master/handsontable/src/core/focusCatcher/index.js)\n    preventDefault: false,\n    callback: event => commandsPool.moveCellSelectionInlineStart(event),\n  }, {\n    keys: [['Shift', 'Tab']],\n    // The property value is controlled by focusCatcher module (https://github.com/handsontable/handsontable/blob/master/handsontable/src/core/focusCatcher/index.js)\n    preventDefault: false,\n    callback: event => commandsPool.moveCellSelectionInlineEnd(event),\n  }, {\n    keys: [['Control/Meta', 'Backspace']],\n    callback: () => commandsPool.scrollToFocusedCell(),\n  }], config);\n}\n","import { setAttribute } from '../../helpers/dom/element';\nimport { A11Y_PRESENTATION, A11Y_HIDDEN } from '../../helpers/a11y';\n\n/**\n * Installs a focus detector module. The module appends two input elements into the DOM side by side.\n * When the first input is focused, then it means that a user entered to the component using the TAB key\n * from the element above. When the second input is focused, a user enters to the component from\n * the element below the table. Each action, once detected, triggers the specific hook.\n *\n * @param {Handsontable} hot The Handsontable instance.\n * @param {{ onFocusFromTop: Function, onFocusFromBottom: Function }} hooks An object with defined callbacks to call.\n * @returns {{ activate: Function, deactivate: Function }}\n */\nexport function installFocusDetector(hot, hooks = {}) {\n  const rootElement = hot.rootElement;\n  const inputTrapTop = createInputElement(hot);\n  const inputTrapBottom = createInputElement(hot);\n\n  inputTrapTop.addEventListener('focus', () => hooks?.onFocusFromTop());\n  inputTrapBottom.addEventListener('focus', () => hooks?.onFocusFromBottom());\n\n  rootElement.firstChild.before(inputTrapTop);\n  rootElement.lastChild.after(inputTrapBottom);\n\n  return {\n    /**\n     * Activates the detector by resetting the tabIndex of the input elements.\n     */\n    activate() {\n      hot._registerTimeout(() => {\n        inputTrapTop.tabIndex = 0;\n        inputTrapBottom.tabIndex = 0;\n      }, 10);\n    },\n    /**\n     * Deactivates the detector by setting tabIndex to -1.\n     */\n    deactivate() {\n      hot._registerTimeout(() => {\n        inputTrapTop.tabIndex = -1;\n        inputTrapBottom.tabIndex = -1;\n      }, 10);\n    },\n  };\n}\n\n/**\n * Creates a new HTML input element.\n *\n * @param {Handsontable} hot The Handsontable instance.\n * @returns {HTMLInputElement}\n */\nfunction createInputElement(hot) {\n  const rootDocument = hot.rootDocument;\n  const input = rootDocument.createElement('input');\n\n  input.type = 'text';\n  input.classList.add('htFocusCatcher');\n\n  if (hot.getSettings().ariaTags) {\n    setAttribute(input, [\n      A11Y_PRESENTATION(),\n      A11Y_HIDDEN(),\n    ]);\n  }\n\n  return input;\n}\n","import { columnHeaderScrollStrategy } from './scrollStrategies/columnHeaderScroll';\nimport { cornerHeaderScrollStrategy } from './scrollStrategies/cornerHeaderScroll';\nimport { focusScrollStrategy } from './scrollStrategies/focusScroll';\nimport { multipleScrollStrategy } from './scrollStrategies/multipleScroll';\nimport { noncontiguousScrollStrategy } from './scrollStrategies/noncontiguousScroll';\nimport { rowHeaderScrollStrategy } from './scrollStrategies/rowHeaderScroll';\nimport { singleScrollStrategy } from './scrollStrategies/singleScroll';\n\n/**\n * @typedef ViewportScroller\n * @property {function(): void} resume Resumes the viewport scroller.\n * @property {function(): void} suspend Suspends the viewport scroller until the `resume` method is called.\n * @property {function(): void} skipNextScrollCycle Skip the next scroll cycle.\n * @property {function(CellCoords): void} scrollTo Scroll the viewport to a given cell.\n */\n/**\n * Installs a viewport scroller module. The module is responsible for scrolling the viewport to a given cell\n * based on the selection type (single cell selection, multiple cells selection, header selection etc.).\n * It's triggered by the selection module via the `afterSetRangeEnd` hook every time the selection changes.\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {ViewportScroller} The viewport scroller module.\n */\nexport function createViewportScroller(hot) {\n  const { selection } = hot;\n  let skipNextCall = false;\n  let isSuspended = false;\n\n  return {\n    resume() {\n      isSuspended = false;\n    },\n    suspend() {\n      isSuspended = true;\n    },\n    skipNextScrollCycle() {\n      skipNextCall = true;\n    },\n    scrollTo(cellCoords) {\n      if (skipNextCall || isSuspended) {\n        skipNextCall = false;\n\n        return;\n      }\n\n      let scrollStrategy;\n\n      if (selection.isFocusSelectionChanged()) {\n        scrollStrategy = focusScrollStrategy(hot);\n\n      } else if (selection.isSelectedByCorner()) {\n        scrollStrategy = cornerHeaderScrollStrategy(hot);\n\n      } else if (selection.isSelectedByRowHeader()) {\n        scrollStrategy = rowHeaderScrollStrategy(hot);\n\n      } else if (selection.isSelectedByColumnHeader()) {\n        scrollStrategy = columnHeaderScrollStrategy(hot);\n\n      } else if (selection.getSelectedRange().size() === 1 && selection.isMultiple()) {\n        scrollStrategy = multipleScrollStrategy(hot);\n\n      } else if (selection.getSelectedRange().size() === 1 && !selection.isMultiple()) {\n        scrollStrategy = singleScrollStrategy(hot);\n\n      } else if (selection.getSelectedRange().size() > 1) {\n        scrollStrategy = noncontiguousScrollStrategy(hot);\n      }\n\n      scrollStrategy?.(cellCoords);\n    },\n  };\n}\n","/**\n * Scroll strategy for column header selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function columnHeaderScrollStrategy(hot) {\n  return ({ col }) => {\n    hot.scrollViewportTo({ col });\n  };\n}\n","/**\n * Scroll strategy for corner header selection.\n *\n * @returns {function(): function(CellCoords): void}\n */\nexport function cornerHeaderScrollStrategy() {\n  return () => {\n    // do not scroll the viewport when the corner is clicked\n  };\n}\n","/**\n * Scroll strategy for changed the focus position of the selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function focusScrollStrategy(hot) {\n  return (cellCoords) => {\n    hot.scrollViewportTo(cellCoords.toObject());\n  };\n}\n","/**\n * Scroll strategy for multiple selections.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function multipleScrollStrategy(hot) {\n  return (cellCoords) => {\n    hot.scrollViewportTo(cellCoords.toObject());\n  };\n}\n","/**\n * Scroll strategy for non-contiguous selections.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function noncontiguousScrollStrategy(hot) {\n  return (cellCoords) => {\n    hot.scrollViewportTo(cellCoords.toObject());\n  };\n}\n","/**\n * Scroll strategy for row header selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function rowHeaderScrollStrategy(hot) {\n  return ({ row }) => {\n    hot.scrollViewportTo({ row });\n  };\n}\n","/**\n * Scroll strategy for single cell selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): { row: number, col: number } | void }\n */\nexport function singleScrollStrategy(hot) {\n  return (cellCoords) => {\n    const selectionSource = hot.selection.getSelectionSource();\n    const { row, col } = cellCoords;\n\n    // navigating through the column headers (when `navigableHeaders` is enabled)\n    // scrolls the viewport horizontally only\n    if (row < 0 && col >= 0) {\n      hot.scrollViewportTo({ col });\n\n    // navigating through the row headers (when `navigableHeaders` is enabled)\n    // scrolls the viewport vertically only\n    } else if (col < 0 && row >= 0) {\n      hot.scrollViewportTo({ row });\n\n    // navigating through the cells\n    } else {\n      if (selectionSource === 'mouse') {\n        if (\n          col === hot.view.getLastPartiallyVisibleColumn() ||\n          row === hot.view.getLastPartiallyVisibleRow()\n        ) {\n          return;\n        }\n      }\n\n      hot.scrollViewportTo({ row, col });\n    }\n  };\n}\n","export { createShortcutManager } from './manager';\n","import { createUniqueMap } from '../utils/dataStructures/uniqueMap';\nimport { stopImmediatePropagation } from '../helpers/dom/event';\nimport { createContext, isContextObject } from './context';\nimport { useRecorder } from './recorder';\nimport { toSingleLine } from '../helpers/templateLiteralTag';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * The `ShortcutManager` API lets you store and manage [keyboard shortcut contexts](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md#keyboard-shortcut-contexts) ([`ShortcutContext`](@/api/shortcutContext.md)).\n *\n * Each `ShortcutManager` object:\n * - Stores and manages its own set of keyboard shortcut contexts.\n * - Listens to the [`KeyboardEvent`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) events and runs actions for them.\n *\n * @alias ShortcutManager\n * @class ShortcutManager\n * @param {object} options The manager's options\n * @param {EventTarget} options.ownerWindow A starting `window` element\n * @param {Function} options.handleEvent A condition on which `event` is handled.\n * @param {Function} options.beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md#block-a-keyboard-shortcut-s-actions).\n * @param {Function} options.afterKeyDown A hook fired after the `keydown` event is handled\n */\nexport const createShortcutManager = ({ ownerWindow, handleEvent, beforeKeyDown, afterKeyDown }) => {\n  /**\n   * A unique map that stores keyboard shortcut contexts.\n   *\n   * @type {UniqueMap}\n   */\n  const CONTEXTS = createUniqueMap({\n    errorIdExists: keys => `The \"${keys}\" context name is already registered.`\n  });\n  /**\n   * The name of the active [`ShortcutContext`](@/api/shortcutContext.md).\n   *\n   * @type {string}\n   */\n  let activeContextName = 'grid';\n\n  /**\n   * Create a new [`ShortcutContext`](@/api/shortcutContext.md) object.\n   *\n   * @memberof ShortcutManager#\n   * @param {string} contextName The name of the new shortcut context\n   * @returns {object}\n   */\n  const addContext = (contextName) => {\n    const context = createContext(contextName);\n\n    CONTEXTS.addItem(contextName, context);\n\n    return context;\n  };\n\n  /**\n   * Get the ID of the active [`ShortcutContext`](@/api/shortcutContext.md).\n   *\n   * @memberof ShortcutManager#\n   * @returns {string}\n   */\n  const getActiveContextName = () => {\n    return activeContextName;\n  };\n\n  /**\n   * Get a keyboard shortcut context by its name.\n   *\n   * @memberof ShortcutManager#\n   * @param {string} contextName The name of the shortcut context\n   * @returns {object|undefined} A [`ShortcutContext`](@/api/shortcutContext.md) object that stores registered shortcuts\n   */\n  const getContext = (contextName) => {\n    return CONTEXTS.getItem(contextName);\n  };\n\n  /**\n   * Start listening to keyboard shortcuts within a given [`ShortcutContext`](@/api/shortcutContext.md).\n   *\n   * @memberof ShortcutManager#\n   * @param {string} contextName The name of the shortcut context\n   */\n  const setActiveContextName = (contextName) => {\n    if (!CONTEXTS.hasItem(contextName)) {\n      throw new Error(toSingleLine`You've tried to activate the \"${contextName}\" shortcut context\\x20\n        that does not exist. Before activation, register the context using the \"addContext\" method.`);\n    }\n\n    activeContextName = contextName;\n  };\n\n  /**\n   * This variable relates to the `captureCtrl` shortcut option,\n   * which allows for capturing the state of the Control/Meta modifier key.\n   * Some of the default keyboard shortcuts related to cell selection need this feature for working properly.\n   *\n   * @type {boolean}\n   */\n  let isCtrlKeySilenced = false;\n\n  /**\n   * A callback function for listening events from the recorder.\n   *\n   * @param {KeyboardEvent} event The keyboard event.\n   * @param {string[]} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers.\n   * @param {object | string} context The context object or name.\n   * @returns {boolean}\n   */\n  const recorderCallback = (event, keys, context = getActiveContextName()) => {\n    const activeContext = isContextObject(context) ? context : getContext(context);\n    let isExecutionCancelled = false;\n\n    if (!activeContext.hasShortcut(keys)) {\n      return isExecutionCancelled;\n    }\n\n    // Processing just actions being in stack at the moment of shortcut pressing (without respecting additions/removals performed dynamically).\n    const shortcuts = activeContext.getShortcuts(keys);\n\n    for (let index = 0; index < shortcuts.length; index++) {\n      const {\n        callback,\n        runOnlyIf,\n        preventDefault,\n        stopPropagation,\n        captureCtrl,\n        forwardToContext,\n      } = shortcuts[index];\n\n      if (runOnlyIf(event) === true) {\n        isCtrlKeySilenced = captureCtrl;\n        isExecutionCancelled = callback(event, keys) === false;\n        isCtrlKeySilenced = false;\n\n        if (preventDefault) {\n          event.preventDefault();\n        }\n\n        if (stopPropagation) {\n          stopImmediatePropagation(event);\n          event.stopPropagation();\n        }\n\n        if (isExecutionCancelled) {\n          break;\n        }\n\n        if (forwardToContext) {\n          recorderCallback(event, keys, forwardToContext);\n        }\n      }\n    }\n\n    return isExecutionCancelled;\n  };\n\n  /**\n   * Internal key recorder.\n   *\n   * @private\n   */\n  const keyRecorder = useRecorder(\n    ownerWindow,\n    handleEvent,\n    beforeKeyDown,\n    afterKeyDown,\n    recorderCallback,\n  );\n\n  keyRecorder.mount();\n\n  return {\n    addContext,\n    getActiveContextName,\n    getContext,\n    setActiveContextName,\n    /**\n     * Returns whether `control` or `meta` keys are pressed.\n     *\n     * @memberof ShortcutManager#\n     * @type {Function}\n     * @returns {boolean}\n     */\n    isCtrlPressed: () => !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta')),\n    /**\n     * Release every previously pressed key.\n     *\n     * @type {Function}\n     * @memberof ShortcutManager#\n     */\n    releasePressedKeys: () => keyRecorder.releasePressedKeys(),\n    /**\n     * Destroy a context manager instance.\n     *\n     * @type {Function}\n     * @memberof ShortcutManager#\n     */\n    destroy: () => keyRecorder.unmount(),\n  };\n};\n","import { createUniqueMap } from '../utils/dataStructures/uniqueMap';\nimport { normalizeKeys, getKeysList } from './utils';\nimport { isUndefined, isDefined } from '../helpers/mixed';\nimport { isFunction } from '../helpers/function';\nimport { objectEach, isObject } from '../helpers/object';\nimport { toSingleLine } from '../helpers/templateLiteralTag';\n\nconst __kindOf = Symbol('shortcut-context');\n\n/**\n * Checks if the provided object is a context object.\n *\n * @param {*} objectToCheck An object to check.\n * @returns {boolean}\n */\nexport function isContextObject(objectToCheck) {\n  return isObject(objectToCheck) && objectToCheck.__kindOf === __kindOf;\n}\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * The `ShortcutContext` API lets you store and manage [keyboard shortcuts](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md) in a given [context](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md#keyboard-shortcut-contexts).\n *\n * Each `ShortcutContext` object stores and manages its own set of keyboard shortcuts.\n *\n * @alias ShortcutContext\n * @class ShortcutContext\n * @param {string} name The name of the keyboard shortcut context\n * @returns {object}\n */\nexport const createContext = (name) => {\n  const SHORTCUTS = createUniqueMap({\n    errorIdExists: keys => `The \"${keys}\" shortcut is already registered in the \"${name}\" context.`\n  });\n\n  /**\n   * Add a keyboard shortcut to this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {object} options The shortcut's options\n   * @param {Array<Array<string>>} options.keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   * @param {Function} options.callback The shortcut's action\n   * @param {object} options.group A group of shortcuts to which the shortcut belongs\n   * @param {object} [options.runOnlyIf] A condition on which the shortcut's action runs\n   * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation\n   * @param {object} [options.captureCtrl=false] If set to `true`: captures the state of the Control/Meta modifier key\n   * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior\n   * @param {object} [options.position='after'] The order in which the shortcut's action runs:\n   * `'before'` or `'after'` the `relativeToGroup` group of actions\n   * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`\n   * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.\n   */\n  const addShortcut = (\n    {\n      keys,\n      callback,\n      group,\n      runOnlyIf = () => true,\n      captureCtrl = false,\n      preventDefault = true,\n      stopPropagation = false,\n      relativeToGroup,\n      position,\n      forwardToContext,\n    } = {}) => {\n\n    if (isUndefined(group)) {\n      throw new Error('You need to define the shortcut\\'s group.');\n    }\n\n    if (isFunction(callback) === false) {\n      throw new Error('The shortcut\\'s callback needs to be a function.');\n    }\n\n    if (Array.isArray(keys) === false) {\n      throw new Error(toSingleLine`Pass the shortcut\\'s keys as an array of arrays,\\x20\n      using the KeyboardEvent.key properties:\\x20\n      https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.`);\n    }\n\n    const newShortcut = {\n      callback,\n      group,\n      runOnlyIf,\n      captureCtrl,\n      preventDefault,\n      stopPropagation,\n    };\n\n    if (isDefined(relativeToGroup)) {\n      newShortcut.relativeToGroup = relativeToGroup;\n      newShortcut.position = position;\n    }\n\n    if (isContextObject(forwardToContext)) {\n      newShortcut.forwardToContext = forwardToContext;\n    }\n\n    keys.forEach((keyCombination) => {\n      const normalizedKeys = normalizeKeys(keyCombination);\n      const hasKeyCombination = SHORTCUTS.hasItem(normalizedKeys);\n\n      if (hasKeyCombination) {\n        const shortcuts = SHORTCUTS.getItem(normalizedKeys);\n        let insertionIndex = shortcuts.findIndex(shortcut => shortcut.group === relativeToGroup);\n\n        if (insertionIndex !== -1) {\n          if (position === 'before') {\n            insertionIndex -= 1;\n\n          } else {\n            insertionIndex += 1;\n          }\n\n        } else {\n          insertionIndex = shortcuts.length;\n        }\n\n        shortcuts.splice(insertionIndex, 0, newShortcut);\n\n      } else {\n        SHORTCUTS.addItem(normalizedKeys, [newShortcut]);\n      }\n    });\n  };\n\n  /**\n   * Add multiple keyboard shortcuts to this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<object>} shortcuts List of shortcuts to add to this shortcut context\n   * @param {object} [options] A shortcut's options\n   * @param {Function} [options.callback] A shortcut's action\n   * @param {object} [options.group] A group of shortcuts to which a shortcut belongs\n   * @param {object} [options.runOnlyIf] A condition on which a shortcut's action runs\n   * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation\n   * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior\n   * @param {object} [options.position='after'] The order in which a shortcut's action runs:\n   * `'before'` or `'after'` a `relativeToGroup` group of actions\n   * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`\n   * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.\n   */\n  const addShortcuts = (shortcuts, options = {}) => {\n    shortcuts.forEach((shortcut) => {\n      objectEach(options, (value, key) => {\n        if (Object.prototype.hasOwnProperty.call(shortcut, key) === false) {\n          shortcut[key] = options[key];\n        }\n      });\n\n      addShortcut(shortcut);\n    });\n  };\n\n  /**\n   * Remove a shortcut from this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<string>} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   */\n  const removeShortcutsByKeys = (keys) => {\n    const normalizedKeys = normalizeKeys(keys);\n\n    SHORTCUTS.removeItem(normalizedKeys);\n  };\n\n  /**\n   * Remove a group of shortcuts from this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {string} group The name of the group of shortcuts\n   */\n  const removeShortcutsByGroup = (group) => {\n    const shortcuts = SHORTCUTS.getItems();\n\n    shortcuts.forEach(([normalizedKeys, shortcutOptions]) => {\n      const leftOptions = shortcutOptions.filter(option => option.group !== group);\n\n      if (leftOptions.length === 0) {\n        removeShortcutsByKeys(getKeysList(normalizedKeys));\n\n      } else {\n        shortcutOptions.length = 0;\n\n        shortcutOptions.push(...leftOptions);\n      }\n    });\n  };\n\n  /**\n   * Get a shortcut's details.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<string>} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   * @returns {Array}\n   */\n  const getShortcuts = (keys) => {\n    const normalizedKeys = normalizeKeys(keys);\n    const shortcuts = SHORTCUTS.getItem(normalizedKeys);\n\n    return isDefined(shortcuts) ? shortcuts.slice() : [];\n  };\n\n  /**\n   * Check if a shortcut exists in this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<string>} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   * @returns {boolean}\n   */\n  const hasShortcut = (keys) => {\n    const normalizedKeys = normalizeKeys(keys);\n\n    return SHORTCUTS.hasItem(normalizedKeys);\n  };\n\n  return {\n    __kindOf,\n    addShortcut,\n    addShortcuts,\n    getShortcuts,\n    hasShortcut,\n    removeShortcutsByKeys,\n    removeShortcutsByGroup,\n  };\n};\n","// This file handles key-name discrepancies between browsers.\n// For the list of discrepancies, go to: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.\nconst mappings = new Map([\n  [' ', 'space'], // custom mapping\n  ['spacebar', 'space'],\n  ['scroll', 'scrolllock'],\n  ['del', 'delete'],\n  ['esc', 'escape'],\n  ['medianexttrack', 'mediatracknext'],\n  ['mediaprevioustrack', 'mediatrackprevious'],\n  ['volumeup', 'audiovolumeup'],\n  ['volumedown', 'audiovolumedown'],\n  ['volumemute', 'audiovolumemute'],\n  ['multiply', '*'],\n  ['add', '+'],\n  ['divide', '/'],\n  ['subtract', '-'],\n  ['left', 'arrowleft'],\n  ['right', 'arrowright'],\n  ['up', 'arrowup'],\n  ['down', 'arrowdown'],\n]);\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * Get a single, normalized string from the list of the `KeyboardEvent.key` properties.\n *\n * @param {Array<string>} keys The list of the `KeyboardEvent.key` properties\n * @returns {string}\n */\nexport const normalizeKeys = (keys) => {\n  return keys.map((key) => {\n    const lowercaseKey = key.toLowerCase();\n\n    if (mappings.has(lowercaseKey)) {\n      return mappings.get(lowercaseKey);\n    }\n\n    return lowercaseKey;\n  }).sort().join('+');\n};\n\n/**\n * Get the list of the `KeyboardEvent.key` properties from a single, normalized string.\n *\n * @param {string} normalizedKeys A single, normalized string that contains the list of the `KeyboardEvent.key` properties\n * @returns {Array<string>}\n */\nexport const getKeysList = (normalizedKeys) => {\n  return normalizedKeys.split('+');\n};\n\nconst specialCharactersSet = new Map([\n  [96, 'numpad0'],\n  [97, 'numpad1'],\n  [98, 'numpad2'],\n  [99, 'numpad3'],\n  [100, 'numpad4'],\n  [101, 'numpad5'],\n  [102, 'numpad6'],\n  [103, 'numpad7'],\n  [104, 'numpad8'],\n  [105, 'numpad9'],\n  [106, 'multiply'],\n  [107, 'add'],\n  [108, 'decimal'], // firefox\n  [109, 'subtract'],\n  [110, 'decimal'],\n  [111, 'divide'],\n  [112, 'f1'],\n  [113, 'f2'],\n  [114, 'f3'],\n  [115, 'f4'],\n  [116, 'f5'],\n  [117, 'f6'],\n  [118, 'f7'],\n  [119, 'f8'],\n  [120, 'f9'],\n  [121, 'f10'],\n  [122, 'f11'],\n  [123, 'f12'],\n  [186, 'semicolon'],\n  [187, 'equal'],\n  [188, 'comma'],\n  [189, 'minus'],\n  [190, 'period'],\n  [191, 'slash'],\n  [192, 'backquote'],\n  [219, 'bracketleft'],\n  [220, 'backslash'],\n  [221, 'bracketright'],\n  [222, 'quote'],\n]);\n\n/**\n * Normalizes a keyboard event key value to a key before its modification.\n *\n * Keep in mind that there is difference between `key` and `code` properties of the KeyboardEvent object.\n * The `key` property represents the logical key on the keyboard (after applying modifiers and taking\n * the keyboard layout into account), where the `code` property represents the physical key\n * (regardless of what is printed on the key). Using the `keyCode` for alphanumeric keys,\n * solves the problem and allows to get the correct key value. The value that takes the keyboard layout\n * into account but is not modified by the modifiers (e.g. Alt + L would give polish \"ł\" we want \"l\").\n *\n * @param {Event} event The KeyboardEvent object.\n * @returns {string}\n */\nexport const normalizeEventKey = ({ which, key }) => {\n  if (specialCharactersSet.has(which)) {\n    return specialCharactersSet.get(which);\n  }\n\n  const normalizedKey = String.fromCharCode(which).toLowerCase();\n\n  if (/^[a-z0-9]$/.test(normalizedKey)) {\n    return normalizedKey;\n  }\n\n  return key.toLowerCase();\n};\n","import { createKeysObserver } from './keyObserver';\nimport { normalizeEventKey } from './utils';\nimport { isImmediatePropagationStopped } from '../helpers/dom/event';\nimport { getParentWindow } from '../helpers/dom/element';\nimport { isMacOS } from '../helpers/browser';\n\nconst MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];\nconst modifierKeysObserver = createKeysObserver();\nconst modKeyListeners = [];\nlet instanceCounter = 0;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * A key recorder, used for tracking key events.\n *\n * @param {EventTarget} ownerWindow A starting `window` element\n * @param {Function} handleEvent A condition on which event is handled.\n * @param {Function} beforeKeyDown A hook fired before the `keydown` event is handled.\n * @param {Function} afterKeyDown A hook fired after the `keydown` event is handled\n * @param {Function} callback `KeyEvent`'s listener's callback function\n * @returns {object}\n */\nexport function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, callback) {\n  /**\n   * Check if a pressed key is tracked or not.\n   *\n   * @param {string} pressedKey A pressed key\n   * @returns {boolean}\n   */\n  const isModifierKey = (pressedKey) => {\n    return MODIFIER_KEYS.includes(pressedKey);\n  };\n\n  /**\n   * Get every pressed modifier key from the performed `KeyboardEvent`.\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object.\n   * @param {boolean} [mergeMetaKeys=false] If `true,` the function will return the \"control\" and \"meta\"\n   *                                        modifiers keys as the \"control/meta\" name. This allows creating\n   *                                        keyboard shortcuts with modifier key that trigger the shortcut\n   *                                        actions depend on the OS keyboard layout (the Meta key for macOS\n   *                                        and Control for non macOS system).\n   * @returns {string[]}\n   */\n  const getPressedModifierKeys = (event, mergeMetaKeys = false) => {\n    const pressedModifierKeys = [];\n\n    if (event.altKey) {\n      pressedModifierKeys.push('alt');\n    }\n\n    if (mergeMetaKeys && (event.ctrlKey || event.metaKey)) {\n      pressedModifierKeys.push('control/meta');\n\n    } else {\n      if (event.ctrlKey) {\n        pressedModifierKeys.push('control');\n      }\n\n      if (event.metaKey) {\n        pressedModifierKeys.push('meta');\n      }\n    }\n\n    if (event.shiftKey) {\n      pressedModifierKeys.push('shift');\n    }\n\n    return pressedModifierKeys;\n  };\n\n  /**\n   * `KeyboardEvent`'s callback function\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object\n   */\n  const onkeydown = (event) => {\n    if (handleEvent(event) === false) {\n      return;\n    }\n\n    const result = beforeKeyDown(event);\n\n    // keyCode 229 aka 'uninitialized' doesn't take into account with editors. This key code is\n    // produced when unfinished character is entering using the IME editor. It is fired on macOS,\n    // Windows and linux (ubuntu) with installed ibus-pinyin package.\n    if (event.keyCode === 229 || result === false || isImmediatePropagationStopped(event)) {\n      return;\n    }\n\n    const pressedKey = normalizeEventKey(event);\n    let extraModifierKeys = [];\n\n    if (!isModifierKey(pressedKey)) {\n      extraModifierKeys = getPressedModifierKeys(event);\n    }\n\n    const pressedKeys = [pressedKey].concat(extraModifierKeys);\n    const isExecutionCancelled = callback(event, pressedKeys);\n\n    if (!isExecutionCancelled &&\n      (isMacOS() && extraModifierKeys.includes('meta') || !isMacOS() && extraModifierKeys.includes('control'))) {\n      // Trigger the callback for the virtual OS-dependent \"control/meta\" key\n      callback(event, [pressedKey].concat(getPressedModifierKeys(event, true)));\n    }\n\n    afterKeyDown(event);\n  };\n\n  /**\n   * `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object\n   */\n  const onkeydownForModKeys = (event) => {\n    if (event.key) {\n      const pressedKey = normalizeEventKey(event);\n\n      if (isModifierKey(pressedKey)) {\n        modifierKeysObserver.press(pressedKey);\n      }\n    }\n  };\n\n  /**\n   * `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object\n   */\n  const onkeyupForModKeys = (event) => {\n    if (event.key) {\n      const pressedKey = normalizeEventKey(event);\n\n      if (isModifierKey(pressedKey)) {\n        modifierKeysObserver.release(pressedKey);\n      }\n    }\n  };\n\n  /**\n   * `FocusEvent`'s callback function\n   *\n   * @private\n   */\n  const onblur = () => {\n    modifierKeysObserver.releaseAll();\n  };\n\n  /**\n   * Add event listeners to the starting window and its parents' windows.\n   */\n  const mount = () => {\n    let eventTarget = ownerWindow;\n\n    instanceCounter += 1;\n\n    while (eventTarget) {\n      if (instanceCounter === 1) {\n        eventTarget.document.documentElement.addEventListener('keydown', onkeydownForModKeys);\n        modKeyListeners.push({ event: 'keydown', listener: onkeydownForModKeys });\n\n        eventTarget.document.documentElement.addEventListener('keyup', onkeyupForModKeys);\n        modKeyListeners.push({ event: 'keyup', listener: onkeyupForModKeys });\n      }\n\n      eventTarget.document.documentElement.addEventListener('keydown', onkeydown);\n      eventTarget.document.documentElement.addEventListener('blur', onblur);\n\n      eventTarget = getParentWindow(eventTarget);\n    }\n  };\n\n  /**\n   * Remove event listeners from the starting window and its parents' windows.\n   */\n  const unmount = () => {\n    let eventTarget = ownerWindow;\n\n    instanceCounter -= 1;\n\n    while (eventTarget) {\n      if (instanceCounter === 0) {\n        for (let i = 0; i < modKeyListeners.length; i++) {\n          const { event, listener } = modKeyListeners[i];\n\n          eventTarget.document.documentElement.removeEventListener(event, listener);\n        }\n\n        modKeyListeners.length = 0;\n      }\n\n      eventTarget.document.documentElement.removeEventListener('keydown', onkeydown);\n      eventTarget.document.documentElement.removeEventListener('blur', onblur);\n\n      eventTarget = getParentWindow(eventTarget);\n    }\n  };\n\n  return {\n    mount,\n    unmount,\n    isPressed: key => modifierKeysObserver.isPressed(key),\n    releasePressedKeys: () => modifierKeysObserver.releaseAll(),\n  };\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * Create a key observer.\n *\n * @returns {object}\n */\nexport function createKeysObserver() {\n  const PRESSED_KEYS = new Set();\n\n  return {\n    /**\n     * Press a key.\n     *\n     * @param {string} key Names of the shortcut's keys,\n     * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n     * in lowercase or uppercase, unified across browsers\n     */\n    press(key) {\n      PRESSED_KEYS.add(key);\n    },\n    /**\n     * Release a pressed key.\n     *\n     * @param {string} key Names of the shortcut's keys,\n     * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n     * in lowercase or uppercase, unified across browsers\n     */\n    release(key) {\n      PRESSED_KEYS.delete(key);\n    },\n    /**\n     * Release all pressed keys.\n     */\n    releaseAll() {\n      PRESSED_KEYS.clear();\n    },\n    /**\n     * Check if a key is pressed.\n     *\n     * @param {string} key Names of the shortcut's keys,\n     * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n     * in lowercase or uppercase, unified across browsers\n     * @returns {boolean}\n     */\n    isPressed(key) {\n      return PRESSED_KEYS.has(key);\n    },\n  };\n}\n","export {\n  CELL_TYPE,\n  TextCellType,\n} from './textType';\n","import { TextEditor } from '../../editors/textEditor';\nimport { textRenderer } from '../../renderers/textRenderer';\n\nexport const CELL_TYPE = 'text';\nexport const TextCellType = {\n  CELL_TYPE,\n  editor: TextEditor,\n  renderer: textRenderer,\n};\n","export {\n  EDITOR_TYPE,\n  TextEditor,\n} from './textEditor';\n","import { BaseEditor, EDITOR_STATE } from '../baseEditor';\nimport EventManager from '../../eventManager';\nimport { isEdge, isIOS } from '../../helpers/browser';\nimport {\n  addClass,\n  getComputedStyle,\n  isThisHotChild,\n  setCaretPosition,\n  hasClass,\n  removeClass,\n  setAttribute,\n} from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport { createInputElementResizer } from '../../utils/autoResize';\nimport { isDefined } from '../../helpers/mixed';\nimport { updateCaretPosition } from './caretPositioner';\nimport {\n  A11Y_HIDDEN,\n  A11Y_TABINDEX\n} from '../../helpers/a11y';\n\nconst EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';\nconst EDITOR_HIDDEN_CLASS_NAME = 'ht_editor_hidden';\nconst SHORTCUTS_GROUP = 'textEditor';\n\nexport const EDITOR_TYPE = 'text';\n\n/**\n * @private\n * @class TextEditor\n */\nexport class TextEditor extends BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @private\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * Autoresize instance. Automagically resizes editor after changes.\n   *\n   * @private\n   * @type {Function}\n   */\n  autoResize = createInputElementResizer(this.hot.rootDocument);\n  /**\n   * An TEXTAREA element.\n   *\n   * @private\n   * @type {HTMLTextAreaElement}\n   */\n  TEXTAREA;\n  /**\n   * Style declaration object of the TEXTAREA element.\n   *\n   * @private\n   * @type {CSSStyleDeclaration}\n   */\n  textareaStyle;\n  /**\n   * Parent element of the TEXTAREA.\n   *\n   * @private\n   * @type {HTMLDivElement}\n   */\n  TEXTAREA_PARENT;\n  /**\n   * Style declaration object of the TEXTAREA_PARENT element.\n   *\n   * @private\n   * @type {CSSStyleDeclaration}\n   */\n  textareaParentStyle;\n  /**\n   * Z-index class style for the editor.\n   *\n   * @private\n   * @type {string}\n   */\n  layerClass;\n\n  /**\n   * @param {Core} hotInstance The Handsontable instance.\n   */\n  constructor(hotInstance) {\n    super(hotInstance);\n    this.eventManager = new EventManager(this);\n\n    this.createElements();\n    this.bindEvents();\n\n    this.hot.addHookOnce('afterDestroy', () => this.destroy());\n  }\n\n  /**\n   * Gets current value from editable element.\n   *\n   * @returns {number}\n   */\n  getValue() {\n    return this.TEXTAREA.value;\n  }\n\n  /**\n   * Sets new value into editable element.\n   *\n   * @param {*} newValue The editor value.\n   */\n  setValue(newValue) {\n    this.TEXTAREA.value = newValue;\n  }\n\n  /**\n   * Opens the editor and adjust its size.\n   */\n  open() {\n    this.refreshDimensions(); // need it instantly, to prevent https://github.com/handsontable/handsontable/issues/348\n    this.showEditableElement();\n    this.hot.getShortcutManager().setActiveContextName('editor');\n    this.registerShortcuts();\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    this.autoResize.unObserve();\n\n    if (isThisHotChild(this.hot.rootDocument.activeElement, this.hot.rootElement)) {\n      this.hot.listen(); // don't refocus the table if user focused some cell outside of HT on purpose\n    }\n\n    this.hideEditableElement();\n    this.unregisterShortcuts();\n  }\n\n  /**\n   * Prepares editor's meta data.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    const previousState = this.state;\n\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    if (!cellProperties.readOnly) {\n      this.refreshDimensions(true);\n\n      const {\n        allowInvalid,\n      } = cellProperties;\n\n      if (allowInvalid && !this.isOpened()) {\n        // Remove an empty space from textarea (added by copyPaste plugin to make copy/paste\n        // functionality work with IME)\n        this.TEXTAREA.value = '';\n      }\n\n      if (previousState !== EDITOR_STATE.FINISHED && !this.isOpened()) {\n        this.hideEditableElement();\n      }\n    }\n  }\n\n  /**\n   * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n   *\n   * @param {*} newInitialValue The editor initial value.\n   * @param {Event} event The keyboard event object.\n   */\n  beginEditing(newInitialValue, event) {\n    if (this.state !== EDITOR_STATE.VIRGIN) {\n      return;\n    }\n\n    this.TEXTAREA.value = ''; // Remove an empty space from textarea (added by copyPaste plugin to make copy/paste functionality work with IME).\n    super.beginEditing(newInitialValue, event);\n  }\n\n  /**\n   * Sets focus state on the select element.\n   */\n  focus() {\n    // For IME editor textarea element must be focused using \".select\" method.\n    // Using \".focus\" browser automatically scroll into the focused element which\n    // is undesired effect.\n    this.TEXTAREA.select();\n    setCaretPosition(this.TEXTAREA, this.TEXTAREA.value.length);\n  }\n\n  /**\n   * Creates an editor's elements and adds necessary CSS classnames.\n   */\n  createElements() {\n    const { rootDocument } = this.hot;\n\n    this.TEXTAREA = rootDocument.createElement('TEXTAREA');\n\n    // Makes the element recognizable by Hot as its own\n    // component's element.\n    setAttribute(this.TEXTAREA, [\n      ['data-hot-input', ''],\n      A11Y_TABINDEX(-1),\n    ]);\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_HIDDEN(),\n      ]);\n    }\n\n    addClass(this.TEXTAREA, 'handsontableInput');\n\n    this.textareaStyle = this.TEXTAREA.style;\n    this.textareaStyle.width = 0;\n    this.textareaStyle.height = 0;\n    this.textareaStyle.overflowY = 'visible';\n\n    this.TEXTAREA_PARENT = rootDocument.createElement('DIV');\n    addClass(this.TEXTAREA_PARENT, 'handsontableInputHolder');\n\n    if (hasClass(this.TEXTAREA_PARENT, this.layerClass)) {\n      removeClass(this.TEXTAREA_PARENT, this.layerClass);\n    }\n\n    addClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n\n    this.textareaParentStyle = this.TEXTAREA_PARENT.style;\n\n    this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n\n    this.hot.rootElement.appendChild(this.TEXTAREA_PARENT);\n  }\n\n  /**\n   * Moves an editable element out of the viewport, but element must be able to hold focus for IME support.\n   *\n   * @private\n   */\n  hideEditableElement() {\n    if (isEdge()) {\n      this.textareaStyle.textIndent = '-99999px';\n    }\n    this.textareaStyle.overflowY = 'visible';\n\n    this.textareaParentStyle.opacity = '0';\n    this.textareaParentStyle.height = '1px';\n\n    removeClass(this.TEXTAREA_PARENT, this.layerClass);\n    addClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n  }\n\n  /**\n   * Resets an editable element position.\n   *\n   * @private\n   */\n  showEditableElement() {\n    this.textareaParentStyle.height = '';\n    this.textareaParentStyle.overflow = '';\n    this.textareaParentStyle.position = '';\n    this.textareaParentStyle[this.hot.isRtl() ? 'left' : 'right'] = 'auto';\n    this.textareaParentStyle.opacity = '1';\n\n    this.textareaStyle.textIndent = '';\n\n    const childNodes = this.TEXTAREA_PARENT.childNodes;\n    let hasClassHandsontableEditor = false;\n\n    rangeEach(childNodes.length - 1, (index) => {\n      const childNode = childNodes[index];\n\n      if (hasClass(childNode, 'handsontableEditor')) {\n        hasClassHandsontableEditor = true;\n\n        return false;\n      }\n    });\n\n    if (hasClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME)) {\n      removeClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n    }\n\n    if (hasClassHandsontableEditor) {\n      this.layerClass = EDITOR_VISIBLE_CLASS_NAME;\n\n      addClass(this.TEXTAREA_PARENT, this.layerClass);\n\n    } else {\n      this.layerClass = this.getEditedCellsLayerClass();\n\n      addClass(this.TEXTAREA_PARENT, this.layerClass);\n    }\n  }\n\n  /**\n   * Refreshes editor's value using source data.\n   *\n   * @private\n   */\n  refreshValue() {\n    const physicalRow = this.hot.toPhysicalRow(this.row);\n    const sourceData = this.hot.getSourceDataAtCell(physicalRow, this.col);\n\n    this.originalValue = sourceData;\n\n    this.setValue(sourceData);\n    this.refreshDimensions();\n  }\n\n  /**\n   * Refreshes editor's size and position.\n   *\n   * @private\n   * @param {boolean} force Indicates if the refreshing editor dimensions should be triggered.\n   */\n  refreshDimensions(force = false) {\n    if (this.state !== EDITOR_STATE.EDITING && !force) {\n      return;\n    }\n    this.TD = this.getEditedCell();\n\n    // TD is outside of the viewport.\n    if (!this.TD) {\n      if (!force) {\n        this.close(); // TODO shouldn't it be this.finishEditing() ?\n      }\n\n      return;\n    }\n\n    const {\n      top,\n      start,\n      width,\n      maxWidth,\n      height,\n      maxHeight\n    } = this.getEditedCellRect();\n\n    this.textareaParentStyle.top = `${top}px`;\n    this.textareaParentStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;\n    this.showEditableElement();\n\n    const cellComputedStyle = getComputedStyle(this.TD, this.hot.rootWindow);\n\n    this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;\n    this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;\n    this.TEXTAREA.style.backgroundColor = this.TD.style.backgroundColor;\n\n    const textareaComputedStyle = getComputedStyle(this.TEXTAREA);\n\n    const horizontalPadding = parseInt(textareaComputedStyle.paddingLeft, 10) +\n      parseInt(textareaComputedStyle.paddingRight, 10);\n    const verticalPadding = parseInt(textareaComputedStyle.paddingTop, 10) +\n      parseInt(textareaComputedStyle.paddingBottom, 10);\n\n    const finalWidth = width - horizontalPadding;\n    const finalHeight = height - verticalPadding;\n    const finalMaxWidth = maxWidth - horizontalPadding;\n    const finalMaxHeight = maxHeight - verticalPadding;\n\n    this.autoResize.init(this.TEXTAREA, {\n      minWidth: Math.min(finalWidth, finalMaxWidth),\n      minHeight: Math.min(finalHeight, finalMaxHeight),\n      // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)\n      maxWidth: finalMaxWidth,\n      maxHeight: finalMaxHeight,\n    }, true);\n  }\n\n  /**\n   * Binds events and hooks.\n   *\n   * @private\n   */\n  bindEvents() {\n    if (isIOS()) {\n      // on iOS after click \"Done\" the edit isn't hidden by default, so we need to handle it manually.\n      this.eventManager.addEventListener(this.TEXTAREA, 'focusout', () => this.finishEditing(false));\n    }\n\n    this.addHook('afterScrollHorizontally', () => this.refreshDimensions());\n    this.addHook('afterScrollVertically', () => this.refreshDimensions());\n\n    this.addHook('afterColumnResize', () => {\n      this.refreshDimensions();\n\n      if (this.state === EDITOR_STATE.EDITING) {\n        this.focus();\n      }\n    });\n\n    this.addHook('afterRowResize', () => {\n      this.refreshDimensions();\n\n      if (this.state === EDITOR_STATE.EDITING) {\n        this.focus();\n      }\n    });\n  }\n\n  /**\n   * Ugly hack for autocompleteEditor.\n   *\n   * @private\n   */\n  allowKeyEventPropagation() {}\n\n  /**\n   * Destroys the internal event manager and clears attached hooks.\n   *\n   * @private\n   */\n  destroy() {\n    this.eventManager.destroy();\n    this.clearHooks();\n  }\n\n  /**\n   * Register shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n    const contextConfig = {\n      runOnlyIf: () => isDefined(this.hot.getSelected()),\n      group: SHORTCUTS_GROUP,\n    };\n\n    const insertNewLine = () => {\n      this.hot.rootDocument.execCommand('insertText', false, '\\n');\n    };\n\n    editorContext.addShortcuts([{\n      keys: [['Control', 'Enter']],\n      callback: () => {\n        insertNewLine();\n\n        return false; // Will block closing editor.\n      },\n      runOnlyIf: event => !this.hot.selection.isMultiple() && // We trigger a data population for multiple selection.\n        // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n        !event.altKey,\n    }, {\n      keys: [['Meta', 'Enter']],\n      callback: () => {\n        insertNewLine();\n\n        return false; // Will block closing editor.\n      },\n      runOnlyIf: () => !this.hot.selection.isMultiple(), // We trigger a data population for multiple selection.\n    }, {\n      keys: [['Alt', 'Enter']],\n      callback: () => {\n        insertNewLine();\n\n        return false; // Will block closing editor.\n      },\n    }, {\n      keys: [['Home']],\n      callback: (event, [keyName]) => {\n        updateCaretPosition(keyName, this.TEXTAREA);\n      },\n    }, {\n      keys: [['End']],\n      callback: (event, [keyName]) => {\n        updateCaretPosition(keyName, this.TEXTAREA);\n      },\n    }], contextConfig);\n  }\n\n  /**\n   * Unregister shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * autoResize - resizes a DOM element to the width and height of another DOM element\n *\n * Copyright 2014, Marcin Warpechowski\n * Licensed under the MIT license\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\n/**\n * Attaches an event listener to the given element.\n *\n * @param {HTMLElement} element The element to observe.\n * @param {string} eventName The name of the event to listen for.\n * @param {Function} handler The function to call when the event is triggered.\n */\nfunction observe(element, eventName, handler) {\n  element.addEventListener(eventName, handler, false);\n}\n\n/**\n * Removes an event listener from an element.\n *\n * @param {HTMLElement} element The element to remove the event listener from.\n * @param {string} eventName The name of the event to remove.\n * @param {Function} handler The function to remove as a listener.\n */\nfunction unObserve(element, eventName, handler) {\n  element.removeEventListener(eventName, handler, false);\n}\n\n/**\n * Returns the computed style of an element.\n *\n * @param {Element} element The element to get the computed style from.\n * @returns {CSSStyleDeclaration} The computed style of the element.\n */\nfunction getComputedStyle(element) {\n  return element.ownerDocument.defaultView.getComputedStyle(element);\n}\n\n/**\n * @typedef InputElementResizerConfig\n * @property {number} minWidth The minimum width of the element.\n * @property {number} maxWidth The maximum width of the element.\n * @property {number} minHeight The minimum height of the element.\n * @property {number} maxHeight The maximum height of the element.\n */\n/**\n * @typedef InputElementResizer\n * @property {function(HTMLElement, InputElementResizerConfig, boolean): void} init Initializes the resizer.\n * @property {function(): void} resize Resizes the element.\n * @property {function(): void} unObserve Removes the event listeners.\n */\n/**\n * Creates an input element resizer.\n *\n * @param {Document} ownerDocument The document to create the resizer for.\n * @returns {InputElementResizer}\n */\nexport function createInputElementResizer(ownerDocument) {\n  const defaults = {\n    minHeight: 200,\n    maxHeight: 300,\n    minWidth: 100,\n    maxWidth: 300,\n  };\n  const body = ownerDocument.body;\n  const textHolder = ownerDocument.createTextNode('');\n  const textContainer = ownerDocument.createElement('span');\n  let observedElement;\n\n  /**\n   * Resizes the element.\n   */\n  function resize() {\n    textHolder.textContent = observedElement.value;\n    // Won't expand the element size for displaying body as for example, `grid`, `inline-grid` or `flex` with\n    // `flex-direction` set as `column`.\n    textContainer.style.position = 'absolute';\n    textContainer.style.fontSize = getComputedStyle(observedElement).fontSize;\n    textContainer.style.fontFamily = getComputedStyle(observedElement).fontFamily;\n    textContainer.style.whiteSpace = 'pre';\n\n    body.appendChild(textContainer);\n\n    const width = textContainer.clientWidth + 2;\n\n    body.removeChild(textContainer);\n\n    const elementStyle = observedElement.style;\n\n    elementStyle.height = `${defaults.minHeight}px`;\n\n    if (defaults.minWidth > width) {\n      elementStyle.width = `${defaults.minWidth}px`;\n\n    } else if (width > defaults.maxWidth) {\n      elementStyle.width = `${defaults.maxWidth}px`;\n\n    } else {\n      elementStyle.width = `${width}px`;\n    }\n\n    const scrollHeight = observedElement.scrollHeight ? observedElement.scrollHeight - 1 : 0;\n\n    if (defaults.minHeight > scrollHeight) {\n      elementStyle.height = `${defaults.minHeight}px`;\n\n    } else if (defaults.maxHeight < scrollHeight) {\n      elementStyle.height = `${defaults.maxHeight}px`;\n      elementStyle.overflowY = 'visible';\n\n    } else {\n      elementStyle.height = `${scrollHeight}px`;\n    }\n  }\n\n  /**\n   * Resizes the element after a delay.\n   */\n  function delayedResize() {\n    ownerDocument.defaultView.setTimeout(resize, 0);\n  }\n\n  /**\n   * Extends the default configuration.\n   *\n   * @param {InputElementResizerConfig} config The configuration to extend the defaults with.\n   */\n  function extendDefaults(config) {\n    if (config && config.minHeight) {\n      if (config.minHeight === 'inherit') {\n        defaults.minHeight = observedElement.clientHeight;\n      } else {\n        const minHeight = parseInt(config.minHeight, 10);\n\n        if (!isNaN(minHeight)) {\n          defaults.minHeight = minHeight;\n        }\n      }\n    }\n\n    if (config && config.maxHeight) {\n      if (config.maxHeight === 'inherit') {\n        defaults.maxHeight = observedElement.clientHeight;\n      } else {\n        const maxHeight = parseInt(config.maxHeight, 10);\n\n        if (!isNaN(maxHeight)) {\n          defaults.maxHeight = maxHeight;\n        }\n      }\n    }\n\n    if (config && config.minWidth) {\n      if (config.minWidth === 'inherit') {\n        defaults.minWidth = observedElement.clientWidth;\n      } else {\n        const minWidth = parseInt(config.minWidth, 10);\n\n        if (!isNaN(minWidth)) {\n          defaults.minWidth = minWidth;\n        }\n      }\n    }\n\n    if (config && config.maxWidth) {\n      if (config.maxWidth === 'inherit') {\n        defaults.maxWidth = observedElement.clientWidth;\n      } else {\n        const maxWidth = parseInt(config.maxWidth, 10);\n\n        if (!isNaN(maxWidth)) {\n          defaults.maxWidth = maxWidth;\n        }\n      }\n    }\n\n    if (!textContainer.firstChild) {\n      textContainer.className = 'autoResize';\n      textContainer.style.display = 'inline-block';\n      textContainer.appendChild(textHolder);\n    }\n  }\n\n  /**\n   * Initializes the resizer.\n   *\n   * @param {HTMLElement} elementToObserve The element to observe.\n   * @param {InputElementResizerConfig} config The configuration to extend the defaults with.\n   * @param {boolean} [doObserve=false] Whether to observe the element and resize it on every input change.\n   */\n  function init(elementToObserve, config, doObserve = false) {\n    observedElement = elementToObserve;\n\n    extendDefaults(config);\n\n    if (observedElement.nodeName === 'TEXTAREA') {\n      observedElement.style.resize = 'none';\n      observedElement.style.height = `${defaults.minHeight}px`;\n      observedElement.style.minWidth = `${defaults.minWidth}px`;\n      observedElement.style.maxWidth = `${defaults.maxWidth}px`;\n      observedElement.style.overflowY = 'hidden';\n    }\n\n    if (doObserve) {\n      observe(observedElement, 'input', resize);\n      // the keydown event is necessary for undo stack to work properly\n      observe(observedElement, 'keydown', delayedResize);\n    }\n\n    resize();\n  }\n\n  return {\n    init,\n    resize,\n    unObserve() {\n      unObserve(observedElement, 'input', resize);\n      unObserve(observedElement, 'keydown', delayedResize);\n    },\n  };\n}\n","import {\n  getCaretPosition,\n  setCaretPosition,\n} from '../../helpers/dom/element';\n\n/**\n * Updates the textarea caret position depends on the action executed on that element.\n *\n * The following actions are supported:\n *  - 'home': Move the caret to the beginning of the current line;\n *  - 'end': Move the caret to the end of the current line.\n *\n * @param {'home'|'end'} actionName The action to perform that modifies the caret behavior.\n * @param {HTMLTextAreaElement} textareaElement The textarea element where the action is supposed to happen.\n */\nexport function updateCaretPosition(actionName, textareaElement) {\n  const caretPosition = getCaretPosition(textareaElement);\n  const textLines = textareaElement.value.split('\\n');\n  let newCaretPosition = caretPosition;\n  let lineStartIndex = 0;\n\n  for (let i = 0; i < textLines.length; i++) {\n    const textLine = textLines[i];\n\n    if (i !== 0) {\n      lineStartIndex += textLines[i - 1].length + 1;\n    }\n\n    const lineEndIndex = lineStartIndex + textLine.length;\n\n    if (actionName === 'home') {\n      newCaretPosition = lineStartIndex;\n\n    } else if (actionName === 'end') {\n      newCaretPosition = lineEndIndex;\n    }\n\n    if (caretPosition <= lineEndIndex) {\n      break;\n    }\n  }\n\n  setCaretPosition(textareaElement, newCaretPosition);\n}\n","export {\n  RENDERER_TYPE,\n  textRenderer,\n} from './textRenderer';\n","import { baseRenderer } from '../baseRenderer';\nimport { empty, fastInnerText } from '../../helpers/dom/element';\nimport { stringify } from '../../helpers/mixed';\n\nexport const RENDERER_TYPE = 'text';\n\n/**\n * Default text renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function textRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  baseRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n  let escaped = value;\n\n  if (!escaped && cellProperties.placeholder) {\n    escaped = cellProperties.placeholder;\n  }\n\n  escaped = stringify(escaped);\n\n  if (cellProperties.trimWhitespace) {\n    escaped = escaped.trim();\n  }\n\n  if (cellProperties.rendererTemplate) {\n    empty(TD);\n    const TEMPLATE = hotInstance.rootDocument.createElement('TEMPLATE');\n\n    TEMPLATE.setAttribute('bind', '{{}}');\n    TEMPLATE.innerHTML = cellProperties.rendererTemplate;\n    HTMLTemplateElement.decorate(TEMPLATE);\n    TEMPLATE.model = hotInstance.getSourceDataAtRow(row);\n    TD.appendChild(TEMPLATE);\n\n  } else {\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n    fastInnerText(TD, escaped);\n  }\n}\n\ntextRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  baseRenderer,\n} from './baseRenderer';\n","/**\n * Adds appropriate CSS class to table cell, based on cellProperties.\n */\nimport {\n  addClass,\n  removeAttribute,\n  removeClass,\n  setAttribute\n} from '../../helpers/dom/element';\nimport { A11Y_INVALID, A11Y_READONLY } from '../../helpers/a11y';\n\nexport const RENDERER_TYPE = 'base';\n\n/**\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function baseRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  const ariaEnabled = cellProperties.ariaTags;\n  const classesToAdd = [];\n  const classesToRemove = [];\n  const attributesToRemove = [];\n  const attributesToAdd = [];\n\n  if (cellProperties.className) {\n    addClass(TD, cellProperties.className);\n  }\n\n  if (cellProperties.readOnly) {\n    classesToAdd.push(cellProperties.readOnlyCellClassName);\n\n    if (ariaEnabled) {\n      attributesToAdd.push(A11Y_READONLY());\n    }\n\n  } else if (ariaEnabled) {\n    attributesToRemove.push(A11Y_READONLY()[0]);\n  }\n\n  if (cellProperties.valid === false && cellProperties.invalidCellClassName) {\n    classesToAdd.push(cellProperties.invalidCellClassName);\n\n    if (ariaEnabled) {\n      attributesToAdd.push(A11Y_INVALID());\n    }\n\n  } else {\n    classesToRemove.push(cellProperties.invalidCellClassName);\n\n    if (ariaEnabled) {\n      attributesToRemove.push(A11Y_INVALID()[0]);\n    }\n  }\n\n  if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) {\n    classesToAdd.push(cellProperties.noWordWrapClassName);\n  }\n\n  if (!value && cellProperties.placeholder) {\n    classesToAdd.push(cellProperties.placeholderCellClassName);\n  }\n\n  removeClass(TD, classesToRemove);\n  addClass(TD, classesToAdd);\n\n  removeAttribute(TD, attributesToRemove);\n  setAttribute(TD, attributesToAdd);\n}\n\nbaseRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","/* eslint-disable handsontable/restricted-module-imports */\n// Since the Handsontable was modularized, importing some submodules is\n// restricted. Importing the main entry of the submodule can make the\n// \"dead\" code elimination process more difficult or even impossible.\n// The \"handsontable/restricted-module-imports\" rule is on guard.\n// This file exports the functions that allow include packages to\n// the Base version of the Handsontable, so that's why the rule is\n// disabled here (see more #7506).\nimport { registerAllEditors } from './editors';\nimport { registerAllRenderers } from './renderers';\nimport { registerAllValidators } from './validators';\nimport { registerAllCellTypes } from './cellTypes';\nimport { registerAllPlugins } from './plugins';\n/* eslint-enable handsontable/restricted-module-imports */\n\nexport {\n  registerAllEditors,\n  registerAllRenderers,\n  registerAllValidators,\n  registerAllCellTypes,\n  registerAllPlugins,\n};\n\n/**\n * Registers all available Handsontable modules.\n */\nexport function registerAllModules() {\n  registerAllEditors();\n  registerAllRenderers();\n  registerAllValidators();\n  registerAllCellTypes();\n  registerAllPlugins();\n}\n","import { AutocompleteEditor, EDITOR_TYPE as AUTOCOMPLETE_EDITOR } from './autocompleteEditor';\nimport { BaseEditor, EDITOR_TYPE as BASE_EDITOR } from './baseEditor';\nimport { CheckboxEditor, EDITOR_TYPE as CHECKBOX_EDITOR } from './checkboxEditor';\nimport { DateEditor, EDITOR_TYPE as DATE_EDITOR } from './dateEditor';\nimport { DropdownEditor, EDITOR_TYPE as DROPDOWN_EDITOR } from './dropdownEditor';\nimport { HandsontableEditor, EDITOR_TYPE as HANDSONTABLE_EDITOR } from './handsontableEditor';\nimport { NumericEditor, EDITOR_TYPE as NUMERIC_EDITOR } from './numericEditor';\nimport { PasswordEditor, EDITOR_TYPE as PASSWORD_EDITOR } from './passwordEditor';\nimport { SelectEditor, EDITOR_TYPE as SELECT_EDITOR } from './selectEditor';\nimport { TextEditor, EDITOR_TYPE as TEXT_EDITOR } from './textEditor';\nimport { TimeEditor, EDITOR_TYPE as TIME_EDITOR } from './timeEditor';\nimport {\n  registerEditor,\n} from './registry';\n\n/**\n * Registers all available editors.\n */\nexport function registerAllEditors() {\n  registerEditor(BaseEditor);\n  registerEditor(AutocompleteEditor);\n  registerEditor(CheckboxEditor);\n  registerEditor(DateEditor);\n  registerEditor(DropdownEditor);\n  registerEditor(HandsontableEditor);\n  registerEditor(NumericEditor);\n  registerEditor(PasswordEditor);\n  registerEditor(SelectEditor);\n  registerEditor(TextEditor);\n  registerEditor(TimeEditor);\n}\n\nexport {\n  AutocompleteEditor, AUTOCOMPLETE_EDITOR,\n  BaseEditor, BASE_EDITOR,\n  CheckboxEditor, CHECKBOX_EDITOR,\n  DateEditor, DATE_EDITOR,\n  DropdownEditor, DROPDOWN_EDITOR,\n  HandsontableEditor, HANDSONTABLE_EDITOR,\n  NumericEditor, NUMERIC_EDITOR,\n  PasswordEditor, PASSWORD_EDITOR,\n  SelectEditor, SELECT_EDITOR,\n  TextEditor, TEXT_EDITOR,\n  TimeEditor, TIME_EDITOR,\n};\n\nexport {\n  RegisteredEditor,\n  _getEditorInstance,\n  getEditor,\n  getEditorInstance,\n  getRegisteredEditorNames,\n  getRegisteredEditors,\n  hasEditor,\n  registerEditor,\n} from './registry';\n","export {\n  EDITOR_TYPE,\n  AutocompleteEditor,\n} from './autocompleteEditor';\n","import { HandsontableEditor } from '../handsontableEditor';\nimport { arrayMap, pivot } from '../../helpers/array';\nimport {\n  addClass,\n  getCaretPosition,\n  getScrollbarWidth,\n  getSelectionEndPosition,\n  getTrimmingContainer,\n  offset,\n  outerHeight,\n  outerWidth,\n  setAttribute,\n  setCaretPosition,\n} from '../../helpers/dom/element';\nimport { isDefined, stringify } from '../../helpers/mixed';\nimport { stripTags } from '../../helpers/string';\nimport { KEY_CODES, isPrintableChar } from '../../helpers/unicode';\nimport { isMacOS } from '../../helpers/browser';\nimport { textRenderer } from '../../renderers/textRenderer';\nimport {\n  A11Y_ACTIVEDESCENDANT,\n  A11Y_AUTOCOMPLETE,\n  A11Y_COMBOBOX,\n  A11Y_CONTROLS,\n  A11Y_EXPANDED,\n  A11Y_HASPOPUP,\n  A11Y_LISTBOX,\n  A11Y_LIVE,\n  A11Y_OPTION,\n  A11Y_POSINSET,\n  A11Y_PRESENTATION,\n  A11Y_RELEVANT,\n  A11Y_SELECTED,\n  A11Y_SETSIZE,\n  A11Y_TEXT\n} from '../../helpers/a11y';\n\nexport const EDITOR_TYPE = 'autocomplete';\n\n/**\n * @private\n * @class AutocompleteEditor\n */\nexport class AutocompleteEditor extends HandsontableEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Query string to turn available values over.\n   *\n   * @type {string}\n   */\n  query = null;\n  /**\n   * Contains stripped choices.\n   *\n   * @type {string[]}\n   */\n  strippedChoices = [];\n  /**\n   * Contains raw choices.\n   *\n   * @type {Array}\n   */\n  rawChoices = [];\n  /**\n   * Holds the prefix of the editor's id.\n   *\n   * @type {string}\n   */\n  #idPrefix = this.hot.guid.slice(0, 9);\n\n  /**\n   * Gets current value from editable element.\n   *\n   * @returns {string}\n   */\n  getValue() {\n    const selectedValue = this.rawChoices.find((value) => {\n      const strippedValue = this.stripValueIfNeeded(value);\n\n      return strippedValue === this.TEXTAREA.value;\n    });\n\n    if (isDefined(selectedValue)) {\n      return selectedValue;\n    }\n\n    return this.TEXTAREA.value;\n  }\n\n  /**\n   * Creates an editor's elements and adds necessary CSS classnames.\n   */\n  createElements() {\n    super.createElements();\n\n    addClass(this.htContainer, 'autocompleteEditor');\n    addClass(this.htContainer, this.hot.rootWindow.navigator.platform.indexOf('Mac') === -1 ? '' : 'htMacScroll');\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_TEXT(),\n        A11Y_COMBOBOX(),\n        A11Y_HASPOPUP('listbox'),\n        A11Y_AUTOCOMPLETE(),\n      ]);\n    }\n  }\n\n  /**\n   * Prepares editor's metadata and configuration of the internal Handsontable's instance.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_EXPANDED('false'),\n        A11Y_CONTROLS(`${this.#idPrefix}-listbox-${row}-${col}`),\n      ]);\n    }\n  }\n\n  /**\n   * Opens the editor and adjust its size and internal Handsontable's instance.\n   */\n  open() {\n    super.open();\n\n    const trimDropdown = this.cellProperties.trimDropdown === undefined ? true : this.cellProperties.trimDropdown;\n    const rootInstanceAriaTagsEnabled = this.hot.getSettings().ariaTags;\n    const sourceArray = Array.isArray(this.cellProperties.source) ? this.cellProperties.source : null;\n    const sourceSize = sourceArray?.length;\n    const { row: rowIndex, col: colIndex } = this;\n\n    this.showEditableElement();\n    this.focus();\n    let scrollbarWidth = getScrollbarWidth();\n\n    if (scrollbarWidth === 0 && isMacOS()) {\n      scrollbarWidth += 15; // default scroll bar width if scroll bars are visible only when scrolling\n    }\n\n    this.addHook('beforeKeyDown', event => this.onBeforeKeyDown(event));\n\n    this.htEditor.updateSettings({\n      colWidths: trimDropdown ? [outerWidth(this.TEXTAREA) - 2] : undefined,\n      width: trimDropdown ? outerWidth(this.TEXTAREA) + scrollbarWidth : undefined,\n      autoColumnSize: true,\n      renderer: (hotInstance, TD, row, col, prop, value, cellProperties) => {\n        textRenderer(hotInstance, TD, row, col, prop, value, cellProperties);\n\n        const { filteringCaseSensitive, allowHtml, locale } = this.cellProperties;\n        const query = this.query;\n        let cellValue = stringify(value);\n        let indexOfMatch;\n        let match;\n\n        if (cellValue && !allowHtml) {\n          indexOfMatch = filteringCaseSensitive === true ?\n            cellValue.indexOf(query) : cellValue.toLocaleLowerCase(locale).indexOf(query.toLocaleLowerCase(locale));\n\n          if (indexOfMatch !== -1) {\n            match = cellValue.substr(indexOfMatch, query.length);\n            cellValue = cellValue.replace(match, `<strong>${match}</strong>`);\n          }\n        }\n\n        if (rootInstanceAriaTagsEnabled) {\n          setAttribute(TD, [\n            A11Y_OPTION(),\n            // Add `setsize` and `posinset` only if the source is an array.\n            ...(sourceArray ? [A11Y_SETSIZE(sourceSize)] : []),\n            ...(sourceArray ? [A11Y_POSINSET(sourceArray.indexOf(value) + 1)] : []),\n            ['id', `${this.htEditor.rootElement.id}_${row}-${col}`],\n          ]);\n        }\n\n        TD.innerHTML = cellValue;\n      },\n      afterSelectionEnd: (startRow, startCol) => {\n        if (rootInstanceAriaTagsEnabled) {\n          const TD = this.htEditor.getCell(startRow, startCol, true);\n\n          setAttribute(TD, [\n            A11Y_SELECTED(),\n          ]);\n\n          setAttribute(this.TEXTAREA, ...A11Y_ACTIVEDESCENDANT(TD.id));\n        }\n      },\n    });\n\n    if (rootInstanceAriaTagsEnabled) {\n      // Add `role=presentation` to the main table to prevent the readers from treating the option list as a table.\n      setAttribute(this.htEditor.view._wt.wtOverlays.wtTable.TABLE, ...A11Y_PRESENTATION());\n\n      setAttribute(this.htEditor.rootElement, [\n        A11Y_LISTBOX(),\n        A11Y_LIVE('polite'),\n        A11Y_RELEVANT('text'),\n        ['id', `${this.#idPrefix}-listbox-${rowIndex}-${colIndex}`],\n      ]);\n\n      setAttribute(this.TEXTAREA, ...A11Y_EXPANDED('true'));\n    }\n\n    this.hot._registerTimeout(() => {\n      this.queryChoices(this.TEXTAREA.value);\n    });\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    this.removeHooksByKey('beforeKeyDown');\n    super.close();\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_EXPANDED('false'),\n      ]);\n    }\n  }\n\n  /**\n   * Verifies result of validation or closes editor if user's cancelled changes.\n   *\n   * @param {boolean|undefined} result If `false` and the cell using allowInvalid option,\n   *                                   then an editor won't be closed until validation is passed.\n   */\n  discardEditor(result) {\n    super.discardEditor(result);\n\n    this.hot.view.render();\n  }\n\n  /**\n   * Prepares choices list based on applied argument.\n   *\n   * @private\n   * @param {string} query The query.\n   */\n  queryChoices(query) {\n    const source = this.cellProperties.source;\n\n    this.query = query;\n\n    if (typeof source === 'function') {\n      source.call(this.cellProperties, query, (choices) => {\n        this.rawChoices = choices;\n        this.updateChoicesList(this.stripValuesIfNeeded(choices));\n      });\n\n    } else if (Array.isArray(source)) {\n      this.rawChoices = source;\n      this.updateChoicesList(this.stripValuesIfNeeded(source));\n\n    } else {\n      this.updateChoicesList([]);\n    }\n  }\n\n  /**\n   * Updates list of the possible completions to choose.\n   *\n   * @private\n   * @param {Array} choicesList The choices list to process.\n   */\n  updateChoicesList(choicesList) {\n    const pos = getCaretPosition(this.TEXTAREA);\n    const endPos = getSelectionEndPosition(this.TEXTAREA);\n    const sortByRelevanceSetting = this.cellProperties.sortByRelevance;\n    const filterSetting = this.cellProperties.filter;\n    let orderByRelevance = null;\n    let highlightIndex = null;\n    let choices = choicesList;\n\n    if (sortByRelevanceSetting) {\n      orderByRelevance = this.sortByRelevance(\n        this.stripValueIfNeeded(this.getValue()),\n        choices,\n        this.cellProperties.filteringCaseSensitive\n      );\n    }\n    const orderByRelevanceLength = Array.isArray(orderByRelevance) ? orderByRelevance.length : 0;\n\n    if (filterSetting === false) {\n      if (orderByRelevanceLength) {\n        highlightIndex = orderByRelevance[0];\n      }\n\n    } else {\n      const sorted = [];\n\n      for (let i = 0, choicesCount = choices.length; i < choicesCount; i++) {\n        if (sortByRelevanceSetting && orderByRelevanceLength <= i) {\n          break;\n        }\n        if (orderByRelevanceLength) {\n          sorted.push(choices[orderByRelevance[i]]);\n        } else {\n          sorted.push(choices[i]);\n        }\n      }\n\n      highlightIndex = 0;\n      choices = sorted;\n    }\n\n    this.strippedChoices = choices;\n\n    if (choices.length === 0) {\n      this.htEditor.rootElement.style.display = 'none';\n\n    } else {\n      this.htEditor.rootElement.style.display = '';\n    }\n\n    this.htEditor.loadData(pivot([choices]));\n\n    if (choices.length > 0) {\n      this.updateDropdownDimensions();\n      this.flipDropdownIfNeeded();\n\n      if (this.cellProperties.strict === true) {\n        this.highlightBestMatchingChoice(highlightIndex);\n      }\n    }\n\n    this.hot.listen();\n\n    setCaretPosition(this.TEXTAREA, pos, (pos === endPos ? undefined : endPos));\n  }\n\n  /**\n   * Checks where is enough place to open editor.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  flipDropdownIfNeeded() {\n    const trimmingContainer = getTrimmingContainer(this.hot.view._wt.wtTable.TABLE);\n    const isWindowAsScrollableElement = trimmingContainer === this.hot.rootWindow;\n    const preventOverflow = this.cellProperties.preventOverflow;\n\n    if (isWindowAsScrollableElement ||\n        !isWindowAsScrollableElement && (preventOverflow || preventOverflow === 'horizontal')) {\n      return false;\n    }\n\n    const textareaOffset = offset(this.TEXTAREA);\n    const textareaHeight = outerHeight(this.TEXTAREA);\n    const dropdownHeight = this.getDropdownHeight();\n    const trimmingContainerScrollTop = trimmingContainer.scrollTop;\n    const headersHeight = outerHeight(this.hot.view._wt.wtTable.THEAD);\n    const containerOffset = offset(trimmingContainer);\n    const spaceAbove = textareaOffset.top - containerOffset.top - headersHeight + trimmingContainerScrollTop;\n    const spaceBelow = trimmingContainer.scrollHeight - spaceAbove - headersHeight - textareaHeight;\n    const flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow;\n\n    if (flipNeeded) {\n      this.flipDropdown(dropdownHeight);\n    } else {\n      this.unflipDropdown();\n    }\n\n    this.limitDropdownIfNeeded(flipNeeded ? spaceAbove : spaceBelow, dropdownHeight);\n\n    return flipNeeded;\n  }\n\n  /**\n   * Checks if the internal table should generate scrollbar or could be rendered without it.\n   *\n   * @private\n   * @param {number} spaceAvailable The free space as height defined in px available for dropdown list.\n   * @param {number} dropdownHeight The dropdown height.\n   */\n  limitDropdownIfNeeded(spaceAvailable, dropdownHeight) {\n    if (dropdownHeight > spaceAvailable) {\n      let tempHeight = 0;\n      let i = 0;\n      let lastRowHeight = 0;\n      let height = null;\n\n      do {\n        lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view._wt.getSetting('defaultRowHeight');\n        tempHeight += lastRowHeight;\n        i += 1;\n      } while (tempHeight < spaceAvailable);\n\n      height = tempHeight - lastRowHeight;\n\n      if (this.htEditor.flipped) {\n        this.htEditor.rootElement.style.top =\n        `${parseInt(this.htEditor.rootElement.style.top, 10) + dropdownHeight - height}px`;\n      }\n\n      this.setDropdownHeight(tempHeight - lastRowHeight);\n    }\n  }\n\n  /**\n   * Configures editor to open it at the top.\n   *\n   * @private\n   * @param {number} dropdownHeight The dropdown height.\n   */\n  flipDropdown(dropdownHeight) {\n    const dropdownStyle = this.htEditor.rootElement.style;\n\n    dropdownStyle.position = 'absolute';\n    dropdownStyle.top = `${-dropdownHeight}px`;\n\n    this.htEditor.flipped = true;\n  }\n\n  /**\n   * Configures editor to open it at the bottom.\n   *\n   * @private\n   */\n  unflipDropdown() {\n    const dropdownStyle = this.htEditor.rootElement.style;\n\n    dropdownStyle.position = 'absolute';\n    dropdownStyle.top = '';\n\n    this.htEditor.flipped = undefined;\n  }\n\n  /**\n   * Updates width and height of the internal Handsontable's instance.\n   *\n   * @private\n   */\n  updateDropdownDimensions() {\n    const currentDropdownWidth = this.htEditor.getColWidth(0) + getScrollbarWidth(this.hot.rootDocument) + 2;\n    const trimDropdown = this.cellProperties.trimDropdown;\n\n    this.htEditor.updateSettings({\n      height: this.getDropdownHeight(),\n      width: trimDropdown ? undefined : currentDropdownWidth\n    });\n\n    this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer();\n  }\n\n  /**\n   * Sets new height of the internal Handsontable's instance.\n   *\n   * @private\n   * @param {number} height The new dropdown height.\n   */\n  setDropdownHeight(height) {\n    this.htEditor.updateSettings({\n      height\n    });\n  }\n\n  /**\n   * Creates new selection on specified row index, or deselects selected cells.\n   *\n   * @private\n   * @param {number|undefined} index The visual row index.\n   */\n  highlightBestMatchingChoice(index) {\n    if (typeof index === 'number') {\n      this.htEditor.selectCell(index, 0, undefined, undefined, undefined, false);\n    } else {\n      this.htEditor.deselectCell();\n    }\n  }\n\n  /**\n   * Calculates and return the internal Handsontable's height.\n   *\n   * @private\n   * @returns {number}\n   */\n  getDropdownHeight() {\n    const firstRowHeight = this.htEditor.getRowHeight(0) || 23;\n    const visibleRows = this.cellProperties.visibleRows;\n\n    return this.strippedChoices.length >= visibleRows ? (visibleRows * firstRowHeight) : (this.strippedChoices.length * firstRowHeight) + 8; // eslint-disable-line max-len\n  }\n\n  /**\n   * Sanitizes value from potential dangerous tags.\n   *\n   * @private\n   * @param {string} value The value to sanitize.\n   * @returns {string}\n   */\n  stripValueIfNeeded(value) {\n    return this.stripValuesIfNeeded([value])[0];\n  }\n\n  /**\n   * Sanitizes an array of the values from potential dangerous tags.\n   *\n   * @private\n   * @param {string[]} values The value to sanitize.\n   * @returns {string[]}\n   */\n  stripValuesIfNeeded(values) {\n    const { allowHtml } = this.cellProperties;\n\n    const stringifiedValues = arrayMap(values, value => stringify(value));\n    const strippedValues = arrayMap(stringifiedValues, value => (allowHtml ? value : stripTags(value)));\n\n    return strippedValues;\n  }\n\n  /**\n   * Captures use of arrow down and up to control their behaviour.\n   *\n   * @private\n   * @param {number} keyCode The keyboard keycode.\n   * @returns {boolean}\n   */\n  allowKeyEventPropagation(keyCode) {\n    const selectedRange = this.htEditor.getSelectedRangeLast();\n    const selected = { row: selectedRange ? selectedRange.from.row : -1 };\n    let allowed = false;\n\n    if (keyCode === KEY_CODES.ARROW_DOWN && selected.row > 0 && selected.row < this.htEditor.countRows() - 1) {\n      allowed = true;\n    }\n    if (keyCode === KEY_CODES.ARROW_UP && selected.row > -1) {\n      allowed = true;\n    }\n\n    return allowed;\n  }\n\n  /**\n   * OnBeforeKeyDown callback.\n   *\n   * @private\n   * @param {KeyboardEvent} event The keyboard event object.\n   */\n  onBeforeKeyDown(event) {\n    if (isPrintableChar(event.keyCode) || event.keyCode === KEY_CODES.BACKSPACE ||\n      event.keyCode === KEY_CODES.DELETE || event.keyCode === KEY_CODES.INSERT) {\n      // for Windows 10 + FF86 there is need to add delay to make sure that the value taken from\n      // the textarea is the freshest value. Otherwise the list of choices does not update correctly (see #7570).\n      // On the more modern version of the FF (~ >=91) it seems that the issue is not present or it is\n      // more difficult to induce.\n      let timeOffset = 10;\n\n      // on ctl+c / cmd+c don't update suggestion list\n      if (event.keyCode === KEY_CODES.C && (event.ctrlKey || event.metaKey)) {\n        return;\n      }\n      if (!this.isOpened()) {\n        timeOffset += 10;\n      }\n\n      if (this.htEditor) {\n        this.hot._registerTimeout(() => {\n          this.queryChoices(this.TEXTAREA.value);\n        }, timeOffset);\n      }\n    }\n  }\n\n  /**\n   * Filters and sorts by relevance.\n   *\n   * @param {*} value The selected value.\n   * @param {string[]} choices The list of available choices.\n   * @param {boolean} caseSensitive Indicates if it's sorted by case.\n   * @returns {number[]} Array of indexes in original choices array.\n   */\n  sortByRelevance = function(value, choices, caseSensitive) {\n    const choicesRelevance = [];\n    const result = [];\n    const valueLength = value.length;\n    let choicesCount = choices.length;\n    let charsLeft;\n    let currentItem;\n    let i;\n    let valueIndex;\n\n    if (valueLength === 0) {\n      for (i = 0; i < choicesCount; i++) {\n        result.push(i);\n      }\n\n      return result;\n    }\n\n    for (i = 0; i < choicesCount; i++) {\n      currentItem = stripTags(stringify(choices[i]));\n\n      if (caseSensitive) {\n        valueIndex = currentItem.indexOf(value);\n      } else {\n        const locale = this.cellProperties.locale;\n\n        valueIndex = currentItem.toLocaleLowerCase(locale).indexOf(value.toLocaleLowerCase(locale));\n      }\n\n      if (valueIndex !== -1) {\n        charsLeft = currentItem.length - valueIndex - valueLength;\n\n        choicesRelevance.push({\n          baseIndex: i,\n          index: valueIndex,\n          charsLeft,\n          value: currentItem\n        });\n      }\n    }\n\n    choicesRelevance.sort((a, b) => {\n\n      if (b.index === -1) {\n        return -1;\n      }\n      if (a.index === -1) {\n        return 1;\n      }\n\n      if (a.index < b.index) {\n        return -1;\n      } else if (b.index < a.index) {\n        return 1;\n      } else if (a.index === b.index) {\n        if (a.charsLeft < b.charsLeft) {\n          return -1;\n        } else if (a.charsLeft > b.charsLeft) {\n          return 1;\n        }\n      }\n\n      return 0;\n    });\n\n    for (i = 0, choicesCount = choicesRelevance.length; i < choicesCount; i++) {\n      result.push(choicesRelevance[i].baseIndex);\n    }\n\n    return result;\n  }\n}\n","export {\n  EDITOR_TYPE,\n  HandsontableEditor,\n} from './handsontableEditor';\n","import { TextEditor } from '../textEditor';\nimport { setCaretPosition } from '../../helpers/dom/element';\nimport {\n  stopImmediatePropagation,\n} from '../../helpers/dom/event';\nimport { extend } from '../../helpers/object';\nimport { EDITOR_EDIT_GROUP } from '../../shortcutContexts';\n\nconst SHORTCUTS_GROUP = 'handsontableEditor';\n\nexport const EDITOR_TYPE = 'handsontable';\n\n/**\n * @private\n * @class HandsontableEditor\n */\nexport class HandsontableEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Opens the editor and adjust its size.\n   */\n  open() {\n    super.open();\n\n    if (this.htEditor) {\n      this.htEditor.destroy();\n    }\n\n    if (this.htContainer.style.display === 'none') {\n      this.htContainer.style.display = '';\n    }\n\n    // Constructs and initializes a new Handsontable instance\n    this.htEditor = new this.hot.constructor(this.htContainer, this.htOptions);\n    this.htEditor.init();\n    this.htEditor.rootElement.style.display = '';\n\n    if (this.cellProperties.strict) {\n      this.htEditor.selectCell(0, 0);\n    } else {\n      this.htEditor.deselectCell();\n    }\n\n    setCaretPosition(this.TEXTAREA, 0, this.TEXTAREA.value.length);\n    this.refreshDimensions();\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    if (this.htEditor) {\n      this.htEditor.rootElement.style.display = 'none';\n    }\n\n    this.removeHooksByKey('beforeKeyDown');\n    super.close();\n  }\n\n  /**\n   * Prepares editor's meta data and configuration of the internal Handsontable's instance.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    const parent = this;\n    const options = {\n      startRows: 0,\n      startCols: 0,\n      minRows: 0,\n      minCols: 0,\n      className: 'listbox',\n      copyPaste: false,\n      autoColumnSize: false,\n      autoRowSize: false,\n      readOnly: true,\n      fillHandle: false,\n      autoWrapCol: false,\n      autoWrapRow: false,\n      ariaTags: false,\n      afterOnCellMouseDown(_, coords) {\n        const sourceValue = this.getSourceData(coords.row, coords.col);\n\n        // if the value is undefined then it means we don't want to set the value\n        if (sourceValue !== undefined) {\n          parent.setValue(sourceValue);\n        }\n        parent.hot.destroyEditor();\n      },\n      preventWheel: true,\n      layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',\n    };\n\n    if (this.cellProperties.handsontable) {\n      extend(options, cellProperties.handsontable);\n    }\n    this.htOptions = options;\n  }\n\n  /**\n   * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n   *\n   * @param {*} newInitialValue The editor initial value.\n   * @param {*} event The keyboard event object.\n   */\n  beginEditing(newInitialValue, event) {\n    const onBeginEditing = this.hot.getSettings().onBeginEditing;\n\n    if (onBeginEditing && onBeginEditing() === false) {\n      return;\n    }\n\n    super.beginEditing(newInitialValue, event);\n  }\n\n  /**\n   * Creates an editor's elements and adds necessary CSS classnames.\n   */\n  createElements() {\n    super.createElements();\n\n    const DIV = this.hot.rootDocument.createElement('DIV');\n\n    DIV.className = 'handsontableEditor';\n    this.TEXTAREA_PARENT.appendChild(DIV);\n\n    this.htContainer = DIV;\n    this.assignHooks();\n  }\n\n  /**\n   * Finishes editing and start saving or restoring process for editing cell or last selected range.\n   *\n   * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n   * @param {Function} callback The callback function, fired after editor closing.\n   */\n  finishEditing(restoreOriginalValue, ctrlDown, callback) {\n    if (this.htEditor && this.htEditor.isListening()) { // if focus is still in the HOT editor\n      this.hot.listen(); // return the focus to the parent HOT instance\n    }\n\n    if (this.htEditor && this.htEditor.getSelectedLast()) {\n      const value = this.htEditor.getValue();\n\n      if (value !== undefined) { // if the value is undefined then it means we don't want to set the value\n        this.setValue(value);\n      }\n    }\n\n    super.finishEditing(restoreOriginalValue, ctrlDown, callback);\n  }\n\n  /**\n   * Assigns afterDestroy callback to prevent memory leaks.\n   *\n   * @private\n   */\n  assignHooks() {\n    this.hot.addHook('afterDestroy', () => {\n      if (this.htEditor) {\n        this.htEditor.destroy();\n      }\n    });\n  }\n\n  /**\n   * Register shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    super.registerShortcuts();\n\n    const contextConfig = {\n      group: SHORTCUTS_GROUP,\n      relativeToGroup: EDITOR_EDIT_GROUP,\n      position: 'before',\n    };\n\n    const action = (rowToSelect, event) => {\n      const innerHOT = this.htEditor;\n\n      if (rowToSelect !== undefined) {\n        if (rowToSelect < 0 || (innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1)) {\n          innerHOT.deselectCell();\n        } else {\n          innerHOT.selectCell(rowToSelect, 0);\n        }\n        if (innerHOT.getData().length) {\n          event.preventDefault();\n          stopImmediatePropagation(event);\n\n          this.hot.listen();\n          this.TEXTAREA.focus();\n\n          return false;\n        }\n      }\n    };\n\n    editorContext.addShortcuts([{\n      keys: [['ArrowUp']],\n      callback: (event) => {\n        const innerHOT = this.htEditor;\n        let rowToSelect;\n        let selectedRow;\n\n        if (!innerHOT.getSelectedLast() && innerHOT.flipped) {\n          rowToSelect = innerHOT.countRows() - 1;\n\n        } else if (innerHOT.getSelectedLast()) {\n          if (innerHOT.flipped) {\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = Math.max(0, selectedRow - 1);\n          } else {\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = selectedRow - 1;\n          }\n        }\n\n        return action(rowToSelect, event);\n      },\n      preventDefault: false, // Doesn't block default behaviour (navigation) for a `textArea` HTMLElement.\n    }, {\n      keys: [['ArrowDown']],\n      callback: (event) => {\n        const innerHOT = this.htEditor;\n        let rowToSelect;\n        let selectedRow;\n\n        if (!innerHOT.getSelectedLast() && !innerHOT.flipped) {\n          rowToSelect = 0;\n\n        } else if (innerHOT.getSelectedLast()) {\n          if (innerHOT.flipped) {\n            rowToSelect = innerHOT.getSelectedLast()[0] + 1;\n\n          } else if (!innerHOT.flipped) {\n            const lastRow = innerHOT.countRows() - 1;\n\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = Math.min(lastRow, selectedRow + 1);\n          }\n        }\n\n        return action(rowToSelect, event);\n      },\n      preventDefault: false, // Doesn't block default behaviour (navigation) for a `textArea` HTMLElement.\n    }], contextConfig);\n  }\n\n  /**\n   * Unregister shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    super.unregisterShortcuts();\n\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n}\n","export {\n  EDITOR_TYPE,\n  CheckboxEditor,\n} from './checkboxEditor';\n","import { BaseEditor } from '../baseEditor';\nimport { hasClass } from '../../helpers/dom/element';\n\nexport const EDITOR_TYPE = 'checkbox';\n\n/**\n * @private\n * @class CheckboxEditor\n */\nexport class CheckboxEditor extends BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  beginEditing(initialValue, event) {\n    // Just some events connected with the checkbox editor are delegated here. Some `keydown` events like `enter` and\n    // `space` key presses are handled inside `checkboxRenderer`. Some events come here from `editorManager`. The below\n    // `if` statement was created by the author for the purpose of handling only the `doubleclick` event on the TD\n    // element with a checkbox.\n\n    if (event && event.type === 'mouseup' && event.target.nodeName === 'TD') {\n      const checkbox = this.TD.querySelector('input[type=\"checkbox\"]');\n\n      if (!hasClass(checkbox, 'htBadValue')) {\n        checkbox.click();\n      }\n    }\n  }\n\n  finishEditing() {}\n  init() {}\n  open() {}\n  close() {}\n  getValue() {}\n  setValue() {}\n  focus() {}\n}\n","export {\n  EDITOR_TYPE,\n  DateEditor,\n} from './dateEditor';\n","import moment from 'moment';\nimport Pikaday from '@handsontable/pikaday';\nimport { EDITOR_STATE } from '../baseEditor';\nimport { TextEditor } from '../textEditor';\nimport { addClass, hasClass, outerHeight, outerWidth } from '../../helpers/dom/element';\nimport { deepExtend } from '../../helpers/object';\nimport { isFunctionKey } from '../../helpers/unicode';\n\nimport '@handsontable/pikaday/css/pikaday.css';\n\nexport const EDITOR_TYPE = 'date';\nconst SHORTCUTS_GROUP_EDITOR = 'dateEditor';\n\n/**\n * @private\n * @class DateEditor\n */\nexport class DateEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  // TODO: Move this option to general settings\n  /**\n   * @type {string}\n   */\n  defaultDateFormat = 'DD/MM/YYYY';\n  /**\n   * @type {boolean}\n   */\n  parentDestroyed = false;\n  /**\n   * @type {Pikaday}\n   */\n  $datePicker = null;\n\n  init() {\n    if (typeof moment !== 'function') {\n      throw new Error('You need to include moment.js to your project.');\n    }\n\n    if (typeof Pikaday !== 'function') {\n      throw new Error('You need to include Pikaday to your project.');\n    }\n    super.init();\n    this.hot.addHook('afterDestroy', () => {\n      this.parentDestroyed = true;\n      this.destroyElements();\n    });\n  }\n\n  /**\n   * Create data picker instance.\n   */\n  createElements() {\n    super.createElements();\n\n    this.datePicker = this.hot.rootDocument.createElement('DIV');\n    this.datePickerStyle = this.datePicker.style;\n    this.datePickerStyle.position = 'absolute';\n    this.datePickerStyle.top = 0;\n    this.datePickerStyle.left = 0;\n    this.datePickerStyle.zIndex = 9999;\n\n    this.datePicker.setAttribute('dir', this.hot.isRtl() ? 'rtl' : 'ltr');\n\n    addClass(this.datePicker, 'htDatepickerHolder');\n    this.hot.rootDocument.body.appendChild(this.datePicker);\n\n    /**\n     * Prevent recognizing clicking on datepicker as clicking outside of table.\n     */\n    this.eventManager.addEventListener(this.datePicker, 'mousedown', (event) => {\n      if (hasClass(event.target, 'pika-day')) {\n        this.hideDatepicker();\n      }\n\n      event.stopPropagation();\n    });\n  }\n\n  /**\n   * Destroy data picker instance.\n   */\n  destroyElements() {\n    const datePickerParentElement = this.datePicker.parentNode;\n\n    if (this.$datePicker) {\n      this.$datePicker.destroy();\n    }\n\n    if (datePickerParentElement) {\n      datePickerParentElement.removeChild(this.datePicker);\n    }\n  }\n\n  /**\n   * Prepare editor to appear.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n  }\n\n  /**\n   * Open editor.\n   *\n   * @param {Event} [event=null] The event object.\n   */\n  open(event = null) {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    this.showDatepicker(event);\n    super.open();\n\n    editorContext.addShortcuts([{\n      keys: [['ArrowLeft']],\n      callback: () => {\n        this.$datePicker.adjustDate('subtract', 1);\n      },\n    }, {\n      keys: [['ArrowRight']],\n      callback: () => {\n        this.$datePicker.adjustDate('add', 1);\n      },\n    }, {\n      keys: [['ArrowUp']],\n      callback: () => {\n        this.$datePicker.adjustDate('subtract', 7);\n      },\n    }, {\n      keys: [['ArrowDown']],\n      callback: () => {\n        this.$datePicker.adjustDate('add', 7);\n      },\n    }], {\n      group: SHORTCUTS_GROUP_EDITOR,\n    });\n  }\n\n  /**\n   * Close editor.\n   */\n  close() {\n    this._opened = false;\n\n    // If the date picker was never initialized (e.g. during autofill), there's nothing to destroy.\n    if (this.$datePicker?.destroy) {\n      this.$datePicker.destroy();\n    }\n\n    this.hot._registerTimeout(() => {\n      const editorManager = this.hot._getEditorManager();\n\n      editorManager.closeEditor();\n      this.hot.view.render();\n      editorManager.prepareEditor();\n    });\n\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP_EDITOR);\n\n    super.close();\n  }\n\n  /**\n   * Finishes editing and start saving or restoring process for editing cell or last selected range.\n   *\n   * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n   */\n  finishEditing(restoreOriginalValue = false, ctrlDown = false) {\n    super.finishEditing(restoreOriginalValue, ctrlDown);\n  }\n\n  /**\n   * Show data picker.\n   *\n   * @param {Event} event The event object.\n   */\n  showDatepicker(event) {\n    const dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;\n    const isMouseDown = this.hot.view.isMouseDown();\n    const isMeta = event ? isFunctionKey(event.keyCode) : false;\n    let dateStr;\n\n    this.datePicker.style.display = 'block';\n\n    this.$datePicker = new Pikaday(this.getDatePickerConfig());\n\n    if (typeof this.$datePicker.useMoment === 'function') {\n      this.$datePicker.useMoment(moment);\n    }\n\n    this.$datePicker._onInputFocus = function() {};\n\n    if (this.originalValue) {\n      dateStr = this.originalValue;\n\n      if (moment(dateStr, dateFormat, true).isValid()) {\n        this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n      }\n\n      // workaround for date/time cells - pikaday resets the cell value to 12:00 AM by default, this will overwrite the value.\n      if (this.getValue() !== this.originalValue) {\n        this.setValue(this.originalValue);\n      }\n\n      if (!isMeta && !isMouseDown) {\n        this.setValue('');\n      }\n\n    } else if (this.cellProperties.defaultDate) {\n      dateStr = this.cellProperties.defaultDate;\n\n      if (moment(dateStr, dateFormat, true).isValid()) {\n        this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n      }\n\n      if (!isMeta && !isMouseDown) {\n        this.setValue('');\n      }\n    } else {\n      // if a default date is not defined, set a soft-default-date: display the current day and month in the\n      // datepicker, but don't fill the editor input\n      this.$datePicker.gotoToday();\n    }\n  }\n\n  /**\n   * Hide data picker.\n   */\n  hideDatepicker() {\n    this.datePickerStyle.display = 'none';\n    this.$datePicker.hide();\n  }\n\n  /**\n   * Get date picker options.\n   *\n   * @returns {object}\n   */\n  getDatePickerConfig() {\n    const htInput = this.TEXTAREA;\n    const options = {};\n\n    if (this.cellProperties && this.cellProperties.datePickerConfig) {\n      deepExtend(options, this.cellProperties.datePickerConfig);\n    }\n    const origOnSelect = options.onSelect;\n    const origOnClose = options.onClose;\n\n    options.field = htInput;\n    options.trigger = htInput;\n    options.container = this.datePicker;\n    options.bound = false;\n    options.keyboardInput = false;\n    options.format = options.format || this.defaultDateFormat;\n    options.reposition = options.reposition || false;\n    // Set the RTL to `false`. Due to the https://github.com/Pikaday/Pikaday/issues/647 bug, the layout direction\n    // of the date picker is controlled by juggling the \"dir\" attribute of the root date picker element.\n    // See line @64 of this file.\n    options.isRTL = false;\n    options.onSelect = (value) => {\n      let dateStr = value;\n\n      if (!isNaN(dateStr.getTime())) {\n        dateStr = moment(dateStr).format(this.cellProperties.dateFormat || this.defaultDateFormat);\n      }\n\n      this.setValue(dateStr);\n\n      if (origOnSelect) {\n        origOnSelect();\n      }\n    };\n    options.onClose = () => {\n      if (!this.parentDestroyed) {\n        this.finishEditing(false);\n      }\n      if (origOnClose) {\n        origOnClose();\n      }\n    };\n\n    return options;\n  }\n\n  /**\n   * Refreshes datepicker's size and position. The method is called internally by Handsontable.\n   *\n   * @private\n   * @param {boolean} force Indicates if the refreshing editor dimensions should be triggered.\n   */\n  refreshDimensions(force) {\n    super.refreshDimensions(force);\n\n    if (this.state !== EDITOR_STATE.EDITING) {\n      return;\n    }\n\n    this.TD = this.getEditedCell();\n\n    if (!this.TD) {\n      this.hideDatepicker();\n\n      return;\n    }\n\n    const { rowIndexMapper, columnIndexMapper } = this.hot;\n    const { wtOverlays } = this.hot.view._wt;\n    const { wtTable } = wtOverlays.getParentOverlay(this.TD) ?? this.hot.view._wt;\n\n    const firstVisibleRow = rowIndexMapper.getVisualFromRenderableIndex(wtTable.getFirstPartiallyVisibleRow());\n    const lastVisibleRow = rowIndexMapper.getVisualFromRenderableIndex(wtTable.getLastPartiallyVisibleRow());\n    const firstVisibleColumn = columnIndexMapper.getVisualFromRenderableIndex(wtTable.getFirstPartiallyVisibleColumn());\n    const lastVisibleColumn = columnIndexMapper.getVisualFromRenderableIndex(wtTable.getLastPartiallyVisibleColumn());\n\n    if (\n      this.row >= firstVisibleRow && this.row <= lastVisibleRow &&\n      this.col >= firstVisibleColumn && this.col <= lastVisibleColumn\n    ) {\n      const offset = this.TD.getBoundingClientRect();\n\n      this.datePickerStyle.top = `${this.hot.rootWindow.pageYOffset + offset.top + outerHeight(this.TD)}px`;\n\n      let pickerLeftPosition = this.hot.rootWindow.pageXOffset;\n\n      if (this.hot.isRtl()) {\n        pickerLeftPosition += offset.right - outerWidth(this.datePicker);\n      } else {\n        pickerLeftPosition += offset.left;\n      }\n\n      this.datePickerStyle.left = `${pickerLeftPosition}px`;\n\n    } else {\n      this.hideDatepicker();\n    }\n  }\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__402__;","","export {\n  EDITOR_TYPE,\n  DropdownEditor,\n} from './dropdownEditor';\n","import { AutocompleteEditor } from '../autocompleteEditor';\nimport Hooks from '../../pluginHooks';\n\nexport const EDITOR_TYPE = 'dropdown';\n\n/**\n * @private\n * @class DropdownEditor\n */\nexport class DropdownEditor extends AutocompleteEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n    this.cellProperties.filter = false;\n    this.cellProperties.strict = true;\n  }\n}\n\nHooks.getSingleton().add('beforeValidate', function(value, row, col) {\n  const visualColumnIndex = this.propToCol(col);\n\n  if (Number.isInteger(visualColumnIndex)) {\n    const cellMeta = this.getCellMeta(row, visualColumnIndex);\n\n    if (cellMeta.editor === DropdownEditor) {\n      if (cellMeta.strict === undefined) {\n        cellMeta.filter = false;\n        cellMeta.strict = true;\n      }\n    }\n  }\n});\n","export {\n  EDITOR_TYPE,\n  NumericEditor,\n} from './numericEditor';\n","import { TextEditor } from '../textEditor';\n\nexport const EDITOR_TYPE = 'numeric';\n\n/**\n * @private\n * @class NumericEditor\n */\nexport class NumericEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n}\n","export {\n  EDITOR_TYPE,\n  PasswordEditor,\n} from './passwordEditor';\n","import { TextEditor } from '../textEditor';\nimport { empty, setAttribute } from '../../helpers/dom/element';\nimport {\n  A11Y_HIDDEN,\n} from '../../helpers/a11y';\n\nexport const EDITOR_TYPE = 'password';\n\n/**\n * @private\n * @class PasswordEditor\n */\nexport class PasswordEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  createElements() {\n    super.createElements();\n\n    this.TEXTAREA = this.hot.rootDocument.createElement('input');\n    this.TEXTAREA.setAttribute('type', 'password');\n    this.TEXTAREA.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.\n    this.TEXTAREA.className = 'handsontableInput';\n    this.textareaStyle = this.TEXTAREA.style;\n    this.textareaStyle.width = 0;\n    this.textareaStyle.height = 0;\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_HIDDEN(),\n      ]);\n    }\n\n    empty(this.TEXTAREA_PARENT);\n    this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n  }\n}\n","export {\n  EDITOR_TYPE,\n  SelectEditor,\n} from './selectEditor';\n","import { BaseEditor, EDITOR_STATE } from '../baseEditor';\nimport {\n  addClass,\n  empty,\n  fastInnerHTML,\n  hasClass,\n  removeClass,\n} from '../../helpers/dom/element';\nimport { objectEach } from '../../helpers/object';\n\nconst EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';\nconst SHORTCUTS_GROUP = 'selectEditor';\n\nexport const EDITOR_TYPE = 'select';\n\n/**\n * @private\n * @class SelectEditor\n */\nexport class SelectEditor extends BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Initializes editor instance, DOM Element and mount hooks.\n   */\n  init() {\n    this.select = this.hot.rootDocument.createElement('select');\n    this.select.setAttribute('data-hot-input', 'true');\n    this.select.style.display = 'none';\n\n    addClass(this.select, 'htSelectEditor');\n\n    this.hot.rootElement.appendChild(this.select);\n    this.registerHooks();\n  }\n\n  /**\n   * Returns select's value.\n   *\n   * @returns {*}\n   */\n  getValue() {\n    return this.select.value;\n  }\n\n  /**\n   * Sets value in the select element.\n   *\n   * @param {*} value A new select's value.\n   */\n  setValue(value) {\n    this.select.value = value;\n  }\n\n  /**\n   * Opens the editor and adjust its size.\n   */\n  open() {\n    this._opened = true;\n    this.refreshDimensions();\n    this.select.style.display = '';\n\n    const shortcutManager = this.hot.getShortcutManager();\n\n    shortcutManager.setActiveContextName('editor');\n\n    this.registerShortcuts();\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    this._opened = false;\n    this.select.style.display = 'none';\n\n    if (hasClass(this.select, EDITOR_VISIBLE_CLASS_NAME)) {\n      removeClass(this.select, EDITOR_VISIBLE_CLASS_NAME);\n    }\n\n    this.unregisterShortcuts();\n    this.clearHooks();\n  }\n\n  /**\n   * Sets focus state on the select element.\n   */\n  focus() {\n    this.select.focus();\n  }\n\n  /**\n   * Binds hooks to refresh editor's size after scrolling of the viewport or resizing of columns/rows.\n   *\n   * @private\n   */\n  registerHooks() {\n    this.addHook('afterScrollHorizontally', () => this.refreshDimensions());\n    this.addHook('afterScrollVertically', () => this.refreshDimensions());\n    this.addHook('afterColumnResize', () => this.refreshDimensions());\n    this.addHook('afterRowResize', () => this.refreshDimensions());\n  }\n\n  /**\n   * Prepares editor's meta data and a list of available options.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    const selectOptions = this.cellProperties.selectOptions;\n    let options;\n\n    if (typeof selectOptions === 'function') {\n      options = this.prepareOptions(selectOptions(this.row, this.col, this.prop));\n    } else {\n      options = this.prepareOptions(selectOptions);\n    }\n\n    empty(this.select);\n\n    objectEach(options, (optionValue, key) => {\n      const optionElement = this.hot.rootDocument.createElement('OPTION');\n\n      optionElement.value = key;\n\n      fastInnerHTML(optionElement, optionValue);\n      this.select.appendChild(optionElement);\n    });\n  }\n\n  /**\n   * Creates consistent list of available options.\n   *\n   * @private\n   * @param {Array|object} optionsToPrepare The list of the values to render in the select eleemnt.\n   * @returns {object}\n   */\n  prepareOptions(optionsToPrepare) {\n    let preparedOptions = {};\n\n    if (Array.isArray(optionsToPrepare)) {\n      for (let i = 0, len = optionsToPrepare.length; i < len; i++) {\n        preparedOptions[optionsToPrepare[i]] = optionsToPrepare[i];\n      }\n\n    } else if (typeof optionsToPrepare === 'object') {\n      preparedOptions = optionsToPrepare;\n    }\n\n    return preparedOptions;\n  }\n\n  /**\n   * Refreshes editor's value using source data.\n   *\n   * @private\n   */\n  refreshValue() {\n    const sourceData = this.hot.getSourceDataAtCell(this.row, this.prop);\n\n    this.originalValue = sourceData;\n\n    this.setValue(sourceData);\n    this.refreshDimensions();\n  }\n\n  /**\n   * Refreshes editor's size and position.\n   *\n   * @private\n   */\n  refreshDimensions() {\n    if (this.state !== EDITOR_STATE.EDITING) {\n      return;\n    }\n\n    this.TD = this.getEditedCell();\n\n    // TD is outside of the viewport.\n    if (!this.TD) {\n      this.close();\n\n      return;\n    }\n\n    const {\n      top,\n      start,\n      width,\n      height,\n    } = this.getEditedCellRect();\n    const selectStyle = this.select.style;\n\n    selectStyle.height = `${height}px`;\n    selectStyle.width = `${width}px`;\n    selectStyle.top = `${top}px`;\n    selectStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;\n    selectStyle.margin = '0px';\n\n    addClass(this.select, EDITOR_VISIBLE_CLASS_NAME);\n  }\n\n  /**\n   * Register shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n    const contextConfig = {\n      group: SHORTCUTS_GROUP,\n    };\n\n    if (this.isInFullEditMode()) {\n      // The arrow-related shortcuts should work only in full edit mode.\n      editorContext.addShortcuts([{\n        keys: [['ArrowUp']],\n        callback: () => {\n          const previousOptionIndex = this.select.selectedIndex - 1;\n\n          if (previousOptionIndex >= 0) {\n            this.select[previousOptionIndex].selected = true;\n          }\n        },\n      }, {\n        keys: [['ArrowDown']],\n        callback: () => {\n          const nextOptionIndex = this.select.selectedIndex + 1;\n\n          if (nextOptionIndex <= this.select.length - 1) {\n            this.select[nextOptionIndex].selected = true;\n          }\n        }\n      }], contextConfig);\n    }\n  }\n\n  /**\n   * Unregister shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n}\n","export {\n  EDITOR_TYPE,\n  TimeEditor,\n} from './timeEditor';\n","import { TextEditor } from '../textEditor';\n\nexport const EDITOR_TYPE = 'time';\n\n/**\n * @private\n * @class TimeEditor\n */\nexport class TimeEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Prepares editor's meta data.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    this.TEXTAREA.dir = 'ltr';\n  }\n}\n","import { autocompleteRenderer, RENDERER_TYPE as AUTOCOMPLETE_RENDERER } from './autocompleteRenderer';\nimport { baseRenderer, RENDERER_TYPE as BASE_RENDERER } from './baseRenderer';\nimport { dropdownRenderer, RENDERER_TYPE as DROPDOWN_RENDERER } from './dropdownRenderer';\nimport { checkboxRenderer, RENDERER_TYPE as CHECKBOX_RENDERER } from './checkboxRenderer';\nimport { handsontableRenderer, RENDERER_TYPE as HANDSONTABLE_RENDERER } from './handsontableRenderer';\nimport { htmlRenderer, RENDERER_TYPE as HTML_RENDERER } from './htmlRenderer';\nimport { numericRenderer, RENDERER_TYPE as NUMERIC_RENDERER } from './numericRenderer';\nimport { passwordRenderer, RENDERER_TYPE as PASSWORD_RENDERER } from './passwordRenderer';\nimport { selectRenderer, RENDERER_TYPE as SELECT_RENDERER } from './selectRenderer';\nimport { textRenderer, RENDERER_TYPE as TEXT_RENDERER } from './textRenderer';\nimport { timeRenderer, RENDERER_TYPE as TIME_RENDERER } from './timeRenderer';\nimport {\n  registerRenderer,\n} from './registry';\n\n/**\n * Registers all available renderers.\n */\nexport function registerAllRenderers() {\n  registerRenderer(autocompleteRenderer);\n  registerRenderer(baseRenderer);\n  registerRenderer(checkboxRenderer);\n  registerRenderer(dropdownRenderer);\n  registerRenderer(handsontableRenderer);\n  registerRenderer(htmlRenderer);\n  registerRenderer(numericRenderer);\n  registerRenderer(passwordRenderer);\n  registerRenderer(selectRenderer);\n  registerRenderer(textRenderer);\n  registerRenderer(timeRenderer);\n}\n\nexport {\n  autocompleteRenderer, AUTOCOMPLETE_RENDERER,\n  baseRenderer, BASE_RENDERER,\n  dropdownRenderer, DROPDOWN_RENDERER,\n  checkboxRenderer, CHECKBOX_RENDERER,\n  handsontableRenderer, HANDSONTABLE_RENDERER,\n  htmlRenderer, HTML_RENDERER,\n  numericRenderer, NUMERIC_RENDERER,\n  passwordRenderer, PASSWORD_RENDERER,\n  selectRenderer, SELECT_RENDERER,\n  textRenderer, TEXT_RENDERER,\n  timeRenderer, TIME_RENDERER,\n};\n\nexport {\n  getRegisteredRendererNames,\n  getRegisteredRenderers,\n  getRenderer,\n  hasRenderer,\n  registerRenderer,\n} from './registry';\n","export {\n  RENDERER_TYPE,\n  autocompleteRenderer\n} from './autocompleteRenderer';\n","import { htmlRenderer } from '../htmlRenderer';\nimport { textRenderer } from '../textRenderer';\nimport EventManager from '../../eventManager';\nimport { addClass, hasClass } from '../../helpers/dom/element';\n\nimport './autocompleteRenderer.scss';\nimport { A11Y_HIDDEN } from '../../helpers/a11y';\n\nexport const RENDERER_TYPE = 'autocomplete';\n\n/**\n * Autocomplete renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function autocompleteRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  const { rootDocument } = hotInstance;\n  const rendererFunc = cellProperties.allowHtml ? htmlRenderer : textRenderer;\n  const ARROW = rootDocument.createElement('DIV');\n  const isAriaEnabled = hotInstance.getSettings().ariaTags;\n\n  ARROW.className = 'htAutocompleteArrow';\n\n  if (isAriaEnabled) {\n    ARROW.setAttribute(...A11Y_HIDDEN());\n  }\n\n  ARROW.appendChild(rootDocument.createTextNode(String.fromCharCode(9660)));\n\n  rendererFunc.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  if (!TD.firstChild) { // http://jsperf.com/empty-node-if-needed\n    // otherwise empty fields appear borderless in demo/renderers.html (IE)\n    TD.appendChild(rootDocument.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n  }\n\n  TD.insertBefore(ARROW, TD.firstChild);\n\n  addClass(TD, 'htAutocomplete');\n\n  if (!hotInstance.acArrowListener) {\n    const eventManager = new EventManager(hotInstance);\n\n    // not very elegant but easy and fast\n    hotInstance.acArrowListener = function(event) {\n      if (hasClass(event.target, 'htAutocompleteArrow')) {\n        hotInstance.view._wt.getSetting('onCellDblClick', null, hotInstance._createCellCoords(row, col), TD);\n      }\n    };\n\n    eventManager.addEventListener(hotInstance.rootElement, 'mousedown', hotInstance.acArrowListener);\n\n    // We need to unbind the listener after the table has been destroyed\n    hotInstance.addHookOnce('afterDestroy', () => {\n      eventManager.destroy();\n    });\n  }\n}\n\nautocompleteRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  htmlRenderer,\n} from './htmlRenderer';\n","import { baseRenderer } from '../baseRenderer';\nimport { fastInnerHTML } from '../../helpers/dom/element';\n\nexport const RENDERER_TYPE = 'html';\n\n/**\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function htmlRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  baseRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  fastInnerHTML(TD, value === null || value === undefined ? '' : value, false);\n}\n\nhtmlRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  RENDERER_TYPE,\n  dropdownRenderer\n} from './dropdownRenderer';\n","import { autocompleteRenderer } from '../autocompleteRenderer';\n\nexport const RENDERER_TYPE = 'dropdown';\n\n/**\n * Dropdown renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function dropdownRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\ndropdownRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  checkboxRenderer\n} from './checkboxRenderer';\n","import { baseRenderer } from '../baseRenderer';\nimport EventManager from '../../eventManager';\nimport { empty, addClass, setAttribute } from '../../helpers/dom/element';\nimport { isEmpty, stringify } from '../../helpers/mixed';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport Hooks from '../../pluginHooks';\nimport { A11Y_CHECKBOX, A11Y_CHECKED, A11Y_LABEL } from '../../helpers/a11y';\nimport { CHECKBOX_CHECKED, CHECKBOX_UNCHECKED } from '../../i18n/constants';\n\nimport './checkboxRenderer.css';\n\nconst isListeningKeyDownEvent = new WeakMap();\nconst isCheckboxListenerAdded = new WeakMap();\nconst BAD_VALUE_CLASS = 'htBadValue';\nconst ATTR_ROW = 'data-row';\nconst ATTR_COLUMN = 'data-col';\nconst SHORTCUTS_GROUP = 'checkboxRenderer';\n\nexport const RENDERER_TYPE = 'checkbox';\n\nHooks.getSingleton().add('modifyAutoColumnSizeSeed', function(bundleSeed, cellMeta, cellValue) {\n  const { label, type, row, column, prop } = cellMeta;\n\n  if (type !== RENDERER_TYPE) {\n    return;\n  }\n\n  if (label) {\n    const { value: labelValue, property: labelProperty } = label;\n    let labelText = cellValue;\n\n    if (labelValue) {\n      labelText = typeof labelValue === 'function' ?\n        labelValue(row, column, prop, cellValue) : labelValue;\n\n    } else if (labelProperty) {\n      const labelData = this.getDataAtRowProp(row, labelProperty);\n\n      labelText = labelData !== null ? labelData : cellValue;\n    }\n\n    bundleSeed = labelText;\n  }\n\n  return bundleSeed;\n});\n/**\n * Checkbox renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  const { rootDocument } = hotInstance;\n  const ariaEnabled = hotInstance.getSettings().ariaTags;\n\n  baseRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n  registerEvents(hotInstance);\n\n  let input = createInput(rootDocument);\n  const labelOptions = cellProperties.label;\n  let badValue = false;\n\n  if (typeof cellProperties.checkedTemplate === 'undefined') {\n    cellProperties.checkedTemplate = true;\n  }\n  if (typeof cellProperties.uncheckedTemplate === 'undefined') {\n    cellProperties.uncheckedTemplate = false;\n  }\n\n  empty(TD); // TODO identify under what circumstances this line can be removed\n\n  if (value === cellProperties.checkedTemplate ||\n    stringify(value).toLocaleLowerCase(cellProperties.locale) ===\n    stringify(cellProperties.checkedTemplate).toLocaleLowerCase(cellProperties.locale)) {\n    input.checked = true;\n\n  } else if (value === cellProperties.uncheckedTemplate ||\n    stringify(value).toLocaleLowerCase(cellProperties.locale) ===\n    stringify(cellProperties.uncheckedTemplate).toLocaleLowerCase(cellProperties.locale)) {\n    input.checked = false;\n\n  } else if (isEmpty(value)) { // default value\n    addClass(input, 'noValue');\n\n  } else {\n    input.style.display = 'none';\n    addClass(input, BAD_VALUE_CLASS);\n    badValue = true;\n  }\n\n  setAttribute(input, [\n    [ATTR_ROW, row],\n    [ATTR_COLUMN, col],\n  ]);\n\n  if (ariaEnabled) {\n    setAttribute(input, [\n      A11Y_LABEL(input.checked ?\n        hotInstance.getTranslatedPhrase(CHECKBOX_CHECKED) :\n        hotInstance.getTranslatedPhrase(CHECKBOX_UNCHECKED)\n      ),\n      A11Y_CHECKED(input.checked),\n      A11Y_CHECKBOX(),\n    ]);\n  }\n\n  if (!badValue && labelOptions) {\n    let labelText = '';\n\n    if (labelOptions.value) {\n      labelText = typeof labelOptions.value === 'function' ?\n        labelOptions.value.call(this, row, col, prop, value) : labelOptions.value;\n\n    } else if (labelOptions.property) {\n      const labelValue = hotInstance.getDataAtRowProp(row, labelOptions.property);\n\n      labelText = labelValue !== null ? labelValue : '';\n    }\n\n    const label = createLabel(rootDocument, labelText, labelOptions.separated !== true);\n\n    if (labelOptions.position === 'before') {\n      if (labelOptions.separated) {\n        TD.appendChild(label);\n        TD.appendChild(input);\n\n      } else {\n        label.appendChild(input);\n        input = label;\n      }\n    } else if (!labelOptions.position || labelOptions.position === 'after') {\n      if (labelOptions.separated) {\n        TD.appendChild(input);\n        TD.appendChild(label);\n\n      } else {\n        label.insertBefore(input, label.firstChild);\n        input = label;\n      }\n    }\n  }\n\n  if (!labelOptions || (labelOptions && !labelOptions.separated)) {\n    TD.appendChild(input);\n  }\n\n  if (badValue) {\n    TD.appendChild(rootDocument.createTextNode('#bad-value#'));\n  }\n\n  if (!isListeningKeyDownEvent.has(hotInstance)) {\n    isListeningKeyDownEvent.set(hotInstance, true);\n    registerShortcuts();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling checkbox state.\n   *\n   * @private\n   */\n  function registerShortcuts() {\n    const shortcutManager = hotInstance.getShortcutManager();\n    const gridContext = shortcutManager.getContext('grid');\n    const config = {\n      group: SHORTCUTS_GROUP,\n      relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n      position: 'before',\n    };\n\n    gridContext.addShortcuts([{\n      keys: [['space']],\n      callback: () => {\n        changeSelectedCheckboxesState();\n\n        return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.\n      },\n      runOnlyIf: () => hotInstance.getSelectedRangeLast()?.highlight.isCell(),\n    }, {\n      keys: [['enter']],\n      callback: () => {\n        changeSelectedCheckboxesState();\n\n        return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.\n      },\n      runOnlyIf: () => {\n        const range = hotInstance.getSelectedRangeLast();\n\n        return hotInstance.getSettings().enterBeginsEditing && range?.isSingle() && range.highlight.isCell();\n      },\n    }, {\n      keys: [['delete'], ['backspace']],\n      callback: () => {\n        changeSelectedCheckboxesState(true);\n\n        return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.\n      },\n      runOnlyIf: () => hotInstance.getSelectedRangeLast()?.highlight.isCell(),\n    }], config);\n  }\n\n  /**\n   * Change checkbox checked property.\n   *\n   * @private\n   * @param {boolean} [uncheckCheckbox=false] The new \"checked\" state for the checkbox elements.\n   */\n  function changeSelectedCheckboxesState(uncheckCheckbox = false) {\n    const selRange = hotInstance.getSelectedRange();\n    const changesPerSubSelection = [];\n    const nonCheckboxChanges = new Map();\n    let changes = [];\n    let changeCounter = 0;\n\n    if (!selRange) {\n      return;\n    }\n\n    for (let key = 0; key < selRange.length; key++) {\n      const { row: startRow, col: startColumn } = selRange[key].getTopStartCorner();\n      const { row: endRow, col: endColumn } = selRange[key].getBottomEndCorner();\n\n      for (let visualRow = startRow; visualRow <= endRow; visualRow += 1) {\n        for (let visualColumn = startColumn; visualColumn <= endColumn; visualColumn += 1) {\n          const cachedCellProperties = hotInstance.getCellMeta(visualRow, visualColumn);\n          const templates = {\n            checkedTemplate: cachedCellProperties.checkedTemplate,\n            uncheckedTemplate: cachedCellProperties.uncheckedTemplate,\n          };\n\n          // TODO: In the future it'd be better if non-checkbox changes were handled by the non-checkbox\n          //  `delete` keypress logic.\n          /* eslint-disable no-continue */\n          if (cachedCellProperties.type !== 'checkbox') {\n            if (uncheckCheckbox === true && !cachedCellProperties.readOnly) {\n              if (nonCheckboxChanges.has(changesPerSubSelection.length)) {\n                nonCheckboxChanges.set(changesPerSubSelection.length, [\n                  ...nonCheckboxChanges.get(changesPerSubSelection.length),\n                  [visualRow, visualColumn, null]\n                ]);\n\n              } else {\n                nonCheckboxChanges.set(changesPerSubSelection.length, [[visualRow, visualColumn, null]]);\n              }\n            }\n\n            continue;\n          }\n\n          /* eslint-disable no-continue */\n          if (cachedCellProperties.readOnly === true) {\n            continue;\n          }\n\n          if (typeof cachedCellProperties.checkedTemplate === 'undefined') {\n            cachedCellProperties.checkedTemplate = true;\n          }\n          if (typeof cachedCellProperties.uncheckedTemplate === 'undefined') {\n            cachedCellProperties.uncheckedTemplate = false;\n          }\n\n          const dataAtCell = hotInstance.getDataAtCell(visualRow, visualColumn);\n\n          if (uncheckCheckbox === false) {\n            if ([cachedCellProperties.checkedTemplate, cachedCellProperties.checkedTemplate.toString()].includes(dataAtCell)) { // eslint-disable-line max-len\n              changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate, templates]);\n\n            } else if ([cachedCellProperties.uncheckedTemplate, cachedCellProperties.uncheckedTemplate.toString(), null, undefined].includes(dataAtCell)) { // eslint-disable-line max-len\n              changes.push([visualRow, visualColumn, cachedCellProperties.checkedTemplate, templates]);\n            }\n\n          } else {\n            changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate, templates]);\n          }\n\n          changeCounter += 1;\n        }\n      }\n\n      changesPerSubSelection.push(changeCounter);\n      changeCounter = 0;\n    }\n\n    if (!changes.every(([, , cellValue]) => cellValue === changes[0][2])) {\n      changes = changes.map(\n        ([visualRow, visualColumn, , templates]) => [visualRow, visualColumn, templates.checkedTemplate]\n      );\n    } else {\n      changes = changes.map(([visualRow, visualColumn, cellValue]) => [visualRow, visualColumn, cellValue]);\n    }\n\n    if (changes.length > 0) {\n      // TODO: This is workaround for handsontable/dev-handsontable#1747 not being a breaking change.\n      // Technically, the changes don't need to be split into chunks when sent to `setDataAtCell`.\n      changesPerSubSelection.forEach((changesCount, sectionCount) => {\n        let changesChunk = changes.splice(0, changesCount);\n\n        if (nonCheckboxChanges.size && nonCheckboxChanges.has(sectionCount)) {\n          changesChunk = [\n            ...changesChunk,\n            ...nonCheckboxChanges.get(sectionCount)\n          ];\n        }\n\n        hotInstance.setDataAtCell(changesChunk);\n      });\n    }\n  }\n\n  /**\n   * Check whether all selected cells are with checkbox type.\n   *\n   * @returns {boolean}\n   * @private\n   */\n  function areSelectedCheckboxCells() {\n    const selRange = hotInstance.getSelectedRange();\n\n    if (!selRange) {\n      return;\n    }\n\n    for (let key = 0; key < selRange.length; key++) {\n      const topLeft = selRange[key].getTopStartCorner();\n      const bottomRight = selRange[key].getBottomEndCorner();\n\n      for (let visualRow = topLeft.row; visualRow <= bottomRight.row; visualRow++) {\n        for (let visualColumn = topLeft.col; visualColumn <= bottomRight.col; visualColumn++) {\n          const cachedCellProperties = hotInstance.getCellMeta(visualRow, visualColumn);\n\n          const cell = hotInstance.getCell(visualRow, visualColumn);\n\n          if (cell === null || cell === undefined) {\n            return true;\n\n          } else {\n            const checkboxes = cell.querySelectorAll('input[type=checkbox]');\n\n            if (checkboxes.length > 0 && !cachedCellProperties.readOnly) {\n              return true;\n            }\n          }\n        }\n      }\n    }\n\n    return false;\n  }\n}\n\ncheckboxRenderer.RENDERER_TYPE = RENDERER_TYPE;\n\n/**\n * Register checkbox listeners.\n *\n * @param {Core} instance The Handsontable instance.\n * @returns {EventManager}\n */\nfunction registerEvents(instance) {\n  let eventManager = isCheckboxListenerAdded.get(instance);\n\n  if (!eventManager) {\n    const { rootElement } = instance;\n\n    eventManager = new EventManager(instance);\n\n    eventManager.addEventListener(rootElement, 'click', event => onClick(event, instance));\n    eventManager.addEventListener(rootElement, 'mouseup', event => onMouseUp(event, instance));\n    eventManager.addEventListener(rootElement, 'change', event => onChange(event, instance));\n\n    isCheckboxListenerAdded.set(instance, eventManager);\n  }\n\n  return eventManager;\n}\n\n/**\n * Create input element.\n *\n * @param {Document} rootDocument The document owner.\n * @returns {Node}\n */\nfunction createInput(rootDocument) {\n  const input = rootDocument.createElement('input');\n\n  input.className = 'htCheckboxRendererInput';\n  input.type = 'checkbox';\n  input.setAttribute('tabindex', '-1');\n\n  return input.cloneNode(false);\n}\n\n/**\n * Create label element.\n *\n * @param {Document} rootDocument The document owner.\n * @param {string} text The label text.\n * @param {boolean} fullWidth Determines whether label should have full width.\n * @returns {Node}\n */\nfunction createLabel(rootDocument, text, fullWidth) {\n  const label = rootDocument.createElement('label');\n\n  label.className = `htCheckboxRendererLabel ${fullWidth ? 'fullWidth' : ''}`;\n  label.appendChild(rootDocument.createTextNode(text));\n\n  return label.cloneNode(true);\n}\n\n/**\n * `mouseup` callback.\n *\n * @private\n * @param {Event} event `mouseup` event.\n * @param {Core} instance The Handsontable instance.\n */\nfunction onMouseUp(event, instance) {\n  const { target } = event;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  setTimeout(instance.listen, 10);\n}\n\n/**\n * `click` callback.\n *\n * @private\n * @param {MouseEvent} event `click` event.\n * @param {Core} instance The Handsontable instance.\n */\nfunction onClick(event, instance) {\n  const { target } = event;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  const row = parseInt(target.getAttribute(ATTR_ROW), 10);\n  const col = parseInt(target.getAttribute(ATTR_COLUMN), 10);\n  const cellProperties = instance.getCellMeta(row, col);\n\n  if (cellProperties.readOnly) {\n    event.preventDefault();\n  }\n}\n\n/**\n * `change` callback.\n *\n * @param {Event} event `change` event.\n * @param {Core} instance The Handsontable instance.\n */\nfunction onChange(event, instance) {\n  const { target } = event;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  const row = parseInt(target.getAttribute(ATTR_ROW), 10);\n  const col = parseInt(target.getAttribute(ATTR_COLUMN), 10);\n  const cellProperties = instance.getCellMeta(row, col);\n\n  if (!cellProperties.readOnly) {\n    let newCheckboxValue = null;\n\n    if (event.target.checked) {\n      newCheckboxValue = cellProperties.uncheckedTemplate === undefined ? true : cellProperties.checkedTemplate;\n    } else {\n      newCheckboxValue = cellProperties.uncheckedTemplate === undefined ? false : cellProperties.uncheckedTemplate;\n    }\n\n    instance.setDataAtCell(row, col, newCheckboxValue);\n  }\n}\n\n/**\n * Check if the provided element is the checkbox input.\n *\n * @private\n * @param {HTMLElement} element The element in question.\n * @returns {boolean}\n */\nfunction isCheckboxInput(element) {\n  return element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox';\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  RENDERER_TYPE,\n  handsontableRenderer\n} from './handsontableRenderer';\n","import { autocompleteRenderer } from '../autocompleteRenderer';\n\nexport const RENDERER_TYPE = 'handsontable';\n\n/**\n * Handsontable renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function handsontableRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\nhandsontableRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  numericRenderer,\n  getRenderedValue,\n} from './numericRenderer';\n","import numbro from 'numbro';\nimport { textRenderer } from '../textRenderer';\nimport { isNumeric } from '../../helpers/number';\n\nexport const RENDERER_TYPE = 'numeric';\n\n/**\n * Get the rendered value.\n *\n * @param {*} value Value to be rendered.\n * @param {CellMeta} cellProperties Cell meta object.\n * @returns {*} Returns the rendered value.\n */\nexport function getRenderedValue(value, cellProperties) {\n  if (isNumeric(value)) {\n    const numericFormat = cellProperties.numericFormat;\n    const cellCulture = numericFormat && numericFormat.culture || '-';\n    const cellFormatPattern = numericFormat && numericFormat.pattern;\n\n    if (typeof cellCulture !== 'undefined' && !numbro.languages()[cellCulture]) {\n      const shortTag = cellCulture.replace('-', '');\n      const langData = numbro.allLanguages ? numbro.allLanguages[cellCulture] : numbro[shortTag];\n\n      if (langData) {\n        numbro.registerLanguage(langData);\n      }\n    }\n\n    numbro.setLanguage(cellCulture);\n\n    value = numbro(value).format(cellFormatPattern || '0');\n  }\n\n  return value;\n}\n\n/**\n * Numeric cell renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function numericRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  let newValue = value;\n\n  if (isNumeric(newValue)) {\n    const className = cellProperties.className || '';\n    const classArr = className.length ? className.split(' ') : [];\n\n    newValue = getRenderedValue(newValue, cellProperties);\n\n    if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 &&\n      classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {\n      classArr.push('htRight');\n    }\n\n    if (classArr.indexOf('htNumeric') < 0) {\n      classArr.push('htNumeric');\n    }\n\n    cellProperties.className = classArr.join(' ');\n\n    TD.dir = 'ltr';\n  }\n\n  textRenderer(hotInstance, TD, row, col, prop, newValue, cellProperties);\n}\n\nnumericRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__429__;","export {\n  RENDERER_TYPE,\n  passwordRenderer,\n} from './passwordRenderer';\n","import { textRenderer } from '../textRenderer';\nimport { fastInnerHTML } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\n\nexport const RENDERER_TYPE = 'password';\n\n/**\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function passwordRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  const hashLength = cellProperties.hashLength || TD.innerHTML.length;\n  const hashSymbol = cellProperties.hashSymbol || '*';\n\n  let hash = '';\n\n  rangeEach(hashLength - 1, () => {\n    hash += hashSymbol;\n  });\n  fastInnerHTML(TD, hash);\n}\n\npasswordRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  selectRenderer,\n} from './selectRenderer';\n","import { textRenderer } from '../textRenderer';\n\nexport const RENDERER_TYPE = 'select';\n\n/**\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function selectRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\nselectRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  timeRenderer,\n} from './timeRenderer';\n","import { textRenderer } from '../textRenderer';\n\nexport const RENDERER_TYPE = 'time';\n\n/**\n * Default time renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function timeRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  TD.dir = 'ltr';\n}\n\ntimeRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","import { autocompleteValidator, VALIDATOR_TYPE as AUTOCOMPLETE_VALIDATOR } from './autocompleteValidator';\nimport { dateValidator, VALIDATOR_TYPE as DATE_VALIDATOR } from './dateValidator';\nimport { dropdownValidator, VALIDATOR_TYPE as DROPDOWN_VALIDATOR } from './dropdownValidator';\nimport { numericValidator, VALIDATOR_TYPE as NUMERIC_VALIDATOR } from './numericValidator';\nimport { timeValidator, VALIDATOR_TYPE as TIME_VALIDATOR } from './timeValidator';\nimport {\n  registerValidator,\n} from './registry';\n\n/**\n * Registers all available validators.\n */\nexport function registerAllValidators() {\n  registerValidator(autocompleteValidator);\n  registerValidator(dropdownValidator);\n  registerValidator(dateValidator);\n  registerValidator(numericValidator);\n  registerValidator(timeValidator);\n}\n\nexport {\n  autocompleteValidator, AUTOCOMPLETE_VALIDATOR,\n  dropdownValidator, DROPDOWN_VALIDATOR,\n  dateValidator, DATE_VALIDATOR,\n  numericValidator, NUMERIC_VALIDATOR,\n  timeValidator, TIME_VALIDATOR,\n};\n\nexport {\n  getRegisteredValidatorNames,\n  getRegisteredValidators,\n  getValidator,\n  hasValidator,\n  registerValidator,\n} from './registry';\n","export {\n  VALIDATOR_TYPE,\n  autocompleteValidator,\n} from './autocompleteValidator';\n","export const VALIDATOR_TYPE = 'autocomplete';\n\n/**\n * The Autocomplete cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function autocompleteValidator(value, callback) {\n  let valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === undefined) {\n    valueToValidate = '';\n  }\n\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n\n    return;\n  }\n\n  if (this.strict && this.source) {\n    if (typeof this.source === 'function') {\n      this.source(valueToValidate, process(valueToValidate, callback));\n    } else {\n      process(valueToValidate, callback)(this.source);\n    }\n  } else {\n    callback(true);\n  }\n}\n\nautocompleteValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n\n/**\n * Function responsible for validation of autocomplete value.\n *\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n * @returns {Function}\n */\nfunction process(value, callback) {\n  const originalVal = value;\n\n  return function(source) {\n    let found = false;\n\n    for (let s = 0, slen = source.length; s < slen; s++) {\n      if (originalVal === source[s]) {\n        found = true; // perfect match\n        break;\n      }\n    }\n\n    callback(found);\n  };\n}\n","export {\n  VALIDATOR_TYPE,\n  correctFormat,\n  dateValidator,\n} from './dateValidator';\n","import moment from 'moment';\nimport { getEditorInstance } from '../../editors/registry';\nimport { EDITOR_TYPE as DATE_EDITOR_TYPE } from '../../editors/dateEditor';\nimport { getNormalizedDate } from '../../helpers/date';\n\nexport const VALIDATOR_TYPE = 'date';\n\n/**\n * The Date cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function dateValidator(value, callback) {\n  const dateEditor = getEditorInstance(DATE_EDITOR_TYPE, this.instance);\n  let valueToValidate = value;\n  let valid = true;\n\n  if (valueToValidate === null || valueToValidate === undefined) {\n    valueToValidate = '';\n  }\n\n  let isValidFormat = moment(valueToValidate, this.dateFormat || dateEditor.defaultDateFormat, true).isValid();\n  let isValidDate = moment(new Date(valueToValidate)).isValid() || isValidFormat;\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidDate = true;\n    isValidFormat = true;\n  }\n  if (!isValidDate) {\n    valid = false;\n  }\n  if (!isValidDate && isValidFormat) {\n    valid = true;\n  }\n\n  if (isValidDate && !isValidFormat) {\n    if (this.correctFormat === true) { // if format correction is enabled\n      const correctedValue = correctFormat(valueToValidate, this.dateFormat);\n\n      this.instance.setDataAtCell(this.visualRow, this.visualCol, correctedValue, 'dateValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\n\ndateValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n\n/**\n * Format the given string using moment.js' format feature.\n *\n * @param {string} value The value to format.\n * @param {string} dateFormat The date pattern to format to.\n * @returns {string}\n */\nexport function correctFormat(value, dateFormat) {\n  const dateFromDate = moment(getNormalizedDate(value));\n  const dateFromMoment = moment(value, dateFormat);\n  const isAlphanumeric = value.search(/[A-z]/g) > -1;\n  let date;\n\n  if ((dateFromDate.isValid() && dateFromDate.format('x') === dateFromMoment.format('x')) ||\n      !dateFromMoment.isValid() ||\n      isAlphanumeric) {\n    date = dateFromDate;\n\n  } else {\n    date = dateFromMoment;\n  }\n\n  return date.format(dateFormat);\n}\n","/**\n * Get normalized Date object for the ISO formatted date strings.\n * Natively, the date object parsed from a ISO 8601 string will be offsetted by the timezone difference, which may result in returning a wrong date.\n * See: Github issue #3338.\n *\n * @param {string} dateString String representing the date.\n * @returns {Date} The proper Date object.\n */\nexport function getNormalizedDate(dateString) {\n  const nativeDate = new Date(dateString);\n\n  // NaN if dateString is not in ISO format\n  if (!isNaN(new Date(`${dateString}T00:00`).getDate())) {\n\n    // Compensate timezone offset\n    return new Date(nativeDate.getTime() + (nativeDate.getTimezoneOffset() * 60000));\n  }\n\n  return nativeDate;\n}\n","export {\n  VALIDATOR_TYPE,\n  dropdownValidator,\n} from './dropdownValidator';\n","import { autocompleteValidator } from '../autocompleteValidator/autocompleteValidator';\n\nexport const VALIDATOR_TYPE = 'dropdown';\n\n/**\n * The Dropdown cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function dropdownValidator(value, callback) {\n  autocompleteValidator.apply(this, [value, callback]);\n}\n\ndropdownValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n","export {\n  VALIDATOR_TYPE,\n  numericValidator,\n} from './numericValidator';\n","import { isNumeric } from '../../helpers/number';\n\nexport const VALIDATOR_TYPE = 'numeric';\n\n/**\n * The Numeric cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function numericValidator(value, callback) {\n  let valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === undefined) {\n    valueToValidate = '';\n  }\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n\n  } else if (valueToValidate === '') {\n    callback(false);\n\n  } else {\n    callback(isNumeric(value));\n  }\n}\n\nnumericValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n","export {\n  VALIDATOR_TYPE,\n  timeValidator,\n} from './timeValidator';\n","import moment from 'moment';\n\n// Formats which are correctly parsed to time (supported by momentjs)\nconst STRICT_FORMATS = [\n  'YYYY-MM-DDTHH:mm:ss.SSSZ',\n  'X', // Unix timestamp\n  'x' // Unix ms timestamp\n];\n\nexport const VALIDATOR_TYPE = 'time';\n\n/**\n * The Time cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function timeValidator(value, callback) {\n  const timeFormat = this.timeFormat || 'h:mm:ss a';\n  let valid = true;\n  let valueToValidate = value;\n\n  if (valueToValidate === null) {\n    valueToValidate = '';\n  }\n\n  valueToValidate = /^\\d{3,}$/.test(valueToValidate) ? parseInt(valueToValidate, 10) : valueToValidate;\n\n  const twoDigitValue = /^\\d{1,2}$/.test(valueToValidate);\n\n  if (twoDigitValue) {\n    valueToValidate += ':00';\n  }\n\n  const date = moment(valueToValidate, STRICT_FORMATS, true).isValid() ?\n    moment(valueToValidate) : moment(valueToValidate, timeFormat);\n  let isValidTime = date.isValid();\n\n  // is it in the specified format\n  let isValidFormat = moment(valueToValidate, timeFormat, true).isValid() && !twoDigitValue;\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidTime = true;\n    isValidFormat = true;\n  }\n  if (!isValidTime) {\n    valid = false;\n  }\n  if (!isValidTime && isValidFormat) {\n    valid = true;\n  }\n  if (isValidTime && !isValidFormat) {\n    if (this.correctFormat === true) { // if format correction is enabled\n      const correctedValue = date.format(timeFormat);\n\n      this.instance.setDataAtCell(this.visualRow, this.visualCol, correctedValue, 'timeValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\n\ntimeValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n","import { AutocompleteCellType, CELL_TYPE as AUTOCOMPLETE_TYPE } from './autocompleteType';\nimport { CheckboxCellType, CELL_TYPE as CHECKBOX_TYPE } from './checkboxType';\nimport { DateCellType, CELL_TYPE as DATE_TYPE } from './dateType';\nimport { DropdownCellType, CELL_TYPE as DROPDOWN_TYPE } from './dropdownType';\nimport { HandsontableCellType, CELL_TYPE as HANDSONTABLE_TYPE } from './handsontableType';\nimport { NumericCellType, CELL_TYPE as NUMERIC_TYPE } from './numericType';\nimport { PasswordCellType, CELL_TYPE as PASSWORD_TYPE } from './passwordType';\nimport { SelectCellType, CELL_TYPE as SELECT_TYPE } from './selectType';\nimport { TextCellType, CELL_TYPE as TEXT_TYPE } from './textType';\nimport { TimeCellType, CELL_TYPE as TIME_TYPE } from './timeType';\nimport {\n  registerCellType,\n} from './registry';\n\n/**\n * Registers all available cell types.\n */\nexport function registerAllCellTypes() {\n  registerCellType(AutocompleteCellType);\n  registerCellType(CheckboxCellType);\n  registerCellType(DateCellType);\n  registerCellType(DropdownCellType);\n  registerCellType(HandsontableCellType);\n  registerCellType(NumericCellType);\n  registerCellType(PasswordCellType);\n  registerCellType(SelectCellType);\n  registerCellType(TextCellType);\n  registerCellType(TimeCellType);\n}\n\nexport {\n  AutocompleteCellType, AUTOCOMPLETE_TYPE,\n  CheckboxCellType, CHECKBOX_TYPE,\n  DateCellType, DATE_TYPE,\n  DropdownCellType, DROPDOWN_TYPE,\n  HandsontableCellType, HANDSONTABLE_TYPE,\n  NumericCellType, NUMERIC_TYPE,\n  PasswordCellType, PASSWORD_TYPE,\n  SelectCellType, SELECT_TYPE,\n  TextCellType, TEXT_TYPE,\n  TimeCellType, TIME_TYPE,\n};\n\nexport {\n  getCellType,\n  getRegisteredCellTypeNames,\n  getRegisteredCellTypes,\n  hasCellType,\n  registerCellType,\n} from './registry';\n","export {\n  AutocompleteCellType,\n  CELL_TYPE,\n} from './autocompleteType';\n","import { AutocompleteEditor } from '../../editors/autocompleteEditor';\nimport { autocompleteRenderer } from '../../renderers/autocompleteRenderer';\nimport { autocompleteValidator } from '../../validators/autocompleteValidator';\n\nexport const CELL_TYPE = 'autocomplete';\nexport const AutocompleteCellType = {\n  CELL_TYPE,\n  editor: AutocompleteEditor,\n  renderer: autocompleteRenderer,\n  validator: autocompleteValidator,\n};\n","export {\n  CELL_TYPE,\n  CheckboxCellType,\n} from './checkboxType';\n","import { CheckboxEditor } from '../../editors/checkboxEditor';\nimport { checkboxRenderer } from '../../renderers/checkboxRenderer';\n\nexport const CELL_TYPE = 'checkbox';\nexport const CheckboxCellType = {\n  CELL_TYPE,\n  editor: CheckboxEditor,\n  renderer: checkboxRenderer,\n};\n","export {\n  CELL_TYPE,\n  DateCellType,\n} from './dateType';\n","import { DateEditor } from '../../editors/dateEditor';\nimport { dateRenderer } from '../../renderers/dateRenderer';\nimport { dateValidator } from '../../validators/dateValidator';\n\nexport const CELL_TYPE = 'date';\nexport const DateCellType = {\n  CELL_TYPE,\n  editor: DateEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: dateRenderer,\n  validator: dateValidator,\n};\n","export {\n  RENDERER_TYPE,\n  dateRenderer\n} from './dateRenderer';\n","import { autocompleteRenderer } from '../autocompleteRenderer';\n\nexport const RENDERER_TYPE = 'date';\n\n/**\n * Handsontable renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function dateRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\ndateRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  CELL_TYPE,\n  DropdownCellType,\n} from './dropdownType';\n","import { DropdownEditor } from '../../editors/dropdownEditor';\nimport { dropdownRenderer } from '../../renderers/dropdownRenderer';\nimport { dropdownValidator } from '../../validators/dropdownValidator';\n\nexport const CELL_TYPE = 'dropdown';\nexport const DropdownCellType = {\n  CELL_TYPE,\n  editor: DropdownEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: dropdownRenderer,\n  validator: dropdownValidator,\n};\n","export {\n  CELL_TYPE,\n  HandsontableCellType,\n} from './handsontableType';\n","import { HandsontableEditor } from '../../editors/handsontableEditor';\nimport { handsontableRenderer } from '../../renderers/handsontableRenderer';\n\nexport const CELL_TYPE = 'handsontable';\nexport const HandsontableCellType = {\n  CELL_TYPE,\n  editor: HandsontableEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: handsontableRenderer,\n};\n","export {\n  CELL_TYPE,\n  NumericCellType,\n} from './numericType';\n\n","import { NumericEditor } from '../../editors/numericEditor';\nimport { numericRenderer } from '../../renderers/numericRenderer';\nimport { numericValidator } from '../../validators/numericValidator';\n\nexport const CELL_TYPE = 'numeric';\nexport const NumericCellType = {\n  CELL_TYPE,\n  editor: NumericEditor,\n  renderer: numericRenderer,\n  validator: numericValidator,\n  dataType: 'number',\n};\n","export {\n  CELL_TYPE,\n  PasswordCellType,\n} from './passwordType';\n","import { PasswordEditor } from '../../editors/passwordEditor';\nimport { passwordRenderer } from '../../renderers/passwordRenderer';\n\nexport const CELL_TYPE = 'password';\nexport const PasswordCellType = {\n  CELL_TYPE,\n  editor: PasswordEditor,\n  renderer: passwordRenderer,\n  copyable: false,\n};\n","export {\n  CELL_TYPE,\n  SelectCellType,\n} from './selectType';\n","import { SelectEditor } from '../../editors/selectEditor';\nimport { selectRenderer } from '../../renderers/selectRenderer';\n\nexport const CELL_TYPE = 'select';\nexport const SelectCellType = {\n  CELL_TYPE,\n  editor: SelectEditor,\n  renderer: selectRenderer,\n};\n","export {\n  CELL_TYPE,\n  TimeCellType,\n} from './timeType';\n","import { TimeEditor } from '../../editors/timeEditor';\nimport { timeRenderer } from '../../renderers/timeRenderer';\nimport { timeValidator } from '../../validators/timeValidator';\n\nexport const CELL_TYPE = 'time';\nexport const TimeCellType = {\n  CELL_TYPE,\n  editor: TimeEditor,\n  renderer: timeRenderer,\n  validator: timeValidator,\n};\n","import { AutoColumnSize } from './autoColumnSize';\nimport { Autofill } from './autofill';\nimport { AutoRowSize } from './autoRowSize';\nimport { BasePlugin } from './base';\nimport { BindRowsWithHeaders } from './bindRowsWithHeaders';\nimport { CollapsibleColumns } from './collapsibleColumns';\nimport { ColumnSorting } from './columnSorting';\nimport { ColumnSummary } from './columnSummary';\nimport { Comments } from './comments';\nimport { ContextMenu } from './contextMenu';\nimport { CopyPaste } from './copyPaste';\nimport { CustomBorders } from './customBorders';\nimport { DragToScroll } from './dragToScroll';\nimport { DropdownMenu } from './dropdownMenu';\nimport { ExportFile } from './exportFile';\nimport { Filters } from './filters';\nimport { Formulas } from './formulas';\nimport { HiddenColumns } from './hiddenColumns';\nimport { HiddenRows } from './hiddenRows';\nimport { ManualColumnFreeze } from './manualColumnFreeze';\nimport { ManualColumnMove } from './manualColumnMove';\nimport { ManualColumnResize } from './manualColumnResize';\nimport { ManualRowMove } from './manualRowMove';\nimport { ManualRowResize } from './manualRowResize';\nimport { MergeCells } from './mergeCells';\nimport { MultiColumnSorting } from './multiColumnSorting';\nimport { MultipleSelectionHandles } from './multipleSelectionHandles';\nimport { NestedHeaders } from './nestedHeaders';\nimport { NestedRows } from './nestedRows';\nimport { PersistentState } from './persistentState';\nimport { Search } from './search';\nimport { TouchScroll } from './touchScroll';\nimport { TrimRows } from './trimRows';\nimport { UndoRedo } from './undoRedo';\nimport {\n  registerPlugin,\n} from './registry';\n\n/**\n * Registers all available plugins.\n */\nexport function registerAllPlugins() {\n  registerPlugin(AutoColumnSize);\n  registerPlugin(Autofill);\n  registerPlugin(AutoRowSize);\n  registerPlugin(BindRowsWithHeaders);\n  registerPlugin(CollapsibleColumns);\n  registerPlugin(ColumnSorting);\n  registerPlugin(ColumnSummary);\n  registerPlugin(Comments);\n  registerPlugin(ContextMenu);\n  registerPlugin(CopyPaste);\n  registerPlugin(CustomBorders);\n  registerPlugin(DragToScroll);\n  registerPlugin(DropdownMenu);\n  registerPlugin(ExportFile);\n  registerPlugin(Filters);\n  registerPlugin(Formulas);\n  registerPlugin(HiddenColumns);\n  registerPlugin(HiddenRows);\n  registerPlugin(ManualColumnFreeze);\n  registerPlugin(ManualColumnMove);\n  registerPlugin(ManualColumnResize);\n  registerPlugin(ManualRowMove);\n  registerPlugin(ManualRowResize);\n  registerPlugin(MergeCells);\n  registerPlugin(MultiColumnSorting);\n  registerPlugin(MultipleSelectionHandles);\n  registerPlugin(NestedHeaders);\n  registerPlugin(NestedRows);\n  registerPlugin(PersistentState);\n  registerPlugin(Search);\n  registerPlugin(TouchScroll);\n  registerPlugin(TrimRows);\n  registerPlugin(UndoRedo);\n}\n\nexport {\n  AutoColumnSize,\n  Autofill,\n  AutoRowSize,\n  BasePlugin,\n  BindRowsWithHeaders,\n  CollapsibleColumns,\n  ColumnSorting,\n  ColumnSummary,\n  Comments,\n  ContextMenu,\n  CopyPaste,\n  CustomBorders,\n  DragToScroll,\n  DropdownMenu,\n  ExportFile,\n  Filters,\n  Formulas,\n  HiddenColumns,\n  HiddenRows,\n  ManualColumnFreeze,\n  ManualColumnMove,\n  ManualColumnResize,\n  ManualRowMove,\n  ManualRowResize,\n  MergeCells,\n  MultiColumnSorting,\n  MultipleSelectionHandles,\n  NestedHeaders,\n  NestedRows,\n  PersistentState,\n  Search,\n  TouchScroll,\n  TrimRows,\n  UndoRedo,\n};\n\nexport {\n  getPlugin,\n  getPluginsNames,\n  registerPlugin,\n} from './registry';\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  AutoColumnSize,\n} from './autoColumnSize';\n","import { BasePlugin } from '../base';\nimport { cancelAnimationFrame, requestAnimationFrame } from '../../helpers/feature';\nimport GhostTable from '../../utils/ghostTable';\nimport Hooks from '../../pluginHooks';\nimport { isObject, hasOwnProperty } from '../../helpers/object';\nimport { valueAccordingPercent, rangeEach } from '../../helpers/number';\nimport SamplesGenerator from '../../utils/samplesGenerator';\nimport { isPercentValue } from '../../helpers/string';\nimport { DEFAULT_COLUMN_WIDTH } from '../../3rdparty/walkontable/src';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\nHooks.getSingleton().register('modifyAutoColumnSizeSeed');\n\nexport const PLUGIN_KEY = 'autoColumnSize';\nexport const PLUGIN_PRIORITY = 10;\nconst COLUMN_SIZE_MAP_NAME = 'autoColumnSize';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin AutoColumnSize\n * @class AutoColumnSize\n *\n * @description\n * This plugin allows to set column widths based on their widest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it enabled (same as if it was declared as `true`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the widths of all cells to\n * resize the columns accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the column widths manually.\n *\n * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object:\n *\n * ```js\n * // as a number (300 columns in sync, rest async)\n * autoColumnSize: {syncLimit: 300},\n *\n * // as a string (percent)\n * autoColumnSize: {syncLimit: '40%'},\n * ```\n *\n * The plugin uses {@link GhostTable} and {@link SamplesGenerator} for calculations.\n * First, {@link SamplesGenerator} prepares samples of data with its coordinates.\n * Next {@link GhostTable} uses coordinates to get cells' renderers and append all to the DOM through DocumentFragment.\n *\n * Sampling accepts additional options:\n * - *samplingRatio* - Defines how many samples for the same length will be used to calculate. Default is `3`.\n *\n * ```js\n *   autoColumnSize: {\n *     samplingRatio: 10,\n *   }\n * ```\n *\n * - *allowSampleDuplicates* - Defines if duplicated values might be used in sampling. Default is `false`.\n *\n * ```js\n *   autoColumnSize: {\n *     allowSampleDuplicates: true,\n *   }\n * ```\n *\n * To configure this plugin see {@link Options#autoColumnSize}.\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   autoColumnSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoColumnSize');\n *\n * plugin.getColumnWidth(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * // First, let's contruct Handsontable\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   autoColumnSize={true}\n * />\n *\n * ...\n *\n * // Access to plugin instance:\n * const hot = hotRef.current.hotInstance;\n * const plugin = hot.getPlugin('autoColumnSize');\n *\n * plugin.getColumnWidth(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport class AutoColumnSize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return true;\n  }\n\n  static get CALCULATION_STEP() {\n    return 50;\n  }\n\n  static get SYNC_CALCULATION_LIMIT() {\n    return 50;\n  }\n\n  /**\n   * Instance of {@link GhostTable} for rows and columns size calculations.\n   *\n   * @private\n   * @type {GhostTable}\n   */\n  ghostTable = new GhostTable(this.hot);\n  /**\n   * Instance of {@link SamplesGenerator} for generating samples necessary for columns width calculations.\n   *\n   * @private\n   * @type {SamplesGenerator}\n   * @fires Hooks#modifyAutoColumnSizeSeed\n   */\n  samplesGenerator = new SamplesGenerator((row, column) => {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    if (this.hot.rowIndexMapper.isHidden(physicalRow) || this.hot.columnIndexMapper.isHidden(physicalColumn)) {\n      return false;\n    }\n\n    const cellMeta = this.hot.getCellMeta(row, column);\n    let cellValue = '';\n\n    if (!cellMeta.spanned) {\n      cellValue = this.hot.getDataAtCell(row, column);\n    }\n\n    let bundleSeed = '';\n\n    if (this.hot.hasHook('modifyAutoColumnSizeSeed')) {\n      bundleSeed = this.hot.runHooks('modifyAutoColumnSizeSeed', bundleSeed, cellMeta, cellValue);\n    }\n\n    return { value: cellValue, bundleSeed };\n  });\n  /**\n   * `true` if the size calculation is in progress.\n   *\n   * @type {boolean}\n   */\n  inProgress = false;\n  /**\n   * Number of already measured columns (we already know their sizes).\n   *\n   * @type {number}\n   */\n  measuredColumns = 0;\n  /**\n   * PhysicalIndexToValueMap to keep and track widths for physical column indexes.\n   *\n   * @private\n   * @type {PhysicalIndexToValueMap}\n   */\n  columnWidthsMap = new IndexToValueMap();\n\n  /**\n   * Cached column header names. It is used to diff current column headers with previous state and detect which\n   * columns width should be updated.\n   *\n   * @type {Array}\n   */\n  #cachedColumnHeaders = [];\n  /**\n   * An array of column indexes whose width will be recalculated.\n   *\n   * @type {number[]}\n   */\n  #visualColumnsToRefresh = [];\n\n  constructor(hotInstance) {\n    super(hotInstance);\n    this.hot.columnIndexMapper.registerMap(COLUMN_SIZE_MAP_NAME, this.columnWidthsMap);\n\n    // Leave the listener active to allow auto-sizing the columns when the plugin is disabled.\n    // This is necessary for width recalculation for resize handler doubleclick (ManualColumnResize).\n    this.addHook('beforeColumnResize',\n      (size, column, isDblClick) => this.#onBeforeColumnResize(size, column, isDblClick));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link #enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY] !== false && !this.hot.getSettings().colWidths;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const setting = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (setting && setting.useHeaders !== null && setting.useHeaders !== undefined) {\n      this.ghostTable.setSetting('useHeaders', setting.useHeaders);\n    }\n\n    this.setSamplingOptions();\n\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('beforeChangeRender', (...args) => this.#onBeforeChange(...args));\n    this.addHook('afterFormulasValuesUpdate', (...args) => this.#onAfterFormulasValuesUpdate(...args));\n    this.addHook('beforeRender', () => this.#onBeforeRender());\n    this.addHook('modifyColWidth', (width, col) => this.getColumnWidth(col, width));\n    this.addHook('init', () => this.#onInit());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state. This method is executed when {@link Core#updateSettings} is invoked.\n   */\n  updatePlugin() {\n    this.#visualColumnsToRefresh = this.findColumnsWhereHeaderWasChanged();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n\n    // Leave the listener active to allow auto-sizing the columns when the plugin is disabled.\n    // This is necessary for width recalculation for resize handler doubleclick (ManualColumnResize).\n    this.addHook('beforeColumnResize',\n      (size, column, isDblClick) => this.#onBeforeColumnResize(size, column, isDblClick));\n  }\n\n  /**\n   * Calculates widths for visible columns in the viewport only.\n   */\n  calculateVisibleColumnsWidth() {\n    // Keep last column widths unchanged for situation when all rows was deleted or trimmed (pro #6)\n    if (!this.hot.countRows()) {\n      return;\n    }\n\n    const firstVisibleColumn = this.getFirstVisibleColumn();\n    const lastVisibleColumn = this.getLastVisibleColumn();\n\n    if (firstVisibleColumn === -1 || lastVisibleColumn === -1) {\n      return;\n    }\n\n    const overwriteCache = this.hot.renderCall;\n\n    this.calculateColumnsWidth({ from: firstVisibleColumn, to: lastVisibleColumn }, undefined, overwriteCache);\n  }\n\n  /**\n   * Calculates a columns width.\n   *\n   * @param {number|object} colRange Visual column index or an object with `from` and `to` visual indexes as a range.\n   * @param {number|object} rowRange Visual row index or an object with `from` and `to` visual indexes as a range.\n   * @param {boolean} [overwriteCache=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateColumnsWidth(\n    colRange = { from: 0, to: this.hot.countCols() - 1 },\n    rowRange = { from: 0, to: this.hot.countRows() - 1 },\n    overwriteCache = false\n  ) {\n    const columnsRange = typeof colRange === 'number' ? { from: colRange, to: colRange } : colRange;\n    const rowsRange = typeof rowRange === 'number' ? { from: rowRange, to: rowRange } : rowRange;\n\n    rangeEach(columnsRange.from, columnsRange.to, (visualColumn) => {\n      let physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n      if (physicalColumn === null) {\n        physicalColumn = visualColumn;\n      }\n\n      if (overwriteCache || (this.columnWidthsMap.getValueAtIndex(physicalColumn) === null &&\n          !this.hot._getColWidthFromSettings(physicalColumn))) {\n        const samples = this.samplesGenerator.generateColumnSamples(visualColumn, rowsRange);\n\n        samples.forEach((sample, column) => this.ghostTable.addColumn(column, sample));\n      }\n    });\n\n    if (this.ghostTable.columns.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getWidths((visualColumn, width) => {\n          const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n          this.columnWidthsMap.setValueAtIndex(physicalColumn, width);\n        });\n      }, true);\n\n      this.measuredColumns = columnsRange.to + 1;\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Calculates all columns width. The calculated column will be cached in the {@link AutoColumnSize#widths} property.\n   * To retrieve width for specified column use {@link AutoColumnSize#getColumnWidth} method.\n   *\n   * @param {object|number} rowRange Row index or an object with `from` and `to` properties which define row range.\n   * @param {boolean} [overwriteCache] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateAllColumnsWidth(rowRange = { from: 0, to: this.hot.countRows() - 1 }, overwriteCache = false) {\n    let current = 0;\n    const length = this.hot.countCols() - 1;\n    let timer = null;\n\n    this.inProgress = true;\n\n    const loop = () => {\n      // When hot was destroyed after calculating finished cancel frame\n      if (!this.hot) {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        return;\n      }\n\n      this.calculateColumnsWidth({\n        from: current,\n        to: Math.min(current + AutoColumnSize.CALCULATION_STEP, length)\n      }, rowRange, overwriteCache);\n\n      current = current + AutoColumnSize.CALCULATION_STEP + 1;\n\n      if (current < length) {\n        timer = requestAnimationFrame(loop);\n\n      } else {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        // @TODO Should call once per render cycle, currently fired separately in different plugins\n        this.hot.view.adjustElementsSize();\n      }\n    };\n\n    const syncLimit = this.getSyncCalculationLimit();\n\n    // sync\n    if (syncLimit >= 0) {\n      this.calculateColumnsWidth({ from: 0, to: syncLimit }, rowRange, overwriteCache);\n      current = syncLimit + 1;\n    }\n    // async\n    if (current < length) {\n      loop();\n    } else {\n      this.inProgress = false;\n    }\n  }\n\n  /**\n   * Calculates specific columns width (overwrite cache values).\n   *\n   * @param {number[]} visualColumns List of visual columns to calculate.\n   */\n  #calculateSpecificColumnsWidth(visualColumns) {\n    const rowsRange = {\n      from: 0,\n      to: this.hot.countRows() - 1,\n    };\n\n    visualColumns.forEach((visualColumn) => {\n      const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n      if (physicalColumn === null) {\n        return;\n      }\n\n      if (!this.hot._getColWidthFromSettings(physicalColumn)) {\n        const samples = this.samplesGenerator.generateColumnSamples(visualColumn, rowsRange);\n\n        samples.forEach((sample, column) => this.ghostTable.addColumn(column, sample));\n      }\n    });\n\n    if (this.ghostTable.columns.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getWidths((visualColumn, width) => {\n          const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n          this.columnWidthsMap.setValueAtIndex(physicalColumn, width);\n        });\n      }, true);\n\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Sets the sampling options.\n   *\n   * @private\n   */\n  setSamplingOptions() {\n    const setting = this.hot.getSettings()[PLUGIN_KEY];\n    const samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ?\n      setting.samplingRatio : undefined;\n    const allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ?\n      setting.allowSampleDuplicates : undefined;\n\n    if (samplingRatio && !isNaN(samplingRatio)) {\n      this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n    }\n\n    if (allowSampleDuplicates) {\n      this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n    }\n  }\n\n  /**\n   * Recalculates all columns width (overwrite cache values).\n   */\n  recalculateAllColumnsWidth() {\n    if (this.hot.view.isVisible()) {\n      this.calculateAllColumnsWidth({ from: 0, to: this.hot.countRows() - 1 }, true);\n    }\n  }\n\n  /**\n   * Gets value which tells how many columns should be calculated synchronously (rest of the columns will be calculated\n   * asynchronously). The limit is calculated based on `syncLimit` set to `autoColumnSize` option (see {@link Options#autoColumnSize}).\n   *\n   * @returns {number}\n   */\n  getSyncCalculationLimit() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    /* eslint-disable no-bitwise */\n    let limit = AutoColumnSize.SYNC_CALCULATION_LIMIT;\n    const colsLimit = this.hot.countCols() - 1;\n\n    if (isObject(settings)) {\n      limit = settings.syncLimit;\n\n      if (isPercentValue(limit)) {\n        limit = valueAccordingPercent(colsLimit, limit);\n      } else {\n        // Force to Number\n        limit >>= 0;\n      }\n    }\n\n    return Math.min(limit, colsLimit);\n  }\n\n  /**\n   * Gets the calculated column width.\n   *\n   * @param {number} column Visual column index.\n   * @param {number} [defaultWidth] Default column width. It will be picked up if no calculated width found.\n   * @param {boolean} [keepMinimum=true] If `true` then returned value won't be smaller then 50 (default column width).\n   * @returns {number}\n   */\n  getColumnWidth(column, defaultWidth, keepMinimum = true) {\n    let width = defaultWidth;\n\n    if (width === undefined) {\n      width = this.columnWidthsMap.getValueAtIndex(this.hot.toPhysicalColumn(column));\n\n      if (keepMinimum && typeof width === 'number') {\n        width = Math.max(width, DEFAULT_COLUMN_WIDTH);\n      }\n    }\n\n    return width;\n  }\n\n  /**\n   * Gets the first visible column.\n   *\n   * @returns {number} Returns visual column index, -1 if table is not rendered or if there are no columns to base the the calculations on.\n   */\n  getFirstVisibleColumn() {\n    return this.hot.view.getFirstRenderedVisibleColumn() ?? -1;\n  }\n\n  /**\n   * Gets the last visible column.\n   *\n   * @returns {number} Returns visual column index or -1 if table is not rendered.\n   */\n  getLastVisibleColumn() {\n    return this.hot.view.getLastRenderedVisibleColumn() ?? -1;\n  }\n\n  /**\n   * Collects all columns which titles has been changed in comparison to the previous state.\n   *\n   * @private\n   * @returns {Array} It returns an array of visual column indexes.\n   */\n  findColumnsWhereHeaderWasChanged() {\n    const columnHeaders = this.hot.getColHeader();\n\n    const changedColumns = columnHeaders.reduce((acc, columnTitle, physicalColumn) => {\n      const cachedColumnsLength = this.#cachedColumnHeaders.length;\n\n      if (cachedColumnsLength - 1 < physicalColumn || this.#cachedColumnHeaders[physicalColumn] !== columnTitle) {\n        acc.push(this.hot.toVisualColumn(physicalColumn));\n      }\n      if (cachedColumnsLength - 1 < physicalColumn) {\n        this.#cachedColumnHeaders.push(columnTitle);\n      } else {\n        this.#cachedColumnHeaders[physicalColumn] = columnTitle;\n      }\n\n      return acc;\n    }, []);\n\n    return changedColumns;\n  }\n\n  /**\n   * Clears cache of calculated column widths. If you want to clear only selected columns pass an array with their indexes.\n   * Otherwise whole cache will be cleared.\n   *\n   * @param {number[]} [physicalColumns] List of physical column indexes to clear.\n   */\n  clearCache(physicalColumns) {\n    if (Array.isArray(physicalColumns)) {\n      this.hot.batchExecution(() => {\n        physicalColumns.forEach((physicalIndex) => {\n          this.columnWidthsMap.setValueAtIndex(physicalIndex, null);\n        });\n      }, true);\n\n    } else {\n      this.columnWidthsMap.clear();\n    }\n  }\n\n  /**\n   * Checks if all widths were calculated. If not then return `true` (need recalculate).\n   *\n   * @returns {boolean}\n   */\n  isNeedRecalculate() {\n    return !!this.columnWidthsMap.getValues()\n      .slice(0, this.measuredColumns).filter(item => (item === null)).length;\n  }\n\n  /**\n   * On before view render listener.\n   */\n  #onBeforeRender() {\n    this.calculateVisibleColumnsWidth();\n\n    if (!this.inProgress) {\n      this.#calculateSpecificColumnsWidth(this.#visualColumnsToRefresh);\n      this.#visualColumnsToRefresh = [];\n    }\n  }\n\n  /**\n   * On after load data listener.\n   *\n   * @param {Array} sourceData Source data.\n   * @param {boolean} isFirstLoad `true` if this is the first load.\n   */\n  #onAfterLoadData(sourceData, isFirstLoad) {\n    if (!isFirstLoad) {\n      this.recalculateAllColumnsWidth();\n    }\n  }\n\n  /**\n   * On before change listener.\n   *\n   * @param {Array} changes An array of modified data.\n   */\n  #onBeforeChange(changes) {\n    const changedColumns = changes.reduce((acc, [, columnProperty]) => {\n      const visualColumn = this.hot.propToCol(columnProperty);\n\n      if (Number.isInteger(visualColumn) && acc.indexOf(visualColumn) === -1) {\n        acc.push(visualColumn);\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualColumnsToRefresh.push(...changedColumns);\n  }\n\n  /**\n   * On before column resize listener.\n   *\n   * @param {number} size Calculated new column width.\n   * @param {number} column Visual index of the resized column.\n   * @param {boolean} isDblClick  Flag that determines whether there was a double-click.\n   * @returns {number}\n   */\n  #onBeforeColumnResize(size, column, isDblClick) {\n    let newSize = size;\n\n    if (isDblClick) {\n      this.calculateColumnsWidth(column, undefined, true);\n\n      newSize = this.getColumnWidth(column, undefined, false);\n    }\n\n    return newSize;\n  }\n\n  /**\n   * On after Handsontable init fill plugin with all necessary values.\n   */\n  #onInit() {\n    this.#cachedColumnHeaders = this.hot.getColHeader();\n    this.recalculateAllColumnsWidth();\n  }\n\n  /**\n   * After formulas values updated listener.\n   *\n   * @param {Array} changes An array of modified data.\n   */\n  #onAfterFormulasValuesUpdate(changes) {\n    const changedColumns = changes.reduce((acc, change) => {\n      const physicalColumn = change.address?.col;\n\n      if (Number.isInteger(physicalColumn)) {\n        const visualColumn = this.hot.toVisualColumn(physicalColumn);\n\n        if (acc.indexOf(visualColumn) === -1) {\n          acc.push(visualColumn);\n        }\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualColumnsToRefresh.push(...changedColumns);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.ghostTable.clean();\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  BasePlugin,\n} from './base';\n","import { defineGetter, objectEach } from '../../helpers/object';\nimport { arrayEach } from '../../helpers/array';\nimport { getPluginsNames, hasPlugin } from '../registry';\nimport { hasCellType } from '../../cellTypes/registry';\nimport { hasEditor } from '../../editors/registry';\nimport { hasRenderer } from '../../renderers/registry';\nimport { hasValidator } from '../../validators/registry';\nimport EventManager from '../../eventManager';\n\nconst DEPS_TYPE_CHECKERS = new Map([\n  ['plugin', hasPlugin],\n  ['cell-type', hasCellType],\n  ['editor', hasEditor],\n  ['renderer', hasRenderer],\n  ['validator', hasValidator],\n]);\n\nexport const PLUGIN_KEY = 'base';\nconst missingDepsMsgs = [];\nlet initializedPlugins = null;\n\n/**\n * @util\n * @property {Core} hot Handsontable instance.\n */\nexport class BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  /**\n   * The `SETTING_KEYS` getter defines the keys that, when present in the config object, trigger the plugin update\n   * after the `updateSettings` calls.\n   * - When it returns `true`, the plugin updates after all `updateSettings` calls, regardless of the contents of the\n   * config object.\n   * - When it returns `false`, the plugin never updates on `updateSettings` calls.\n   *\n   * @returns {string[] | boolean}\n   */\n  static get SETTING_KEYS() {\n    return [\n      this.PLUGIN_KEY\n    ];\n  }\n\n  /**\n   * The instance of the {@link EventManager} class.\n   *\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * @type {string}\n   */\n  pluginName = null;\n  /**\n   * @type {Function[]}\n   */\n  pluginsInitializedCallbacks = [];\n  /**\n   * @type {boolean}\n   */\n  isPluginsReady = false;\n  /**\n   * @type {boolean}\n   */\n  enabled = false;\n  /**\n   * @type {boolean}\n   */\n  initialized = false;\n  /**\n   * Collection of the reference to the plugins hooks.\n   */\n  #hooks = {};\n\n  /**\n   * @param {object} hotInstance Handsontable instance.\n   */\n  constructor(hotInstance) {\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    defineGetter(this, 'hot', hotInstance, {\n      writable: false\n    });\n\n    initializedPlugins = null;\n\n    this.hot.addHook('afterPluginsInitialized', () => this.onAfterPluginsInitialized());\n    this.hot.addHook('afterUpdateSettings', newSettings => this.onUpdateSettings(newSettings));\n    this.hot.addHook('beforeInit', () => this.init());\n  }\n\n  init() {\n    this.pluginName = this.hot.getPluginName(this);\n\n    const pluginDeps = this.constructor.PLUGIN_DEPS;\n    const deps = Array.isArray(pluginDeps) ? pluginDeps : [];\n\n    if (deps.length > 0) {\n      const missingDependencies = [];\n\n      deps.forEach((dependency) => {\n        const [type, moduleName] = dependency.split(':');\n\n        if (!DEPS_TYPE_CHECKERS.has(type)) {\n          throw new Error(`Unknown plugin dependency type \"${type}\" was found.`);\n        }\n\n        if (!DEPS_TYPE_CHECKERS.get(type)(moduleName)) {\n          missingDependencies.push(` - ${moduleName} (${type})`);\n        }\n      });\n\n      if (missingDependencies.length > 0) {\n        const errorMsg = [\n          `The ${this.pluginName} plugin requires the following modules:\\n`,\n          `${missingDependencies.join('\\n')}\\n`,\n        ].join('');\n\n        missingDepsMsgs.push(errorMsg);\n      }\n    }\n\n    if (!initializedPlugins) {\n      initializedPlugins = getPluginsNames();\n    }\n\n    // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n    // Without this line the `callOnPluginsReady` callback won't be triggered after all plugin\n    // initialization.\n    if (initializedPlugins.indexOf('UndoRedo') >= 0) {\n      initializedPlugins.splice(initializedPlugins.indexOf('UndoRedo'), 1);\n    }\n\n    if (initializedPlugins.indexOf(this.pluginName) >= 0) {\n      initializedPlugins.splice(initializedPlugins.indexOf(this.pluginName), 1);\n    }\n\n    this.hot.addHookOnce('afterPluginsInitialized', () => {\n      if (this.isEnabled && this.isEnabled()) {\n        this.enablePlugin();\n      }\n    });\n\n    const isAllPluginsAreInitialized = initializedPlugins.length === 0;\n\n    if (isAllPluginsAreInitialized) {\n      if (missingDepsMsgs.length > 0) {\n        const errorMsg = [\n          `${missingDepsMsgs.join('\\n')}\\n`,\n          'You have to import and register them manually.',\n        ].join('');\n\n        throw new Error(errorMsg);\n      }\n\n      this.hot.runHooks('afterPluginsInitialized');\n    }\n\n    this.initialized = true;\n  }\n\n  /**\n   * Enable plugin for this Handsontable instance.\n   */\n  enablePlugin() {\n    this.enabled = true;\n  }\n\n  /**\n   * Disable plugin for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.eventManager?.clear();\n    this.clearHooks();\n    this.enabled = false;\n  }\n\n  /**\n   * Add listener to plugin hooks system.\n   *\n   * @param {string} name The hook name.\n   * @param {Function} callback The listener function to add.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   */\n  addHook(name, callback, orderIndex) {\n    this.#hooks[name] = (this.#hooks[name] || []);\n\n    const hooks = this.#hooks[name];\n\n    this.hot.addHook(name, callback, orderIndex);\n    hooks.push(callback);\n    this.#hooks[name] = hooks;\n  }\n\n  /**\n   * Remove all hooks listeners by hook name.\n   *\n   * @param {string} name The hook name.\n   */\n  removeHooks(name) {\n    arrayEach(this.#hooks[name] || [], (callback) => {\n      this.hot.removeHook(name, callback);\n    });\n  }\n\n  /**\n   * Clear all hooks.\n   */\n  clearHooks() {\n    const hooks = this.#hooks;\n\n    objectEach(hooks, (callbacks, name) => this.removeHooks(name));\n    hooks.length = 0;\n  }\n\n  /**\n   * Register function which will be immediately called after all plugins initialized.\n   *\n   * @param {Function} callback The listener function to call.\n   */\n  callOnPluginsReady(callback) {\n    if (this.isPluginsReady) {\n      callback();\n    } else {\n      this.pluginsInitializedCallbacks.push(callback);\n    }\n  }\n\n  /**\n   * Check if any of the keys defined in `SETTING_KEYS` configuration of the plugin is present in the provided\n   * config object, or if the `SETTING_KEYS` configuration states that the plugin is relevant to the config object\n   * regardless of its contents.\n   *\n   * @private\n   * @param {Handsontable.DefaultSettings} settings The config object passed to `updateSettings`.\n   * @returns {boolean}\n   */\n  #isRelevantToSettings(settings) {\n    if (!settings) {\n      return false;\n    }\n\n    const settingKeys = this.constructor.SETTING_KEYS;\n\n    // If SETTING_KEYS is declared as `true` -> update the plugin regardless of the settings declared in\n    // `updateSettings`.\n    // If SETTING_KEYS is declared as `false` -> DON'T update the plugin regardless of the settings declared in\n    // `updateSettings`.\n    if (typeof settingKeys === 'boolean') {\n      return settingKeys;\n    }\n\n    for (let i = 0; i < settingKeys.length; i++) {\n      if (settings[settingKeys[i]] !== undefined) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * On after plugins initialized listener.\n   *\n   * @private\n   */\n  onAfterPluginsInitialized() {\n    arrayEach(this.pluginsInitializedCallbacks, callback => callback());\n    this.pluginsInitializedCallbacks.length = 0;\n    this.isPluginsReady = true;\n  }\n\n  /**\n   * On update settings listener.\n   *\n   * @private\n   * @param {object} newSettings New set of settings passed to the `updateSettings` method.\n   */\n  onUpdateSettings(newSettings) {\n    const relevantToSettings = this.#isRelevantToSettings(newSettings);\n\n    if (this.isEnabled) {\n      if (this.enabled && !this.isEnabled()) {\n        this.disablePlugin();\n      }\n\n      if (!this.enabled && this.isEnabled()) {\n        this.enablePlugin();\n      }\n\n      if (\n        this.enabled &&\n        this.isEnabled() &&\n        relevantToSettings\n      ) {\n        this.updatePlugin(newSettings);\n      }\n    }\n  }\n\n  /**\n   * Updates the plugin to use the latest options you have specified.\n   *\n   * @private\n   */\n  updatePlugin() {\n\n  }\n\n  /**\n   * Destroy plugin.\n   */\n  destroy() {\n    this.eventManager?.destroy();\n    this.clearHooks();\n\n    objectEach(this, (value, property) => {\n      if (property !== 'hot') {\n        this[property] = null;\n      }\n    });\n    delete this.t;\n    delete this.hot;\n  }\n}\n","import { addClass } from './../helpers/dom/element';\nimport { arrayEach } from './../helpers/array';\n\n/**\n * @class GhostTable\n */\nclass GhostTable {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot = null;\n  /**\n   * Container element where every table will be injected.\n   *\n   * @type {HTMLElement|null}\n   */\n  container = null;\n  /**\n   * Flag which determine is table was injected to DOM.\n   *\n   * @type {boolean}\n   */\n  injected = false;\n  /**\n   * Added rows collection.\n   *\n   * @type {Array}\n   */\n  rows = [];\n  /**\n   * Added columns collection.\n   *\n   * @type {Array}\n   */\n  columns = [];\n  /**\n   * Samples prepared for calculations.\n   *\n   * @type {Map}\n   * @default {null}\n   */\n  samples = null;\n  /**\n   * Ghost table settings.\n   *\n   * @type {object}\n   * @default {Object}\n   */\n  settings = {\n    useHeaders: true\n  };\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Add row.\n   *\n   * @param {number} row Visual row index.\n   * @param {Map} samples Samples Map object.\n   */\n  addRow(row, samples) {\n    if (this.columns.length) {\n      throw new Error('Doesn\\'t support multi-dimensional table');\n    }\n    if (!this.rows.length) {\n      this.container = this.createContainer(this.hot.rootElement.className);\n    }\n    const rowObject = { row };\n\n    this.rows.push(rowObject);\n\n    this.samples = samples;\n    this.table = this.createTable(this.hot.table.className);\n    this.table.colGroup.appendChild(this.createColGroupsCol(row));\n    this.table.tr.appendChild(this.createRow(row));\n    this.container.container.appendChild(this.table.fragment);\n\n    rowObject.table = this.table.table;\n  }\n\n  /**\n   * Add a row consisting of the column headers.\n   *\n   * @param {Map} samples A map with sampled table values.\n   */\n  addColumnHeadersRow(samples) {\n    const colHeader = this.hot.getColHeader(0);\n\n    if (colHeader !== null && colHeader !== undefined) {\n      const rowObject = { row: -1 };\n\n      this.rows.push(rowObject);\n\n      this.container = this.createContainer(this.hot.rootElement.className);\n      this.samples = samples;\n      this.table = this.createTable(this.hot.table.className);\n\n      this.table.colGroup.appendChild(this.createColGroupsCol());\n\n      this.appendColumnHeadersRow();\n\n      this.container.container.appendChild(this.table.fragment);\n\n      rowObject.table = this.table.table;\n    }\n  }\n\n  /**\n   * Add column.\n   *\n   * @param {number} column Visual column index.\n   * @param {Map} samples A map with sampled table values.\n   */\n  addColumn(column, samples) {\n    if (this.rows.length) {\n      throw new Error('Doesn\\'t support multi-dimensional table');\n    }\n    if (!this.columns.length) {\n      this.container = this.createContainer(this.hot.rootElement.className);\n    }\n    const columnObject = { col: column };\n\n    this.columns.push(columnObject);\n\n    this.samples = samples;\n    this.table = this.createTable(this.hot.table.className);\n\n    if (this.getSetting('useHeaders') && this.hot.getColHeader(column) !== null) {\n      // Please keep in mind that the renderable column index equal to the visual columns index for the GhostTable.\n      // We render all columns.\n      this.hot.view.appendColHeader(column, this.table.th);\n    }\n    this.table.tBody.appendChild(this.createCol(column));\n    this.container.container.appendChild(this.table.fragment);\n\n    columnObject.table = this.table.table;\n  }\n\n  /**\n   * Get calculated heights.\n   *\n   * @param {Function} callback Callback which will be fired for each calculated row.\n   */\n  getHeights(callback) {\n    if (!this.injected) {\n      this.injectTable();\n    }\n    arrayEach(this.rows, (row) => {\n      // In cases when the cell's content produces the height with a decimal point, the height\n      // needs to be rounded up to make sure that there will be a space for the cell's content.\n      // The `.offsetHeight` always returns the rounded number (floored), so it's not suitable for this case.\n      const { height } = row.table.getBoundingClientRect();\n\n      // -1 <- reduce border-top from table\n      callback(row.row, Math.ceil(height) - 1);\n    });\n  }\n\n  /**\n   * Get calculated widths.\n   *\n   * @param {Function} callback Callback which will be fired for each calculated column.\n   */\n  getWidths(callback) {\n    if (!this.injected) {\n      this.injectTable();\n    }\n    arrayEach(this.columns, (column) => {\n      // In cases when the cell's content produces the width with a decimal point, the width\n      // needs to be rounded up to make sure that there will be a space for the cell's content.\n      // The `.offsetWidth` always returns the rounded number (floored), so it's not suitable for this case.\n      const { width } = column.table.getBoundingClientRect();\n\n      callback(column.col, Math.ceil(width));\n    });\n  }\n\n  /**\n   * Set the Ghost Table settings to the provided object.\n   *\n   * @param {object} settings New Ghost Table Settings.\n   */\n  setSettings(settings) {\n    this.settings = settings;\n  }\n\n  /**\n   * Set a single setting of the Ghost Table.\n   *\n   * @param {string} name Setting name.\n   * @param {*} value Setting value.\n   */\n  setSetting(name, value) {\n    if (!this.settings) {\n      this.settings = {};\n    }\n\n    this.settings[name] = value;\n  }\n\n  /**\n   * Get the Ghost Table settings.\n   *\n   * @returns {object|null}\n   */\n  getSettings() {\n    return this.settings;\n  }\n\n  /**\n   * Get a single Ghost Table setting.\n   *\n   * @param {string} name The setting name to get.\n   * @returns {boolean|null}\n   */\n  getSetting(name) {\n    if (this.settings) {\n      return this.settings[name];\n    }\n\n    return null;\n\n  }\n\n  /**\n   * Create colgroup col elements.\n   *\n   * @param {number} row Visual row index.\n   * @returns {DocumentFragment}\n   */\n  createColGroupsCol(row) {\n    const fragment = this.hot.rootDocument.createDocumentFragment();\n\n    if (this.hot.hasRowHeaders()) {\n      fragment.appendChild(this.createColElement(-1, -1));\n    }\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        fragment.appendChild(this.createColElement(string.col, row));\n      });\n    });\n\n    return fragment;\n  }\n\n  /**\n   * Create table row element.\n   *\n   * @param {number} row Visual row index.\n   * @returns {DocumentFragment} Returns created table row elements.\n   */\n  createRow(row) {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const th = rootDocument.createElement('th');\n\n    if (this.hot.hasRowHeaders()) {\n      this.hot.view.appendRowHeader(row, th);\n\n      fragment.appendChild(th);\n    }\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        const column = string.col;\n        const cellProperties = this.hot.getCellMeta(row, column);\n        const renderer = this.hot.getCellRenderer(cellProperties);\n        const td = rootDocument.createElement('td');\n\n        // Indicate that this element is created and supported by GhostTable. It can be useful to\n        // exclude rendering performance costly logic or exclude logic which doesn't work within a hidden table.\n        td.setAttribute('ghost-table', 1);\n        renderer(this.hot, td, row, column, this.hot.colToProp(column), string.value, cellProperties);\n        fragment.appendChild(td);\n      });\n    });\n\n    return fragment;\n  }\n\n  /**\n   * Creates DOM elements for headers and appends them to the THEAD element of the table.\n   */\n  appendColumnHeadersRow() {\n    const { rootDocument } = this.hot;\n    const domFragment = rootDocument.createDocumentFragment();\n    const columnHeaders = [];\n\n    if (this.hot.hasRowHeaders()) {\n      const th = rootDocument.createElement('th');\n\n      columnHeaders.push([-1, th]);\n      domFragment.appendChild(th);\n    }\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        const column = string.col;\n        const th = rootDocument.createElement('th');\n\n        columnHeaders.push([column, th]);\n        domFragment.appendChild(th);\n      });\n    });\n\n    // Appending DOM elements for headers\n    this.table.tHead.appendChild(domFragment);\n\n    arrayEach(columnHeaders, (columnHeader) => {\n      const [column, th] = columnHeader;\n\n      // Using source method for filling a header with value.\n      this.hot.view.appendColHeader(column, th);\n    });\n  }\n\n  /**\n   * Create table column elements.\n   *\n   * @param {number} column Visual column index.\n   * @returns {DocumentFragment} Returns created column table column elements.\n   */\n  createCol(column) {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        const row = string.row;\n        const cellProperties = this.hot.getCellMeta(row, column);\n        const renderer = this.hot.getCellRenderer(cellProperties);\n        const td = rootDocument.createElement('td');\n        const tr = rootDocument.createElement('tr');\n\n        // Indicate that this element is created and supported by GhostTable. It can be useful to\n        // exclude rendering performance costly logic or exclude logic which doesn't work within a hidden table.\n        td.setAttribute('ghost-table', 1);\n        renderer(this.hot, td, row, column, this.hot.colToProp(column), string.value, cellProperties);\n        tr.appendChild(td);\n        fragment.appendChild(tr);\n      });\n    });\n\n    return fragment;\n  }\n\n  /**\n   * Remove table from document and reset internal state.\n   */\n  clean() {\n    this.rows.length = 0;\n    this.rows[-1] = undefined;\n    this.columns.length = 0;\n\n    if (this.samples) {\n      this.samples.clear();\n    }\n    this.samples = null;\n    this.removeTable();\n  }\n\n  /**\n   * Inject generated table into document.\n   *\n   * @param {HTMLElement} [parent=null] The element to which the ghost table is injected.\n   */\n  injectTable(parent = null) {\n    if (!this.injected) {\n      (parent || this.hot.rootElement).appendChild(this.container.fragment);\n      this.injected = true;\n    }\n  }\n\n  /**\n   * Remove table from document.\n   */\n  removeTable() {\n    if (this.injected && this.container.container.parentNode) {\n      this.container.container.parentNode.removeChild(this.container.container);\n      this.container = null;\n      this.injected = false;\n    }\n  }\n\n  /**\n   * Create col element.\n   *\n   * @param {number} column Visual column index.\n   * @param {number} row Visual row index.\n   * @returns {HTMLElement}\n   */\n  createColElement(column, row) {\n    const col = this.hot.rootDocument.createElement('col');\n    let colspan = 0;\n\n    if (row >= 0 && column >= 0) {\n      colspan = this.hot.getCellMeta(row, column).colspan;\n    }\n\n    let width = this.hot.getColWidth(column);\n\n    if (colspan > 1) {\n      for (let nextColumn = column + 1; nextColumn < column + colspan; nextColumn++) {\n        width += this.hot.getColWidth(nextColumn);\n      }\n    }\n\n    col.style.width = `${width}px`;\n\n    return col;\n  }\n\n  /**\n   * Create table element.\n   *\n   * @param {string} className The CSS classes to add.\n   * @returns {object}\n   */\n  createTable(className = '') {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const table = rootDocument.createElement('table');\n    const tHead = rootDocument.createElement('thead');\n    const tBody = rootDocument.createElement('tbody');\n    const colGroup = rootDocument.createElement('colgroup');\n    const tr = rootDocument.createElement('tr');\n    const th = rootDocument.createElement('th');\n\n    if (this.isVertical()) {\n      table.appendChild(colGroup);\n    }\n    if (this.isHorizontal()) {\n      tr.appendChild(th);\n      tHead.appendChild(tr);\n      table.style.tableLayout = 'auto';\n      table.style.width = 'auto';\n    }\n    table.appendChild(tHead);\n\n    if (this.isVertical()) {\n      tBody.appendChild(tr);\n    }\n    table.appendChild(tBody);\n    addClass(table, className);\n    fragment.appendChild(table);\n\n    return { fragment, table, tHead, tBody, colGroup, tr, th };\n  }\n\n  /**\n   * Create container for tables.\n   *\n   * @param {string} className The CSS classes to add.\n   * @returns {object}\n   */\n  createContainer(className = '') {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const container = rootDocument.createElement('div');\n    const containerClassName = `htGhostTable htAutoSize ${className.trim()}`;\n\n    addClass(container, containerClassName);\n    fragment.appendChild(container);\n\n    return { fragment, container };\n  }\n\n  /**\n   * Checks if table is raised vertically (checking rows).\n   *\n   * @returns {boolean}\n   */\n  isVertical() {\n    return !!(this.rows.length && !this.columns.length);\n  }\n\n  /**\n   * Checks if table is raised horizontally (checking columns).\n   *\n   * @returns {boolean}\n   */\n  isHorizontal() {\n    return !!(this.columns.length && !this.rows.length);\n  }\n}\n\nexport default GhostTable;\n","import { isObject } from './../helpers/object';\nimport { rangeEach } from './../helpers/number';\nimport { stringify } from './../helpers/mixed';\n\n/**\n * @class SamplesGenerator\n */\nclass SamplesGenerator {\n  /**\n   * Number of samples to take of each value length.\n   *\n   * @type {number}\n   */\n  static get SAMPLE_COUNT() {\n    return 3;\n  }\n  /**\n   * Samples prepared for calculations.\n   *\n   * @type {Map}\n   * @default {null}\n   */\n  samples = null;\n  /**\n   * Function which give the data to collect samples.\n   *\n   * @type {Function}\n   */\n  dataFactory = null;\n  /**\n   * Custom number of samples to take of each value length.\n   *\n   * @type {number}\n   * @default {null}\n   */\n  customSampleCount = null;\n  /**\n   * `true` if duplicate samples collection should be allowed, `false` otherwise.\n   *\n   * @type {boolean}\n   * @default {false}\n   */\n  allowDuplicates = false;\n\n  constructor(dataFactory) {\n    this.dataFactory = dataFactory;\n  }\n\n  /**\n   * Get the sample count for this instance.\n   *\n   * @returns {number}\n   */\n  getSampleCount() {\n    if (this.customSampleCount) {\n      return this.customSampleCount;\n    }\n\n    return SamplesGenerator.SAMPLE_COUNT;\n  }\n\n  /**\n   * Set the sample count.\n   *\n   * @param {number} sampleCount Number of samples to be collected.\n   */\n  setSampleCount(sampleCount) {\n    this.customSampleCount = sampleCount;\n  }\n\n  /**\n   * Set if the generator should accept duplicate values.\n   *\n   * @param {boolean} allowDuplicates `true` to allow duplicate values.\n   */\n  setAllowDuplicates(allowDuplicates) {\n    this.allowDuplicates = allowDuplicates;\n  }\n\n  /**\n   * Generate samples for row. You can control which area should be sampled by passing `rowRange` object and `colRange` object.\n   *\n   * @param {object|number} rowRange The rows range to generate the samples.\n   * @param {object} colRange The column range to generate the samples.\n   * @returns {object}\n   */\n  generateRowSamples(rowRange, colRange) {\n    return this.generateSamples('row', colRange, rowRange);\n  }\n\n  /**\n   * Generate samples for column. You can control which area should be sampled by passing `colRange` object and `rowRange` object.\n   *\n   * @param {object} colRange Column index.\n   * @param {object} rowRange Column index.\n   * @returns {object}\n   */\n  generateColumnSamples(colRange, rowRange) {\n    return this.generateSamples('col', rowRange, colRange);\n  }\n\n  /**\n   * Generate collection of samples.\n   *\n   * @param {string} type Type to generate. Can be `col` or `row`.\n   * @param {object} range The range to generate the samples.\n   * @param {object|number} specifierRange The range to generate the samples.\n   * @returns {Map}\n   */\n  generateSamples(type, range, specifierRange) {\n    const samples = new Map();\n    const { from, to } = typeof specifierRange === 'number' ?\n      { from: specifierRange, to: specifierRange } : specifierRange;\n\n    rangeEach(from, to, (index) => {\n      const sample = this.generateSample(type, range, index);\n\n      samples.set(index, sample);\n    });\n\n    return samples;\n  }\n\n  /**\n   * Generate sample for specified type (`row` or `col`).\n   *\n   * @param {string} type Samples type `row` or `col`.\n   * @param {object} range The range to generate the samples.\n   * @param {number} specifierValue The range to generate the samples.\n   * @returns {Map}\n   */\n  generateSample(type, range, specifierValue) {\n    if (type !== 'row' && type !== 'col') {\n      throw new Error('Unsupported sample type');\n    }\n\n    const samples = new Map();\n    const computedKey = type === 'row' ? 'col' : 'row';\n    const sampledValues = [];\n\n    rangeEach(range.from, range.to, (index) => {\n      const data = type === 'row' ?\n        this.dataFactory(specifierValue, index) : this.dataFactory(index, specifierValue);\n\n      if (data === false) {\n        return;\n      }\n\n      const { value, bundleSeed } = data;\n      const hasCustomBundleSeed = typeof bundleSeed === 'string' && bundleSeed.length > 0;\n      let seed;\n\n      if (hasCustomBundleSeed) {\n        seed = bundleSeed;\n\n      } else if (isObject(value)) {\n        seed = `${Object.keys(value).length}`;\n\n      } else if (Array.isArray(value)) {\n        seed = `${value.length}`;\n\n      } else {\n        seed = `${stringify(value).length}`;\n      }\n\n      if (!samples.has(seed)) {\n        samples.set(seed, {\n          needed: this.getSampleCount(),\n          strings: [],\n        });\n      }\n      const sample = samples.get(seed);\n\n      if (sample.needed) {\n        const duplicate = sampledValues.indexOf(value) > -1;\n\n        if (!duplicate || this.allowDuplicates || hasCustomBundleSeed) {\n          sample.strings.push({ value, [computedKey]: index });\n          sampledValues.push(value);\n          sample.needed -= 1;\n        }\n      }\n    });\n\n    return samples;\n  }\n}\n\nexport default SamplesGenerator;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Autofill,\n} from './autofill';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { offset, outerHeight, outerWidth } from '../../helpers/dom/element';\nimport { arrayEach, arrayMap } from '../../helpers/array';\nimport { isEmpty } from '../../helpers/mixed';\nimport { getDragDirectionAndRange, DIRECTIONS, getMappedFillHandleSetting } from './utils';\n\nHooks.getSingleton().register('modifyAutofillRange');\nHooks.getSingleton().register('beforeAutofill');\nHooks.getSingleton().register('afterAutofill');\n\nexport const PLUGIN_KEY = 'autofill';\nexport const PLUGIN_PRIORITY = 20;\nconst SETTING_KEYS = ['fillHandle'];\nconst INSERT_ROW_ALTER_ACTION_NAME = 'insert_row_below';\nconst INTERVAL_FOR_ADDING_ROW = 200;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * This plugin provides \"drag-down\" and \"copy-down\" functionalities, both operated using the small square in the right\n * bottom of the cell selection.\n *\n * \"Drag-down\" expands the value of the selected cells to the neighbouring cells when you drag the small\n * square in the corner.\n *\n * \"Copy-down\" copies the value of the selection to all empty cells below when you double click the small square.\n *\n * @class Autofill\n * @plugin Autofill\n */\n\nexport class Autofill extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  /**\n   * Specifies if adding new row started.\n   *\n   * @private\n   * @type {boolean}\n   */\n  addingStarted = false;\n  /**\n   * Specifies if there was mouse down on the cell corner.\n   *\n   * @private\n   * @type {boolean}\n   */\n  mouseDownOnCellCorner = false;\n  /**\n   * Specifies if mouse was dragged outside Handsontable.\n   *\n   * @private\n   * @type {boolean}\n   */\n  mouseDragOutside = false;\n  /**\n   * Specifies how many cell levels were dragged using the handle.\n   *\n   * @private\n   * @type {boolean}\n   */\n  handleDraggedCells = 0;\n  /**\n   * Specifies allowed directions of drag (`'horizontal'` or '`vertical`').\n   *\n   * @private\n   * @type {string[]}\n   */\n  directions = [];\n  /**\n   * Specifies if can insert new rows if needed.\n   *\n   * @private\n   * @type {boolean}\n   */\n  autoInsertRow = false;\n\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings().fillHandle;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.mapSettings();\n    this.registerEvents();\n\n    this.addHook('afterOnCellCornerMouseDown', event => this.#onAfterCellCornerMouseDown(event));\n    this.addHook('afterOnCellCornerDblClick', event => this.#onCellCornerDblClick(event));\n    this.addHook('beforeOnCellMouseOver', (_, coords) => this.#onBeforeCellMouseOver(coords));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - `autofill`\n   *  - [`fillHandle`](@/api/options.md#fillhandle)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.clearMappedSettings();\n    super.disablePlugin();\n  }\n\n  /**\n   * Gets selection data.\n   *\n   * @private\n   * @returns {object[]} Ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n   */\n  getSelectionData() {\n    const selection = this.hot.getSelectedRangeLast();\n    const { row: startRow, col: startCol } = selection.getTopStartCorner();\n    const { row: endRow, col: endCol } = selection.getBottomEndCorner();\n\n    const copyableRanges = this.hot.runHooks('modifyCopyableRange', [{\n      startRow,\n      startCol,\n      endRow,\n      endCol\n    }]);\n    const copyableRows = [];\n    const copyableColumns = [];\n    const data = [];\n\n    arrayEach(copyableRanges, (range) => {\n      for (let visualRow = range.startRow; visualRow <= range.endRow; visualRow += 1) {\n        if (copyableRows.indexOf(visualRow) === -1) {\n          copyableRows.push(visualRow);\n        }\n      }\n\n      for (let visualColumn = range.startCol; visualColumn <= range.endCol; visualColumn += 1) {\n        if (copyableColumns.indexOf(visualColumn) === -1) {\n          copyableColumns.push(visualColumn);\n        }\n      }\n    });\n\n    arrayEach(copyableRows, (row) => {\n      const rowSet = [];\n\n      arrayEach(copyableColumns, (column) => {\n        rowSet.push(this.hot.getCopyableData(row, column));\n      });\n\n      data.push(rowSet);\n    });\n\n    return data;\n  }\n\n  /**\n   * Try to apply fill values to the area in fill border, omitting the selection border.\n   *\n   * @private\n   * @returns {boolean} Reports if fill was applied.\n   *\n   * @fires Hooks#modifyAutofillRange\n   * @fires Hooks#beforeAutofill\n   * @fires Hooks#afterAutofill\n   */\n  fillIn() {\n    if (this.hot.selection.highlight.getFill().isEmpty()) {\n      return false;\n    }\n\n    // Fill area may starts or ends with invisible cell. There won't be any information about it as highlighted\n    // selection store just renderable indexes (It's part of Walkontable). I extrapolate where the start or/and\n    // the end is.\n    const [fillStartRow, fillStartColumn, fillEndRow, fillEndColumn] =\n      this.hot.selection.highlight.getFill().getVisualCorners();\n    const selectionRangeLast = this.hot.getSelectedRangeLast();\n    const topStartCorner = selectionRangeLast.getTopStartCorner();\n    const bottomEndCorner = selectionRangeLast.getBottomEndCorner();\n\n    this.resetSelectionOfDraggedArea();\n\n    const cornersOfSelectedCells = [\n      topStartCorner.row,\n      topStartCorner.col,\n      bottomEndCorner.row,\n      bottomEndCorner.col,\n    ];\n\n    const cornersOfSelectionAndDragAreas = this.hot\n      .runHooks(\n        'modifyAutofillRange',\n        [\n          Math.min(topStartCorner.row, fillStartRow),\n          Math.min(topStartCorner.col, fillStartColumn),\n          Math.max(bottomEndCorner.row, fillEndRow),\n          Math.max(bottomEndCorner.col, fillEndColumn),\n        ],\n        cornersOfSelectedCells\n      );\n\n    const {\n      directionOfDrag,\n      startOfDragCoords,\n      endOfDragCoords\n    } = getDragDirectionAndRange(\n      cornersOfSelectedCells,\n      cornersOfSelectionAndDragAreas,\n      (row, column) => this.hot._createCellCoords(row, column),\n    );\n\n    if (startOfDragCoords && startOfDragCoords.row > -1 && startOfDragCoords.col > -1) {\n      const selectionData = this.getSelectionData();\n      const sourceRange = selectionRangeLast.clone();\n      const targetRange = this.hot._createCellRange(startOfDragCoords, startOfDragCoords, endOfDragCoords);\n\n      const beforeAutofillHookResult = this.hot.runHooks(\n        'beforeAutofill',\n        selectionData,\n        sourceRange,\n        targetRange,\n        directionOfDrag\n      );\n\n      if (beforeAutofillHookResult === false) {\n        this.hot.selection.highlight.getFill().clear();\n        this.hot.render();\n\n        return false;\n      }\n\n      let fillData = beforeAutofillHookResult;\n      const res = beforeAutofillHookResult;\n\n      if (\n        ['up', 'left'].indexOf(directionOfDrag) > -1 &&\n        !(res.length === 1 && res[0].length === 0)\n      ) {\n        fillData = [];\n\n        if (directionOfDrag === 'up') {\n          const dragLength = endOfDragCoords.row - startOfDragCoords.row + 1;\n          const fillOffset = dragLength % res.length;\n\n          for (let i = 0; i < dragLength; i++) {\n            fillData.push(res[(i + (res.length - fillOffset)) % res.length]);\n          }\n\n        } else {\n          const dragLength = endOfDragCoords.col - startOfDragCoords.col + 1;\n          const fillOffset = dragLength % res[0].length;\n\n          for (let i = 0; i < res.length; i++) {\n            fillData.push([]);\n\n            for (let j = 0; j < dragLength; j++) {\n              fillData[i]\n                .push(res[i][(j + (res[i].length - fillOffset)) % res[i].length]);\n            }\n          }\n        }\n      }\n\n      this.hot.populateFromArray(\n        startOfDragCoords.row,\n        startOfDragCoords.col,\n        fillData,\n        endOfDragCoords.row,\n        endOfDragCoords.col,\n        `${this.pluginName}.fill`,\n        null\n      );\n\n      this.setSelection(cornersOfSelectionAndDragAreas);\n      this.hot.runHooks('afterAutofill', fillData, sourceRange, targetRange, directionOfDrag);\n      this.hot.render();\n\n    } else {\n      // reset to avoid some range bug\n      this.hot.view.render();\n    }\n\n    return true;\n  }\n\n  /**\n   * Reduces the selection area if the handle was dragged outside of the table or on headers.\n   *\n   * @private\n   * @param {CellCoords} coords Indexes of selection corners.\n   * @returns {CellCoords}\n   */\n  reduceSelectionAreaIfNeeded(coords) {\n    if (coords.row < 0) {\n      coords.row = 0;\n    }\n\n    if (coords.col < 0) {\n      coords.col = 0;\n    }\n\n    return coords;\n  }\n\n  /**\n   * Gets the coordinates of the drag & drop borders.\n   *\n   * @private\n   * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n   * @returns {CellCoords}\n   */\n  getCoordsOfDragAndDropBorders(coordsOfSelection) {\n    const currentSelection = this.hot.getSelectedRangeLast();\n    const bottomRightCorner = currentSelection.getBottomEndCorner();\n    let coords = coordsOfSelection;\n\n    if (this.directions.includes(DIRECTIONS.vertical) && this.directions.includes(DIRECTIONS.horizontal)) {\n      const topStartCorner = currentSelection.getTopStartCorner();\n\n      if (bottomRightCorner.col <= coordsOfSelection.col || topStartCorner.col >= coordsOfSelection.col) {\n        coords = this.hot._createCellCoords(bottomRightCorner.row, coordsOfSelection.col);\n      }\n\n      if (bottomRightCorner.row < coordsOfSelection.row || topStartCorner.row > coordsOfSelection.row) {\n        coords = this.hot._createCellCoords(coordsOfSelection.row, bottomRightCorner.col);\n      }\n\n    } else if (this.directions.includes(DIRECTIONS.vertical)) {\n      coords = this.hot._createCellCoords(coordsOfSelection.row, bottomRightCorner.col);\n\n    } else if (this.directions.includes(DIRECTIONS.horizontal)) {\n      coords = this.hot._createCellCoords(bottomRightCorner.row, coordsOfSelection.col);\n\n    } else {\n      // wrong direction\n      return;\n    }\n\n    return this.reduceSelectionAreaIfNeeded(coords);\n  }\n\n  /**\n   * Show the fill border.\n   *\n   * @private\n   * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n   */\n  showBorder(coordsOfSelection) {\n    const coordsOfDragAndDropBorders = this.getCoordsOfDragAndDropBorders(coordsOfSelection);\n\n    if (coordsOfDragAndDropBorders) {\n      this.redrawBorders(coordsOfDragAndDropBorders);\n    }\n  }\n\n  /**\n   * Add new row.\n   *\n   * @private\n   */\n  addRow() {\n    this.hot._registerTimeout(() => {\n      this.hot.alter(INSERT_ROW_ALTER_ACTION_NAME, undefined, 1, `${this.pluginName}.fill`);\n\n      this.addingStarted = false;\n    }, INTERVAL_FOR_ADDING_ROW);\n  }\n\n  /**\n   * Add new rows if they are needed to continue auto-filling values.\n   *\n   * @private\n   */\n  addNewRowIfNeeded() {\n    if (!this.hot.selection.highlight.getFill().isEmpty() && this.addingStarted === false && this.autoInsertRow) {\n      const cornersOfSelectedCells = this.hot.getSelectedLast();\n      const cornersOfSelectedDragArea = this.hot.selection.highlight.getFill().getVisualCorners();\n      const nrOfTableRows = this.hot.countRows();\n\n      if (cornersOfSelectedCells[2] < nrOfTableRows - 1 && cornersOfSelectedDragArea[2] === nrOfTableRows - 1) {\n        this.addingStarted = true;\n\n        this.addRow();\n      }\n    }\n  }\n\n  /**\n   * Get index of last adjacent filled in row.\n   *\n   * @private\n   * @param {Array} cornersOfSelectedCells Indexes of selection corners.\n   * @returns {number} Gives number greater than or equal to zero when selection adjacent can be applied.\n   *                   Or -1 when selection adjacent can't be applied.\n   */\n  getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells) {\n    const data = this.hot.getData();\n    const nrOfTableRows = this.hot.countRows();\n    let lastFilledInRowIndex;\n\n    for (let rowIndex = cornersOfSelectedCells[2] + 1; rowIndex < nrOfTableRows; rowIndex++) {\n      for (let columnIndex = cornersOfSelectedCells[1]; columnIndex <= cornersOfSelectedCells[3]; columnIndex++) {\n        const dataInCell = data[rowIndex][columnIndex];\n\n        if (!isEmpty(dataInCell)) {\n          return -1;\n        }\n      }\n\n      const dataInNextLeftCell = data[rowIndex][cornersOfSelectedCells[1] - 1];\n      const dataInNextRightCell = data[rowIndex][cornersOfSelectedCells[3] + 1];\n\n      if (!isEmpty(dataInNextLeftCell) || !isEmpty(dataInNextRightCell)) {\n        lastFilledInRowIndex = rowIndex;\n      }\n    }\n\n    return lastFilledInRowIndex;\n  }\n\n  /**\n   * Adds a selection from the start area to the specific row index.\n   *\n   * @private\n   * @param {Array} selectStartArea Selection area from which we start to create more comprehensive selection.\n   * @param {number} rowIndex The row index into the selection will be added.\n   */\n  addSelectionFromStartAreaToSpecificRowIndex(selectStartArea, rowIndex) {\n    this.hot.selection.highlight.getFill()\n      .clear()\n      .add(this.hot._createCellCoords(selectStartArea[0], selectStartArea[1]))\n      .add(this.hot._createCellCoords(rowIndex, selectStartArea[3]))\n      .commit();\n  }\n\n  /**\n   * Sets selection based on passed corners.\n   *\n   * @private\n   * @param {Array} cornersOfArea An array witch defines selection.\n   */\n  setSelection(cornersOfArea) {\n    this.hot.selectCell(...arrayMap(cornersOfArea, index => Math.max(index, 0)), false, false);\n  }\n\n  /**\n   * Try to select cells down to the last row in the left column and then returns if selection was applied.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  selectAdjacent() {\n    const cornersOfSelectedCells = this.hot.getSelectedLast();\n    const lastFilledInRowIndex = this.getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells);\n\n    if (lastFilledInRowIndex === -1 || lastFilledInRowIndex === undefined) {\n      return false;\n    }\n\n    this.addSelectionFromStartAreaToSpecificRowIndex(cornersOfSelectedCells, lastFilledInRowIndex);\n\n    return true;\n\n  }\n\n  /**\n   * Resets selection of dragged area.\n   *\n   * @private\n   */\n  resetSelectionOfDraggedArea() {\n    this.handleDraggedCells = 0;\n\n    this.hot.selection.highlight.getFill().clear();\n  }\n\n  /**\n   * Redraws borders.\n   *\n   * @private\n   * @param {CellCoords} coords `CellCoords` coord object.\n   */\n  redrawBorders(coords) {\n    this.hot.selection.highlight.getFill()\n      .clear()\n      .add(this.hot.getSelectedRangeLast().from)\n      .add(this.hot.getSelectedRangeLast().to)\n      .add(coords)\n      .commit();\n\n    this.hot.view.render();\n  }\n\n  /**\n   * Get if mouse was dragged outside.\n   *\n   * @private\n   * @param {MouseEvent} event `mousemove` event properties.\n   * @returns {boolean}\n   */\n  getIfMouseWasDraggedOutside(event) {\n    const { documentElement } = this.hot.rootDocument;\n    const tableBottom = offset(this.hot.table).top - (this.hot.rootWindow.pageYOffset ||\n      documentElement.scrollTop) + outerHeight(this.hot.table);\n    const tableRight = offset(this.hot.table).left - (this.hot.rootWindow.pageXOffset ||\n      documentElement.scrollLeft) + outerWidth(this.hot.table);\n\n    return event.clientY > tableBottom && event.clientX <= tableRight;\n  }\n\n  /**\n   * Bind the events used by the plugin.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { documentElement } = this.hot.rootDocument;\n\n    this.eventManager.addEventListener(documentElement, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(documentElement, 'mousemove', event => this.#onMouseMove(event));\n  }\n\n  /**\n   * On cell corner double click callback.\n   *\n   * @private\n   */\n  #onCellCornerDblClick() {\n    const selectionApplied = this.selectAdjacent();\n\n    if (selectionApplied) {\n      this.fillIn();\n    }\n  }\n\n  /**\n   * On after cell corner mouse down listener.\n   */\n  #onAfterCellCornerMouseDown() {\n    this.handleDraggedCells = 1;\n    this.mouseDownOnCellCorner = true;\n  }\n\n  /**\n   * On before cell mouse over listener.\n   *\n   * @param {CellCoords} coords `CellCoords` coord object.\n   */\n  #onBeforeCellMouseOver(coords) {\n    if (this.mouseDownOnCellCorner && !this.hot.view.isMouseDown() && this.handleDraggedCells) {\n      this.handleDraggedCells += 1;\n\n      this.showBorder(coords);\n      this.addNewRowIfNeeded();\n    }\n  }\n\n  /**\n   * On mouse up listener.\n   */\n  #onMouseUp() {\n    if (this.handleDraggedCells) {\n      if (this.handleDraggedCells > 1) {\n        this.fillIn();\n      }\n\n      this.handleDraggedCells = 0;\n      this.mouseDownOnCellCorner = false;\n    }\n  }\n\n  /**\n   * On mouse move listener.\n   *\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  #onMouseMove(event) {\n    const mouseWasDraggedOutside = this.getIfMouseWasDraggedOutside(event);\n\n    if (this.addingStarted === false && this.handleDraggedCells > 0 && mouseWasDraggedOutside) {\n      this.mouseDragOutside = true;\n      this.addingStarted = true;\n\n    } else {\n      this.mouseDragOutside = false;\n    }\n\n    if (this.mouseDragOutside && this.autoInsertRow) {\n      this.addRow();\n    }\n  }\n\n  /**\n   * Clears mapped settings.\n   *\n   * @private\n   */\n  clearMappedSettings() {\n    this.directions.length = 0;\n    this.autoInsertRow = false;\n  }\n\n  /**\n   * Map settings.\n   *\n   * @private\n   */\n  mapSettings() {\n    const mappedSettings = getMappedFillHandleSetting(this.hot.getSettings().fillHandle);\n\n    this.directions = mappedSettings.directions;\n    this.autoInsertRow = mappedSettings.autoInsertRow;\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { isObject } from '../../helpers/object';\nimport { isDefined } from '../../helpers/mixed';\n\nexport const DIRECTIONS = {\n  horizontal: 'horizontal',\n  vertical: 'vertical'\n};\n\n/**\n * Get direction between positions and cords of selections difference (drag area).\n *\n * @param {Array} startSelection The coordinates where the selection starts.\n * @param {Array} endSelection The coordinates where the selection ends.\n * @param {Function} cellCoordsFactory The function factory for CellCoords objects.\n * @returns {{direction: string, start: CellCoords, end: CellCoords}}\n */\nexport function getDragDirectionAndRange(startSelection, endSelection, cellCoordsFactory) {\n  let startOfDragCoords;\n  let endOfDragCoords;\n  let directionOfDrag;\n\n  if (endSelection[0] === startSelection[0] && endSelection[1] < startSelection[1]) {\n    directionOfDrag = 'left';\n\n    startOfDragCoords = cellCoordsFactory(endSelection[0], endSelection[1]);\n    endOfDragCoords = cellCoordsFactory(endSelection[2], startSelection[1] - 1);\n\n  } else if (endSelection[2] === startSelection[2] && endSelection[0] === startSelection[0] &&\n      endSelection[3] > startSelection[3]) {\n    directionOfDrag = 'right';\n\n    startOfDragCoords = cellCoordsFactory(endSelection[0], startSelection[3] + 1);\n    endOfDragCoords = cellCoordsFactory(endSelection[2], endSelection[3]);\n\n  } else if (endSelection[0] < startSelection[0] && endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'up';\n\n    startOfDragCoords = cellCoordsFactory(endSelection[0], endSelection[1]);\n    endOfDragCoords = cellCoordsFactory(startSelection[0] - 1, endSelection[3]);\n\n  } else if (endSelection[2] > startSelection[2] &&\n    endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'down';\n\n    startOfDragCoords = cellCoordsFactory(startSelection[2] + 1, endSelection[1]);\n    endOfDragCoords = cellCoordsFactory(endSelection[2], endSelection[3]);\n  }\n\n  if (startOfDragCoords) {\n    startOfDragCoords.normalize();\n  }\n\n  if (endOfDragCoords) {\n    endOfDragCoords.normalize();\n  }\n\n  return {\n    directionOfDrag,\n    startOfDragCoords,\n    endOfDragCoords,\n  };\n}\n\n/**\n * Get mapped FillHandle setting containing information about\n * allowed FillHandle directions and if allowed is automatic insertion of rows on drag.\n *\n * @param {boolean|object} fillHandle Property of Handsontable settings.\n * @returns {{directions: Array, autoInsertRow: boolean}} Object allowing access to information\n * about FillHandle in more useful way.\n */\nexport function getMappedFillHandleSetting(fillHandle) {\n  const mappedSettings = {};\n\n  if (fillHandle === true) {\n    mappedSettings.directions = Object.keys(DIRECTIONS);\n    mappedSettings.autoInsertRow = true;\n\n  } else if (isObject(fillHandle)) {\n    if (isDefined(fillHandle.autoInsertRow)) {\n\n      // autoInsertRow for horizontal direction will be always false\n\n      if (fillHandle.direction === DIRECTIONS.horizontal) {\n        mappedSettings.autoInsertRow = false;\n\n      } else {\n        mappedSettings.autoInsertRow = fillHandle.autoInsertRow;\n      }\n\n    } else {\n      mappedSettings.autoInsertRow = false;\n    }\n\n    if (isDefined(fillHandle.direction)) {\n      mappedSettings.directions = [fillHandle.direction];\n\n    } else {\n      mappedSettings.directions = Object.keys(DIRECTIONS);\n    }\n\n  } else if (typeof fillHandle === 'string') {\n    mappedSettings.directions = [fillHandle];\n    mappedSettings.autoInsertRow = true;\n\n  } else {\n    mappedSettings.directions = [];\n    mappedSettings.autoInsertRow = false;\n  }\n\n  return mappedSettings;\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  AutoRowSize,\n} from './autoRowSize';\n","import { BasePlugin } from '../base';\nimport { cancelAnimationFrame, requestAnimationFrame } from '../../helpers/feature';\nimport GhostTable from '../../utils/ghostTable';\nimport { isObject, hasOwnProperty } from '../../helpers/object';\nimport { valueAccordingPercent, rangeEach } from '../../helpers/number';\nimport SamplesGenerator from '../../utils/samplesGenerator';\nimport { isPercentValue } from '../../helpers/string';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\nexport const PLUGIN_KEY = 'autoRowSize';\nexport const PLUGIN_PRIORITY = 40;\nconst ROW_WIDTHS_MAP_NAME = 'autoRowSize';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin AutoRowSize\n * @class AutoRowSize\n * @description\n * The `AutoRowSize` plugin allows you to set row heights based on their highest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it disabled (same as if it was declared as `false`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the heights of all cells to\n * resize the rows accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the row heights manually.\n *\n * But, to display Handsontable's scrollbar in a proper size, you need to enable the `AutoRowSize` plugin,\n * by setting the [`autoRowSize`](@/api/options.md#autoRowSize) option to `true`.\n *\n * Row height calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of rows) or a percentage value to a config object:\n * ```js\n * // as a number (300 rows in sync, rest async)\n * autoRowSize: {syncLimit: 300},\n *\n * // as a string (percent)\n * autoRowSize: {syncLimit: '40%'},\n *\n * // allow sample duplication\n * autoRowSize: {syncLimit: '40%', allowSampleDuplicates: true},\n * ```\n *\n * You can also use the `allowSampleDuplicates` option to allow sampling duplicate values when calculating the row\n * height. __Note__, that this might have a negative impact on performance.\n *\n * To configure this plugin see {@link Options#autoRowSize}.\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   autoRowSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoRowSize');\n *\n * plugin.getRowHeight(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * // First, let's contruct Handsontable\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   autoRowSize={true}\n * />\n *\n * ...\n *\n * // Access to plugin instance:\n * const hot = hotRef.current.hotInstance;\n * const plugin = hot.getPlugin('autoRowSize');\n *\n * plugin.getRowHeight(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport class AutoRowSize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return true;\n  }\n\n  static get CALCULATION_STEP() {\n    return 50;\n  }\n\n  static get SYNC_CALCULATION_LIMIT() {\n    return 500;\n  }\n\n  /**\n   * Columns header's height cache.\n   *\n   * @private\n   * @type {number}\n   */\n  headerHeight = null;\n  /**\n   * Instance of {@link GhostTable} for rows and columns size calculations.\n   *\n   * @private\n   * @type {GhostTable}\n   */\n  ghostTable = new GhostTable(this.hot);\n  /**\n   * Instance of {@link SamplesGenerator} for generating samples necessary for rows height calculations.\n   *\n   * @private\n   * @type {SamplesGenerator}\n   */\n  samplesGenerator = new SamplesGenerator((row, column) => {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    if (this.hot.rowIndexMapper.isHidden(physicalRow) || this.hot.columnIndexMapper.isHidden(physicalColumn)) {\n      return false;\n    }\n\n    if (row >= 0 && column >= 0) {\n      const cellMeta = this.hot.getCellMeta(row, column);\n\n      if (cellMeta.hidden) {\n        // do not generate samples for cells that are covered by merged cell (null values)\n        return false;\n      }\n    }\n\n    let cellValue;\n\n    if (row >= 0) {\n      cellValue = this.hot.getDataAtCell(row, column);\n\n    } else if (row === -1) {\n      cellValue = this.hot.getColHeader(column);\n    }\n\n    return { value: cellValue };\n  });\n  /**\n   * `true` if the size calculation is in progress.\n   *\n   * @type {boolean}\n   */\n  inProgress = false;\n  /**\n   * Number of already measured rows (we already know their sizes).\n   *\n   * @type {number}\n   */\n  measuredRows = 0;\n  /**\n   * PhysicalIndexToValueMap to keep and track heights for physical row indexes.\n   *\n   * @private\n   * @type {PhysicalIndexToValueMap}\n   */\n  rowHeightsMap = new IndexToValueMap();\n  /**\n   * An array of row indexes whose height will be recalculated.\n   *\n   * @type {number[]}\n   */\n  #visualRowsToRefresh = [];\n\n  constructor(hotInstance) {\n    super(hotInstance);\n    this.hot.rowIndexMapper.registerMap(ROW_WIDTHS_MAP_NAME, this.rowHeightsMap);\n\n    // Leave the listener active to allow auto-sizing the rows when the plugin is disabled.\n    // This is necessary for height recalculation for resize handler doubleclick (ManualRowResize).\n    this.addHook('beforeRowResize', (size, row, isDblClick) => this.#onBeforeRowResize(size, row, isDblClick));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n\n    return settings === true || isObject(settings);\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.setSamplingOptions();\n\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('beforeChangeRender', (...args) => this.#onBeforeChange(...args));\n    this.addHook('beforeColumnResize', () => this.recalculateAllRowsHeight());\n    this.addHook('afterFormulasValuesUpdate', (...args) => this.#onAfterFormulasValuesUpdate(...args));\n    this.addHook('beforeRender', () => this.#onBeforeRender());\n    this.addHook('modifyRowHeight', (height, row) => this.getRowHeight(row, height));\n    this.addHook('init', () => this.#onInit());\n    this.addHook('modifyColumnHeaderHeight', () => this.getColumnHeaderHeight());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.headerHeight = null;\n\n    super.disablePlugin();\n\n    // Leave the listener active to allow auto-sizing the rows when the plugin is disabled.\n    // This is necessary for height recalculation for resize handler doubleclick (ManualRowResize).\n    this.addHook('beforeRowResize', (size, row, isDblClick) => this.#onBeforeRowResize(size, row, isDblClick));\n  }\n\n  /**\n   * Calculates heights for visible rows in the viewport only.\n   */\n  calculateVisibleRowsHeight() {\n    // Keep last row heights unchanged for situation when all columns was deleted or trimmed\n    if (!this.hot.countCols()) {\n      return;\n    }\n\n    const firstVisibleRow = this.getFirstVisibleRow();\n    const lastVisibleRow = this.getLastVisibleRow();\n\n    if (firstVisibleRow === -1 || lastVisibleRow === -1) {\n      return;\n    }\n\n    const overwriteCache = this.hot.renderCall;\n\n    this.calculateRowsHeight({ from: firstVisibleRow, to: lastVisibleRow }, undefined, overwriteCache);\n  }\n\n  /**\n   * Calculate a given rows height.\n   *\n   * @param {number|object} rowRange Row index or an object with `from` and `to` indexes as a range.\n   * @param {number|object} colRange Column index or an object with `from` and `to` indexes as a range.\n   * @param {boolean} [overwriteCache=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateRowsHeight(\n    rowRange = { from: 0, to: this.hot.countRows() - 1 },\n    colRange = { from: 0, to: this.hot.countCols() - 1 },\n    overwriteCache = false\n  ) {\n    const rowsRange = typeof rowRange === 'number' ? { from: rowRange, to: rowRange } : rowRange;\n    const columnsRange = typeof colRange === 'number' ? { from: colRange, to: colRange } : colRange;\n\n    if (this.hot.getColHeader(0) !== null) {\n      const samples = this.samplesGenerator.generateRowSamples(-1, columnsRange);\n\n      this.ghostTable.addColumnHeadersRow(samples.get(-1));\n    }\n\n    rangeEach(rowsRange.from, rowsRange.to, (visualRow) => {\n      let physicalRow = this.hot.toPhysicalRow(visualRow);\n\n      if (physicalRow === null) {\n        physicalRow = visualRow;\n      }\n\n      // For rows we must calculate row height even when user had set height value manually.\n      // We can shrink column but cannot shrink rows!\n      if (overwriteCache || this.rowHeightsMap.getValueAtIndex(physicalRow) === null) {\n        const samples = this.samplesGenerator.generateRowSamples(visualRow, columnsRange);\n\n        samples.forEach((sample, row) => this.ghostTable.addRow(row, sample));\n      }\n    });\n\n    if (this.ghostTable.rows.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getHeights((row, height) => {\n          if (row < 0) {\n            this.headerHeight = height;\n          } else {\n            this.rowHeightsMap.setValueAtIndex(this.hot.toPhysicalRow(row), height);\n          }\n        });\n      }, true);\n\n      this.measuredRows = rowsRange.to + 1;\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Calculate all rows heights. The calculated row will be cached in the {@link AutoRowSize#heights} property.\n   * To retrieve height for specified row use {@link AutoRowSize#getRowHeight} method.\n   *\n   * @param {object|number} colRange Row index or an object with `from` and `to` properties which define row range.\n   * @param {boolean} [overwriteCache] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateAllRowsHeight(colRange = { from: 0, to: this.hot.countCols() - 1 }, overwriteCache = false) {\n    let current = 0;\n    const length = this.hot.countRows() - 1;\n    let timer = null;\n\n    this.inProgress = true;\n\n    const loop = () => {\n      // When hot was destroyed after calculating finished cancel frame\n      if (!this.hot) {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        return;\n      }\n\n      this.calculateRowsHeight({\n        from: current,\n        to: Math.min(current + AutoRowSize.CALCULATION_STEP, length)\n      }, colRange, overwriteCache);\n\n      current = current + AutoRowSize.CALCULATION_STEP + 1;\n\n      if (current < length) {\n        timer = requestAnimationFrame(loop);\n      } else {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        // @TODO Should call once per render cycle, currently fired separately in different plugins\n        this.hot.view.adjustElementsSize();\n\n        // tmp\n        if (this.hot.view._wt.wtOverlays.inlineStartOverlay.needFullRender) {\n          this.hot.view._wt.wtOverlays.inlineStartOverlay.clone.draw();\n        }\n      }\n    };\n\n    const syncLimit = this.getSyncCalculationLimit();\n\n    // sync\n    if (syncLimit >= 0) {\n      this.calculateRowsHeight({ from: 0, to: syncLimit }, colRange, overwriteCache);\n      current = syncLimit + 1;\n    }\n    // async\n    if (current < length) {\n      loop();\n    } else {\n      this.inProgress = false;\n      this.hot.view.adjustElementsSize();\n    }\n  }\n\n  /**\n   * Calculates specific rows height (overwrite cache values).\n   *\n   * @param {number[]} visualRows List of visual rows to calculate.\n   */\n  #calculateSpecificRowsHeight(visualRows) {\n    const columnsRange = {\n      from: 0,\n      to: this.hot.countCols() - 1,\n    };\n\n    visualRows.forEach((visualRow) => {\n      // For rows we must calculate row height even when user had set height value manually.\n      // We can shrink column but cannot shrink rows!\n      const samples = this.samplesGenerator.generateRowSamples(visualRow, columnsRange);\n\n      samples.forEach((sample, row) => this.ghostTable.addRow(row, sample));\n    });\n\n    if (this.ghostTable.rows.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getHeights((visualRow, height) => {\n          const physicalRow = this.hot.toPhysicalRow(visualRow);\n\n          this.rowHeightsMap.setValueAtIndex(physicalRow, height);\n        });\n      }, true);\n\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Sets the sampling options.\n   *\n   * @private\n   */\n  setSamplingOptions() {\n    const setting = this.hot.getSettings()[PLUGIN_KEY];\n    const samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ?\n      setting.samplingRatio : undefined;\n    const allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ?\n      setting.allowSampleDuplicates : undefined;\n\n    if (samplingRatio && !isNaN(samplingRatio)) {\n      this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n    }\n\n    if (allowSampleDuplicates) {\n      this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n    }\n  }\n\n  /**\n   * Recalculates all rows height (overwrite cache values).\n   */\n  recalculateAllRowsHeight() {\n    if (this.hot.view.isVisible()) {\n      this.calculateAllRowsHeight({ from: 0, to: this.hot.countCols() - 1 }, true);\n    }\n  }\n\n  /**\n   * Gets value which tells how many rows should be calculated synchronously (rest of the rows will be calculated\n   * asynchronously). The limit is calculated based on `syncLimit` set to autoRowSize option (see {@link Options#autoRowSize}).\n   *\n   * @returns {number}\n   */\n  getSyncCalculationLimit() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    /* eslint-disable no-bitwise */\n    let limit = AutoRowSize.SYNC_CALCULATION_LIMIT;\n    const rowsLimit = this.hot.countRows() - 1;\n\n    if (isObject(settings)) {\n      limit = settings.syncLimit;\n\n      if (isPercentValue(limit)) {\n        limit = valueAccordingPercent(rowsLimit, limit);\n      } else {\n        // Force to Number\n        limit >>= 0;\n      }\n    }\n\n    return Math.min(limit, rowsLimit);\n  }\n\n  /**\n   * Get a row's height, as measured in the DOM.\n   *\n   * The height returned includes 1 px of the row's bottom border.\n   *\n   * Mind that this method is different from the\n   * [`getRowHeight()`](@/api/core.md#getrowheight) method\n   * of Handsontable's [Core](@/api/core.md).\n   *\n   * @param {number} row A visual row index.\n   * @param {number} [defaultHeight] If no height is found, `defaultHeight` is returned instead.\n   * @returns {number} The height of the specified row, in pixels.\n   */\n  getRowHeight(row, defaultHeight) {\n    const cachedHeight = row < 0 ? this.headerHeight : this.rowHeightsMap.getValueAtIndex(this.hot.toPhysicalRow(row));\n    let height = defaultHeight;\n\n    if (cachedHeight !== null && cachedHeight > (defaultHeight || 0)) {\n      height = cachedHeight;\n    }\n\n    return height;\n  }\n\n  /**\n   * Get the calculated column header height.\n   *\n   * @returns {number|undefined}\n   */\n  getColumnHeaderHeight() {\n    return this.headerHeight;\n  }\n\n  /**\n   * Get the first visible row.\n   *\n   * @returns {number} Returns row index, -1 if table is not rendered or if there are no rows to base the the calculations on.\n   */\n  getFirstVisibleRow() {\n    return this.hot.view.getFirstRenderedVisibleRow() ?? -1;\n  }\n\n  /**\n   * Gets the last visible row.\n   *\n   * @returns {number} Returns row index or -1 if table is not rendered.\n   */\n  getLastVisibleRow() {\n    return this.hot.view.getLastRenderedVisibleRow() ?? -1;\n  }\n\n  /**\n   * Clears cache of calculated row heights. If you want to clear only selected rows pass an array with their indexes.\n   * Otherwise whole cache will be cleared.\n   *\n   * @param {number[]} [physicalRows] List of physical row indexes to clear.\n   */\n  clearCache(physicalRows) {\n    this.headerHeight = null;\n\n    if (Array.isArray(physicalRows)) {\n      this.hot.batchExecution(() => {\n        physicalRows.forEach((physicalIndex) => {\n          this.rowHeightsMap.setValueAtIndex(physicalIndex, null);\n        });\n      }, true);\n\n    } else {\n      this.rowHeightsMap.clear();\n    }\n  }\n\n  /**\n   * Clears cache by range.\n   *\n   * @param {object|number} range Row index or an object with `from` and `to` properties which define row range.\n   */\n  clearCacheByRange(range) {\n    const { from, to } = typeof range === 'number' ? { from: range, to: range } : range;\n\n    this.hot.batchExecution(() => {\n      rangeEach(Math.min(from, to), Math.max(from, to), (row) => {\n        this.rowHeightsMap.setValueAtIndex(row, null);\n      });\n    }, true);\n  }\n\n  /**\n   * Checks if all heights were calculated. If not then return `true` (need recalculate).\n   *\n   * @returns {boolean}\n   */\n  isNeedRecalculate() {\n    return !!this.rowHeightsMap.getValues()\n      .slice(0, this.measuredRows).filter(item => (item === null)).length;\n  }\n\n  /**\n   * On before view render listener.\n   */\n  #onBeforeRender() {\n    this.calculateVisibleRowsHeight();\n\n    if (!this.inProgress) {\n      this.#calculateSpecificRowsHeight(this.#visualRowsToRefresh);\n      this.#visualRowsToRefresh = [];\n    }\n  }\n\n  /**\n   * On before row resize listener.\n   *\n   * @param {number} size The size of the current row index.\n   * @param {number} row Current row index.\n   * @param {boolean} isDblClick Indicates if the resize was triggered by doubleclick.\n   * @returns {number}\n   */\n  #onBeforeRowResize(size, row, isDblClick) {\n    let newSize = size;\n\n    if (isDblClick) {\n      this.calculateRowsHeight(row, undefined, true);\n\n      newSize = this.getRowHeight(row);\n    }\n\n    return newSize;\n  }\n\n  /**\n   * On after load data listener.\n   *\n   * @param {Array} sourceData Source data.\n   * @param {boolean} isFirstLoad `true` if this is the first load.\n   */\n  #onAfterLoadData(sourceData, isFirstLoad) {\n    if (!isFirstLoad) {\n      this.recalculateAllRowsHeight();\n    }\n  }\n\n  /**\n   * On before change listener.\n   *\n   * @param {Array} changes 2D array containing information about each of the edited cells.\n   */\n  #onBeforeChange(changes) {\n    const changedRows = changes.reduce((acc, [row]) => {\n      if (acc.indexOf(row) === -1) {\n        acc.push(row);\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualRowsToRefresh.push(...changedRows);\n  }\n\n  /**\n   * On after Handsontable init plugin with all necessary values.\n   */\n  #onInit() {\n    this.recalculateAllRowsHeight();\n  }\n\n  /**\n   * After formulas values updated listener.\n   *\n   * @param {Array} changes An array of modified data.\n   */\n  #onAfterFormulasValuesUpdate(changes) {\n    const changedRows = changes.reduce((acc, change) => {\n      const physicalRow = change.address?.row;\n\n      if (Number.isInteger(physicalRow)) {\n        const visualRow = this.hot.toVisualRow(physicalRow);\n\n        if (acc.indexOf(visualRow) === -1) {\n          acc.push(visualRow);\n        }\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualRowsToRefresh.push(...changedRows);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.ghostTable.clean();\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  BindRowsWithHeaders,\n} from './bindRowsWithHeaders';\n","import { BasePlugin } from '../base';\nimport LooseBindsMap from './maps/looseBindsMap';\nimport StrictBindsMap from './maps/strictBindsMap';\n\nexport const PLUGIN_KEY = 'bindRowsWithHeaders';\nexport const PLUGIN_PRIORITY = 210;\n\nconst DEFAULT_BIND = 'loose';\n\nconst bindTypeToMapStrategy = new Map([\n  ['loose', LooseBindsMap],\n  ['strict', StrictBindsMap]\n]);\n\n/**\n * @plugin BindRowsWithHeaders\n * @class BindRowsWithHeaders\n *\n * @description\n * Plugin allows binding the table rows with their headers.\n *\n * If the plugin is enabled, the table row headers will \"stick\" to the rows, when they are hidden/moved. Basically, if\n * at the initialization row 0 has a header titled \"A\", it will have it no matter what you do with the table.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   // enable plugin\n *   bindRowsWithHeaders: true\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   // enable plugin\n *   bindRowsWithHeaders={true}\n * />\n * ```\n * :::\n */\nexport class BindRowsWithHeaders extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Plugin indexes cache.\n   *\n   * @private\n   * @type {null|IndexMap}\n   */\n  headerIndexes = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link BindRowsWithHeaders#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    let bindType = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (typeof bindType !== 'string') {\n      bindType = DEFAULT_BIND;\n    }\n\n    const MapStrategy = bindTypeToMapStrategy.get(bindType);\n\n    this.headerIndexes = this.hot.rowIndexMapper.registerMap('bindRowsWithHeaders', new MapStrategy());\n\n    this.addHook('modifyRowHeader', row => this.#onModifyRowHeader(row));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap('bindRowsWithHeaders');\n\n    super.disablePlugin();\n  }\n\n  /**\n   * On modify row header listener.\n   *\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  #onModifyRowHeader(row) {\n    return this.headerIndexes.getValueAtIndex(this.hot.toPhysicalRow(row));\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { IndexMap, alterUtilsFactory, getDecreasedIndexes, getIncreasedIndexes } from '../../../translations';\n\nconst { getListWithInsertedItems, getListWithRemovedItems } = alterUtilsFactory('physicallyIndexed');\n\n/**\n * Map from physical index to another index.\n */\nclass LooseBindsMap extends IndexMap {\n  constructor() {\n    super(index => index);\n  }\n\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    const listAfterUpdate = getIncreasedIndexes(this.indexedValues, insertedIndexes);\n\n    this.indexedValues = getListWithInsertedItems(listAfterUpdate, insertionIndex, insertedIndexes, this.initValueOrFn);\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    const listAfterUpdate = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    this.indexedValues = getDecreasedIndexes(listAfterUpdate, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n}\n\nexport default LooseBindsMap;\n","import { IndexMap, alterUtilsFactory } from '../../../translations';\n\nconst { getListWithInsertedItems, getListWithRemovedItems } = alterUtilsFactory('physicallyIndexed');\n\n/**\n * Map from physical index to another index.\n */\nclass StrictBindsMap extends IndexMap {\n  constructor() {\n    super(index => index);\n  }\n\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    this.indexedValues = getListWithInsertedItems(this.indexedValues, insertionIndex, insertedIndexes,\n      (_, ordinalNumber) => this.getNextValue(ordinalNumber));\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n\n  /**\n   * Get next values, which should be greater than actual maximum value in the list.\n   *\n   * @param {number} ordinalNumber Position in the list.\n   * @returns {number}\n   */\n  getNextValue(ordinalNumber) {\n    return Math.max(...this.getValues()) + 1 + ordinalNumber;\n  }\n}\n\nexport default StrictBindsMap;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  CollapsibleColumns,\n} from './collapsibleColumns';\n","import { BasePlugin } from '../base';\nimport { arrayEach, arrayFilter, arrayUnique } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { warn } from '../../helpers/console';\nimport {\n  addClass,\n  hasClass,\n  removeClass,\n  fastInnerText,\n  removeAttribute,\n  setAttribute\n} from '../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../helpers/dom/event';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport {\n  A11Y_EXPANDED,\n  A11Y_HIDDEN\n} from '../../helpers/a11y';\n\nimport './collapsibleColumns.scss';\n\nexport const PLUGIN_KEY = 'collapsibleColumns';\nexport const PLUGIN_PRIORITY = 290;\nconst SETTING_KEYS = ['nestedHeaders'];\nconst COLLAPSIBLE_ELEMENT_CLASS = 'collapsibleIndicator';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nconst actionDictionary = new Map([\n  ['collapse', {\n    hideColumn: true,\n    beforeHook: 'beforeColumnCollapse',\n    afterHook: 'afterColumnCollapse',\n  }],\n  ['expand', {\n    hideColumn: false,\n    beforeHook: 'beforeColumnExpand',\n    afterHook: 'afterColumnExpand',\n  }],\n]);\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin CollapsibleColumns\n * @class CollapsibleColumns\n *\n * @description\n * The _CollapsibleColumns_ plugin allows collapsing of columns, covered by a header with the `colspan` property defined.\n *\n * Clicking the \"collapse/expand\" button collapses (or expands) all \"child\" headers except the first one.\n *\n * Setting the {@link Options#collapsiblecolumns} property to `true` will display a \"collapse/expand\" button in every header\n * with a defined `colspan` property.\n *\n * To limit this functionality to a smaller group of headers, define the `collapsibleColumns` property as an array\n * of objects, as in the example below.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: generateDataObj(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   nestedHeaders: true,\n *   // enable plugin\n *   collapsibleColumns: true,\n * });\n *\n * // or\n * const hot = new Handsontable(container, {\n *   data: generateDataObj(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   nestedHeaders: true,\n *   // enable and configure which columns can be collapsed\n *   collapsibleColumns: [\n *     {row: -4, col: 1, collapsible: true},\n *     {row: -3, col: 5, collapsible: true}\n *   ],\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={generateDataObj()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   nestedHeaders={true}\n *   // enable plugin\n *   collapsibleColumns={true}\n * />\n *\n * // or\n * <HotTable\n *   data={generateDataObj()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   nestedHeaders={true}\n *   // enable and configure which columns can be collapsed\n *   collapsibleColumns={[\n *     {row: -4, col: 1, collapsible: true},\n *     {row: -3, col: 5, collapsible: true}\n *   ]}\n * />\n * ```\n * :::\n */\nexport class CollapsibleColumns extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:NestedHeaders',\n    ];\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  /**\n   * Cached reference to the NestedHeaders plugin.\n   *\n   * @private\n   * @type {NestedHeaders}\n   */\n  nestedHeadersPlugin = null;\n  /**\n   * The NestedHeaders plugin StateManager instance.\n   *\n   * @private\n   * @type {StateManager}\n   */\n  headerStateManager = null;\n  /**\n   * Map of collapsed columns by the plugin.\n   *\n   * @private\n   * @type {HidingMap|null}\n   */\n  #collapsedColumnsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link CollapsibleColumns#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const { nestedHeaders } = this.hot.getSettings();\n\n    if (!nestedHeaders) {\n      warn('You need to configure the Nested Headers plugin in order to use collapsible headers.');\n    }\n\n    this.#collapsedColumnsMap = this.hot.columnIndexMapper.createAndRegisterIndexMap(this.pluginName, 'hiding');\n    this.nestedHeadersPlugin = this.hot.getPlugin('nestedHeaders');\n    this.headerStateManager = this.nestedHeadersPlugin.getStateManager();\n\n    this.addHook('init', () => this.#onInit());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('afterGetColHeader', (...args) => this.#onAfterGetColHeader(...args));\n    this.addHook('beforeOnCellMouseDown', (event, coords, TD) => this.#onBeforeOnCellMouseDown(event, coords, TD));\n\n    this.registerShortcuts();\n    super.enablePlugin();\n    // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n    this.updatePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *   - [`collapsibleColumns`](@/api/options.md#collapsiblecolumns)\n   *   - [`nestedHeaders`](@/api/options.md#nestedheaders)\n   */\n  updatePlugin() {\n    // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n    if (!this.hot.view) {\n      return;\n    }\n\n    if (!this.nestedHeadersPlugin.detectedOverlappedHeaders) {\n      const { collapsibleColumns } = this.hot.getSettings();\n\n      if (typeof collapsibleColumns === 'boolean') {\n        // Add `collapsible: true` attribute to all headers with colspan higher than 1.\n        this.headerStateManager.mapState((headerSettings) => {\n          return { collapsible: headerSettings.origColspan > 1 };\n        });\n\n      } else if (Array.isArray(collapsibleColumns)) {\n\n        this.headerStateManager.mapState(() => {\n          return { collapsible: false };\n        });\n\n        this.headerStateManager.mergeStateWith(collapsibleColumns);\n      }\n    }\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n    this.#collapsedColumnsMap = null;\n    this.nestedHeadersPlugin = null;\n\n    this.unregisterShortcuts();\n    this.clearButtons();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Enter']],\n        callback: () => {\n          const { row, col } = this.hot.getSelectedRangeLast().highlight;\n          const {\n            collapsible,\n            isCollapsed,\n            columnIndex,\n          } = this.headerStateManager.getHeaderTreeNodeData(row, col) ?? {};\n\n          if (!collapsible) {\n            return;\n          }\n\n          if (isCollapsed) {\n            this.expandSection({ row, col: columnIndex });\n          } else {\n            this.collapseSection({ row, col: columnIndex });\n          }\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => this.hot.getSelectedRangeLast()?.isSingle() &&\n          this.hot.getSelectedRangeLast()?.highlight.isHeader(),\n        group: SHORTCUTS_GROUP,\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Clears the expand/collapse buttons.\n   *\n   * @private\n   */\n  clearButtons() {\n    if (!this.hot.view) {\n      return;\n    }\n\n    const headerLevels = this.hot.view._wt.getSetting('columnHeaders').length;\n    const mainHeaders = this.hot.view._wt.wtTable.THEAD;\n    const topHeaders = this.hot.view._wt.wtOverlays.topOverlay.clone.wtTable.THEAD;\n    const topLeftCornerHeaders = this.hot.view._wt.wtOverlays.topInlineStartCornerOverlay ?\n      this.hot.view._wt.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.THEAD : null;\n\n    const removeButton = function(button) {\n      if (button) {\n        button.parentNode.removeChild(button);\n      }\n    };\n\n    rangeEach(0, headerLevels - 1, (i) => {\n      const masterLevel = mainHeaders.childNodes[i];\n      const topLevel = topHeaders.childNodes[i];\n      const topLeftCornerLevel = topLeftCornerHeaders ? topLeftCornerHeaders.childNodes[i] : null;\n\n      rangeEach(0, masterLevel.childNodes.length - 1, (j) => {\n        let button = masterLevel.childNodes[j].querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n        removeButton(button);\n\n        if (topLevel && topLevel.childNodes[j]) {\n          button = topLevel.childNodes[j].querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n          removeButton(button);\n        }\n\n        if (topLeftCornerHeaders && topLeftCornerLevel && topLeftCornerLevel.childNodes[j]) {\n          button = topLeftCornerLevel.childNodes[j].querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n          removeButton(button);\n        }\n      });\n    }, true);\n  }\n\n  /**\n   * Expands section at the provided coords.\n   *\n   * @param {object} coords Contains coordinates information. (`coords.row`, `coords.col`).\n   */\n  expandSection(coords) {\n    this.toggleCollapsibleSection([coords], 'expand');\n  }\n\n  /**\n   * Collapses section at the provided coords.\n   *\n   * @param {object} coords Contains coordinates information. (`coords.row`, `coords.col`).\n   */\n  collapseSection(coords) {\n    this.toggleCollapsibleSection([coords], 'collapse');\n  }\n\n  /**\n   * Collapses or expand all collapsible sections, depending on the action parameter.\n   *\n   * @param {string} action 'collapse' or 'expand'.\n   */\n  toggleAllCollapsibleSections(action) {\n    const coords = this.headerStateManager.mapNodes((headerSettings) => {\n      const {\n        collapsible,\n        origColspan,\n        headerLevel,\n        columnIndex,\n        isCollapsed,\n      } = headerSettings;\n\n      if (collapsible === true && origColspan > 1\n          && (isCollapsed && action === 'expand' || !isCollapsed && action === 'collapse')) {\n        return {\n          row: this.headerStateManager.levelToRowCoords(headerLevel),\n          col: columnIndex,\n        };\n      }\n    });\n\n    this.toggleCollapsibleSection(coords, action);\n  }\n\n  /**\n   * Collapses all collapsible sections.\n   */\n  collapseAll() {\n    this.toggleAllCollapsibleSections('collapse');\n  }\n\n  /**\n   * Expands all collapsible sections.\n   */\n  expandAll() {\n    this.toggleAllCollapsibleSections('expand');\n  }\n\n  /**\n   * Collapses/Expands a section.\n   *\n   * @param {Array} coords Array of coords - section coordinates.\n   * @param {string} [action] Action definition ('collapse' or 'expand').\n   * @fires Hooks#beforeColumnCollapse\n   * @fires Hooks#beforeColumnExpand\n   * @fires Hooks#afterColumnCollapse\n   * @fires Hooks#afterColumnExpand\n   */\n  toggleCollapsibleSection(coords, action) {\n    if (!actionDictionary.has(action)) {\n      throw new Error(`Unsupported action is passed (${action}).`);\n    }\n    if (!Array.isArray(coords)) {\n      return;\n    }\n\n    // Ignore coordinates which points to the cells range.\n    const filteredCoords = arrayFilter(coords, ({ row }) => row < 0);\n    let isActionPossible = filteredCoords.length > 0;\n\n    arrayEach(filteredCoords, ({ row, col: column }) => {\n      const { collapsible, isCollapsed } = this.headerStateManager.getHeaderSettings(row, column) ?? {};\n\n      if (!collapsible || isCollapsed && action === 'collapse' || !isCollapsed && action === 'expand') {\n        isActionPossible = false;\n\n        return false;\n      }\n    });\n\n    const nodeModRollbacks = [];\n    const affectedColumnsIndexes = [];\n\n    if (isActionPossible) {\n      arrayEach(filteredCoords, ({ row, col: column }) => {\n        const {\n          colspanCompensation,\n          affectedColumns,\n          rollbackModification,\n        } = this.headerStateManager.triggerNodeModification(action, row, column);\n\n        if (colspanCompensation > 0) {\n          affectedColumnsIndexes.push(...affectedColumns);\n          nodeModRollbacks.push(rollbackModification);\n        }\n      });\n    }\n\n    const currentCollapsedColumns = this.getCollapsedColumns();\n    let destinationCollapsedColumns = [];\n\n    if (action === 'collapse') {\n      destinationCollapsedColumns = arrayUnique([...currentCollapsedColumns, ...affectedColumnsIndexes]);\n\n    } else if (action === 'expand') {\n      destinationCollapsedColumns = arrayFilter(currentCollapsedColumns,\n        index => !affectedColumnsIndexes.includes(index));\n    }\n\n    const actionTranslator = actionDictionary.get(action);\n    const isActionAllowed = this.hot.runHooks(\n      actionTranslator.beforeHook,\n      currentCollapsedColumns,\n      destinationCollapsedColumns,\n      isActionPossible,\n    );\n\n    if (isActionAllowed === false) {\n      // Rollback all header nodes modification (collapse or expand).\n      arrayEach(nodeModRollbacks, (nodeModRollback) => {\n        nodeModRollback();\n      });\n\n      return;\n    }\n\n    this.hot.batchExecution(() => {\n      arrayEach(affectedColumnsIndexes, (visualColumn) => {\n        this.#collapsedColumnsMap\n          .setValueAtIndex(this.hot.toPhysicalColumn(visualColumn), actionTranslator.hideColumn);\n      });\n    }, true);\n\n    const isActionPerformed = this.getCollapsedColumns().length !== currentCollapsedColumns.length;\n    const selectionRange = this.hot.getSelectedRangeLast();\n\n    if (action === 'collapse' && isActionPerformed && selectionRange) {\n      const { row, col } = selectionRange.highlight;\n      const isHidden = this.hot.rowIndexMapper.isHidden(row) || this.hot.columnIndexMapper.isHidden(col);\n\n      if (isHidden && affectedColumnsIndexes.includes(col)) {\n        const nextRow = row >= 0 ? this.hot.rowIndexMapper.getNearestNotHiddenIndex(row, 1, true) : row;\n        const nextColumn = col >= 0 ? this.hot.columnIndexMapper.getNearestNotHiddenIndex(col, 1, true) : col;\n\n        if (nextRow !== null && nextColumn !== null) {\n          this.hot.selectCell(nextRow, nextColumn);\n        }\n      }\n    }\n\n    this.hot.runHooks(\n      actionTranslator.afterHook,\n      currentCollapsedColumns,\n      destinationCollapsedColumns,\n      isActionPossible,\n      isActionPerformed,\n    );\n\n    this.hot.render();\n    this.hot.view.adjustElementsSize();\n  }\n\n  /**\n   * Gets an array of physical indexes of collapsed columns.\n   *\n   * @private\n   * @returns {number[]}\n   */\n  getCollapsedColumns() {\n    return this.#collapsedColumnsMap.getHiddenIndexes();\n  }\n\n  /**\n   * Adds the indicator to the headers.\n   *\n   * @param {number} column Column index.\n   * @param {HTMLElement} TH TH element.\n   * @param {number} headerLevel The index of header level counting from the top (positive\n   *                             values counting from 0 to N).\n   */\n  #onAfterGetColHeader(column, TH, headerLevel) {\n    const {\n      collapsible,\n      origColspan,\n      isCollapsed,\n    } = this.headerStateManager.getHeaderSettings(headerLevel, column) ?? {};\n    const isNodeCollapsible = collapsible && origColspan > 1 && column >= this.hot.getSettings().fixedColumnsStart;\n    const isAriaTagsEnabled = this.hot.getSettings().ariaTags;\n    let collapsibleElement = TH.querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n    removeAttribute(TH, [\n      A11Y_EXPANDED('')[0]\n    ]);\n\n    if (isNodeCollapsible) {\n      if (!collapsibleElement) {\n        collapsibleElement = this.hot.rootDocument.createElement('div');\n\n        addClass(collapsibleElement, COLLAPSIBLE_ELEMENT_CLASS);\n        TH.querySelector('div:first-child').appendChild(collapsibleElement);\n      }\n\n      removeClass(collapsibleElement, ['collapsed', 'expanded']);\n\n      if (isCollapsed) {\n        addClass(collapsibleElement, 'collapsed');\n\n        fastInnerText(collapsibleElement, '+');\n\n        // Add ARIA tags\n        if (isAriaTagsEnabled) {\n          setAttribute(TH, ...A11Y_EXPANDED(false));\n        }\n\n      } else {\n        addClass(collapsibleElement, 'expanded');\n\n        fastInnerText(collapsibleElement, '-');\n\n        // Add ARIA tags\n        if (isAriaTagsEnabled) {\n          setAttribute(TH, ...A11Y_EXPANDED(true));\n        }\n      }\n\n      if (isAriaTagsEnabled) {\n        setAttribute(collapsibleElement, ...A11Y_HIDDEN());\n      }\n\n    } else {\n      collapsibleElement?.remove();\n    }\n  }\n\n  /**\n   * Indicator mouse event callback.\n   *\n   * @param {object} event Mouse event.\n   * @param {object} coords Event coordinates.\n   */\n  #onBeforeOnCellMouseDown(event, coords) {\n    if (hasClass(event.target, COLLAPSIBLE_ELEMENT_CLASS)) {\n      if (hasClass(event.target, 'expanded')) {\n        this.eventManager.fireEvent(event.target, 'mouseup');\n        this.toggleCollapsibleSection([coords], 'collapse');\n\n      } else if (hasClass(event.target, 'collapsed')) {\n        this.eventManager.fireEvent(event.target, 'mouseup');\n        this.toggleCollapsibleSection([coords], 'expand');\n      }\n\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Updates the plugin state after HoT initialization.\n   */\n  #onInit() {\n    // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n    this.updatePlugin();\n  }\n\n  /**\n   * Updates the plugin state after new dataset load.\n   *\n   * @param {Array[]} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded\n   *                              during the initialization.\n   */\n  #onAfterLoadData(sourceData, initialLoad) {\n    if (!initialLoad) {\n      this.updatePlugin();\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#collapsedColumnsMap = null;\n\n    super.destroy();\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ColumnSorting,\n  APPEND_COLUMN_CONFIG_STRATEGY,\n  REPLACE_COLUMN_CONFIG_STRATEGY\n} from './columnSorting';\n","import {\n  addClass,\n  hasClass,\n  removeClass,\n  setAttribute,\n} from '../../helpers/dom/element';\nimport { isUndefined, isDefined } from '../../helpers/mixed';\nimport { isObject } from '../../helpers/object';\nimport { isFunction } from '../../helpers/function';\nimport { arrayMap } from '../../helpers/array';\nimport { BasePlugin } from '../base';\nimport { IndexesSequence, PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\nimport Hooks from '../../pluginHooks';\nimport { ColumnStatesManager } from './columnStatesManager';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport {\n  HEADER_SPAN_CLASS,\n  getNextSortOrder,\n  areValidSortStates,\n  getHeaderSpanElement,\n  isFirstLevelColumnHeader,\n  wasHeaderClickedProperly\n} from './utils';\nimport {\n  getClassesToRemove,\n  getClassesToAdd\n} from './domHelpers';\nimport { rootComparator } from './rootComparator';\nimport { registerRootComparator, sort } from './sortService';\nimport { A11Y_SORT } from '../../helpers/a11y';\n\nimport './columnSorting.scss';\n\nexport const PLUGIN_KEY = 'columnSorting';\nexport const PLUGIN_PRIORITY = 50;\nexport const APPEND_COLUMN_CONFIG_STRATEGY = 'append';\nexport const REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nregisterRootComparator(PLUGIN_KEY, rootComparator);\n\nHooks.getSingleton().register('beforeColumnSort');\nHooks.getSingleton().register('afterColumnSort');\n\n// DIFF - MultiColumnSorting & ColumnSorting: changed configuration documentation.\n/**\n * @plugin ColumnSorting\n * @class ColumnSorting\n *\n * @description\n * This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the\n * {@link Options#columnSorting} property to the correct value (see the examples below).\n *\n * @example\n * ```js\n * // as boolean\n * columnSorting: true\n *\n * // as an object with initial sort config (sort ascending for column at index 1)\n * columnSorting: {\n *   initialConfig: {\n *     column: 1,\n *     sortOrder: 'asc'\n *   }\n * }\n *\n * // as an object which define specific sorting options for all columns\n * columnSorting: {\n *   sortEmptyCells: true, // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table (by default)\n *   indicator: true, // true = shows indicator for all columns (by default), false = don't show indicator for columns\n *   headerAction: true, // true = allow to click on the headers to sort (by default), false = turn off possibility to click on the headers to sort\n *   compareFunctionFactory: function(sortOrder, columnMeta) {\n *     return function(value, nextValue) {\n *       // Some value comparisons which will return -1, 0 or 1...\n *     }\n *   }\n * }\n *\n * // as an object passed to the `column` property, allows specifying a custom options for the desired column.\n * // please take a look at documentation of `column` property: https://handsontable.com/docs/Options.html#columns\n * columns: [{\n *   columnSorting: {\n *     indicator: false, // disable indicator for the first column,\n *     sortEmptyCells: true,\n *     headerAction: false, // clicks on the first column won't sort\n *     compareFunctionFactory: function(sortOrder, columnMeta) {\n *       return function(value, nextValue) {\n *         return 0; // Custom compare function for the first column (don't sort)\n *       }\n *     }\n *   }\n * }]\n * ```\n */\nexport class ColumnSorting extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Instance of column state manager.\n   *\n   * @private\n   * @type {null|ColumnStatesManager}\n   */\n  columnStatesManager = null;\n  /**\n   * Cached column properties from plugin like i.e. `indicator`, `headerAction`.\n   *\n   * @private\n   * @type {null|PhysicalIndexToValueMap}\n   */\n  columnMetaCache = null;\n  /**\n   * Main settings key designed for the plugin.\n   *\n   * @private\n   * @type {string}\n   */\n  pluginKey = PLUGIN_KEY;\n  /**\n   * Plugin indexes cache.\n   *\n   * @private\n   * @type {null|IndexesSequence}\n   */\n  indexesSequenceCache = null;\n\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ColumnSorting#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!(this.hot.getSettings()[this.pluginKey]);\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.columnStatesManager = new ColumnStatesManager(this.hot, `${this.pluginKey}.sortingStates`);\n\n    this.columnMetaCache = new IndexToValueMap((physicalIndex) => {\n      let visualIndex = this.hot.toVisualColumn(physicalIndex);\n\n      if (visualIndex === null) {\n        visualIndex = physicalIndex;\n      }\n\n      return this.getMergedPluginSettings(visualIndex);\n    });\n    this.hot.columnIndexMapper.registerMap(`${this.pluginKey}.columnMeta`, this.columnMetaCache);\n\n    this.addHook('afterGetColHeader', (column, TH) => this.#onAfterGetColHeader(column, TH));\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('afterOnCellMouseDown', (event, target) => this.onAfterOnCellMouseDown(event, target));\n    this.addHook('afterInit', () => this.#loadOrSortBySettings());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    // TODO: Workaround? It should be refactored / described.\n    if (this.hot.view) {\n      this.#loadOrSortBySettings();\n    }\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    const clearColHeader = (column, TH) => {\n      const headerSpanElement = getHeaderSpanElement(TH);\n\n      if (isFirstLevelColumnHeader(column, TH) === false || headerSpanElement === null) {\n        return;\n      }\n\n      this.updateHeaderClasses(headerSpanElement);\n    };\n\n    // Changing header width and removing indicator.\n    this.hot.addHook('afterGetColHeader', clearColHeader);\n    this.hot.addHookOnce('afterViewRender', () => {\n      this.hot.removeHook('afterGetColHeader', clearColHeader);\n    });\n\n    this.hot.batchExecution(() => {\n      if (this.indexesSequenceCache !== null) {\n        this.hot.rowIndexMapper.setIndexesSequence(this.indexesSequenceCache.getValues());\n        this.hot.rowIndexMapper.unregisterMap(this.pluginKey);\n\n        this.indexesSequenceCache = null;\n      }\n    }, true);\n\n    this.hot.columnIndexMapper.unregisterMap(`${this.pluginKey}.columnMeta`);\n    this.columnStatesManager.destroy();\n    this.columnMetaCache = null;\n    this.columnStatesManager = null;\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Enter']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n\n          this.sort(this.getColumnNextConfig(highlight.col));\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.getSelectedRangeLast()?.isSingle() &&\n            this.hot.selection.isCellVisible(highlight) && highlight.row === -1 && highlight.col >= 0;\n        },\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  // DIFF - MultiColumnSorting & ColumnSorting: changed function documentation.\n  /**\n   * Sorts the table by chosen columns and orders.\n   *\n   * @param {undefined|object} sortConfig Single column sort configuration. The configuration object contains `column` and `sortOrder` properties.\n   * First of them contains visual column index, the second one contains sort order (`asc` for ascending, `desc` for descending).\n   *\n   * **Note**: Please keep in mind that every call of `sort` function set an entirely new sort order. Previous sort configs aren't preserved.\n   *\n   * @example\n   * ```js\n   * // sort ascending first visual column\n   * hot.getPlugin('columnSorting').sort({ column: 0, sortOrder: 'asc' });\n   * ```\n   *\n   * @fires Hooks#beforeColumnSort\n   * @fires Hooks#afterColumnSort\n   */\n  sort(sortConfig) {\n    const currentSortConfig = this.getSortConfig();\n\n    // We always pass configs defined as an array to `beforeColumnSort` and `afterColumnSort` hooks.\n    const destinationSortConfigs = this.getNormalizedSortConfigs(sortConfig);\n\n    const sortPossible = this.areValidSortConfigs(destinationSortConfigs);\n    const allowSort = this.hot.runHooks('beforeColumnSort', currentSortConfig, destinationSortConfigs, sortPossible);\n\n    if (allowSort === false) {\n      return;\n    }\n\n    if (currentSortConfig.length === 0 && this.indexesSequenceCache === null) {\n      this.indexesSequenceCache = this.hot.rowIndexMapper.registerMap(this.pluginKey, new IndexesSequence());\n      this.indexesSequenceCache.setValues(this.hot.rowIndexMapper.getIndexesSequence());\n    }\n\n    if (sortPossible) {\n      this.columnStatesManager.setSortStates(destinationSortConfigs);\n      this.sortByPresetSortStates(destinationSortConfigs);\n      this.saveAllSortSettings(destinationSortConfigs);\n    }\n\n    this.hot.runHooks('afterColumnSort',\n      currentSortConfig, sortPossible ? destinationSortConfigs : currentSortConfig, sortPossible);\n\n    if (sortPossible) {\n      this.hot.render();\n      // TODO: Workaround? This triggers fast redraw. One test won't pass after removal.\n      // It should be refactored / described.\n      this.hot.forceFullRender = false;\n      this.hot.view.render();\n    }\n  }\n\n  /**\n   * Clear the sort performed on the table.\n   */\n  clearSort() {\n    this.sort([]);\n  }\n\n  /**\n   * Checks if the table is sorted (any column have to be sorted).\n   *\n   * @returns {boolean}\n   */\n  isSorted() {\n    return this.enabled && !this.columnStatesManager.isListOfSortedColumnsEmpty();\n  }\n\n  /**\n   * Get sort configuration for particular column or for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key. They are handled by the `sort` function.\n   *\n   * @param {number} [column] Visual column index.\n   * @returns {undefined|object|Array}\n   */\n  getSortConfig(column) {\n    if (isDefined(column)) {\n      return this.columnStatesManager.getColumnSortState(column);\n    }\n\n    return this.columnStatesManager.getSortStates();\n  }\n\n  /**\n   * @description\n   * Warn: Useful mainly for providing server side sort implementation (see in the example below). It doesn't sort the data set. It just sets sort configuration for all sorted columns.\n   * Note: Please keep in mind that this method doesn't re-render the table.\n   *\n   * @example\n   * ```js\n   * beforeColumnSort: function(currentSortConfig, destinationSortConfigs) {\n   *   const columnSortPlugin = this.getPlugin('columnSorting');\n   *\n   *   columnSortPlugin.setSortConfig(destinationSortConfigs);\n   *\n   *   // const newData = ... // Calculated data set, ie. from an AJAX call.\n   *\n   *   this.loadData(newData); // Load new data set and re-render the table.\n   *\n   *   return false; // The blockade for the default sort action.\n   * }\n   * ```\n   *\n   * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   */\n  setSortConfig(sortConfig) {\n    // We always set configs defined as an array.\n    const destinationSortConfigs = this.getNormalizedSortConfigs(sortConfig);\n\n    if (this.areValidSortConfigs(destinationSortConfigs)) {\n      this.columnStatesManager.setSortStates(destinationSortConfigs);\n    }\n  }\n\n  /**\n   * Get normalized sort configs.\n   *\n   * @private\n   * @param {object|Array} [sortConfig=[]] Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   * @returns {Array}\n   */\n  getNormalizedSortConfigs(sortConfig = []) {\n    if (Array.isArray(sortConfig)) {\n      return sortConfig.slice(0, 1);\n    }\n\n    return [sortConfig];\n  }\n\n  /**\n   * Get if sort configs are valid.\n   *\n   * @private\n   * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   * @returns {boolean}\n   */\n  areValidSortConfigs(sortConfigs) {\n    const numberOfColumns = this.hot.countCols();\n\n    // We don't translate visual indexes to physical indexes.\n    return areValidSortStates(sortConfigs) && sortConfigs.every(({ column }) =>\n      column <= numberOfColumns && column >= 0);\n  }\n\n  /**\n   * Saves all sorting settings. Saving works only when {@link Options#persistentState} option is enabled.\n   *\n   * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   *\n   * @private\n   * @fires Hooks#persistentStateSave\n   */\n  saveAllSortSettings(sortConfigs) {\n    const allSortSettings = this.columnStatesManager.getAllColumnsProperties();\n    const translateColumnToPhysical = ({ column: visualColumn, ...restOfProperties }) =>\n      ({ column: this.hot.toPhysicalColumn(visualColumn), ...restOfProperties });\n\n    allSortSettings.initialConfig = arrayMap(sortConfigs, translateColumnToPhysical);\n\n    this.hot.runHooks('persistentStateSave', 'columnSorting', allSortSettings);\n  }\n\n  /**\n   * Get all saved sorting settings. Loading works only when {@link Options#persistentState} option is enabled.\n   *\n   * @private\n   * @returns {object} Previously saved sort settings.\n   *\n   * @fires Hooks#persistentStateLoad\n   */\n  getAllSavedSortSettings() {\n    const storedAllSortSettings = {};\n\n    this.hot.runHooks('persistentStateLoad', 'columnSorting', storedAllSortSettings);\n\n    const allSortSettings = storedAllSortSettings.value;\n    const translateColumnToVisual = ({ column: physicalColumn, ...restOfProperties }) =>\n      ({ column: this.hot.toVisualColumn(physicalColumn), ...restOfProperties });\n\n    if (isDefined(allSortSettings) && Array.isArray(allSortSettings.initialConfig)) {\n      allSortSettings.initialConfig = arrayMap(allSortSettings.initialConfig, translateColumnToVisual);\n    }\n\n    return allSortSettings;\n  }\n\n  /**\n   * Get next sort configuration for particular column. Object contain `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned object expose **visual** column index under the `column` key.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {undefined|object}\n   */\n  getColumnNextConfig(column) {\n    const sortOrder = this.columnStatesManager.getSortOrderOfColumn(column);\n\n    if (isDefined(sortOrder)) {\n      const nextSortOrder = getNextSortOrder(sortOrder);\n\n      if (isDefined(nextSortOrder)) {\n        return {\n          column,\n          sortOrder: nextSortOrder,\n        };\n      }\n\n      return;\n    }\n\n    const nrOfColumns = this.hot.countCols();\n\n    if (Number.isInteger(column) && column >= 0 && column < nrOfColumns) {\n      return {\n        column,\n        sortOrder: getNextSortOrder()\n      };\n    }\n  }\n\n  /**\n   * Get sort configuration with \"next order\" for particular column.\n   *\n   * @private\n   * @param {number} columnToChange Visual column index of column which order will be changed.\n   * @param {string} strategyId ID of strategy. Possible values: 'append' and 'replace'. The first one\n   * change order of particular column and change it's position in the sort queue to the last one. The second one\n   * just change order of particular column.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n   *\n   * @returns {Array}\n   */\n  getNextSortConfig(columnToChange, strategyId = APPEND_COLUMN_CONFIG_STRATEGY) {\n    const indexOfColumnToChange = this.columnStatesManager.getIndexOfColumnInSortQueue(columnToChange);\n    const isColumnSorted = indexOfColumnToChange !== -1;\n    const currentSortConfig = this.getSortConfig();\n    const nextColumnConfig = this.getColumnNextConfig(columnToChange);\n\n    if (isColumnSorted) {\n      if (isUndefined(nextColumnConfig)) {\n        return [\n          ...currentSortConfig.slice(0, indexOfColumnToChange),\n          ...currentSortConfig.slice(indexOfColumnToChange + 1)\n        ];\n      }\n\n      if (strategyId === APPEND_COLUMN_CONFIG_STRATEGY) {\n        return [\n          ...currentSortConfig.slice(0, indexOfColumnToChange),\n          ...currentSortConfig.slice(indexOfColumnToChange + 1),\n          nextColumnConfig\n        ];\n\n      } else if (strategyId === REPLACE_COLUMN_CONFIG_STRATEGY) {\n        return [\n          ...currentSortConfig.slice(0, indexOfColumnToChange),\n          nextColumnConfig,\n          ...currentSortConfig.slice(indexOfColumnToChange + 1)\n        ];\n      }\n    }\n\n    if (isDefined(nextColumnConfig)) {\n      return currentSortConfig.concat(nextColumnConfig);\n    }\n\n    return currentSortConfig;\n  }\n\n  /**\n   * Get plugin's column config for the specified column index.\n   *\n   * @private\n   * @param {object} columnConfig Configuration inside `columns` property for the specified column index.\n   * @returns {object}\n   */\n  getPluginColumnConfig(columnConfig) {\n    if (isObject(columnConfig)) {\n      const pluginColumnConfig = columnConfig[this.pluginKey];\n\n      if (isObject(pluginColumnConfig)) {\n        return pluginColumnConfig;\n      }\n    }\n\n    return {};\n  }\n\n  /**\n   * Get plugin settings related properties, properly merged from cascade settings.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {object}\n   */\n  getMergedPluginSettings(column) {\n    const pluginMainSettings = this.hot.getSettings()[this.pluginKey];\n    const storedColumnProperties = this.columnStatesManager.getAllColumnsProperties();\n    const cellMeta = this.hot.getCellMeta(0, column);\n    const columnMeta = Object.getPrototypeOf(cellMeta);\n\n    if (Array.isArray(columnMeta.columns)) {\n      return Object\n        .assign(storedColumnProperties, pluginMainSettings, this.getPluginColumnConfig(columnMeta.columns[column]));\n\n    } else if (isFunction(columnMeta.columns)) {\n      return Object\n        .assign(storedColumnProperties, pluginMainSettings, this.getPluginColumnConfig(columnMeta.columns(column)));\n    }\n\n    return Object.assign(storedColumnProperties, pluginMainSettings);\n  }\n\n  /**\n   * Get copy of settings for first cell in the column.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {object}\n   */\n  // TODO: Workaround. Inheriting of non-primitive cell meta values doesn't work. Instead of getting properties from column meta we call this function.\n  // TODO: Remove test named: \"should not break the dataset when inserted new row\" (#5431).\n  getFirstCellSettings(column) {\n    const cellMeta = this.hot.getCellMeta(0, column);\n\n    const cellMetaCopy = Object.create(cellMeta);\n\n    cellMetaCopy[this.pluginKey] = this.columnMetaCache.getValueAtIndex(this.hot.toPhysicalColumn(column));\n\n    return cellMetaCopy;\n  }\n\n  /**\n   * Get number of rows which should be sorted.\n   *\n   * @private\n   * @param {number} numberOfRows Total number of displayed rows.\n   * @returns {number}\n   */\n  getNumberOfRowsToSort(numberOfRows) {\n    const settings = this.hot.getSettings();\n\n    // `maxRows` option doesn't take into account `minSpareRows` option in this case.\n    if (settings.maxRows <= numberOfRows) {\n      return settings.maxRows;\n    }\n\n    return numberOfRows - settings.minSpareRows;\n  }\n\n  /**\n   * Performs the sorting using a stable sort function basing on internal state of sorting.\n   *\n   * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   * @private\n   */\n  sortByPresetSortStates(sortConfigs) {\n    this.hot.rowIndexMapper.setIndexesSequence(this.indexesSequenceCache.getValues());\n\n    if (sortConfigs.length === 0) {\n      return;\n    }\n\n    const indexesWithData = [];\n    const numberOfRows = this.hot.countRows();\n\n    const getDataForSortedColumns = visualRowIndex =>\n      arrayMap(sortConfigs, sortConfig => this.hot.getDataAtCell(visualRowIndex, sortConfig.column));\n\n    for (let visualRowIndex = 0; visualRowIndex < this.getNumberOfRowsToSort(numberOfRows); visualRowIndex += 1) {\n      indexesWithData.push([this.hot.toPhysicalRow(visualRowIndex)].concat(getDataForSortedColumns(visualRowIndex)));\n    }\n\n    const indexesBefore = arrayMap(indexesWithData, indexWithData => indexWithData[0]);\n\n    sort(\n      indexesWithData,\n      this.pluginKey,\n      arrayMap(sortConfigs, sortConfig => sortConfig.sortOrder),\n      arrayMap(sortConfigs, sortConfig => this.getFirstCellSettings(sortConfig.column))\n    );\n\n    // Append spareRows\n    for (let visualRowIndex = indexesWithData.length; visualRowIndex < numberOfRows; visualRowIndex += 1) {\n      indexesWithData.push([visualRowIndex].concat(getDataForSortedColumns(visualRowIndex)));\n    }\n\n    const indexesAfter = arrayMap(indexesWithData, indexWithData => indexWithData[0]);\n\n    const indexMapping = new Map(\n      arrayMap(indexesBefore, (indexBefore, indexInsideArray) => [indexBefore, indexesAfter[indexInsideArray]])\n    );\n\n    const newIndexesSequence = arrayMap(this.hot.rowIndexMapper.getIndexesSequence(), (physicalIndex) => {\n      if (indexMapping.has(physicalIndex)) {\n        return indexMapping.get(physicalIndex);\n      }\n\n      return physicalIndex;\n    });\n\n    this.hot.rowIndexMapper.setIndexesSequence(newIndexesSequence);\n  }\n\n  /**\n   * Load saved settings or sort by predefined plugin configuration.\n   */\n  #loadOrSortBySettings() {\n    const storedAllSortSettings = this.getAllSavedSortSettings();\n\n    if (isObject(storedAllSortSettings)) {\n      this.sortBySettings(storedAllSortSettings);\n\n    } else {\n      const allSortSettings = this.hot.getSettings()[this.pluginKey];\n\n      this.sortBySettings(allSortSettings);\n    }\n  }\n\n  /**\n   * Sort the table by provided configuration.\n   *\n   * @private\n   * @param {object} allSortSettings All sort config settings. Object may contain `initialConfig`, `indicator`,\n   * `sortEmptyCells`, `headerAction` and `compareFunctionFactory` properties.\n   */\n  sortBySettings(allSortSettings) {\n    if (isObject(allSortSettings)) {\n      this.columnStatesManager.updateAllColumnsProperties(allSortSettings);\n\n      const initialConfig = allSortSettings.initialConfig;\n\n      if (Array.isArray(initialConfig) || isObject(initialConfig)) {\n        this.sort(initialConfig);\n      }\n\n    } else {\n      // Extra render for headers. Their width may change.\n      this.hot.render();\n    }\n  }\n\n  /**\n   * Callback for the `onAfterGetColHeader` hook. Adds column sorting CSS classes.\n   *\n   * @param {number} column Visual column index.\n   * @param {Element} TH TH HTML element.\n   */\n  #onAfterGetColHeader(column, TH) {\n    const headerSpanElement = getHeaderSpanElement(TH);\n\n    if (isFirstLevelColumnHeader(column, TH) === false || headerSpanElement === null) {\n      return;\n    }\n\n    const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];\n    const showSortIndicator = pluginSettingsForColumn.indicator;\n    const headerActionEnabled = pluginSettingsForColumn.headerAction;\n\n    this.updateHeaderClasses(\n      headerSpanElement,\n      this.columnStatesManager,\n      column,\n      showSortIndicator,\n      headerActionEnabled\n    );\n\n    if (this.hot.getSettings().ariaTags) {\n      const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);\n\n      setAttribute(TH, ...A11Y_SORT(currentSortState ? `${currentSortState}ending` : 'none'));\n    }\n  }\n\n  /**\n   * Update header classes.\n   *\n   * @private\n   * @param {HTMLElement} headerSpanElement Header span element.\n   * @param {...*} args Extra arguments for helpers.\n   */\n  updateHeaderClasses(headerSpanElement, ...args) {\n    removeClass(headerSpanElement, getClassesToRemove(headerSpanElement));\n\n    if (this.enabled !== false) {\n      addClass(headerSpanElement, getClassesToAdd(...args));\n    }\n  }\n\n  /**\n   * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called\n   * for `updateSettings` in specific situations.\n   *\n   * @private\n   * @param {object} newSettings New settings object.\n   */\n  onUpdateSettings(newSettings) {\n    super.onUpdateSettings();\n\n    if (this.columnMetaCache !== null) {\n      // Column meta cache base on settings, thus we should re-init the map.\n      this.columnMetaCache.init(this.hot.columnIndexMapper.getNumberOfIndexes());\n    }\n\n    if (isDefined(newSettings[this.pluginKey])) {\n      this.sortBySettings(newSettings[this.pluginKey]);\n    }\n  }\n\n  /**\n   * Callback for the `afterLoadData` hook.\n   *\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n   */\n  #onAfterLoadData(initialLoad) {\n    if (initialLoad === true) {\n      // TODO: Workaround? It should be refactored / described.\n      if (this.hot.view) {\n        this.#loadOrSortBySettings();\n      }\n    }\n  }\n\n  /**\n   * Indicates if clickable header was clicked.\n   *\n   * @private\n   * @param {MouseEvent} event The `mousedown` event.\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  wasClickableHeaderClicked(event, column) {\n    const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];\n    const headerActionEnabled = pluginSettingsForColumn.headerAction;\n\n    return (\n      headerActionEnabled && hasClass(event.target, HEADER_SPAN_CLASS)\n    );\n  }\n\n  /**\n   * Changes the behavior of selection / dragging.\n   *\n   * @param {MouseEvent} event The `mousedown` event.\n   * @param {CellCoords} coords Visual coordinates.\n   * @param {HTMLElement} TD The cell element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n      return;\n    }\n\n    if (this.wasClickableHeaderClicked(event, coords.col) && this.hot.getShortcutManager().isCtrlPressed()) {\n      controller.column = true;\n    }\n  }\n\n  /**\n   * Callback for the `onAfterOnCellMouseDown` hook.\n   *\n   * @private\n   * @param {Event} event Event which are provided by hook.\n   * @param {CellCoords} coords Visual coords of the selected cell.\n   */\n  onAfterOnCellMouseDown(event, coords) {\n    if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n      return;\n    }\n\n    if (this.wasClickableHeaderClicked(event, coords.col)) {\n      if (this.hot.getShortcutManager().isCtrlPressed()) {\n        this.hot.deselectCell();\n        this.hot.selectColumns(coords.col);\n      }\n\n      const activeEditor = this.hot.getActiveEditor();\n      const nextConfig = this.getColumnNextConfig(coords.col);\n\n      if (\n        activeEditor?.isOpened() &&\n        this.hot.getCellValidator(activeEditor.row, activeEditor.col)\n      ) {\n        // Postpone sorting until the cell's value is validated and saved.\n        this.hot.addHookOnce('postAfterValidate', () => {\n          this.sort(nextConfig);\n        });\n\n      } else {\n        this.sort(nextConfig);\n      }\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    // TODO: Probably not supported yet by ESLint: https://github.com/eslint/eslint/issues/11045\n    // eslint-disable-next-line no-unused-expressions\n    this.columnStatesManager?.destroy();\n\n    super.destroy();\n  }\n}\n","import { isObject, objectEach } from '../../helpers/object';\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\nimport { isDefined } from '../../helpers/mixed';\n\nconst inheritedColumnProperties = ['sortEmptyCells', 'indicator', 'headerAction', 'compareFunctionFactory'];\n\nconst SORT_EMPTY_CELLS_DEFAULT = false;\nconst SHOW_SORT_INDICATOR_DEFAULT = true;\nconst HEADER_ACTION_DEFAULT = true;\n\n/**\n * Store and manages states of sorted columns.\n *\n * @private\n * @class ColumnStatesManager\n */\nexport class ColumnStatesManager {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Index map storing sorting states for every column. ColumnStatesManager write and read to/from this element.\n   *\n   * @type {LinkedPhysicalIndexToValueMap}\n   */\n  sortingStates = new IndexToValueMap();\n  /**\n   * Determines whether we should sort empty cells.\n   *\n   * @type {boolean}\n   */\n  sortEmptyCells = SORT_EMPTY_CELLS_DEFAULT;\n  /**\n   * Determines whether indicator should be visible (for sorted columns).\n   *\n   * @type {boolean}\n   */\n  indicator = SHOW_SORT_INDICATOR_DEFAULT;\n  /**\n   * Determines whether click on the header perform sorting.\n   *\n   * @type {boolean}\n   */\n  headerAction = HEADER_ACTION_DEFAULT;\n  /**\n   * Determines compare function factory. Method get as parameters `sortOder` and `columnMeta` and return compare function.\n   */\n  compareFunctionFactory;\n  /**\n   * Name of map storing sorting states. Required for unique name (PR #7440 introduced it). It's needed as\n   * both ColumnSorting and MultiColumnSorting plugins create state manager and as a consequence register maps.\n   * Objects are destroyed in strange order as the updateSettings doesn't work well.\n   */\n  mapName;\n\n  constructor(hot, mapName) {\n    this.hot = hot;\n    this.mapName = mapName;\n    this.hot.columnIndexMapper.registerMap(mapName, this.sortingStates);\n  }\n\n  /**\n   * Update column properties which affect the sorting result.\n   *\n   * **Note**: All column properties can be overwritten by {@link Options#columns} option.\n   *\n   * @param {object} allSortSettings Column sorting plugin's configuration object.\n   */\n  updateAllColumnsProperties(allSortSettings) {\n    if (!isObject(allSortSettings)) {\n      return;\n    }\n\n    objectEach(allSortSettings, (newValue, propertyName) => {\n      if (inheritedColumnProperties.includes(propertyName)) {\n        this[propertyName] = newValue;\n      }\n    });\n  }\n\n  /**\n   * Get all column properties which affect the sorting result.\n   *\n   * @returns {object}\n   */\n  getAllColumnsProperties() {\n    const columnProperties = {\n      sortEmptyCells: this.sortEmptyCells,\n      indicator: this.indicator,\n      headerAction: this.headerAction\n    };\n\n    if (typeof this.compareFunctionFactory === 'function') {\n      columnProperties.compareFunctionFactory = this.compareFunctionFactory;\n    }\n\n    return columnProperties;\n  }\n\n  /**\n   * Get sort order of column.\n   *\n   * @param {number} searchedColumn Visual column index.\n   * @returns {string|undefined} Sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n   */\n  getSortOrderOfColumn(searchedColumn) {\n    return this.sortingStates.getValueAtIndex(this.hot.toPhysicalColumn(searchedColumn))?.sortOrder;\n  }\n\n  /**\n   * Get order of particular column in the states queue.\n   *\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  getIndexOfColumnInSortQueue(column) {\n    column = this.hot.toPhysicalColumn(column);\n\n    return this.sortingStates.getEntries().findIndex(([physicalColumn]) => physicalColumn === column);\n  }\n\n  /**\n   * Get number of sorted columns.\n   *\n   * @returns {number}\n   */\n  getNumberOfSortedColumns() {\n    return this.sortingStates.getLength();\n  }\n\n  /**\n   * Get if list of sorted columns is empty.\n   *\n   * @returns {boolean}\n   */\n  isListOfSortedColumnsEmpty() {\n    return this.getNumberOfSortedColumns() === 0;\n  }\n\n  /**\n   * Get if particular column is sorted.\n   *\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  isColumnSorted(column) {\n    return isObject(this.sortingStates.getValueAtIndex(this.hot.toPhysicalColumn(column)));\n  }\n\n  /**\n   * Queue of sort states containing sorted columns and their orders (Array of objects containing `column` and `sortOrder` properties).\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n   *\n   * @returns {Array<object>}\n   */\n  getSortStates() {\n    if (this.sortingStates === null) {\n      return [];\n    }\n\n    const sortingStatesQueue = this.sortingStates.getEntries();\n\n    return sortingStatesQueue.map(\n      ([physicalColumn, value]) => ({ column: this.hot.toVisualColumn(physicalColumn), ...value }));\n  }\n\n  /**\n   * Get sort state for particular column. Object contains `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n   *\n   * @param {number} column Visual column index.\n   * @returns {object|undefined}\n   */\n  getColumnSortState(column) {\n    const sortOrder = this.getSortOrderOfColumn(column);\n\n    if (isDefined(sortOrder)) {\n      return {\n        column,\n        sortOrder,\n      };\n    }\n  }\n\n  /**\n   * Set all column states.\n   *\n   * @param {Array} sortStates Sort states.\n   */\n  setSortStates(sortStates) {\n    this.sortingStates.clear();\n\n    for (let i = 0; i < sortStates.length; i += 1) {\n      this.sortingStates.setValueAtIndex(this.hot.toPhysicalColumn(sortStates[i].column), {\n        sortOrder: sortStates[i].sortOrder\n      });\n    }\n  }\n\n  /**\n   * Destroy the state manager.\n   */\n  destroy() {\n    this.hot.columnIndexMapper.unregisterMap(this.mapName);\n    this.sortingStates = null;\n  }\n}\n","import moment from 'moment';\nimport { isObject } from '../../helpers/object';\nimport { isRightClick } from '../../helpers/dom/event';\nimport { isEmpty } from '../../helpers/mixed';\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from './sortService';\n\nexport const ASC_SORT_STATE = 'asc';\nexport const DESC_SORT_STATE = 'desc';\nexport const HEADER_SPAN_CLASS = 'colHeader';\n\n/**\n * Get if column state is valid.\n *\n * @param {number} columnState Particular column state.\n * @returns {boolean}\n */\nfunction isValidColumnState(columnState) {\n  if (isObject(columnState) === false) {\n    return false;\n  }\n\n  const { column, sortOrder } = columnState;\n\n  return Number.isInteger(column) && [ASC_SORT_STATE, DESC_SORT_STATE].includes(sortOrder);\n}\n\n/**\n * Get if all sorted columns states are valid.\n *\n * @param {Array} sortStates The sort state collection.\n * @returns {boolean}\n */\nexport function areValidSortStates(sortStates) {\n  if (sortStates.some(columnState => isValidColumnState(columnState) === false)) {\n    return false;\n  }\n\n  const sortedColumns = sortStates.map(({ column }) => column);\n\n  // Indexes occurs only once.\n  return new Set(sortedColumns).size === sortedColumns.length;\n}\n\n/**\n * Get next sort order for particular column. The order sequence looks as follows: 'asc' -> 'desc' -> undefined -> 'asc'.\n *\n * @param {string|undefined} sortOrder Sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n * @returns {string|undefined} Next sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n */\nexport function getNextSortOrder(sortOrder) {\n  if (sortOrder === DESC_SORT_STATE) {\n    return;\n\n  } else if (sortOrder === ASC_SORT_STATE) {\n    return DESC_SORT_STATE;\n  }\n\n  return ASC_SORT_STATE;\n}\n\n/**\n * Get `span` DOM element inside `th` DOM element.\n *\n * @param {Element} TH Th HTML element.\n * @returns {Element | null}\n */\nexport function getHeaderSpanElement(TH) {\n  const headerSpanElement = TH.querySelector(`.${HEADER_SPAN_CLASS}`);\n\n  return headerSpanElement;\n}\n\n/**\n *\n * Get if handled header is first level column header.\n *\n * @param {number} column Visual column index.\n * @param {Element} TH Th HTML element.\n * @returns {boolean}\n */\nexport function isFirstLevelColumnHeader(column, TH) {\n  if (column < 0 || !TH.parentNode) {\n    return false;\n  }\n\n  const TRs = TH.parentNode.parentNode.childNodes;\n  const headerLevel = Array.from(TRs).indexOf(TH.parentNode) - TRs.length;\n\n  if (headerLevel !== -1) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n *  Get if header was clicked properly. Click on column header and NOT done by right click return `true`.\n *\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {Event} clickEvent Click event.\n * @returns {boolean}\n */\nexport function wasHeaderClickedProperly(row, column, clickEvent) {\n  return row === -1 && column >= 0 && isRightClick(clickEvent) === false;\n}\n\n/**\n * Creates date or time sorting compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {string} format Date or time format.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function createDateTimeCompareFunction(sortOrder, format, columnPluginSettings) {\n  return function(value, nextValue) {\n    const { sortEmptyCells } = columnPluginSettings;\n\n    if (value === nextValue) {\n      return DO_NOT_SWAP;\n    }\n\n    if (isEmpty(value)) {\n      if (isEmpty(nextValue)) {\n        return DO_NOT_SWAP;\n      }\n\n      // Just fist value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isEmpty(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n\n      return FIRST_BEFORE_SECOND;\n    }\n\n    const firstDate = moment(value, format);\n    const nextDate = moment(nextValue, format);\n\n    if (!firstDate.isValid()) {\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (!nextDate.isValid()) {\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (nextDate.isAfter(firstDate)) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (nextDate.isBefore(firstDate)) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n","import {\n  registerRootComparator,\n  getRootComparator,\n  getCompareFunctionFactory\n} from './registry';\n\nimport {\n  FIRST_AFTER_SECOND,\n  FIRST_BEFORE_SECOND,\n  DO_NOT_SWAP,\n  sort\n} from './engine';\n\nexport {\n  registerRootComparator,\n  getRootComparator,\n  getCompareFunctionFactory,\n  FIRST_AFTER_SECOND,\n  FIRST_BEFORE_SECOND,\n  DO_NOT_SWAP,\n  sort\n};\n","import { compareFunctionFactory as defaultSort, COLUMN_DATA_TYPE as DEFAULT_DATA_TYPE } from '../sortFunction/default';\nimport { compareFunctionFactory as numericSort, COLUMN_DATA_TYPE as NUMERIC_DATA_TYPE } from '../sortFunction/numeric';\nimport {\n  compareFunctionFactory as checkboxSort,\n  COLUMN_DATA_TYPE as CHECKBOX_DATA_TYPE\n} from '../sortFunction/checkbox';\nimport { compareFunctionFactory as dateSort, COLUMN_DATA_TYPE as DATE_DATA_TYPE } from '../sortFunction/date';\nimport { compareFunctionFactory as timeSort, COLUMN_DATA_TYPE as TIME_DATA_TYPE } from '../sortFunction/time';\nimport staticRegister from '../../../utils/staticRegister';\n\nconst {\n  register: registerCompareFunctionFactory,\n  getItem: getGloballyCompareFunctionFactory,\n  hasItem: hasGloballyCompareFunctionFactory,\n} = staticRegister('sorting.compareFunctionFactory');\n\nconst {\n  register: registerRootComparator,\n  getItem: getRootComparator,\n} = staticRegister('sorting.mainSortComparator');\n\n/**\n * Gets sort function for the particular column basing on it's data type.\n *\n * @param {string} type The data type.\n * @returns {Function}\n */\nexport function getCompareFunctionFactory(type) {\n  if (hasGloballyCompareFunctionFactory(type)) {\n    return getGloballyCompareFunctionFactory(type);\n  }\n\n  return getGloballyCompareFunctionFactory(DEFAULT_DATA_TYPE);\n}\n\nregisterCompareFunctionFactory(CHECKBOX_DATA_TYPE, checkboxSort);\nregisterCompareFunctionFactory(DATE_DATA_TYPE, dateSort);\nregisterCompareFunctionFactory(DEFAULT_DATA_TYPE, defaultSort);\nregisterCompareFunctionFactory(NUMERIC_DATA_TYPE, numericSort);\nregisterCompareFunctionFactory(TIME_DATA_TYPE, timeSort);\n\nexport {\n  registerRootComparator,\n  getRootComparator\n};\n","import { isEmpty } from '../../../helpers/mixed';\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from '../sortService';\n\n/**\n * Default sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  const locale = columnMeta.locale;\n\n  return function(value, nextValue) {\n    const { sortEmptyCells } = columnPluginSettings;\n\n    if (typeof value === 'string') {\n      value = value.toLocaleLowerCase(locale);\n    }\n\n    if (typeof nextValue === 'string') {\n      nextValue = nextValue.toLocaleLowerCase(locale);\n    }\n\n    if (value === nextValue) {\n      return DO_NOT_SWAP;\n    }\n\n    if (isEmpty(value)) {\n      if (isEmpty(nextValue)) {\n        return DO_NOT_SWAP;\n      }\n\n      // Just fist value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isEmpty(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (isNaN(value) && !isNaN(nextValue)) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n\n    } else if (!isNaN(value) && isNaN(nextValue)) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n\n    } else if (!(isNaN(value) || isNaN(nextValue))) {\n      value = parseFloat(value);\n      nextValue = parseFloat(nextValue);\n    }\n\n    if (value < nextValue) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (value > nextValue) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n\nexport const COLUMN_DATA_TYPE = 'default';\n","import { isEmpty } from '../../../helpers/mixed';\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from '../sortService';\n\n/**\n * Numeric sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return function(value, nextValue) {\n    const parsedFirstValue = parseFloat(value);\n    const parsedSecondValue = parseFloat(nextValue);\n    const { sortEmptyCells } = columnPluginSettings;\n\n    // Watch out when changing this part of code! Check below returns 0 (as expected) when comparing empty string, null, undefined\n    if (parsedFirstValue === parsedSecondValue || (isNaN(parsedFirstValue) && isNaN(parsedSecondValue))) {\n      return DO_NOT_SWAP;\n    }\n\n    if (sortEmptyCells) {\n      if (isEmpty(value)) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      if (isEmpty(nextValue)) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n    }\n\n    if (isNaN(parsedFirstValue)) {\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isNaN(parsedSecondValue)) {\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (parsedFirstValue < parsedSecondValue) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n\n    } else if (parsedFirstValue > parsedSecondValue) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n\nexport const COLUMN_DATA_TYPE = 'numeric';\n","import { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from '../sortService';\nimport { compareFunctionFactory as defaultCompareFunctionFactory } from '../sortFunction/default';\nimport { isEmpty } from '../../../helpers/mixed';\n\n/**\n * Checkbox sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  const checkedTemplate = columnMeta.checkedTemplate;\n  const uncheckedTemplate = columnMeta.uncheckedTemplate;\n  const { sortEmptyCells } = columnPluginSettings;\n\n  return function(value, nextValue) {\n    const isEmptyValue = isEmpty(value);\n    const isEmptyNextValue = isEmpty(nextValue);\n    const unifiedValue = isEmptyValue ? uncheckedTemplate : value;\n    const unifiedNextValue = isEmptyNextValue ? uncheckedTemplate : nextValue;\n    const isValueFromTemplate = unifiedValue === uncheckedTemplate || unifiedValue === checkedTemplate;\n    const isNextValueFromTemplate = unifiedNextValue === uncheckedTemplate || unifiedNextValue === checkedTemplate;\n\n    // As an empty cell we recognize cells with undefined, null and '' values.\n    if (sortEmptyCells === false) {\n      if (isEmptyValue && isEmptyNextValue === false) {\n        return FIRST_AFTER_SECOND;\n      }\n\n      if (isEmptyValue === false && isEmptyNextValue) {\n        return FIRST_BEFORE_SECOND;\n      }\n    }\n\n    // 1st value === #BAD_VALUE#\n    if (isValueFromTemplate === false && isNextValueFromTemplate) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    // 2nd value === #BAD_VALUE#\n    if (isValueFromTemplate && isNextValueFromTemplate === false) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    // 1st value === #BAD_VALUE# && 2nd value === #BAD_VALUE#\n    if (isValueFromTemplate === false && isNextValueFromTemplate === false) {\n      // Sorting by values (not just by visual representation).\n      return defaultCompareFunctionFactory(sortOrder, columnMeta, columnPluginSettings)(value, nextValue);\n    }\n\n    if (unifiedValue === uncheckedTemplate && unifiedNextValue === checkedTemplate) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (unifiedValue === checkedTemplate && unifiedNextValue === uncheckedTemplate) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n\nexport const COLUMN_DATA_TYPE = 'checkbox';\n","import { createDateTimeCompareFunction } from '../utils';\n\n/**\n * Date sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return createDateTimeCompareFunction(sortOrder, columnMeta.dateFormat, columnPluginSettings);\n}\n\nexport const COLUMN_DATA_TYPE = 'date';\n","import { createDateTimeCompareFunction } from '../utils';\n\n/**\n * Date sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return createDateTimeCompareFunction(sortOrder, columnMeta.timeFormat, columnPluginSettings);\n}\n\nexport const COLUMN_DATA_TYPE = 'time';\n","import { getRootComparator } from './registry';\n\nexport const DO_NOT_SWAP = 0;\nexport const FIRST_BEFORE_SECOND = -1;\nexport const FIRST_AFTER_SECOND = 1;\n\n/**\n * @param {Array} indexesWithData The data to sort.\n * @param {string} rootComparatorId The comparator logic to use.\n * @param {Array} argsForRootComparator Additional arguments for comparator function.\n */\nexport function sort(indexesWithData, rootComparatorId, ...argsForRootComparator) {\n  const rootComparator = getRootComparator(rootComparatorId);\n\n  indexesWithData.sort(rootComparator(...argsForRootComparator));\n}\n","import { isDefined } from '../../helpers/mixed';\nimport { ASC_SORT_STATE, DESC_SORT_STATE } from './utils';\n\nconst HEADER_CLASS_ASC_SORT = 'ascending';\nconst HEADER_CLASS_DESC_SORT = 'descending';\nconst HEADER_CLASS_INDICATOR_DISABLED = 'indicatorDisabled';\nconst HEADER_SORT_CLASS = 'columnSorting';\nconst HEADER_ACTION_CLASS = 'sortAction';\n\nconst orderToCssClass = new Map([\n  [ASC_SORT_STATE, HEADER_CLASS_ASC_SORT],\n  [DESC_SORT_STATE, HEADER_CLASS_DESC_SORT]\n]);\n\n/**\n * Get CSS classes which should be added to particular column header.\n *\n * @param {object} columnStatesManager Instance of column state manager.\n * @param {number} column Visual column index.\n * @param {boolean} showSortIndicator Indicates if indicator should be shown for the particular column.\n * @param {boolean} headerAction Indicates if header click to sort should be possible.\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToAdd(columnStatesManager, column, showSortIndicator, headerAction) {\n  const cssClasses = [HEADER_SORT_CLASS];\n\n  if (headerAction) {\n    cssClasses.push(HEADER_ACTION_CLASS);\n  }\n\n  if (showSortIndicator === false) {\n    cssClasses.push(HEADER_CLASS_INDICATOR_DISABLED);\n\n    return cssClasses;\n  }\n\n  const columnOrder = columnStatesManager.getSortOrderOfColumn(column);\n\n  if (isDefined(columnOrder)) {\n    cssClasses.push(orderToCssClass.get(columnOrder));\n  }\n\n  return cssClasses;\n}\n\n/**\n * Get CSS classes which should be removed from column header.\n *\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToRemove() {\n  return Array.from(orderToCssClass.values())\n    .concat(HEADER_ACTION_CLASS, HEADER_CLASS_INDICATOR_DISABLED, HEADER_SORT_CLASS);\n}\n","import { getCompareFunctionFactory } from './sortService';\n\n/**\n * Sort comparator handled by conventional sort algorithm.\n *\n * @param {Array} sortingOrders Sort orders (`asc` for ascending, `desc` for descending).\n * @param {Array} columnMetas Column meta objects.\n * @returns {Function}\n */\nexport function rootComparator(sortingOrders, columnMetas) {\n  return function(rowIndexWithValues, nextRowIndexWithValues) {\n    // We sort array of arrays. Single array is in form [rowIndex, ...values].\n    // We compare just values, stored at second index of array.\n    const [, ...values] = rowIndexWithValues;\n    const [, ...nextValues] = nextRowIndexWithValues;\n\n    return (function getCompareResult(column) {\n      const sortingOrder = sortingOrders[column];\n      const columnMeta = columnMetas[column];\n      const value = values[column];\n      const nextValue = nextValues[column];\n      const pluginSettings = columnMeta.columnSorting;\n      const compareFunctionFactory = pluginSettings.compareFunctionFactory ?\n        pluginSettings.compareFunctionFactory : getCompareFunctionFactory(columnMeta.type);\n      const compareResult = compareFunctionFactory(sortingOrder, columnMeta, pluginSettings)(value, nextValue);\n\n      // DIFF - MultiColumnSorting & ColumnSorting: removed iteration through next sorted columns.\n\n      return compareResult;\n    }(0));\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ColumnSummary,\n} from './columnSummary';\n","import { BasePlugin } from '../base';\nimport { objectEach } from '../../helpers/object';\nimport Endpoints from './endpoints';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport { isNullishOrNaN } from './utils';\n\nexport const PLUGIN_KEY = 'columnSummary';\nexport const PLUGIN_PRIORITY = 220;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ColumnSummary\n * @class ColumnSummary\n *\n * @description\n * The `ColumnSummary` plugin lets you [easily summarize your columns](@/guides/columns/column-summary/column-summary.md).\n *\n * You can use the [built-in summary functions](@/guides/columns/column-summary/column-summary.md#built-in-summary-functions),\n * or implement a [custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function).\n *\n * For each column summary, you can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `sourceColumn` | No | Number | Same as `destinationColumn` | [Selects a column to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize) |\n * | `ranges` | No | Array | - | [Selects ranges of rows to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize) |\n * | `type` | Yes | String | - | [Sets a summary function](@/guides/columns/column-summary/column-summary.md#step-3-calculate-your-summary) |\n * | `destinationRow` | Yes | Number | - | [Sets the destination cell's row coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n * | `destinationColumn` | Yes | Number | - | [Sets the destination cell's column coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n * | `forceNumeric` | No | Boolean | `false` | [Forces the summary to treat non-numerics as numerics](@/guides/columns/column-summary/column-summary.md#force-numeric-values) |\n * | `reversedRowCoords` | No | Boolean | `false` | [Reverses row coordinates](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell) |\n * | `suppressDataTypeErrors` | No | Boolean | `true` | [Suppresses data type errors](@/guides/columns/column-summary/column-summary.md#throw-data-type-errors) |\n * | `readOnly` | No | Boolean | `true` | Makes summary cell read-only |\n * | `roundFloat` | No | Number/<br>Boolean | - | [Rounds summary result](@/guides/columns/column-summary/column-summary.md#round-a-column-summary-result) |\n * | `customFunction` | No | Function | - | [Lets you add a custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function) |\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   columnSummary: [\n *     {\n *       type: 'min',\n *       destinationRow: 4,\n *       destinationColumn: 1,\n *     },\n *     {\n *       type: 'max',\n *       destinationRow: 0,\n *       destinationColumn: 3,\n *       reversedRowCoords: true\n *     },\n *     {\n *       type: 'sum',\n *       destinationRow: 4,\n *       destinationColumn: 5,\n *       forceNumeric: true\n *     }\n *   ]\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   columnSummary={[\n *     {\n *       type: 'min',\n *       destinationRow: 4,\n *       destinationColumn: 1,\n *     },\n *     {\n *       type: 'max',\n *       destinationRow: 0,\n *       destinationColumn: 3,\n *       reversedRowCoords: true\n *     },\n *     {\n *       type: 'sum',\n *       destinationRow: 4,\n *       destinationColumn: 5,\n *       forceNumeric: true\n *     }\n *   ]}\n * />\n * ```\n * :::\n */\nexport class ColumnSummary extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * The Endpoints class instance. Used to make all endpoint-related operations.\n   *\n   * @private\n   * @type {null|Endpoints}\n   */\n  endpoints = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ColumnSummary#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.settings = this.hot.getSettings()[PLUGIN_KEY];\n    this.endpoints = new Endpoints(this, this.settings);\n\n    this.addHook('afterInit', (...args) => this.#onAfterInit(...args));\n    this.addHook('afterChange', (...args) => this.#onAfterChange(...args));\n    this.addHook('afterUpdateSettings', (...args) => this.#onAfterUpdateSettings(...args));\n\n    this.addHook('beforeCreateRow', (index, amount, source) => this.endpoints.resetSetupBeforeStructureAlteration('insert_row', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('beforeCreateCol', (index, amount, source) => this.endpoints.resetSetupBeforeStructureAlteration('insert_col', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('beforeRemoveRow',\n      (...args) => this.endpoints.resetSetupBeforeStructureAlteration('remove_row', ...args));\n    this.addHook('beforeRemoveCol',\n      (...args) => this.endpoints.resetSetupBeforeStructureAlteration('remove_col', ...args));\n\n    this.addHook('afterCreateRow', (index, amount, source) => this.endpoints.resetSetupAfterStructureAlteration('insert_row', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('afterCreateCol', (index, amount, source) => this.endpoints.resetSetupAfterStructureAlteration('insert_col', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('afterRemoveRow',\n      (...args) => this.endpoints.resetSetupAfterStructureAlteration('remove_row', ...args));\n    this.addHook('afterRemoveCol',\n      (...args) => this.endpoints.resetSetupAfterStructureAlteration('remove_col', ...args));\n    this.addHook('afterRowMove', (...args) => this.#onAfterRowMove(...args));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.endpoints = null;\n    this.settings = null;\n    this.currentEndpoint = null;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`columnSummary`](@/api/options.md#columnsummary)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.endpoints.initEndpoints();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Calculates math for a single endpoint.\n   *\n   * @private\n   * @param {object} endpoint Contains information about the endpoint.\n   */\n  calculate(endpoint) {\n    switch (endpoint.type.toLowerCase()) {\n      case 'sum':\n        endpoint.result = this.calculateSum(endpoint);\n        break;\n      case 'min':\n        endpoint.result = this.calculateMinMax(endpoint, endpoint.type);\n        break;\n      case 'max':\n        endpoint.result = this.calculateMinMax(endpoint, endpoint.type);\n        break;\n      case 'count':\n        endpoint.result = this.countEntries(endpoint);\n        break;\n      case 'average':\n        endpoint.result = this.calculateAverage(endpoint);\n        break;\n      case 'custom':\n        endpoint.result = endpoint.customFunction.call(this, endpoint);\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Calculates sum of the values contained in ranges provided in the plugin config.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @returns {number} Sum for the selected range.\n   */\n  calculateSum(endpoint) {\n    let sum = 0;\n\n    objectEach(endpoint.ranges, (range) => {\n      sum += this.getPartialSum(range, endpoint.sourceColumn);\n    });\n\n    return sum;\n  }\n\n  /**\n   * Returns partial sum of values from a single row range.\n   *\n   * @private\n   * @param {Array} rowRange Range for the sum.\n   * @param {number} col Column index.\n   * @returns {number} The partial sum.\n   */\n  getPartialSum(rowRange, col) {\n    let sum = 0;\n    let i = rowRange[1] || rowRange[0];\n    let cellValue = null;\n    let biggestDecimalPlacesCount = 0;\n\n    do {\n      cellValue = this.getCellValue(i, col);\n      cellValue = isNullishOrNaN(cellValue) ? null : cellValue;\n\n      if (cellValue !== null) {\n        const decimalPlaces = (((`${cellValue}`).split('.')[1] || []).length) || 1;\n\n        if (decimalPlaces > biggestDecimalPlacesCount) {\n          biggestDecimalPlacesCount = decimalPlaces;\n        }\n      }\n\n      sum += cellValue || 0;\n      i -= 1;\n    } while (i >= rowRange[0]);\n\n    // Workaround for e.g. 802.2 + 1.1 = 803.3000000000001\n    return Math.round(sum * (10 ** biggestDecimalPlacesCount)) / (10 ** biggestDecimalPlacesCount);\n  }\n\n  /**\n   * Calculates the minimal value for the selected ranges.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @param {string} type `'min'` or `'max'`.\n   * @returns {number} Min or Max value.\n   */\n  calculateMinMax(endpoint, type) {\n    let result = null;\n\n    objectEach(endpoint.ranges, (range) => {\n      const partialResult = this.getPartialMinMax(range, endpoint.sourceColumn, type);\n\n      if (result === null && partialResult !== null) {\n        result = partialResult;\n      }\n\n      if (partialResult !== null) {\n        switch (type) {\n          case 'min':\n            result = Math.min(result, partialResult);\n            break;\n          case 'max':\n            result = Math.max(result, partialResult);\n            break;\n          default:\n            break;\n        }\n      }\n    });\n\n    return result === null ? 'Not enough data' : result;\n  }\n\n  /**\n   * Returns a local minimum of the provided sub-range.\n   *\n   * @private\n   * @param {Array} rowRange Range for the calculation.\n   * @param {number} col Column index.\n   * @param {string} type `'min'` or `'max'`.\n   * @returns {number|null} Min or max value.\n   */\n  getPartialMinMax(rowRange, col, type) {\n    let result = null;\n    let i = rowRange[1] || rowRange[0];\n    let cellValue;\n\n    do {\n      cellValue = this.getCellValue(i, col);\n      cellValue = isNullishOrNaN(cellValue) ? null : cellValue;\n\n      if (result === null) {\n        result = cellValue;\n      } else if (cellValue !== null) {\n        switch (type) {\n          case 'min':\n            result = Math.min(result, cellValue);\n            break;\n          case 'max':\n            result = Math.max(result, cellValue);\n            break;\n          default:\n            break;\n        }\n\n      }\n\n      i -= 1;\n    } while (i >= rowRange[0]);\n\n    return result;\n  }\n\n  /**\n   * Counts empty cells in the provided row range.\n   *\n   * @private\n   * @param {Array} rowRange Row range for the calculation.\n   * @param {number} col Column index.\n   * @returns {number} Empty cells count.\n   */\n  countEmpty(rowRange, col) {\n    let cellValue;\n    let counter = 0;\n    let i = rowRange[1] || rowRange[0];\n\n    do {\n      cellValue = this.getCellValue(i, col);\n      cellValue = isNullishOrNaN(cellValue) ? null : cellValue;\n\n      if (cellValue === null) {\n        counter += 1;\n      }\n\n      i -= 1;\n    } while (i >= rowRange[0]);\n\n    return counter;\n  }\n\n  /**\n   * Counts non-empty cells in the provided row range.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @returns {number} Entry count.\n   */\n  countEntries(endpoint) {\n    let result = 0;\n    const ranges = endpoint.ranges;\n\n    objectEach(ranges, (range) => {\n      const partial = range[1] === undefined ? 1 : range[1] - range[0] + 1;\n      const emptyCount = this.countEmpty(range, endpoint.sourceColumn);\n\n      result += partial;\n      result -= emptyCount;\n    });\n\n    return result;\n  }\n\n  /**\n   * Calculates the average value from the cells in the range.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @returns {number} Avarage value.\n   */\n  calculateAverage(endpoint) {\n    const sum = this.calculateSum(endpoint);\n    const entriesCount = this.countEntries(endpoint);\n\n    return sum / entriesCount;\n  }\n\n  /**\n   * Returns a cell value, taking into consideration a basic validation.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @param {number} col Column index.\n   * @returns {string} The cell value.\n   */\n  getCellValue(row, col) {\n    const visualRowIndex = this.hot.toVisualRow(row);\n    const visualColumnIndex = this.hot.toVisualColumn(col);\n\n    let cellValue = this.hot.getSourceDataAtCell(row, col);\n    let cellClassName = '';\n\n    if (visualRowIndex !== null && visualColumnIndex !== null) {\n      cellClassName = this.hot.getCellMeta(visualRowIndex, visualColumnIndex).className || '';\n    }\n\n    if (cellClassName.indexOf('columnSummaryResult') > -1) {\n      return null;\n    }\n\n    if (this.endpoints.currentEndpoint.forceNumeric) {\n      if (typeof cellValue === 'string') {\n        cellValue = cellValue.replace(/,/, '.');\n      }\n\n      cellValue = parseFloat(cellValue);\n    }\n\n    if (isNaN(cellValue)) {\n      if (!this.endpoints.currentEndpoint.suppressDataTypeErrors) {\n        throw new Error(toSingleLine`ColumnSummary plugin: cell at (${row}, ${col}) is not in a\\x20\n          numeric format. Cannot do the calculation.`);\n      }\n    }\n\n    return cellValue;\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.endpoints.initEndpoints();\n  }\n\n  /**\n   * Called after the settings were updated. There is a need to refresh cell metas after the settings update with\n   * the `columns` property as the Core resets the cell metas to their initial state.\n   *\n   * @param {object} settings The settings object.\n   */\n  #onAfterUpdateSettings(settings) {\n    if (settings.columns !== undefined) {\n      this.endpoints.refreshCellMetas();\n    }\n  }\n\n  /**\n   * `afterChange` hook callback.\n   *\n   * @param {Array} changes 2D array containing information about each of the edited cells.\n   * @param {string} source The string that identifies source of changes.\n   */\n  #onAfterChange(changes, source) {\n    if (changes && source !== 'ColumnSummary.reset' && source !== 'ColumnSummary.set' && source !== 'loadData') {\n      this.endpoints.refreshChangedEndpoints(changes);\n    }\n  }\n\n  /**\n   * `beforeRowMove` hook callback.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md).\n   */\n  #onAfterRowMove(rows, finalIndex) {\n    this.endpoints.resetSetupBeforeStructureAlteration('move_row', rows[0], rows.length, rows, this.pluginName);\n    this.endpoints.resetSetupAfterStructureAlteration('move_row', finalIndex, rows.length, rows, this.pluginName);\n  }\n}\n","import { arrayEach } from '../../helpers/array';\nimport { warn } from '../../helpers/console';\n\n/**\n * Class used to make all endpoint-related operations.\n *\n * @private\n * @class Endpoints\n */\nclass Endpoints {\n  /**\n   * The main plugin instance.\n   */\n  plugin;\n  /**\n   * Handsontable instance.\n   *\n   * @type {object}\n   */\n  hot;\n  /**\n   * Array of declared plugin endpoints (calculation destination points).\n   *\n   * @type {Array}\n   * @default {Array} Empty array.\n   */\n  endpoints = [];\n  /**\n   * The plugin settings, taken from Handsontable configuration.\n   *\n   * @type {object|Function}\n   * @default null\n   */\n  settings;\n  /**\n   * Settings type. Can be either 'array' or 'function'.\n   *\n   * @type {string}\n   * @default {'array'}\n   */\n  settingsType = 'array';\n  /**\n   * The current endpoint (calculation destination point) in question.\n   *\n   * @type {object}\n   * @default null\n   */\n  currentEndpoint = null;\n  /**\n   * Array containing a list of changes to be applied.\n   *\n   * @private\n   * @type {Array}\n   * @default {[]}\n   */\n  cellsToSetCache = [];\n\n  constructor(plugin, settings) {\n    this.plugin = plugin;\n    this.hot = this.plugin.hot;\n    this.settings = settings;\n  }\n\n  /**\n   * Initialize the endpoints provided in the settings.\n   */\n  initEndpoints() {\n    this.endpoints = this.parseSettings();\n    this.refreshAllEndpoints();\n  }\n\n  /**\n   * Get a single endpoint object.\n   *\n   * @param {number} index Index of the endpoint.\n   * @returns {object}\n   */\n  getEndpoint(index) {\n    if (this.settingsType === 'function') {\n      return this.fillMissingEndpointData(this.settings)[index];\n    }\n\n    return this.endpoints[index];\n  }\n\n  /**\n   * Get an array with all the endpoints.\n   *\n   * @returns {Array}\n   */\n  getAllEndpoints() {\n    if (this.settingsType === 'function') {\n      return this.fillMissingEndpointData(this.settings);\n    }\n\n    return this.endpoints;\n  }\n\n  /**\n   * Used to fill the blanks in the endpoint data provided by a settings function.\n   *\n   * @private\n   * @param {Function} func Function provided in the HOT settings.\n   * @returns {Array} An array of endpoints.\n   */\n  fillMissingEndpointData(func) {\n    return this.parseSettings(func.call(this));\n  }\n\n  /**\n   * Parse plugin's settings.\n   *\n   * @param {Array} settings The settings array.\n   * @returns {object[]}\n   */\n  parseSettings(settings) {\n    const endpointsArray = [];\n    let settingsArray = settings;\n\n    if (!settingsArray && typeof this.settings === 'function') {\n      this.settingsType = 'function';\n\n      return;\n    }\n\n    if (!settingsArray) {\n      settingsArray = this.settings;\n    }\n\n    arrayEach(settingsArray, (val) => {\n      const newEndpoint = {};\n\n      this.assignSetting(val, newEndpoint, 'ranges', [[0, this.hot.countRows() - 1]]);\n      this.assignSetting(val, newEndpoint, 'reversedRowCoords', false);\n      this.assignSetting(val, newEndpoint, 'destinationRow', new Error(`\n        You must provide a destination row for the Column Summary plugin in order to work properly!\n      `));\n      this.assignSetting(val, newEndpoint, 'destinationColumn', new Error(`\n        You must provide a destination column for the Column Summary plugin in order to work properly!\n      `));\n      this.assignSetting(val, newEndpoint, 'sourceColumn', val.destinationColumn);\n      this.assignSetting(val, newEndpoint, 'type', 'sum');\n      this.assignSetting(val, newEndpoint, 'forceNumeric', false);\n      this.assignSetting(val, newEndpoint, 'suppressDataTypeErrors', true);\n      this.assignSetting(val, newEndpoint, 'customFunction', null);\n      this.assignSetting(val, newEndpoint, 'readOnly', true);\n      this.assignSetting(val, newEndpoint, 'roundFloat', false);\n\n      endpointsArray.push(newEndpoint);\n    });\n\n    return endpointsArray;\n  }\n\n  /**\n   * Setter for the internal setting objects.\n   *\n   * @param {object} settings Object with the settings.\n   * @param {object} endpoint Contains information about the endpoint for the the calculation.\n   * @param {string} name Settings name.\n   * @param {object} defaultValue Default value for the settings.\n   */\n  assignSetting(settings, endpoint, name, defaultValue) {\n    if (name === 'ranges' && settings[name] === undefined) {\n      endpoint[name] = defaultValue;\n\n      return;\n    } else if (name === 'ranges' && settings[name].length === 0) {\n      return;\n    }\n\n    if (settings[name] === undefined) {\n      if (defaultValue instanceof Error) {\n        throw defaultValue;\n\n      }\n\n      endpoint[name] = defaultValue;\n\n    } else {\n      /* eslint-disable no-lonely-if */\n      if (name === 'destinationRow' && endpoint.reversedRowCoords) {\n        endpoint[name] = this.hot.countRows() - settings[name] - 1;\n\n      } else {\n        endpoint[name] = settings[name];\n      }\n    }\n  }\n\n  /**\n   * Resets the endpoint setup before the structure alteration (like inserting or removing rows/columns). Used for settings provided as a function.\n   *\n   * @private\n   * @param {string} action Type of the action performed.\n   * @param {number} index Row/column index.\n   * @param {number} number Number of rows/columns added/removed.\n   */\n  resetSetupBeforeStructureAlteration(action, index, number) {\n    if (this.settingsType !== 'function') {\n      return;\n    }\n\n    const type = action.indexOf('row') > -1 ? 'row' : 'col';\n    const endpoints = this.getAllEndpoints();\n\n    arrayEach(endpoints, (val) => {\n      if (type === 'row' && val.destinationRow >= index) {\n        if (action === 'insert_row') {\n          val.alterRowOffset = number;\n        } else if (action === 'remove_row') {\n          val.alterRowOffset = (-1) * number;\n        }\n      }\n\n      if (type === 'col' && val.destinationColumn >= index) {\n        if (action === 'insert_col') {\n          val.alterColumnOffset = number;\n        } else if (action === 'remove_col') {\n          val.alterColumnOffset = (-1) * number;\n        }\n      }\n    });\n\n    this.resetAllEndpoints(endpoints, false);\n  }\n\n  /**\n   * AfterCreateRow/afterCreateRow/afterRemoveRow/afterRemoveCol hook callback. Reset and reenables the summary functionality\n   * after changing the table structure.\n   *\n   * @private\n   * @param {string} action Type of the action performed.\n   * @param {number} index Row/column index.\n   * @param {number} number Number of rows/columns added/removed.\n   * @param {Array} [logicRows] Array of the logical indexes.\n   * @param {string} [source] Source of change.\n   * @param {boolean} [forceRefresh] `true` of the endpoints should refresh after completing the function.\n   */\n  resetSetupAfterStructureAlteration(action, index, number, logicRows, source, forceRefresh = true) {\n    if (this.settingsType === 'function') {\n\n      // We need to run it on a next avaiable hook, because the TrimRows' `afterCreateRow` hook triggers after this one,\n      // and it needs to be run to properly calculate the endpoint value.\n      const beforeViewRenderCallback = () => {\n        this.hot.removeHook('beforeViewRender', beforeViewRenderCallback);\n\n        return this.refreshAllEndpoints();\n      };\n\n      this.hot.addHookOnce('beforeViewRender', beforeViewRenderCallback);\n\n      return;\n    }\n\n    const type = action.indexOf('row') > -1 ? 'row' : 'col';\n    const multiplier = action.indexOf('remove') > -1 ? -1 : 1;\n    const endpoints = this.getAllEndpoints();\n    const rowMoving = action.indexOf('move_row') === 0;\n    const placeOfAlteration = index;\n\n    arrayEach(endpoints, (val) => {\n      if (type === 'row' && val.destinationRow >= placeOfAlteration) {\n        val.alterRowOffset = multiplier * number;\n      }\n\n      if (type === 'col' && val.destinationColumn >= placeOfAlteration) {\n        val.alterColumnOffset = multiplier * number;\n      }\n    });\n\n    this.resetAllEndpoints(endpoints, !rowMoving);\n\n    if (rowMoving) {\n      arrayEach(endpoints, (endpoint) => {\n        this.extendEndpointRanges(endpoint, placeOfAlteration, logicRows[0], logicRows.length);\n        this.recreatePhysicalRanges(endpoint);\n        this.clearOffsetInformation(endpoint);\n      });\n\n    } else {\n      arrayEach(endpoints, (endpoint) => {\n        this.shiftEndpointCoordinates(endpoint, placeOfAlteration);\n      });\n    }\n\n    if (forceRefresh) {\n      this.refreshAllEndpoints();\n    }\n  }\n\n  /**\n   * Clear the offset information from the endpoint object.\n   *\n   * @private\n   * @param {object} endpoint And endpoint object.\n   */\n  clearOffsetInformation(endpoint) {\n    endpoint.alterRowOffset = undefined;\n    endpoint.alterColumnOffset = undefined;\n  }\n\n  /**\n   * Extend the row ranges for the provided endpoint.\n   *\n   * @private\n   * @param {object} endpoint The endpoint object.\n   * @param {number} placeOfAlteration Index of the row where the alteration takes place.\n   * @param {number} previousPosition Previous endpoint result position.\n   * @param {number} offset Offset generated by the alteration.\n   */\n  extendEndpointRanges(endpoint, placeOfAlteration, previousPosition, offset) {\n    arrayEach(endpoint.ranges, (range) => {\n      // is a range, not a single row\n      if (range[1]) {\n\n        if (placeOfAlteration >= range[0] && placeOfAlteration <= range[1]) {\n          if (previousPosition > range[1]) {\n            range[1] += offset;\n          } else if (previousPosition < range[0]) {\n            range[0] -= offset;\n          }\n        } else if (previousPosition >= range[0] && previousPosition <= range[1]) {\n          range[1] -= offset;\n\n          if (placeOfAlteration <= range[0]) {\n            range[0] += 1;\n            range[1] += 1;\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Recreate the physical ranges for the provided endpoint. Used (for example) when a row gets moved and extends an existing range.\n   *\n   * @private\n   * @param {object} endpoint An endpoint object.\n   */\n  recreatePhysicalRanges(endpoint) {\n    const ranges = endpoint.ranges;\n    const newRanges = [];\n    const allIndexes = [];\n\n    arrayEach(ranges, (range) => {\n      const newRange = [];\n\n      if (range[1]) {\n        for (let i = range[0]; i <= range[1]; i++) {\n          newRange.push(this.hot.toPhysicalRow(i));\n        }\n      } else {\n        newRange.push(this.hot.toPhysicalRow(range[0]));\n      }\n\n      allIndexes.push(newRange);\n    });\n\n    arrayEach(allIndexes, (range) => {\n      let newRange = [];\n\n      arrayEach(range, (coord, index) => {\n        if (index === 0) {\n          newRange.push(coord);\n\n        } else if (range[index] !== range[index - 1] + 1) {\n          newRange.push(range[index - 1]);\n          newRanges.push(newRange);\n          newRange = [];\n          newRange.push(coord);\n        }\n\n        if (index === range.length - 1) {\n          newRange.push(coord);\n          newRanges.push(newRange);\n        }\n      });\n    });\n\n    endpoint.ranges = newRanges;\n  }\n\n  /**\n   * Shifts the endpoint coordinates by the defined offset.\n   *\n   * @private\n   * @param {object} endpoint Endpoint object.\n   * @param {number} offsetStartIndex Index of the performed change (if the change is located after the endpoint, nothing about the endpoint has to be changed.\n   */\n  shiftEndpointCoordinates(endpoint, offsetStartIndex) {\n    if (endpoint.alterRowOffset && endpoint.alterRowOffset !== 0) {\n      endpoint.destinationRow += endpoint.alterRowOffset || 0;\n\n      arrayEach(endpoint.ranges, (element) => {\n        arrayEach(element, (subElement, j) => {\n          if (subElement >= offsetStartIndex) {\n            element[j] += endpoint.alterRowOffset || 0;\n          }\n        });\n      });\n\n    } else if (endpoint.alterColumnOffset && endpoint.alterColumnOffset !== 0) {\n      endpoint.destinationColumn += endpoint.alterColumnOffset || 0;\n      endpoint.sourceColumn += endpoint.alterColumnOffset || 0;\n    }\n  }\n\n  /**\n   * Resets (removes) the endpoints from the table.\n   *\n   * @param {Array} [endpoints] Array containing the endpoints.\n   * @param {boolean} [useOffset=true] Use the cell offset value.\n   */\n  resetAllEndpoints(endpoints = this.getAllEndpoints(), useOffset = true) {\n    const anyEndpointOutOfRange = endpoints.some((endpoint) => {\n      const alterRowOffset = endpoint.alterRowOffset || 0;\n      const alterColOffset = endpoint.alterColumnOffset || 0;\n\n      if (endpoint.destinationRow + alterRowOffset >= this.hot.countRows() ||\n          endpoint.destinationColumn + alterColOffset >= this.hot.countCols()) {\n        return true;\n      }\n\n      return false;\n    });\n\n    if (anyEndpointOutOfRange) {\n      return;\n    }\n\n    this.cellsToSetCache = [];\n\n    arrayEach(endpoints, (endpoint) => {\n      this.resetEndpointValue(endpoint, useOffset);\n    });\n\n    this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n\n    this.cellsToSetCache = [];\n  }\n\n  /**\n   * Calculate and refresh all defined endpoints.\n   */\n  refreshAllEndpoints() {\n    this.cellsToSetCache = [];\n\n    arrayEach(this.getAllEndpoints(), (value) => {\n      this.currentEndpoint = value;\n      this.plugin.calculate(value);\n      this.setEndpointValue(value, 'init');\n    });\n    this.currentEndpoint = null;\n\n    this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n\n    this.cellsToSetCache = [];\n  }\n\n  /**\n   * Calculate and refresh endpoints only in the changed columns.\n   *\n   * @param {Array} changes Array of changes from the `afterChange` hook.\n   */\n  refreshChangedEndpoints(changes) {\n    const needToRefresh = [];\n\n    this.cellsToSetCache = [];\n\n    arrayEach(changes, (value, key, changesObj) => {\n      // if nothing changed, dont update anything\n      if (`${value[2] || ''}` === `${value[3]}`) {\n        return;\n      }\n\n      arrayEach(this.getAllEndpoints(), (endpoint, j) => {\n        if (this.hot.propToCol(changesObj[key][1]) === endpoint.sourceColumn && needToRefresh.indexOf(j) === -1) {\n          needToRefresh.push(j);\n        }\n      });\n    });\n\n    arrayEach(needToRefresh, (value) => {\n      this.refreshEndpoint(this.getEndpoint(value));\n    });\n\n    this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n    this.cellsToSetCache = [];\n  }\n\n  /**\n   * Refreshes the cell meta information for the all endpoints after the `updateSettings` method call which in some\n   * cases (call with `columns` option) can reset the cell metas to the initial state.\n   */\n  refreshCellMetas() {\n    this.endpoints.forEach((endpoint) => {\n      const destinationVisualRow = this.hot.toVisualRow(endpoint.destinationRow);\n\n      if (destinationVisualRow !== null) {\n        const cellMeta = this.hot.getCellMeta(\n          destinationVisualRow,\n          endpoint.destinationColumn\n        );\n\n        cellMeta.readOnly = endpoint.readOnly;\n        cellMeta.className = 'columnSummaryResult';\n      }\n    });\n  }\n\n  /**\n   * Calculate and refresh a single endpoint.\n   *\n   * @param {object} endpoint Contains the endpoint information.\n   */\n  refreshEndpoint(endpoint) {\n    this.currentEndpoint = endpoint;\n    this.plugin.calculate(endpoint);\n    this.setEndpointValue(endpoint);\n    this.currentEndpoint = null;\n  }\n\n  /**\n   * Reset the endpoint value.\n   *\n   * @param {object} endpoint Contains the endpoint information.\n   * @param {boolean} [useOffset=true] Use the cell offset value.\n   */\n  resetEndpointValue(endpoint, useOffset = true) {\n    const alterRowOffset = endpoint.alterRowOffset || 0;\n    const alterColOffset = endpoint.alterColumnOffset || 0;\n\n    this.cellsToSetCache.push([\n      this.hot.toVisualRow(endpoint.destinationRow + (useOffset ? alterRowOffset : 0)),\n      this.hot.toVisualColumn(endpoint.destinationColumn + (useOffset ? alterColOffset : 0)),\n      ''\n    ]);\n  }\n\n  /**\n   * Set the endpoint value.\n   *\n   * @param {object} endpoint Contains the endpoint information.\n   * @param {string} [source] Source of the call information.\n   * @param {boolean} [render=false] `true` if it needs to render the table afterwards.\n   */\n  setEndpointValue(endpoint, source, render = false) {\n    const visualEndpointRowIndex = this.hot.toVisualRow(endpoint.destinationRow);\n\n    if (endpoint.destinationRow >= this.hot.countRows() || endpoint.destinationColumn >= this.hot.countCols()) {\n      this.throwOutOfBoundsWarning();\n\n      return;\n    }\n\n    const destinationVisualRow = this.hot.toVisualRow(endpoint.destinationRow);\n\n    if (destinationVisualRow !== null) {\n      const cellMeta = this.hot.getCellMeta(\n        destinationVisualRow,\n        endpoint.destinationColumn\n      );\n\n      if (source === 'init' || cellMeta.readOnly !== endpoint.readOnly) {\n        cellMeta.readOnly = endpoint.readOnly;\n        cellMeta.className = 'columnSummaryResult';\n      }\n    }\n\n    if (\n      (\n        endpoint.roundFloat === true ||\n        Number.isInteger(endpoint.roundFloat)\n      ) &&\n      !isNaN(endpoint.result)\n    ) {\n      const roundFloatValue = endpoint.roundFloat;\n      let decimalPlacesCount = 0;\n\n      // `toFixed` method accepts only values between 0 and 100\n      if (Number.isInteger(roundFloatValue)) {\n        decimalPlacesCount = Math.min(Math.max(0, roundFloatValue), 100);\n      }\n\n      endpoint.result = endpoint.result.toFixed(decimalPlacesCount);\n    }\n\n    if (render) {\n      this.hot.setDataAtCell(visualEndpointRowIndex, endpoint.destinationColumn, endpoint.result, 'ColumnSummary.set');\n    } else {\n      this.cellsToSetCache.push([visualEndpointRowIndex, endpoint.destinationColumn, endpoint.result]);\n    }\n\n    endpoint.alterRowOffset = undefined;\n    endpoint.alterColumnOffset = undefined;\n  }\n\n  /**\n   * Throw an error for the calculation range being out of boundaries.\n   *\n   * @private\n   */\n  throwOutOfBoundsWarning() {\n    warn('One of the Column Summary plugins\\' destination points you provided is beyond the table boundaries!');\n  }\n}\n\nexport default Endpoints;\n","/**\n * Returns `true` if the value is one of the type: `null`, `undefined` or `NaN`.\n *\n * @param {*} value The value to check.\n * @returns {boolean}\n */\nexport function isNullishOrNaN(value) {\n  return value === null || value === undefined || isNaN(value);\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Comments,\n} from './comments';\n","import {\n  addClass,\n  closest,\n  isChildOf,\n  hasClass,\n  outerHeight\n} from '../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../helpers/dom/event';\nimport { deepClone, deepExtend, isObject } from '../../helpers/object';\nimport { BasePlugin } from '../base';\nimport CommentEditor from './commentEditor';\nimport DisplaySwitch from './displaySwitch';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport addEditCommentItem from './contextMenuItem/addEditComment';\nimport removeCommentItem from './contextMenuItem/removeComment';\nimport readOnlyCommentItem from './contextMenuItem/readOnlyComment';\n\nimport './comments.scss';\n\nexport const PLUGIN_KEY = 'comments';\nexport const PLUGIN_PRIORITY = 60;\nexport const META_COMMENT = 'comment';\nexport const META_COMMENT_VALUE = 'value';\nexport const META_STYLE = 'style';\nexport const META_READONLY = 'readOnly';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\nconst SHORTCUTS_CONTEXT_NAME = `plugin:${PLUGIN_KEY}`;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin Comments\n * @class Comments\n *\n * @description\n * This plugin allows setting and managing cell comments by either an option in the context menu or with the use of\n * the API.\n *\n * To enable the plugin, you'll need to set the comments property of the config object to `true`:\n * ```js\n * comments: true\n * ```\n *\n * or an object with extra predefined plugin config:\n *\n * ```js\n * comments: {\n *   displayDelay: 1000,\n *   readOnly: true,\n *   style: {\n *     width: 300,\n *     height: 100\n *   }\n * }\n * ```\n *\n * To add comments at the table initialization, define the `comment` property in the `cell` config array as in an example below.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   comments: true,\n *   cell: [\n *     {row: 1, col: 1, comment: {value: 'Foo'}},\n *     {row: 2, col: 2, comment: {value: 'Bar'}}\n *   ]\n * });\n *\n * // Access to the Comments plugin instance:\n * const commentsPlugin = hot.getPlugin('comments');\n *\n * // Manage comments programmatically:\n * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents');\n * commentsPlugin.showAtCell(1, 6);\n * commentsPlugin.removeCommentAtCell(1, 6);\n *\n * // You can also set range once and use proper methods:\n * commentsPlugin.setRange({from: {row: 1, col: 6}});\n * commentsPlugin.setComment('Comment contents');\n * commentsPlugin.show();\n * commentsPlugin.removeComment();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   comments={true}\n *   cell={[\n *     {row: 1, col: 1, comment: {value: 'Foo'}},\n *     {row: 2, col: 2, comment: {value: 'Bar'}}\n *   ]}\n * />\n *\n * // Access to the Comments plugin instance:\n * const hot = hotRef.current.hotInstance;\n * const commentsPlugin = hot.getPlugin('comments');\n *\n * // Manage comments programmatically:\n * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents');\n * commentsPlugin.showAtCell(1, 6);\n * commentsPlugin.removeCommentAtCell(1, 6);\n *\n * // You can also set range once and use proper methods:\n * commentsPlugin.setRange({from: {row: 1, col: 6}});\n * commentsPlugin.setComment('Comment contents');\n * commentsPlugin.show();\n * commentsPlugin.removeComment();\n * ```\n * :::\n */\nexport class Comments extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Current cell range, an object with `from` property, with `row` and `col` properties (e.q. `{from: {row: 1, col: 6}}`).\n   *\n   * @type {object}\n   */\n  range = {};\n  /**\n   * Instance of {@link CommentEditor}.\n   *\n   * @private\n   * @type {CommentEditor}\n   */\n  #editor = null;\n  /**\n   * Instance of {@link DisplaySwitch}.\n   *\n   * @private\n   * @type {DisplaySwitch}\n   */\n  #displaySwitch = null;\n  /**\n   * Prevents showing/hiding editor that reacts on the logic triggered by the \"mouseover\" events.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #preventEditorAutoSwitch = false;\n  /**\n   * Prevents hiding editor when the table viewport is scrolled and that scroll is triggered by the\n   * keyboard shortcut that insert or edits the comment.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #preventEditorHiding = false;\n  /**\n   * The flag that allows processing mousedown event correctly when comments editor is triggered.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #cellBelowCursor = null;\n  /**\n   * Holds the comment value before it's actually saved to the cell meta.\n   *\n   * @private\n   * @type {string}\n   */\n  #commentValueBeforeSave = '';\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link Comments#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    if (!this.#editor) {\n      this.#editor = new CommentEditor(this.hot.rootDocument, this.hot.isRtl());\n      this.#editor.addLocalHook('resize', (...args) => this.#onEditorResize(...args));\n    }\n\n    if (!this.#displaySwitch) {\n      this.#displaySwitch = new DisplaySwitch(this.getDisplayDelaySetting());\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.addToContextMenu(options));\n    this.addHook('afterRenderer',\n      (TD, row, col, prop, value, cellProperties) => this.#onAfterRenderer(TD, cellProperties));\n    this.addHook('afterScroll', () => this.#onAfterScroll());\n    this.addHook('afterBeginEditing', () => this.hide());\n    this.addHook('afterDocumentKeyDown', event => this.#onAfterDocumentKeyDown(event));\n\n    this.#displaySwitch.addLocalHook('hide', () => this.hide());\n    this.#displaySwitch.addLocalHook('show', (row, col) => this.showAtCell(row, col));\n\n    this.registerShortcuts();\n    this.registerListeners();\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *   - [`comments`](@/api/options.md#comments)\n   */\n  updatePlugin() {\n    this.#displaySwitch.updateDelay(this.getDisplayDelaySetting());\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const manager = this.hot.getShortcutManager();\n    const gridContext = manager.getContext('grid');\n    const pluginContext = manager.addContext(SHORTCUTS_CONTEXT_NAME);\n\n    gridContext.addShortcut({\n      keys: [['Control', 'Alt', 'M']],\n      callback: () => {\n        const range = this.hot.getSelectedRangeLast();\n\n        this.#preventEditorHiding = true;\n        this.hot.scrollToFocusedCell(() => {\n          this.setRange(range);\n          this.show();\n          this.focusEditor();\n          manager.setActiveContextName(SHORTCUTS_CONTEXT_NAME);\n\n          this.hot._registerTimeout(() => {\n            this.#preventEditorHiding = false;\n          });\n        });\n      },\n      stopPropagation: true,\n      runOnlyIf: () => this.hot.getSelectedRangeLast()?.highlight.isCell() && !this.#editor.isVisible(),\n      group: SHORTCUTS_GROUP,\n    });\n\n    pluginContext.addShortcut({\n      keys: [['Escape']],\n      callback: () => {\n        this.#editor.setValue(this.#commentValueBeforeSave);\n        this.hide();\n        manager.setActiveContextName('grid');\n      },\n      runOnlyIf: () => this.#editor.isVisible() && this.#editor.isFocused(),\n      group: SHORTCUTS_GROUP,\n    });\n\n    pluginContext.addShortcut({\n      keys: [['Control/Meta', 'Enter']],\n      callback: () => {\n        this.hide();\n        manager.setActiveContextName('grid');\n      },\n      runOnlyIf: () => this.#editor.isVisible() && this.#editor.isFocused(),\n      group: SHORTCUTS_GROUP,\n    });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Registers all necessary DOM listeners.\n   *\n   * @private\n   */\n  registerListeners() {\n    const { rootDocument } = this.hot;\n    const editorElement = this.getEditorInputElement();\n\n    this.eventManager.addEventListener(rootDocument, 'mouseover', event => this.#onMouseOver(event));\n    this.eventManager.addEventListener(rootDocument, 'mousedown', event => this.#onMouseDown(event));\n    this.eventManager.addEventListener(rootDocument, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(editorElement, 'focus', () => this.#onEditorFocus());\n    this.eventManager.addEventListener(editorElement, 'blur', () => this.#onEditorBlur());\n  }\n\n  /**\n   * Sets the current cell range to be able to use general methods like {@link Comments#setComment}, {@link Comments#removeComment}, {@link Comments#show}.\n   *\n   * @param {object} range Object with `from` property, each with `row` and `col` properties.\n   */\n  setRange(range) {\n    this.range = range;\n  }\n\n  /**\n   * Clears the currently selected cell.\n   */\n  clearRange() {\n    this.range = {};\n  }\n\n  /**\n   * Checks if the event target is a cell containing a comment.\n   *\n   * @private\n   * @param {Event} event DOM event.\n   * @returns {boolean}\n   */\n  targetIsCellWithComment(event) {\n    const closestCell = closest(event.target, 'TD', 'TBODY');\n\n    return !!(closestCell && hasClass(closestCell, 'htCommentCell') && closest(closestCell, [this.hot.rootElement]));\n  }\n\n  /**\n   * Checks if the event target is a comment textarea.\n   *\n   * @private\n   * @param {Event} event DOM event.\n   * @returns {boolean}\n   */\n  targetIsCommentTextArea(event) {\n    return this.getEditorInputElement() === event.target;\n  }\n\n  /**\n   * Sets a comment for a cell according to the previously set range (see {@link Comments#setRange}).\n   *\n   * @param {string} value Comment contents.\n   */\n  setComment(value) {\n    if (!this.range.from) {\n      throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n    }\n    const editorValue = this.#editor.getValue();\n    let comment = '';\n\n    if (value !== null && value !== undefined) {\n      comment = value;\n    } else if (editorValue !== null && editorValue !== undefined) {\n      comment = editorValue;\n    }\n\n    const row = this.range.from.row;\n    const col = this.range.from.col;\n\n    this.updateCommentMeta(row, col, { [META_COMMENT_VALUE]: comment });\n    this.hot.render();\n  }\n\n  /**\n   * Sets a comment for a specified cell.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} value Comment contents.\n   */\n  setCommentAtCell(row, column, value) {\n    this.setRange({\n      from: this.hot._createCellCoords(row, column)\n    });\n    this.setComment(value);\n  }\n\n  /**\n   * Removes a comment from a cell according to previously set range (see {@link Comments#setRange}).\n   *\n   * @param {boolean} [forceRender=true] If set to `true`, the table will be re-rendered at the end of the operation.\n   */\n  removeComment(forceRender = true) {\n    if (!this.range.from) {\n      throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n    }\n\n    this.hot.setCellMeta(this.range.from.row, this.range.from.col, META_COMMENT);\n\n    if (forceRender) {\n      this.hot.render();\n    }\n\n    this.hide();\n  }\n\n  /**\n   * Removes a comment from a specified cell.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {boolean} [forceRender=true] If `true`, the table will be re-rendered at the end of the operation.\n   */\n  removeCommentAtCell(row, column, forceRender = true) {\n    this.setRange({\n      from: this.hot._createCellCoords(row, column)\n    });\n    this.removeComment(forceRender);\n  }\n\n  /**\n   * Gets comment from a cell according to previously set range (see {@link Comments#setRange}).\n   *\n   * @returns {string|undefined} Returns a content of the comment.\n   */\n  getComment() {\n    const row = this.range.from.row;\n    const column = this.range.from.col;\n\n    return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n  }\n\n  /**\n   * Gets comment from a cell at the provided coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {string|undefined} Returns a content of the comment.\n   */\n  getCommentAtCell(row, column) {\n    return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n  }\n\n  /**\n   * Shows the comment editor accordingly to the previously set range (see {@link Comments#setRange}).\n   *\n   * @returns {boolean} Returns `true` if comment editor was shown.\n   */\n  show() {\n    if (!this.range.from) {\n      throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n    }\n\n    const { from: { row, col } } = this.range;\n\n    if (row < 0 || row > this.hot.countSourceRows() - 1 || col < 0 || col > this.hot.countSourceCols() - 1) {\n      return false;\n    }\n\n    const meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col);\n\n    this.#displaySwitch.cancelHiding();\n    this.#editor.setValue((meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null) ?? '');\n    this.#editor.show();\n    this.refreshEditor(true);\n\n    return true;\n  }\n\n  /**\n   * Shows comment editor according to cell coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {boolean} Returns `true` if comment editor was shown.\n   */\n  showAtCell(row, column) {\n    this.setRange({\n      from: this.hot._createCellCoords(row, column)\n    });\n\n    return this.show();\n  }\n\n  /**\n   * Hides the comment editor.\n   */\n  hide() {\n    this.#editor.hide();\n  }\n\n  /**\n   * Refreshes comment editor position and styling.\n   *\n   * @param {boolean} [force=false] If `true` then recalculation will be forced.\n   */\n  refreshEditor(force = false) {\n    if (!force && (!this.range.from || !this.#editor.isVisible())) {\n      return;\n    }\n\n    const { rowIndexMapper, columnIndexMapper } = this.hot;\n    const { row: visualRow, col: visualColumn } = this.range.from;\n\n    let renderableRow = rowIndexMapper.getRenderableFromVisualIndex(visualRow);\n    let renderableColumn = columnIndexMapper.getRenderableFromVisualIndex(visualColumn);\n    // Used when the requested row is hidden, and the editor needs to be positioned on the previous row's coords.\n    const targetingPreviousRow = renderableRow === null;\n\n    // Reset the editor position to (0, 0) so the opening direction calculation wouldn't be influenced by its\n    // previous position\n    this.#editor.setPosition(0, 0);\n\n    if (renderableRow === null) {\n      renderableRow = rowIndexMapper\n        .getRenderableFromVisualIndex(rowIndexMapper.getNearestNotHiddenIndex(visualRow, -1));\n    }\n\n    if (renderableColumn === null) {\n      renderableColumn = columnIndexMapper\n        .getRenderableFromVisualIndex(columnIndexMapper.getNearestNotHiddenIndex(visualColumn, -1));\n    }\n\n    const isBeforeRenderedRows = renderableRow === null;\n    const isBeforeRenderedColumns = renderableColumn === null;\n\n    renderableRow = renderableRow ?? 0;\n    renderableColumn = renderableColumn ?? 0;\n\n    const { rootWindow, view: { _wt: wt } } = this.hot;\n    const { wtTable } = wt;\n    // TODO: Probably using `hot.getCell` would be the best. However, case for showing comment editor for hidden cell\n    // potentially should be removed with that change (currently a test for it is passing).\n    const TD = wt.getCell({ row: renderableRow, col: renderableColumn }, true);\n    const commentStyle = this.getCommentMeta(visualRow, visualColumn, META_STYLE);\n\n    if (commentStyle) {\n      this.#editor.setSize(commentStyle.width, commentStyle.height);\n\n    } else {\n      this.#editor.resetSize();\n    }\n\n    const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getStretchedColumnWidth(renderableColumn);\n    const lastRowHeight = targetingPreviousRow && !isBeforeRenderedRows ? outerHeight(TD) : 0;\n\n    const {\n      left,\n      top,\n      width: cellWidth,\n      height: cellHeight,\n    } = TD.getBoundingClientRect();\n    const {\n      width: editorWidth,\n      height: editorHeight,\n    } = this.#editor.getSize();\n\n    const { innerWidth, innerHeight } = this.hot.rootWindow;\n    const documentElement = this.hot.rootDocument.documentElement;\n    let x = left + rootWindow.scrollX + lastColWidth;\n    let y = top + rootWindow.scrollY + lastRowHeight;\n\n    if (this.hot.isRtl()) {\n      x -= (editorWidth + lastColWidth);\n    }\n\n    // flip to the right or left the comments editor position when it goes out of browser viewport\n    if (this.hot.isLtr() && left + cellWidth + editorWidth > innerWidth) {\n      x = left + rootWindow.scrollX - editorWidth - 1;\n\n    } else if (this.hot.isRtl() && x < -(documentElement.scrollWidth - documentElement.clientWidth)) {\n      x = left + rootWindow.scrollX + lastColWidth + 1;\n    }\n\n    if (top + editorHeight > innerHeight) {\n      y -= (editorHeight - cellHeight + 1);\n    }\n\n    this.#editor.setPosition(x, y);\n    this.#editor.setReadOnlyState(this.getCommentMeta(visualRow, visualColumn, META_READONLY));\n    this.#editor.observeSize();\n  }\n\n  /**\n   * Focuses the comments editor element.\n   */\n  focusEditor() {\n    this.#editor.focus();\n  }\n\n  /**\n   * Sets or update the comment-related cell meta.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} metaObject Object defining all the comment-related meta information.\n   */\n  updateCommentMeta(row, column, metaObject) {\n    const oldComment = this.hot.getCellMeta(row, column)[META_COMMENT];\n    let newComment;\n\n    if (oldComment) {\n      newComment = deepClone(oldComment);\n      deepExtend(newComment, metaObject);\n    } else {\n      newComment = metaObject;\n    }\n\n    this.hot.setCellMeta(row, column, META_COMMENT, newComment);\n  }\n\n  /**\n   * Gets the comment related meta information.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} property Cell meta property.\n   * @returns {Mixed}\n   */\n  getCommentMeta(row, column, property) {\n    const cellMeta = this.hot.getCellMeta(row, column);\n\n    if (!cellMeta[META_COMMENT]) {\n      return undefined;\n    }\n\n    return cellMeta[META_COMMENT][property];\n  }\n\n  /**\n   * `mousedown` event callback.\n   *\n   * @param {MouseEvent} event The `mousedown` event.\n   */\n  #onMouseDown(event) {\n    if (!this.hot.view || !this.hot.view._wt) {\n      return;\n    }\n\n    if (!this.#preventEditorAutoSwitch && !this.targetIsCommentTextArea(event)) {\n      const eventCell = closest(event.target, 'TD', 'TBODY');\n      let coordinates = null;\n\n      if (eventCell) {\n        coordinates = this.hot.getCoords(eventCell);\n      }\n\n      if (!eventCell || ((this.range.from && coordinates) &&\n          (this.range.from.row !== coordinates.row || this.range.from.col !== coordinates.col))) {\n        this.hide();\n      }\n    }\n  }\n\n  /**\n   * `mouseover` event callback.\n   *\n   * @param {MouseEvent} event The `mouseover` event.\n   */\n  #onMouseOver(event) {\n    const { rootDocument } = this.hot;\n\n    if (this.#preventEditorAutoSwitch || this.#editor.isFocused() || hasClass(event.target, 'wtBorder')\n        || this.#cellBelowCursor === event.target || !this.#editor) {\n      return;\n    }\n\n    this.#cellBelowCursor = rootDocument.elementFromPoint(event.clientX, event.clientY);\n\n    if (this.targetIsCellWithComment(event)) {\n      const range = this.hot._createCellRange(this.hot.getCoords(event.target));\n\n      this.#displaySwitch.show(range);\n\n    } else if (isChildOf(event.target, rootDocument) && !this.targetIsCommentTextArea(event)) {\n      this.#displaySwitch.hide();\n    }\n  }\n\n  /**\n   * `mouseup` event callback.\n   */\n  #onMouseUp() {\n    this.#preventEditorAutoSwitch = false;\n  }\n\n  /**\n   * The `afterRenderer` hook callback.\n   *\n   * @param {HTMLTableCellElement} TD The rendered `TD` element.\n   * @param {object} cellProperties The rendered cell's property object.\n   */\n  #onAfterRenderer(TD, cellProperties) {\n    if (cellProperties[META_COMMENT] && cellProperties[META_COMMENT][META_COMMENT_VALUE]) {\n      addClass(TD, cellProperties.commentedCellClassName);\n    }\n  }\n\n  /**\n   * Hook observer the \"blur\" event from the comments editor element. The hook clears the\n   * editor content and gives back the keyboard shortcuts control by switching to the \"grid\" context.\n   */\n  #onEditorBlur() {\n    this.#commentValueBeforeSave = '';\n    this.hot.getShortcutManager().setActiveContextName('grid');\n    this.setComment();\n  }\n\n  /**\n   * Hook observer the \"focus\" event from the comments editor element. The hook takes the control of\n   * the keyboard shortcuts by switching the context to plugins one.\n   */\n  #onEditorFocus() {\n    this.#commentValueBeforeSave = this.getComment();\n    this.hot.listen();\n    this.hot.getShortcutManager().setActiveContextName(SHORTCUTS_CONTEXT_NAME);\n  }\n\n  /**\n   * Saves the comments editor size to the cell meta.\n   *\n   * @param {number} width The new width of the editor.\n   * @param {number} height The new height of the editor.\n   */\n  #onEditorResize(width, height) {\n    this.updateCommentMeta(this.range.from.row, this.range.from.col, {\n      [META_STYLE]: { width, height }\n    });\n  }\n\n  /**\n   * Observes the pressed keys and if there is already opened the comment editor prevents open\n   * the table editor into the fast edit mode.\n   *\n   * @param {Event} event The keydown event.\n   */\n  #onAfterDocumentKeyDown(event) {\n    if (this.#editor.isVisible()) {\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Observes the changes in the scroll position if triggered it hides the comment editor.\n   */\n  #onAfterScroll() {\n    if (!this.#preventEditorHiding) {\n      this.hide();\n    }\n  }\n\n  /**\n   * Add Comments plugin options to the Context Menu.\n   *\n   * @private\n   * @param {object} options The menu options.\n   */\n  addToContextMenu(options) {\n    options.items.push(\n      { name: SEPARATOR },\n      addEditCommentItem(this),\n      removeCommentItem(this),\n      readOnlyCommentItem(this),\n    );\n  }\n\n  /**\n   * Get `displayDelay` setting of comment plugin.\n   *\n   * @private\n   * @returns {number|undefined}\n   */\n  getDisplayDelaySetting() {\n    const commentSetting = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (isObject(commentSetting)) {\n      return commentSetting.displayDelay;\n    }\n  }\n\n  /**\n   * Gets the editors input element.\n   *\n   * @private\n   * @returns {HTMLTextAreaElement}\n   */\n  getEditorInputElement() {\n    return this.#editor.getInputElement();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#editor?.destroy();\n    this.#displaySwitch?.destroy();\n\n    super.destroy();\n  }\n}\n","import { addClass, outerWidth, outerHeight } from '../../helpers/dom/element';\nimport { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\nimport { EditorResizeObserver } from './editorResizeObserver';\n\n/**\n * Comment editor for the Comments plugin.\n *\n * @private\n * @class CommentEditor\n */\nclass CommentEditor {\n  static get CLASS_EDITOR_CONTAINER() {\n    return 'htCommentsContainer';\n  }\n\n  static get CLASS_EDITOR() {\n    return 'htComments';\n  }\n\n  static get CLASS_INPUT() {\n    return 'htCommentTextArea';\n  }\n\n  static get CLASS_CELL() {\n    return 'htCommentCell';\n  }\n\n  /**\n   * @type {Document}\n   */\n  #rootDocument;\n  /**\n   * @type {boolean}\n   */\n  #isRtl = false;\n  /**\n   * @type {HTMLElement}\n   */\n  #container = null;\n  /**\n   * @type {HTMLElement}\n   */\n  #editor;\n  /**\n   * @type {CSSStyleDeclaration}\n   */\n  #editorStyle;\n  /**\n   * @type {boolean}\n   */\n  #hidden = true;\n  /**\n   * @type {EditorResizeObserver}\n   */\n  #resizeObserver = new EditorResizeObserver();\n\n  constructor(rootDocument, isRtl) {\n    this.#rootDocument = rootDocument;\n    this.#isRtl = isRtl;\n    this.#editor = this.createEditor();\n    this.#editorStyle = this.#editor.style;\n    this.#resizeObserver.setObservedElement(this.getInputElement());\n    this.#resizeObserver.addLocalHook('resize', (...args) => this.runLocalHooks('resize', ...args));\n\n    this.hide();\n  }\n\n  /**\n   * Set position of the comments editor according to the  provided x and y coordinates.\n   *\n   * @param {number} x X position (in pixels).\n   * @param {number} y Y position (in pixels).\n   */\n  setPosition(x, y) {\n    this.#editorStyle.left = `${x}px`;\n    this.#editorStyle.top = `${y}px`;\n  }\n\n  /**\n   * Set the editor size according to the provided arguments.\n   *\n   * @param {number} width Width in pixels.\n   * @param {number} height Height in pixels.\n   */\n  setSize(width, height) {\n    if (width && height) {\n      const input = this.getInputElement();\n\n      input.style.width = `${width}px`;\n      input.style.height = `${height}px`;\n    }\n  }\n\n  /**\n   * Returns the size of the comments editor.\n   *\n   * @returns {{ width: number, height: number }}\n   */\n  getSize() {\n    return {\n      width: outerWidth(this.getInputElement()),\n      height: outerHeight(this.getInputElement()),\n    };\n  }\n\n  /**\n   * Starts observing the editor size.\n   */\n  observeSize() {\n    this.#resizeObserver.observe();\n  }\n\n  /**\n   * Reset the editor size to its initial state.\n   */\n  resetSize() {\n    const input = this.getInputElement();\n\n    input.style.width = '';\n    input.style.height = '';\n  }\n\n  /**\n   * Set the read-only state for the comments editor.\n   *\n   * @param {boolean} state The new read only state.\n   */\n  setReadOnlyState(state) {\n    const input = this.getInputElement();\n\n    input.readOnly = state;\n  }\n\n  /**\n   * Show the comments editor.\n   */\n  show() {\n    this.#editorStyle.display = 'block';\n    this.#hidden = false;\n  }\n\n  /**\n   * Hide the comments editor.\n   */\n  hide() {\n    this.#resizeObserver.unobserve();\n\n    if (!this.#hidden) {\n      this.#editorStyle.display = 'none';\n    }\n\n    this.#hidden = true;\n  }\n\n  /**\n   * Checks if the editor is visible.\n   *\n   * @returns {boolean}\n   */\n  isVisible() {\n    return this.#editorStyle.display === 'block';\n  }\n\n  /**\n   * Set the comment value.\n   *\n   * @param {string} [value] The value to use.\n   */\n  setValue(value = '') {\n    const comment = value || '';\n\n    this.getInputElement().value = comment;\n  }\n\n  /**\n   * Get the comment value.\n   *\n   * @returns {string}\n   */\n  getValue() {\n    return this.getInputElement().value;\n  }\n\n  /**\n   * Checks if the comment input element is focused.\n   *\n   * @returns {boolean}\n   */\n  isFocused() {\n    return this.#rootDocument.activeElement === this.getInputElement();\n  }\n\n  /**\n   * Focus the comments input element.\n   */\n  focus() {\n    this.getInputElement().focus();\n  }\n\n  /**\n   * Create the `textarea` to be used as a comments editor.\n   *\n   * @returns {HTMLElement}\n   */\n  createEditor() {\n    const editor = this.#rootDocument.createElement('div');\n    const textarea = this.#rootDocument.createElement('textarea');\n\n    editor.style.display = 'none';\n\n    this.#container = this.#rootDocument.createElement('div');\n    this.#container.setAttribute('dir', this.#isRtl ? 'rtl' : 'ltr');\n\n    addClass(this.#container, CommentEditor.CLASS_EDITOR_CONTAINER);\n\n    this.#rootDocument.body.appendChild(this.#container);\n\n    addClass(editor, CommentEditor.CLASS_EDITOR);\n    addClass(textarea, CommentEditor.CLASS_INPUT);\n    textarea.setAttribute('data-hot-input', true);\n\n    editor.appendChild(textarea);\n    this.#container.appendChild(editor);\n\n    return editor;\n  }\n\n  /**\n   * Get the input element.\n   *\n   * @returns {HTMLElement}\n   */\n  getInputElement() {\n    return this.#editor.querySelector(`.${CommentEditor.CLASS_INPUT}`);\n  }\n\n  /**\n   * Destroy the comments editor.\n   */\n  destroy() {\n    const containerParentElement = this.#container ? this.#container.parentNode : null;\n\n    this.#editor.parentNode.removeChild(this.#editor);\n    this.#editor = null;\n    this.#editorStyle = null;\n    this.#resizeObserver.destroy();\n\n    if (containerParentElement) {\n      containerParentElement.removeChild(this.#container);\n    }\n  }\n}\n\nmixin(CommentEditor, localHooks);\n\nexport default CommentEditor;\n","import { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\n/**\n * Module that observes the editor size after it has been resized by the user.\n *\n * @private\n * @class EditorResizeObserver\n */\nexport class EditorResizeObserver {\n  /**\n   * The flag that indicates if the initial call should be ignored. It is used to prevent the initial call\n   * that happens after the observer is attached to the element.\n   *\n   * @type {boolean}\n   */\n  #ignoreInitialCall = true;\n  /**\n   * The element that is observed by the observer.\n   *\n   * @type {HTMLElement}\n   */\n  #observedElement = null;\n  /**\n   * The ResizeObserver instance.\n   *\n   * @type {ResizeObserver}\n   */\n  #observer = new ResizeObserver(entries => this.#onResize(entries));\n\n  /**\n   * Sets the observed element.\n   *\n   * @param {HTMLElement} element The element to observe.\n   */\n  setObservedElement(element) {\n    this.#observedElement = element;\n  }\n\n  /**\n   * Stops observing the element.\n   */\n  unobserve() {\n    this.#observer.unobserve(this.#observedElement);\n  }\n\n  /**\n   * Starts observing the element.\n   */\n  observe() {\n    this.#ignoreInitialCall = true;\n    this.#observer.observe(this.#observedElement);\n  }\n\n  /**\n   * Destroys the observer.\n   */\n  destroy() {\n    this.#observer.disconnect();\n  }\n\n  /**\n   * Listens for event from the ResizeObserver and forwards the through the local hooks.\n   *\n   * @param {*} entries The entries from the ResizeObserver.\n   */\n  #onResize(entries) {\n    if (this.#ignoreInitialCall || !Array.isArray(entries) || !entries.length) {\n      this.#ignoreInitialCall = false;\n\n      return;\n    }\n\n    entries.forEach(({ borderBoxSize }) => {\n      const { inlineSize, blockSize } = borderBoxSize[0];\n\n      this.runLocalHooks('resize', inlineSize, blockSize);\n    });\n  }\n}\n\nmixin(EditorResizeObserver, localHooks);\n","import { debounce } from '../../helpers/function';\nimport { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\nconst DEFAULT_DISPLAY_DELAY = 250;\nconst DEFAULT_HIDE_DELAY = 250;\n\n/**\n * Display switch for the Comments plugin. Manages the time of delayed displaying / hiding comments.\n *\n * @private\n * @class DisplaySwitch\n */\nclass DisplaySwitch {\n  /**\n   * Flag to determine if comment can be showed or hidden. State `true` mean that last performed action\n   * was an attempt to show comment element. State `false` mean that it was attempt to hide comment element.\n   *\n   * @type {boolean}\n   */\n  wasLastActionShow = true;\n  /**\n   * Show comment after predefined delay. It keeps reference to immutable `debounce` function.\n   *\n   * @type {Function}\n   */\n  showDebounced = null;\n  /**\n   * Reference to timer, run by `setTimeout`, which is hiding comment.\n   *\n   * @type {number}\n   */\n  hidingTimer = null;\n\n  constructor(displayDelay) {\n    this.updateDelay(displayDelay);\n  }\n\n  /**\n   * Responsible for hiding comment after proper delay.\n   */\n  hide() {\n    this.wasLastActionShow = false;\n\n    this.hidingTimer = setTimeout(() => {\n      if (this.wasLastActionShow === false) {\n        this.runLocalHooks('hide');\n      }\n    }, DEFAULT_HIDE_DELAY);\n  }\n\n  /**\n   * Responsible for showing comment after proper delay.\n   *\n   * @param {object} range Coordinates of selected cell.\n   */\n  show(range) {\n    this.wasLastActionShow = true;\n    this.showDebounced(range);\n  }\n\n  /**\n   * Cancel hiding comment.\n   */\n  cancelHiding() {\n    this.wasLastActionShow = true;\n\n    clearTimeout(this.hidingTimer);\n    this.hidingTimer = null;\n  }\n\n  /**\n   * Update the switch settings.\n   *\n   * @param {number} displayDelay Delay of showing the comments (in milliseconds).\n   */\n  updateDelay(displayDelay = DEFAULT_DISPLAY_DELAY) {\n    this.showDebounced = debounce((range) => {\n      if (this.wasLastActionShow) {\n        this.runLocalHooks('show', range.from.row, range.from.col);\n      }\n    }, displayDelay);\n  }\n\n  /**\n   * Destroy the switcher.\n   */\n  destroy() {\n    this.clearLocalHooks();\n  }\n}\n\nmixin(DisplaySwitch, localHooks);\n\nexport default DisplaySwitch;\n","import { objectEach } from '../../../helpers/object';\nimport alignmentItem, { KEY as ALIGNMENT } from './alignment';\nimport clearColumnItem, { KEY as CLEAR_COLUMN } from './clearColumn';\nimport columnLeftItem, { KEY as COLUMN_LEFT } from './columnLeft';\nimport columnRightItem, { KEY as COLUMN_RIGHT } from './columnRight';\nimport readOnlyItem, { KEY as READ_ONLY } from './readOnly';\nimport redoItem, { KEY as REDO } from './redo';\nimport removeColumnItem, { KEY as REMOVE_COLUMN } from './removeColumn';\nimport removeRowItem, { KEY as REMOVE_ROW } from './removeRow';\nimport rowAboveItem, { KEY as ROW_ABOVE } from './rowAbove';\nimport rowBelowItem, { KEY as ROW_BELOW } from './rowBelow';\nimport separatorItem, { KEY as SEPARATOR } from './separator';\nimport noItemsItem, { KEY as NO_ITEMS } from './noItems';\nimport undoItem, { KEY as UNDO } from './undo';\n\nexport { KEY as ALIGNMENT } from './alignment';\nexport { KEY as CLEAR_COLUMN } from './clearColumn';\nexport { KEY as COLUMN_LEFT } from './columnLeft';\nexport { KEY as COLUMN_RIGHT } from './columnRight';\nexport { KEY as READ_ONLY } from './readOnly';\nexport { KEY as REDO } from './redo';\nexport { KEY as REMOVE_COLUMN } from './removeColumn';\nexport { KEY as REMOVE_ROW } from './removeRow';\nexport { KEY as ROW_ABOVE } from './rowAbove';\nexport { KEY as ROW_BELOW } from './rowBelow';\nexport { KEY as SEPARATOR } from './separator';\nexport { KEY as NO_ITEMS } from './noItems';\nexport { KEY as UNDO } from './undo';\n\nexport const ITEMS = [\n  ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, CLEAR_COLUMN, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY,\n  ALIGNMENT, SEPARATOR, NO_ITEMS\n];\n\nconst _predefinedItems = {\n  [SEPARATOR]: separatorItem,\n  [NO_ITEMS]: noItemsItem,\n  [ROW_ABOVE]: rowAboveItem,\n  [ROW_BELOW]: rowBelowItem,\n  [COLUMN_LEFT]: columnLeftItem,\n  [COLUMN_RIGHT]: columnRightItem,\n  [CLEAR_COLUMN]: clearColumnItem,\n  [REMOVE_ROW]: removeRowItem,\n  [REMOVE_COLUMN]: removeColumnItem,\n  [UNDO]: undoItem,\n  [REDO]: redoItem,\n  [READ_ONLY]: readOnlyItem,\n  [ALIGNMENT]: alignmentItem,\n};\n\n/**\n * Gets new object with all predefined menu items.\n *\n * @returns {object}\n */\nexport function predefinedItems() {\n  const items = {};\n\n  objectEach(_predefinedItems, (itemFactory, key) => {\n    items[key] = itemFactory();\n  });\n\n  return items;\n}\n\n/**\n * Add new predefined menu item to the collection.\n *\n * @param {string} key Menu command id.\n * @param {object} item Object command descriptor.\n */\nexport function addItem(key, item) {\n  if (ITEMS.indexOf(key) === -1) {\n    _predefinedItems[key] = item;\n  }\n}\n","import {\n  align,\n  getAlignmentClasses,\n  markLabelAsSelected,\n  hasSelectionAClass\n} from '../utils';\nimport { KEY as SEPARATOR } from './separator';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'alignment';\n\n/**\n * @returns {object}\n */\nexport default function alignmentItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT);\n    },\n    disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());\n    },\n    submenu: {\n      items: [\n        {\n          key: `${KEY}:left`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htLeft');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT);\n\n            if (hasSelectionAClass(this, 'htLeft')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htLeft';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:center`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htCenter');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER);\n\n            if (hasSelectionAClass(this, 'htCenter')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htCenter';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:right`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htRight');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT);\n\n            if (hasSelectionAClass(this, 'htRight')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htRight';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:justify`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htJustify');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY);\n\n            if (hasSelectionAClass(this, 'htJustify')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htJustify';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          name: SEPARATOR\n        },\n        {\n          key: `${KEY}:top`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htTop');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP);\n\n            if (hasSelectionAClass(this, 'htTop')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'vertical';\n            const alignment = 'htTop';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:middle`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htMiddle');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE);\n\n            if (hasSelectionAClass(this, 'htMiddle')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'vertical';\n            const alignment = 'htMiddle';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:bottom`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htBottom');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM);\n\n            if (hasSelectionAClass(this, 'htBottom')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'vertical';\n            const alignment = 'htBottom';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        }\n      ]\n    }\n  };\n}\n","import { arrayEach } from '../../helpers/array';\n\n/**\n * @param {string} className The full element class name to process.\n * @param {string} alignment The alignment class name to compare with.\n * @returns {string}\n */\nexport function prepareVerticalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n\n  const replacedClassName = className\n    .replace('htTop', '')\n    .replace('htMiddle', '')\n    .replace('htBottom', '')\n    .replace('  ', '');\n\n  return `${replacedClassName} ${alignment}`;\n}\n\n/**\n * @param {string} className The full element class name to process.\n * @param {string} alignment The alignment class name to compare with.\n * @returns {string}\n */\nexport function prepareHorizontalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n  const replacedClassName = className\n    .replace('htLeft', '')\n    .replace('htCenter', '')\n    .replace('htRight', '')\n    .replace('htJustify', '')\n    .replace('  ', '');\n\n  return `${replacedClassName} ${alignment}`;\n}\n\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {Function} callback The callback function.\n * @returns {object}\n */\nexport function getAlignmentClasses(ranges, callback) {\n  const classes = {};\n\n  arrayEach(ranges, (range) => {\n    range.forAll((row, col) => {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        if (!classes[row]) {\n          classes[row] = [];\n        }\n\n        classes[row][col] = callback(row, col);\n      }\n    });\n  });\n\n  return classes;\n}\n\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {string} type The type of the alignment axis ('horizontal' or 'vertical').\n * @param {string} alignment CSS class name to add.\n * @param {Function} cellDescriptor The function which fetches the cell meta object based in passed coordinates.\n * @param {Function} propertySetter The function which contains logic for added/removed alignment.\n */\nexport function align(ranges, type, alignment, cellDescriptor, propertySetter) {\n  arrayEach(ranges, (range) => {\n    range.forAll((row, col) => {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter);\n      }\n    });\n  });\n}\n\n/**\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {string} type The type of the alignment axis ('horizontal' or 'vertical').\n * @param {string} alignment CSS class name to add.\n * @param {Function} cellDescriptor The function which fetches the cell meta object based in passed coordinates.\n * @param {Function} propertySetter The function which contains logic for added/removed alignment.\n */\nfunction applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter) {\n  const cellMeta = cellDescriptor(row, col);\n  let className = alignment;\n\n  if (cellMeta.className) {\n    if (type === 'vertical') {\n      className = prepareVerticalAlignClass(cellMeta.className, alignment);\n    } else {\n      className = prepareHorizontalAlignClass(cellMeta.className, alignment);\n    }\n  }\n\n  propertySetter(row, col, 'className', className);\n}\n\n/**\n * @param {string} label The label text.\n * @returns {string}\n */\nexport function markLabelAsSelected(label) {\n  // workaround for https://github.com/handsontable/handsontable/issues/1946\n  return `<span class=\"selected\">${String.fromCharCode(10003)}</span>${label}`;\n}\n\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {Function} comparator The comparator function.\n * @returns {boolean}\n */\nexport function checkSelectionConsistency(ranges, comparator) {\n  let result = false;\n\n  if (Array.isArray(ranges)) {\n    arrayEach(ranges, (range) => {\n      range.forAll((row, col) => {\n        // Selection consistency should only check within cell ranges. We skip header coordinates.\n        if (row >= 0 && col >= 0 && comparator(row, col)) {\n          result = true;\n\n          return false;\n        }\n      });\n\n      return result;\n    });\n  }\n\n  return result;\n}\n\n/**\n * Returns document offset based on the passed element. If the document objects between element and the\n * base document are not the same the offset as top and left properties will be returned.\n *\n * @param {Element} elementToCheck The element to compare with Document object.\n * @param {Document} baseDocument The base Document object.\n * @returns {{ top: number, left: number }}\n */\nexport function getDocumentOffsetByElement(elementToCheck, baseDocument) {\n  const offset = { top: 0, left: 0 };\n\n  if (baseDocument !== elementToCheck.ownerDocument) {\n    const { frameElement } = baseDocument.defaultView;\n    const { top, left } = frameElement.getBoundingClientRect();\n\n    offset.top = top;\n    offset.left = left;\n  }\n\n  return offset;\n}\n\n/**\n * Prepares comparator function consumable by checkSelectionConsistency\n * Comparator function checks if the cell has the provided class name.\n *\n * @param  {string} htClassName The class name to check.\n * @returns {Function} Returns the comparator function.\n * Use with .bind, .call or .apply to pass the Handsontable instance.\n */\nexport function getAlignmentComparatorByClass(htClassName) {\n  return function(row, col) {\n    const className = this.getCellMeta(row, col).className;\n\n    return (className && className.indexOf(htClassName) !== -1);\n  };\n}\n\n/**\n * @param {object} hot Handsontable instance.\n * @param {string} htClassName The class name to check.\n * @returns {boolean} Returns true if at least one cell has the provided class name.\n */\nexport function hasSelectionAClass(hot, htClassName) {\n  return checkSelectionConsistency(\n    hot.getSelectedRange(),\n    getAlignmentComparatorByClass(htClassName).bind(hot)\n  );\n}\n","export const KEY = '---------';\n\n/**\n * @returns {object}\n */\nexport default function separatorItem() {\n  return {\n    name: KEY\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'clear_column';\n\n/**\n * @returns {object}\n */\nexport default function clearColumnItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CLEAR_COLUMN);\n    },\n    callback(key, selection) {\n      const startColumn = selection[0].start.col;\n      const endColumn = selection[0].end.col;\n\n      if (this.countRows()) {\n        this.populateFromArray(0, startColumn, [[null]],\n          Math.max(selection[0].start.row, selection[0].end.row), endColumn, 'ContextMenu.clearColumn');\n      }\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      return !this.selection.isSelectedByColumnHeader();\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'col_left';\n\n/**\n * @returns {object}\n */\nexport default function columnLeftItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_LEFT);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getTopLeftCorner();\n      const alterAction = this.isRtl() ? 'insert_col_end' : 'insert_col_start';\n\n      this.alter(alterAction, latestSelection.col, 1, 'ContextMenu.columnLeft');\n    },\n    disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        const totalColumns = this.countCols();\n\n        // Enable \"Insert column left\" only when there is at least one column.\n        return totalColumns === 0;\n      }\n\n      return this.selection.isSelectedByRowHeader() ||\n        this.countCols() >= this.getSettings().maxCols;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'col_right';\n\n/**\n * @returns {object}\n */\nexport default function columnRightItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_RIGHT);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getTopRightCorner();\n      const alterAction = this.isRtl() ? 'insert_col_start' : 'insert_col_end';\n\n      this.alter(alterAction, latestSelection.col, 1, 'ContextMenu.columnRight');\n    },\n    disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Insert column right\" always when the menu is triggered by corner click.\n        return false;\n      }\n\n      return this.selection.isSelectedByRowHeader() ||\n        this.countCols() >= this.getSettings().maxCols;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}\n","import { checkSelectionConsistency, markLabelAsSelected } from '../utils';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'make_read_only';\n\n/**\n * @returns {object}\n */\nexport default function readOnlyItem() {\n  return {\n    key: KEY,\n    checkable: true,\n    ariaChecked() {\n      const atLeastOneReadOnly = checkSelectionConsistency(\n        this.getSelectedRange(),\n        (row, col) => this.getCellMeta(row, col).readOnly\n      );\n\n      return atLeastOneReadOnly;\n    },\n\n    ariaLabel() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY);\n    },\n\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY);\n      const atLeastOneReadOnly = checkSelectionConsistency(\n        this.getSelectedRange(),\n        (row, col) => this.getCellMeta(row, col).readOnly\n      );\n\n      if (atLeastOneReadOnly) {\n        label = markLabelAsSelected(label);\n      }\n\n      return label;\n    },\n    callback() {\n      const ranges = this.getSelectedRange();\n      const atLeastOneReadOnly = checkSelectionConsistency(\n        ranges,\n        (row, col) => this.getCellMeta(row, col).readOnly\n      );\n\n      arrayEach(ranges, (range) => {\n        range.forAll((row, col) => {\n          if (row >= 0 && col >= 0) {\n            this.setCellMeta(row, col, 'readOnly', !atLeastOneReadOnly);\n          }\n        });\n      });\n\n      this.render();\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        return true;\n      }\n\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      if (!this.getSelectedRange() || this.getSelectedRange().length === 0) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'redo';\n\n/**\n * @returns {object}\n */\nexport default function redoItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REDO);\n    },\n    callback() {\n      this.redo();\n    },\n    hidden() {\n      const undoRedo = this.getPlugin('undoRedo');\n\n      return !undoRedo || !undoRedo.isEnabled();\n    },\n    disabled() {\n      return !this.getPlugin('undoRedo').isRedoAvailable();\n    }\n  };\n}\n","import { transformSelectionToColumnDistance } from '../../../selection/utils';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'remove_col';\n\n/**\n * @returns {object}\n */\nexport default function removeColumnItem() {\n  return {\n    key: KEY,\n    name() {\n      const selection = this.getSelected();\n      let pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          const [, fromColumn, , toColumn] = selection[0];\n\n          if (fromColumn - toColumn !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COLUMN, pluralForm);\n    },\n    callback() {\n      this.alter('remove_col', transformSelectionToColumnDistance(this), null, 'ContextMenu.removeColumn');\n    },\n    disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      const totalColumns = this.countCols();\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Remove column\" only when there is at least one column.\n        return totalColumns === 0;\n      }\n\n      return this.selection.isSelectedByRowHeader() || totalColumns === 0;\n    },\n    hidden() {\n      return !this.getSettings().allowRemoveColumn;\n    }\n  };\n}\n","import { transformSelectionToRowDistance } from '../../../selection/utils';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'remove_row';\n\n/**\n * @returns {object}\n */\nexport default function removeRowItem() {\n  return {\n    key: KEY,\n    name() {\n      const selection = this.getSelected();\n      let pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          const [fromRow, , toRow] = selection[0];\n\n          if (fromRow - toRow !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_ROW, pluralForm);\n    },\n    callback() {\n      // TODO: Please keep in mind that below `1` may be improper. The table's way of work, before change `f1747b3912ea3b21fe423fd102ca94c87db81379` was restored.\n      // There is still problem when removing more than one row.\n      this.alter('remove_row', transformSelectionToRowDistance(this), 1, 'ContextMenu.removeRow');\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.row < 0) {\n        return true;\n      }\n\n      const totalRows = this.countRows();\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Remove row\" only when there is at least one row.\n        return totalRows === 0;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || totalRows === 0;\n    },\n    hidden() {\n      return !this.getSettings().allowRemoveRow;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'row_above';\n\n/**\n * @returns {object}\n */\nexport default function rowAboveItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_ABOVE);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getTopLeftCorner();\n\n      this.alter('insert_row_above', latestSelection.row, 1, 'ContextMenu.rowAbove');\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.row < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        const totalRows = this.countRows();\n\n        // Enable \"Insert row above\" only when there is at least one row.\n        return totalRows === 0;\n      }\n\n      return this.selection.isSelectedByColumnHeader() ||\n        this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'row_below';\n\n/**\n * @returns {object}\n */\nexport default function rowBelowItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_BELOW);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getBottomRightCorner();\n\n      this.alter('insert_row_below', latestSelection.row, 1, 'ContextMenu.rowBelow');\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.row < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Insert row below\" always when the menu is triggered by corner click.\n        return false;\n      }\n\n      return this.selection.isSelectedByColumnHeader() ||\n        this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}\n","import { CONTEXTMENU_ITEMS_NO_ITEMS } from '../../../i18n/constants';\n\nexport const KEY = 'no_items';\n\n/**\n * @returns {object}\n */\nexport default function noItemsItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_NO_ITEMS);\n    },\n    disabled: true,\n    isCommand: false,\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'undo';\n\n/**\n * @returns {object}\n */\nexport default function undoItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNDO);\n    },\n    callback() {\n      this.undo();\n    },\n    hidden() {\n      const undoRedo = this.getPlugin('undoRedo');\n\n      return !undoRedo || !undoRedo.isEnabled();\n    },\n    disabled() {\n      return !this.getPlugin('undoRedo').isUndoAvailable();\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {Comments} plugin The Comments plugin instance.\n * @returns {object}\n */\nexport default function addEditCommentItem(plugin) {\n  return {\n    key: 'commentsAddEdit',\n    name() {\n      const highlight = this.getSelectedRangeLast()?.highlight;\n\n      if (highlight?.isCell() && plugin.getCommentAtCell(highlight.row, highlight.col)) {\n        return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);\n    },\n    callback() {\n      const range = this.getSelectedRangeLast();\n\n      plugin.setRange(range);\n      plugin.show();\n      plugin.focusEditor();\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (\n        !range ||\n        range.highlight.isHeader() ||\n        this.selection.isEntireRowSelected() && this.selection.isEntireColumnSelected() ||\n        this.countRenderedRows() === 0 || this.countRenderedCols() === 0\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {Comments} plugin The Comments plugin instance.\n * @returns {object}\n */\nexport default function removeCommentItem(plugin) {\n  return {\n    key: 'commentsRemove',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);\n    },\n    callback() {\n      const range = this.getSelectedRangeLast();\n\n      range.forAll((row, column) => {\n        if (row >= 0 && column >= 0) {\n          plugin.removeCommentAtCell(row, column, false);\n        }\n      });\n\n      this.render();\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (\n        !range ||\n        range.highlight.isHeader() ||\n        this.selection.isEntireRowSelected() && this.selection.isEntireColumnSelected() ||\n        this.countRenderedRows() === 0 || this.countRenderedCols() === 0\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionConsistency, markLabelAsSelected } from '../../contextMenu/utils';\nimport { META_READONLY } from '../comments';\n\n/**\n * @param {Comments} plugin The Comments plugin instance.\n * @returns {object}\n */\nexport default function readOnlyCommentItem(plugin) {\n  return {\n    key: 'commentsReadOnly',\n    name() {\n      const label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);\n      const areReadOnly = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n        return plugin.getCommentMeta(row, col, META_READONLY);\n      });\n\n      return areReadOnly ? markLabelAsSelected(label) : label;\n    },\n    callback() {\n      const range = this.getSelectedRangeLast();\n\n      range.forAll((row, column) => {\n        if (row >= 0 && column >= 0) {\n          const currentState = !!plugin.getCommentMeta(row, column, META_READONLY);\n\n          plugin.updateCommentMeta(row, column, {\n            [META_READONLY]: !currentState\n          });\n        }\n      });\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (\n        !range ||\n        range.highlight.isHeader() ||\n        !plugin.getCommentAtCell(range.highlight.row, range.highlight.col) ||\n        this.selection.isEntireRowSelected() && this.selection.isEntireColumnSelected() ||\n        this.countRenderedRows() === 0 || this.countRenderedCols() === 0\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ContextMenu,\n} from './contextMenu';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { arrayEach } from '../../helpers/array';\nimport { objectEach } from '../../helpers/object';\nimport { CommandExecutor } from './commandExecutor';\nimport { ItemsFactory } from './itemsFactory';\nimport {\n  Menu,\n} from './menu';\nimport { getDocumentOffsetByElement } from './utils';\nimport { hasClass } from '../../helpers/dom/element';\nimport {\n  ROW_ABOVE,\n  ROW_BELOW,\n  COLUMN_LEFT,\n  COLUMN_RIGHT,\n  REMOVE_ROW,\n  REMOVE_COLUMN,\n  UNDO,\n  REDO,\n  READ_ONLY,\n  ALIGNMENT,\n  SEPARATOR,\n} from './predefinedItems';\n\nimport './contextMenu.scss';\n\nexport const PLUGIN_KEY = 'contextMenu';\nexport const PLUGIN_PRIORITY = 70;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nHooks.getSingleton().register('afterContextMenuDefaultOptions');\nHooks.getSingleton().register('beforeContextMenuShow');\nHooks.getSingleton().register('afterContextMenuShow');\nHooks.getSingleton().register('afterContextMenuHide');\nHooks.getSingleton().register('afterContextMenuExecute');\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @class ContextMenu\n * @description\n * This plugin creates the Handsontable Context Menu. It allows to create a new row or column at any place in the\n * grid among [other features](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely)\n * * `{ uiContainer: containerDomElement }` (to declare a container for all of the Context Menu's dom elements to be placed in).\n * * An array of [the available strings](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options)\n *\n * See [the context menu demo](@/guides/accessories-and-menus/context-menu/context-menu.md) for examples.\n *\n * @example\n * ```js\n * // as a boolean\n * contextMenu: true\n * // as a array\n * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo']\n * ```\n *\n * @plugin ContextMenu\n */\nexport class ContextMenu extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:AutoColumnSize',\n    ];\n  }\n\n  /**\n   * Context menu default items order when `contextMenu` options is set as `true`.\n   *\n   * @returns {string[]}\n   */\n  static get DEFAULT_ITEMS() {\n    return [\n      ROW_ABOVE, ROW_BELOW,\n      SEPARATOR,\n      COLUMN_LEFT, COLUMN_RIGHT,\n      SEPARATOR,\n      REMOVE_ROW, REMOVE_COLUMN,\n      SEPARATOR,\n      UNDO, REDO,\n      SEPARATOR,\n      READ_ONLY,\n      SEPARATOR,\n      ALIGNMENT,\n    ];\n  }\n\n  /**\n   * Instance of {@link CommandExecutor}.\n   *\n   * @private\n   * @type {CommandExecutor}\n   */\n  commandExecutor = new CommandExecutor(this.hot);\n  /**\n   * Instance of {@link ItemsFactory}.\n   *\n   * @private\n   * @type {ItemsFactory}\n   */\n  itemsFactory = null;\n  /**\n   * Instance of {@link Menu}.\n   *\n   * @private\n   * @type {Menu}\n   */\n  menu = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ContextMenu#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (typeof settings.callback === 'function') {\n      this.commandExecutor.setCommonCallback(settings.callback);\n    }\n\n    this.menu = new Menu(this.hot, {\n      className: 'htContextMenu',\n      keepInViewport: true,\n      container: settings.uiContainer || this.hot.rootDocument.body,\n    });\n\n    this.menu.addLocalHook('beforeOpen', () => this.#onMenuBeforeOpen());\n    this.menu.addLocalHook('afterOpen', () => this.#onMenuAfterOpen());\n    this.menu.addLocalHook('afterClose', () => this.#onMenuAfterClose());\n    this.menu.addLocalHook('executeCommand', (...params) => this.executeCommand.call(this, ...params));\n\n    this.addHook('afterOnCellContextMenu', event => this.#onAfterOnCellContextMenu(event));\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`contextMenu`](@/api/options.md#contextmenu)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n      this.menu = null;\n    }\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Control/Meta', 'Shift', 'Backslash'], ['Shift', 'F10']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n\n          this.hot.scrollToFocusedCell();\n\n          const rect = this.hot.getCell(highlight.row, highlight.col, true).getBoundingClientRect();\n          const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n\n          this.open({\n            left: rect.left + offset.left,\n            top: rect.top + offset.top - 1 + rect.height,\n          }, {\n            left: rect.width,\n            above: -rect.height,\n          });\n          // Make sure the first item is selected (role=menuitem). Otherwise, screen readers\n          // will block the Esc key for the whole menu.\n          this.menu.getNavigator().toFirstItem();\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.selection.isCellVisible(highlight) && !this.menu.isOpened();\n        },\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Opens menu and re-position it based on the passed coordinates.\n   *\n   * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties\n   * which contains coordinates relative to the browsers viewport (without included scroll offsets).\n   * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`\n   * coordinates.\n   * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying\n   * the offset to the menu position.\n   * @fires Hooks#beforeContextMenuShow\n   * @fires Hooks#afterContextMenuShow\n   */\n  open(position, offset = { above: 0, below: 0, left: 0, right: 0 }) {\n    if (this.menu?.isOpened()) {\n      return;\n    }\n\n    this.prepareMenuItems();\n    this.menu.open();\n\n    const themeHasTableBorder = this.menu.tableBorderWidth > 0;\n\n    if (!themeHasTableBorder) {\n      offset.below += 1;\n      offset.right += 1;\n      offset.above -= 1;\n      offset.left -= 1;\n    }\n\n    objectEach(offset, (value, key) => {\n      this.menu.setOffset(key, value);\n    });\n    this.menu.setPosition(position);\n  }\n\n  /**\n   * Closes the menu.\n   */\n  close() {\n    this.menu?.close();\n    this.itemsFactory = null;\n  }\n\n  /**\n   * Execute context menu command.\n   *\n   * The `executeCommand()` method works only for selected cells.\n   *\n   * When no cells are selected, `executeCommand()` doesn't do anything.\n   *\n   * You can execute all predefined commands:\n   *  * `'row_above'` - Insert row above\n   *  * `'row_below'` - Insert row below\n   *  * `'col_left'` - Insert column left\n   *  * `'col_right'` - Insert column right\n   *  * `'clear_column'` - Clear selected column\n   *  * `'remove_row'` - Remove row\n   *  * `'remove_col'` - Remove column\n   *  * `'undo'` - Undo last action\n   *  * `'redo'` - Redo last action\n   *  * `'make_read_only'` - Make cell read only\n   *  * `'alignment:left'` - Alignment to the left\n   *  * `'alignment:top'` - Alignment to the top\n   *  * `'alignment:right'` - Alignment to the right\n   *  * `'alignment:bottom'` - Alignment to the bottom\n   *  * `'alignment:middle'` - Alignment to the middle\n   *  * `'alignment:center'` - Alignment to the center (justify).\n   *\n   * Or you can execute command registered in settings where `key` is your command name.\n   *\n   * @param {string} commandName The command name to be executed.\n   * @param {*} params Additional parameters passed to command executor module.\n   */\n  executeCommand(commandName, ...params) {\n    if (this.itemsFactory === null) {\n      this.prepareMenuItems();\n    }\n\n    this.commandExecutor.execute(commandName, ...params);\n  }\n\n  /**\n   * Prepares available contextMenu's items list and registers them in commandExecutor.\n   *\n   * @private\n   * @fires Hooks#afterContextMenuDefaultOptions\n   * @fires Hooks#beforeContextMenuSetItems\n   */\n  prepareMenuItems() {\n    this.itemsFactory = new ItemsFactory(this.hot, ContextMenu.DEFAULT_ITEMS);\n\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    const predefinedItems = {\n      items: this.itemsFactory.getItems(settings)\n    };\n\n    this.hot.runHooks('afterContextMenuDefaultOptions', predefinedItems);\n\n    this.itemsFactory.setPredefinedItems(predefinedItems.items);\n    const menuItems = this.itemsFactory.getItems(settings);\n\n    this.hot.runHooks('beforeContextMenuSetItems', menuItems);\n\n    this.menu.setMenuItems(menuItems);\n\n    // Register all commands. Predefined and added by user or by plugins\n    arrayEach(menuItems, command => this.commandExecutor.registerCommand(command.key, command));\n  }\n\n  /**\n   * On contextmenu listener.\n   *\n   * @param {Event} event The mouse event object.\n   */\n  #onAfterOnCellContextMenu(event) {\n    const settings = this.hot.getSettings();\n    const showRowHeaders = settings.rowHeaders;\n    const showColHeaders = settings.colHeaders;\n\n    /**\n     * @private\n     * @param {HTMLElement} element The element to validate.\n     * @returns {boolean}\n     */\n    function isValidElement(element) {\n      return element.nodeName === 'TD' || element.parentNode.nodeName === 'TD';\n    }\n    const element = event.target;\n\n    this.close();\n\n    if (hasClass(element, 'handsontableInput')) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (!(showRowHeaders || showColHeaders)) {\n      if (!isValidElement(element) && !(hasClass(element, 'current') && hasClass(element, 'wtBorder'))) {\n        return;\n      }\n    }\n\n    const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n\n    this.open({\n      top: event.clientY + offset.top,\n      left: event.clientX + offset.left,\n    });\n  }\n\n  /**\n   * On menu before open listener.\n   */\n  #onMenuBeforeOpen() {\n    this.hot.runHooks('beforeContextMenuShow', this);\n  }\n\n  /**\n   * On menu after open listener.\n   */\n  #onMenuAfterOpen() {\n    this.hot.runHooks('afterContextMenuShow', this);\n  }\n\n  /**\n   * On menu after close listener.\n   */\n  #onMenuAfterClose() {\n    this.hot.listen();\n    this.hot.runHooks('afterContextMenuHide', this);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n    }\n    super.destroy();\n  }\n}\n\nContextMenu.SEPARATOR = {\n  name: SEPARATOR\n};\n","import { arrayEach } from '../../helpers/array';\nimport { hasOwnProperty } from '../../helpers/object';\n\n/**\n * Command executor for ContextMenu.\n *\n * @private\n * @class CommandExecutor\n */\nexport class CommandExecutor {\n  /**\n   * @type {Core}\n   */\n  hot;\n  /**\n   * @type {object}\n   */\n  commands = {};\n  /**\n   * @type {Function}\n   */\n  commonCallback = null;\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Register command.\n   *\n   * @param {string} name Command name.\n   * @param {object} commandDescriptor Command descriptor object with properties like `key` (command id),\n   *                                   `callback` (task to execute), `name` (command name), `disabled` (command availability).\n   */\n  registerCommand(name, commandDescriptor) {\n    this.commands[name] = commandDescriptor;\n  }\n\n  /**\n   * Set common callback which will be trigger on every executed command.\n   *\n   * @param {Function} callback Function which will be fired on every command execute.\n   */\n  setCommonCallback(callback) {\n    this.commonCallback = callback;\n  }\n\n  /**\n   * Execute command by its name.\n   *\n   * @param {string} commandName Command id.\n   * @param {*} params Arguments passed to command task.\n   */\n  execute(commandName, ...params) {\n    const commandSplit = commandName.split(':');\n    const commandNamePrimary = commandSplit[0];\n\n    const subCommandName = commandSplit.length === 2 ? commandSplit[1] : null;\n    let command = this.commands[commandNamePrimary];\n\n    if (!command) {\n      throw new Error(`Menu command '${commandNamePrimary}' not exists.`);\n    }\n    if (subCommandName && command.submenu) {\n      command = findSubCommand(subCommandName, command.submenu.items);\n    }\n    if (command.disabled === true) {\n      return;\n    }\n    if (typeof command.disabled === 'function' && command.disabled.call(this.hot) === true) {\n      return;\n    }\n    if (hasOwnProperty(command, 'submenu')) {\n      return;\n    }\n    const callbacks = [];\n\n    if (typeof command.callback === 'function') {\n      callbacks.push(command.callback);\n    }\n    if (typeof this.commonCallback === 'function') {\n      callbacks.push(this.commonCallback);\n    }\n    params.unshift(commandSplit.join(':'));\n    arrayEach(callbacks, callback => callback.apply(this.hot, params));\n  }\n}\n\n/**\n * @param {string} subCommandName The subcommand name.\n * @param {string[]} subCommands The collection of the commands.\n * @returns {boolean}\n */\nfunction findSubCommand(subCommandName, subCommands) {\n  let command;\n\n  arrayEach(subCommands, (cmd) => {\n    const cmds = cmd.key ? cmd.key.split(':') : null;\n\n    if (Array.isArray(cmds) && cmds[1] === subCommandName) {\n      command = cmd;\n\n      return false;\n    }\n  });\n\n  return command;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\n\n// IE8-\nvar INCORRECT_RESULT = [].unshift(0) !== 1;\n\n// V8 ~ Chrome < 71 and Safari <= 15.4, FF < 23 throws InternalError\nvar properErrorOnNonWritableLength = function () {\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).unshift();\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n};\n\nvar FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength();\n\n// `Array.prototype.unshift` method\n// https://tc39.es/ecma262/#sec-array.prototype.unshift\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  unshift: function unshift(item) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var argCount = arguments.length;\n    if (argCount) {\n      doesNotExceedSafeInteger(len + argCount);\n      var k = len;\n      while (k--) {\n        var to = k + argCount;\n        if (k in O) O[to] = O[k];\n        else deletePropertyOrThrow(O, to);\n      }\n      for (var j = 0; j < argCount; j++) {\n        O[j] = arguments[j];\n      }\n    } return setArrayLength(O, len + argCount);\n  }\n});\n","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n  if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","import { objectEach, isObject, extend } from '../../helpers/object';\nimport { arrayEach } from '../../helpers/array';\nimport {\n  SEPARATOR,\n  ITEMS,\n  predefinedItems\n} from './predefinedItems';\n\n/**\n * Predefined items class factory for menu items.\n *\n * @private\n * @class ItemsFactory\n */\nexport class ItemsFactory {\n  /**\n   * @type {Core}\n   */\n  hot;\n  /**\n   * @type {object}\n   */\n  predefinedItems = predefinedItems();\n  /**\n   * @type {Array}\n   */\n  defaultOrderPattern;\n\n  constructor(hotInstance, orderPattern = null) {\n    this.hot = hotInstance;\n    this.defaultOrderPattern = orderPattern;\n  }\n\n  /**\n   * Set predefined items.\n   *\n   * @param {Array} predefinedItemsCollection Array of predefined items.\n   */\n  setPredefinedItems(predefinedItemsCollection) {\n    const items = {};\n\n    this.defaultOrderPattern.length = 0;\n\n    objectEach(predefinedItemsCollection, (value, key) => {\n      let menuItemKey = '';\n\n      if (value.name === SEPARATOR) {\n        items[SEPARATOR] = value;\n        menuItemKey = SEPARATOR;\n\n        // Menu item added as a property to array\n      } else if (isNaN(parseInt(key, 10))) {\n        value.key = value.key === undefined ? key : value.key;\n        items[key] = value;\n        menuItemKey = value.key;\n\n      } else {\n        items[value.key] = value;\n        menuItemKey = value.key;\n      }\n      this.defaultOrderPattern.push(menuItemKey);\n    });\n    this.predefinedItems = items;\n  }\n\n  /**\n   * Get all menu items based on pattern.\n   *\n   * @param {Array|object|boolean} pattern Pattern which you can define by displaying menu items order. If `true` default\n   *                                       pattern will be used.\n   * @returns {Array}\n   */\n  getItems(pattern = null) {\n    return getItems(pattern, this.defaultOrderPattern, this.predefinedItems);\n  }\n}\n\n/**\n * @param {object[]} itemsPattern The user defined menu items collection.\n * @param {object[]} defaultPattern The menu default items collection.\n * @param {object} items Additional options.\n * @returns {object[]} Returns parsed and merged menu items collection ready to render.\n */\nfunction getItems(itemsPattern = null, defaultPattern = [], items = {}) {\n  const result = [];\n  let pattern = itemsPattern;\n\n  if (pattern && pattern.items) {\n    pattern = pattern.items;\n\n  } else if (!Array.isArray(pattern)) {\n    pattern = defaultPattern;\n  }\n  if (isObject(pattern)) {\n    objectEach(pattern, (value, key) => {\n      let item = items[typeof value === 'string' ? value : key];\n\n      if (!item) {\n        item = value;\n      }\n      if (isObject(value)) {\n        extend(item, value);\n\n      } else if (typeof item === 'string') {\n        item = { name: item };\n      }\n      if (item.key === undefined) {\n        item.key = key;\n      }\n      result.push(item);\n    });\n  } else {\n    arrayEach(pattern, (name, key) => {\n      let item = items[name];\n\n      // Item deleted from settings `allowInsertRow: false` etc.\n      if (!item && ITEMS.indexOf(name) >= 0) {\n        return;\n      }\n      if (!item) {\n        item = { name, key: `${key}` };\n      }\n      if (isObject(name)) {\n        extend(item, name);\n      }\n      if (item.key === undefined) {\n        item.key = key;\n      }\n      result.push(item);\n    });\n  }\n\n  return result;\n}\n","export * from './menu';\n","import { Positioner } from './positioner';\nimport { createMenuNavigator } from './navigator';\nimport { createKeyboardShortcutsCtrl } from './shortcuts';\nimport { SEPARATOR, NO_ITEMS, predefinedItems } from './../predefinedItems';\nimport {\n  filterSeparators,\n  hasSubMenu,\n  isItemHidden,\n  normalizeSelection,\n  isItemSubMenu,\n  isItemDisabled,\n  isItemSeparator,\n} from './utils';\nimport EventManager from '../../../eventManager';\nimport { arrayEach, arrayFilter, arrayReduce } from '../../../helpers/array';\nimport { isWindowsOS, isMobileBrowser, isIpadOS } from '../../../helpers/browser';\nimport {\n  addClass,\n  isChildOf,\n  getComputedStyle,\n  getParentWindow,\n  hasClass,\n  setAttribute,\n  outerHeight,\n} from '../../../helpers/dom/element';\nimport { isRightClick } from '../../../helpers/dom/event';\nimport { debounce, isFunction } from '../../../helpers/function';\nimport { isUndefined, isDefined } from '../../../helpers/mixed';\nimport { mixin } from '../../../helpers/object';\nimport localHooks from '../../../mixins/localHooks';\nimport { createMenuItemRenderer } from './menuItemRenderer';\nimport {\n  A11Y_EXPANDED,\n  A11Y_MENU,\n  A11Y_TABINDEX,\n} from '../../../helpers/a11y';\n\nconst MIN_WIDTH = 215;\n\n/**\n * @typedef MenuOptions\n * @property {Menu} [parent=null] Instance of {@link Menu}.\n * @property {string} [name=null] Name of the menu.\n * @property {string} [className=''] Custom class name.\n * @property {boolean} [keepInViewport=true] Determine if should be kept in viewport.\n * @property {boolean} [standalone] Enabling closing menu when clicked element is not belongs to menu itself.\n * @property {number} [minWidth=MIN_WIDTH] The minimum width.\n * @property {HTMLElement} [container] The container.\n */\n\n/**\n * @private\n * @class Menu\n */\nexport class Menu {\n  /**\n   * The Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * The Menu options.\n   *\n   * @type {object}\n   */\n  options;\n  /**\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * The Menu container element.\n   *\n   * @type {HTMLElement}\n   */\n  container;\n  /**\n   * @type {Positioner}\n   */\n  positioner;\n  /**\n   * The instance of the Handsontable that is used as a menu.\n   *\n   * @type {Core}\n   */\n  hotMenu = null;\n  /**\n   * The collection of the Handsontable instances that are used as sub-menus.\n   *\n   * @type {object}\n   */\n  hotSubMenus = {};\n  /**\n   * If the menu acts as the sub-menu then this property contains the reference to the parent menu.\n   *\n   * @type {Menu}\n   */\n  parentMenu;\n  /**\n   * The menu items entries.\n   *\n   * @type {object[]}\n   */\n  menuItems = null;\n  /**\n   * @type {boolean}\n   */\n  origOutsideClickDeselects = null;\n  /**\n   * The controller module that allows modifying the menu item selection positions.\n   *\n   * @type {Paginator}\n   */\n  #navigator;\n  /**\n   * The controller module that allows extending the keyboard shortcuts for the menu.\n   *\n   * @type {KeyboardShortcutsMenuController}\n   */\n  #shortcutsCtrl;\n  /**\n   * The border width of the table used in the menu.\n   *\n   * @type {number}\n   */\n  #tableBorderWidth;\n\n  /**\n   * Getter for the table border width.\n   * This getter retrieves the border width of the table used in the menu.\n   *\n   * @returns {number} The border width of the table in pixels.\n   */\n  get tableBorderWidth() {\n    if (this.#tableBorderWidth === undefined && this.hotMenu) {\n      this.#tableBorderWidth = parseInt(getComputedStyle(this.hotMenu.view._wt.wtTable.TABLE).borderWidth, 10);\n    }\n\n    return this.#tableBorderWidth;\n  }\n\n  /**\n   * @param {Core} hotInstance Handsontable instance.\n   * @param {MenuOptions} [options] Menu options.\n   */\n  constructor(hotInstance, options) {\n    this.hot = hotInstance;\n    this.options = options || {\n      parent: null,\n      name: null,\n      className: '',\n      keepInViewport: true,\n      standalone: false,\n      minWidth: MIN_WIDTH,\n      container: this.hot.rootDocument.documentElement,\n    };\n    this.container = this.createContainer(this.options.name);\n    this.positioner = new Positioner(this.options.keepInViewport);\n    this.parentMenu = this.options.parent || null;\n\n    this.registerEvents();\n\n    if (this.isSubMenu()) {\n      this.addLocalHook('afterSelectionChange',\n        (...args) => this.parentMenu.runLocalHooks('afterSelectionChange', ...args));\n    }\n  }\n\n  /**\n   * Register event listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    let frame = this.hot.rootWindow;\n\n    while (frame) {\n      this.eventManager.addEventListener(frame.document, 'mousedown', event => this.onDocumentMouseDown(event));\n      this.eventManager.addEventListener(frame.document, 'touchstart', event => this.onDocumentMouseDown(event));\n      this.eventManager.addEventListener(frame.document, 'contextmenu', event => this.onDocumentContextMenu(event));\n\n      frame = getParentWindow(frame);\n    }\n  }\n\n  /**\n   * Set array of objects which defines menu items.\n   *\n   * @param {Array} menuItems Menu items to display.\n   */\n  setMenuItems(menuItems) {\n    this.menuItems = menuItems;\n  }\n\n  /**\n   * Gets the controller object that allows modifying the the menu item selection.\n   *\n   * @returns {Paginator | undefined}\n   */\n  getNavigator() {\n    return this.#navigator;\n  }\n\n  /**\n   * Gets the controller object that allows extending the keyboard shortcuts of the menu.\n   *\n   * @returns {KeyboardShortcutsMenuController | undefined}\n   */\n  getKeyboardShortcutsCtrl() {\n    return this.#shortcutsCtrl;\n  }\n\n  /**\n   * Returns currently selected menu item. Returns `null` if no item was selected.\n   *\n   * @returns {object|null}\n   */\n  getSelectedItem() {\n    return this.hasSelectedItem() ? this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelectedLast()[0]) : null;\n  }\n\n  /**\n   * Checks if the menu has selected (highlighted) any item from the menu list.\n   *\n   * @returns {boolean}\n   */\n  hasSelectedItem() {\n    return Array.isArray(this.hotMenu.getSelectedLast());\n  }\n\n  /**\n   * Check if menu is using as sub-menu.\n   *\n   * @returns {boolean}\n   */\n  isSubMenu() {\n    return this.parentMenu !== null;\n  }\n\n  /**\n   * Open menu.\n   *\n   * @fires Hooks#beforeContextMenuShow\n   * @fires Hooks#afterContextMenuShow\n   */\n  open() {\n    this.runLocalHooks('beforeOpen');\n\n    this.container.removeAttribute('style');\n    this.container.style.display = 'block';\n\n    const delayedOpenSubMenu = debounce(row => this.openSubMenu(row), 300);\n    const minWidthOfMenu = this.options.minWidth || MIN_WIDTH;\n    let noItemsDefined = false;\n\n    let filteredItems = arrayFilter(this.menuItems, (item) => {\n      if (item.key === NO_ITEMS) {\n        noItemsDefined = true;\n      }\n\n      return isItemHidden(item, this.hot);\n    });\n\n    if (filteredItems.length < 1 && !noItemsDefined) {\n      filteredItems.push(predefinedItems()[NO_ITEMS]);\n\n    } else if (filteredItems.length === 0) {\n      return;\n    }\n\n    filteredItems = filterSeparators(filteredItems, SEPARATOR);\n\n    let shouldAutoCloseMenu = false;\n\n    const settings = {\n      data: filteredItems,\n      colHeaders: false,\n      autoColumnSize: true,\n      autoWrapRow: false,\n      modifyColWidth(width) {\n        if (isDefined(width) && width < minWidthOfMenu) {\n          return minWidthOfMenu;\n        }\n\n        return width;\n      },\n      autoRowSize: false,\n      readOnly: true,\n      editor: false,\n      copyPaste: false,\n      hiddenRows: true,\n      maxCols: 1,\n      columns: [{\n        data: 'name',\n        renderer: createMenuItemRenderer(this.hot),\n      }],\n      renderAllRows: true,\n      fragmentSelection: false,\n      outsideClickDeselects: false,\n      disableVisualSelection: 'area',\n      layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',\n      ariaTags: false,\n      beforeOnCellMouseOver: (event, coords) => {\n        this.#navigator.setCurrentPage(coords.row);\n      },\n      afterOnCellMouseOver: (event, coords) => {\n        if (this.isAllSubMenusClosed()) {\n          delayedOpenSubMenu(coords.row);\n        } else {\n          this.openSubMenu(coords.row);\n        }\n      },\n      rowHeights: row => (filteredItems[row].name === SEPARATOR ? 1 : undefined),\n      afterOnCellContextMenu: (event) => {\n        event.preventDefault();\n\n        // On the Windows platform, the \"contextmenu\" is triggered after the \"mouseup\" so that's\n        // why the closing menu is here. (#6507#issuecomment-582392301).\n        if (isWindowsOS() && shouldAutoCloseMenu && this.hasSelectedItem()) {\n          this.close(true);\n        }\n      },\n      afterSelection: (row, column, row2, column2, preventScrolling) => {\n        // do not scroll the viewport when mouse clicks on partially visible menu item\n        if (this.hotMenu.view.isMouseDown()) {\n          preventScrolling.value = true;\n        }\n\n        this.runLocalHooks('afterSelectionChange', this.getSelectedItem());\n      },\n      beforeOnCellMouseUp: (event) => {\n        if (this.hasSelectedItem()) {\n          shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());\n          this.executeCommand(event);\n        }\n      },\n      afterOnCellMouseUp: (event) => {\n        // If the code runs on the other platform than Windows, the \"mouseup\" is triggered\n        // after the \"contextmenu\". So then \"mouseup\" closes the menu. Otherwise, the closing\n        // menu responsibility is forwarded to \"afterOnCellContextMenu\" callback (#6507#issuecomment-582392301).\n        if ((!isWindowsOS() || !isRightClick(event)) && shouldAutoCloseMenu && this.hasSelectedItem()) {\n          // The timeout is necessary only for mobile devices. For desktop, the click event that is fired\n          // right after the mouseup event gets the event element target the same as the mouseup event.\n          // For mobile devices, the click event is triggered with native delay (~300ms), so when the mouseup\n          // event hides the tapped element, the click event grabs the element below. As a result, the filter\n          // by condition menu is closed and immediately open on tapping the \"None\" item.\n          if (isMobileBrowser() || isIpadOS()) {\n            this.hot._registerTimeout(() => this.close(true), 325);\n          } else {\n            this.close(true);\n          }\n        }\n      },\n      afterUnlisten: () => {\n        // Restore menu focus, fix for `this.instance.unlisten();` call in the tableView.js@260 file.\n        // This prevents losing table responsiveness for keyboard events when filter select menu is closed (#6497).\n        if (!this.hasSelectedItem() && this.isOpened()) {\n          this.hotMenu.listen();\n        }\n      },\n    };\n\n    this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;\n    this.hot.getSettings().outsideClickDeselects = false;\n    this.hotMenu = new this.hot.constructor(this.container, settings);\n    this.hotMenu.addHook('afterInit', () => this.onAfterInit());\n    this.hotMenu.init();\n\n    this.#navigator = createMenuNavigator(this.hotMenu);\n    this.#shortcutsCtrl = createKeyboardShortcutsCtrl(this);\n    this.#shortcutsCtrl.listen();\n\n    this.focus();\n\n    if (this.isSubMenu()) {\n      this.addLocalHook('afterOpen', () => this.parentMenu.runLocalHooks('afterSubmenuOpen', this));\n    }\n\n    this.runLocalHooks('afterOpen', this);\n  }\n\n  /**\n   * Close menu.\n   *\n   * @param {boolean} [closeParent=false] If `true` try to close parent menu if exists.\n   */\n  close(closeParent = false) {\n    if (!this.isOpened()) {\n      return;\n    }\n\n    if (closeParent && this.isSubMenu()) {\n      this.parentMenu.close();\n\n    } else {\n      this.#navigator.clear();\n      this.closeAllSubMenus();\n      this.container.style.display = 'none';\n      this.hotMenu.destroy();\n      this.hotMenu = null;\n      this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;\n      this.runLocalHooks('afterClose');\n\n      if (this.isSubMenu()) {\n        if (this.hot.getSettings().ariaTags) {\n          const selection = this.parentMenu.hotMenu.getSelectedLast();\n\n          if (selection) {\n            const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);\n\n            setAttribute(cell, [\n              A11Y_EXPANDED(false),\n            ]);\n          }\n        }\n\n        this.parentMenu.hotMenu.listen();\n      }\n    }\n  }\n\n  /**\n   * Open sub menu at the provided row index.\n   *\n   * @param {number} row Row index.\n   * @returns {Menu|boolean} Returns created menu or `false` if no one menu was created.\n   */\n  openSubMenu(row) {\n    if (!this.hotMenu) {\n      return false;\n    }\n\n    const cell = this.hotMenu.getCell(row, 0);\n\n    this.closeAllSubMenus();\n\n    if (!cell || !hasSubMenu(cell)) {\n      return false;\n    }\n\n    const dataItem = this.hotMenu.getSourceDataAtRow(row);\n    const subMenu = new Menu(this.hot, {\n      parent: this,\n      name: dataItem.name,\n      className: this.options.className,\n      keepInViewport: true,\n      container: this.options.container,\n    });\n\n    subMenu.setMenuItems(dataItem.submenu.items);\n    subMenu.open();\n    subMenu.setPosition(cell.getBoundingClientRect());\n    this.hotSubMenus[dataItem.key] = subMenu;\n\n    // Update the accessibility tags on the cell being the base for the submenu.\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(cell, [\n        A11Y_EXPANDED(true)\n      ]);\n    }\n\n    return subMenu;\n  }\n\n  /**\n   * Close sub menu at row index.\n   *\n   * @param {number} row Row index.\n   */\n  closeSubMenu(row) {\n    const dataItem = this.hotMenu.getSourceDataAtRow(row);\n    const menus = this.hotSubMenus[dataItem.key];\n\n    if (menus) {\n      menus.destroy();\n      delete this.hotSubMenus[dataItem.key];\n\n      const cell = this.hotMenu.getCell(row, 0);\n\n      // Update the accessibility tags on the cell being the base for the submenu.\n      if (this.hot.getSettings().ariaTags) {\n        setAttribute(cell, [\n          A11Y_EXPANDED(false),\n        ]);\n      }\n    }\n  }\n\n  /**\n   * Close all opened sub menus.\n   */\n  closeAllSubMenus() {\n    arrayEach(this.hotMenu.getData(), (value, row) => this.closeSubMenu(row));\n  }\n\n  /**\n   * Checks if all created and opened sub menus are closed.\n   *\n   * @returns {boolean}\n   */\n  isAllSubMenusClosed() {\n    return Object.keys(this.hotSubMenus).length === 0;\n  }\n\n  /**\n   * Focus the menu so all keyboard shortcuts become active.\n   */\n  focus() {\n    if (this.isOpened()) {\n      this.hotMenu.rootElement.focus({\n        preventScroll: true,\n      });\n      this.getKeyboardShortcutsCtrl().listen();\n      this.hotMenu.listen();\n    }\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    const menuContainerParentElement = this.container.parentNode;\n\n    this.clearLocalHooks();\n    this.close();\n    this.parentMenu = null;\n    this.eventManager.destroy();\n\n    if (menuContainerParentElement) {\n      menuContainerParentElement.removeChild(this.container);\n    }\n  }\n\n  /**\n   * Checks if menu was opened.\n   *\n   * @returns {boolean} Returns `true` if menu was opened.\n   */\n  isOpened() {\n    return this.hotMenu !== null;\n  }\n\n  /**\n   * Execute menu command.\n   *\n   * The `executeCommand()` method works only for selected cells.\n   *\n   * When no cells are selected, `executeCommand()` doesn't do anything.\n   *\n   * @param {Event} [event] The mouse event object.\n   */\n  executeCommand(event) {\n    if (!this.isOpened() || !this.hasSelectedItem()) {\n      return;\n    }\n    const selectedItem = this.getSelectedItem();\n\n    this.runLocalHooks('select', selectedItem, event);\n\n    if (this.isCommandPassive(selectedItem)) {\n      return;\n    }\n\n    const selRanges = this.hot.getSelectedRange();\n    const normalizedSelection = selRanges ? normalizeSelection(selRanges) : [];\n\n    this.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n\n    if (this.isSubMenu()) {\n      this.parentMenu.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n    }\n  }\n\n  /**\n   * Checks if the passed command is passive or not. The command is passive when it's marked as\n   * disabled, the descriptor object contains `isCommand` property set to `false`, command\n   * is a separator, or the item is recognized as submenu. For passive items the menu is not\n   * closed automatically after the user trigger the command through the UI.\n   *\n   * @param {object} commandDescriptor Selected menu item from the menu data source.\n   * @returns {boolean}\n   */\n  isCommandPassive(commandDescriptor) {\n    return commandDescriptor.isCommand === false ||\n           isItemSeparator(commandDescriptor) ||\n           isItemDisabled(commandDescriptor, this.hot) ||\n           isItemSubMenu(commandDescriptor);\n  }\n\n  /**\n   * Set offset menu position for specified area (`above`, `below`, `left` or `right`).\n   *\n   * @param {string} area Specified area name (`above`, `below`, `left` or `right`).\n   * @param {number} offset Offset value.\n   */\n  setOffset(area, offset = 0) {\n    this.positioner.setOffset(area, offset);\n  }\n\n  /**\n   * Set menu position based on dom event or based on literal object.\n   *\n   * @param {Event|object} coords Event or literal Object with coordinates.\n   */\n  setPosition(coords) {\n    if (this.isSubMenu()) {\n      this.positioner.setParentElement(this.parentMenu.container);\n    }\n\n    this.positioner\n      .setElement(this.container)\n      .updatePosition(coords);\n  }\n\n  /**\n   * Updates the dimensions of the menu based on its content.\n   * This method calculates the real height of the menu by summing up the heights of its items,\n   * and adjusts the width and height of the menu's holder and hider elements accordingly.\n   */\n  updateMenuDimensions() {\n    const { wtTable } = this.hotMenu.view._wt;\n    const data = this.hotMenu.getSettings().data;\n    const hiderStyle = wtTable.hider.style;\n    const holderStyle = wtTable.holder.style;\n    const currentHiderWidth = parseInt(hiderStyle.width, 10);\n\n    const realHeight = arrayReduce(data,\n      (accumulator, value, index) => {\n        const itemCell = this.hotMenu.getCell(index, 0);\n        const currentRowHeight = itemCell ? outerHeight(this.hotMenu.getCell(index, 0)) : 0;\n\n        return accumulator + (value.name === SEPARATOR ? 1 : currentRowHeight);\n      }, 0);\n\n    // Additional 3px to menu's size because of additional border around its `table.htCore`.\n    holderStyle.width = `${currentHiderWidth + 3}px`;\n    holderStyle.height = `${realHeight + 3}px`;\n    hiderStyle.height = holderStyle.height;\n  }\n\n  /**\n   * Create container/wrapper for handsontable.\n   *\n   * @private\n   * @param {string} [name] Class name.\n   * @returns {HTMLElement}\n   */\n  createContainer(name = null) {\n    const doc = this.options.container.ownerDocument;\n    let className = name;\n    let container;\n\n    if (className) {\n      if (isFunction(className)) {\n        className = className.call(this.hot);\n\n        if (className === null || isUndefined(className)) {\n          className = '';\n\n        } else {\n          className = className.toString();\n        }\n      }\n\n      className = className.replace(/[^A-z0-9]/g, '_');\n      className = `${this.options.className}Sub_${className}`;\n\n      container = doc.querySelector(`.${this.options.className}.${className}`);\n    }\n\n    if (!container) {\n      container = doc.createElement('div');\n\n      addClass(container, `htMenu ${this.options.className}`);\n\n      if (className) {\n        addClass(container, className);\n      }\n\n      this.options.container.appendChild(container);\n    }\n\n    return container;\n  }\n\n  /**\n   * On after init listener.\n   *\n   * @private\n   */\n  onAfterInit() {\n    this.updateMenuDimensions();\n\n    // Replace the default accessibility tags with the context menu's\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.hotMenu.rootElement, [\n        A11Y_MENU(),\n        A11Y_TABINDEX(-1),\n      ]);\n    }\n  }\n\n  /**\n   * Document mouse down listener.\n   *\n   * @private\n   * @param {Event} event The mouse event object.\n   */\n  onDocumentMouseDown(event) {\n    if (!this.isOpened()) {\n      return;\n    }\n\n    // Close menu when clicked element is not belongs to menu itself\n    if (this.options.standalone && this.hotMenu && !isChildOf(event.target, this.hotMenu.rootElement)) {\n      this.close(true);\n\n      // Automatically close menu when clicked element is not belongs to menu or submenu (not necessarily to itself)\n    } else if ((this.isAllSubMenusClosed() || this.isSubMenu()) && !isChildOf(event.target, '.htMenu')) {\n      this.close(true);\n    }\n  }\n\n  /**\n   * Document's contextmenu listener.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onDocumentContextMenu(event) {\n    if (!this.isOpened()) {\n      return;\n    }\n\n    if (hasClass(event.target, 'htCore') && isChildOf(event.target, this.hotMenu.rootElement)) {\n      event.preventDefault();\n    }\n  }\n}\n\nmixin(Menu, localHooks);\n","import { Cursor } from './cursor';\n\n/**\n * Helper class for positioning the menu and submenus in the correct place relative to the\n * cursor position (DOM element or mouse coordinates).\n *\n * @private\n * @class Positioner\n */\nexport class Positioner {\n  /**\n   * The menu container element the positioning will be applied to.\n   *\n   * @type {HTMLElement}\n   */\n  #container;\n  /**\n   * For positioning the submenu, the parent element is used to calculate offsets to ensure that submenu\n   * is positioned right next to the parent menu.\n   *\n   * @type {HTMLElement}\n   */\n  #parentContainer;\n  /**\n   * The instance of the Cursor class.\n   *\n   * @type {Cursor}\n   */\n  #cursor;\n  /**\n   * Enabling the option allows changing the position calculation so that the menus (or submenus)\n   * are always placed within the visible viewport of the browser.\n   *\n   * @type {boolean}\n   */\n  #keepInViewport = false;\n  /**\n   * Allows apply the position offset for directions.\n   *\n   * @type {{above: number, below: number, left: number, right: number}}\n   */\n  #offset = {\n    above: 0,\n    below: 0,\n    left: 0,\n    right: 0,\n  };\n\n  constructor(keepInViewport) {\n    this.#keepInViewport = keepInViewport;\n  }\n\n  /**\n   * Sets offset position for specified directions (`above`, `below`, `left` or `right`).\n   *\n   * @param {'above' | 'below' | 'left' | 'right'} direction A direction name.\n   * @param {number} [offset=0] Offset value.\n   * @returns {Positioner}\n   */\n  setOffset(direction, offset = 0) {\n    this.#offset[direction] = offset;\n\n    return this;\n  }\n\n  /**\n   * Sets the menu element to work with. The element can be owned by the main menu or the submenu.\n   *\n   * @param {HTMLElement} container The menu container element.\n   * @returns {Positioner}\n   */\n  setElement(container) {\n    this.#container = container;\n\n    return this;\n  }\n\n  /**\n   * Sets the parent menu element to work with.\n   *\n   * @param {HTMLElement} container The parent menu container element.\n   * @returns {Positioner}\n   */\n  setParentElement(container) {\n    this.#parentContainer = container;\n\n    return this;\n  }\n\n  /**\n   * Updates the menu position.\n   *\n   * @param {object|MouseEvent} coords The literal object with `top`, `left`, `width` and `height` props or a\n   * mouse event object.\n   */\n  updatePosition(coords) {\n    this.#cursor = new Cursor(coords, this.#container.ownerDocument.defaultView);\n\n    if (this.#keepInViewport) {\n      if (this.#cursor.fitsBelow(this.#container)) {\n        this.setPositionBelowCursor();\n\n      } else if (this.#cursor.fitsAbove(this.#container)) {\n        this.setPositionAboveCursor();\n\n      } else {\n        this.setPositionBelowCursor();\n      }\n\n      this.updateHorizontalPosition();\n    } else {\n      this.setPositionBelowCursor();\n      this.setPositionOnRightOfCursor();\n    }\n  }\n\n  /**\n   * Updates the menu horizontal position.\n   */\n  updateHorizontalPosition() {\n    if (this.#container.dir === 'rtl') {\n      if (this.#cursor.fitsOnLeft(this.#container)) {\n        this.setPositionOnLeftOfCursor();\n      } else {\n        this.setPositionOnRightOfCursor();\n      }\n\n    } else if (this.#cursor.fitsOnRight(this.#container)) {\n      this.setPositionOnRightOfCursor();\n\n    } else {\n      this.setPositionOnLeftOfCursor();\n    }\n  }\n\n  /**\n   * Sets the menu position above the cursor object.\n   */\n  setPositionAboveCursor() {\n    let top = this.#offset.above + this.#cursor.top - this.#container.offsetHeight;\n\n    if (this.#parentContainer) {\n      top = this.#cursor.top + this.#cursor.cellHeight - this.#container.offsetHeight + 3;\n    }\n\n    this.#container.style.top = `${top}px`;\n  }\n\n  /**\n   * Sets the menu position below the cursor object.\n   */\n  setPositionBelowCursor() {\n    let top = this.#offset.below + this.#cursor.top + 1;\n\n    if (this.#parentContainer) {\n      top = this.#cursor.top - 1;\n    }\n\n    this.#container.style.top = `${top}px`;\n  }\n\n  /**\n   * Sets the menu position on the right of the cursor object.\n   */\n  setPositionOnRightOfCursor() {\n    let left = this.#cursor.left;\n\n    if (this.#parentContainer) {\n      const borderRightWidth = Number.parseInt(getComputedStyle(this.#parentContainer\n        .querySelector('.htCore')).borderRightWidth, 10);\n\n      left += this.#cursor.cellWidth + borderRightWidth;\n    } else {\n      left += this.#offset.right;\n    }\n\n    this.#container.style.left = `${left}px`;\n  }\n\n  /**\n   * Sets the menu position on the left of the cursor object.\n   */\n  setPositionOnLeftOfCursor() {\n    let left = this.#offset.left + this.#cursor.left - this.#container.offsetWidth;\n\n    if (this.#parentContainer) {\n      const borderLeftWidth = Number.parseInt(getComputedStyle(this.#parentContainer\n        .querySelector('.htCore')).borderLeftWidth, 10);\n\n      left -= borderLeftWidth;\n    }\n\n    this.#container.style.left = `${left}px`;\n  }\n}\n","/**\n * Helper class for checking if element will fit at the desired side of cursor.\n *\n * @private\n * @class Cursor\n */\nexport class Cursor {\n  /**\n   * @type {number}\n   */\n  top;\n  /**\n   * @type {number}\n   */\n  topRelative;\n  /**\n   * @type {number}\n   */\n  left;\n  /**\n   * @type {number}\n   */\n  leftRelative;\n  /**\n   * @type {number}\n   */\n  scrollTop;\n  /**\n   * @type {number}\n   */\n  scrollLeft;\n  /**\n   * @type {number}\n   */\n  cellHeight;\n  /**\n   * @type {number}\n   */\n  cellWidth;\n\n  constructor(object, rootWindow) {\n    const windowScrollTop = rootWindow.scrollY;\n    const windowScrollLeft = rootWindow.scrollX;\n    let top;\n    let topRelative;\n    let left;\n    let leftRelative;\n    let cellHeight;\n    let cellWidth;\n\n    this.rootWindow = rootWindow;\n    this.type = this.getSourceType(object);\n\n    if (this.type === 'literal') {\n      top = parseInt(object.top, 10);\n      left = parseInt(object.left, 10);\n      cellHeight = object.height || 0;\n      cellWidth = object.width || 0;\n      topRelative = top;\n      leftRelative = left;\n      top += windowScrollTop;\n      left += windowScrollLeft;\n\n    } else if (this.type === 'event') {\n      top = parseInt(object.pageY, 10);\n      left = parseInt(object.pageX, 10);\n      cellHeight = object.target.clientHeight;\n      cellWidth = object.target.clientWidth;\n      topRelative = top - windowScrollTop;\n      leftRelative = left - windowScrollLeft;\n    }\n\n    this.top = top;\n    this.topRelative = topRelative;\n    this.left = left;\n    this.leftRelative = leftRelative;\n    this.scrollTop = windowScrollTop;\n    this.scrollLeft = windowScrollLeft;\n    this.cellHeight = cellHeight;\n    this.cellWidth = cellWidth;\n  }\n\n  /**\n   * Get source type name.\n   *\n   * @param {*} object Event or Object with coordinates.\n   * @returns {string} Returns one of this values: `'literal'`, `'event'`.\n   */\n  getSourceType(object) {\n    let type = 'literal';\n\n    if (object instanceof Event) {\n      type = 'event';\n    }\n\n    return type;\n  }\n\n  /**\n   * Checks if element can be placed above the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit above the cursor.\n   * @returns {boolean}\n   */\n  fitsAbove(element) {\n    return this.topRelative >= element.offsetHeight;\n  }\n\n  /**\n   * Checks if element can be placed below the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit below the cursor.\n   * @param {number} [viewportHeight] The viewport height.\n   * @returns {boolean}\n   */\n  fitsBelow(element, viewportHeight = this.rootWindow.innerHeight) {\n    return this.topRelative + element.offsetHeight <= viewportHeight;\n  }\n\n  /**\n   * Checks if element can be placed on the right of the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit on the right of the cursor.\n   * @param {number} [viewportWidth] The viewport width.\n   * @returns {boolean}\n   */\n  fitsOnRight(element, viewportWidth = this.rootWindow.innerWidth) {\n    return this.leftRelative + this.cellWidth + element.offsetWidth <= viewportWidth;\n  }\n\n  /**\n   * Checks if element can be placed on the left on the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit on the left of the cursor.\n   * @returns {boolean}\n   */\n  fitsOnLeft(element) {\n    return this.leftRelative >= element.offsetWidth;\n  }\n}\n","import { createPaginator } from '../../../utils/paginator';\nimport {\n  isSeparator,\n  isDisabled,\n  isSelectionDisabled,\n} from './utils';\n\n/**\n * Creates navigator for menus and submenus.\n *\n * @param {Handsontable} hotMenu The Handsontable instance of the menu.\n * @returns {Paginator}\n */\nexport function createMenuNavigator(hotMenu) {\n  return createPaginator({\n    size: () => hotMenu.countRows(),\n    onItemSelect(currentItem, directItemChange) {\n      const cell = hotMenu.getCell(currentItem, 0);\n\n      if (!cell || isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n        return false;\n      }\n\n      hotMenu.selectCell(currentItem, 0, ...(directItemChange ? [currentItem, 0, false, false] : []));\n    },\n    onClear() {\n      hotMenu.deselectCell();\n    }\n  });\n}\n","import { clamp } from '../helpers/number';\n\n/**\n * @typedef Paginator\n * @property {function(number): void} setCurrentPage Sets the current index to the specific page.\n * @property {function(): number} getCurrentPage Gets the current page.\n * @property {function(): number} getSize Gets the total number of pages.\n * @property {function(): void} toFirstItem Move the index to the first page.\n * @property {function(): void} toLastItem Move the index to the last page.\n * @property {function(): void} toNextItem Move the index to the next page.\n * @property {function(): void} toPreviousItem Move the index to the previous page.\n * @property {function(): void} clear Clear the internal state of the paginator.\n */\n/**\n * @param {object} options Paginator options.\n * @param {number} [options.initialPage] Initial index from which paging starts. Also, after clearing the paginator\n * the page is cleared to the initial page.\n * @param {function(): number} [options.size] Sets the max size of the pages.\n * @param {function(number): boolean | void} [options.onItemSelect] Fires the function on each page change.\n * @param {function(): void} [options.onClear] Fires the function after clearing the state.\n * @returns {Paginator}\n */\nexport function createPaginator({\n  initialPage = -1,\n  size = () => 0,\n  onItemSelect = () => {},\n  onClear = () => {},\n}) {\n  const visitedPages = new Set();\n  let currentIndex = clamp(initialPage, -1, getSize() - 1);\n\n  /**\n   * Updates the internal state of the paginator.\n   *\n   * @param {number} newIndex The page index to switch.\n   * @param {-1|1} direction The direction of traversing the pages in case when they are disabled.\n   * @returns {number} Returns the final index of the page.\n   */\n  function _updateState(newIndex, direction) {\n    const lastIndex = getSize() - 1;\n\n    if (newIndex < 0) {\n      newIndex = lastIndex;\n    }\n    if (newIndex > lastIndex) {\n      newIndex = 0;\n    }\n\n    if (visitedPages.has(newIndex)) {\n      return -1;\n    }\n\n    visitedPages.add(newIndex);\n\n    const changeProceed = onItemSelect(newIndex, false);\n\n    if (changeProceed === false) {\n      newIndex = _updateState(\n        direction === 1 ? ++newIndex : --newIndex, // eslint-disable-line no-plusplus\n        direction\n      );\n    }\n\n    return newIndex;\n  }\n\n  /**\n   * Sets the page index as current one.\n   *\n   * @param {number} index The index to set.\n   */\n  function setCurrentPage(index) {\n    if (index > -1 && index < getSize() && onItemSelect(index, true) !== false) {\n      currentIndex = index;\n    }\n  }\n\n  /**\n   * Gets the current page.\n   *\n   * @returns {number}\n   */\n  function getCurrentPage() {\n    return currentIndex;\n  }\n\n  /**\n   * Moves the index to the first page.\n   */\n  function toFirstItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(0, 1);\n    }\n  }\n\n  /**\n   * Moves the index to the last page.\n   */\n  function toLastItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(getSize() - 1, -1);\n    }\n  }\n\n  /**\n   * Moves the index to the next page.\n   */\n  function toNextItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(++currentIndex, 1); // eslint-disable-line no-plusplus\n    }\n  }\n\n  /**\n   * Moves the index to the previous page.\n   */\n  function toPreviousItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(--currentIndex, -1); // eslint-disable-line no-plusplus\n    }\n  }\n\n  /**\n   * Gets the total number of pages.\n   *\n   * @returns {number}\n   */\n  function getSize() {\n    return Math.max(size(), 0);\n  }\n\n  /**\n   * Clears the internal state of the paginator.\n   */\n  function clear() {\n    visitedPages.clear();\n    currentIndex = initialPage;\n    onClear();\n  }\n\n  return {\n    setCurrentPage,\n    getCurrentPage,\n    toFirstItem,\n    toLastItem,\n    toNextItem,\n    toPreviousItem,\n    getSize,\n    clear,\n  };\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport { hasOwnProperty } from '../../../helpers/object';\nimport { hasClass } from '../../../helpers/dom/element';\nimport { SEPARATOR } from './../predefinedItems';\n\n/**\n * @param {CellRange[]} selRanges An array of the cell ranges.\n * @returns {object[]}\n */\nexport function normalizeSelection(selRanges) {\n  return arrayMap(selRanges, range => ({\n    start: range.getTopStartCorner(),\n    end: range.getBottomEndCorner(),\n  }));\n}\n\n/**\n * Check if the provided element is a submenu opener.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemSubMenu(itemToTest) {\n  return hasOwnProperty(itemToTest, 'submenu');\n}\n\n/**\n * Check if the provided element is a menu separator.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemSeparator(itemToTest) {\n  return new RegExp(SEPARATOR, 'i').test(itemToTest.name);\n}\n\n/**\n * Check if the provided element presents the disabled menu item.\n *\n * @param {object} itemToTest Item element.\n * @param {object} hot The context for the item function.\n * @returns {boolean}\n */\nexport function isItemDisabled(itemToTest, hot) {\n  return itemToTest.disabled === true ||\n         (typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(hot) === true);\n}\n\n/**\n * Check if the provided element presents the disabled selection menu item.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemSelectionDisabled(itemToTest) {\n  return hasOwnProperty(itemToTest, 'disableSelection');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function isSeparator(cell) {\n  return hasClass(cell, 'htSeparator');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function hasSubMenu(cell) {\n  return hasClass(cell, 'htSubmenu');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function isDisabled(cell) {\n  return hasClass(cell, 'htDisabled');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function isSelectionDisabled(cell) {\n  return hasClass(cell, 'htSelectionDisabled');\n}\n\n/**\n * @param {object} item The object which describes the context menu item properties.\n * @param {Core} instance The Handsontable instance.\n * @returns {boolean}\n */\nexport function isItemHidden(item, instance) {\n  return !item.hidden || !(typeof item.hidden === 'function' && item.hidden.call(instance));\n}\n\n/**\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\nfunction shiftSeparators(items, separator) {\n  const result = items.slice(0);\n\n  for (let i = 0; i < result.length;) {\n    if (result[i].name === separator) {\n      result.shift();\n    } else {\n      break;\n    }\n  }\n\n  return result;\n}\n\n/**\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\nfunction popSeparators(items, separator) {\n  let result = items.slice(0);\n\n  result.reverse();\n  result = shiftSeparators(result, separator);\n  result.reverse();\n\n  return result;\n}\n\n/**\n * Removes duplicated menu separators from the context menu items collection.\n *\n * @param {object[]} items The context menu items collection.\n * @returns {object[]}\n */\nfunction removeDuplicatedSeparators(items) {\n  const result = [];\n\n  arrayEach(items, (value, index) => {\n    if (index > 0) {\n      if (result[result.length - 1].name !== value.name) {\n        result.push(value);\n      }\n    } else {\n      result.push(value);\n    }\n  });\n\n  return result;\n}\n\n/**\n * Removes menu separators from the context menu items collection.\n *\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\nexport function filterSeparators(items, separator = SEPARATOR) {\n  let result = items.slice(0);\n\n  result = shiftSeparators(result, separator);\n  result = popSeparators(result, separator);\n  result = removeDuplicatedSeparators(result);\n\n  return result;\n}\n\n/**\n * Check if the provided element presents the checkboxable menu item.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemCheckable(itemToTest) {\n  return itemToTest.checkable === true;\n}\n","import { createDefaultShortcutsList } from './defaultShortcutsList';\n\nconst SHORTCUTS_CONTEXT = 'menu';\nconst SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;\n\n/**\n * @typedef KeyboardShortcutsMenuController\n * @property {function(KeyboardShortcut[]): void} addCustomShortcuts Adds (by replacing) new keyboard shortcuts to the menu.\n * @property {function(string): number} getContext Gets the keyboard shortcuts context by name.\n * @property {function(string): void} listen Sets the active keyboard shortcuts context of the menu.\n */\n/**\n * Creates the controller object that allows extending the keyboard shortcuts of the menu.\n *\n * @param {Menu} menu The menu instance.\n * @param {Array<{ shortcuts: KeyboardShortcut, contextName: string }>} [customKeyboardShortcuts] The list of the custom keyboard shortcuts.\n * @returns {KeyboardShortcutsMenuController}\n */\nexport function createKeyboardShortcutsCtrl(menu, customKeyboardShortcuts = []) {\n  const customShortcuts = [];\n\n  _addShortcuts(createDefaultShortcutsList(menu));\n\n  customKeyboardShortcuts.forEach(({ shortcuts, contextName }) => {\n    addCustomShortcuts(shortcuts, contextName);\n  });\n\n  /**\n   * Adds keyboard shortcuts to the menu.\n   *\n   * @param {KeyboardShortcut[]} shortcuts Keyboard shortcuts to add.\n   * @param {string} [contextName] The context name to create or use.\n   */\n  function _addShortcuts(shortcuts, contextName) {\n    getContext(contextName).addShortcuts(shortcuts, {\n      group: SHORTCUTS_CONTEXT,\n    });\n  }\n\n  /**\n   * Adds custom keyboard shortcuts to the menu.\n   *\n   * @param {KeyboardShortcut[]} shortcuts Keyboard shortcuts to add.\n   * @param {string} [contextName] The context name to create or use.\n   */\n  function addCustomShortcuts(shortcuts, contextName) {\n    const context = getContext(contextName);\n\n    shortcuts.forEach(({ keys }) => {\n      keys.forEach(k => context.removeShortcutsByKeys(k));\n    });\n\n    customShortcuts.push({\n      shortcuts,\n      contextName,\n    });\n\n    _addShortcuts(shortcuts, contextName);\n  }\n\n  /**\n   * Gets all registered custom keyboard shortcuts.\n   *\n   * @returns {Array<{ shortcuts: KeyboardShortcut, contextName: string }>}\n   */\n  function getCustomShortcuts() {\n    return [...customShortcuts];\n  }\n\n  /**\n   * Gets the context name.\n   *\n   * @param {string} contextName The context name.\n   * @returns {string}\n   */\n  function _getContextName(contextName) {\n    return contextName ? `${SHORTCUTS_GROUP}:${contextName}` : SHORTCUTS_GROUP;\n  }\n\n  /**\n   * Gets the keyboard shortcut context by its name.\n   *\n   * @param {string} contextName The context name.\n   * @returns {object}\n   */\n  function getContext(contextName) {\n    const manager = menu.hotMenu.getShortcutManager();\n    const name = _getContextName(contextName);\n\n    return manager.getContext(name) ?? manager.addContext(name);\n  }\n\n  /**\n   * Makes the specified context active.\n   *\n   * @param {string} contextName The context name.\n   */\n  function listen(contextName) {\n    menu.hotMenu.getShortcutManager().setActiveContextName(_getContextName(contextName));\n  }\n\n  return {\n    addCustomShortcuts,\n    getCustomShortcuts,\n    getContext,\n    listen,\n  };\n}\n","/**\n * Creates a keyboard shortcuts list with default keyboards binds.\n *\n * @param {Menu} menu The main menu instance.\n * @returns {KeyboardShortcut[]}\n */\nexport function createDefaultShortcutsList(menu) {\n  const { hot, hotMenu } = menu;\n\n  return [{\n    keys: [['Control/Meta', 'A']],\n    forwardToContext: hot.getShortcutManager().getContext('grid'),\n    callback: () => menu.close(true)\n  }, {\n    keys: [['Tab'], ['Shift', 'Tab']],\n    callback: (event, keys) => {\n      const settings = hot.getSettings();\n      const tabMoves = typeof settings.tabMoves === 'function'\n        ? settings.tabMoves(event)\n        : settings.tabMoves;\n\n      if (keys.includes('shift')) {\n        hot.selection.transformStart(-tabMoves.row, -tabMoves.col);\n      } else {\n        hot.selection.transformStart(tabMoves.row, tabMoves.col);\n      }\n\n      menu.close(true);\n    },\n  }, {\n    keys: [['Escape']],\n    callback: () => menu.close(),\n  }, {\n    keys: [['ArrowDown']],\n    callback: () => menu.getNavigator().toNextItem(),\n  }, {\n    keys: [['ArrowUp']],\n    callback: () => menu.getNavigator().toPreviousItem(),\n  }, {\n    keys: [['ArrowRight']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection) {\n        const subMenu = menu.openSubMenu(selection[0]);\n\n        if (subMenu) {\n          subMenu.getNavigator().toFirstItem();\n        }\n      }\n    }\n  }, {\n    keys: [['ArrowLeft']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection && menu.isSubMenu()) {\n        menu.close();\n\n        if (menu.isSubMenu()) {\n          menu.parentMenu.hotMenu.listen();\n        }\n      }\n    },\n  }, {\n    keys: [['Control/Meta', 'ArrowUp'], ['Home']],\n    callback: () => menu.getNavigator().toFirstItem(),\n  }, {\n    keys: [['Control/Meta', 'ArrowDown'], ['End']],\n    callback: () => menu.getNavigator().toLastItem(),\n  }, {\n    keys: [['Enter'], ['Space']],\n    callback: (event) => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (!selection) {\n        return;\n      }\n\n      if (hotMenu.getSourceDataAtRow(selection[0]).submenu) {\n        menu.openSubMenu(selection[0]).getNavigator().toFirstItem();\n      } else {\n        menu.executeCommand(event);\n        menu.close(true);\n      }\n    }\n  }, {\n    keys: [['PageUp']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection) {\n        hotMenu.selection.transformStart(-hotMenu.countVisibleRows(), 0);\n      } else {\n        menu.getNavigator().toFirstItem();\n      }\n    },\n  }, {\n    keys: [['PageDown']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection) {\n        hotMenu.selection.transformStart(hotMenu.countVisibleRows(), 0);\n      } else {\n        menu.getNavigator().toLastItem();\n      }\n    },\n  }];\n}\n","import {\n  isItemSubMenu,\n  isItemDisabled,\n  isItemSelectionDisabled,\n  isItemSeparator,\n  isItemCheckable,\n} from './utils';\nimport {\n  addClass,\n  empty,\n  fastInnerHTML,\n  setAttribute,\n} from '../../../helpers/dom/element';\nimport {\n  A11Y_MENU_ITEM_CHECKBOX,\n  A11Y_DISABLED,\n  A11Y_EXPANDED,\n  A11Y_LABEL,\n  A11Y_MENU_ITEM,\n  A11Y_TABINDEX,\n  A11Y_CHECKED,\n} from '../../../helpers/a11y';\n\n/**\n * Creates the menu renderer function.\n *\n * @private\n * @param {Core} mainTableHot The main table Handsontable instance.\n * @returns {Function}\n */\nexport function createMenuItemRenderer(mainTableHot) {\n  /**\n   * Menu item renderer.\n   *\n   * @private\n   * @param {Core} menuHot The Handsontable instance.\n   * @param {HTMLCellElement} TD The rendered cell element.\n   * @param {number} row The visual index.\n   * @param {number} col The visual index.\n   * @param {string} prop The column property if used.\n   * @param {string} value The cell value.\n   */\n  return (menuHot, TD, row, col, prop, value) => {\n    const item = menuHot.getSourceDataAtRow(row);\n    const wrapper = mainTableHot.rootDocument.createElement('div');\n    const itemValue = typeof value === 'function' ? value.call(mainTableHot) : value;\n    const ariaLabel = typeof item.ariaLabel === 'function' ? item.ariaLabel.call(mainTableHot) : item.ariaLabel;\n    const ariaChecked = typeof item.ariaChecked === 'function' ? item.ariaChecked.call(mainTableHot) : item.ariaChecked;\n\n    empty(TD);\n    addClass(wrapper, 'htItemWrapper');\n\n    if (mainTableHot.getSettings().ariaTags) {\n      const isFocusable = !isItemDisabled(item, mainTableHot) &&\n        !isItemSelectionDisabled(item) &&\n        !isItemSeparator(item);\n\n      setAttribute(TD, [\n        ...(isItemCheckable(item) ? [\n          A11Y_MENU_ITEM_CHECKBOX(),\n          A11Y_LABEL(ariaLabel),\n          A11Y_CHECKED(ariaChecked)\n        ] : [\n          A11Y_MENU_ITEM(),\n          A11Y_LABEL(itemValue)\n        ]),\n        ...(isFocusable ? [A11Y_TABINDEX(-1)] : []),\n        ...(isItemDisabled(item, mainTableHot) ? [A11Y_DISABLED()] : []),\n        ...(isItemSubMenu(item) ? [A11Y_EXPANDED(false)] : []),\n      ]);\n    }\n\n    TD.className = '';\n    TD.appendChild(wrapper);\n\n    if (isItemSeparator(item)) {\n      addClass(TD, 'htSeparator');\n\n    } else if (typeof item.renderer === 'function') {\n      addClass(TD, 'htCustomMenuRenderer');\n      TD.appendChild(item.renderer(menuHot, wrapper, row, col, prop, itemValue));\n\n    } else {\n      fastInnerHTML(wrapper, itemValue);\n    }\n\n    if (isItemDisabled(item, mainTableHot)) {\n      addClass(TD, 'htDisabled');\n\n    } else if (isItemSelectionDisabled(item)) {\n      addClass(TD, 'htSelectionDisabled');\n\n    } else if (isItemSubMenu(item)) {\n      addClass(TD, 'htSubmenu');\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  CopyPaste,\n} from './copyPaste';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { stringify, parse } from '../../3rdparty/SheetClip';\nimport { arrayEach } from '../../helpers/array';\nimport { sanitize } from '../../helpers/string';\nimport {\n  removeContentEditableFromElementAndDeselect,\n  runWithSelectedContendEditableElement,\n  makeElementContentEditableAndSelectItsContent\n} from '../../helpers/dom/element';\nimport { isSafari } from '../../helpers/browser';\nimport copyItem from './contextMenuItem/copy';\nimport copyColumnHeadersOnlyItem from './contextMenuItem/copyColumnHeadersOnly';\nimport copyWithColumnGroupHeadersItem from './contextMenuItem/copyWithColumnGroupHeaders';\nimport copyWithColumnHeadersItem from './contextMenuItem/copyWithColumnHeaders';\nimport cutItem from './contextMenuItem/cut';\nimport PasteEvent from './pasteEvent';\nimport {\n  CopyableRangesFactory,\n  normalizeRanges,\n} from './copyableRanges';\nimport { _dataToHTML, htmlToGridSettings } from '../../utils/parseTable';\n\nimport './copyPaste.css';\n\nHooks.getSingleton().register('afterCopyLimit');\nHooks.getSingleton().register('modifyCopyableRange');\nHooks.getSingleton().register('beforeCut');\nHooks.getSingleton().register('afterCut');\nHooks.getSingleton().register('beforePaste');\nHooks.getSingleton().register('afterPaste');\nHooks.getSingleton().register('beforeCopy');\nHooks.getSingleton().register('afterCopy');\n\nexport const PLUGIN_KEY = 'copyPaste';\nexport const PLUGIN_PRIORITY = 80;\nconst SETTING_KEYS = ['fragmentSelection'];\nconst META_HEAD = [\n  '<meta name=\"generator\" content=\"Handsontable\"/>',\n  '<style type=\"text/css\">td{white-space:normal}br{mso-data-placement:same-cell}</style>',\n].join('');\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n * Copy, cut, and paste data by using the `CopyPaste` plugin.\n *\n * Control the `CopyPaste` plugin programmatically through its [API methods](#methods).\n *\n * The user can access the copy-paste features through:\n * - The [context menu](@/guides/cell-features/clipboard/clipboard.md#context-menu).\n * - The [keyboard shortcuts](@/guides/cell-features/clipboard/clipboard.md#related-keyboard-shortcuts).\n * - The browser's menu bar.\n *\n * Read more:\n * - [Guides: Clipboard](@/guides/cell-features/clipboard/clipboard.md)\n * - [Configuration options: `copyPaste`](@/api/options.md#copypaste)\n *\n * @example\n * ```js\n * // enable the plugin with the default configuration\n * copyPaste: true,\n *\n * // or, enable the plugin with a custom configuration\n * copyPaste: {\n *   columnsLimit: 25,\n *   rowsLimit: 50,\n *   pasteMode: 'shift_down',\n *   copyColumnHeaders: true,\n *   copyColumnGroupHeaders: true,\n *   copyColumnHeadersOnly: true,\n *   uiContainer: document.body,\n * },\n * ```\n * @class CopyPaste\n * @plugin CopyPaste\n */\nexport class CopyPaste extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * The maximum number of columns than can be copied to the clipboard.\n   *\n   * @type {number}\n   * @default Infinity\n   */\n  columnsLimit = Infinity;\n  /**\n   * The maximum number of rows than can be copied to the clipboard.\n   *\n   * @type {number}\n   * @default Infinity\n   */\n  rowsLimit = Infinity;\n  /**\n   * When pasting:\n   * - `'overwrite'` - overwrite the currently-selected cells\n   * - `'shift_down'` - move currently-selected cells down\n   * - `'shift_right'` - move currently-selected cells to the right\n   *\n   * @type {string}\n   * @default 'overwrite'\n   */\n  pasteMode = 'overwrite';\n  /**\n   * The UI container for the secondary focusable element.\n   *\n   * @type {HTMLElement}\n   */\n  uiContainer = this.hot.rootDocument.body;\n  /**\n   * Shows the \"Copy with headers\" item in the context menu and extends the context menu with the\n   * `'copy_with_column_headers'` option that can be used for creating custom menus arrangements.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  #enableCopyColumnHeaders = false;\n  /**\n   * Shows the \"Copy with group headers\" item in the context menu and extends the context menu with the\n   * `'copy_with_column_group headers'` option that can be used for creating custom menus arrangements.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  #enableCopyColumnGroupHeaders = false;\n  /**\n   * Shows the \"Copy headers only\" item in the context menu and extends the context menu with the\n   * `'copy_column_headers_only'` option that can be used for creating custom menus arrangements.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  #enableCopyColumnHeadersOnly = false;\n  /**\n   * Defines the data range to copy. Possible values:\n   *  * `'cells-only'` Copy selected cells only;\n   *  * `'column-headers-only'` Copy column headers only;\n   *  * `'with-column-group-headers'` Copy cells with all column headers;\n   *  * `'with-column-headers'` Copy cells with column headers;\n   *\n   * @type {'cells-only' | 'column-headers-only' | 'with-column-group-headers' | 'with-column-headers'}\n   */\n  #copyMode = 'cells-only';\n  /**\n   * Flag that is used to prevent copying when the native shortcut was not pressed.\n   *\n   * @type {boolean}\n   */\n  #isTriggeredByCopy = false;\n  /**\n   * Flag that is used to prevent cutting when the native shortcut was not pressed.\n   *\n   * @type {boolean}\n   */\n  #isTriggeredByCut = false;\n  /**\n   * Class that helps generate copyable ranges based on the current selection for different copy mode\n   * types.\n   *\n   * @type {CopyableRangesFactory}\n   */\n  #copyableRangesFactory = new CopyableRangesFactory({\n    countRows: () => this.hot.countRows(),\n    countColumns: () => this.hot.countCols(),\n    rowsLimit: () => this.rowsLimit,\n    columnsLimit: () => this.columnsLimit,\n    countColumnHeaders: () => this.hot.view.getColumnHeadersCount(),\n  });\n  /**\n   * Flag that indicates if the viewport scroll should be prevented after pasting the data.\n   *\n   * @type {boolean}\n   */\n  #preventViewportScrollOnPaste = false;\n  /**\n   * Ranges of the cells coordinates, which should be used to copy/cut/paste actions.\n   *\n   * @private\n   * @type {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>}\n   */\n  copyableRanges = [];\n\n  /**\n   * Checks if the [`CopyPaste`](#copypaste) plugin is enabled.\n   *\n   * This method gets called by Handsontable's [`beforeInit`](@/api/hooks.md#beforeinit) hook.\n   * If it returns `true`, the [`enablePlugin()`](#enableplugin) method gets called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n    const { [PLUGIN_KEY]: settings } = this.hot.getSettings();\n\n    if (typeof settings === 'object') {\n      this.pasteMode = settings.pasteMode ?? this.pasteMode;\n      this.rowsLimit = isNaN(settings.rowsLimit) ? this.rowsLimit : settings.rowsLimit;\n      this.columnsLimit = isNaN(settings.columnsLimit) ? this.columnsLimit : settings.columnsLimit;\n      this.#enableCopyColumnHeaders = !!settings.copyColumnHeaders;\n      this.#enableCopyColumnGroupHeaders = !!settings.copyColumnGroupHeaders;\n      this.#enableCopyColumnHeadersOnly = !!settings.copyColumnHeadersOnly;\n      this.uiContainer = settings.uiContainer ?? this.uiContainer;\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.#onAfterContextMenuDefaultOptions(options));\n    this.addHook('afterSelection', (...args) => this.#onAfterSelection(...args));\n    this.addHook('afterSelectionEnd', () => this.#onAfterSelectionEnd());\n\n    this.eventManager.addEventListener(this.hot.rootDocument, 'copy', (...args) => this.onCopy(...args));\n    this.eventManager.addEventListener(this.hot.rootDocument, 'cut', (...args) => this.onCut(...args));\n    this.eventManager.addEventListener(this.hot.rootDocument, 'paste', (...args) => this.onPaste(...args));\n\n    // Without this workaround Safari (tested on Safari@16.5.2) does allow copying/cutting from the browser menu.\n    if (isSafari()) {\n      this.eventManager.addEventListener(\n        this.hot.rootDocument.body, 'mouseenter', (...args) => this.#onSafariMouseEnter(...args)\n      );\n      this.eventManager.addEventListener(\n        this.hot.rootDocument.body, 'mouseleave', (...args) => this.#onSafariMouseLeave(...args)\n      );\n\n      this.addHook('afterSelection', () => this.#onSafariAfterSelection());\n    }\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the state of the [`CopyPaste`](#copypaste) plugin.\n   *\n   * Gets called when [`updateSettings()`](@/api/core.md#updatesettings)\n   * is invoked with any of the following configuration options:\n   *  - [`copyPaste`](@/api/options.md#copypaste)\n   *  - [`fragmentSelection`](@/api/options.md#fragmentselection)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n  }\n\n  /**\n   * Copies the contents of the selected cells (and/or their related column headers) to the system clipboard.\n   *\n   * Takes an optional parameter (`copyMode`) that defines the scope of copying:\n   *\n   * | `copyMode` value              | Description                                                     |\n   * | ----------------------------- | --------------------------------------------------------------- |\n   * | `'cells-only'` (default)      | Copy the selected cells                                         |\n   * | `'with-column-headers'`       | - Copy the selected cells<br>- Copy the nearest column headers  |\n   * | `'with-column-group-headers'` | - Copy the selected cells<br>- Copy all related columns headers |\n   * | `'column-headers-only'`       | Copy the nearest column headers (without copying cells)         |\n   *\n   * @param {string} [copyMode='cells-only'] Copy mode.\n   */\n  copy(copyMode = 'cells-only') {\n    this.#copyMode = copyMode;\n    this.#isTriggeredByCopy = true;\n\n    this.#ensureClipboardEventsGetTriggered('copy');\n  }\n\n  /**\n   * Copies the contents of the selected cells.\n   */\n  copyCellsOnly() {\n    this.copy('cells-only');\n  }\n  /**\n   * Copies the contents of column headers that are nearest to the selected cells.\n   */\n  copyColumnHeadersOnly() {\n    this.copy('column-headers-only');\n  }\n  /**\n   * Copies the contents of the selected cells and all their related column headers.\n   */\n  copyWithAllColumnHeaders() {\n    this.copy('with-column-group-headers');\n  }\n  /**\n   * Copies the contents of the selected cells and their nearest column headers.\n   */\n  copyWithColumnHeaders() {\n    this.copy('with-column-headers');\n  }\n\n  /**\n   * Cuts the contents of the selected cells to the system clipboard.\n   */\n  cut() {\n    this.#isTriggeredByCut = true;\n\n    this.#ensureClipboardEventsGetTriggered('cut');\n  }\n\n  /**\n   * Converts the contents of multiple ranges (`ranges`) into a single string.\n   *\n   * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges Array of objects with properties `startRow`, `endRow`, `startCol` and `endCol`.\n   * @returns {string} A string that will be copied to the clipboard.\n   */\n  getRangedCopyableData(ranges) {\n    return stringify(this.getRangedData(ranges));\n  }\n\n  /**\n   * Converts the contents of multiple ranges (`ranges`) into an array of arrays.\n   *\n   * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n   * @returns {Array[]} An array of arrays that will be copied to the clipboard.\n   */\n  getRangedData(ranges) {\n    const data = [];\n    const { rows, columns } = normalizeRanges(ranges);\n\n    // concatenate all rows and columns data defined in ranges into one copyable string\n    arrayEach(rows, (row) => {\n      const rowSet = [];\n\n      arrayEach(columns, (column) => {\n        if (row < 0) {\n          // `row` as the second argument acts here as the `headerLevel` argument\n          rowSet.push(this.hot.getColHeader(column, row));\n        } else {\n          rowSet.push(this.hot.getCopyableData(row, column));\n        }\n      });\n\n      data.push(rowSet);\n    });\n\n    return data;\n  }\n\n  /**\n   * Simulates the paste action.\n   *\n   * For security reasons, modern browsers don't allow reading from the system clipboard.\n   *\n   * @param {string} pastableText The value to paste, as a raw string.\n   * @param {string} [pastableHtml=''] The value to paste, as HTML.\n   */\n  paste(pastableText = '', pastableHtml = pastableText) {\n    if (!pastableText && !pastableHtml) {\n      return;\n    }\n\n    const pasteData = new PasteEvent();\n\n    if (pastableText) {\n      pasteData.clipboardData.setData('text/plain', pastableText);\n    }\n    if (pastableHtml) {\n      pasteData.clipboardData.setData('text/html', pastableHtml);\n    }\n\n    this.onPaste(pasteData);\n  }\n\n  /**\n   * Prepares copyable text from the cells selection in the invisible textarea.\n   */\n  setCopyableText() {\n    const selectionRange = this.hot.getSelectedRangeLast();\n\n    if (!selectionRange) {\n      return;\n    }\n\n    if (selectionRange.isSingleHeader()) {\n      this.copyableRanges = [];\n\n      return;\n    }\n\n    this.#copyableRangesFactory.setSelectedRange(selectionRange);\n\n    const groupedRanges = new Map([\n      ['headers', null],\n      ['cells', null],\n    ]);\n\n    if (this.#copyMode === 'column-headers-only') {\n      groupedRanges.set('headers', this.#copyableRangesFactory.getMostBottomColumnHeadersRange());\n\n    } else {\n      if (this.#copyMode === 'with-column-headers') {\n        groupedRanges.set('headers', this.#copyableRangesFactory.getMostBottomColumnHeadersRange());\n\n      } else if (this.#copyMode === 'with-column-group-headers') {\n        groupedRanges.set('headers', this.#copyableRangesFactory.getAllColumnHeadersRange());\n      }\n\n      groupedRanges.set('cells', this.#copyableRangesFactory.getCellsRange());\n    }\n\n    this.copyableRanges = Array.from(groupedRanges.values())\n      .filter(range => range !== null)\n      .map(({ startRow, startCol, endRow, endCol }) => ({ startRow, startCol, endRow, endCol }));\n\n    this.copyableRanges = this.hot.runHooks('modifyCopyableRange', this.copyableRanges);\n\n    const cellsRange = groupedRanges.get('cells');\n\n    if (cellsRange !== null && cellsRange.isRangeTrimmed) {\n      const {\n        startRow, startCol, endRow, endCol\n      } = cellsRange;\n\n      this.hot.runHooks('afterCopyLimit',\n        endRow - startRow + 1, endCol - startCol + 1, this.rowsLimit, this.columnsLimit);\n    }\n  }\n\n  /**\n   * Verifies if editor exists and is open.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isEditorOpened() {\n    return this.hot.getActiveEditor()?.isOpened();\n  }\n\n  /**\n   * Ensure that the `copy`/`cut` events get triggered properly in Safari.\n   *\n   * @param {string} eventName Name of the event to get triggered.\n   */\n  #ensureClipboardEventsGetTriggered(eventName) {\n    // Without this workaround Safari (tested on Safari@16.5.2) does not trigger the 'copy' event.\n    if (isSafari()) {\n      const lastSelectedRange = this.hot.getSelectedRangeLast();\n\n      if (lastSelectedRange) {\n        const { row: highlightRow, col: highlightColumn } = lastSelectedRange.highlight;\n        const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);\n\n        if (currentlySelectedCell) {\n          runWithSelectedContendEditableElement(currentlySelectedCell, () => {\n            this.hot.rootDocument.execCommand(eventName);\n          });\n        }\n      }\n\n    } else {\n      this.hot.rootDocument.execCommand(eventName);\n    }\n  }\n\n  /**\n   * Counts how many column headers will be copied based on the passed range.\n   *\n   * @private\n   * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n   * @returns {{ columnHeadersCount: number }} Returns an object with keys that holds\n   *                                           information with the number of copied headers.\n   */\n  #countCopiedHeaders(ranges) {\n    const { rows } = normalizeRanges(ranges);\n    let columnHeadersCount = 0;\n\n    for (let row = 0; row < rows.length; row++) {\n      if (rows[row] >= 0) {\n        break;\n      }\n\n      columnHeadersCount += 1;\n    }\n\n    return {\n      columnHeadersCount,\n    };\n  }\n\n  /**\n   * Prepares new values to populate them into datasource.\n   *\n   * @private\n   * @param {Array} inputArray An array of the data to populate.\n   * @param {Array} [selection] The selection which indicates from what position the data will be populated.\n   * @returns {Array} Range coordinates after populate data.\n   */\n  populateValues(inputArray, selection = this.hot.getSelectedRangeLast()) {\n    if (!inputArray.length) {\n      return;\n    }\n\n    const populatedRowsLength = inputArray.length;\n    const populatedColumnsLength = inputArray[0].length;\n    const newRows = [];\n\n    const { row: startRow, col: startColumn } = selection.getTopStartCorner();\n    const { row: endRowFromSelection, col: endColumnFromSelection } = selection.getBottomEndCorner();\n\n    let visualRowForPopulatedData = startRow;\n    let visualColumnForPopulatedData = startColumn;\n    let lastVisualRow = startRow;\n    let lastVisualColumn = startColumn;\n\n    // We try to populate just all copied data or repeat copied data within a selection. Please keep in mind that we\n    // don't know whether populated data is bigger than selection on start as there are some cells for which values\n    // should be not inserted (it's known right after getting cell meta).\n    while (newRows.length < populatedRowsLength || visualRowForPopulatedData <= endRowFromSelection) {\n      const { skipRowOnPaste, visualRow } = this.hot.getCellMeta(visualRowForPopulatedData, startColumn);\n\n      visualRowForPopulatedData = visualRow + 1;\n\n      if (skipRowOnPaste === true) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      lastVisualRow = visualRow;\n      visualColumnForPopulatedData = startColumn;\n\n      const newRow = [];\n      const insertedRow = newRows.length % populatedRowsLength;\n\n      while (newRow.length < populatedColumnsLength || visualColumnForPopulatedData <= endColumnFromSelection) {\n        const { skipColumnOnPaste, visualCol } = this.hot.getCellMeta(startRow, visualColumnForPopulatedData);\n\n        visualColumnForPopulatedData = visualCol + 1;\n\n        if (skipColumnOnPaste === true) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n\n        lastVisualColumn = visualCol;\n        const insertedColumn = newRow.length % populatedColumnsLength;\n\n        newRow.push(inputArray[insertedRow][insertedColumn]);\n      }\n\n      newRows.push(newRow);\n    }\n\n    this.#preventViewportScrollOnPaste = true;\n    this.hot.populateFromArray(startRow, startColumn, newRows, undefined, undefined, 'CopyPaste.paste', this.pasteMode);\n\n    return [startRow, startColumn, lastVisualRow, lastVisualColumn];\n  }\n\n  /**\n   * Add the `contenteditable` attribute to the highlighted cell and select its content.\n   */\n  #addContentEditableToHighlightedCell() {\n    if (this.hot.isListening()) {\n      const lastSelectedRange = this.hot.getSelectedRangeLast();\n\n      if (lastSelectedRange) {\n        const { row: highlightRow, col: highlightColumn } = lastSelectedRange.highlight;\n        const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);\n\n        if (currentlySelectedCell) {\n          makeElementContentEditableAndSelectItsContent(currentlySelectedCell);\n        }\n      }\n    }\n  }\n\n  /**\n   * Remove the `contenteditable` attribute from the highlighted cell and deselect its content.\n   */\n  #removeContentEditableFromHighlightedCell() {\n    // If the instance is not listening, the workaround is not needed.\n    if (this.hot.isListening()) {\n      const lastSelectedRange = this.hot.getSelectedRangeLast();\n\n      if (lastSelectedRange) {\n        const { row: highlightRow, col: highlightColumn } = lastSelectedRange.highlight;\n        const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);\n\n        if (currentlySelectedCell?.hasAttribute('contenteditable')) {\n          removeContentEditableFromElementAndDeselect(currentlySelectedCell);\n        }\n      }\n    }\n  }\n\n  /**\n   * `copy` event callback on textarea element.\n   *\n   * @param {Event} event ClipboardEvent.\n   * @private\n   */\n  onCopy(event) {\n    const focusedElement = this.hot.getFocusManager().getRefocusElement();\n    const isHotInput = event.target?.hasAttribute('data-hot-input');\n\n    if (\n      !this.hot.isListening() && !this.#isTriggeredByCopy ||\n      this.isEditorOpened() ||\n      event.target instanceof HTMLElement && (\n        isHotInput && event.target !== focusedElement ||\n        !isHotInput && event.target !== this.hot.rootDocument.body\n      )\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n    this.setCopyableText();\n    this.#isTriggeredByCopy = false;\n\n    const data = this.getRangedData(this.copyableRanges);\n    const copiedHeadersCount = this.#countCopiedHeaders(this.copyableRanges);\n    const allowCopying = !!this.hot.runHooks('beforeCopy', data, this.copyableRanges, copiedHeadersCount);\n\n    if (allowCopying) {\n      const textPlain = stringify(data);\n\n      if (event && event.clipboardData) {\n        const textHTML = _dataToHTML(data, this.hot.rootDocument);\n\n        event.clipboardData.setData('text/plain', textPlain);\n        event.clipboardData.setData('text/html', [META_HEAD, textHTML].join(''));\n\n      } else if (typeof ClipboardEvent === 'undefined') {\n        this.hot.rootWindow.clipboardData.setData('Text', textPlain);\n      }\n\n      this.hot.runHooks('afterCopy', data, this.copyableRanges, copiedHeadersCount);\n    }\n\n    this.#copyMode = 'cells-only';\n  }\n\n  /**\n   * `cut` event callback on textarea element.\n   *\n   * @param {Event} event ClipboardEvent.\n   * @private\n   */\n  onCut(event) {\n    const focusedElement = this.hot.getFocusManager().getRefocusElement();\n    const isHotInput = event.target?.hasAttribute('data-hot-input');\n\n    if (\n      !this.hot.isListening() && !this.#isTriggeredByCut ||\n      this.isEditorOpened() ||\n      event.target instanceof HTMLElement && (\n        isHotInput && event.target !== focusedElement ||\n        !isHotInput && event.target !== this.hot.rootDocument.body\n      )\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n    this.setCopyableText();\n    this.#isTriggeredByCut = false;\n\n    const rangedData = this.getRangedData(this.copyableRanges);\n    const allowCuttingOut = !!this.hot.runHooks('beforeCut', rangedData, this.copyableRanges);\n\n    if (allowCuttingOut) {\n      const textPlain = stringify(rangedData);\n\n      if (event && event.clipboardData) {\n        const textHTML = _dataToHTML(rangedData, this.hot.rootDocument);\n\n        event.clipboardData.setData('text/plain', textPlain);\n        event.clipboardData.setData('text/html', [META_HEAD, textHTML].join(''));\n\n      } else if (typeof ClipboardEvent === 'undefined') {\n        this.hot.rootWindow.clipboardData.setData('Text', textPlain);\n      }\n\n      this.hot.emptySelectedCells('CopyPaste.cut');\n      this.hot.runHooks('afterCut', rangedData, this.copyableRanges);\n    }\n  }\n\n  /**\n   * `paste` event callback on textarea element.\n   *\n   * @param {Event} event ClipboardEvent or pseudo ClipboardEvent, if paste was called manually.\n   * @private\n   */\n  onPaste(event) {\n    const focusedElement = this.hot.getFocusManager().getRefocusElement();\n    const isHotInput = event.target?.hasAttribute('data-hot-input');\n\n    if (\n      !this.hot.isListening() ||\n      this.isEditorOpened() ||\n      !this.hot.getSelected() ||\n      event.target instanceof HTMLElement && (\n        isHotInput && event.target !== focusedElement ||\n        !isHotInput && event.target !== this.hot.rootDocument.body\n      )\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n\n    let pastedData;\n\n    if (event && typeof event.clipboardData !== 'undefined') {\n      const textHTML = sanitize(event.clipboardData.getData('text/html'), {\n        ADD_TAGS: ['meta'],\n        ADD_ATTR: ['content'],\n        FORCE_BODY: true,\n      });\n\n      if (textHTML && /(<table)|(<TABLE)/g.test(textHTML)) {\n        const parsedConfig = htmlToGridSettings(textHTML, this.hot.rootDocument);\n\n        pastedData = parsedConfig.data;\n      } else {\n        pastedData = event.clipboardData.getData('text/plain');\n      }\n\n    } else if (typeof ClipboardEvent === 'undefined' && typeof this.hot.rootWindow.clipboardData !== 'undefined') {\n      pastedData = this.hot.rootWindow.clipboardData.getData('Text');\n    }\n\n    if (typeof pastedData === 'string') {\n      pastedData = parse(pastedData);\n    }\n\n    if (pastedData === void 0 || pastedData && pastedData.length === 0) {\n      return;\n    }\n\n    if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {\n      return;\n    }\n\n    const [startRow, startColumn, endRow, endColumn] = this.populateValues(pastedData);\n\n    this.hot.selectCell(\n      startRow,\n      startColumn,\n      Math.min(this.hot.countRows() - 1, endRow),\n      Math.min(this.hot.countCols() - 1, endColumn),\n    );\n\n    this.hot.runHooks('afterPaste', pastedData, this.copyableRanges);\n  }\n\n  /**\n   * Add copy and cut options to the Context Menu.\n   *\n   * @param {object} options Contains default added options of the Context Menu.\n   */\n  #onAfterContextMenuDefaultOptions(options) {\n    options.items.push(\n      { name: '---------' },\n      copyItem(this),\n    );\n\n    if (this.#enableCopyColumnHeaders) {\n      options.items.push(\n        copyWithColumnHeadersItem(this),\n      );\n    }\n    if (this.#enableCopyColumnGroupHeaders) {\n      options.items.push(\n        copyWithColumnGroupHeadersItem(this),\n      );\n    }\n    if (this.#enableCopyColumnHeadersOnly) {\n      options.items.push(\n        copyColumnHeadersOnlyItem(this),\n      );\n    }\n\n    options.items.push(cutItem(this));\n  }\n\n  /**\n   * Disables the viewport scroll after pasting the data.\n   *\n   * @param {number} fromRow Selection start row visual index.\n   * @param {number} fromColumn Selection start column visual index.\n   * @param {number} toRow Selection end row visual index.\n   * @param {number} toColumn Selection end column visual index.\n   * @param {object} preventScrolling Object with `value` property. If `true`, the viewport scroll will be prevented.\n   */\n  #onAfterSelection(fromRow, fromColumn, toRow, toColumn, preventScrolling) {\n    if (this.#preventViewportScrollOnPaste) {\n      preventScrolling.value = true;\n    }\n\n    this.#preventViewportScrollOnPaste = false;\n  }\n\n  /**\n   * Force focus on focusableElement after end of the selection.\n   */\n  #onAfterSelectionEnd() {\n    if (this.isEditorOpened()) {\n      return;\n    }\n\n    if (this.hot.getSettings().fragmentSelection) {\n      return;\n    }\n\n    this.setCopyableText();\n  }\n\n  /**\n   * `document.body` `mouseenter` callback used to work around a Safari's problem with copying/cutting from the\n   * browser's menu.\n   */\n  #onSafariMouseEnter() {\n    this.#removeContentEditableFromHighlightedCell();\n  }\n\n  /**\n   * `document.body` `mouseleave` callback used to work around a Safari's problem with copying/cutting from the\n   * browser's menu.\n   */\n  #onSafariMouseLeave() {\n    this.#addContentEditableToHighlightedCell();\n  }\n\n  /**\n   * `afterSelection` hook callback triggered only on Safari.\n   */\n  #onSafariAfterSelection() {\n    this.#removeContentEditableFromHighlightedCell();\n  }\n\n  /**\n   * Destroys the `CopyPaste` plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { CONTEXTMENU_ITEMS_COPY } from '../../../i18n/constants';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyItem(copyPastePlugin) {\n  return {\n    key: 'copy',\n    name() {\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY);\n    },\n    callback() {\n      copyPastePlugin.copyCellsOnly();\n    },\n    disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import { CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY } from '../../../i18n/constants';\nimport { clamp } from '../../../helpers/number';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyColumnHeadersOnlyItem(copyPastePlugin) {\n  return {\n    key: 'copy_column_headers_only',\n    name() {\n      const selectedRange = this.getSelectedRangeLast();\n      const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;\n\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY, nounForm);\n    },\n    callback() {\n      copyPastePlugin.copyColumnHeadersOnly();\n    },\n    disabled() {\n      if (!this.hasColHeaders()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS } from '../../../i18n/constants';\nimport { clamp } from '../../../helpers/number';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyWithColumnGroupHeadersItem(copyPastePlugin) {\n  return {\n    key: 'copy_with_column_group_headers',\n    name() {\n      const selectedRange = this.getSelectedRangeLast();\n      const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;\n\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS, nounForm);\n    },\n    callback() {\n      copyPastePlugin.copyWithAllColumnHeaders();\n    },\n    disabled() {\n      if (!this.hasColHeaders() || !this.getSettings().nestedHeaders) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS } from '../../../i18n/constants';\nimport { clamp } from '../../../helpers/number';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyWithColumnHeadersItem(copyPastePlugin) {\n  return {\n    key: 'copy_with_column_headers',\n    name() {\n      const selectedRange = this.getSelectedRangeLast();\n      const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;\n\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS, nounForm);\n    },\n    callback() {\n      copyPastePlugin.copyWithColumnHeaders();\n    },\n    disabled() {\n      if (!this.hasColHeaders()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function cutItem(copyPastePlugin) {\n  return {\n    key: 'cut',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CUT);\n    },\n    callback() {\n      copyPastePlugin.cut();\n    },\n    disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiquous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import ClipboardData from './clipboardData';\n\n/**\n * @private\n */\nexport default class PasteEvent {\n  constructor() {\n    this.clipboardData = new ClipboardData();\n  }\n  preventDefault() {}\n}\n","/**\n * @private\n */\nexport default class ClipboardData {\n  constructor() {\n    this.data = {};\n  }\n  setData(type, value) {\n    this.data[type] = value;\n  }\n  getData(type) {\n    return this.data[type] || void 0;\n  }\n}\n","import { arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\n\n/**\n * The utils class produces the selection ranges in the `{startRow, startCol, endRow, endCol}` format\n * based on the current table selection. The CopyPaste plugin consumes that ranges to generate\n * appropriate data ready to copy to the clipboard.\n *\n * @private\n */\nexport class CopyableRangesFactory {\n  /**\n   * @type {CellRange}\n   */\n  #selectedRange;\n  /**\n   * @type {function(): number}\n   */\n  #countRows;\n  /**\n   * @type {function(): number}\n   */\n  #countColumns;\n  /**\n   * @type {function(): number}\n   */\n  #rowsLimit;\n  /**\n   * @type {function(): number}\n   */\n  #columnsLimit;\n  /**\n   * @type {function(): number}\n   */\n  #countColumnHeaders;\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @param {{\n   *   countRows: function(): number,\n   *   countColumns: function(): number,\n   *   rowsLimit: function(): number,\n   *   columnsLimit: function(): number,\n   *   countColumnHeaders: function(): number\n   * }} dependencies The utils class dependencies.\n   */\n  constructor({ countRows, countColumns, rowsLimit, columnsLimit, countColumnHeaders }) {\n    this.#countRows = countRows;\n    this.#countColumns = countColumns;\n    this.#rowsLimit = rowsLimit;\n    this.#columnsLimit = columnsLimit;\n    this.#countColumnHeaders = countColumnHeaders;\n  }\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  /**\n   * Sets the selection range to be processed.\n   *\n   * @param {CellRange} selectedRange The selection range represented by the CellRange class.\n   */\n  setSelectedRange(selectedRange) {\n    this.#selectedRange = selectedRange;\n  }\n\n  /**\n   * Returns a new coords object within the dataset range (cells) with `startRow`, `startCol`, `endRow`\n   * and `endCol` keys.\n   *\n   * @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}\n   */\n  getCellsRange() {\n    if (this.#countRows() === 0 || this.#countColumns() === 0) {\n      return null;\n    }\n\n    const {\n      row: startRow,\n      col: startCol,\n    } = this.#selectedRange.getTopStartCorner();\n    const {\n      row: endRow,\n      col: endCol,\n    } = this.#selectedRange.getBottomEndCorner();\n\n    const finalEndRow = this.#trimRowsRange(startRow, endRow);\n    const finalEndCol = this.#trimColumnsRange(startCol, endCol);\n    const isRangeTrimmed = endRow !== finalEndRow || endCol !== finalEndCol;\n\n    return {\n      isRangeTrimmed,\n      startRow,\n      startCol,\n      endRow: finalEndRow,\n      endCol: finalEndCol,\n    };\n  }\n\n  /**\n   * Returns a new coords object within the most-bottom column headers range with `startRow`,\n   * `startCol`, `endRow` and `endCol` keys.\n   *\n   * @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}\n   */\n  getMostBottomColumnHeadersRange() {\n    if (this.#countColumns() === 0 || this.#countColumnHeaders() === 0) {\n      return null;\n    }\n\n    const {\n      col: startCol,\n    } = this.#selectedRange.getTopStartCorner();\n    const {\n      col: endCol,\n    } = this.#selectedRange.getBottomEndCorner();\n\n    const finalEndCol = this.#trimColumnsRange(startCol, endCol);\n    const isRangeTrimmed = endCol !== finalEndCol;\n\n    return {\n      isRangeTrimmed,\n      startRow: -1,\n      startCol,\n      endRow: -1,\n      endCol: finalEndCol,\n    };\n  }\n\n  /**\n   * Returns a new coords object within all column headers layers (including nested headers) range with\n   * `startRow`, `startCol`, `endRow` and `endCol` keys.\n   *\n   * @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}\n   */\n  getAllColumnHeadersRange() {\n    if (this.#countColumns() === 0 || this.#countColumnHeaders() === 0) {\n      return null;\n    }\n\n    const {\n      col: startCol,\n    } = this.#selectedRange.getTopStartCorner();\n    const {\n      col: endCol,\n    } = this.#selectedRange.getBottomEndCorner();\n\n    const finalEndCol = this.#trimColumnsRange(startCol, endCol);\n    const isRangeTrimmed = endCol !== finalEndCol;\n\n    return {\n      isRangeTrimmed,\n      startRow: -this.#countColumnHeaders(),\n      startCol,\n      endRow: -1,\n      endCol: finalEndCol,\n    };\n  }\n\n  /**\n   * Trimmed the columns range to the limit.\n   *\n   * @param {*} startColumn The lowest column index in the range.\n   * @param {*} endColumn The highest column index in the range.\n   * @returns {number} Returns trimmed column index if it exceeds the limit.\n   */\n  #trimColumnsRange(startColumn, endColumn) {\n    return Math.min(endColumn, Math.max(startColumn + this.#columnsLimit() - 1, startColumn));\n  }\n\n  /**\n   * Trimmed the rows range to the limit.\n   *\n   * @param {*} startRow The lowest row index in the range.\n   * @param {*} endRow The highest row index in the range.\n   * @returns {number} Returns trimmed row index if it exceeds the limit.\n   */\n  #trimRowsRange(startRow, endRow) {\n    return Math.min(endRow, Math.max(startRow + this.#rowsLimit() - 1, startRow));\n  }\n}\n\n/**\n * Returns an object with `rows` and `columns` keys. The arrays contains sorted indexes\n * generated according to the given `ranges` array.\n *\n * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges The range to process.\n * @returns {{rows: number[], columns: number[]}}\n */\nexport function normalizeRanges(ranges) {\n  const rows = [];\n  const columns = [];\n\n  arrayEach(ranges, (range) => {\n    const minRow = Math.min(range.startRow, range.endRow);\n    const maxRow = Math.max(range.startRow, range.endRow);\n\n    rangeEach(minRow, maxRow, (row) => {\n      if (rows.indexOf(row) === -1) {\n        rows.push(row);\n      }\n    });\n\n    const minColumn = Math.min(range.startCol, range.endCol);\n    const maxColumn = Math.max(range.startCol, range.endCol);\n\n    rangeEach(minColumn, maxColumn, (column) => {\n      if (columns.indexOf(column) === -1) {\n        columns.push(column);\n      }\n    });\n  });\n\n  return {\n    rows,\n    columns,\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  CustomBorders,\n} from './customBorders';\n","import { BasePlugin } from '../base';\nimport { hasOwnProperty, deepClone } from '../../helpers/object';\nimport { rangeEach } from '../../helpers/number';\nimport { arrayEach, arrayReduce, arrayMap } from '../../helpers/array';\nimport * as C from '../../i18n/constants';\nimport {\n  top as menuItemTop,\n  bottom as menuItemBottom,\n  left as menuItemLeft,\n  right as menuItemRight,\n  noBorders as menuItemNoBorders,\n} from './contextMenuItem';\nimport {\n  createId,\n  createDefaultCustomBorder,\n  createSingleEmptyBorder,\n  createEmptyBorders,\n  extendDefaultBorder,\n  hasLeftRightTypeOptions,\n  hasStartEndTypeOptions,\n  toInlinePropName,\n  normalizeBorder,\n  denormalizeBorder,\n} from './utils';\nimport { detectSelectionType, normalizeSelectionFactory } from '../../selection';\n\nexport const PLUGIN_KEY = 'customBorders';\nexport const PLUGIN_PRIORITY = 90;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin CustomBorders\n * @class CustomBorders\n *\n * @description\n * This plugin enables an option to apply custom borders through the context menu (configurable with context menu key\n * `borders`).\n *\n * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form\n * of an array.\n *\n * See [`customBorders` configuration option](@/api/options.md#customBorders) or go to\n * [Custom cell borders demo](@/guides/cell-features/formatting-cells/formatting-cells.md#custom-cell-borders) for more examples.\n *\n * @example\n * ```js\n * customBorders: [\n *   {\n *    range: {\n *      from: {\n *        row: 1,\n *        col: 1\n *      },\n *      to: {\n *        row: 3,\n *        col: 4\n *      },\n *    },\n *    start: {},\n *    end: {},\n *    top: {},\n *    bottom: {},\n *   },\n * ],\n *\n * // or\n * customBorders: [\n *   { row: 2,\n *     col: 2,\n *     start: {\n *       width: 2,\n *       color: 'red',\n *     },\n *     end: {\n *       width: 1,\n *       color: 'green',\n *     },\n *     top: '',\n *     bottom: '',\n *   }\n * ],\n * ```\n */\nexport class CustomBorders extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Saved borders.\n   *\n   * @private\n   * @type {Array}\n   */\n  savedBorders = [];\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link CustomBorders#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.#onAfterContextMenuDefaultOptions(options));\n    this.addHook('init', () => this.#onAfterInit());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hideBorders();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`customBorders`](@/api/options.md#customborders)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.changeBorderSettings();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Set custom borders.\n   *\n   * @example\n   * ```js\n   * const customBordersPlugin = hot.getPlugin('customBorders');\n   *\n   * // Using an array of arrays (produced by `.getSelected()` method).\n   * customBordersPlugin.setBorders([[1, 1, 2, 2], [6, 2, 0, 2]], {start: {width: 2, color: 'blue'}});\n   *\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * //  Selecting a cell range.\n   * hot.selectCell(0, 0, 2, 2);\n   * // Returning selected cells' range with the getSelectedRange method.\n   * customBordersPlugin.setBorders(hot.getSelectedRange(), {start: {hide: false, width: 2, color: 'blue'}});\n   * ```\n   *\n   * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n   * @param {object} borderObject Object with `top`, `right`, `bottom` and `start` properties.\n   */\n  setBorders(selectionRanges, borderObject) {\n    let borderKeys = ['top', 'bottom', 'start', 'end'];\n    let normBorder = null;\n\n    if (borderObject) {\n      this.checkSettingsCohesion([borderObject]);\n\n      borderKeys = Object.keys(borderObject);\n      normBorder = normalizeBorder(borderObject);\n    }\n\n    const selectionType = detectSelectionType(selectionRanges);\n    const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n      createCellCoords: this.hot._createCellCoords.bind(this.hot),\n      createCellRange: this.hot._createCellRange.bind(this.hot),\n    });\n\n    arrayEach(selectionRanges, (selection) => {\n      selectionSchemaNormalizer(selection).forAll((row, col) => {\n        arrayEach(borderKeys, (borderKey) => {\n          this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));\n        });\n      });\n    });\n\n    /*\n    The line below triggers a re-render of Handsontable. This will be a \"fastDraw\"\n    render, because that is the default for the TableView class.\n\n    The re-render is needed for borders on cells that did not have a border before.\n    The way this call works is that it calls Table.refreshSelections, which calls\n    Selection.getBorder, which creates a new instance of Border.\n\n    Seems wise to keep this single-direction flow of creating new Borders\n    */\n    this.hot.view.render();\n  }\n\n  /**\n   * Get custom borders.\n   *\n   * @example\n   * ```js\n   * const customBordersPlugin = hot.getPlugin('customBorders');\n   *\n   * // Using an array of arrays (produced by `.getSelected()` method).\n   * customBordersPlugin.getBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * customBordersPlugin.getBorders(hot.getSelectedRange());\n   * // Using without param - return all customBorders.\n   * customBordersPlugin.getBorders();\n   * ```\n   *\n   * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n   * @returns {object[]} Returns array of border objects.\n   */\n  getBorders(selectionRanges) {\n    if (!Array.isArray(selectionRanges)) {\n      return this.savedBorders;\n    }\n\n    const selectionType = detectSelectionType(selectionRanges);\n    const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n      createCellCoords: this.hot._createCellCoords.bind(this.hot),\n      createCellRange: this.hot._createCellRange.bind(this.hot),\n    });\n    const selectedBorders = [];\n\n    arrayEach(selectionRanges, (selection) => {\n      selectionSchemaNormalizer(selection).forAll((row, col) => {\n        arrayEach(this.savedBorders, (border) => {\n          if (border.row === row && border.col === col) {\n            selectedBorders.push(denormalizeBorder(border));\n          }\n        });\n      });\n    });\n\n    return selectedBorders;\n  }\n\n  /**\n   * Clear custom borders.\n   *\n   * @example\n   * ```js\n   * const customBordersPlugin = hot.getPlugin('customBorders');\n   *\n   * // Using an array of arrays (produced by `.getSelected()` method).\n   * customBordersPlugin.clearBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * customBordersPlugin.clearBorders(hot.getSelectedRange());\n   * // Using without param - clear all customBorders.\n   * customBordersPlugin.clearBorders();\n   * ```\n   *\n   * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n   */\n  clearBorders(selectionRanges) {\n    if (selectionRanges) {\n      this.setBorders(selectionRanges);\n\n    } else {\n      arrayEach(this.savedBorders, (border) => {\n        this.clearBordersFromSelectionSettings(border.id);\n        this.clearNullCellRange();\n        this.hot.removeCellMeta(border.row, border.col, 'borders');\n      });\n\n      this.savedBorders.length = 0;\n    }\n  }\n\n  /**\n   * Insert WalkontableSelection instance into Walkontable settings.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @param {string} [place] Coordinate where add/remove border - `top`, `bottom`, `start`, `end`.\n   */\n  insertBorderIntoSettings(border, place) {\n    const hasSavedBorders = this.checkSavedBorders(border);\n\n    if (!hasSavedBorders) {\n      this.savedBorders.push(border);\n    }\n\n    const visualCellRange = this.hot._createCellRange(this.hot._createCellCoords(border.row, border.col));\n    const hasCustomSelections = this.checkCustomSelections(border, visualCellRange, place);\n\n    if (!hasCustomSelections) {\n      this.hot.selection.highlight.addCustomSelection({ border, visualCellRange });\n    }\n  }\n\n  /**\n   * Prepare borders from setting (single cell).\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} borderDescriptor Object with `row` and `col`, `start`, `end`, `top` and `bottom` properties.\n   * @param {string} [place] Coordinate where add/remove border - `top`, `bottom`, `start`, `end`.\n   */\n  prepareBorderFromCustomAdded(row, column, borderDescriptor, place) {\n    const nrOfRows = this.hot.countRows();\n    const nrOfColumns = this.hot.countCols();\n\n    if (row >= nrOfRows || column >= nrOfColumns) {\n      return;\n    }\n\n    let border = createEmptyBorders(row, column);\n\n    if (borderDescriptor) {\n      border = extendDefaultBorder(border, borderDescriptor);\n\n      arrayEach(this.hot.selection.highlight.customSelections, (customSelection) => {\n        if (border.id === customSelection.settings.id) {\n          Object.assign(customSelection.settings, borderDescriptor);\n\n          border.id = customSelection.settings.id;\n          border.top = customSelection.settings.top;\n          border.bottom = customSelection.settings.bottom;\n          border.start = customSelection.settings.start;\n          border.end = customSelection.settings.end;\n\n          return false; // breaks forAll\n        }\n      });\n    }\n\n    this.hot.setCellMeta(row, column, 'borders', denormalizeBorder(border));\n    this.insertBorderIntoSettings(border, place);\n  }\n\n  /**\n   * Prepare borders from setting (object).\n   *\n   * @private\n   * @param {object} range {CellRange} The CellRange object.\n   * @param {object} customBorder Object with `start`, `end`, `top` and `bottom` properties.\n   */\n  prepareBorderFromCustomAddedRange(range, customBorder) {\n    const lastRowIndex = Math.min(range.to.row, this.hot.countRows() - 1);\n    const lastColumnIndex = Math.min(range.to.col, this.hot.countCols() - 1);\n\n    rangeEach(range.from.row, lastRowIndex, (rowIndex) => {\n      rangeEach(range.from.col, lastColumnIndex, (colIndex) => {\n        const border = createEmptyBorders(rowIndex, colIndex);\n        let add = 0;\n\n        if (rowIndex === range.from.row) {\n          if (hasOwnProperty(customBorder, 'top')) {\n            add += 1;\n            border.top = customBorder.top;\n          }\n        }\n\n        // Please keep in mind that `range.to.row` may be beyond the table boundaries. The border won't be rendered.\n        if (rowIndex === range.to.row) {\n          if (hasOwnProperty(customBorder, 'bottom')) {\n            add += 1;\n            border.bottom = customBorder.bottom;\n          }\n        }\n\n        if (colIndex === range.from.col) {\n          if (hasOwnProperty(customBorder, 'start')) {\n            add += 1;\n            border.start = customBorder.start;\n          }\n        }\n\n        // Please keep in mind that `range.to.col` may be beyond the table boundaries. The border won't be rendered.\n        if (colIndex === range.to.col) {\n          if (hasOwnProperty(customBorder, 'end')) {\n            add += 1;\n            border.end = customBorder.end;\n          }\n        }\n\n        if (add > 0) {\n          this.hot.setCellMeta(rowIndex, colIndex, 'borders', denormalizeBorder(border));\n          this.insertBorderIntoSettings(border);\n        } else {\n          // TODO sometimes it enters here. Why?\n        }\n      });\n    });\n  }\n\n  /**\n   * Remove border (triggered from context menu).\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   */\n  removeAllBorders(row, column) {\n    const borderId = createId(row, column);\n\n    this.spliceBorder(borderId);\n\n    this.clearBordersFromSelectionSettings(borderId);\n    this.clearNullCellRange();\n\n    this.hot.removeCellMeta(row, column, 'borders');\n  }\n\n  /**\n   * Set borders for each cell re. To border position.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `start`, `end` and `noBorders`.\n   * @param {boolean} remove True when remove borders, and false when add borders.\n   */\n  setBorder(row, column, place, remove) {\n    let bordersMeta = this.hot.getCellMeta(row, column).borders;\n\n    if (!bordersMeta || bordersMeta.border === undefined) {\n      bordersMeta = createEmptyBorders(row, column);\n    } else {\n      bordersMeta = normalizeBorder(bordersMeta);\n    }\n\n    if (remove) {\n      bordersMeta[place] = createSingleEmptyBorder();\n\n      const hideCount = this.countHide(bordersMeta);\n\n      if (hideCount === 4) {\n        this.removeAllBorders(row, column);\n\n      } else {\n        const customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n        if (!customSelectionsChecker) {\n          this.insertBorderIntoSettings(bordersMeta);\n        }\n\n        this.hot.setCellMeta(row, column, 'borders', denormalizeBorder(bordersMeta));\n      }\n\n    } else {\n      bordersMeta[place] = createDefaultCustomBorder();\n\n      const customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n      if (!customSelectionsChecker) {\n        this.insertBorderIntoSettings(bordersMeta);\n      }\n\n      this.hot.setCellMeta(row, column, 'borders', denormalizeBorder(bordersMeta));\n    }\n  }\n\n  /**\n   * Prepare borders based on cell and border position.\n   *\n   * @private\n   * @param {CellRange[]} selected An array of CellRange objects.\n   * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n   * @param {boolean} remove True when remove borders, and false when add borders.\n   */\n  prepareBorder(selected, place, remove) {\n    arrayEach(selected, ({ start, end }) => {\n      if (start.row === end.row && start.col === end.col) {\n        if (place === 'noBorders') {\n          this.removeAllBorders(start.row, start.col);\n        } else {\n          this.setBorder(start.row, start.col, place, remove);\n        }\n\n      } else {\n        switch (place) {\n          case 'noBorders':\n            rangeEach(start.col, end.col, (colIndex) => {\n              rangeEach(start.row, end.row, (rowIndex) => {\n                this.removeAllBorders(rowIndex, colIndex);\n              });\n            });\n            break;\n\n          case 'top':\n            rangeEach(start.col, end.col, (topCol) => {\n              this.setBorder(start.row, topCol, place, remove);\n            });\n            break;\n\n          case 'bottom':\n            rangeEach(start.col, end.col, (bottomCol) => {\n              this.setBorder(end.row, bottomCol, place, remove);\n            });\n            break;\n\n          case 'start':\n            rangeEach(start.row, end.row, (rowStart) => {\n              this.setBorder(rowStart, start.col, place, remove);\n            });\n            break;\n\n          case 'end':\n            rangeEach(start.row, end.row, (rowEnd) => {\n              this.setBorder(rowEnd, end.col, place, remove);\n            });\n            break;\n          default:\n            break;\n        }\n      }\n    });\n  }\n\n  /**\n   * Create borders from settings.\n   *\n   * @private\n   * @param {Array} customBorders Object with `row` and `col`, `start`, `end`, `top` and `bottom` properties.\n   */\n  createCustomBorders(customBorders) {\n    arrayEach(customBorders, (customBorder) => {\n      const normCustomBorder = normalizeBorder(customBorder);\n\n      if (customBorder.range) {\n        this.prepareBorderFromCustomAddedRange(customBorder.range, normCustomBorder);\n\n      } else {\n        this.prepareBorderFromCustomAdded(customBorder.row, customBorder.col, normCustomBorder);\n      }\n    });\n  }\n\n  /**\n   * Count hide property in border object.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @returns {number}\n   */\n  countHide(border) {\n    const { top, bottom, start, end } = border;\n    const values = [top, bottom, start, end];\n\n    return arrayReduce(values, (accumulator, value) => {\n      let result = accumulator;\n\n      if (value && value.hide) {\n        result += 1;\n      }\n\n      return result;\n    }, 0);\n  }\n\n  /**\n   * Clear borders settings from custom selections.\n   *\n   * @private\n   * @param {string} borderId Border id name as string.\n   */\n  clearBordersFromSelectionSettings(borderId) {\n    const index = arrayMap(\n      this.hot.selection.highlight.customSelections,\n      customSelection => customSelection.settings.id\n    ).indexOf(borderId);\n\n    if (index > -1) {\n      this.hot.selection.highlight.customSelections[index].clear();\n    }\n  }\n\n  /**\n   * Clear cellRange with null value.\n   *\n   * @private\n   */\n  clearNullCellRange() {\n    arrayEach(this.hot.selection.highlight.customSelections, (customSelection, index) => {\n      if (customSelection.cellRange === null) {\n        this.hot.selection.highlight.customSelections[index].destroy();\n        this.hot.selection.highlight.customSelections.splice(index, 1);\n\n        return false; // breaks forAll\n      }\n    });\n  }\n\n  /**\n   * Hide custom borders.\n   *\n   * @private\n   */\n  hideBorders() {\n    arrayEach(this.savedBorders, (border) => {\n      this.clearBordersFromSelectionSettings(border.id);\n      this.clearNullCellRange();\n    });\n  }\n\n  /**\n   * Splice border from savedBorders.\n   *\n   * @private\n   * @param {string} borderId Border id name as string.\n   */\n  spliceBorder(borderId) {\n    const index = arrayMap(this.savedBorders, border => border.id).indexOf(borderId);\n\n    if (index > -1) {\n      this.savedBorders.splice(index, 1);\n    }\n  }\n\n  /**\n   * Check if an border already exists in the savedBorders array, and if true update border in savedBorders.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   *\n   * @returns {boolean}\n   */\n  checkSavedBorders(border) {\n    let check = false;\n\n    const hideCount = this.countHide(border);\n\n    if (hideCount === 4) {\n      this.spliceBorder(border.id);\n      check = true;\n\n    } else {\n      arrayEach(this.savedBorders, (savedBorder, index) => {\n        if (border.id === savedBorder.id) {\n          this.savedBorders[index] = border;\n          check = true;\n\n          return false; // breaks forAll\n        }\n      });\n    }\n\n    return check;\n  }\n\n  /**\n   * Check if an border already exists in the customSelections, and if true call toggleHiddenClass method.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `start`, `end` and `noBorders`.\n   * @param {boolean} remove True when remove borders, and false when add borders.\n   *\n   * @returns {boolean}\n   */\n  checkCustomSelectionsFromContextMenu(border, place, remove) {\n    let check = false;\n\n    arrayEach(this.hot.selection.highlight.customSelections, (customSelection) => {\n      if (border.id === customSelection.settings.id) {\n        const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);\n\n        arrayEach(borders, (borderObject) => {\n          borderObject.toggleHiddenClass(place, remove); // TODO this also bad?\n        });\n\n        check = true;\n\n        return false; // breaks forAll\n      }\n    });\n\n    return check;\n  }\n\n  /**\n   * Check if an border already exists in the customSelections, and if true reset cellRange.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @param {CellRange} cellRange The selection range to check.\n   * @param {string} [place] Coordinate where add/remove border - `top`, `bottom`, `start`, `end`.\n   * @returns {boolean}\n   */\n  checkCustomSelections(border, cellRange, place) {\n    const hideCount = this.countHide(border);\n    let check = false;\n\n    if (hideCount === 4) {\n      this.removeAllBorders(border.row, border.col);\n      check = true;\n\n    } else {\n      arrayEach(this.hot.selection.highlight.customSelections, (customSelection) => {\n        if (border.id === customSelection.settings.id) {\n          customSelection.visualCellRange = cellRange;\n          customSelection.commit();\n\n          if (place) {\n            const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);\n\n            arrayEach(borders, (borderObject) => {\n              borderObject.changeBorderStyle(place, border);\n            });\n          }\n\n          check = true;\n\n          return false; // breaks forAll\n        }\n      });\n    }\n\n    return check;\n  }\n\n  /**\n   * Change borders from settings.\n   *\n   * @private\n   */\n  changeBorderSettings() {\n    const customBorders = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(customBorders)) {\n      const bordersClone = deepClone(customBorders);\n\n      this.checkSettingsCohesion(bordersClone);\n\n      if (!bordersClone.length) {\n        this.savedBorders = bordersClone;\n      }\n\n      this.createCustomBorders(bordersClone);\n\n    } else if (customBorders !== undefined) {\n      this.createCustomBorders(this.savedBorders);\n    }\n  }\n\n  /**\n   * Checks the settings cohesion. The properties such like \"left\"/\"right\" are supported only\n   * in the LTR mode and the \"left\"/\"right\" options can not be used together with \"start\"/\"end\" properties.\n   *\n   * @private\n   * @param {object[]} customBorders The user defined custom border objects array.\n   */\n  checkSettingsCohesion(customBorders) {\n    const hasLeftOrRight = hasLeftRightTypeOptions(customBorders);\n    const hasStartOrEnd = hasStartEndTypeOptions(customBorders);\n\n    if (hasLeftOrRight && hasStartOrEnd) {\n      throw new Error('The \"left\"/\"right\" and \"start\"/\"end\" options should not be used together. ' +\n                      'Please use only the option \"start\"/\"end\".');\n    }\n\n    if (this.hot.isRtl() && hasLeftOrRight) {\n      throw new Error('The \"left\"/\"right\" properties are not supported for RTL. Please use option \"start\"/\"end\".');\n    }\n  }\n\n  /**\n   * Add border options to context menu.\n   *\n   * @param {object} defaultOptions Context menu items.\n   */\n  #onAfterContextMenuDefaultOptions(defaultOptions) {\n    if (!this.hot.getSettings()[PLUGIN_KEY]) {\n      return;\n    }\n\n    defaultOptions.items.push({\n      name: '---------',\n    }, {\n      key: 'borders',\n      name() {\n        return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);\n      },\n      disabled() {\n        const range = this.getSelectedRangeLast();\n\n        if (!range) {\n          return true;\n        }\n\n        if (range.isSingleHeader()) {\n          return true;\n        }\n\n        return this.selection.isSelectedByCorner();\n      },\n      submenu: {\n        items: [\n          menuItemTop(this),\n          menuItemRight(this),\n          menuItemBottom(this),\n          menuItemLeft(this),\n          menuItemNoBorders(this)\n        ]\n      }\n    });\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.changeBorderSettings();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import bottom from './bottom';\nimport left from './left';\nimport noBorders from './noBorders';\nimport right from './right';\nimport top from './top';\n\nexport {\n  bottom,\n  left,\n  noBorders,\n  right,\n  top\n};\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function bottom(customBordersPlugin) {\n  return {\n    key: 'borders:bottom',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM);\n      const hasBorder = checkSelectionBorders(this, 'bottom');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, 'bottom');\n\n      customBordersPlugin.prepareBorder(selected, 'bottom', hasBorder);\n    }\n  };\n}\n","import {\n  hasOwnProperty,\n  isObject,\n} from '../../helpers/object';\nimport { isDefined } from '../../helpers/mixed';\nimport { arrayEach } from '../../helpers/array';\n\n/**\n * Create separated id for borders for each cell.\n *\n * @param {number} row Visual row index.\n * @param {number} col Visual column index.\n * @returns {string}\n */\nexport function createId(row, col) {\n  return `border_row${row}col${col}`;\n}\n\n/**\n * Create default single border for each position (top/right/bottom/left).\n *\n * @returns {object} `{{width: number, color: string}}`.\n */\nexport function createDefaultCustomBorder() {\n  return {\n    width: 1,\n    color: '#000',\n  };\n}\n\n/**\n * Create default object for empty border.\n *\n * @returns {object} `{{hide: boolean}}`.\n */\nexport function createSingleEmptyBorder() {\n  return { hide: true };\n}\n\n/**\n * Create default Handsontable border object.\n *\n * @returns {object} `{{width: number, color: string, cornerVisible: boolean}}`.\n */\nexport function createDefaultHtBorder() {\n  return {\n    width: 1,\n    color: '#000',\n    cornerVisible: false,\n  };\n}\n\n/**\n * Normalizes the border object to be compatible with the Border API from the Walkontable.\n * The function translates the \"left\"/\"right\" properties to \"start\"/\"end\" prop names.\n *\n * @param {object} border The configuration object of the border.\n * @returns {object}\n */\nexport function normalizeBorder(border) {\n  if (isDefined(border.start) || isDefined(border.left)) {\n    border.start = border.start ?? border.left;\n  }\n  if (isDefined(border.end) || isDefined(border.right)) {\n    border.end = border.end ?? border.right;\n  }\n\n  delete border.left;\n  delete border.right;\n\n  return border;\n}\n\n/**\n * Denormalizes the border object to be backward compatible with the previous version of the CustomBorders\n * plugin API. The function extends the border configuration object for the backward compatible \"left\"/\"right\"\n * properties.\n *\n * @param {object} border The configuration object of the border.\n * @returns {object}\n */\nexport function denormalizeBorder(border) {\n  if (isDefined(border.start)) {\n    border.left = border.start;\n  }\n  if (isDefined(border.end)) {\n    border.right = border.end;\n  }\n\n  return border;\n}\n\n/**\n * Prepare empty border for each cell with all custom borders hidden.\n *\n * @param {number} row Visual row index.\n * @param {number} col Visual column index.\n * @returns {{id: string, border: any, row: number, col: number, top: {hide: boolean}, bottom: {hide: boolean}, start: {hide: boolean}, end: {hide: boolean}}} Returns border configuration containing visual indexes.\n */\nexport function createEmptyBorders(row, col) {\n  return {\n    id: createId(row, col),\n    border: createDefaultHtBorder(),\n    row,\n    col,\n    top: createSingleEmptyBorder(),\n    bottom: createSingleEmptyBorder(),\n    start: createSingleEmptyBorder(),\n    end: createSingleEmptyBorder(),\n  };\n}\n\n/**\n * @param {object} defaultBorder The default border object.\n * @param {object} customBorder The border object with custom settings.\n * @returns {object}\n */\nexport function extendDefaultBorder(defaultBorder, customBorder) {\n  if (hasOwnProperty(customBorder, 'border') && customBorder.border) {\n    defaultBorder.border = customBorder.border;\n  }\n\n  if (hasOwnProperty(customBorder, 'top') && isDefined(customBorder.top)) {\n    if (customBorder.top) {\n      if (!isObject(customBorder.top)) {\n        customBorder.top = createDefaultCustomBorder();\n      }\n\n      defaultBorder.top = customBorder.top;\n\n    } else {\n      customBorder.top = createSingleEmptyBorder();\n      defaultBorder.top = customBorder.top;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'bottom') && isDefined(customBorder.bottom)) {\n    if (customBorder.bottom) {\n      if (!isObject(customBorder.bottom)) {\n        customBorder.bottom = createDefaultCustomBorder();\n      }\n\n      defaultBorder.bottom = customBorder.bottom;\n\n    } else {\n      customBorder.bottom = createSingleEmptyBorder();\n      defaultBorder.bottom = customBorder.bottom;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'start') && isDefined(customBorder.start)) {\n    if (customBorder.start) {\n\n      if (!isObject(customBorder.start)) {\n        customBorder.start = createDefaultCustomBorder();\n      }\n\n      defaultBorder.start = customBorder.start;\n\n    } else {\n      customBorder.start = createSingleEmptyBorder();\n      defaultBorder.start = customBorder.start;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'end') && isDefined(customBorder.end)) {\n    if (customBorder.end) {\n      if (!isObject(customBorder.end)) {\n        customBorder.end = createDefaultCustomBorder();\n      }\n\n      defaultBorder.end = customBorder.end;\n\n    } else {\n      customBorder.end = createSingleEmptyBorder();\n      defaultBorder.end = customBorder.end;\n    }\n  }\n\n  return defaultBorder;\n}\n\n/**\n * Check if selection has border.\n *\n * @param {Core} hot The Handsontable instance.\n * @param {string} [direction] If set ('left' or 'top') then only the specified border side will be checked.\n * @returns {boolean}\n */\nexport function checkSelectionBorders(hot, direction) {\n  let atLeastOneHasBorder = false;\n\n  arrayEach(hot.getSelectedRange(), (range) => {\n    range.forAll((r, c) => {\n      if (r < 0 || c < 0) {\n        return;\n      }\n\n      const metaBorders = hot.getCellMeta(r, c).borders;\n\n      if (metaBorders) {\n        if (direction) {\n          if (!hasOwnProperty(metaBorders[direction], 'hide') || metaBorders[direction].hide === false) {\n            atLeastOneHasBorder = true;\n\n            return false; // breaks forAll\n          }\n        } else {\n          atLeastOneHasBorder = true;\n\n          return false; // breaks forAll\n        }\n      }\n    });\n  });\n\n  return atLeastOneHasBorder;\n}\n\n/**\n * Mark label in contextMenu as selected.\n *\n * @param {string} label The label text.\n * @returns {string}\n */\nexport function markSelected(label) {\n  return `<span class=\"selected\">${String.fromCharCode(10003)}</span>${label}`; // workaround for https://github.com/handsontable/handsontable/issues/1946\n}\n\n/**\n * Checks if in the borders config there are defined \"left\" or \"right\" border properties.\n *\n * @param {object[]} borders The custom border plugin's options.\n * @returns {boolean}\n */\nexport function hasLeftRightTypeOptions(borders) {\n  return borders.some(border => isDefined(border.left) || isDefined(border.right));\n}\n\n/**\n * Checks if in the borders config there are defined \"start\" or \"end\" border properties.\n *\n * @param {object[]} borders The custom border plugin's options.\n * @returns {boolean}\n */\nexport function hasStartEndTypeOptions(borders) {\n  return borders.some(border => isDefined(border.start) || isDefined(border.end));\n}\n\nconst physicalToInlinePropNames = new Map([\n  ['left', 'start'],\n  ['right', 'end'],\n]);\n\n/**\n * Translates the physical horizontal direction to logical ones. If not known property name is\n * passed it will be returned without modification.\n *\n * @param {string} propName The physical direction property name (\"left\" or \"right\").\n * @returns {string}\n */\nexport function toInlinePropName(propName) {\n  return physicalToInlinePropNames.get(propName) ?? propName;\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function left(customBordersPlugin) {\n  const borderDirection = customBordersPlugin.hot.isRtl() ? 'end' : 'start';\n\n  return {\n    key: 'borders:left',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_LEFT);\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      customBordersPlugin.prepareBorder(selected, borderDirection, hasBorder);\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function noBorders(customBordersPlugin) {\n  return {\n    key: 'borders:no_borders',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_BORDERS);\n    },\n    callback(key, selected) {\n      customBordersPlugin.prepareBorder(selected, 'noBorders');\n    },\n    disabled() {\n      return !checkSelectionBorders(this);\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function right(customBordersPlugin) {\n  const borderDirection = customBordersPlugin.hot.isRtl() ? 'start' : 'end';\n\n  return {\n    key: 'borders:right',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_RIGHT);\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      customBordersPlugin.prepareBorder(selected, borderDirection, hasBorder);\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function top(customBordersPlugin) {\n  return {\n    key: 'borders:top',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_TOP);\n      const hasBorder = checkSelectionBorders(this, 'top');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, 'top');\n\n      customBordersPlugin.prepareBorder(selected, 'top', hasBorder);\n    }\n  };\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  DragToScroll,\n} from './dragToScroll';\n","import { BasePlugin } from '../base';\nimport { isRightClick } from '../../helpers/dom/event';\nimport { getParentWindow } from '../../helpers/dom/element';\n\nexport const PLUGIN_KEY = 'dragToScroll';\nexport const PLUGIN_PRIORITY = 100;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @description\n * Plugin used to scroll Handsontable by selecting a cell and dragging outside of the visible viewport.\n *\n *\n * @class DragToScroll\n * @plugin DragToScroll\n */\nexport class DragToScroll extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Size of an element and its position relative to the viewport,\n   * e.g. {bottom: 449, height: 441, left: 8, right: 814, top: 8, width: 806, x: 8, y:8}.\n   *\n   * @type {DOMRect}\n   */\n  boundaries = null;\n  /**\n   * Callback function.\n   *\n   * @private\n   * @type {Function}\n   */\n  callback = null;\n  /**\n   * Flag indicates mouseDown/mouseUp.\n   *\n   * @private\n   * @type {boolean}\n   */\n  listening = false;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link DragToScroll#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterOnCellMouseDown', event => this.#setupListening(event));\n    this.addHook('afterOnCellCornerMouseDown', event => this.#setupListening(event));\n\n    this.registerEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`dragToScroll`](@/api/options.md#dragtoscroll)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.unregisterEvents();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Sets the boundaries/dimensions of the scrollable viewport.\n   *\n   * @param {DOMRect|{left: number, right: number, top: number, bottom: number}} [boundaries] An object with\n   * coordinates. Contains the window boundaries by default. The object is compatible with DOMRect.\n   */\n  setBoundaries(boundaries = {\n    left: 0,\n    right: this.hot.rootWindow.innerWidth,\n    top: 0,\n    bottom: this.hot.rootWindow.innerHeight,\n  }) {\n    this.boundaries = boundaries;\n  }\n\n  /**\n   * Changes callback function.\n   *\n   * @param {Function} callback The callback function.\n   */\n  setCallback(callback) {\n    this.callback = callback;\n  }\n\n  /**\n   * Checks if the mouse position (X, Y) is outside the viewport and fires a callback with calculated X an Y diffs\n   * between passed boundaries.\n   *\n   * @param {number} x Mouse X coordinate to check.\n   * @param {number} y Mouse Y coordinate to check.\n   */\n  check(x, y) {\n    let diffX = 0;\n    let diffY = 0;\n\n    if (y < this.boundaries.top) {\n      // y is less than top\n      diffY = y - this.boundaries.top;\n\n    } else if (y > this.boundaries.bottom) {\n      // y is more than bottom\n      diffY = y - this.boundaries.bottom;\n    }\n\n    if (x < this.boundaries.left) {\n      // x is less than left\n      diffX = x - this.boundaries.left;\n\n    } else if (x > this.boundaries.right) {\n      // x is more than right\n      diffX = x - this.boundaries.right;\n    }\n\n    this.callback(diffX, diffY);\n  }\n\n  /**\n   * Enables listening on `mousemove` event.\n   *\n   * @private\n   */\n  listen() {\n    this.listening = true;\n  }\n\n  /**\n   * Disables listening on `mousemove` event.\n   *\n   * @private\n   */\n  unlisten() {\n    this.listening = false;\n  }\n\n  /**\n   * Returns current state of listening.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isListening() {\n    return this.listening;\n  }\n\n  /**\n   * Registers dom listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { rootWindow } = this.hot;\n\n    let frame = rootWindow;\n\n    while (frame) {\n      this.eventManager.addEventListener(frame.document, 'contextmenu', () => this.unlisten());\n      this.eventManager.addEventListener(frame.document, 'mouseup', () => this.unlisten());\n      this.eventManager.addEventListener(frame.document, 'mousemove', event => this.onMouseMove(event));\n\n      frame = getParentWindow(frame);\n    }\n  }\n\n  /**\n   * Unbinds the events used by the plugin.\n   *\n   * @private\n   */\n  unregisterEvents() {\n    this.eventManager.clear();\n  }\n\n  /**\n   * On after on cell/cellCorner mouse down listener.\n   *\n   * @param {MouseEvent} event The mouse event object.\n   */\n  #setupListening(event) {\n    if (isRightClick(event)) {\n      return;\n    }\n\n    const scrollHandler = this.hot.view._wt.wtOverlays.topOverlay.mainTableScrollableElement;\n\n    this.setBoundaries(scrollHandler !== this.hot.rootWindow ? scrollHandler.getBoundingClientRect() : undefined);\n\n    this.setCallback((scrollX, scrollY) => {\n      const horizontalScrollValue = scrollHandler.scrollLeft ?? scrollHandler.scrollX;\n      const verticalScrollValue = scrollHandler.scrollTop ?? scrollHandler.scrollY;\n\n      scrollHandler.scroll(\n        horizontalScrollValue + (Math.sign(scrollX) * 50),\n        verticalScrollValue + (Math.sign(scrollY) * 20)\n      );\n    });\n\n    this.listen();\n  }\n\n  /**\n   * 'mouseMove' event callback.\n   *\n   * @private\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  onMouseMove(event) {\n    if (!this.isListening()) {\n      return;\n    }\n\n    this.check(event.clientX, event.clientY);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  DropdownMenu,\n} from './dropdownMenu';\n","import { BasePlugin } from '../base';\nimport { arrayEach } from '../../helpers/array';\nimport { objectEach } from '../../helpers/object';\nimport { CommandExecutor } from '../contextMenu/commandExecutor';\nimport { getDocumentOffsetByElement } from '../contextMenu/utils';\nimport { hasClass, setAttribute } from '../../helpers/dom/element';\nimport { ItemsFactory } from '../contextMenu/itemsFactory';\nimport { Menu } from '../contextMenu/menu';\nimport Hooks from '../../pluginHooks';\nimport {\n  COLUMN_LEFT,\n  COLUMN_RIGHT,\n  REMOVE_COLUMN,\n  CLEAR_COLUMN,\n  READ_ONLY,\n  ALIGNMENT,\n  SEPARATOR\n} from '../contextMenu/predefinedItems';\n\nimport './dropdownMenu.scss';\nimport { A11Y_HASPOPUP, A11Y_HIDDEN, A11Y_LABEL } from '../../helpers/a11y';\n\nHooks.getSingleton().register('afterDropdownMenuDefaultOptions');\nHooks.getSingleton().register('beforeDropdownMenuShow');\nHooks.getSingleton().register('afterDropdownMenuShow');\nHooks.getSingleton().register('afterDropdownMenuHide');\nHooks.getSingleton().register('afterDropdownMenuExecute');\n\nexport const PLUGIN_KEY = 'dropdownMenu';\nexport const PLUGIN_PRIORITY = 230;\nconst BUTTON_CLASS_NAME = 'changeType';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin DropdownMenu\n * @class DropdownMenu\n *\n * @description\n * This plugin creates the Handsontable Dropdown Menu. It allows to create a new column at any place in the grid\n * among [other features](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely).\n *\n * or array of any available strings:\n * * `[\"col_left\", \"col_right\", \"remove_col\", \"---------\", \"undo\", \"redo\"]`.\n *\n * See [the dropdown menu demo](@/guides/columns/column-menu/column-menu.md) for examples.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: data,\n *   colHeaders: true,\n *   // enable dropdown menu\n *   dropdownMenu: true\n * });\n *\n * // or\n * const hot = new Handsontable(container, {\n *   data: data,\n *   colHeaders: true,\n *   // enable and configure dropdown menu\n *   dropdownMenu: ['remove_col', '---------', 'make_read_only', 'alignment']\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={data}\n *   comments={true}\n *   // enable and configure dropdown menu\n *   dropdownMenu={['remove_col', '---------', 'make_read_only', 'alignment']}\n * />\n * ```\n * :::\n */\n\nexport class DropdownMenu extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:AutoColumnSize',\n    ];\n  }\n\n  /**\n   * Default menu items order when `dropdownMenu` is enabled by setting the config item to `true`.\n   *\n   * @returns {Array}\n   */\n  static get DEFAULT_ITEMS() {\n    return [\n      COLUMN_LEFT,\n      COLUMN_RIGHT,\n      SEPARATOR,\n      REMOVE_COLUMN,\n      SEPARATOR,\n      CLEAR_COLUMN,\n      SEPARATOR,\n      READ_ONLY,\n      SEPARATOR,\n      ALIGNMENT,\n    ];\n  }\n\n  /**\n   * Instance of {@link CommandExecutor}.\n   *\n   * @private\n   * @type {CommandExecutor}\n   */\n  commandExecutor = new CommandExecutor(this.hot);\n  /**\n   * Instance of {@link ItemsFactory}.\n   *\n   * @private\n   * @type {ItemsFactory}\n   */\n  itemsFactory = null;\n  /**\n   * Instance of {@link Menu}.\n   *\n   * @private\n   * @type {Menu}\n   */\n  menu = null;\n  /**\n   * Flag which determines if the button that opens the menu was clicked.\n   *\n   * @type {boolean}\n   */\n  #isButtonClicked = false;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n\n    // One listener for enable/disable functionality\n    this.hot.addHook('afterGetColHeader', (col, TH) => this.#onAfterGetColHeader(col, TH));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link DropdownMenu#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   *\n   * @fires Hooks#afterDropdownMenuDefaultOptions\n   * @fires Hooks#beforeDropdownMenuSetItems\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.itemsFactory = new ItemsFactory(this.hot, DropdownMenu.DEFAULT_ITEMS);\n\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeViewportScrollHorizontally', (...args) => this.#onBeforeViewportScrollHorizontally(...args));\n\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    const predefinedItems = {\n      items: this.itemsFactory.getItems(settings)\n    };\n\n    this.registerEvents();\n\n    if (typeof settings.callback === 'function') {\n      this.commandExecutor.setCommonCallback(settings.callback);\n    }\n\n    this.registerShortcuts();\n    super.enablePlugin();\n\n    this.callOnPluginsReady(() => {\n      this.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);\n\n      this.itemsFactory.setPredefinedItems(predefinedItems.items);\n      const menuItems = this.itemsFactory.getItems(settings);\n\n      if (this.menu) {\n        this.menu.destroy();\n      }\n      this.menu = new Menu(this.hot, {\n        className: 'htDropdownMenu',\n        keepInViewport: true,\n        container: settings.uiContainer || this.hot.rootDocument.body,\n      });\n      this.hot.runHooks('beforeDropdownMenuSetItems', menuItems);\n\n      this.menu.setMenuItems(menuItems);\n\n      this.menu.addLocalHook('beforeOpen', () => this.#onMenuBeforeOpen());\n      this.menu.addLocalHook('afterOpen', () => this.#onMenuAfterOpen());\n      this.menu.addLocalHook('afterSubmenuOpen', subMenuInstance => this.#onSubMenuAfterOpen(subMenuInstance));\n      this.menu.addLocalHook('afterClose', () => this.#onMenuAfterClose());\n      this.menu.addLocalHook('executeCommand', (...params) => this.executeCommand.call(this, ...params));\n\n      // Register all commands. Predefined and added by user or by plugins\n      arrayEach(menuItems, command => this.commandExecutor.registerCommand(command.key, command));\n    });\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`dropdownMenu`](@/api/options.md#dropdownmenu)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n    }\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling dropdown menu.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const gridContext = this.hot.getShortcutManager().getContext('grid');\n    const callback = () => {\n      const { highlight } = this.hot.getSelectedRangeLast();\n\n      if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {\n        this.hot.selectColumns(highlight.col, highlight.col, -1);\n\n        const { from } = this.hot.getSelectedRangeLast();\n        const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n        const target = this.hot.getCell(-1, from.col, true).querySelector(`.${BUTTON_CLASS_NAME}`);\n        const rect = target.getBoundingClientRect();\n\n        this.open({\n          left: rect.left + offset.left,\n          top: rect.top + target.offsetHeight + offset.top,\n        }, {\n          left: rect.width,\n          right: 0,\n          above: 0,\n          below: 3,\n        });\n        // Make sure the first item is selected (role=menuitem). Otherwise, screen readers\n        // will block the Esc key for the whole menu.\n        this.menu.getNavigator().toFirstItem();\n      }\n    };\n\n    gridContext.addShortcuts([{\n      keys: [['Shift', 'Alt', 'ArrowDown'], ['Control/Meta', 'Enter']],\n      callback,\n      runOnlyIf: () => {\n        const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n        return highlight && this.hot.selection.isCellVisible(highlight) &&\n          highlight.isHeader() && !this.menu.isOpened();\n      },\n      captureCtrl: true,\n      group: SHORTCUTS_GROUP,\n    }, {\n      keys: [['Shift', 'Alt', 'ArrowDown']],\n      callback,\n      runOnlyIf: () => {\n        const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n        return highlight && this.hot.selection.isCellVisible(highlight) &&\n          highlight.isCell() && !this.menu.isOpened();\n      },\n      group: SHORTCUTS_GROUP,\n    }]);\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling dropdown menu.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Registers the DOM listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    this.eventManager.addEventListener(this.hot.rootElement, 'click', event => this.#onTableClick(event));\n  }\n\n  /**\n   * Opens menu and re-position it based on the passed coordinates.\n   *\n   * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties\n   * which contains coordinates relative to the browsers viewport (without included scroll offsets).\n   * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`\n   * coordinates.\n   * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying\n   * the offset to the menu position.\n   * @fires Hooks#beforeDropdownMenuShow\n   * @fires Hooks#afterDropdownMenuShow\n   */\n  open(position, offset = { above: 0, below: 0, left: 0, right: 0 }) {\n    if (this.menu?.isOpened()) {\n      return;\n    }\n\n    this.menu.open();\n\n    objectEach(offset, (value, key) => {\n      this.menu.setOffset(key, value);\n    });\n    this.menu.setPosition(position);\n  }\n\n  /**\n   * Closes dropdown menu.\n   */\n  close() {\n    this.menu?.close();\n  }\n\n  /**\n   * Executes context menu command.\n   *\n   * The `executeCommand()` method works only for selected cells.\n   *\n   * When no cells are selected, `executeCommand()` doesn't do anything.\n   *\n   * You can execute all predefined commands:\n   *  * `'col_left'` - Insert column left\n   *  * `'col_right'` - Insert column right\n   *  * `'clear_column'` - Clear selected column\n   *  * `'remove_col'` - Remove column\n   *  * `'undo'` - Undo last action\n   *  * `'redo'` - Redo last action\n   *  * `'make_read_only'` - Make cell read only\n   *  * `'alignment:left'` - Alignment to the left\n   *  * `'alignment:top'` - Alignment to the top\n   *  * `'alignment:right'` - Alignment to the right\n   *  * `'alignment:bottom'` - Alignment to the bottom\n   *  * `'alignment:middle'` - Alignment to the middle\n   *  * `'alignment:center'` - Alignment to the center (justify).\n   *\n   * Or you can execute command registered in settings where `key` is your command name.\n   *\n   * @param {string} commandName Command name to execute.\n   * @param {*} params Additional parameters passed to the command executor.\n   */\n  executeCommand(commandName, ...params) {\n    this.commandExecutor.execute(commandName, ...params);\n  }\n\n  /**\n   * Turns on / off listening on dropdown menu.\n   *\n   * @private\n   * @param {boolean} listen Turn on listening when value is set to true, otherwise turn it off.\n   */\n  setListening(listen = true) {\n    if (this.menu.isOpened()) {\n      if (listen) {\n        this.menu.hotMenu.listen();\n      } else {\n        this.menu.hotMenu.unlisten();\n      }\n    }\n  }\n\n  /**\n   * Add custom shortcuts to the provided menu instance.\n   *\n   * @param {Menu} menuInstance The menu instance.\n   */\n  #addCustomShortcuts(menuInstance) {\n    menuInstance\n      .getKeyboardShortcutsCtrl()\n      .addCustomShortcuts([{\n        keys: [['Control/Meta', 'A']],\n        callback: () => false,\n      }]);\n  }\n\n  /**\n   * Table click listener.\n   *\n   * @private\n   * @param {Event} event The mouse event object.\n   */\n  #onTableClick(event) {\n    if (hasClass(event.target, BUTTON_CLASS_NAME)) {\n      const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n      const rect = event.target.getBoundingClientRect();\n\n      event.stopPropagation();\n      this.#isButtonClicked = false;\n\n      this.open({\n        left: rect.left + offset.left,\n        top: rect.top + event.target.offsetHeight + offset.top,\n      }, {\n        left: rect.width,\n        right: 0,\n        above: 0,\n        below: 3,\n      });\n    }\n  }\n\n  /**\n   * On after get column header listener.\n   *\n   * @private\n   * @param {number} col Visual column index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   */\n  #onAfterGetColHeader(col, TH) {\n    // Corner or a higher-level header\n    const headerRow = TH.parentNode;\n\n    if (!headerRow) {\n      return;\n    }\n\n    const headerRowList = headerRow.parentNode.childNodes;\n    const level = Array.prototype.indexOf.call(headerRowList, headerRow);\n\n    if (col < 0 || level !== headerRowList.length - 1) {\n      return;\n    }\n\n    const existingButton = TH.querySelector(`.${BUTTON_CLASS_NAME}`);\n\n    // Plugin enabled and buttons already exists, return.\n    if (this.enabled && existingButton) {\n      return;\n    }\n    // Plugin disabled and buttons still exists, so remove them.\n    if (!this.enabled) {\n      if (existingButton) {\n        existingButton.parentNode.removeChild(existingButton);\n      }\n\n      return;\n    }\n    const button = this.hot.rootDocument.createElement('button');\n\n    button.className = BUTTON_CLASS_NAME;\n    button.type = 'button';\n    button.tabIndex = -1;\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(button, [\n        A11Y_HIDDEN(),\n        A11Y_LABEL(' '),\n      ]);\n\n      setAttribute(TH, [\n        A11Y_HASPOPUP('menu'),\n      ]);\n    }\n\n    // prevent page reload on button click\n    button.onclick = function() {\n      return false;\n    };\n\n    TH.firstChild.insertBefore(button, TH.firstChild.firstChild);\n  }\n\n  /**\n   * On menu before open listener.\n   *\n   * @private\n   * @fires Hooks#beforeDropdownMenuShow\n   */\n  #onMenuBeforeOpen() {\n    this.hot.runHooks('beforeDropdownMenuShow', this);\n  }\n\n  /**\n   * On menu after open listener.\n   *\n   * @private\n   * @fires Hooks#afterDropdownMenuShow\n   */\n  #onMenuAfterOpen() {\n    this.hot.runHooks('afterDropdownMenuShow', this);\n\n    this.#addCustomShortcuts(this.menu);\n  }\n\n  /**\n   * Listener for the `afterSubmenuOpen` hook.\n   *\n   * @private\n   * @param {Menu} subMenuInstance The opened sub menu instance.\n   */\n  #onSubMenuAfterOpen(subMenuInstance) {\n    this.#addCustomShortcuts(subMenuInstance);\n  }\n\n  /**\n   * On menu after close listener.\n   *\n   * @private\n   * @fires Hooks#afterDropdownMenuHide\n   */\n  #onMenuAfterClose() {\n    this.hot.listen();\n    this.hot.runHooks('afterDropdownMenuHide', this);\n  }\n\n  /**\n   * Hook allows blocking horizontal scroll when the menu is opened by clicking on\n   * the column header button. This prevents from scrolling the viewport (jump effect) when\n   * the button is clicked.\n   *\n   * @param {number} visualColumn Visual column index.\n   * @returns {number | null}\n   */\n  #onBeforeViewportScrollHorizontally(visualColumn) {\n    return this.#isButtonClicked ? null : visualColumn;\n  }\n\n  /**\n   * Hook sets the internal flag to `true` when the button is clicked.\n   *\n   * @param {MouseEvent} event The mouse event object.\n   */\n  #onBeforeOnCellMouseDown(event) {\n    if (hasClass(event.target, BUTTON_CLASS_NAME)) {\n      this.#isButtonClicked = true;\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n    }\n    super.destroy();\n  }\n}\n\nDropdownMenu.SEPARATOR = {\n  name: SEPARATOR\n};\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ExportFile,\n} from './exportFile';\n","import { BasePlugin } from '../base';\nimport DataProvider from './dataProvider';\nimport typeFactory, { EXPORT_TYPES } from './typeFactory';\n\nexport const PLUGIN_KEY = 'exportFile';\nexport const PLUGIN_PRIORITY = 240;\n\n/**\n * @plugin ExportFile\n * @class ExportFile\n *\n * @description\n * The `ExportFile` plugin lets you export table data as a string, blob, or downloadable CSV file.\n *\n * See [the export file demo](@/guides/accessories-and-menus/export-to-csv/export-to-csv.md) for examples.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData()\n * });\n *\n * // access to exportFile plugin instance\n * const exportPlugin = hot.getPlugin('exportFile');\n *\n * // export as a string\n * exportPlugin.exportAsString('csv');\n *\n * // export as a blob object\n * exportPlugin.exportAsBlob('csv');\n *\n * // export to downloadable file (named: MyFile.csv)\n * exportPlugin.downloadFile('csv', {filename: 'MyFile'});\n *\n * // export as a string (with specified data range):\n * exportPlugin.exportAsString('csv', {\n *   exportHiddenRows: true,     // default false\n *   exportHiddenColumns: true,  // default false\n *   columnHeaders: true,        // default false\n *   rowHeaders: true,           // default false\n *   columnDelimiter: ';',       // default ','\n *   range: [1, 1, 6, 6]         // [startRow, endRow, startColumn, endColumn]\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n * />\n *\n * const hot = hotRef.current.hotInstance;\n * // access to exportFile plugin instance\n * const exportPlugin = hot.getPlugin('exportFile');\n *\n * // export as a string\n * exportPlugin.exportAsString('csv');\n *\n * // export as a blob object\n * exportPlugin.exportAsBlob('csv');\n *\n * // export to downloadable file (named: MyFile.csv)\n * exportPlugin.downloadFile('csv', {filename: 'MyFile'});\n *\n * // export as a string (with specified data range):\n * exportPlugin.exportAsString('csv', {\n *   exportHiddenRows: true,     // default false\n *   exportHiddenColumns: true,  // default false\n *   columnHeaders: true,        // default false\n *   rowHeaders: true,           // default false\n *   columnDelimiter: ';',       // default ','\n *   range: [1, 1, 6, 6]         // [startRow, endRow, startColumn, endColumn]\n * });\n * ```\n * :::\n */\nexport class ExportFile extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ExportFile#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return true;\n  }\n\n  /**\n   * @typedef ExportOptions\n   * @memberof ExportFile\n   * @type {object}\n   * @property {boolean} [exportHiddenRows=false] Include hidden rows in the exported file.\n   * @property {boolean} [exportHiddenColumns=false] Include hidden columns in the exported file.\n   * @property {boolean} [columnHeaders=false] Include column headers in the exported file.\n   * @property {boolean} [rowHeaders=false] Include row headers in the exported file.\n   * @property {string} [columnDelimiter=','] Column delimiter.\n   * @property {string} [range=[]] Cell range that will be exported to file.\n   */\n\n  /**\n   * Exports table data as a string.\n   *\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   * @returns {string}\n   */\n  exportAsString(format, options = {}) {\n    return this._createTypeFormatter(format, options).export();\n  }\n\n  /**\n   * Exports table data as a blob object.\n   *\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   * @returns {Blob}\n   */\n  exportAsBlob(format, options = {}) {\n    return this._createBlob(this._createTypeFormatter(format, options));\n  }\n\n  /**\n   * Exports table data as a downloadable file.\n   *\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   */\n  downloadFile(format, options = {}) {\n    const { rootDocument, rootWindow } = this.hot;\n    const formatter = this._createTypeFormatter(format, options);\n    const blob = this._createBlob(formatter);\n    const URL = (rootWindow.URL || rootWindow.webkitURL);\n\n    const a = rootDocument.createElement('a');\n    const name = `${formatter.options.filename}.${formatter.options.fileExtension}`;\n\n    if (a.download !== undefined) {\n      const url = URL.createObjectURL(blob);\n\n      a.style.display = 'none';\n      a.setAttribute('href', url);\n      a.setAttribute('download', name);\n      rootDocument.body.appendChild(a);\n      a.dispatchEvent(new MouseEvent('click'));\n      rootDocument.body.removeChild(a);\n\n      setTimeout(() => {\n        URL.revokeObjectURL(url);\n      }, 100);\n\n    } else if (navigator.msSaveOrOpenBlob) { // IE10+\n      navigator.msSaveOrOpenBlob(blob, name);\n    }\n  }\n\n  /**\n   * Creates and returns class formatter for specified export type.\n   *\n   * @private\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   * @returns {BaseType}\n   */\n  _createTypeFormatter(format, options = {}) {\n    if (!EXPORT_TYPES[format]) {\n      throw new Error(`Export format type \"${format}\" is not supported.`);\n    }\n\n    return typeFactory(format, new DataProvider(this.hot), options);\n  }\n\n  /**\n   * Creates blob object based on provided type formatter class.\n   *\n   * @private\n   * @param {BaseType} typeFormatter The instance of the specyfic formatter/exporter.\n   * @returns {Blob}\n   */\n  _createBlob(typeFormatter) {\n    let formatter = null;\n\n    if (typeof Blob !== 'undefined') {\n      formatter = new Blob([typeFormatter.export()], {\n        type: `${typeFormatter.options.mimeType};charset=${typeFormatter.options.encoding}`,\n      });\n    }\n\n    return formatter;\n  }\n}\n","import { rangeEach } from '../../helpers/number';\n\n/**\n * @private\n */\nclass DataProvider {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Format type class options.\n   *\n   * @type {object}\n   */\n  options = {};\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Set options for data provider.\n   *\n   * @param {object} options Object with specified options.\n   */\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * Get table data based on provided settings to the class constructor.\n   *\n   * @returns {Array}\n   */\n  getData() {\n    const { startRow, startCol, endRow, endCol } = this._getDataRange();\n    const options = this.options;\n    const data = [];\n\n    rangeEach(startRow, endRow, (rowIndex) => {\n      const row = [];\n\n      if (!options.exportHiddenRows && this._isHiddenRow(rowIndex)) {\n        return;\n      }\n      rangeEach(startCol, endCol, (colIndex) => {\n        if (!options.exportHiddenColumns && this._isHiddenColumn(colIndex)) {\n          return;\n        }\n        row.push(this.hot.getDataAtCell(rowIndex, colIndex));\n      });\n\n      data.push(row);\n    });\n\n    return data;\n  }\n\n  /**\n   * Gets list of row headers.\n   *\n   * @returns {Array}\n   */\n  getRowHeaders() {\n    const headers = [];\n\n    if (this.options.rowHeaders) {\n      const { startRow, endRow } = this._getDataRange();\n      const rowHeaders = this.hot.getRowHeader();\n\n      rangeEach(startRow, endRow, (row) => {\n        if (!this.options.exportHiddenRows && this._isHiddenRow(row)) {\n          return;\n        }\n        headers.push(rowHeaders[row]);\n      });\n    }\n\n    return headers;\n  }\n\n  /**\n   * Gets list of columns headers.\n   *\n   * @returns {Array}\n   */\n  getColumnHeaders() {\n    const headers = [];\n\n    if (this.options.columnHeaders) {\n      const { startCol, endCol } = this._getDataRange();\n      const colHeaders = this.hot.getColHeader();\n\n      rangeEach(startCol, endCol, (column) => {\n        if (!this.options.exportHiddenColumns && this._isHiddenColumn(column)) {\n          return;\n        }\n        headers.push(colHeaders[column]);\n      });\n    }\n\n    return headers;\n  }\n\n  /**\n   * Get data range object based on settings provided in the class constructor.\n   *\n   * @private\n   * @returns {object} Returns object with keys `startRow`, `startCol`, `endRow` and `endCol`.\n   */\n  _getDataRange() {\n    const cols = this.hot.countCols() - 1;\n    const rows = this.hot.countRows() - 1;\n    let [startRow = 0, startCol = 0, endRow = rows, endCol = cols] = this.options.range;\n\n    startRow = Math.max(startRow, 0);\n    startCol = Math.max(startCol, 0);\n    endRow = Math.min(endRow, rows);\n    endCol = Math.min(endCol, cols);\n\n    return { startRow, startCol, endRow, endCol };\n  }\n\n  /**\n   * Check if row at specified row index is hidden.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {boolean}\n   */\n  _isHiddenRow(row) {\n    return this.hot.rowIndexMapper.isHidden(this.hot.toPhysicalRow(row));\n  }\n\n  /**\n   * Check if column at specified column index is hidden.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  _isHiddenColumn(column) {\n    return this.hot.columnIndexMapper.isHidden(this.hot.toPhysicalColumn(column));\n  }\n}\n\nexport default DataProvider;\n","import Csv from './types/csv';\n\nexport const TYPE_CSV = 'csv';\nexport const TYPE_EXCEL = 'excel'; // TODO\nexport const TYPE_PDF = 'pdf'; // TODO\n\nexport const EXPORT_TYPES = {\n  [TYPE_CSV]: Csv,\n};\n\n/**\n * @private\n * @param {string} type The exporter type.\n * @param {DataProvider} dataProvider The data provider.\n * @param {object} options Constructor options for exporter class.\n * @returns {BaseType|null}\n */\nexport default function typeFactory(type, dataProvider, options) {\n  if (typeof EXPORT_TYPES[type] === 'function') {\n    return new EXPORT_TYPES[type](dataProvider, options);\n  }\n\n  return null;\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport { stringify } from '../../../helpers/mixed';\nimport BaseType from './_base';\n\nconst CHAR_CARRIAGE_RETURN = String.fromCharCode(13);\nconst CHAR_DOUBLE_QUOTES = String.fromCharCode(34);\nconst CHAR_LINE_FEED = String.fromCharCode(10);\n\n/**\n * @private\n */\nclass Csv extends BaseType {\n  /**\n   * Default options for exporting CSV format.\n   *\n   * @returns {object}\n   */\n  static get DEFAULT_OPTIONS() {\n    return {\n      mimeType: 'text/csv',\n      fileExtension: 'csv',\n      bom: true,\n      columnDelimiter: ',',\n      rowDelimiter: '\\r\\n',\n    };\n  }\n\n  /**\n   * Create string body in desired format.\n   *\n   * @returns {string}\n   */\n  export() {\n    const options = this.options;\n    const data = this.dataProvider.getData();\n    let columnHeaders = this.dataProvider.getColumnHeaders();\n    const hasColumnHeaders = columnHeaders.length > 0;\n    const rowHeaders = this.dataProvider.getRowHeaders();\n    const hasRowHeaders = rowHeaders.length > 0;\n    let result = options.bom ? String.fromCharCode(0xFEFF) : '';\n\n    if (hasColumnHeaders) {\n      columnHeaders = arrayMap(columnHeaders, value => this._escapeCell(value, true));\n\n      if (hasRowHeaders) {\n        result += options.columnDelimiter;\n      }\n      result += columnHeaders.join(options.columnDelimiter);\n      result += options.rowDelimiter;\n    }\n\n    arrayEach(data, (value, index) => {\n      if (index > 0) {\n        result += options.rowDelimiter;\n      }\n      if (hasRowHeaders) {\n        result += this._escapeCell(rowHeaders[index]) + options.columnDelimiter;\n      }\n      result += value.map(cellValue => this._escapeCell(cellValue)).join(options.columnDelimiter);\n    });\n\n    return result;\n  }\n\n  /**\n   * Escape cell value.\n   *\n   * @param {*} value Cell value.\n   * @param {boolean} [force=false] Indicates if cell value will be escaped forcefully.\n   * @returns {string}\n   */\n  _escapeCell(value, force = false) {\n    let escapedValue = stringify(value);\n\n    if (escapedValue !== '' && (force ||\n      escapedValue.indexOf(CHAR_CARRIAGE_RETURN) >= 0 ||\n      escapedValue.indexOf(CHAR_DOUBLE_QUOTES) >= 0 ||\n      escapedValue.indexOf(CHAR_LINE_FEED) >= 0 ||\n      escapedValue.indexOf(this.options.columnDelimiter) >= 0)) {\n\n      escapedValue = escapedValue.replace(new RegExp('\"', 'g'), '\"\"');\n      escapedValue = `\"${escapedValue}\"`;\n    }\n\n    return escapedValue;\n  }\n}\n\nexport default Csv;\n","import { extend, clone } from '../../../helpers/object';\nimport { substitute } from '../../../helpers/string';\n\n/**\n * @private\n */\nclass BaseType {\n  /**\n   * Default options.\n   *\n   * @returns {object}\n   */\n  static get DEFAULT_OPTIONS() {\n    return {\n      mimeType: 'text/plain',\n      fileExtension: 'txt',\n      filename: 'Handsontable [YYYY]-[MM]-[DD]',\n      encoding: 'utf-8',\n      bom: false,\n      columnHeaders: false,\n      rowHeaders: false,\n      exportHiddenColumns: false,\n      exportHiddenRows: false,\n      range: [],\n    };\n  }\n\n  /**\n   * Data provider.\n   *\n   * @type {DataProvider}\n   */\n  dataProvider;\n  /**\n   * Format type class options.\n   *\n   * @type {object}\n   */\n  options;\n\n  constructor(dataProvider, options) {\n    this.dataProvider = dataProvider;\n    this.options = this._mergeOptions(options);\n    this.dataProvider.setOptions(this.options);\n  }\n\n  /**\n   * Merge options provided by users with defaults.\n   *\n   * @param {object} options An object with options to merge with.\n   * @returns {object} Returns new options object.\n   */\n  _mergeOptions(options) {\n    let _options = clone(this.constructor.DEFAULT_OPTIONS);\n    const date = new Date();\n\n    _options = extend(clone(BaseType.DEFAULT_OPTIONS), _options);\n    _options = extend(_options, options);\n\n    _options.filename = substitute(_options.filename, {\n      YYYY: date.getFullYear(),\n      MM: (`${date.getMonth() + 1}`).padStart(2, '0'),\n      DD: (`${date.getDate()}`).padStart(2, '0'),\n    });\n\n    return _options;\n  }\n}\n\nexport default BaseType;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Filters,\n} from './filters';\n","import { BasePlugin } from '../base';\nimport { arrayEach, arrayMap } from '../../helpers/array';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport { warn } from '../../helpers/console';\nimport { rangeEach } from '../../helpers/number';\nimport { addClass, removeClass } from '../../helpers/dom/element';\nimport { isKey } from '../../helpers/unicode';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport * as constants from '../../i18n/constants';\nimport { ConditionComponent } from './component/condition';\nimport { OperatorsComponent } from './component/operators';\nimport { ValueComponent } from './component/value';\nimport { ActionBarComponent } from './component/actionBar';\nimport ConditionCollection from './conditionCollection';\nimport DataFilter from './dataFilter';\nimport ConditionUpdateObserver from './conditionUpdateObserver';\nimport { createArrayAssertion, toEmptyString, unifyColumnValues } from './utils';\nimport { createMenuFocusController } from './menu/focusController';\nimport {\n  CONDITION_NONE,\n  CONDITION_BY_VALUE,\n  OPERATION_AND,\n  OPERATION_OR,\n  OPERATION_OR_THEN_VARIABLE\n} from './constants';\nimport { TrimmingMap } from '../../translations';\n\nimport './filters.scss';\n\nexport const PLUGIN_KEY = 'filters';\nexport const PLUGIN_PRIORITY = 250;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/**\n * @plugin Filters\n * @class Filters\n *\n * @description\n * The plugin allows filtering the table data either by the built-in component or with the API.\n *\n * See [the filtering demo](@/guides/columns/column-filter/column-filter.md) for examples.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   dropdownMenu: true,\n *   filters: true\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   dropdownMenu={true}\n *   filters={true}\n * />\n * ```\n * :::\n */\nexport class Filters extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:DropdownMenu',\n      'plugin:HiddenRows',\n      'cell-type:checkbox',\n    ];\n  }\n\n  /**\n   * Instance of {@link DropdownMenu}.\n   *\n   * @private\n   * @type {DropdownMenu}\n   */\n  dropdownMenuPlugin = null;\n  /**\n   * Instance of {@link ConditionCollection}.\n   *\n   * @private\n   * @type {ConditionCollection}\n   */\n  conditionCollection = null;\n  /**\n   * Instance of {@link ConditionUpdateObserver}.\n   *\n   * @private\n   * @type {ConditionUpdateObserver}\n   */\n  conditionUpdateObserver = null;\n  /**\n   * Map, where key is component identifier and value represent `BaseComponent` element or it derivatives.\n   *\n   * @private\n   * @type {Map}\n   */\n  components = new Map([\n    ['filter_by_condition', null],\n    ['filter_operators', null],\n    ['filter_by_condition2', null],\n    ['filter_by_value', null],\n    ['filter_action_bar', null]\n  ]);\n  /**\n   * Map of skipped rows by plugin.\n   *\n   * @private\n   * @type {null|TrimmingMap}\n   */\n  filtersRowsMap = null;\n  /**\n   * Menu focus navigator allows switching the focus position through Tab and Shift Tab keys.\n   *\n   * @type {MenuFocusNavigator|undefined}\n   */\n  #menuFocusNavigator;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n    // One listener for the enable/disable functionality\n    this.hot.addHook('afterGetColHeader', (col, TH) => this.#onAfterGetColHeader(col, TH));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link Filters#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    /* eslint-disable no-unneeded-ternary */\n    return this.hot.getSettings()[PLUGIN_KEY] ? true : false;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.filtersRowsMap = this.hot.rowIndexMapper.registerMap(this.pluginName, new TrimmingMap());\n    this.dropdownMenuPlugin = this.hot.getPlugin('dropdownMenu');\n\n    const dropdownSettings = this.hot.getSettings().dropdownMenu;\n    const menuContainer = (dropdownSettings && dropdownSettings.uiContainer) || this.hot.rootDocument.body;\n    const addConfirmationHooks = (component) => {\n      component.addLocalHook('accept', () => this.#onActionBarSubmit('accept'));\n      component.addLocalHook('cancel', () => this.#onActionBarSubmit('cancel'));\n      component.addLocalHook('change', command => this.#onComponentChange(component, command));\n\n      return component;\n    };\n\n    const filterByConditionLabel = () => `${this.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_CONDITION)}:`;\n    const filterValueLabel = () => `${this.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_VALUE)}:`;\n\n    if (!this.components.get('filter_by_condition')) {\n      const conditionComponent = new ConditionComponent(this.hot, {\n        id: 'filter_by_condition',\n        name: filterByConditionLabel,\n        addSeparator: false,\n        menuContainer\n      });\n\n      conditionComponent.addLocalHook('afterClose', () => this.#onSelectUIClosed());\n\n      this.components.set('filter_by_condition', addConfirmationHooks(conditionComponent));\n    }\n\n    if (!this.components.get('filter_operators')) {\n      this.components.set('filter_operators', new OperatorsComponent(this.hot, {\n        id: 'filter_operators',\n        name: 'Operators'\n      }));\n    }\n\n    if (!this.components.get('filter_by_condition2')) {\n      const conditionComponent = new ConditionComponent(this.hot, {\n        id: 'filter_by_condition2',\n        name: '',\n        addSeparator: true,\n        menuContainer\n      });\n\n      conditionComponent.addLocalHook('afterClose', () => this.#onSelectUIClosed());\n\n      this.components.set('filter_by_condition2', addConfirmationHooks(conditionComponent));\n    }\n\n    if (!this.components.get('filter_by_value')) {\n      this.components.set('filter_by_value', addConfirmationHooks(new ValueComponent(this.hot, {\n        id: 'filter_by_value',\n        name: filterValueLabel\n      })));\n    }\n\n    if (!this.components.get('filter_action_bar')) {\n      this.components.set('filter_action_bar', addConfirmationHooks(new ActionBarComponent(this.hot, {\n        id: 'filter_action_bar',\n        name: 'Action bar'\n      })));\n    }\n\n    if (!this.conditionCollection) {\n      this.conditionCollection = new ConditionCollection(this.hot);\n    }\n\n    if (!this.conditionUpdateObserver) {\n      this.conditionUpdateObserver = new ConditionUpdateObserver(\n        this.hot,\n        this.conditionCollection,\n        physicalColumn => this.getDataMapAtColumn(physicalColumn),\n      );\n      this.conditionUpdateObserver.addLocalHook('update', conditionState => this.#updateComponents(conditionState));\n    }\n\n    this.components.forEach(component => component.show());\n\n    this.addHook('afterDropdownMenuDefaultOptions',\n      defaultOptions => this.#onAfterDropdownMenuDefaultOptions(defaultOptions));\n    this.addHook('afterDropdownMenuShow', () => this.#onAfterDropdownMenuShow());\n    this.addHook('afterDropdownMenuHide', () => this.#onAfterDropdownMenuHide());\n    this.addHook('afterChange', changes => this.#onAfterChange(changes));\n\n    // Temp. solution (extending menu items bug in contextMenu/dropdownMenu)\n    if (this.hot.getSettings().dropdownMenu && this.dropdownMenuPlugin) {\n      this.dropdownMenuPlugin.disablePlugin();\n      this.dropdownMenuPlugin.enablePlugin();\n    }\n\n    if (!this.#menuFocusNavigator && this.dropdownMenuPlugin.enabled) {\n      const mainMenu = this.dropdownMenuPlugin.menu;\n      const focusableItems = [\n        // A fake menu item that once focused allows escaping from the focus navigation (using Tab keys)\n        // to the menu navigation using arrow keys.\n        {\n          focus: () => {\n            const menuNavigator = mainMenu.getNavigator();\n            const lastSelectedMenuItem = this.#menuFocusNavigator.getLastMenuPage();\n\n            mainMenu.focus();\n\n            if (lastSelectedMenuItem > 0) {\n              menuNavigator.setCurrentPage(lastSelectedMenuItem);\n            } else {\n              menuNavigator.toFirstItem();\n            }\n          },\n        },\n        ...Array.from(this.components)\n          .map(([, component]) => component.getElements())\n          .flat(),\n      ];\n\n      this.#menuFocusNavigator = createMenuFocusController(mainMenu, focusableItems);\n\n      const forwardToFocusNavigation = (event) => {\n        this.#menuFocusNavigator.listen();\n        event.preventDefault();\n\n        if (isKey(event.keyCode, 'TAB')) {\n          if (event.shiftKey) {\n            this.#menuFocusNavigator.toPreviousItem();\n          } else {\n            this.#menuFocusNavigator.toNextItem();\n          }\n        }\n      };\n\n      this.components.get('filter_by_value')\n        .addLocalHook('listTabKeydown', forwardToFocusNavigation);\n      this.components.get('filter_by_condition')\n        .addLocalHook('selectTabKeydown', forwardToFocusNavigation);\n    }\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    if (this.enabled) {\n      if (this.dropdownMenuPlugin?.enabled) {\n        this.dropdownMenuPlugin.menu.clearLocalHooks();\n      }\n\n      this.components.forEach((component, key) => {\n        component.destroy();\n        this.components.set(key, null);\n      });\n      this.conditionCollection.destroy();\n      this.conditionCollection = null;\n      this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    }\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for clearing the filters.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Alt', 'A']],\n        stopPropagation: true,\n        callback: () => {\n          const selection = this.hot.getSelected();\n\n          this.clearConditions();\n          this.filter();\n\n          if (selection) {\n            this.hot.selectCells(selection);\n          }\n        },\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for clearing the filters.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof Filters#\n   * @function addCondition\n   * @description\n   * Adds condition to the conditions collection at specified column index.\n   *\n   * Possible predefined conditions:\n   *  * `begins_with` - Begins with\n   *  * `between` - Between\n   *  * `by_value` - By value\n   *  * `contains` - Contains\n   *  * `date_after` - After a date\n   *  * `date_before` - Before a date\n   *  * `date_today` - Today\n   *  * `date_tomorrow` - Tomorrow\n   *  * `date_yesterday` - Yesterday\n   *  * `empty` - Empty\n   *  * `ends_with` - Ends with\n   *  * `eq` - Equal\n   *  * `gt` - Greater than\n   *  * `gte` - Greater than or equal\n   *  * `lt` - Less than\n   *  * `lte` - Less than or equal\n   *  * `none` - None (no filter)\n   *  * `not_between` - Not between\n   *  * `not_contains` - Not contains\n   *  * `not_empty` - Not empty\n   *  * `neq` - Not equal.\n   *\n   * Possible operations on collection of conditions:\n   *  * `conjunction` - [**Conjunction**](https://en.wikipedia.org/wiki/Logical_conjunction) on conditions collection (by default), i.e. for such operation: <br/> c1 AND c2 AND c3 AND c4 ... AND cn === TRUE, where c1 ... cn are conditions.\n   *  * `disjunction` - [**Disjunction**](https://en.wikipedia.org/wiki/Logical_disjunction) on conditions collection, i.e. for such operation: <br/> c1 OR c2 OR c3 OR c4 ... OR cn === TRUE, where c1, c2, c3, c4 ... cn are conditions.\n   *  * `disjunctionWithExtraCondition` - **Disjunction** on first `n - 1`\\* conditions from collection with an extra requirement computed from the last condition, i.e. for such operation: <br/> c1 OR c2 OR c3 OR c4 ... OR cn-1 AND cn === TRUE, where c1, c2, c3, c4 ... cn are conditions.\n   *\n   * \\* when `n` is collection size; it's used i.e. for one operation introduced from UI (when choosing from filter's drop-down menu two conditions with OR operator between them, mixed with choosing values from the multiple choice select)\n   *\n   * **Note**: Mind that you cannot mix different types of operations (for instance, if you use `conjunction`, use it consequently for a particular column).\n   *\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * const container = document.getElementById('example');\n   * const hot = new Handsontable(container, {\n   *   data: getData(),\n   *   filters: true\n   * });\n   *\n   * // access to filters plugin instance\n   * const filtersPlugin = hot.getPlugin('filters');\n   *\n   * // add filter \"Greater than\" 95 to column at index 1\n   * filtersPlugin.addCondition(1, 'gt', [95]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"By value\" to column at index 1\n   * // in this case all value's that don't match will be filtered.\n   * filtersPlugin.addCondition(1, 'by_value', [['ing', 'ed', 'as', 'on']]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" AND \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'conjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'conjunction');\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" OR \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'disjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'disjunction');\n   * filtersPlugin.filter();\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * const hotRef = useRef(null);\n   *\n   * ...\n   *\n   * <HotTable\n   *   ref={hotRef}\n   *   data={getData()}\n   *   filters={true}\n   * />\n   *\n   * // access to filters plugin instance\n   * const hot = hotRef.current.hotInstance;\n   * const filtersPlugin = hot.getPlugin('filters');\n   *\n   * // add filter \"Greater than\" 95 to column at index 1\n   * filtersPlugin.addCondition(1, 'gt', [95]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"By value\" to column at index 1\n   * // in this case all value's that don't match will be filtered.\n   * filtersPlugin.addCondition(1, 'by_value', [['ing', 'ed', 'as', 'on']]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" AND \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'conjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'conjunction');\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" OR \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'disjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'disjunction');\n   * filtersPlugin.filter();\n   * ```\n   * :::\n   *\n   * @param {number} column Visual column index.\n   * @param {string} name Condition short name.\n   * @param {Array} args Condition arguments.\n   * @param {string} [operationId=conjunction] `id` of operation which is performed on the column.\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  addCondition(column, name, args, operationId = OPERATION_AND) {\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.conditionCollection.addCondition(physicalColumn, { command: { key: name }, args }, operationId);\n  }\n\n  /**\n   * Removes conditions at specified column index.\n   *\n   * @param {number} column Visual column index.\n   */\n  removeConditions(column) {\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.conditionCollection.removeConditions(physicalColumn);\n  }\n\n  /**\n   * Clears all conditions previously added to the collection for the specified column index or, if the column index\n   * was not passed, clear the conditions for all columns.\n   *\n   * @param {number} [column] Visual column index.\n   */\n  clearConditions(column) {\n    if (column === undefined) {\n      this.conditionCollection.clean();\n\n    } else {\n      const physicalColumn = this.hot.toPhysicalColumn(column);\n\n      this.conditionCollection.removeConditions(physicalColumn);\n    }\n  }\n\n  /**\n   * Filters data based on added filter conditions.\n   *\n   * @fires Hooks#beforeFilter\n   * @fires Hooks#afterFilter\n   */\n  filter() {\n    const { navigableHeaders } = this.hot.getSettings();\n    const dataFilter = this._createDataFilter();\n    const needToFilter = !this.conditionCollection.isEmpty();\n    let visibleVisualRows = [];\n\n    const conditions = this.conditionCollection.exportAllConditions();\n    const allowFiltering = this.hot.runHooks(\n      'beforeFilter',\n      conditions,\n      this.conditionCollection.previousConditionStack\n    );\n\n    if (allowFiltering !== false) {\n      if (needToFilter) {\n        const trimmedRows = [];\n\n        this.hot.batchExecution(() => {\n          this.filtersRowsMap.clear();\n\n          visibleVisualRows = arrayMap(dataFilter.filter(), rowData => rowData.meta.visualRow);\n\n          const visibleVisualRowsAssertion = createArrayAssertion(visibleVisualRows);\n\n          rangeEach(this.hot.countSourceRows() - 1, (row) => {\n            if (!visibleVisualRowsAssertion(row)) {\n              trimmedRows.push(row);\n            }\n          });\n\n          arrayEach(trimmedRows, (physicalRow) => {\n            this.filtersRowsMap.setValueAtIndex(physicalRow, true);\n          });\n        }, true);\n\n        if (!navigableHeaders && !visibleVisualRows.length) {\n          this.hot.deselectCell();\n        }\n      } else {\n        this.filtersRowsMap.clear();\n      }\n    }\n\n    this.hot.runHooks('afterFilter', conditions);\n\n    this.conditionCollection.setPreviousConditionStack(null);\n\n    this.hot.view.adjustElementsSize();\n    this.hot.render();\n\n    if (this.hot.selection.isSelected()) {\n      this.hot.selectCell(\n        navigableHeaders ? -1 : 0,\n        this.hot.getSelectedRangeLast().highlight.col,\n      );\n    }\n  }\n\n  /**\n   * Gets last selected column index.\n   *\n   * @returns {{visualIndex: number, physicalIndex: number} | null} Returns `null` when a column is\n   * not selected. Otherwise, returns an object with `visualIndex` and `physicalIndex` properties containing\n   * the index of the column.\n   */\n  getSelectedColumn() {\n    const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n    if (!highlight) {\n      return null;\n    }\n\n    return {\n      visualIndex: highlight.col,\n      physicalIndex: this.hot.toPhysicalColumn(highlight.col),\n    };\n  }\n\n  /**\n   * Returns handsontable source data with cell meta based on current selection.\n   *\n   * @param {number} [column] The physical column index. By default column index accept the value of the selected column.\n   * @returns {Array} Returns array of objects where keys as row index.\n   */\n  getDataMapAtColumn(column) {\n    const visualColumn = this.hot.toVisualColumn(column);\n    const data = [];\n\n    arrayEach(this.hot.getSourceDataAtCol(visualColumn), (value, rowIndex) => {\n      const { row, col, visualCol, visualRow, type, instance, dateFormat, locale } =\n        this.hot.getCellMeta(rowIndex, visualColumn);\n      const dataValue = this.hot.getDataAtCell(this.hot.toVisualRow(rowIndex), visualColumn) ?? value;\n\n      data.push({\n        meta: { row, col, visualCol, visualRow, type, instance, dateFormat, locale },\n        value: toEmptyString(dataValue),\n      });\n    });\n\n    return data;\n  }\n\n  /**\n   * `afterChange` listener.\n   *\n   * @param {Array} changes Array of changes.\n   */\n  #onAfterChange(changes) {\n    if (changes) {\n      arrayEach(changes, (change) => {\n        const [, prop] = change;\n        const columnIndex = this.hot.propToCol(prop);\n\n        if (this.conditionCollection.hasConditions(columnIndex)) {\n          this.updateValueComponentCondition(columnIndex);\n        }\n      });\n    }\n  }\n\n  /**\n   * Update the condition of ValueComponent, based on the handled changes.\n   *\n   * @private\n   * @param {number} columnIndex Column index of handled ValueComponent condition.\n   */\n  updateValueComponentCondition(columnIndex) {\n    const dataAtCol = this.hot.getDataAtCol(columnIndex);\n    const selectedValues = unifyColumnValues(dataAtCol);\n\n    this.conditionUpdateObserver.updateStatesAtColumn(columnIndex, selectedValues);\n  }\n\n  /**\n   * Restores components to its saved state.\n   *\n   * @private\n   * @param {Array} components List of components.\n   */\n  restoreComponents(components) {\n    const physicalIndex = this.getSelectedColumn()?.physicalIndex;\n\n    components.forEach((component) => {\n      if (component.isHidden()) {\n        return;\n      }\n\n      component.restoreState(physicalIndex);\n    });\n\n    this.updateDependentComponentsVisibility();\n  }\n\n  /**\n   * After dropdown menu show listener.\n   */\n  #onAfterDropdownMenuShow() {\n    const menu = this.dropdownMenuPlugin.menu;\n\n    this.restoreComponents(Array.from(this.components.values()));\n\n    menu.updateMenuDimensions();\n  }\n\n  /**\n   * After dropdown menu hide listener.\n   */\n  #onAfterDropdownMenuHide() {\n    this.components.get('filter_by_condition').getSelectElement().closeOptions();\n    this.components.get('filter_by_condition2').getSelectElement().closeOptions();\n  }\n\n  /**\n   * After dropdown menu default options listener.\n   *\n   * @param {object} defaultOptions ContextMenu default item options.\n   */\n  #onAfterDropdownMenuDefaultOptions(defaultOptions) {\n    defaultOptions.items.push({ name: SEPARATOR });\n\n    this.components.forEach((component) => {\n      defaultOptions.items.push(component.getMenuItemDescriptor());\n    });\n  }\n\n  /**\n   * Get an operation, based on the number and types of arguments (where arguments are states of components).\n   *\n   * @param {string} suggestedOperation Operation which was chosen by user from UI.\n   * @param {object} byConditionState1 State of first condition component.\n   * @param {object} byConditionState2 State of second condition component.\n   * @param {object} byValueState State of value component.\n   * @private\n   * @returns {string}\n   */\n  getOperationBasedOnArguments(suggestedOperation, byConditionState1, byConditionState2, byValueState) {\n    let operation = suggestedOperation;\n\n    if (operation === OPERATION_OR && byConditionState1.command.key !== CONDITION_NONE &&\n      byConditionState2.command.key !== CONDITION_NONE && byValueState.command.key !== CONDITION_NONE) {\n      operation = OPERATION_OR_THEN_VARIABLE;\n\n    } else if (byValueState.command.key !== CONDITION_NONE) {\n      if (byConditionState1.command.key === CONDITION_NONE || byConditionState2.command.key === CONDITION_NONE) {\n        operation = OPERATION_AND;\n      }\n    }\n\n    return operation;\n  }\n\n  /**\n   * On action bar submit listener.\n   *\n   * @private\n   * @param {string} submitType The submit type.\n   */\n  #onActionBarSubmit(submitType) {\n    if (submitType === 'accept') {\n      const selectedColumn = this.getSelectedColumn();\n\n      if (selectedColumn === null) {\n        this.dropdownMenuPlugin?.close();\n\n        return;\n      }\n\n      const { physicalIndex } = selectedColumn;\n      const byConditionState1 = this.components.get('filter_by_condition').getState();\n      const byConditionState2 = this.components.get('filter_by_condition2').getState();\n      const byValueState = this.components.get('filter_by_value').getState();\n\n      const operation = this.getOperationBasedOnArguments(\n        this.components.get('filter_operators').getActiveOperationId(),\n        byConditionState1,\n        byConditionState2,\n        byValueState\n      );\n\n      this.conditionUpdateObserver.groupChanges();\n\n      let columnStackPosition = this.conditionCollection.getColumnStackPosition(physicalIndex);\n\n      if (columnStackPosition === -1) {\n        columnStackPosition = undefined;\n      }\n\n      this.conditionCollection.removeConditions(physicalIndex);\n\n      if (byConditionState1.command.key !== CONDITION_NONE) {\n        this.conditionCollection.addCondition(physicalIndex, byConditionState1, operation, columnStackPosition);\n\n        if (byConditionState2.command.key !== CONDITION_NONE) {\n          this.conditionCollection.addCondition(physicalIndex, byConditionState2, operation, columnStackPosition);\n        }\n      }\n\n      if (byValueState.command.key !== CONDITION_NONE) {\n        this.conditionCollection.addCondition(physicalIndex, byValueState, operation, columnStackPosition);\n      }\n\n      this.conditionUpdateObserver.flush();\n      this.components.forEach(component => component.saveState(physicalIndex));\n      this.filtersRowsMap.clear();\n      this.filter();\n    }\n\n    this.dropdownMenuPlugin?.close();\n  }\n\n  /**\n   * On component change listener.\n   *\n   * @param {BaseComponent} component Component inheriting BaseComponent.\n   * @param {object} command Menu item object (command).\n   */\n  #onComponentChange(component, command) {\n    this.updateDependentComponentsVisibility();\n\n    if (component.constructor === ConditionComponent && !command.inputsCount) {\n      this.setListeningDropdownMenu();\n    }\n  }\n\n  /**\n   * On component SelectUI closed listener.\n   */\n  #onSelectUIClosed() {\n    this.setListeningDropdownMenu();\n  }\n\n  /**\n   * Listen to the keyboard input on document body and forward events to instance of Handsontable\n   * created by DropdownMenu plugin.\n   *\n   * @private\n   */\n  setListeningDropdownMenu() {\n    if (this.dropdownMenuPlugin) {\n      this.dropdownMenuPlugin.setListening();\n    }\n  }\n\n  /**\n   * Updates visibility of some of the components, based on the state of the parent component.\n   *\n   * @private\n   */\n  updateDependentComponentsVisibility() {\n    const component = this.components.get('filter_by_condition');\n    const { command } = component.getState();\n    const componentsToShow = [\n      this.components.get('filter_by_condition2'),\n      this.components.get('filter_operators')\n    ];\n\n    if (command.showOperators) {\n      this.showComponents(...componentsToShow);\n    } else {\n      this.hideComponents(...componentsToShow);\n    }\n  }\n\n  /**\n   * On after get column header listener.\n   *\n   * @param {number} col Visual column index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   */\n  #onAfterGetColHeader(col, TH) {\n    const physicalColumn = this.hot.toPhysicalColumn(col);\n\n    if (this.enabled && this.conditionCollection.hasConditions(physicalColumn)) {\n      addClass(TH, 'htFiltersActive');\n    } else {\n      removeClass(TH, 'htFiltersActive');\n    }\n  }\n\n  /**\n   * Creates DataFilter instance based on condition collection.\n   *\n   * @private\n   * @param {ConditionCollection} conditionCollection Condition collection object.\n   * @returns {DataFilter}\n   */\n  _createDataFilter(conditionCollection = this.conditionCollection) {\n    return new DataFilter(conditionCollection, physicalColumn => this.getDataMapAtColumn(physicalColumn));\n  }\n\n  /**\n   * It updates the components state. The state is triggered by ConditionUpdateObserver, which\n   * reacts to any condition added to the condition collection. It may be added through the UI\n   * components or by API call.\n   *\n   * @param {object} conditionsState An object with the state generated by UI components.\n   */\n  #updateComponents(conditionsState) {\n    if (!this.dropdownMenuPlugin?.enabled) {\n      return;\n    }\n\n    const {\n      editedConditionStack: {\n        conditions,\n        column,\n      }\n    } = conditionsState;\n\n    const conditionsByValue = conditions.filter(condition => condition.name === CONDITION_BY_VALUE);\n    const conditionsWithoutByValue = conditions.filter(condition => condition.name !== CONDITION_BY_VALUE);\n\n    if (conditionsByValue.length >= 2 || conditionsWithoutByValue.length >= 3) {\n      warn(toSingleLine`The filter conditions have been applied properly, but couldn’t be displayed visually.\\x20\n        The overall amount of conditions exceed the capability of the dropdown menu.\\x20\n        For more details see the documentation.`);\n\n    } else {\n      const operationType = this.conditionCollection.getOperation(column);\n\n      this.components.get('filter_by_condition').updateState(conditionsWithoutByValue[0], column);\n      this.components.get('filter_by_condition2').updateState(conditionsWithoutByValue[1], column);\n      this.components.get('filter_operators').updateState(operationType, column);\n      this.components.get('filter_by_value').updateState(conditionsState);\n    }\n  }\n\n  /**\n   * Returns indexes of passed components inside list of `dropdownMenu` items.\n   *\n   * @private\n   * @param {...BaseComponent} components List of components.\n   * @returns {Array}\n   */\n  getIndexesOfComponents(...components) {\n    const indexes = [];\n\n    if (!this.dropdownMenuPlugin) {\n      return indexes;\n    }\n\n    const menu = this.dropdownMenuPlugin.menu;\n\n    arrayEach(components, (component) => {\n      arrayEach(menu.menuItems, (item, index) => {\n        if (item.key === component.getMenuItemDescriptor().key) {\n\n          indexes.push(index);\n        }\n      });\n    });\n\n    return indexes;\n  }\n\n  /**\n   * Changes visibility of component.\n   *\n   * @private\n   * @param {boolean} visible Determine if components should be visible.\n   * @param {...BaseComponent} components List of components.\n   */\n  changeComponentsVisibility(visible = true, ...components) {\n    if (!this.dropdownMenuPlugin) {\n      return;\n    }\n\n    const menu = this.dropdownMenuPlugin.menu;\n    const hotMenu = menu.hotMenu;\n    const hiddenRows = hotMenu.getPlugin('hiddenRows');\n    const indexes = this.getIndexesOfComponents(...components);\n\n    if (visible) {\n      hiddenRows.showRows(indexes);\n\n    } else {\n      hiddenRows.hideRows(indexes);\n    }\n\n    hotMenu.render();\n  }\n\n  /**\n   * Hides components of filters `dropdownMenu`.\n   *\n   * @private\n   * @param {...BaseComponent} components List of components.\n   */\n  hideComponents(...components) {\n    this.changeComponentsVisibility(false, ...components);\n  }\n\n  /**\n   * Shows components of filters `dropdownMenu`.\n   *\n   * @private\n   * @param {...BaseComponent} components List of components.\n   */\n  showComponents(...components) {\n    this.changeComponentsVisibility(true, ...components);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    if (this.enabled) {\n      this.components.forEach((component, key) => {\n        if (component !== null) {\n          component.destroy();\n          this.components.set(key, null);\n        }\n      });\n      this.conditionCollection.destroy();\n      this.conditionUpdateObserver.destroy();\n      this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    }\n\n    super.destroy();\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { arrayEach } from '../../../helpers/array';\nimport { isKey } from '../../../helpers/unicode';\nimport { clone } from '../../../helpers/object';\nimport * as C from '../../../i18n/constants';\nimport { BaseComponent } from './_base';\nimport getOptionsList, { CONDITION_NONE } from '../constants';\nimport { InputUI } from '../ui/input';\nimport { SelectUI } from '../ui/select';\nimport { getConditionDescriptor } from '../conditionRegisterer';\n\n/**\n * @private\n * @class ConditionComponent\n */\nexport class ConditionComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n  /**\n   * @type {boolean}\n   */\n  addSeparator = false;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: false,\n    });\n\n    this.name = options.name;\n    this.addSeparator = options.addSeparator;\n\n    this.elements.push(new SelectUI(this.hot, { menuContainer: options.menuContainer }));\n    this.elements.push(new InputUI(this.hot, { placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_VALUE }));\n    this.elements.push(new InputUI(this.hot, { placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE }));\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n  registerHooks() {\n    this.getSelectElement()\n      .addLocalHook('select', command => this.#onConditionSelect(command))\n      .addLocalHook('afterClose', () => this.runLocalHooks('afterClose'))\n      .addLocalHook('tabKeydown', event => this.runLocalHooks('selectTabKeydown', event));\n\n    arrayEach(this.getInputElements(), (input) => {\n      input.addLocalHook('keydown', event => this.#onInputKeyDown(event));\n    });\n  }\n\n  /**\n   * Set state of the component.\n   *\n   * @param {object} value State to restore.\n   */\n  setState(value) {\n    this.reset();\n\n    if (!value) {\n      return;\n    }\n\n    const copyOfCommand = clone(value.command);\n\n    if (copyOfCommand.name.startsWith(C.FILTERS_CONDITIONS_NAMESPACE)) {\n      copyOfCommand.name = this.hot.getTranslatedPhrase(copyOfCommand.name);\n    }\n\n    this.getSelectElement().setValue(copyOfCommand);\n    arrayEach(value.args, (arg, index) => {\n      if (index > copyOfCommand.inputsCount - 1) {\n        return false;\n      }\n\n      const element = this.getInputElement(index);\n\n      element.setValue(arg);\n      element[copyOfCommand.inputsCount > index ? 'show' : 'hide']();\n\n      if (!index) {\n        this.hot._registerTimeout(() => element.focus(), 10);\n      }\n    });\n  }\n\n  /**\n   * Export state of the component (get selected filter and filter arguments).\n   *\n   * @returns {object} Returns object where `command` key keeps used condition filter and `args` key its arguments.\n   */\n  getState() {\n    const command = this.getSelectElement().getValue() || getConditionDescriptor(CONDITION_NONE);\n    const args = [];\n\n    arrayEach(this.getInputElements(), (element, index) => {\n      if (command.inputsCount > index) {\n        args.push(element.getValue());\n      }\n    });\n\n    return {\n      command,\n      args,\n    };\n  }\n\n  /**\n   * Update state of component.\n   *\n   * @param {object} condition The condition object.\n   * @param {object} condition.command The command object with condition name as `key` property.\n   * @param {Array} condition.args An array of values to compare.\n   * @param {number} column Physical column index.\n   */\n  updateState(condition, column) {\n    const command = condition ? getConditionDescriptor(condition.name) : getConditionDescriptor(CONDITION_NONE);\n\n    this.state.setValueAtIndex(column, {\n      command,\n      args: condition ? condition.args : [],\n    });\n\n    if (!condition) {\n      arrayEach(this.getInputElements(), element => element.setValue(null));\n    }\n  }\n\n  /**\n   * Get select element.\n   *\n   * @returns {SelectUI}\n   */\n  getSelectElement() {\n    return this.elements.filter(element => element instanceof SelectUI)[0];\n  }\n\n  /**\n   * Get input element.\n   *\n   * @param {number} index Index an array of elements.\n   * @returns {InputUI}\n   */\n  getInputElement(index = 0) {\n    return this.getInputElements()[index];\n  }\n\n  /**\n   * Get input elements.\n   *\n   * @returns {Array}\n   */\n  getInputElements() {\n    return this.elements.filter(element => element instanceof InputUI);\n  }\n\n  /**\n   * Get menu object descriptor.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper, row, col, prop, value) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuCondition');\n\n        if (this.addSeparator) {\n          addClass(wrapper.parentNode, 'border');\n        }\n\n        const label = this.hot.rootDocument.createElement('div');\n\n        addClass(label, 'htFiltersMenuLabel');\n\n        label.textContent = value;\n\n        wrapper.appendChild(label);\n\n        // The SelectUI should not extend the menu width (it should adjust to the menu item width only).\n        // That's why it's skipped from rendering when the GhostTable tries to render it.\n        if (!wrapper.parentElement.hasAttribute('ghost-table')) {\n          arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n        }\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Reset elements to their initial state.\n   */\n  reset() {\n    const selectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n    let items = [getConditionDescriptor(CONDITION_NONE)];\n\n    if (selectedColumn !== null) {\n      const { visualIndex } = selectedColumn;\n\n      items = getOptionsList(this.hot.getDataType(0, visualIndex, this.hot.countRows(), visualIndex));\n    }\n\n    arrayEach(this.getInputElements(), element => element.hide());\n    this.getSelectElement().setItems(items);\n    super.reset();\n    // Select element as default 'None'\n    this.getSelectElement().setValue(items[0]);\n  }\n\n  /**\n   * On condition select listener.\n   *\n   * @param {object} command Menu item object (command).\n   */\n  #onConditionSelect(command) {\n    arrayEach(this.getInputElements(), (element, index) => {\n      element[command.inputsCount > index ? 'show' : 'hide']();\n\n      if (index === 0) {\n        this.hot._registerTimeout(() => element.focus(), 10);\n      }\n    });\n\n    this.runLocalHooks('change', command);\n  }\n\n  /**\n   * Key down listener.\n   *\n   * @param {Event} event The DOM event object.\n   */\n  #onInputKeyDown(event) {\n    if (isKey(event.keyCode, 'ESCAPE')) {\n      this.runLocalHooks('cancel');\n      stopImmediatePropagation(event);\n    }\n  }\n}\n","import { arrayEach } from '../../../helpers/array';\nimport { mixin } from '../../../helpers/object';\nimport localHooks from '../../../mixins/localHooks';\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from '../../../translations';\n\n/**\n * @private\n * @class BaseComponent\n */\nexport class BaseComponent {\n  /**\n   * The Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * The component uniq id.\n   *\n   * @type {string}\n   */\n  id;\n  /**\n   * List of registered component UI elements.\n   *\n   * @type {Array}\n   */\n  elements = [];\n  /**\n   * Flag which determines if element is hidden.\n   *\n   * @type {boolean}\n   */\n  hidden = false;\n  /**\n   * The component states id.\n   *\n   * @type {string}\n   */\n  stateId = '';\n  /**\n   * Index map which stores component states for each column.\n   *\n   * @type {LinkedPhysicalIndexToValueMap|null}\n   */\n  state;\n\n  constructor(hotInstance, { id, stateless = true }) {\n    this.hot = hotInstance;\n    this.id = id;\n    this.stateId = `Filters.component.${this.id}`;\n    this.state = stateless ? null : this.hot.columnIndexMapper.registerMap(this.stateId, new IndexToValueMap());\n  }\n\n  /**\n   * Gets the list of elements from which the component is built.\n   *\n   * @returns {BaseUI[]}\n   */\n  getElements() {\n    return this.elements;\n  }\n\n  /**\n   * Reset elements to its initial state.\n   */\n  reset() {\n    arrayEach(this.elements, ui => ui.reset());\n  }\n\n  /**\n   * Hide component.\n   */\n  hide() {\n    this.hidden = true;\n  }\n\n  /**\n   * Show component.\n   */\n  show() {\n    this.hidden = false;\n  }\n\n  /**\n   * Check if component is hidden.\n   *\n   * @returns {boolean}\n   */\n  isHidden() {\n    return this.hot === null || this.hidden;\n  }\n\n  /**\n   * Restores the component state from the given physical column index. The method\n   * internally calls the `setState` method. The state then is individually processed\n   * by each component.\n   *\n   * @param {number} physicalColumn The physical column index.\n   */\n  restoreState(physicalColumn) {\n    if (this.state) {\n      this.setState(this.state.getValueAtIndex(physicalColumn));\n    }\n  }\n\n  /**\n   * The custom logic for component state restoring.\n   */\n  setState() {\n    throw new Error('The state setting logic is not implemented');\n  }\n\n  /**\n   * Saves the component state to the given physical column index. The method\n   * internally calls the `getState` method, which returns the current state of\n   * the component.\n   *\n   * @param {number} physicalColumn The physical column index.\n   */\n  saveState(physicalColumn) {\n    if (this.state) {\n      this.state.setValueAtIndex(physicalColumn, this.getState());\n    }\n  }\n\n  /**\n   * The custom logic for component state gathering (for stateful components).\n   */\n  getState() {\n    throw new Error('The state gathering logic is not implemented');\n  }\n\n  /**\n   * Destroy element.\n   */\n  destroy() {\n    this.hot.columnIndexMapper.unregisterMap(this.stateId);\n    this.clearLocalHooks();\n    arrayEach(this.elements, ui => ui.destroy());\n    this.state = null;\n    this.elements = null;\n    this.hot = null;\n  }\n}\n\nmixin(BaseComponent, localHooks);\n","import { clone } from '../../helpers/object';\nimport { arrayEach } from '../../helpers/array';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport { getConditionDescriptor } from './conditionRegisterer';\n\nimport { CONDITION_NAME as CONDITION_NONE } from './condition/none';\nimport { CONDITION_NAME as CONDITION_EMPTY } from './condition/empty';\nimport { CONDITION_NAME as CONDITION_NOT_EMPTY } from './condition/notEmpty';\nimport { CONDITION_NAME as CONDITION_EQUAL } from './condition/equal';\nimport { CONDITION_NAME as CONDITION_NOT_EQUAL } from './condition/notEqual';\nimport { CONDITION_NAME as CONDITION_GREATER_THAN } from './condition/greaterThan';\nimport { CONDITION_NAME as CONDITION_GREATER_THAN_OR_EQUAL } from './condition/greaterThanOrEqual';\nimport { CONDITION_NAME as CONDITION_LESS_THAN } from './condition/lessThan';\nimport { CONDITION_NAME as CONDITION_LESS_THAN_OR_EQUAL } from './condition/lessThanOrEqual';\nimport { CONDITION_NAME as CONDITION_BETWEEN } from './condition/between';\nimport { CONDITION_NAME as CONDITION_NOT_BETWEEN } from './condition/notBetween';\nimport { CONDITION_NAME as CONDITION_BEGINS_WITH } from './condition/beginsWith';\nimport { CONDITION_NAME as CONDITION_ENDS_WITH } from './condition/endsWith';\nimport { CONDITION_NAME as CONDITION_CONTAINS } from './condition/contains';\nimport { CONDITION_NAME as CONDITION_NOT_CONTAINS } from './condition/notContains';\nimport { CONDITION_NAME as CONDITION_DATE_BEFORE } from './condition/date/before';\nimport { CONDITION_NAME as CONDITION_DATE_AFTER } from './condition/date/after';\nimport { CONDITION_NAME as CONDITION_TOMORROW } from './condition/date/tomorrow';\nimport { CONDITION_NAME as CONDITION_TODAY } from './condition/date/today';\nimport { CONDITION_NAME as CONDITION_YESTERDAY } from './condition/date/yesterday';\nimport { CONDITION_NAME as CONDITION_BY_VALUE } from './condition/byValue';\nimport { CONDITION_NAME as CONDITION_TRUE } from './condition/true';\nimport { CONDITION_NAME as CONDITION_FALSE } from './condition/false';\n\nimport { OPERATION_ID as OPERATION_AND } from './logicalOperations/conjunction';\nimport { OPERATION_ID as OPERATION_OR } from './logicalOperations/disjunction';\nimport { OPERATION_ID as OPERATION_OR_THEN_VARIABLE } from './logicalOperations/disjunctionWithExtraCondition';\n\nexport {\n  CONDITION_NONE,\n  CONDITION_EMPTY,\n  CONDITION_NOT_EMPTY,\n  CONDITION_EQUAL,\n  CONDITION_NOT_EQUAL,\n  CONDITION_GREATER_THAN,\n  CONDITION_GREATER_THAN_OR_EQUAL,\n  CONDITION_LESS_THAN,\n  CONDITION_LESS_THAN_OR_EQUAL,\n  CONDITION_BETWEEN,\n  CONDITION_NOT_BETWEEN,\n  CONDITION_BEGINS_WITH,\n  CONDITION_ENDS_WITH,\n  CONDITION_CONTAINS,\n  CONDITION_NOT_CONTAINS,\n  CONDITION_DATE_BEFORE,\n  CONDITION_DATE_AFTER,\n  CONDITION_TOMORROW,\n  CONDITION_TODAY,\n  CONDITION_YESTERDAY,\n  CONDITION_BY_VALUE,\n  CONDITION_TRUE,\n  CONDITION_FALSE,\n  OPERATION_AND,\n  OPERATION_OR,\n  OPERATION_OR_THEN_VARIABLE\n};\n\nexport const TYPE_NUMERIC = 'numeric';\nexport const TYPE_TEXT = 'text';\nexport const TYPE_DATE = 'date';\n/**\n * Default types and order for filter conditions.\n *\n * @type {object}\n */\nexport const TYPES = {\n  [TYPE_NUMERIC]: [\n    CONDITION_NONE,\n    SEPARATOR,\n    CONDITION_EMPTY,\n    CONDITION_NOT_EMPTY,\n    SEPARATOR,\n    CONDITION_EQUAL,\n    CONDITION_NOT_EQUAL,\n    SEPARATOR,\n    CONDITION_GREATER_THAN,\n    CONDITION_GREATER_THAN_OR_EQUAL,\n    CONDITION_LESS_THAN,\n    CONDITION_LESS_THAN_OR_EQUAL,\n    CONDITION_BETWEEN,\n    CONDITION_NOT_BETWEEN,\n  ],\n  [TYPE_TEXT]: [\n    CONDITION_NONE,\n    SEPARATOR,\n    CONDITION_EMPTY,\n    CONDITION_NOT_EMPTY,\n    SEPARATOR,\n    CONDITION_EQUAL,\n    CONDITION_NOT_EQUAL,\n    SEPARATOR,\n    CONDITION_BEGINS_WITH,\n    CONDITION_ENDS_WITH,\n    SEPARATOR,\n    CONDITION_CONTAINS,\n    CONDITION_NOT_CONTAINS,\n  ],\n  [TYPE_DATE]: [\n    CONDITION_NONE,\n    SEPARATOR,\n    CONDITION_EMPTY,\n    CONDITION_NOT_EMPTY,\n    SEPARATOR,\n    CONDITION_EQUAL,\n    CONDITION_NOT_EQUAL,\n    SEPARATOR,\n    CONDITION_DATE_BEFORE,\n    CONDITION_DATE_AFTER,\n    CONDITION_BETWEEN,\n    SEPARATOR,\n    CONDITION_TOMORROW,\n    CONDITION_TODAY,\n    CONDITION_YESTERDAY,\n  ],\n};\n\n/**\n * Get options list for conditional filter by data type (e.q: `'text'`, `'numeric'`, `'date'`).\n *\n * @private\n * @param {string} type The data type.\n * @returns {object}\n */\nexport default function getOptionsList(type) {\n  const items = [];\n  let typeName = type;\n\n  if (!TYPES[typeName]) {\n    typeName = TYPE_TEXT;\n  }\n\n  arrayEach(TYPES[typeName], (typeValue) => {\n    let option;\n\n    if (typeValue === SEPARATOR) {\n      option = { name: SEPARATOR };\n\n    } else {\n      option = clone(getConditionDescriptor(typeValue));\n    }\n    items.push(option);\n  });\n\n  return items;\n}\n","export const conditions = {};\n\n/**\n * Get condition closure with pre-bound arguments.\n *\n * @param {string} name Condition name.\n * @param {Array} args Condition arguments.\n * @returns {Function}\n */\nexport function getCondition(name, args) {\n  if (!conditions[name]) {\n    throw Error(`Filter condition \"${name}\" does not exist.`);\n  }\n  const { condition, descriptor } = conditions[name];\n  let conditionArguments = args;\n\n  if (descriptor.inputValuesDecorator) {\n    conditionArguments = descriptor.inputValuesDecorator(conditionArguments);\n  }\n\n  return function(dataRow) {\n    return condition.apply(dataRow.meta.instance, [].concat([dataRow], [conditionArguments]));\n  };\n}\n\n/**\n * Get condition object descriptor which defines some additional informations about this condition.\n *\n * @param {string} name Condition name.\n * @returns {object}\n */\nexport function getConditionDescriptor(name) {\n  if (!conditions[name]) {\n    throw Error(`Filter condition \"${name}\" does not exist.`);\n  }\n\n  return conditions[name].descriptor;\n}\n\n/**\n * Condition registerer.\n *\n * @param {string} name Condition name.\n * @param {Function} condition Condition function.\n * @param {object} descriptor Condition descriptor.\n */\nexport function registerCondition(name, condition, descriptor) {\n  descriptor.key = name;\n  conditions[name] = {\n    condition, descriptor\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'none';\n\n/**\n * @returns {boolean}\n */\nexport function condition() {\n  return true;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NONE,\n  inputsCount: 0,\n  showOperators: false\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\nimport { isEmpty } from '../../../helpers/mixed';\n\nexport const CONDITION_NAME = 'empty';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  return isEmpty(dataRow.value);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_EMPTY,\n  inputsCount: 0,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_EMPTY } from './empty';\n\nexport const CONDITION_NAME = 'not_empty';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_EMPTY, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_EMPTY,\n  inputsCount: 0,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'eq';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {Array} inputValues.\"0\" Value to check if it same as row's data.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale) === stringify(value);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_EQUAL } from './equal';\n\nexport const CONDITION_NAME = 'neq';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_EQUAL, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'gt';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {any} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value > conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_GREATER_THAN,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'gte';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value >= conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'lt';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value < conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_LESS_THAN,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'lte';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value <= conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_DATE_AFTER } from './date/after';\nimport { CONDITION_NAME as CONDITION_DATE_BEFORE } from './date/before';\n\nexport const CONDITION_NAME = 'between';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {number} inputValues.\"0\" The minimum value of the range.\n * @param {number} inputValues.\"1\" The maximum value of the range.\n * @returns {boolean}\n */\nexport function condition(dataRow, [from, to]) {\n  let fromValue = from;\n  let toValue = to;\n\n  if (dataRow.meta.type === 'numeric') {\n    const _from = parseFloat(fromValue, 10);\n    const _to = parseFloat(toValue, 10);\n\n    fromValue = Math.min(_from, _to);\n    toValue = Math.max(_from, _to);\n\n  } else if (dataRow.meta.type === 'date') {\n    const dateBefore = getCondition(CONDITION_DATE_BEFORE, [toValue]);\n    const dateAfter = getCondition(CONDITION_DATE_AFTER, [fromValue]);\n\n    return dateBefore(dataRow) && dateAfter(dataRow);\n  }\n\n  return dataRow.value >= fromValue && dataRow.value <= toValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BETWEEN,\n  inputsCount: 2,\n  showOperators: true\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_after';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Minimum date of a range.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n  const inputDate = moment(value, dataRow.meta.dateFormat);\n\n  if (!date.isValid() || !inputDate.isValid()) {\n    return false;\n  }\n\n  return date.diff(inputDate) >= 0;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_AFTER,\n  inputsCount: 1,\n  showOperators: true\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_before';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Maximum date of a range.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n  const inputDate = moment(value, dataRow.meta.dateFormat);\n\n  if (!date.isValid() || !inputDate.isValid()) {\n    return false;\n  }\n\n  return date.diff(inputDate) <= 0;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BEFORE,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_BETWEEN } from './between';\n\nexport const CONDITION_NAME = 'not_between';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_BETWEEN, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_BETWEEN,\n  inputsCount: 2,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'begins_with';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Value to check if it occurs at the beginning.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).startsWith(stringify(value));\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BEGINS_WITH,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'ends_with';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Value to check if it occurs at the end.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).endsWith(stringify(value));\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_ENDS_WITH,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'contains';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" A value to check if it occurs in the row's data.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).indexOf(stringify(value)) >= 0;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_CONTAINS,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_CONTAINS } from './contains';\n\nexport const CONDITION_NAME = 'not_contains';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_CONTAINS, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_CONTAIN,\n  inputsCount: 1,\n  showOperators: true\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_tomorrow';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().subtract(-1, 'days').startOf('day'), 'd');\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_TOMORROW,\n  inputsCount: 0\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_today';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().startOf('day'), 'd');\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_TODAY,\n  inputsCount: 0\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_yesterday';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().subtract(1, 'days').startOf('day'), 'd');\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_YESTERDAY,\n  inputsCount: 0\n});\n","import { registerCondition } from '../conditionRegisterer';\nimport { createArrayAssertion } from '../utils';\n\nexport const CONDITION_NAME = 'by_value';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {Function} inputValues.\"0\" A function to compare row's data.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return value(dataRow.value);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: 'By value',\n  inputsCount: 0,\n  inputValuesDecorator([data]) {\n    return [createArrayAssertion(data)];\n  },\n  showOperators: false\n});\n","import { getComparisonFunction } from '../../helpers/feature';\nimport { arrayUnique, arrayEach } from '../../helpers/array';\n\nconst sortCompare = getComparisonFunction();\n\n/**\n * Comparison function for sorting purposes.\n *\n * @param {*} a The first value to compare.\n * @param {*} b The second value to compare.\n * @returns {number} Returns number from -1 to 1.\n */\nexport function sortComparison(a, b) {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a - b;\n  }\n\n  return sortCompare(a, b);\n}\n\n/**\n * Convert raw value into visual value.\n *\n * @param {*} value The value to convert.\n * @param {string} defaultEmptyValue Default value for empty cells.\n * @returns {*}\n */\nexport function toVisualValue(value, defaultEmptyValue) {\n  let visualValue = value;\n\n  if (visualValue === '') {\n    visualValue = `(${defaultEmptyValue})`;\n  }\n\n  return visualValue;\n}\n\nconst SUPPORT_SET_CONSTRUCTOR = new Set([1]).has(1);\nconst SUPPORT_FAST_DEDUPE = SUPPORT_SET_CONSTRUCTOR && typeof Array.from === 'function';\n\n/**\n * Create an array assertion to compare if an element exists in that array (in a more efficient way than .indexOf).\n *\n * @param {Array} initialData Values to compare.\n * @returns {Function}\n */\nexport function createArrayAssertion(initialData) {\n  let dataset = initialData;\n\n  if (SUPPORT_SET_CONSTRUCTOR) {\n    dataset = new Set(dataset);\n  }\n\n  return function(value) {\n    let result;\n\n    if (SUPPORT_SET_CONSTRUCTOR) {\n      result = dataset.has(value);\n    } else {\n      /* eslint-disable no-bitwise */\n      result = !!~dataset.indexOf(value);\n    }\n\n    return result;\n  };\n}\n\n/**\n * Convert empty-ish values like null and undefined to an empty string.\n *\n * @param {*} value Value to check.\n * @returns {string}\n */\nexport function toEmptyString(value) {\n  return value === null || value === undefined ? '' : value;\n}\n\n/**\n * Unify column values (remove duplicated values and sort them).\n *\n * @param {Array} values An array of values.\n * @returns {Array}\n */\nexport function unifyColumnValues(values) {\n  let unifiedValues = values;\n\n  if (SUPPORT_FAST_DEDUPE) {\n    unifiedValues = Array.from(new Set(unifiedValues));\n  } else {\n    unifiedValues = arrayUnique(unifiedValues);\n  }\n  unifiedValues = unifiedValues.sort((a, b) => {\n    if (typeof a === 'number' && typeof b === 'number') {\n      return a - b;\n    }\n\n    if (a === b) {\n      return 0;\n    }\n\n    return a > b ? 1 : -1;\n  });\n\n  return unifiedValues;\n}\n\n/**\n * Intersect 'base' values with 'selected' values and return an array of object.\n *\n * @param {Array} base An array of base values.\n * @param {Array} selected An array of selected values.\n * @param {string} defaultEmptyValue Default value for empty cells.\n * @param {Function} [callback] A callback function which is invoked for every item in an array.\n * @returns {Array}\n */\nexport function intersectValues(base, selected, defaultEmptyValue, callback) {\n  const result = [];\n  const same = base === selected;\n  let selectedItemsAssertion;\n\n  if (!same) {\n    selectedItemsAssertion = createArrayAssertion(selected);\n  }\n\n  arrayEach(base, (value) => {\n    let checked = false;\n\n    if (same || selectedItemsAssertion(value)) {\n      checked = true;\n    }\n\n    const item = { checked, value, visualValue: toVisualValue(value, defaultEmptyValue) };\n\n    if (callback) {\n      callback(item);\n    }\n\n    result.push(item);\n  });\n\n  return result;\n}\n","import { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'true';\n\n/**\n * @returns {boolean}\n */\nexport function condition() {\n  return true;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: 'True'\n});\n","import { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'false';\n\n/**\n * @returns {boolean}\n */\nexport function condition() {\n  return false;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: 'False'\n});\n","import * as C from '../../../i18n/constants';\nimport { registerOperation } from '../logicalOperationRegisterer';\n\nexport const OPERATION_ID = 'conjunction';\nexport const SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_CONJUNCTION;\n// p AND q AND w AND x AND... === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\nexport function operationResult(conditions, value) {\n  return conditions.every(condition => condition.func(value));\n}\n\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);\n","export const operations = {};\n\n/**\n * Get operation closure with pre-bound arguments.\n *\n * @param {string} id Operator `id`.\n * @returns {Function}\n */\nexport function getOperationFunc(id) {\n  if (!operations[id]) {\n    throw Error(`Operation with id \"${id}\" does not exist.`);\n  }\n  const func = operations[id].func;\n\n  return function(conditions, value) {\n    return func(conditions, value);\n  };\n}\n\n/**\n * Return name of operation which is displayed inside UI component, basing on it's `id`.\n *\n * @param {string} id `Id` of operation.\n * @returns {string}\n */\nexport function getOperationName(id) {\n  return operations[id].name;\n}\n\n/**\n * Operator registerer.\n *\n * @param {string} id Operation `id`.\n * @param {string} name Operation name which is displayed inside UI component.\n * @param {Function} func Operation function.\n */\nexport function registerOperation(id, name, func) {\n  operations[id] = { name, func };\n}\n","import * as C from '../../../i18n/constants';\nimport { registerOperation } from '../logicalOperationRegisterer';\n\nexport const OPERATION_ID = 'disjunction';\nexport const SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_DISJUNCTION;\n// (p OR q OR w OR x OR...) === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\nexport function operationResult(conditions, value) {\n  return conditions.some(condition => condition.func(value));\n}\n\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);\n","import * as C from '../../../i18n/constants';\nimport { registerOperation } from '../logicalOperationRegisterer';\n\nexport const OPERATION_ID = 'disjunctionWithExtraCondition';\nexport const SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_DISJUNCTION;\n// ((p OR q OR w OR x OR...) AND z) === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\nexport function operationResult(conditions, value) {\n  if (conditions.length < 3) {\n    throw Error('Operation doesn\\'t work on less then three conditions.');\n  }\n\n  return conditions.slice(0, conditions.length - 1).some(condition => condition.func(value))\n    && conditions[conditions.length - 1].func(value);\n}\n\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);\n","import { addClass } from '../../../helpers/dom/element';\nimport { clone, extend } from '../../../helpers/object';\nimport { BaseUI } from './_base';\n\n/**\n * @private\n * @class InputUI\n */\nexport class InputUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      placeholder: '',\n      type: 'text',\n      tagName: 'input',\n      tabIndex: -1,\n    });\n  }\n\n  /**\n   * The reference to the input element.\n   *\n   * @type {HTMLInputElement}\n   */\n  #input;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(InputUI.DEFAULTS, options));\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   */\n  registerHooks() {\n    this.addLocalHook('keyup', event => this.#onKeyup(event));\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n    const icon = this.hot.rootDocument.createElement('div');\n\n    this.#input = this._element.firstChild;\n\n    addClass(this._element, 'htUIInput');\n    addClass(icon, 'htUIInputIcon');\n\n    this._element.appendChild(icon);\n\n    this.update();\n  }\n\n  /**\n   * Update element.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#input.type = this.options.type;\n    this.#input.placeholder = this.translateIfPossible(this.options.placeholder);\n    this.#input.value = this.translateIfPossible(this.options.value);\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#input.focus();\n    }\n  }\n\n  /**\n   * OnKeyup listener.\n   *\n   * @param {Event} event The mouse event object.\n   */\n  #onKeyup(event) {\n    this.options.value = event.target.value;\n  }\n}\n","import { clone, extend, mixin, objectEach } from '../../../helpers/object';\nimport localHooks from '../../../mixins/localHooks';\nimport EventManager from '../../../eventManager';\nimport { addClass } from '../../../helpers/dom/element';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\nconst STATE_BUILT = 'built';\nconst STATE_BUILDING = 'building';\nconst EVENTS_TO_REGISTER = ['click', 'input', 'keydown', 'keypress', 'keyup', 'focus', 'blur', 'change'];\n\n/**\n * @private\n */\nexport class BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      className: '',\n      value: '',\n      tagName: 'div',\n      children: [],\n      wrapIt: true,\n    });\n  }\n\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Instance of EventManager.\n   *\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * List of element options.\n   *\n   * @type {object}\n   */\n  options;\n  /**\n   * Build root DOM element.\n   *\n   * @type {Element}\n   * @private\n   */\n  _element;\n  /**\n   * Flag which determines build state of element.\n   *\n   * @type {string}\n   */\n  buildState;\n\n  constructor(hotInstance, options) {\n    this.hot = hotInstance;\n    this.options = extend(BaseUI.DEFAULTS, options);\n    this._element = this.hot.rootDocument.createElement(this.options.wrapIt ? 'div' : this.options.tagName);\n  }\n\n  /**\n   * Set the element value.\n   *\n   * @param {*} value Set the component value.\n   */\n  setValue(value) {\n    this.options.value = value;\n    this.update();\n  }\n\n  /**\n   * Get the element value.\n   *\n   * @returns {*}\n   */\n  getValue() {\n    return this.options.value;\n  }\n\n  /**\n   * Get element as a DOM object.\n   *\n   * @returns {Element}\n   */\n  get element() {\n    if (this.buildState === STATE_BUILDING) {\n      return this._element;\n    }\n    if (this.buildState === STATE_BUILT) {\n      this.update();\n\n      return this._element;\n    }\n    this.buildState = STATE_BUILDING;\n    this.build();\n    this.buildState = STATE_BUILT;\n\n    return this._element;\n  }\n\n  /**\n   * Check if element was built (built whole DOM structure).\n   *\n   * @returns {boolean}\n   */\n  isBuilt() {\n    return this.buildState === STATE_BUILT;\n  }\n\n  /**\n   * Translate value if it is possible. It's checked if value belongs to namespace of translated phrases.\n   *\n   * @param {*} value Value which will may be translated.\n   * @returns {*} Translated value if translation was possible, original value otherwise.\n   */\n  translateIfPossible(value) {\n    if (typeof value === 'string' && value.startsWith(C.FILTERS_NAMESPACE)) {\n      return this.hot.getTranslatedPhrase(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    const registerEvent = (element, eventName) => {\n      this.eventManager\n        .addEventListener(element, eventName, event => this.runLocalHooks(eventName, event, this));\n    };\n\n    if (!this.buildState) {\n      this.buildState = STATE_BUILDING;\n    }\n\n    // prevents \"hot.unlisten()\" call when clicked\n    // (https://github.com/handsontable/handsontable/blob/master/handsontable/src/tableView.js#L317-L321)\n    this._element.setAttribute('data-hot-input', true);\n\n    if (this.options.tabIndex !== undefined) {\n      this._element.setAttribute('tabindex', this.options.tabIndex);\n    }\n    if (this.options.role !== undefined) {\n      this._element.setAttribute('role', this.options.role);\n    }\n    if (this.options.className) {\n      addClass(this._element, this.options.className);\n    }\n\n    if (this.options.children.length) {\n      arrayEach(this.options.children, element => this._element.appendChild(element.element));\n\n    } else if (this.options.wrapIt) {\n      const element = this.hot.rootDocument.createElement(this.options.tagName);\n\n      // prevents \"hot.unlisten()\" call when clicked\n      // (https://github.com/handsontable/handsontable/blob/master/handsontable/src/tableView.js#L317-L321)\n      element.setAttribute('data-hot-input', true);\n\n      objectEach(this.options, (value, key) => {\n        if (element[key] !== undefined && key !== 'className' && key !== 'tagName' && key !== 'children') {\n          element[key] = this.translateIfPossible(value);\n        }\n      });\n\n      this._element.appendChild(element);\n\n      arrayEach(EVENTS_TO_REGISTER, eventName => registerEvent(element, eventName));\n\n    } else {\n      arrayEach(EVENTS_TO_REGISTER, eventName => registerEvent(this._element, eventName));\n    }\n  }\n\n  /**\n   * Update DOM structure.\n   */\n  update() {\n\n  }\n\n  /**\n   * Reset to initial state.\n   */\n  reset() {\n    this.options.value = '';\n    this.update();\n  }\n\n  /**\n   * Show element.\n   */\n  show() {\n    this.element.style.display = '';\n  }\n\n  /**\n   * Hide element.\n   */\n  hide() {\n    this.element.style.display = 'none';\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n\n  }\n\n  destroy() {\n    this.eventManager.destroy();\n    this.eventManager = null;\n    this.hot = null;\n\n    if (this._element.parentNode) {\n      this._element.parentNode.removeChild(this._element);\n    }\n    this._element = null;\n  }\n}\n\nmixin(BaseUI, localHooks);\n","import { Menu } from '../../../plugins/contextMenu/menu';\nimport { clone, extend } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\nimport { setAttribute } from '../../../helpers/dom/element';\nimport * as C from '../../../i18n/constants';\nimport { SEPARATOR } from '../../../plugins/contextMenu/predefinedItems';\nimport { BaseUI } from './_base';\nimport { A11Y_HIDDEN, A11Y_LISTBOX } from '../../../helpers/a11y';\n\n/**\n * @private\n * @class SelectUI\n */\nexport class SelectUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      className: 'htUISelect',\n      wrapIt: false,\n      tabIndex: -1,\n    });\n  }\n\n  /**\n   * Instance of {@link Menu}.\n   *\n   * @type {Menu}\n   */\n  #menu = null;\n  /**\n   * List of available select options.\n   *\n   * @type {Array}\n   */\n  #items = [];\n  /**\n   * The reference to the BaseUI instance of the caption.\n   *\n   * @type {BaseUI}\n   */\n  #caption;\n  /**\n   * The reference to the table caption element.\n   *\n   * @type {HTMLTableCaptionElement}\n   */\n  #captionElement;\n  /**\n   * The reference to the BaseUI instance of the dropdown.\n   *\n   * @type {BaseUI}\n   */\n  #dropdown;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(SelectUI.DEFAULTS, options));\n    this.registerHooks();\n  }\n\n  /**\n   * Gets the instance of the Menu.\n   *\n   * @returns {Menu}\n   */\n  getMenu() {\n    return this.#menu;\n  }\n\n  /**\n   * Register all necessary hooks.\n   */\n  registerHooks() {\n    this.addLocalHook('click', () => this.#onClick());\n  }\n\n  /**\n   * Set options which can be selected in the list.\n   *\n   * @param {Array} items Array of objects with required keys `key` and `name`.\n   */\n  setItems(items) {\n    this.#items = this.translateNames(items);\n\n    if (this.#menu) {\n      this.#menu.setMenuItems(this.#items);\n    }\n  }\n\n  /**\n   * Translate names of menu items.\n   *\n   * @param {Array} items Array of objects with required keys `key` and `name`.\n   * @returns {Array} Items with translated `name` keys.\n   */\n  translateNames(items) {\n    arrayEach(items, (item) => {\n      item.name = this.translateIfPossible(item.name);\n    });\n\n    return items;\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n    this.#menu = new Menu(this.hot, {\n      className: 'htSelectUI htFiltersConditionsMenu',\n      keepInViewport: false,\n      standalone: true,\n      container: this.options.menuContainer,\n    });\n    this.#menu.setMenuItems(this.#items);\n\n    const caption = new BaseUI(this.hot, {\n      className: 'htUISelectCaption'\n    });\n\n    const dropdown = new BaseUI(this.hot, {\n      className: 'htUISelectDropdown'\n    });\n\n    this.#caption = caption;\n    this.#captionElement = caption.element;\n    this.#dropdown = dropdown;\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(dropdown.element, [\n        A11Y_HIDDEN()\n      ]);\n\n      setAttribute(this._element, [\n        A11Y_LISTBOX()\n      ]);\n    }\n\n    arrayEach([caption, dropdown], element => this._element.appendChild(element.element));\n\n    this.#menu.addLocalHook('select', command => this.#onMenuSelect(command));\n    this.#menu.addLocalHook('afterClose', () => this.#onMenuClosed());\n    this.update();\n  }\n\n  /**\n   * Update DOM structure.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    let conditionName;\n\n    if (this.options.value) {\n      conditionName = this.options.value.name;\n\n    } else {\n      conditionName = this.#menu.hot.getTranslatedPhrase(C.FILTERS_CONDITIONS_NONE);\n    }\n\n    this.#captionElement.textContent = conditionName;\n    super.update();\n  }\n\n  /**\n   * Open select dropdown menu with available options.\n   */\n  openOptions() {\n    const rect = this.element.getBoundingClientRect();\n\n    if (this.#menu) {\n      this.#menu.open();\n      this.#menu.setPosition({\n        left: this.hot.isLtr() ? rect.left - 5 : rect.left - 31,\n        top: rect.top - 1,\n        width: rect.width,\n        height: rect.height,\n      });\n      this.#menu.getNavigator().toFirstItem();\n      this.#menu.getKeyboardShortcutsCtrl().addCustomShortcuts([{\n        keys: [['Tab'], ['Shift', 'Tab']],\n        callback: (event) => {\n          this.closeOptions();\n          this.runLocalHooks('tabKeydown', event);\n        },\n      }, {\n        keys: [['Control/Meta', 'A']],\n        callback: () => false,\n      }]);\n    }\n  }\n\n  /**\n   * Close select dropdown menu.\n   */\n  closeOptions() {\n    if (this.#menu) {\n      this.#menu.close();\n    }\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.element.focus();\n    }\n  }\n\n  /**\n   * On menu selected listener.\n   *\n   * @param {object} command Selected item.\n   */\n  #onMenuSelect(command) {\n    if (command.name !== SEPARATOR) {\n      this.options.value = command;\n      this.update();\n      this.runLocalHooks('select', this.options.value);\n    }\n  }\n\n  /**\n   * On menu closed listener.\n   */\n  #onMenuClosed() {\n    this.runLocalHooks('afterClose');\n  }\n\n  /**\n   * On element click listener.\n   *\n   * @private\n   */\n  #onClick() {\n    this.openOptions();\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    if (this.#menu) {\n      this.#menu.destroy();\n      this.#menu = null;\n    }\n\n    if (this.#caption) {\n      this.#caption.destroy();\n    }\n    if (this.#dropdown) {\n      this.#dropdown.destroy();\n    }\n\n    super.destroy();\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { arrayEach } from '../../../helpers/array';\nimport { toSingleLine } from '../../../helpers/templateLiteralTag';\nimport { BaseComponent } from './_base';\nimport { getOperationName } from '../logicalOperationRegisterer';\nimport { OPERATION_ID as OPERATION_AND } from '../logicalOperations/conjunction';\nimport { OPERATION_ID as OPERATION_OR } from '../logicalOperations/disjunction';\nimport { OPERATION_ID as OPERATION_OR_THEN_VARIABLE } from '../logicalOperations/disjunctionWithExtraCondition';\nimport { RadioInputUI } from '../ui/radioInput';\n\nconst SELECTED_AT_START_ELEMENT_INDEX = 0;\n\n/**\n * @private\n * @class OperatorsComponent\n */\nexport class OperatorsComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: false,\n    });\n\n    this.name = options.name;\n\n    this.buildOperatorsElement();\n  }\n\n  /**\n   * Get menu object descriptor.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuOperators');\n        arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Add RadioInputUI elements to component.\n   *\n   * @private\n   */\n  buildOperatorsElement() {\n    const operationKeys = [OPERATION_AND, OPERATION_OR];\n\n    arrayEach(operationKeys, (operation) => {\n      const radioInput = new RadioInputUI(this.hot, {\n        name: 'operator',\n        label: {\n          htmlFor: operation,\n          textContent: getOperationName(operation)\n        },\n        value: operation,\n        checked: operation === operationKeys[SELECTED_AT_START_ELEMENT_INDEX],\n        id: operation\n      });\n\n      radioInput.addLocalHook('change', event => this.#onRadioInputChange(event));\n      this.elements.push(radioInput);\n    });\n  }\n\n  /**\n   * Set state of operators component to check radio input at specific `index`.\n   *\n   * @param {number} searchedIndex Index of radio input to check.\n   */\n  setChecked(searchedIndex) {\n    if (this.elements.length < searchedIndex) {\n      throw Error(toSingleLine`Radio button with index ${searchedIndex} doesn't exist.`);\n    }\n\n    arrayEach(this.elements, (element, index) => {\n      element.setChecked(index === searchedIndex);\n    });\n  }\n\n  /**\n   * Get `id` of active operator.\n   *\n   * @returns {string}\n   */\n  getActiveOperationId() {\n    const operationElement = this.elements.find(element => element instanceof RadioInputUI && element.isChecked());\n\n    if (operationElement) {\n      return operationElement.getValue();\n    }\n\n    return OPERATION_AND;\n  }\n\n  /**\n   * Export state of the component (get selected operator).\n   *\n   * @returns {string} Returns `id` of selected operator.\n   */\n  getState() {\n    return this.getActiveOperationId();\n  }\n\n  /**\n   * Set state of the component.\n   *\n   * @param {object} value State to restore.\n   */\n  setState(value) {\n    this.reset();\n\n    if (value && this.getActiveOperationId() !== value) {\n      arrayEach(this.elements, (element) => {\n        element.setChecked(element.getValue() === value);\n      });\n    }\n  }\n\n  /**\n   * Update state of component.\n   *\n   * @param {string} [operationId='conjunction'] Id of selected operation.\n   * @param {number} column Physical column index.\n   */\n  updateState(operationId = OPERATION_AND, column) {\n    let selectedOperationId = operationId;\n\n    if (selectedOperationId === OPERATION_OR_THEN_VARIABLE) {\n      selectedOperationId = OPERATION_OR;\n    }\n\n    this.state.setValueAtIndex(column, selectedOperationId);\n  }\n\n  /**\n   * Reset elements to their initial state.\n   */\n  reset() {\n    this.setChecked(SELECTED_AT_START_ELEMENT_INDEX);\n  }\n\n  /**\n   * OnChange listener.\n   *\n   * @param {Event} event The DOM event object.\n   */\n  #onRadioInputChange(event) {\n    this.setState(event.target.value);\n  }\n}\n","import { clone, extend } from '../../../helpers/object';\nimport { BaseUI } from './_base';\n\n/**\n * @private\n * @class RadioInputUI\n */\nexport class RadioInputUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      type: 'radio',\n      tagName: 'input',\n      className: 'htUIRadio',\n      label: {}\n    });\n  }\n\n  /**\n   * The reference to the input element.\n   *\n   * @type {HTMLInputElement}\n   */\n  #input;\n  /**\n   * The reference to the label element.\n   *\n   * @type {HTMLLabelElement}\n   */\n  #label;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(RadioInputUI.DEFAULTS, options));\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n\n    const label = this.hot.rootDocument.createElement('label');\n\n    label.textContent = this.translateIfPossible(this.options.label.textContent);\n    label.htmlFor = this.translateIfPossible(this.options.label.htmlFor);\n    this.#label = label;\n    this.#input = this._element.firstChild;\n    this.#input.checked = this.options.checked;\n\n    this._element.appendChild(label);\n\n    this.update();\n  }\n\n  /**\n   * Update element.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#label.textContent = this.translateIfPossible(this.options.label.textContent);\n  }\n\n  /**\n   * Check if radio button is checked.\n   *\n   * @returns {boolean}\n   */\n  isChecked() {\n    return this.isBuilt() ? this.#input.checked : false;\n  }\n\n  /**\n   * Set input checked attribute.\n   *\n   * @param {boolean} value Set the component state.\n   */\n  setChecked(value = true) {\n    if (this.isBuilt()) {\n      this.#input.checked = value;\n    }\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#input.focus();\n    }\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { arrayEach, arrayFilter, arrayMap } from '../../../helpers/array';\nimport { isKey } from '../../../helpers/unicode';\nimport * as C from '../../../i18n/constants';\nimport { unifyColumnValues, intersectValues, toEmptyString } from '../utils';\nimport { BaseComponent } from './_base';\nimport { MultipleSelectUI } from '../ui/multipleSelect';\nimport { CONDITION_BY_VALUE, CONDITION_NONE } from '../constants';\nimport { getConditionDescriptor } from '../conditionRegisterer';\nimport { getRenderedValue as getRenderedNumericValue } from '../../../renderers/numericRenderer';\n\n/**\n * @private\n * @class ValueComponent\n */\nexport class ValueComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: false,\n    });\n\n    this.name = options.name;\n    this.elements.push(new MultipleSelectUI(this.hot));\n\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n  registerHooks() {\n    this.getMultipleSelectElement()\n      .addLocalHook('keydown', event => this.#onInputKeyDown(event))\n      .addLocalHook('listTabKeydown', event => this.runLocalHooks('listTabKeydown', event));\n\n    this.hot\n      .addHook('modifyFiltersMultiSelectValue', (value, meta) => this.#onModifyDisplayedValue(value, meta));\n  }\n\n  /**\n   * Gets the list of elements from which the component is built.\n   *\n   * @returns {BaseUI[]}\n   */\n  getElements() {\n    const selectElement = this.getMultipleSelectElement();\n\n    return [\n      selectElement.getSearchInputElement(),\n      selectElement.getSelectAllElement(),\n      selectElement.getClearAllElement(),\n      this.getMultipleSelectElement(),\n    ];\n  }\n\n  /**\n   * Set state of the component.\n   *\n   * @param {object} value The component value.\n   */\n  setState(value) {\n    this.reset();\n\n    if (value && value.command.key === CONDITION_BY_VALUE) {\n      const select = this.getMultipleSelectElement();\n\n      select.setItems(value.itemsSnapshot);\n      select.setValue(value.args[0]);\n      select.setLocale(value.locale);\n    }\n  }\n\n  /**\n   * Export state of the component (get selected filter and filter arguments).\n   *\n   * @returns {object} Returns object where `command` key keeps used condition filter and `args` key its arguments.\n   */\n  getState() {\n    const select = this.getMultipleSelectElement();\n    const availableItems = select.getItems();\n\n    return {\n      command: { key: select.isSelectedAllValues() || !availableItems.length ? CONDITION_NONE : CONDITION_BY_VALUE },\n      args: [select.getValue()],\n      itemsSnapshot: availableItems\n    };\n  }\n\n  /**\n   * Update state of component.\n   *\n   * @param {object} stateInfo Information about state containing stack of edited column,\n   * stack of dependent conditions, data factory and optional condition arguments change. It's described by object containing keys:\n   * `editedConditionStack`, `dependentConditionStacks`, `visibleDataFactory` and `conditionArgsChange`.\n   */\n  updateState(stateInfo) {\n    const updateColumnState = (\n      physicalColumn,\n      conditions,\n      conditionArgsChange,\n      filteredRowsFactory,\n      conditionsStack,\n    ) => {\n      const [firstByValueCondition] = arrayFilter(conditions, condition => condition.name === CONDITION_BY_VALUE);\n      const state = {};\n      const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);\n\n      if (firstByValueCondition) {\n        const filteredRows = filteredRowsFactory(physicalColumn, conditionsStack);\n        const rowValues = arrayMap(filteredRows, row => row.value);\n        const rowMetaMap = new Map(\n          filteredRows.map(row => [row.value, this.hot.getCellMeta(row.meta.visualRow, row.meta.visualCol)])\n        );\n        const unifiedRowValues = unifyColumnValues(rowValues);\n\n        if (conditionArgsChange) {\n          firstByValueCondition.args[0] = conditionArgsChange;\n        }\n\n        const selectedValues = [];\n        const itemsSnapshot = intersectValues(\n          unifiedRowValues,\n          firstByValueCondition.args[0],\n          defaultBlankCellValue,\n          (item) => {\n            if (item.checked) {\n              selectedValues.push(item.value);\n            }\n\n            this.#triggerModifyMultipleSelectionValueHook(item, rowMetaMap);\n          }\n        );\n\n        const column = stateInfo.editedConditionStack.column;\n\n        state.locale = this.hot.getCellMeta(0, column).locale;\n        state.args = [selectedValues];\n        state.command = getConditionDescriptor(CONDITION_BY_VALUE);\n        state.itemsSnapshot = itemsSnapshot;\n\n      } else {\n        state.args = [];\n        state.command = getConditionDescriptor(CONDITION_NONE);\n      }\n\n      this.state.setValueAtIndex(physicalColumn, state);\n    };\n\n    updateColumnState(\n      stateInfo.editedConditionStack.column,\n      stateInfo.editedConditionStack.conditions,\n      stateInfo.conditionArgsChange,\n      stateInfo.filteredRowsFactory\n    );\n\n    // Update the next \"by_value\" component (filter column conditions added after this condition).\n    // Its list of values has to be updated. As the new values by default are unchecked,\n    // the further component update is unnecessary.\n    if (stateInfo.dependentConditionStacks.length) {\n      updateColumnState(\n        stateInfo.dependentConditionStacks[0].column,\n        stateInfo.dependentConditionStacks[0].conditions,\n        stateInfo.conditionArgsChange,\n        stateInfo.filteredRowsFactory,\n        stateInfo.editedConditionStack\n      );\n    }\n  }\n\n  /**\n   * Get multiple select element.\n   *\n   * @returns {MultipleSelectUI}\n   */\n  getMultipleSelectElement() {\n    return this.elements.filter(element => element instanceof MultipleSelectUI)[0];\n  }\n\n  /**\n   * Get object descriptor for menu item entry.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper, row, col, prop, value) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuValue');\n\n        const label = this.hot.rootDocument.createElement('div');\n\n        addClass(label, 'htFiltersMenuLabel');\n        label.textContent = value;\n\n        wrapper.appendChild(label);\n\n        // The MultipleSelectUI should not extend the menu width (it should adjust to the menu item width only).\n        // That's why it's skipped from rendering when the GhostTable tries to render it.\n        if (!wrapper.parentElement.hasAttribute('ghost-table')) {\n          arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n        }\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Reset elements to their initial state.\n   */\n  reset() {\n    const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);\n    const rowEntries = this._getColumnVisibleValues();\n    const rowValues = rowEntries.map(entry => entry.value);\n    const rowMetaMap = new Map(rowEntries.map(row => [row.value, row.meta]));\n    const values = unifyColumnValues(rowValues);\n    const items = intersectValues(values, values, defaultBlankCellValue, (item) => {\n      this.#triggerModifyMultipleSelectionValueHook(item, rowMetaMap);\n    });\n\n    this.getMultipleSelectElement().setItems(items);\n    super.reset();\n    this.getMultipleSelectElement().setValue(values);\n\n    const selectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n\n    if (selectedColumn !== null) {\n      this.getMultipleSelectElement().setLocale(this.hot.getCellMeta(0, selectedColumn.visualIndex).locale);\n    }\n  }\n\n  /**\n   * Key down listener.\n   *\n   * @param {Event} event The DOM event object.\n   */\n  #onInputKeyDown(event) {\n    if (isKey(event.keyCode, 'ESCAPE')) {\n      this.runLocalHooks('cancel');\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Trigger the `modifyFiltersMultiSelectValue` hook.\n   *\n   * @param {object} item Item from the multiple select list.\n   * @param {Map} metaMap Map of row meta objects.\n   */\n  #triggerModifyMultipleSelectionValueHook(item, metaMap) {\n    if (this.hot.hasHook('modifyFiltersMultiSelectValue')) {\n      item.visualValue =\n        this.hot.runHooks('modifyFiltersMultiSelectValue', item.visualValue, metaMap.get(item.value));\n    }\n  }\n\n  /**\n   * Modify the value displayed in the multiple select list.\n   *\n   * @param {*} value Cell value.\n   * @param {object} meta The cell meta object.\n   * @returns {*} Returns the modified value.\n   */\n  #onModifyDisplayedValue(value, meta) {\n    switch (meta.type) {\n      case 'numeric':\n        return getRenderedNumericValue(value, meta);\n      default:\n        return value;\n    }\n  }\n\n  /**\n   * Get data for currently selected column.\n   *\n   * @returns {Array}\n   * @private\n   */\n  _getColumnVisibleValues() {\n    const selectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n\n    if (selectedColumn === null) {\n      return [];\n    }\n\n    return arrayMap(this.hot.getDataAtCol(selectedColumn.visualIndex), (v, rowIndex) => {\n      return {\n        value: toEmptyString(v),\n        meta: this.hot.getCellMeta(rowIndex, selectedColumn.visualIndex),\n      };\n    });\n  }\n}\n","import { addClass, getScrollbarWidth } from '../../../helpers/dom/element';\nimport { clone, extend } from '../../../helpers/object';\nimport { isKey } from '../../../helpers/unicode';\nimport { partial } from '../../../helpers/function';\nimport { dataRowToChangesArray } from '../../../helpers/data';\nimport * as C from '../../../i18n/constants';\nimport { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { BaseUI } from './_base';\nimport { InputUI } from './input';\nimport { LinkUI } from './link';\nimport { createArrayAssertion } from '../utils';\n\nconst SHORTCUTS_GROUP = 'multipleSelect.itemBox';\n\n/**\n * @private\n * @class MultipleSelectUI\n */\nexport class MultipleSelectUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      className: 'htUIMultipleSelect',\n      value: [],\n    });\n  }\n\n  /**\n   * List of available select options.\n   *\n   * @type {Array}\n   */\n  #items = [];\n  /**\n   * Handsontable instance used as items list element.\n   *\n   * @type {Handsontable}\n   */\n  #itemsBox;\n  /**\n   * A locale for the component used to compare filtered values.\n   *\n   * @type {string}\n   */\n  #locale;\n  /**\n   * Input element.\n   *\n   * @type {InputUI}\n   */\n  #searchInput;\n  /**\n   * \"Select all\" UI element.\n   *\n   * @type {LinkUI}\n   */\n  #selectAllUI;\n  /**\n   * \"Clear\" UI element.\n   *\n   * @type {LinkUI}\n   */\n  #clearAllUI;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(MultipleSelectUI.DEFAULTS, options));\n\n    this.#searchInput = new InputUI(this.hot, {\n      placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH,\n      className: 'htUIMultipleSelectSearch',\n    });\n    this.#selectAllUI = new LinkUI(this.hot, {\n      textContent: C.FILTERS_BUTTONS_SELECT_ALL,\n      className: 'htUISelectAll',\n    });\n    this.#clearAllUI = new LinkUI(this.hot, {\n      textContent: C.FILTERS_BUTTONS_CLEAR,\n      className: 'htUIClearAll',\n    });\n\n    this.registerHooks();\n  }\n\n  /**\n   * Gets the instance of the internal Handsontable that acts here as a listbox component.\n   *\n   * @returns {Handsontable}\n   */\n  getItemsBox() {\n    return this.#itemsBox;\n  }\n\n  /**\n   * Register all necessary hooks.\n   */\n  registerHooks() {\n    this.#searchInput.addLocalHook('keydown', event => this.#onInputKeyDown(event));\n    this.#searchInput.addLocalHook('input', event => this.#onInput(event));\n    this.#selectAllUI.addLocalHook('click', event => this.#onSelectAllClick(event));\n    this.#clearAllUI.addLocalHook('click', event => this.#onClearAllClick(event));\n  }\n\n  /**\n   * Set available options.\n   *\n   * @param {Array} items Array of objects with `checked` and `label` property.\n   */\n  setItems(items) {\n    this.#items = items;\n    this.#itemsBox?.loadData(this.#items);\n  }\n\n  /**\n   * Set a locale for the component.\n   *\n   * @param {string} locale Locale used for filter actions performed on data, ie. `en-US`.\n   */\n  setLocale(locale) {\n    this.#locale = locale;\n  }\n\n  /**\n   * Get a locale for the component.\n   *\n   * @returns {string}\n   */\n  getLocale() {\n    return this.#locale;\n  }\n\n  /**\n   * Get all available options.\n   *\n   * @returns {Array}\n   */\n  getItems() {\n    return [...this.#items];\n  }\n\n  /**\n   * Get element value.\n   *\n   * @returns {Array} Array of selected values.\n   */\n  getValue() {\n    return itemsToValue(this.#items);\n  }\n\n  /**\n   * Gets the instance of the search input element.\n   *\n   * @returns {InputUI}\n   */\n  getSearchInputElement() {\n    return this.#searchInput;\n  }\n\n  /**\n   * Gets the instance of the \"select all\" link element.\n   *\n   * @returns {LinkUI}\n   */\n  getSelectAllElement() {\n    return this.#selectAllUI;\n  }\n\n  /**\n   * Gets the instance of the \"clear\" link element.\n   *\n   * @returns {LinkUI}\n   */\n  getClearAllElement() {\n    return this.#clearAllUI;\n  }\n\n  /**\n   * Check if all values listed in element are selected.\n   *\n   * @returns {boolean}\n   */\n  isSelectedAllValues() {\n    return this.#items.length === this.getValue().length;\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n\n    const { rootDocument } = this.hot;\n    const itemsBoxWrapper = rootDocument.createElement('div');\n    const selectionControl = new BaseUI(this.hot, {\n      className: 'htUISelectionControls',\n      children: [this.#selectAllUI, this.#clearAllUI],\n    });\n\n    this._element.appendChild(this.#searchInput.element);\n    this._element.appendChild(selectionControl.element);\n    this._element.appendChild(itemsBoxWrapper);\n\n    const hotInitializer = (wrapper) => {\n      if (!this._element) {\n        return;\n      }\n\n      this.#itemsBox?.destroy();\n      addClass(wrapper, 'htUIMultipleSelectHot');\n\n      // Constructs and initializes a new Handsontable instance\n      this.#itemsBox = new this.hot.constructor(wrapper, {\n        data: this.#items,\n        columns: [{\n          data: 'checked',\n          type: 'checkbox',\n          label: {\n            property: 'visualValue',\n            position: 'after'\n          },\n        }],\n        beforeRenderer: (TD, row, col, prop, value, cellProperties) => {\n          TD.title = cellProperties.instance.getDataAtRowProp(row, cellProperties.label.property);\n        },\n        afterListen: () => {\n          this.runLocalHooks('focus', this);\n        },\n        beforeOnCellMouseUp: () => {\n          this.#itemsBox.listen();\n        },\n        colWidths: () => this.#itemsBox.container.scrollWidth - getScrollbarWidth(rootDocument),\n        maxCols: 1,\n        autoWrapCol: true,\n        height: 110,\n        copyPaste: false,\n        disableVisualSelection: 'area',\n        fillHandle: false,\n        fragmentSelection: 'cell',\n        tabMoves: { row: 1, col: 0 },\n        layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',\n      });\n      this.#itemsBox.init();\n\n      const shortcutManager = this.#itemsBox.getShortcutManager();\n      const gridContext = shortcutManager.getContext('grid');\n\n      gridContext.removeShortcutsByKeys(['Tab']);\n      gridContext.removeShortcutsByKeys(['Shift', 'Tab']);\n      gridContext.addShortcut({\n        keys: [['Escape']],\n        callback: (event) => {\n          this.runLocalHooks('keydown', event, this);\n        },\n        group: SHORTCUTS_GROUP\n      });\n      gridContext.addShortcut({\n        keys: [['Tab'], ['Shift', 'Tab']],\n        callback: (event) => {\n          this.#itemsBox.deselectCell();\n\n          this.runLocalHooks('keydown', event, this);\n          this.runLocalHooks('listTabKeydown', event, this);\n        },\n        group: SHORTCUTS_GROUP\n      });\n    };\n\n    hotInitializer(itemsBoxWrapper);\n    this.hot._registerTimeout(() => hotInitializer(itemsBoxWrapper), 100);\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#itemsBox.listen();\n    }\n  }\n\n  /**\n   * Reset DOM structure.\n   */\n  reset() {\n    this.#searchInput.reset();\n    this.#selectAllUI.reset();\n    this.#clearAllUI.reset();\n  }\n\n  /**\n   * Update DOM structure.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#itemsBox.loadData(valueToItems(this.#items, this.options.value));\n    super.update();\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.#itemsBox?.destroy();\n    this.#searchInput.destroy();\n    this.#clearAllUI.destroy();\n    this.#selectAllUI.destroy();\n\n    this.#searchInput = null;\n    this.#clearAllUI = null;\n    this.#selectAllUI = null;\n    this.#itemsBox = null;\n    this.#items = null;\n    super.destroy();\n  }\n\n  /**\n   * 'input' event listener for input element.\n   *\n   * @param {Event} event DOM event.\n   */\n  #onInput(event) {\n    const value = event.target.value.toLocaleLowerCase(this.getLocale());\n    let filteredItems;\n\n    if (value === '') {\n      filteredItems = [...this.#items];\n    } else {\n      filteredItems = this.#items\n        .filter(item => (`${item.value}`).toLocaleLowerCase(this.getLocale()).indexOf(value) >= 0);\n    }\n\n    this.#itemsBox.loadData(filteredItems);\n  }\n\n  /**\n   * 'keydown' event listener for input element.\n   *\n   * @param {Event} event DOM event.\n   */\n  #onInputKeyDown(event) {\n    this.runLocalHooks('keydown', event, this);\n\n    const isKeyCode = partial(isKey, event.keyCode);\n\n    if (isKeyCode('ARROW_DOWN')) {\n      event.preventDefault();\n      stopImmediatePropagation(event);\n      this.#itemsBox.listen();\n      this.#itemsBox.selectCell(0, 0);\n    }\n  }\n\n  /**\n   * On click listener for \"Select all\" link.\n   *\n   * @param {DOMEvent} event The mouse event object.\n   */\n  #onSelectAllClick(event) {\n    const changes = [];\n\n    event.preventDefault();\n\n    this.#itemsBox.getSourceData().forEach((row, rowIndex) => {\n      row.checked = true;\n\n      changes.push(dataRowToChangesArray(row, rowIndex)[0]);\n    });\n\n    this.#itemsBox.setSourceDataAtCell(changes);\n  }\n\n  /**\n   * On click listener for \"Clear\" link.\n   *\n   * @param {DOMEvent} event The mouse event object.\n   */\n  #onClearAllClick(event) {\n    const changes = [];\n\n    event.preventDefault();\n    this.#itemsBox.getSourceData().forEach((row, rowIndex) => {\n      row.checked = false;\n\n      changes.push(dataRowToChangesArray(row, rowIndex)[0]);\n    });\n\n    this.#itemsBox.setSourceDataAtCell(changes);\n  }\n}\n\nexport default MultipleSelectUI;\n\n/**\n * Pick up object items based on selected values.\n *\n * @param {Array} availableItems Base collection to compare values.\n * @param {Array} selectedValue Flat array with selected values.\n * @returns {Array}\n */\nfunction valueToItems(availableItems, selectedValue) {\n  const arrayAssertion = createArrayAssertion(selectedValue);\n\n  return availableItems.map((item) => {\n    item.checked = arrayAssertion(item.value);\n\n    return item;\n  });\n}\n\n/**\n * Convert all checked items into flat array.\n *\n * @param {Array} availableItems Base collection.\n * @returns {Array}\n */\nfunction itemsToValue(availableItems) {\n  const items = [];\n\n  availableItems.forEach((item) => {\n    if (item.checked) {\n      items.push(item.value);\n    }\n  });\n\n  return items;\n}\n","import { clone, extend } from '../../../helpers/object';\nimport { BaseUI } from './_base';\n\n/**\n * @private\n * @class LinkUI\n */\nexport class LinkUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      href: '#',\n      tagName: 'a',\n      tabIndex: -1,\n      role: 'button',\n    });\n  }\n\n  /**\n   * The reference to the link element.\n   *\n   * @type {HTMLLinkElement}\n   */\n  #link;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(LinkUI.DEFAULTS, options));\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n\n    this.#link = this._element.firstChild;\n  }\n\n  /**\n   * Update element.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#link.textContent = this.translateIfPossible(this.options.textContent);\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#link.focus();\n    }\n  }\n\n  /**\n   * Activate the element.\n   */\n  activate() {\n    this.#link.click();\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\nimport { BaseComponent } from './_base';\nimport { InputUI } from '../ui/input';\n\n/**\n * @private\n * @class ActionBarComponent\n */\nexport class ActionBarComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n\n  static get BUTTON_OK() {\n    return 'ok';\n  }\n  static get BUTTON_CANCEL() {\n    return 'cancel';\n  }\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: true,\n    });\n\n    this.name = options.name;\n\n    this.elements.push(\n      new InputUI(this.hot, {\n        type: 'button',\n        value: C.FILTERS_BUTTONS_OK,\n        className: 'htUIButton htUIButtonOK',\n        identifier: ActionBarComponent.BUTTON_OK\n      })\n    );\n    this.elements.push(\n      new InputUI(this.hot, {\n        type: 'button',\n        value: C.FILTERS_BUTTONS_CANCEL,\n        className: 'htUIButton htUIButtonCancel',\n        identifier: ActionBarComponent.BUTTON_CANCEL\n      })\n    );\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n  registerHooks() {\n    arrayEach(this.elements, (element) => {\n      element.addLocalHook('click', (event, button) => this.#onButtonClick(event, button));\n    });\n  }\n\n  /**\n   * Get menu object descriptor.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuActionBar');\n        arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Fire accept event.\n   */\n  accept() {\n    this.runLocalHooks('accept');\n  }\n\n  /**\n   * Fire cancel event.\n   */\n  cancel() {\n    this.runLocalHooks('cancel');\n  }\n\n  /**\n   * On button click listener.\n   *\n   * @param {Event} event DOM event.\n   * @param {InputUI} button InputUI object.\n   */\n  #onButtonClick(event, button) {\n    if (button.options.identifier === ActionBarComponent.BUTTON_OK) {\n      this.accept();\n    } else {\n      this.cancel();\n    }\n  }\n}\n","import { arrayEach, arrayMap, arrayReduce } from '../../helpers/array';\nimport { mixin } from '../../helpers/object';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport localHooks from '../../mixins/localHooks';\nimport { getCondition } from './conditionRegisterer';\nimport { OPERATION_ID as OPERATION_AND } from './logicalOperations/conjunction';\nimport { operations, getOperationFunc } from './logicalOperationRegisterer';\nimport { isUndefined } from '../../helpers/mixed';\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\nconst MAP_NAME = 'ConditionCollection.filteringStates';\n\n/**\n * @private\n * @class ConditionCollection\n */\nclass ConditionCollection {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Indicates whether the internal IndexMap should be registered or not. Generally,\n   * registered Maps responds to the index changes. Within that collection, sometimes\n   * this is not necessary.\n   *\n   * @type {boolean}\n   */\n  isMapRegistrable;\n  /**\n   * Index map storing filtering states for every column. ConditionCollection write and read to/from element.\n   *\n   * @type {LinkedPhysicalIndexToValueMap}\n   */\n  filteringStates = new IndexToValueMap();\n  /**\n   * Stores the previous state of the condition stack before the latest filter operation.\n   * This is used in the `beforeFilter` plugin to allow performing the undo operation.\n   *\n   * @type {null|Array}\n   */\n  previousConditionStack = null;\n\n  constructor(hot, isMapRegistrable = true) {\n    this.hot = hot;\n    this.isMapRegistrable = isMapRegistrable;\n\n    if (this.isMapRegistrable === true) {\n      this.hot.columnIndexMapper.registerMap(MAP_NAME, this.filteringStates);\n\n    } else {\n      this.filteringStates.init(this.hot.columnIndexMapper.getNumberOfIndexes());\n    }\n  }\n\n  /**\n   * Check if condition collection is empty (so no needed to filter data).\n   *\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return this.getFilteredColumns().length === 0;\n  }\n\n  /**\n   * Check if value is matched to the criteria of conditions chain.\n   *\n   * @param {object} value Object with `value` and `meta` keys.\n   * @param {number} column The physical column index.\n   * @returns {boolean}\n   */\n  isMatch(value, column) {\n    const stateForColumn = this.filteringStates.getValueAtIndex(column);\n    const conditions = stateForColumn?.conditions ?? [];\n    const operation = stateForColumn?.operation;\n\n    return this.isMatchInConditions(conditions, value, operation);\n  }\n\n  /**\n   * Check if the value is matches the conditions.\n   *\n   * @param {Array} conditions List of conditions.\n   * @param {object} value Object with `value` and `meta` keys.\n   * @param {string} [operationType='conjunction'] Type of conditions operation.\n   * @returns {boolean}\n   */\n  isMatchInConditions(conditions, value, operationType = OPERATION_AND) {\n    if (conditions.length) {\n      return getOperationFunc(operationType)(conditions, value);\n    }\n\n    return true;\n  }\n\n  /**\n   * Add condition to the collection.\n   *\n   * @param {number} column The physical column index.\n   * @param {object} conditionDefinition Object with keys:\n   *  * `command` Object, Command object with condition name as `key` property.\n   *  * `args` Array, Condition arguments.\n   * @param {string} [operation='conjunction'] Type of conditions operation.\n   * @param {number} [position] Position to which condition will be added. When argument is undefined\n   * the condition will be processed as the last condition.\n   * @fires ConditionCollection#beforeAdd\n   * @fires ConditionCollection#afterAdd\n   */\n  addCondition(column, conditionDefinition, operation = OPERATION_AND, position) {\n    const localeForColumn = this.hot.getCellMeta(0, column).locale;\n    const args = arrayMap(conditionDefinition.args,\n      v => (typeof v === 'string' ? v.toLocaleLowerCase(localeForColumn) : v));\n    const name = conditionDefinition.name || conditionDefinition.command.key;\n\n    // If there's no previous condition stack defined (which means the condition stack was not cleared after the\n    // previous filter operation or that there was no filter operation performed yet), store the current conditions as\n    // the previous condition stack.\n    if (this.previousConditionStack === null) {\n      this.setPreviousConditionStack(this.exportAllConditions());\n    }\n\n    this.runLocalHooks('beforeAdd', column);\n\n    const columnType = this.getOperation(column);\n\n    if (columnType) {\n      if (columnType !== operation) {\n        throw Error(toSingleLine`The column of index ${column} has been already applied with a \\`${columnType}\\`\\x20\n        filter operation. Use \\`removeConditions\\` to clear the current conditions and then add new ones.\\x20\n        Mind that you cannot mix different types of operations (for instance, if you use \\`conjunction\\`,\\x20\n        use it consequently for a particular column).`);\n      }\n\n    } else if (isUndefined(operations[operation])) {\n      throw new Error(toSingleLine`Unexpected operation named \\`${operation}\\`. Possible ones are\\x20\n        \\`disjunction\\` and \\`conjunction\\`.`);\n    }\n\n    const conditionsForColumn = this.getConditions(column);\n\n    if (conditionsForColumn.length === 0) {\n      // Create first condition for particular column.\n      this.filteringStates.setValueAtIndex(column, {\n        operation,\n        conditions: [{\n          name,\n          args,\n          func: getCondition(name, args),\n        }]\n      }, position);\n\n    } else {\n      // Add next condition for particular column (by reference).\n      conditionsForColumn.push({\n        name,\n        args,\n        func: getCondition(name, args)\n      });\n    }\n\n    this.runLocalHooks('afterAdd', column);\n  }\n\n  /**\n   * Get all added conditions from the collection at specified column index.\n   *\n   * @param {number} column The physical column index.\n   * @returns {Array} Returns conditions collection as an array.\n   */\n  getConditions(column) {\n    return this.filteringStates.getValueAtIndex(column)?.conditions ?? [];\n  }\n\n  /**\n   * Get operation for particular column.\n   *\n   * @param {number} column The physical column index.\n   * @returns {string|undefined}\n   */\n  getOperation(column) {\n    return this.filteringStates.getValueAtIndex(column)?.operation;\n  }\n\n  /**\n   * Get all filtered physical columns in the order in which actions are performed.\n   *\n   * @returns {Array}\n   */\n  getFilteredColumns() {\n    return this.filteringStates.getEntries().map(([physicalColumn]) => physicalColumn);\n  }\n\n  /**\n   * Gets position in the filtering states stack for the specific column.\n   *\n   * @param {number} column The physical column index.\n   * @returns {number} Returns -1 when the column doesn't exist in the stack.\n   */\n  getColumnStackPosition(column) {\n    return this.getFilteredColumns().indexOf(column);\n  }\n\n  /**\n   * Export all previously added conditions.\n   *\n   * @returns {Array}\n   */\n  exportAllConditions() {\n    return arrayReduce(this.filteringStates.getEntries(), (allConditions, [column, { operation, conditions }]) => {\n      allConditions.push({\n        column,\n        operation,\n        conditions: arrayMap(conditions, ({ name, args }) => ({ name, args })),\n      });\n\n      return allConditions;\n    }, []);\n  }\n\n  /**\n   * Import conditions to the collection.\n   *\n   * @param {Array} conditions The collection of the conditions.\n   */\n  importAllConditions(conditions) {\n    this.clean();\n\n    arrayEach(conditions, (stack) => {\n      arrayEach(stack.conditions, condition => this.addCondition(stack.column, condition));\n    });\n  }\n\n  /**\n   * Remove conditions at given column index.\n   *\n   * @param {number} column The physical column index.\n   * @fires ConditionCollection#beforeRemove\n   * @fires ConditionCollection#afterRemove\n   */\n  removeConditions(column) {\n    // Store the current conditions as the previous condition stack before it's cleared.\n    this.setPreviousConditionStack(this.exportAllConditions());\n\n    this.runLocalHooks('beforeRemove', column);\n    this.filteringStates.clearValue(column);\n    this.runLocalHooks('afterRemove', column);\n  }\n\n  /**\n   * Clean all conditions collection and reset order stack.\n   *\n   * @fires ConditionCollection#beforeClean\n   * @fires ConditionCollection#afterClean\n   */\n  clean() {\n    this.runLocalHooks('beforeClean');\n    this.filteringStates.clear();\n    this.runLocalHooks('afterClean');\n  }\n\n  /**\n   * Check if at least one condition was added at specified column index. And if second parameter is passed then additionally\n   * check if condition exists under its name.\n   *\n   * @param {number} column The physical column index.\n   * @param {string} [name] Condition name.\n   * @returns {boolean}\n   */\n  hasConditions(column, name) {\n    const conditions = this.getConditions(column);\n\n    if (name) {\n      return conditions.some(condition => condition.name === name);\n    }\n\n    return conditions.length > 0;\n  }\n\n  /**\n   * Updates the `previousConditionStack` property with the provided stack.\n   * It is used to store the current conditions before they are modified, allowing for undo operations.\n   *\n   * @param {Array|null} previousConditionStack The stack of previous conditions.\n   */\n  setPreviousConditionStack(previousConditionStack) {\n    this.previousConditionStack = previousConditionStack;\n  }\n\n  /**\n   * Destroy object.\n   */\n  destroy() {\n    if (this.isMapRegistrable) {\n      this.hot.columnIndexMapper.unregisterMap(MAP_NAME);\n    }\n\n    this.filteringStates = null;\n    this.clearLocalHooks();\n  }\n}\n\nmixin(ConditionCollection, localHooks);\n\nexport default ConditionCollection;\n","import { arrayEach } from '../../helpers/array';\n\n/**\n * @private\n * @class DataFilter\n */\nclass DataFilter {\n  /**\n   * Reference to the instance of {ConditionCollection}.\n   *\n   * @type {ConditionCollection}\n   */\n  conditionCollection;\n  /**\n   * Function which provide source data factory for specified column.\n   *\n   * @type {Function}\n   */\n  columnDataFactory;\n\n  constructor(conditionCollection, columnDataFactory = () => []) {\n    this.conditionCollection = conditionCollection;\n    this.columnDataFactory = columnDataFactory;\n  }\n\n  /**\n   * Filter data based on the conditions collection.\n   *\n   * @returns {Array}\n   */\n  filter() {\n    let filteredData = [];\n\n    arrayEach(this.conditionCollection.getFilteredColumns(), (physicalColumn, index) => {\n      let columnData = this.columnDataFactory(physicalColumn);\n\n      if (index) {\n        columnData = this._getIntersectData(columnData, filteredData);\n      }\n\n      filteredData = this.filterByColumn(physicalColumn, columnData);\n    });\n\n    return filteredData;\n  }\n\n  /**\n   * Filter data based on specified physical column index.\n   *\n   * @param {number} column The physical column index.\n   * @param {Array} [dataSource] Data source as array of objects with `value` and `meta` keys (e.g. `{value: 'foo', meta: {}}`).\n   * @returns {Array} Returns filtered data.\n   */\n  filterByColumn(column, dataSource = []) {\n    const filteredData = [];\n\n    arrayEach(dataSource, (dataRow) => {\n      if (dataRow !== undefined && this.conditionCollection.isMatch(dataRow, column)) {\n        filteredData.push(dataRow);\n      }\n    });\n\n    return filteredData;\n  }\n\n  /**\n   * Intersect data.\n   *\n   * @private\n   * @param {Array} data The data to intersect.\n   * @param {Array} needles The collection intersected rows with the data.\n   * @returns {Array}\n   */\n  _getIntersectData(data, needles) {\n    const result = [];\n\n    arrayEach(needles, (needleRow) => {\n      const row = needleRow.meta.visualRow;\n\n      if (data[row] !== undefined) {\n        result[row] = data[row];\n      }\n    });\n\n    return result;\n  }\n}\n\nexport default DataFilter;\n","import { arrayEach, arrayMap, arrayFilter } from '../../helpers/array';\nimport { mixin, objectEach } from '../../helpers/object';\nimport { curry } from '../../helpers/function';\nimport localHooks from '../../mixins/localHooks';\nimport ConditionCollection from './conditionCollection';\nimport DataFilter from './dataFilter';\nimport { createArrayAssertion } from './utils';\n\n/**\n * Class which is designed for observing changes in condition collection. When condition is changed by user at specified\n * column it's necessary to update all conditions defined after this edited one.\n *\n * Object fires `update` hook for every column conditions change.\n *\n * @private\n * @class ConditionUpdateObserver\n */\nclass ConditionUpdateObserver {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Reference to the instance of {@link ConditionCollection}.\n   *\n   * @type {ConditionCollection}\n   */\n  conditionCollection;\n  /**\n   * Function which provide source data factory for specified column.\n   *\n   * @type {Function}\n   */\n  columnDataFactory;\n  /**\n   * Collected changes when grouping is enabled.\n   *\n   * @type {Array}\n   * @default []\n   */\n  changes = [];\n  /**\n   * Flag which determines if grouping events is enabled.\n   *\n   * @type {boolean}\n   */\n  grouping = false;\n  /**\n   * The latest known position of edited conditions at specified column index.\n   *\n   * @type {number}\n   * @default -1\n   */\n  latestEditedColumnPosition = -1;\n  /**\n   * The latest known order of conditions stack.\n   *\n   * @type {Array}\n   */\n  latestOrderStack = [];\n\n  constructor(hot, conditionCollection, columnDataFactory = () => []) {\n    this.hot = hot;\n    this.conditionCollection = conditionCollection;\n    this.columnDataFactory = columnDataFactory;\n\n    this.conditionCollection.addLocalHook('beforeRemove', column => this.#onConditionBeforeModify(column));\n    this.conditionCollection.addLocalHook('afterRemove', column => this.updateStatesAtColumn(column));\n    this.conditionCollection.addLocalHook('afterAdd', column => this.updateStatesAtColumn(column));\n    this.conditionCollection.addLocalHook('beforeClean', () => this.#onConditionBeforeClean());\n    this.conditionCollection.addLocalHook('afterClean', () => this.#onConditionAfterClean());\n  }\n\n  /**\n   * Enable grouping changes. Grouping is helpful in situations when a lot of conditions is added in one moment. Instead of\n   * trigger `update` hook for every condition by adding/removing you can group this changes and call `flush` method to trigger\n   * it once.\n   */\n  groupChanges() {\n    this.grouping = true;\n  }\n\n  /**\n   * Flush all collected changes. This trigger `update` hook for every previously collected change from condition collection.\n   */\n  flush() {\n    this.grouping = false;\n\n    arrayEach(this.changes, (column) => {\n      this.updateStatesAtColumn(column);\n    });\n    this.changes.length = 0;\n  }\n\n  /**\n   * On before modify condition (add or remove from collection),.\n   *\n   * @param {number} column Column index.\n   * @private\n   */\n  #onConditionBeforeModify(column) {\n    this.latestEditedColumnPosition = this.conditionCollection.getColumnStackPosition(column);\n  }\n\n  /**\n   * Update all related states which should be changed after invoking changes applied to current column.\n   *\n   * @param {number} column The column index.\n   * @param {object} conditionArgsChange Object describing condition changes which can be handled by filters on `update` hook.\n   * It contains keys `conditionKey` and `conditionValue` which refers to change specified key of condition to specified value\n   * based on referred keys.\n   */\n  updateStatesAtColumn(column, conditionArgsChange) {\n    if (this.grouping) {\n      if (this.changes.indexOf(column) === -1) {\n        this.changes.push(column);\n      }\n\n      return;\n    }\n\n    const allConditions = this.conditionCollection.exportAllConditions();\n    let editedColumnPosition = this.conditionCollection.getColumnStackPosition(column);\n\n    if (editedColumnPosition === -1) {\n      editedColumnPosition = this.latestEditedColumnPosition;\n    }\n\n    // Collection of all conditions defined before currently edited `column` (without edited one)\n    const conditionsBefore = allConditions.slice(0, editedColumnPosition);\n    // Collection of all conditions defined after currently edited `column` (with edited one)\n    const conditionsAfter = allConditions.slice(editedColumnPosition);\n\n    // Make sure that conditionAfter doesn't contain edited column conditions\n    if (conditionsAfter.length && conditionsAfter[0].column === column) {\n      conditionsAfter.shift();\n    }\n\n    const visibleDataFactory = curry((curriedConditionsBefore, curriedColumn, conditionsStack = []) => {\n      const splitConditionCollection = new ConditionCollection(this.hot, false);\n      const curriedConditionsBeforeArray = [].concat(curriedConditionsBefore, conditionsStack);\n\n      // Create new condition collection to determine what rows should be visible in \"filter by value\" box\n      // in the next conditions in the chain\n      splitConditionCollection.importAllConditions(curriedConditionsBeforeArray);\n\n      const allRows = this.columnDataFactory(curriedColumn);\n      let visibleRows;\n\n      if (splitConditionCollection.isEmpty()) {\n        visibleRows = allRows;\n      } else {\n        visibleRows = (new DataFilter(\n          splitConditionCollection,\n          columnData => this.columnDataFactory(columnData)\n        )).filter();\n      }\n      visibleRows = arrayMap(visibleRows, rowData => rowData.meta.visualRow);\n\n      const visibleRowsAssertion = createArrayAssertion(visibleRows);\n\n      splitConditionCollection.destroy();\n\n      return arrayFilter(allRows, rowData => visibleRowsAssertion(rowData.meta.visualRow));\n    })(conditionsBefore);\n\n    const editedConditions = [].concat(this.conditionCollection.getConditions(column));\n\n    this.runLocalHooks('update', {\n      editedConditionStack: { column, conditions: editedConditions },\n      dependentConditionStacks: conditionsAfter,\n      filteredRowsFactory: visibleDataFactory,\n      conditionArgsChange\n    });\n  }\n\n  /**\n   * On before conditions clean listener.\n   *\n   * @private\n   */\n  #onConditionBeforeClean() {\n    this.latestOrderStack = this.conditionCollection.getFilteredColumns();\n  }\n\n  /**\n   * On after conditions clean listener.\n   *\n   * @private\n   */\n  #onConditionAfterClean() {\n    arrayEach(this.latestOrderStack, (column) => {\n      this.updateStatesAtColumn(column);\n    });\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.clearLocalHooks();\n\n    objectEach(this, (value, property) => {\n      this[property] = null;\n    });\n  }\n}\n\nmixin(ConditionUpdateObserver, localHooks);\n\nexport default ConditionUpdateObserver;\n","import { createFocusNavigator } from './focusNavigator';\nimport { SelectUI } from '../ui/select';\nimport { BaseUI } from '../ui/_base';\nimport { LinkUI } from '../ui/link';\n\nconst SHORTCUTS_MENU_CONTEXT = 'filters';\n\n/**\n * @typedef MenuFocusNavigator\n * @property {function(number): void} setCurrentPage Sets the current index of the selected focus.\n * @property {function(): number} getCurrentPage Gets the index of currently focus element.\n * @property {function(): void} toFirstItem Move the focus index to the first element in the list.\n * @property {function(): void} toLastItem Move the focus index to the last element in the list.\n * @property {function(): void} toNextItem Move the focus index to the next element in the list.\n * @property {function(): void} toPreviousItem Move the focus index to the previous element in the list.\n * @property {function(): void} clear Clear the internal state of the navigator.\n * @property {function(): void} listen Activate the navigator by listening the keyboard shortcuts.\n */\n/**\n * Creates navigator controller for filter subcomponents in the menu.\n *\n * @param {Menu} mainMenu The main Menu instance.\n * @param {BaseUI[]} menuItems The list of the component's elements to paginate to.\n * @returns {Paginator}\n */\nexport function createMenuFocusController(mainMenu, menuItems) {\n  /**\n   * @type {number} The last selected menu item (before clearing the the menu state after going\n   * into the focus mode triggered by the TAB or SHIFT+TAB keys).\n   */\n  let lastSelectedMenuItem = -1;\n\n  const focusNavigator = createFocusNavigator(menuItems);\n  const updateNavigatorPosition = element => () => {\n    if (mainMenu.isOpened()) {\n      mainMenu.getKeyboardShortcutsCtrl().listen(SHORTCUTS_MENU_CONTEXT);\n    }\n\n    focusNavigator.setCurrentPage(menuItems.indexOf(element));\n  };\n\n  // update navigator position (internal state) to element that was recently clicked or focused\n  menuItems.forEach((element) => {\n    if (element instanceof BaseUI) {\n      element.addLocalHook('click', updateNavigatorPosition(element));\n      element.addLocalHook('focus', updateNavigatorPosition(element));\n      element.addLocalHook('afterClose', updateNavigatorPosition(element));\n    }\n  });\n\n  mainMenu.addLocalHook('afterSelectionChange', (selectedItem) => {\n    if (!selectedItem.key.startsWith('filter_')) {\n      focusNavigator.clear();\n    }\n  });\n\n  /**\n   * Extends the menu and submenus with new keyboard shortcuts.\n   *\n   * @param {*} menu The menu (as main menu or submenu) instance.\n   */\n  function addKeyboardShortcuts(menu) {\n    const mainMenuShortcutsCtrl = mainMenu.getKeyboardShortcutsCtrl();\n    const currentMenuShortcutsCtrl = menu.getKeyboardShortcutsCtrl();\n\n    focusNavigator.clear();\n\n    currentMenuShortcutsCtrl.addCustomShortcuts([{\n      keys: [['Tab'], ['Shift', 'Tab']],\n      forwardToContext: mainMenuShortcutsCtrl.getContext(SHORTCUTS_MENU_CONTEXT),\n      callback: () => {\n        if (menu.isSubMenu()) {\n          menu.close();\n        }\n\n        mainMenuShortcutsCtrl.listen(SHORTCUTS_MENU_CONTEXT);\n      },\n    }]);\n\n    if (menu.isSubMenu()) {\n      return;\n    }\n\n    mainMenuShortcutsCtrl.addCustomShortcuts([{\n      keys: [['Tab'], ['Shift', 'Tab']],\n      callback: (event) => {\n        const menuNavigator = mainMenu.getNavigator();\n\n        if (menuNavigator.getCurrentPage() > -1) {\n          lastSelectedMenuItem = menuNavigator.getCurrentPage();\n        }\n\n        menuNavigator.clear();\n\n        if (event.shiftKey) {\n          focusNavigator.toPreviousItem();\n        } else {\n          focusNavigator.toNextItem();\n        }\n      },\n    }, {\n      keys: [['Escape']],\n      callback: () => {\n        mainMenu.close();\n      }\n    }, {\n      keys: [['Enter'], ['Space']],\n      preventDefault: false,\n      callback: (event) => {\n        const element = menuItems[focusNavigator.getCurrentPage()];\n\n        if (element instanceof SelectUI) {\n          element.openOptions();\n          event.preventDefault();\n        }\n\n        if (element instanceof LinkUI) {\n          element.activate();\n          event.preventDefault();\n        }\n\n        if (!(element instanceof BaseUI)) {\n          event.preventDefault();\n        }\n      }\n    }], SHORTCUTS_MENU_CONTEXT);\n  }\n\n  mainMenu.addLocalHook('afterSubmenuOpen', addKeyboardShortcuts);\n  mainMenu.addLocalHook('afterOpen', addKeyboardShortcuts);\n\n  /**\n   * Focuses the menu and switches its shortcut context to that one which controls\n   * the focus navigation.\n   */\n  function listen() {\n    mainMenu.focus();\n    mainMenu.getKeyboardShortcutsCtrl().listen(SHORTCUTS_MENU_CONTEXT);\n  }\n\n  /**\n   * Retrieves the last selected menu item (before clearing the state after going into the focus mode).\n   *\n   * @returns {number} The last selected menu item.\n   */\n  function getLastMenuPage() {\n    return lastSelectedMenuItem;\n  }\n\n  return {\n    ...focusNavigator,\n    listen,\n    getLastMenuPage,\n  };\n}\n","import { createPaginator } from '../../../utils/paginator';\nimport { isVisible } from '../../../helpers/dom/element';\nimport { MultipleSelectUI } from '../ui/multipleSelect';\n\n/**\n * Creates navigator for switching the focus of the filter's elements.\n *\n * @param {BaseUI[]} elements The elements to paginate to.\n * @returns {Paginator}\n */\nexport function createFocusNavigator(elements) {\n  const navigator = createPaginator({\n    initialPage: 0,\n    size: () => elements.length,\n    onItemSelect: (currentIndex, directItemChange) => {\n      const element = elements[currentIndex];\n\n      if (element instanceof MultipleSelectUI) {\n        return directItemChange;\n      }\n\n      if (element.element && !isVisible(element.element)) {\n        return false;\n      }\n\n      element.focus();\n    }\n  });\n\n  return navigator;\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Formulas,\n} from './formulas';\n","import { BasePlugin } from '../base';\nimport staticRegister from '../../utils/staticRegister';\nimport { error, warn } from '../../helpers/console';\nimport { isNumeric } from '../../helpers/number';\nimport {\n  isDefined,\n  isUndefined\n} from '../../helpers/mixed';\nimport {\n  setupEngine,\n  setupSheet,\n  unregisterEngine,\n  getRegisteredHotInstances,\n} from './engine/register';\nimport {\n  isEscapedFormulaExpression,\n  unescapeFormulaExpression,\n  isDate,\n  isDateValid,\n  getDateInHfFormat,\n  getDateFromExcelDate,\n  getDateInHotFormat,\n  isFormula,\n} from './utils';\nimport {\n  getEngineSettingsWithOverrides,\n  haveEngineSettingsChanged\n} from './engine/settings';\nimport { isArrayOfArrays } from '../../helpers/data';\nimport { toUpperCaseFirst } from '../../helpers/string';\nimport Hooks from '../../pluginHooks';\nimport IndexSyncer from './indexSyncer';\n\nexport const PLUGIN_KEY = 'formulas';\nexport const SETTING_KEYS = ['maxRows', 'maxColumns', 'language'];\nexport const PLUGIN_PRIORITY = 260;\n\nHooks.getSingleton().register('afterNamedExpressionAdded');\nHooks.getSingleton().register('afterNamedExpressionRemoved');\nHooks.getSingleton().register('afterSheetAdded');\nHooks.getSingleton().register('afterSheetRemoved');\nHooks.getSingleton().register('afterSheetRenamed');\nHooks.getSingleton().register('afterFormulasValuesUpdate');\n\n// This function will be used for detecting changes coming from the `UndoRedo` plugin. This kind of change won't be\n// handled by whole body of listeners and therefore won't change undo/redo stack inside engine provided by HyperFormula.\n// HyperFormula's `undo` and `redo` methods will do it instead. Please keep in mind that undo/redo stacks inside\n// instances of Handsontable and HyperFormula should be synced (number of actions should be the same).\nconst isBlockedSource = source => source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';\n\n/**\n * This plugin allows you to perform Excel-like calculations in your business applications. It does it by an\n * integration with our other product, [HyperFormula](https://github.com/handsontable/hyperformula/), which is a\n * powerful calculation engine with an extensive number of features.\n *\n * To test out HyperFormula, see [this guide](@/guides/formulas/formula-calculation/formula-calculation.md#available-functions).\n *\n * @plugin Formulas\n * @class Formulas\n */\nexport class Formulas extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  /**\n   * Flag used to bypass hooks in internal operations.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #internalOperationPending = false;\n\n  /**\n   * Flag needed to mark if Handsontable was initialized with no data.\n   * (Required to work around the fact, that Handsontable auto-generates sample data, when no data is provided).\n   *\n   * @type {boolean}\n   */\n  #hotWasInitializedWithEmptyData = false;\n\n  /**\n   * The list of the HyperFormula listeners.\n   *\n   * @type {Array}\n   */\n  #engineListeners = [\n    ['valuesUpdated', (...args) => this.#onEngineValuesUpdated(...args)],\n    ['namedExpressionAdded', (...args) => this.#onEngineNamedExpressionsAdded(...args)],\n    ['namedExpressionRemoved', (...args) => this.#onEngineNamedExpressionsRemoved(...args)],\n    ['sheetAdded', (...args) => this.#onEngineSheetAdded(...args)],\n    ['sheetRenamed', (...args) => this.#onEngineSheetRenamed(...args)],\n    ['sheetRemoved', (...args) => this.#onEngineSheetRemoved(...args)],\n  ];\n\n  /**\n   * Static register used to set up one global HyperFormula instance.\n   * TODO: currently used in tests, might be removed later.\n   *\n   * @private\n   * @type {object}\n   */\n  staticRegister = staticRegister('formulas');\n\n  /**\n   * The engine instance that will be used for this instance of Handsontable.\n   *\n   * @type {HyperFormula|null}\n   */\n  engine = null;\n\n  /**\n   * HyperFormula's sheet name.\n   *\n   * @type {string|null}\n   */\n  sheetName = null;\n  /**\n   * Index synchronizer responsible for manipulating with some general options related to indexes synchronization.\n   *\n   * @type {IndexSyncer|null}\n   */\n  indexSyncer = null;\n  /**\n   * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the rows.\n   *\n   * @type {AxisSyncer|null}\n   */\n  rowAxisSyncer = null;\n  /**\n   * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the columns.\n   *\n   * @type {AxisSyncer|null}\n   */\n  columnAxisSyncer = null;\n\n  /**\n   * HyperFormula's sheet id.\n   *\n   * @type {number|null}\n   */\n  get sheetId() {\n    return this.sheetName === null ? null : this.engine.getSheetId(this.sheetName);\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link Formulas#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    /* eslint-disable no-unneeded-ternary */\n    return this.hot.getSettings()[PLUGIN_KEY] ? true : false;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.engine = setupEngine(this.hot) ?? this.engine;\n\n    if (!this.engine) {\n      warn('Missing the required `engine` key in the Formulas settings. Please fill it with either an' +\n        ' engine class or an engine instance.');\n\n      return;\n    }\n\n    // Useful for disabling -> enabling the plugin using `updateSettings` or the API.\n    if (this.sheetName !== null && !this.engine.doesSheetExist(this.sheetName)) {\n      const newSheetName = this.addSheet(this.sheetName, this.hot.getSourceDataArray());\n\n      if (newSheetName !== false) {\n        this.sheetName = newSheetName;\n      }\n    }\n\n    this.addHook('beforeLoadData', (...args) => this.#onBeforeLoadData(...args));\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    // The `updateData` hooks utilize the same logic as the `loadData` hooks.\n    this.addHook('beforeUpdateData', (...args) => this.#onBeforeLoadData(...args));\n    this.addHook('afterUpdateData', (...args) => this.#onAfterLoadData(...args));\n\n    this.addHook('modifyData', (...args) => this.#onModifyData(...args));\n    this.addHook('modifySourceData', (...args) => this.#onModifySourceData(...args));\n    this.addHook('beforeValidate', (...args) => this.#onBeforeValidate(...args));\n\n    this.addHook('afterSetSourceDataAtCell', (...args) => this.#onAfterSetSourceDataAtCell(...args));\n    this.addHook('afterSetDataAtCell', (...args) => this.#onAfterSetDataAtCell(...args));\n    this.addHook('afterSetDataAtRowProp', (...args) => this.#onAfterSetDataAtCell(...args));\n\n    this.addHook('beforeCreateRow', (...args) => this.#onBeforeCreateRow(...args));\n    this.addHook('beforeCreateCol', (...args) => this.#onBeforeCreateCol(...args));\n\n    this.addHook('afterCreateRow', (...args) => this.#onAfterCreateRow(...args));\n    this.addHook('afterCreateCol', (...args) => this.#onAfterCreateCol(...args));\n\n    this.addHook('beforeRemoveRow', (...args) => this.#onBeforeRemoveRow(...args));\n    this.addHook('beforeRemoveCol', (...args) => this.#onBeforeRemoveCol(...args));\n\n    this.addHook('afterRemoveRow', (...args) => this.#onAfterRemoveRow(...args));\n    this.addHook('afterRemoveCol', (...args) => this.#onAfterRemoveCol(...args));\n\n    this.indexSyncer = new IndexSyncer(this.hot.rowIndexMapper, this.hot.columnIndexMapper, (postponedAction) => {\n      this.hot.addHookOnce('init', () => {\n        // Engine is initialized after executing callback to `afterLoadData` hook. Thus, some actions on indexes should\n        // be postponed.\n        postponedAction();\n      });\n    });\n\n    this.rowAxisSyncer = this.indexSyncer.getForAxis('row');\n    this.columnAxisSyncer = this.indexSyncer.getForAxis('column');\n\n    this.hot.addHook('afterRowSequenceChange', this.rowAxisSyncer.getIndexesChangeSyncMethod());\n    this.hot.addHook('afterColumnSequenceChange', this.columnAxisSyncer.getIndexesChangeSyncMethod());\n\n    this.hot.addHook('beforeRowMove', (movedRows, finalIndex, _, movePossible) => {\n      this.rowAxisSyncer.storeMovesInformation(movedRows, finalIndex, movePossible);\n    });\n\n    this.hot.addHook('beforeColumnMove', (movedColumns, finalIndex, _, movePossible) => {\n      this.columnAxisSyncer.storeMovesInformation(movedColumns, finalIndex, movePossible);\n    });\n\n    this.hot.addHook('afterRowMove', (movedRows, finalIndex, dropIndex, movePossible, orderChanged) => {\n      this.rowAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);\n    });\n\n    this.hot.addHook('afterColumnMove', (movedColumns, finalIndex, dropIndex, movePossible, orderChanged) => {\n      this.columnAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);\n    });\n\n    this.hot.addHook('beforeColumnFreeze', (column, freezePerformed) => {\n      this.columnAxisSyncer.storeMovesInformation(\n        [column], this.hot.getSettings().fixedColumnsStart, freezePerformed);\n    });\n\n    this.hot.addHook('afterColumnFreeze', (_, freezePerformed) => {\n      this.columnAxisSyncer.calculateAndSyncMoves(freezePerformed, freezePerformed);\n    });\n\n    this.hot.addHook('beforeColumnUnfreeze', (column, unfreezePerformed) => {\n      this.columnAxisSyncer.storeMovesInformation(\n        [column], this.hot.getSettings().fixedColumnsStart - 1, unfreezePerformed);\n    });\n\n    this.hot.addHook('afterColumnUnfreeze', (_, unfreezePerformed) => {\n      this.columnAxisSyncer.calculateAndSyncMoves(unfreezePerformed, unfreezePerformed);\n    });\n\n    // TODO: Actions related to overwriting dates from HOT format to HF default format are done as callback to this\n    // hook, because some hooks, such as `afterLoadData` doesn't have information about composed cell properties.\n    // Another hooks are triggered to late for setting HF's engine data needed for some actions.\n    this.addHook('afterCellMetaReset', (...args) => this.#onAfterCellMetaReset(...args));\n\n    // Handling undo actions on data just using HyperFormula's UndoRedo mechanism\n    this.addHook('beforeUndo', () => {\n      this.indexSyncer.setPerformUndo(true);\n\n      this.engine.undo();\n    });\n\n    // Handling redo actions on data just using HyperFormula's UndoRedo mechanism\n    this.addHook('beforeRedo', () => {\n      this.indexSyncer.setPerformRedo(true);\n\n      this.engine.redo();\n    });\n\n    this.addHook('afterUndo', () => {\n      this.indexSyncer.setPerformUndo(false);\n    });\n\n    this.addHook('afterUndo', () => {\n      this.indexSyncer.setPerformRedo(false);\n    });\n\n    this.addHook('afterDetachChild', (...args) => this.#onAfterDetachChild(...args));\n    this.addHook('beforeAutofill', (...args) => this.#onBeforeAutofill(...args));\n\n    this.#engineListeners.forEach(([eventName, listener]) => this.engine.on(eventName, listener));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#engineListeners.forEach(([eventName, listener]) => this.engine.off(eventName, listener));\n\n    unregisterEngine(this.engine, this.hot);\n\n    this.engine = null;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Triggered on `updateSettings`.\n   *\n   * @private\n   * @param {object} newSettings New set of settings passed to the `updateSettings` method.\n   */\n  updatePlugin(newSettings) {\n    const newEngineSettings = getEngineSettingsWithOverrides(this.hot.getSettings());\n\n    if (haveEngineSettingsChanged(this.engine.getConfig(), newEngineSettings)) {\n      this.engine.updateConfig(newEngineSettings);\n    }\n\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (\n      isDefined(pluginSettings) &&\n      isDefined(pluginSettings.sheetName) &&\n      pluginSettings.sheetName !== this.sheetName\n    ) {\n      this.switchSheet(pluginSettings.sheetName);\n    }\n\n    // If no data was passed to the `updateSettings` method and no sheet is connected to the instance -> create a\n    // new sheet using the currently used data. Otherwise, it will be handled by the `afterLoadData` call.\n    if (!newSettings.data && this.sheetName === null) {\n      const sheetName = this.hot.getSettings()[PLUGIN_KEY].sheetName;\n\n      if (sheetName && this.engine.doesSheetExist(sheetName)) {\n        this.switchSheet(this.sheetName);\n\n      } else {\n        this.sheetName = this.addSheet(sheetName ?? undefined, this.hot.getSourceDataArray());\n      }\n    }\n\n    super.updatePlugin(newSettings);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#engineListeners.forEach(([eventName, listener]) => this.engine?.off(eventName, listener));\n    this.#engineListeners = null;\n\n    unregisterEngine(this.engine, this.hot);\n\n    this.engine = null;\n\n    super.destroy();\n  }\n\n  /**\n   * Add a sheet to the shared HyperFormula instance.\n   *\n   * @param {string|null} [sheetName] The new sheet name. If not provided (or a null is passed), will be\n   * auto-generated by HyperFormula.\n   * @param {Array} [sheetData] Data passed to the shared HyperFormula instance. Has to be declared as an array of\n   * arrays - array of objects is not supported in this scenario.\n   * @returns {boolean|string} `false` if the data format is unusable or it is impossible to add a new sheet to the\n   * engine, the created sheet name otherwise.\n   */\n  addSheet(sheetName, sheetData) {\n    if (isDefined(sheetData) && !isArrayOfArrays(sheetData)) {\n      warn('The provided data should be an array of arrays.');\n\n      return false;\n    }\n\n    if (sheetName !== undefined && sheetName !== null && this.engine.doesSheetExist(sheetName)) {\n      warn('Sheet with the provided name already exists.');\n\n      return false;\n    }\n\n    try {\n      const actualSheetName = this.engine.addSheet(sheetName ?? undefined);\n\n      if (sheetData) {\n        this.engine.setSheetContent(this.engine.getSheetId(actualSheetName), sheetData);\n      }\n\n      return actualSheetName;\n\n    } catch (e) {\n      warn(e.message);\n\n      return false;\n    }\n  }\n\n  /**\n   * Switch the sheet used as data in the Handsontable instance (it loads the data from the shared HyperFormula\n   * instance).\n   *\n   * @param {string} sheetName Sheet name used in the shared HyperFormula instance.\n   */\n  switchSheet(sheetName) {\n    if (!this.engine.doesSheetExist(sheetName)) {\n      error(`The sheet named \\`${sheetName}\\` does not exist, switch aborted.`);\n\n      return;\n    }\n\n    this.sheetName = sheetName;\n\n    const serialized = this.engine.getSheetSerialized(this.sheetId);\n\n    if (serialized.length > 0) {\n      this.hot.loadData(serialized, `${toUpperCaseFirst(PLUGIN_KEY)}.switchSheet`);\n    }\n  }\n\n  /**\n   * Get the cell type under specified visual coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {number} [sheet] The target sheet id, defaults to the current sheet.\n   * @returns {string} Possible values: 'FORMULA' | 'VALUE' | 'ARRAYFORMULA' | 'EMPTY'.\n   */\n  getCellType(row, column, sheet = this.sheetId) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    if (physicalRow !== null && physicalColumn !== null) {\n      return this.engine.getCellType({\n        sheet,\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),\n      });\n\n    } else {\n      // Should return `EMPTY` when out of bounds (according to the test cases).\n      return 'EMPTY';\n    }\n  }\n\n  /**\n   * Returns `true` if under specified visual coordinates is formula.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {number} [sheet] The target sheet id, defaults to the current sheet.\n   * @returns {boolean}\n   */\n  isFormulaCellType(row, column, sheet = this.sheetId) {\n    return this.engine.doesCellHaveFormula({\n      sheet,\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),\n    });\n  }\n\n  /**\n   * Renders dependent sheets (handsontable instances) based on the changes - list of the\n   * recalculated dependent cells.\n   *\n   * @private\n   * @param {object[]} dependentCells The values and location of applied changes within HF engine.\n   * @param {boolean} [renderSelf] `true` if it's supposed to render itself, `false` otherwise.\n   */\n  renderDependentSheets(dependentCells, renderSelf = false) {\n    const affectedSheetIds = new Set();\n\n    dependentCells.forEach((change) => {\n      // For the Named expression the address is empty, hence the `sheetId` is undefined.\n      const sheetId = change?.address?.sheet;\n\n      if (sheetId !== undefined) {\n        if (!affectedSheetIds.has(sheetId)) {\n          affectedSheetIds.add(sheetId);\n        }\n      }\n    });\n\n    getRegisteredHotInstances(this.engine).forEach((relatedHot, sheetId) => {\n      if (\n        (renderSelf || (sheetId !== this.sheetId)) &&\n        affectedSheetIds.has(sheetId)\n      ) {\n        relatedHot.render();\n        relatedHot.view?.adjustElementsSize();\n      }\n    });\n  }\n\n  /**\n   * Validates dependent cells based on the cells that are modified by the change.\n   *\n   * @private\n   * @param {object[]} dependentCells The values and location of applied changes within HF engine.\n   * @param {object[]} [changedCells] The values and location of applied changes by developer (through API or UI).\n   */\n  validateDependentCells(dependentCells, changedCells = []) {\n    const stringifyAddress = (change) => {\n      const {\n        row,\n        col,\n        sheet\n      } = change?.address ?? {};\n\n      return isDefined(sheet) ? `${sheet}:${row}x${col}` : '';\n    };\n    const changedCellsSet = new Set(changedCells.map(change => stringifyAddress(change)));\n\n    dependentCells.forEach((change) => {\n      const { row, col } = change.address ?? {};\n\n      // Don't try to validate cells outside of the visual part of the table.\n      if (isDefined(row) === false || isDefined(col) === false ||\n        row >= this.hot.countRows() || col >= this.hot.countCols()) {\n        return;\n      }\n\n      // For the Named expression the address is empty, hence the `sheetId` is undefined.\n      const sheetId = change?.address?.sheet;\n      const addressId = stringifyAddress(change);\n\n      // Validate the cells that depend on the calculated formulas. Skip that cells\n      // where the user directly changes the values - the Core triggers those validators.\n      if (sheetId !== undefined && !changedCellsSet.has(addressId)) {\n        const boundHot = getRegisteredHotInstances(this.engine).get(sheetId);\n\n        // if `sheetId` is not bound to any Handsontable instance, skip the validation process\n        if (!boundHot) {\n          return;\n        }\n\n        // It will just re-render certain cell when necessary.\n        boundHot.validateCell(\n          boundHot.getDataAtCell(row, col),\n          boundHot.getCellMeta(row, col),\n          () => {}\n        );\n      }\n    });\n  }\n\n  /**\n   * Sync a change from the change-related hooks with the engine.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {Handsontable.CellValue} newValue New value.\n   * @returns {Array} Array of changes exported from the engine.\n   */\n  syncChangeWithEngine(row, column, newValue) {\n    const address = {\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),\n      sheet: this.sheetId\n    };\n\n    if (!this.engine.isItPossibleToSetCellContents(address)) {\n      warn(`Not possible to set cell data at ${JSON.stringify(address)}`);\n\n      return;\n    }\n\n    const cellMeta = this.hot.getCellMeta(row, column);\n\n    if (isDate(newValue, cellMeta.type)) {\n      if (isDateValid(newValue, cellMeta.dateFormat)) {\n        // Rewriting date in HOT format to HF format.\n        newValue = getDateInHfFormat(newValue, cellMeta.dateFormat);\n\n      } else if (isFormula(newValue) === false) {\n        // Escaping value from date parsing using \"'\" sign (HF feature).\n        newValue = `'${newValue}`;\n      }\n    }\n\n    return this.engine.setCellContents(address, newValue);\n  }\n\n  /**\n   * The hook allows to translate the formula value to calculated value before it goes to the\n   * validator function.\n   *\n   * @param {*} value The cell value to validate.\n   * @param {number} visualRow The visual row index.\n   * @param {number|string} prop The visual column index or property name of the column.\n   * @returns {*} Returns value to validate.\n   */\n  #onBeforeValidate(value, visualRow, prop) {\n    const visualColumn = this.hot.propToCol(prop);\n\n    if (this.isFormulaCellType(visualRow, visualColumn)) {\n      const address = {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n        sheet: this.sheetId,\n      };\n\n      const cellMeta = this.hot.getCellMeta(visualRow, visualColumn);\n      let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel-like date).\n\n      if (cellMeta.type === 'date' && isNumeric(cellValue)) {\n        cellValue = getDateFromExcelDate(cellValue, cellMeta.dateFormat);\n      }\n\n      // If `cellValue` is an object it is expected to be an error\n      return (typeof cellValue === 'object' && cellValue !== null) ? cellValue.value : cellValue;\n    }\n\n    return value;\n  }\n\n  /**\n   * `onBeforeAutofill` hook callback.\n   *\n   * @param {Array[]} fillData The data that was used to fill the `targetRange`. If `beforeAutofill` was used\n   * and returned `[[]]`, this will be the same object that was returned from `beforeAutofill`.\n   * @param {CellRange} sourceRange The range values will be filled from.\n   * @param {CellRange} targetRange The range new values will be filled into.\n   * @returns {boolean|*}\n   */\n  #onBeforeAutofill(fillData, sourceRange, targetRange) {\n    const { row: sourceTopStartRow, col: sourceTopStartColumn } = sourceRange.getTopStartCorner();\n    const { row: sourceBottomEndRow, col: sourceBottomEndColumn } = sourceRange.getBottomEndCorner();\n    const { row: targetTopStartRow, col: targetTopStartColumn } = targetRange.getTopStartCorner();\n    const { row: targetBottomEndRow, col: targetBottomEndColumn } = targetRange.getBottomEndCorner();\n\n    const engineSourceRange = {\n      start: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartColumn),\n        sheet: this.sheetId,\n      },\n      end: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndColumn),\n        sheet: this.sheetId,\n      },\n    };\n\n    const engineTargetRange = {\n      start: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetTopStartRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetTopStartColumn),\n        sheet: this.sheetId,\n      },\n      end: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndColumn),\n        sheet: this.sheetId,\n      },\n    };\n\n    // Blocks the autofill operation if HyperFormula says that at least one of\n    // the underlying cell's contents cannot be set.\n    if (this.engine.isItPossibleToSetCellContents(engineTargetRange) === false) {\n      return false;\n    }\n\n    const fillRangeData = this.engine.getFillRangeData(engineSourceRange, engineTargetRange);\n    const {\n      row: sourceStartRow,\n      col: sourceStartColumn,\n    } = engineSourceRange.start;\n    const {\n      row: sourceEndRow,\n      col: sourceEndColumn,\n    } = engineSourceRange.end;\n    const populationRowLength = sourceEndRow - sourceStartRow + 1;\n    const populationColumnLength = sourceEndColumn - sourceStartColumn + 1;\n\n    for (let populatedRowIndex = 0; populatedRowIndex < fillRangeData.length; populatedRowIndex += 1) {\n      for (let populatedColumnIndex = 0; populatedColumnIndex < fillRangeData[populatedRowIndex].length;\n        populatedColumnIndex += 1) {\n        const populatedValue = fillRangeData[populatedRowIndex][populatedColumnIndex];\n        const sourceRow = sourceStartRow + (populatedRowIndex % populationRowLength);\n        const sourceColumn = sourceStartColumn + (populatedColumnIndex % populationColumnLength);\n        const sourceCellMeta = this.hot.getCellMeta(sourceRow, sourceColumn);\n\n        if (isDate(populatedValue, sourceCellMeta.type)) {\n          if (populatedValue.startsWith('\\'')) {\n            // Populating values on HOT side without apostrophe.\n            fillRangeData[populatedRowIndex][populatedColumnIndex] = populatedValue.slice(1);\n\n          } else if (this.isFormulaCellType(sourceRow, sourceColumn, this.sheetId) === false) {\n            // Populating date in proper format, coming from the source cell.\n            fillRangeData[populatedRowIndex][populatedColumnIndex] =\n              getDateInHotFormat(populatedValue, sourceCellMeta.dateFormat);\n          }\n        }\n      }\n    }\n\n    return fillRangeData;\n  }\n\n  /**\n   * `beforeLoadData` hook callback.\n   *\n   * @param {Array} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n   * @param {string} [source] Source of the call.\n   */\n  #onBeforeLoadData(sourceData, initialLoad, source = '') {\n    if (source.includes(toUpperCaseFirst(PLUGIN_KEY))) {\n      return;\n    }\n\n    // This flag needs to be defined, because not passing data to HOT results in HOT auto-generating a `null`-filled\n    // initial dataset.\n    this.#hotWasInitializedWithEmptyData = isUndefined(this.hot.getSettings().data);\n  }\n\n  /**\n   * Callback to `afterCellMetaReset` hook which is triggered after setting cell meta.\n   */\n  #onAfterCellMetaReset() {\n    const sourceDataArray = this.hot.getSourceDataArray();\n    let valueChanged = false;\n\n    sourceDataArray.forEach((rowData, rowIndex) => {\n      rowData.forEach((cellValue, columnIndex) => {\n        const cellMeta = this.hot.getCellMeta(rowIndex, columnIndex);\n        const dateFormat = cellMeta.dateFormat;\n\n        if (isDate(cellValue, cellMeta.type)) {\n          valueChanged = true;\n\n          if (isDateValid(cellValue, dateFormat)) {\n            // Rewriting date in HOT format to HF format.\n            sourceDataArray[rowIndex][columnIndex] = getDateInHfFormat(cellValue, dateFormat);\n\n          } else if (this.isFormulaCellType(rowIndex, columnIndex) === false) {\n            // Escaping value from date parsing using \"'\" sign (HF feature).\n            sourceDataArray[rowIndex][columnIndex] = `'${cellValue}`;\n          }\n        }\n      });\n    });\n\n    if (valueChanged === true) {\n      this.#internalOperationPending = true;\n\n      this.engine.setSheetContent(this.sheetId, sourceDataArray);\n\n      this.#internalOperationPending = false;\n    }\n  }\n\n  /**\n   * `afterLoadData` hook callback.\n   *\n   * @param {Array} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n   * @param {string} [source] Source of the call.\n   */\n  #onAfterLoadData(sourceData, initialLoad, source = '') {\n    if (source.includes(toUpperCaseFirst(PLUGIN_KEY))) {\n      return;\n    }\n\n    this.sheetName = setupSheet(this.engine, this.hot.getSettings()[PLUGIN_KEY].sheetName);\n\n    if (!this.#hotWasInitializedWithEmptyData) {\n      const sourceDataArray = this.hot.getSourceDataArray();\n\n      if (this.engine.isItPossibleToReplaceSheetContent(this.sheetId, sourceDataArray)) {\n        this.#internalOperationPending = true;\n\n        const dependentCells = this.engine.setSheetContent(this.sheetId, sourceDataArray);\n\n        this.indexSyncer.setupSyncEndpoint(this.engine, this.sheetId);\n        this.renderDependentSheets(dependentCells);\n\n        this.#internalOperationPending = false;\n      }\n\n    } else {\n      this.switchSheet(this.sheetName);\n    }\n  }\n\n  /**\n   * `modifyData` hook callback.\n   *\n   * @param {number} physicalRow Physical row index.\n   * @param {number} visualColumn Visual column index.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`\n   *   property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  #onModifyData(physicalRow, visualColumn, valueHolder, ioMode) {\n    if (\n      ioMode !== 'get' ||\n      this.#internalOperationPending ||\n      this.sheetName === null ||\n      !this.engine.doesSheetExist(this.sheetName)\n    ) {\n      return;\n    }\n\n    const visualRow = this.hot.toVisualRow(physicalRow);\n\n    if (visualRow === null || visualColumn === null) {\n      return;\n    }\n\n    // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.\n    const isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);\n\n    if (!isFormulaCellType) {\n      const cellType = this.getCellType(visualRow, visualColumn);\n\n      if (cellType !== 'ARRAY') {\n        if (isEscapedFormulaExpression(valueHolder.value)) {\n          valueHolder.value = unescapeFormulaExpression(valueHolder.value);\n        }\n\n        return;\n      }\n    }\n\n    const address = {\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n      sheet: this.sheetId\n    };\n    let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).\n\n    // TODO: Workaround. We use HOT's `getCellsMeta` method instead of HOT's `getCellMeta` method. Getting cell meta\n    // using the second method lead to execution of the `cells` method. Using the `getDataAtCell` (which may be useful)\n    // in a callback to the `cells` method leads to triggering the `modifyData` hook. Thus, the `onModifyData` callback\n    // is executed once again and it cause creation of an infinite loop.\n    let cellMeta = this.hot.getCellsMeta().find(singleCellMeta => singleCellMeta.visualRow === visualRow &&\n      singleCellMeta.visualCol === visualColumn);\n\n    if (cellMeta === undefined) {\n      cellMeta = {};\n    }\n\n    if (cellMeta.type === 'date' && isNumeric(cellValue)) {\n      cellValue = getDateFromExcelDate(cellValue, cellMeta.dateFormat);\n    }\n\n    // If `cellValue` is an object it is expected to be an error\n    const value = (typeof cellValue === 'object' && cellValue !== null) ? cellValue.value : cellValue;\n\n    valueHolder.value = value;\n  }\n\n  /**\n   * `modifySourceData` hook callback.\n   *\n   * @param {number} row Physical row index.\n   * @param {number|string} columnOrProp Physical column index or prop.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`\n   *   property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  #onModifySourceData(row, columnOrProp, valueHolder, ioMode) {\n    if (\n      ioMode !== 'get' ||\n      this.#internalOperationPending ||\n      this.sheetName === null ||\n      !this.engine.doesSheetExist(this.sheetName)\n    ) {\n      return;\n    }\n\n    const visualRow = this.hot.toVisualRow(row);\n    const visualColumn = this.hot.propToCol(columnOrProp);\n\n    if (visualRow === null || visualColumn === null) {\n      return;\n    }\n\n    // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.\n    const isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);\n\n    if (!isFormulaCellType) {\n      const cellType = this.getCellType(visualRow, visualColumn);\n\n      if (cellType !== 'ARRAY') {\n        return;\n      }\n    }\n\n    const dimensions = this.engine.getSheetDimensions(this.engine.getSheetId(this.sheetName));\n\n    // Don't actually change the source data if HyperFormula is not\n    // initialized yet. This is done to allow the `afterLoadData` hook to\n    // load the existing source data with `Handsontable#getSourceDataArray`\n    // properly.\n    if (dimensions.width === 0 && dimensions.height === 0) {\n      return;\n    }\n\n    const address = {\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n      sheet: this.sheetId\n    };\n\n    valueHolder.value = this.engine.getCellSerialized(address);\n  }\n\n  /**\n   * `onAfterSetDataAtCell` hook callback.\n   *\n   * @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterSetDataAtCell(changes, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const outOfBoundsChanges = [];\n    const changedCells = [];\n\n    const dependentCells = this.engine.batch(() => {\n      changes.forEach(([visualRow, prop, , newValue]) => {\n        const visualColumn = this.hot.propToCol(prop);\n        const physicalRow = this.hot.toPhysicalRow(visualRow);\n        const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n        const address = {\n          row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n          col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n          sheet: this.sheetId,\n        };\n\n        if (physicalRow !== null && physicalColumn !== null) {\n          this.syncChangeWithEngine(visualRow, visualColumn, newValue);\n\n        } else {\n          outOfBoundsChanges.push([visualRow, visualColumn, newValue]);\n        }\n\n        changedCells.push({ address });\n      });\n    });\n\n    if (outOfBoundsChanges.length) {\n      // Workaround for rows/columns being created two times (by HOT and the engine).\n      // (unfortunately, this requires an extra re-render)\n      this.hot.addHookOnce('afterChange', () => {\n        const outOfBoundsDependentCells = this.engine.batch(() => {\n          outOfBoundsChanges.forEach(([row, column, newValue]) => {\n            this.syncChangeWithEngine(row, column, newValue);\n          });\n        });\n\n        this.renderDependentSheets(outOfBoundsDependentCells, true);\n      });\n    }\n\n    this.renderDependentSheets(dependentCells);\n    this.validateDependentCells(dependentCells, changedCells);\n  }\n\n  /**\n   * `onAfterSetSourceDataAtCell` hook callback.\n   *\n   * @param {Array[]} changes An array of changes in format [[row, column, oldValue, value], ...].\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterSetSourceDataAtCell(changes, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const dependentCells = [];\n    const changedCells = [];\n\n    changes.forEach(([visualRow, prop, , newValue]) => {\n      const visualColumn = this.hot.propToCol(prop);\n\n      if (!isNumeric(visualColumn)) {\n        return;\n      }\n\n      const address = {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n        sheet: this.sheetId\n      };\n\n      if (!this.engine.isItPossibleToSetCellContents(address)) {\n        warn(`Not possible to set source cell data at ${JSON.stringify(address)}`);\n\n        return;\n      }\n\n      changedCells.push({ address });\n      dependentCells.push(...this.engine.setCellContents(address, newValue));\n    });\n\n    this.renderDependentSheets(dependentCells);\n    this.validateDependentCells(dependentCells, changedCells);\n  }\n\n  /**\n   * `beforeCreateRow` hook callback.\n   *\n   * @param {number} visualRow Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeCreateRow(visualRow, amount) {\n    let hfRowIndex = this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow);\n\n    if (visualRow >= this.hot.countRows()) {\n      hfRowIndex = visualRow; // Row beyond the table boundaries.\n    }\n\n    if (\n      this.sheetId === null ||\n      !this.engine.doesSheetExist(this.sheetName) ||\n      !this.engine.isItPossibleToAddRows(this.sheetId, [hfRowIndex, amount])\n    ) {\n      return false;\n    }\n  }\n\n  /**\n   * `beforeCreateCol` hook callback.\n   *\n   * @param {number} visualColumn Represents the visual index of first newly created column in the data source.\n   * @param {number} amount Number of newly created columns in the data source.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeCreateCol(visualColumn, amount) {\n    let hfColumnIndex = this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn);\n\n    if (visualColumn >= this.hot.countCols()) {\n      hfColumnIndex = visualColumn; // Column beyond the table boundaries.\n    }\n\n    if (\n      this.sheetId === null ||\n      !this.engine.doesSheetExist(this.sheetName) ||\n      !this.engine.isItPossibleToAddColumns(this.sheetId, [hfColumnIndex, amount])\n    ) {\n      return false;\n    }\n  }\n\n  /**\n   * `beforeRemoveRow` hook callback.\n   *\n   * @param {number} row Visual index of starter row.\n   * @param {number} amount Amount of rows to be removed.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeRemoveRow(row, amount, physicalRows) {\n    const hfRows = this.rowAxisSyncer.setRemovedHfIndexes(physicalRows);\n\n    const possible = hfRows.every((hfRow) => {\n      return this.engine.isItPossibleToRemoveRows(this.sheetId, [hfRow, 1]);\n    });\n\n    return possible === false ? false : undefined;\n  }\n\n  /**\n   * `beforeRemoveCol` hook callback.\n   *\n   * @param {number} col Visual index of starter column.\n   * @param {number} amount Amount of columns to be removed.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeRemoveCol(col, amount, physicalColumns) {\n    const hfColumns = this.columnAxisSyncer.setRemovedHfIndexes(physicalColumns);\n\n    const possible = hfColumns.every((hfColumn) => {\n      return this.engine.isItPossibleToRemoveColumns(this.sheetId, [hfColumn, 1]);\n    });\n\n    return possible === false ? false : undefined;\n  }\n\n  /**\n   * `afterCreateRow` hook callback.\n   *\n   * @param {number} visualRow Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterCreateRow(visualRow, amount, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const changes = this.engine.addRows(this.sheetId,\n      [this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow), amount]);\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterCreateCol` hook callback.\n   *\n   * @param {number} visualColumn Represents the visual index of first newly created column in the data source.\n   * @param {number} amount Number of newly created columns in the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterCreateCol(visualColumn, amount, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const changes = this.engine.addColumns(this.sheetId,\n      [this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn), amount]);\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterRemoveRow` hook callback.\n   *\n   * @param {number} row Visual index of starter row.\n   * @param {number} amount An amount of removed rows.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterRemoveRow(row, amount, physicalRows, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const descendingHfRows = this.rowAxisSyncer\n      .getRemovedHfIndexes()\n      .sort((a, b) => b - a); // sort numeric values descending\n\n    const changes = this.engine.batch(() => {\n      descendingHfRows.forEach((hfRow) => {\n        this.engine.removeRows(this.sheetId, [hfRow, 1]);\n      });\n    });\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterRemoveCol` hook callback.\n   *\n   * @param {number} col Visual index of starter column.\n   * @param {number} amount An amount of removed columns.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterRemoveCol(col, amount, physicalColumns, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const descendingHfColumns = this.columnAxisSyncer\n      .getRemovedHfIndexes()\n      .sort((a, b) => b - a); // sort numeric values descending\n\n    const changes = this.engine.batch(() => {\n      descendingHfColumns.forEach((hfColumn) => {\n        this.engine.removeColumns(this.sheetId, [hfColumn, 1]);\n      });\n    });\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterDetachChild` hook callback.\n   * Used to sync the data of the rows detached in the Nested Rows plugin with the engine's dataset.\n   *\n   * @param {object} parent An object representing the parent from which the element was detached.\n   * @param {object} element The detached element.\n   * @param {number} finalElementRowIndex The final row index of the detached element.\n   */\n  #onAfterDetachChild(parent, element, finalElementRowIndex) {\n    this.#internalOperationPending = true;\n\n    const rowsData = this.hot.getSourceDataArray(\n      finalElementRowIndex,\n      0,\n      finalElementRowIndex + (element.__children?.length || 0),\n      this.hot.countSourceCols()\n    );\n\n    this.#internalOperationPending = false;\n\n    rowsData.forEach((row, relativeRowIndex) => {\n      row.forEach((value, colIndex) => {\n        this.engine.setCellContents({\n          col: colIndex,\n          row: finalElementRowIndex + relativeRowIndex,\n          sheet: this.sheetId\n        }, [[value]]);\n      });\n    });\n  }\n\n  /**\n   * Called when a value is updated in the engine.\n   *\n   * @fires Hooks#afterFormulasValuesUpdate\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineValuesUpdated(changes) {\n    this.hot.runHooks('afterFormulasValuesUpdate', changes);\n  }\n\n  /**\n   * Called when a named expression is added to the engine instance.\n   *\n   * @fires Hooks#afterNamedExpressionAdded\n   * @param {string} namedExpressionName The name of the added expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineNamedExpressionsAdded(namedExpressionName, changes) {\n    this.hot.runHooks('afterNamedExpressionAdded', namedExpressionName, changes);\n  }\n\n  /**\n   * Called when a named expression is removed from the engine instance.\n   *\n   * @fires Hooks#afterNamedExpressionRemoved\n   * @param {string} namedExpressionName The name of the removed expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineNamedExpressionsRemoved(namedExpressionName, changes) {\n    this.hot.runHooks('afterNamedExpressionRemoved', namedExpressionName, changes);\n  }\n\n  /**\n   * Called when a new sheet is added to the engine instance.\n   *\n   * @fires Hooks#afterSheetAdded\n   * @param {string} addedSheetDisplayName The name of the added sheet.\n   */\n  #onEngineSheetAdded(addedSheetDisplayName) {\n    this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);\n  }\n\n  /**\n   * Called when a sheet in the engine instance is renamed.\n   *\n   * @fires Hooks#afterSheetRenamed\n   * @param {string} oldDisplayName The old name of the sheet.\n   * @param {string} newDisplayName The new name of the sheet.\n   */\n  #onEngineSheetRenamed(oldDisplayName, newDisplayName) {\n    this.sheetName = newDisplayName;\n\n    this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);\n  }\n\n  /**\n   * Called when a sheet is removed from the engine instance.\n   *\n   * @fires Hooks#afterSheetRemoved\n   * @param {string} removedSheetDisplayName The removed sheet name.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineSheetRemoved(removedSheetDisplayName, changes) {\n    this.hot.runHooks('afterSheetRemoved', removedSheetDisplayName, changes);\n  }\n}\n","import staticRegister from '../../../utils/staticRegister';\nimport { isUndefined } from '../../../helpers/mixed';\nimport { toSingleLine } from '../../../helpers/templateLiteralTag';\nimport { warn } from '../../../helpers/console';\nimport { isObjectEqual } from '../../../helpers/object';\nimport { PLUGIN_KEY } from '../formulas';\nimport { DEFAULT_LICENSE_KEY, DEFAULT_SETTINGS, getEngineSettingsWithDefaultsAndOverrides } from './settings';\n\n/**\n * Prepares and returns the collection for the engine relationship with the HoT instances.\n *\n * @returns {Map}\n */\nfunction getEngineRelationshipRegistry() {\n  const registryKey = 'engine_relationship';\n  const pluginStaticRegistry = staticRegister(PLUGIN_KEY);\n\n  if (!pluginStaticRegistry.hasItem(registryKey)) {\n    pluginStaticRegistry.register(registryKey, new Map());\n  }\n\n  return pluginStaticRegistry.getItem(registryKey);\n}\n\n/**\n * Prepares and returns the collection for the engine shared usage.\n *\n * @returns {Map}\n */\nfunction getSharedEngineUsageRegistry() {\n  const registryKey = 'shared_engine_usage';\n  const pluginStaticRegistry = staticRegister(PLUGIN_KEY);\n\n  if (!pluginStaticRegistry.hasItem(registryKey)) {\n    pluginStaticRegistry.register(registryKey, new Map());\n  }\n\n  return pluginStaticRegistry.getItem(registryKey);\n}\n\n/**\n * Setups the engine instance. It either creates a new (possibly shared) engine instance, or attaches\n * the plugin to an already-existing instance.\n *\n * @param {Handsontable} hotInstance Handsontable instance.\n * @returns {null|object} Returns the engine instance if everything worked right and `null` otherwise.\n */\nexport function setupEngine(hotInstance) {\n  const hotSettings = hotInstance.getSettings();\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n  const engineConfigItem = pluginSettings?.engine;\n\n  if (pluginSettings === true) {\n    return null;\n  }\n\n  if (isUndefined(engineConfigItem)) {\n    return null;\n  }\n\n  // `engine.hyperformula` or `engine` is the engine class\n  if (typeof engineConfigItem.hyperformula === 'function' || typeof engineConfigItem === 'function') {\n    return registerEngine(\n      engineConfigItem.hyperformula ?? engineConfigItem,\n      hotSettings,\n      hotInstance);\n\n    // `engine` is the engine instance\n  } else if (typeof engineConfigItem === 'object' && isUndefined(engineConfigItem.hyperformula)) {\n    const engineRelationship = getEngineRelationshipRegistry();\n    const sharedEngineUsage = getSharedEngineUsageRegistry().get(engineConfigItem);\n\n    if (!engineRelationship.has(engineConfigItem)) {\n      engineRelationship.set(engineConfigItem, []);\n    }\n\n    engineRelationship.get(engineConfigItem).push(hotInstance);\n\n    if (sharedEngineUsage) {\n      sharedEngineUsage.push(hotInstance.guid);\n    }\n\n    if (!engineConfigItem.getConfig().licenseKey) {\n      engineConfigItem.updateConfig({\n        licenseKey: DEFAULT_LICENSE_KEY\n      });\n    }\n\n    if (engineConfigItem.getConfig().leapYear1900 !== DEFAULT_SETTINGS.leapYear1900\n      || isObjectEqual(engineConfigItem.getConfig().nullDate, DEFAULT_SETTINGS.nullDate) === false) {\n      warn(toSingleLine`If you use HyperFormula with Handsontable, keep the default \\`leapYear1900\\` and \\`nullDate\\` \n      settings. Otherwise, HyperFormula's dates may not sync correctly with Handsontable's dates.`);\n    }\n\n    return engineConfigItem;\n  }\n\n  return null;\n}\n\n/**\n * Registers the engine in the global register and attaches the needed event listeners.\n *\n * @param {Function} engineClass The engine class.\n * @param {object} hotSettings The Handsontable settings.\n * @param {Handsontable} hotInstance Handsontable instance.\n * @returns {object} Returns the engine instance.\n */\nexport function registerEngine(engineClass, hotSettings, hotInstance) {\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n  const engineSettings = getEngineSettingsWithDefaultsAndOverrides(hotSettings);\n  const engineRegistry = getEngineRelationshipRegistry();\n  const sharedEngineRegistry = getSharedEngineUsageRegistry();\n\n  registerCustomFunctions(engineClass, pluginSettings.functions);\n\n  registerLanguage(engineClass, pluginSettings.language);\n\n  // Create instance\n  const engineInstance = engineClass.buildEmpty(engineSettings);\n\n  // Add it to global registry\n  engineRegistry.set(engineInstance, [hotInstance]);\n  sharedEngineRegistry.set(engineInstance, [hotInstance.guid]);\n\n  registerNamedExpressions(engineInstance, pluginSettings.namedExpressions);\n\n  // Add hooks needed for cross-referencing sheets\n  engineInstance.on('sheetAdded', () => {\n    engineInstance.rebuildAndRecalculate();\n  });\n\n  engineInstance.on('sheetRemoved', () => {\n    engineInstance.rebuildAndRecalculate();\n  });\n\n  return engineInstance;\n}\n\n/**\n * Returns the list of the Handsontable instances linked to the specific engine instance.\n *\n * @param {object} engine The engine instance.\n * @returns {Map<number, Handsontable>} Returns Map with Handsontable instances.\n */\nexport function getRegisteredHotInstances(engine) {\n  const engineRegistry = getEngineRelationshipRegistry();\n  const hotInstances = engineRegistry.size === 0 ? [] : Array.from(engineRegistry.get(engine) ?? []);\n\n  return new Map(hotInstances.map(hot => [hot.getPlugin('formulas').sheetId, hot]));\n}\n\n/**\n * Removes the HOT instance from the global register's engine usage array, and if there are no HOT instances left,\n * unregisters the engine itself.\n *\n * @param {object} engine The engine instance.\n * @param {string} hotInstance The Handsontable instance.\n */\nexport function unregisterEngine(engine, hotInstance) {\n  if (engine) {\n    const engineRegistry = getEngineRelationshipRegistry();\n    const engineHotRelationship = engineRegistry.get(engine);\n    const sharedEngineRegistry = getSharedEngineUsageRegistry();\n    const sharedEngineUsage = sharedEngineRegistry.get(engine);\n\n    if (engineHotRelationship && engineHotRelationship.includes(hotInstance)) {\n      engineHotRelationship.splice(engineHotRelationship.indexOf(hotInstance), 1);\n\n      if (engineHotRelationship.length === 0) {\n        engineRegistry.delete(engine);\n      }\n    }\n\n    if (sharedEngineUsage && sharedEngineUsage.includes(hotInstance.guid)) {\n      sharedEngineUsage.splice(sharedEngineUsage.indexOf(hotInstance.guid), 1);\n\n      if (sharedEngineUsage.length === 0) {\n        sharedEngineRegistry.delete(engine);\n        engine.destroy();\n      }\n    }\n  }\n}\n\n/**\n * Registers the custom functions for the engine.\n *\n * @param {Function} engineClass The engine class.\n * @param {Array} customFunctions The custom functions array.\n */\nexport function registerCustomFunctions(engineClass, customFunctions) {\n  if (customFunctions) {\n    customFunctions.forEach((func) => {\n      const {\n        name,\n        plugin,\n        translations\n      } = func;\n\n      try {\n        engineClass.registerFunction(name, plugin, translations);\n\n      } catch (e) {\n        warn(e.message);\n      }\n    });\n  }\n}\n\n/**\n * Registers the provided language for the engine.\n *\n * @param {Function} engineClass The engine class.\n * @param {object} languageSetting The engine's language object.\n */\nexport function registerLanguage(engineClass, languageSetting) {\n  if (languageSetting) {\n    const {\n      langCode,\n    } = languageSetting;\n\n    try {\n      engineClass.registerLanguage(langCode, languageSetting);\n\n    } catch (e) {\n      warn(e.message);\n    }\n  }\n}\n\n/**\n * Registers the provided named expressions in the engine instance.\n *\n * @param {object} engineInstance The engine instance.\n * @param {Array} namedExpressions Array of the named expressions to be registered.\n */\nexport function registerNamedExpressions(engineInstance, namedExpressions) {\n  if (namedExpressions) {\n    engineInstance.suspendEvaluation();\n\n    namedExpressions.forEach((namedExp) => {\n      const {\n        name,\n        expression,\n        scope,\n        options\n      } = namedExp;\n\n      try {\n        engineInstance.addNamedExpression(name, expression, scope, options);\n\n      } catch (e) {\n        warn(e.message);\n      }\n    });\n\n    engineInstance.resumeEvaluation();\n  }\n}\n\n/**\n * Sets up a new sheet.\n *\n * @param {object} engineInstance The engine instance.\n * @param {string} sheetName The new sheet name.\n * @returns {*}\n */\nexport function setupSheet(engineInstance, sheetName) {\n  if (isUndefined(sheetName) || !engineInstance.doesSheetExist(sheetName)) {\n    sheetName = engineInstance.addSheet(sheetName);\n  }\n\n  return sheetName;\n}\n","import { PLUGIN_KEY } from '../formulas';\n\nexport const DEFAULT_LICENSE_KEY = 'internal-use-in-handsontable';\n\nexport const DEFAULT_SETTINGS = {\n  licenseKey: DEFAULT_LICENSE_KEY,\n\n  useArrayArithmetic: true,\n  useColumnIndex: false,\n  useStats: false,\n  evaluateNullToZero: true,\n  precisionEpsilon: 1e-13,\n  precisionRounding: 14,\n  smartRounding: true,\n  leapYear1900: false,\n  nullDate: {\n    year: 1899,\n    month: 12,\n    day: 30\n  },\n  nullYear: 30,\n  dateFormats: ['DD/MM/YYYY', 'DD/MM/YY'],\n  timeFormats: ['hh:mm', 'hh:mm:ss.sss'],\n  matchWholeCell: true,\n  useRegularExpressions: false,\n  useWildcards: true,\n  functionArgSeparator: ',',\n  thousandSeparator: '',\n  decimalSeparator: '.',\n  language: 'enGB',\n};\n\n/**\n * Gets a set of engine settings to be applied on top of the provided settings, based on user's Handsontable settings.\n *\n * @param {object} hotSettings Handsontable settings object.\n * @returns {object} Object containing the overriding options.\n */\nexport function getEngineSettingsOverrides(hotSettings) {\n  return {\n    maxColumns: hotSettings.maxColumns,\n    maxRows: hotSettings.maxRows,\n    language: hotSettings[PLUGIN_KEY]?.language?.langCode\n  };\n}\n\n/**\n * Drop `hyperformula` key from object if it exists.\n *\n * @param {object} pluginSettings Formulas plugin settings.\n * @returns {object}\n */\nfunction cleanEngineSettings(pluginSettings) {\n  return Object.keys(pluginSettings)\n    .reduce((obj, key) => {\n      if (key !== 'hyperformula') {\n        obj[key] = pluginSettings[key];\n      }\n\n      return obj;\n    }, {});\n}\n\n/**\n * Takes the default, user and overriding settings and merges them into a single object to be passed to the engine.\n *\n * The final object gets its parameters in the following order,\n * with properties attached to objects listed in the lower levels of the list overriding the\n * ones above them:\n *\n * 1. Default settings\n * 2. User settings\n * 3. Overrides.\n *\n * Meant to be used during *initialization* of the engine.\n *\n * @param {object} hotSettings The Handsontable settings.\n * @returns {object} The final engine settings.\n */\nexport function getEngineSettingsWithDefaultsAndOverrides(hotSettings) {\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n\n  const userSettings = cleanEngineSettings(\n    pluginSettings?.engine?.hyperformula ? pluginSettings.engine : {}\n  );\n\n  const overrides = getEngineSettingsOverrides(hotSettings);\n\n  return {\n    ...DEFAULT_SETTINGS,\n    ...userSettings,\n    ...overrides\n  };\n}\n\n/**\n * Get engine settings from a Handsontable settings object with overrides.\n *\n * @param {object} hotSettings Handsontable settings object.\n * @returns {object}\n */\nexport function getEngineSettingsWithOverrides(hotSettings) {\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n\n  const userSettings = cleanEngineSettings(pluginSettings?.engine?.hyperformula ? pluginSettings.engine : {});\n  const overrides = getEngineSettingsOverrides(hotSettings);\n\n  return {\n    ...userSettings,\n    ...overrides\n  };\n}\n\n/**\n * Check if the new settings are defined and are different from the ones currently used by the engine.\n *\n * @param {object} currentEngineSettings Currently used engine settings.\n * @param {object} newEngineSettings New engine settings.\n * @returns {boolean}\n */\nexport function haveEngineSettingsChanged(currentEngineSettings, newEngineSettings) {\n  return Object.keys(newEngineSettings).some((settingOption) => {\n    return newEngineSettings[settingOption] !== undefined &&\n      newEngineSettings[settingOption] !== currentEngineSettings[settingOption];\n  });\n}\n","import moment from 'moment';\n\nconst DEFAULT_DATE_FORMAT_HYPERFORMULA = 'DD/MM/YYYY';\n\n/**\n * Checks if provided formula expression is escaped.\n *\n * @param {*} expression Expression to check.\n * @returns {boolean}\n */\nexport function isEscapedFormulaExpression(expression) {\n  return typeof expression === 'string' && expression.charAt(0) === '\\'' && expression.charAt(1) === '=';\n}\n\n/**\n * Replaces escaped formula expression into valid non-unescaped string.\n *\n * @param {string} expression Expression to process.\n * @returns {string}\n */\nexport function unescapeFormulaExpression(expression) {\n  return isEscapedFormulaExpression(expression) ? expression.substr(1) : expression;\n}\n\n/**\n * Checks whether string looks like formula or not. Corresponds to {@link https://hyperformula.handsontable.com/api/globals.html#isformula|HyperFormula's implementation}.\n *\n * @param {string} value Checked value.\n * @returns {boolean}\n */\nexport function isFormula(value) {\n  return typeof value === 'string' && value.startsWith('=');\n}\n\n/**\n * Checks if provided value is a date according to cell meta.\n *\n * @param {*} value Checked value.\n * @param {string} cellType Type of a cell.\n * @returns {boolean}\n */\nexport function isDate(value, cellType) {\n  return typeof value === 'string' && cellType === 'date';\n}\n\n/**\n * Checks if provided date is a valid date according to cell date format.\n *\n * @param {*} date Checked date.\n * @param {object} dateFormat Handled format for a date.\n * @returns {boolean}\n */\nexport function isDateValid(date, dateFormat) {\n  return moment(date, dateFormat, true).isValid();\n}\n\n/**\n * Returns date formatted in HF's default format.\n *\n * @param {string} date Date formatted according to Handsontable cell date format.\n * @param {string} dateFormat The format used for the date passed.\n * @returns {string}\n */\nexport function getDateInHfFormat(date, dateFormat) {\n  return moment(date, dateFormat, true).format(DEFAULT_DATE_FORMAT_HYPERFORMULA);\n}\n\n/**\n * Returns date formatted in HF's default format.\n *\n * @param {string} date Date formatted according to Handsontable cell date format.\n * @param {string} dateFormat The format used for the date passed.\n * @returns {string}\n */\nexport function getDateInHotFormat(date, dateFormat) {\n  return moment(date, DEFAULT_DATE_FORMAT_HYPERFORMULA, true).format(dateFormat);\n}\n\n/**\n * Converts Excel-like dates into strings and formats them based on the handled date format.\n *\n * @param {number} numericDate An integer representing numbers of days from January 1, 1900.\n * @param {string} dateFormat The format used for parsing an output.\n * @returns {string}\n */\nexport function getDateFromExcelDate(numericDate, dateFormat) {\n  // To replicate the behavior from the HyperFormula. UTC starts from 31/12/1899, while HF from 30/12/1899.\n  const dateOffset = -1;\n\n  // Based on solution from: https://stackoverflow.com/a/67130235.\n  const dateForFormatting = new Date(Date.UTC(0, 0, numericDate + dateOffset));\n\n  return moment(dateForFormatting).format(dateFormat);\n}\n","import AxisSyncer from './axisSyncer';\n\n/**\n * @private\n * @class IndexSyncer\n * @description\n *\n * Indexes synchronizer responsible for providing logic for syncing actions done on indexes for HOT to actions performed\n * on HF's.\n *\n */\nclass IndexSyncer {\n  /**\n   * Indexes synchronizer for the axis of the rows.\n   *\n   * @private\n   * @type {AxisSyncer}\n   */\n  #rowIndexSyncer;\n  /**\n   * Indexes synchronizer for the axis of the columns.\n   *\n   * @private\n   * @type {AxisSyncer}\n   */\n  #columnIndexSyncer;\n  /**\n   * Method which will postpone execution of some action (needed when synchronization endpoint isn't setup yet).\n   *\n   * @private\n   * @type {Function}\n   */\n  #postponeAction;\n  /**\n   * Flag informing whether undo is already performed (we don't perform synchronization in such case).\n   *\n   * @private\n   * @type {boolean}\n   */\n  #isPerformingUndo = false;\n  /**\n   * Flag informing whether redo is already performed (we don't perform synchronization in such case).\n   *\n   * @private\n   * @type {boolean}\n   */\n  #isPerformingRedo = false;\n  /**\n   * The HF's engine instance which will be synced.\n   *\n   * @private\n   * @type {HyperFormula|null}\n   */\n  #engine = null;\n  /**\n   * HyperFormula's sheet name.\n   *\n   * @private\n   * @type {string|null}\n   */\n  #sheetId = null;\n\n  constructor(rowIndexMapper, columnIndexMapper, postponeAction) {\n    this.#rowIndexSyncer = new AxisSyncer('row', rowIndexMapper, this);\n    this.#columnIndexSyncer = new AxisSyncer('column', columnIndexMapper, this);\n    this.#postponeAction = postponeAction;\n  }\n\n  /**\n   * Gets index synchronizer for a particular axis.\n   *\n   * @param {'row'|'column'} indexType Type of indexes.\n   * @returns {AxisSyncer}\n   */\n  getForAxis(indexType) {\n    if (indexType === 'row') {\n      return this.#rowIndexSyncer;\n    }\n\n    return this.#columnIndexSyncer;\n  }\n\n  /**\n   * Sets flag informing whether an undo action is already performed (we don't execute synchronization in such case).\n   *\n   * @param {boolean} flagValue Boolean value for the flag.\n   */\n  setPerformUndo(flagValue) {\n    this.#isPerformingUndo = flagValue;\n  }\n\n  /**\n   * Sets flag informing whether a redo action is already performed (we don't execute synchronization in such case).\n   *\n   * @param {boolean} flagValue Boolean value for the flag.\n   */\n  setPerformRedo(flagValue) {\n    this.#isPerformingRedo = flagValue;\n  }\n\n  /**\n   * Gets information whether redo or undo action is already performed (we don't execute synchronization in such case).\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isPerformingUndoRedo() {\n    return this.#isPerformingUndo || this.#isPerformingRedo;\n  }\n\n  /**\n   * Gets HyperFormula's sheet id.\n   *\n   * @returns {string|null}\n   */\n  getSheetId() {\n    return this.#sheetId;\n  }\n\n  /**\n   * Gets engine instance that will be used for handled instance of Handsontable.\n   *\n   * @type {HyperFormula|null}\n   */\n  getEngine() {\n    return this.#engine;\n  }\n\n  /**\n   * Gets method which will postpone execution of some action (needed when synchronization endpoint isn't setup yet).\n   *\n   * @returns {Function}\n   */\n  getPostponeAction() {\n    return this.#postponeAction;\n  }\n\n  /**\n   * Setups a synchronization endpoint.\n   *\n   * @param {HyperFormula|null} engine The HF's engine instance which will be synced.\n   * @param {string|null} sheetId HyperFormula's sheet name.\n   */\n  setupSyncEndpoint(engine, sheetId) {\n    this.#engine = engine;\n    this.#sheetId = sheetId;\n\n    this.#rowIndexSyncer.init();\n    this.#columnIndexSyncer.init();\n  }\n}\n\nexport default IndexSyncer;\n","import { toUpperCaseFirst } from '../../../helpers/string';\nimport { getMoves } from '../../../helpers/moves';\n\n/**\n * @private\n * @class IndexSyncer\n * @description\n *\n * Indexes synchronizer responsible for providing logic for particular axis. It respects an idea to represent trimmed\n * elements in HF's engine to perform formulas calculations on them. It also provides method for translation from visual\n * row/column indexes to HF's row/column indexes.\n */\nclass AxisSyncer {\n  /**\n   * The axis for which the actions are performed.\n   *\n   * @private\n   * @type {'row'|'column'}\n   */\n  #axis;\n  /**\n   * Reference to index mapper.\n   *\n   * @private\n   * @type {IndexMapper}\n   */\n  #indexMapper;\n  /**\n   * The index synchronizer for both axis (is storing some more general information).\n   *\n   * @private\n   * @type {IndexSyncer}\n   */\n  #indexSyncer;\n  /**\n   * Sequence of physical indexes stored for watching changes and calculating some transformations.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  #indexesSequence = [];\n  /**\n   * List of moved HF indexes, stored before performing move on HOT to calculate transformation needed on HF's engine.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  #movedIndexes = [];\n  /**\n   * Final HF's place where to move indexes, stored before performing move on HOT to calculate transformation needed on HF's engine.\n   *\n   * @private\n   * @type {number|undefined}\n   */\n  #finalIndex;\n  /**\n   * List of removed HF indexes, stored before performing removal on HOT to calculate transformation needed on HF's engine.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  #removedIndexes = [];\n\n  constructor(axis, indexMapper, indexSyncer) {\n    this.#axis = axis;\n    this.#indexMapper = indexMapper;\n    this.#indexSyncer = indexSyncer;\n  }\n\n  /**\n   * Sets removed HF indexes (it should be done right before performing move on HOT).\n   *\n   * @param {Array<number>} removedIndexes List of removed physical indexes.\n   * @returns {Array<number>} List of removed visual indexes.\n   */\n  setRemovedHfIndexes(removedIndexes) {\n    this.#removedIndexes = removedIndexes.map((physicalIndex) => {\n      const visualIndex = this.#indexMapper.getVisualFromPhysicalIndex(physicalIndex);\n\n      return this.getHfIndexFromVisualIndex(visualIndex);\n    });\n\n    return this.#removedIndexes;\n  }\n\n  /**\n   * Gets removed HF indexes (right before performing removal on HOT).\n   *\n   * @returns {Array<number>} List of removed HF indexes.\n   */\n  getRemovedHfIndexes() {\n    return this.#removedIndexes;\n  }\n\n  /**\n   * Gets corresponding HyperFormula index for particular visual index. It's respecting the idea that HF's engine\n   * is fed also with trimmed indexes (business requirements for formula result calculation also for trimmed elements).\n   *\n   * @param {number} visualIndex Visual index.\n   * @returns {number}\n   */\n  getHfIndexFromVisualIndex(visualIndex) {\n    const indexesSequence = this.#indexMapper.getIndexesSequence();\n    const notTrimmedIndexes = this.#indexMapper.getNotTrimmedIndexes();\n\n    return indexesSequence.indexOf(notTrimmedIndexes[visualIndex]);\n  }\n\n  /**\n   * Synchronizes moves done on HOT to HF engine (based on previously calculated positions).\n   *\n   * @private\n   * @param {Array<{from: number, to: number}>} moves Calculated HF's move positions.\n   */\n  syncMoves(moves) {\n    const NUMBER_OF_MOVED_INDEXES = 1;\n    const SYNC_MOVE_METHOD_NAME = `move${toUpperCaseFirst(this.#axis)}s`;\n\n    this.#indexSyncer.getEngine().batch(() => {\n      moves.forEach((move) => {\n        const moveToTheSamePosition = move.from !== move.to;\n        // Moving from left to right (or top to bottom) to a line (drop index) right after already moved element.\n        const anotherMoveWithoutEffect = move.from + 1 !== move.to;\n\n        if (moveToTheSamePosition && anotherMoveWithoutEffect) {\n          this.#indexSyncer.getEngine()[SYNC_MOVE_METHOD_NAME](this.#indexSyncer.getSheetId(), move.from,\n            NUMBER_OF_MOVED_INDEXES, move.to);\n        }\n      });\n    });\n  }\n\n  /**\n   * Stores information about performed HOT moves for purpose of calculating where to move HF elements.\n   *\n   * @param {Array<number>} movedVisualIndexes Sequence of moved visual indexes for certain axis.\n   * @param {number} visualFinalIndex Final visual place where to move HOT indexes.\n   * @param {boolean} movePossible Indicates if it's possible to move HOT indexes to the desired position.\n   */\n  storeMovesInformation(movedVisualIndexes, visualFinalIndex, movePossible) {\n    if (movePossible === false) {\n      return;\n    }\n\n    this.#movedIndexes = movedVisualIndexes.map(index => this.getHfIndexFromVisualIndex(index));\n    this.#finalIndex = this.getHfIndexFromVisualIndex(visualFinalIndex);\n  }\n\n  /**\n   * Calculating where to move HF elements and performing already calculated moves.\n   *\n   * @param {boolean} movePossible Indicates if it was possible to move HOT indexes to the desired position.\n   * @param {boolean} orderChanged Indicates if order of HOT indexes was changed by move.\n   */\n  calculateAndSyncMoves(movePossible, orderChanged) {\n    if (this.#indexSyncer.isPerformingUndoRedo()) {\n      return;\n    }\n\n    if (movePossible === false || orderChanged === false) {\n      return;\n    }\n\n    const calculatedMoves = getMoves(this.#movedIndexes, this.#finalIndex, this.#indexMapper.getNumberOfIndexes());\n\n    if (this.#indexSyncer.getSheetId() === null) {\n      this.#indexSyncer.getPostponeAction(() => this.syncMoves(calculatedMoves));\n\n    } else {\n      this.syncMoves(calculatedMoves);\n    }\n  }\n\n  /**\n   * Gets callback for hook triggered after performing change of indexes order.\n   *\n   * @returns {Function}\n   */\n  getIndexesChangeSyncMethod() {\n    const SYNC_ORDER_CHANGE_METHOD_NAME = `set${toUpperCaseFirst(this.#axis)}Order`;\n\n    return (source) => {\n      if (this.#indexSyncer.isPerformingUndoRedo()) {\n        return;\n      }\n\n      const newSequence = this.#indexMapper.getIndexesSequence();\n\n      if (source === 'update' && newSequence.length > 0) {\n        const relativeTransformation = this.#indexesSequence.map(index => newSequence.indexOf(index));\n        const sheetDimensions = this.#indexSyncer.getEngine().getSheetDimensions(this.#indexSyncer.getSheetId());\n        let sizeForAxis;\n\n        if (this.#axis === 'row') {\n          sizeForAxis = sheetDimensions.height;\n\n        } else {\n          sizeForAxis = sheetDimensions.width;\n        }\n\n        const numberOfReorganisedIndexes = relativeTransformation.length;\n\n        // Sheet dimension can be changed by HF's engine for purpose of calculating values. It extends dependency\n        // graph to calculate values outside of a defined dataset. This part of code could be removed after resolving\n        // feature request from HF issue board (handsontable/hyperformula#1179).\n        for (let i = numberOfReorganisedIndexes; i < sizeForAxis; i += 1) {\n          relativeTransformation.push(i);\n        }\n\n        this.#indexSyncer.getEngine()[SYNC_ORDER_CHANGE_METHOD_NAME](this.#indexSyncer.getSheetId(),\n          relativeTransformation);\n      }\n\n      this.#indexesSequence = newSequence;\n    };\n  }\n\n  /**\n   * Initialize the AxisSyncer.\n   */\n  init() {\n    this.#indexesSequence = this.#indexMapper.getIndexesSequence();\n  }\n}\n\nexport default AxisSyncer;\n","/**\n * Gets first position where to move element (respecting the fact that some element will be sooner or later\n * taken out of the dataset in order to move them).\n *\n * @param {Array<number>} movedIndexes Sequence of moved indexes for certain axis.\n * @param {number} finalIndex Final place where to move rows.\n * @param {number} numberOfIndexes Number of indexes in a dataset.\n * @returns {number} Index informing where to move the first element.\n */\nfunction getMoveLine(movedIndexes, finalIndex, numberOfIndexes) {\n  const notMovedElements = Array.from(Array(numberOfIndexes).keys())\n    .filter(index => movedIndexes.includes(index) === false);\n\n  if (finalIndex === 0) {\n    return notMovedElements[finalIndex] ?? 0; // Moving before the first dataset's element.\n  }\n\n  return notMovedElements[finalIndex - 1] + 1; // Moving before another element.\n}\n\n/**\n * Gets initially calculated move positions.\n *\n * @param {Array<number>} movedIndexes Sequence of moved indexes for certain axis.\n * @param {number} moveLine Final place where to move rows.\n * @returns {Array<{from: number, to: number}>} Initially calculated move positions.\n */\nfunction getInitiallyCalculatedMoves(movedIndexes, moveLine) {\n  const moves = [];\n\n  movedIndexes.forEach((movedIndex) => {\n    const move = {\n      from: movedIndex,\n      to: moveLine,\n    };\n\n    moves.forEach((previouslyMovedIndex) => {\n      const isMovingFromEndToStart = previouslyMovedIndex.from > previouslyMovedIndex.to;\n      const isMovingElementBefore = previouslyMovedIndex.to <= move.from;\n      const isMovingAfterElement = previouslyMovedIndex.from > move.from;\n\n      if (isMovingAfterElement && isMovingElementBefore && isMovingFromEndToStart) {\n        move.from += 1;\n      }\n    });\n\n    // Moved element from right to left (or bottom to top).\n    if (move.from >= moveLine) {\n      moveLine += 1;\n    }\n\n    moves.push(move);\n  });\n\n  return moves;\n}\n\n/**\n * Gets finally calculated move positions (after adjusting).\n *\n * @param {Array<{from: number, to: number}>} moves Initially calculated move positions.\n * @returns {Array<{from: number, to: number}>} Finally calculated move positions (after adjusting).\n */\nfunction adjustedCalculatedMoves(moves) {\n  moves.forEach((move, index) => {\n    const nextMoved = moves.slice(index + 1);\n\n    nextMoved.forEach((nextMovedIndex) => {\n      const isMovingFromStartToEnd = nextMovedIndex.from < nextMovedIndex.to;\n\n      if (nextMovedIndex.from > move.from && isMovingFromStartToEnd) {\n        nextMovedIndex.from -= 1;\n      }\n    });\n  });\n\n  return moves;\n}\n\n/**\n * Get list of move positions.\n *\n * @param {Array<number>} movedIndexes Sequence of moved indexes for certain axis.\n * @param {number} finalIndex Final place where to move rows.\n * @param {number} numberOfIndexes Number of indexes in a dataset.\n * @returns {Array<{from: number, to: number}>}\n */\nexport function getMoves(movedIndexes, finalIndex, numberOfIndexes) {\n  const moves = getInitiallyCalculatedMoves(movedIndexes, getMoveLine(movedIndexes, finalIndex, numberOfIndexes));\n\n  return adjustedCalculatedMoves(moves);\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  HiddenColumns,\n} from './hiddenColumns';\n","import { BasePlugin } from '../base';\nimport { addClass } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport { arrayEach, arrayMap, arrayReduce } from '../../helpers/array';\nimport { isObject } from '../../helpers/object';\nimport { isUndefined } from '../../helpers/mixed';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport Hooks from '../../pluginHooks';\nimport hideColumnItem from './contextMenuItem/hideColumn';\nimport showColumnItem from './contextMenuItem/showColumn';\nimport { HidingMap } from '../../translations';\n\nimport './hiddenColumns.scss';\n\nHooks.getSingleton().register('beforeHideColumns');\nHooks.getSingleton().register('afterHideColumns');\nHooks.getSingleton().register('beforeUnhideColumns');\nHooks.getSingleton().register('afterUnhideColumns');\n\nexport const PLUGIN_KEY = 'hiddenColumns';\nexport const PLUGIN_PRIORITY = 310;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin HiddenColumns\n * @class HiddenColumns\n *\n * @description\n * The `HiddenColumns` plugin lets you [hide specified columns](@/guides/columns/column-hiding/column-hiding.md).\n *\n * \"Hiding a column\" means that the hidden column doesn't get rendered as a DOM element.\n *\n * The `HiddenColumns` plugin doesn't modify the source data,\n * and doesn't participate in data transformation\n * (the shape of the data returned by the [`getData*()` methods](@/api/core.md#getdata) stays intact).\n *\n * You can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `columns` | No | Array | - | [Hides specified columns by default](@/guides/columns/column-hiding/column-hiding.md#step-1-specify-columns-hidden-by-default) |\n * | `indicators` | No | Boolean | `false` | [Shows UI indicators](@/guides/columns/column-hiding/column-hiding.md#step-2-show-ui-indicators) |\n * | `copyPasteEnabled` | No | Boolean | `true` | [Sets up copy/paste behavior](@/guides/columns/column-hiding/column-hiding.md#step-4-set-up-copy-and-paste-behavior) |\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   hiddenColumns: {\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     columns: [1, 2, 5]\n *   }\n * });\n *\n * // access the `HiddenColumns` plugin's instance\n * const hiddenColumnsPlugin = hot.getPlugin('hiddenColumns');\n *\n * // hide a single column\n * hiddenColumnsPlugin.hideColumn(1);\n *\n * // hide multiple columns\n * hiddenColumnsPlugin.hideColumn(1, 2, 9);\n *\n * // hide multiple columns as an array\n * hiddenColumnsPlugin.hideColumns([1, 2, 9]);\n *\n * // unhide a single column\n * hiddenColumnsPlugin.showColumn(1);\n *\n * // unhide multiple columns\n * hiddenColumnsPlugin.showColumn(1, 2, 9);\n *\n * // unhide multiple columns as an array\n * hiddenColumnsPlugin.showColumns([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   hiddenColumns={{\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     columns: [1, 2, 5]\n *   }}\n * />\n *\n * // access the `HiddenColumns` plugin's instance\n * const hot = hotRef.current.hotInstance;\n * const hiddenColumnsPlugin = hot.getPlugin('hiddenColumns');\n *\n * // hide a single column\n * hiddenColumnsPlugin.hideColumn(1);\n *\n * // hide multiple columns\n * hiddenColumnsPlugin.hideColumn(1, 2, 9);\n *\n * // hide multiple columns as an array\n * hiddenColumnsPlugin.hideColumns([1, 2, 9]);\n *\n * // unhide a single column\n * hiddenColumnsPlugin.showColumn(1);\n *\n * // unhide multiple columns\n * hiddenColumnsPlugin.showColumn(1, 2, 9);\n *\n * // unhide multiple columns as an array\n * hiddenColumnsPlugin.showColumns([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n */\nexport class HiddenColumns extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Cached plugin settings.\n   *\n   * @private\n   * @type {object}\n   */\n  #settings = {};\n  /**\n   * Map of hidden columns by the plugin.\n   *\n   * @private\n   * @type {null|HidingMap}\n   */\n  #hiddenColumnsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link HiddenColumns#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (isObject(pluginSettings)) {\n      this.#settings = pluginSettings;\n\n      if (isUndefined(pluginSettings.copyPasteEnabled)) {\n        pluginSettings.copyPasteEnabled = true;\n      }\n    }\n\n    this.#hiddenColumnsMap = new HidingMap();\n    this.#hiddenColumnsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.columnIndexMapper.registerMap(this.pluginName, this.#hiddenColumnsMap);\n\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#onAfterContextMenuDefaultOptions(...args));\n    this.addHook('afterGetCellMeta', (row, col, cellProperties) => this.#onAfterGetCellMeta(row, col, cellProperties));\n    this.addHook('modifyColWidth', (width, col) => this.#onModifyColWidth(width, col), 2);\n    this.addHook('afterGetColHeader', (...args) => this.#onAfterGetColHeader(...args));\n    this.addHook('modifyCopyableRange', ranges => this.#onModifyCopyableRange(ranges));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`hiddenColumns`](@/api/options.md#hiddencolumns)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n    this.#settings = {};\n\n    super.disablePlugin();\n    this.resetCellsMeta();\n  }\n\n  /**\n   * Shows the provided columns.\n   *\n   * @param {number[]} columns Array of visual column indexes.\n   */\n  showColumns(columns) {\n    const currentHideConfig = this.getHiddenColumns();\n    const isValidConfig = this.isValidConfig(columns);\n    let destinationHideConfig = currentHideConfig;\n    const hidingMapValues = this.#hiddenColumnsMap.getValues().slice();\n    const isAnyColumnShowed = columns.length > 0;\n\n    if (isValidConfig && isAnyColumnShowed) {\n      const physicalColumns = columns.map(visualColumn => this.hot.toPhysicalColumn(visualColumn));\n\n      // Preparing new values for hiding map.\n      arrayEach(physicalColumns, (physicalColumn) => {\n        hidingMapValues[physicalColumn] = false;\n      });\n\n      // Preparing new hiding config.\n      destinationHideConfig = arrayReduce(hidingMapValues, (hiddenIndexes, isHidden, physicalIndex) => {\n        if (isHidden) {\n          hiddenIndexes.push(this.hot.toVisualColumn(physicalIndex));\n        }\n\n        return hiddenIndexes;\n      }, []);\n    }\n\n    const continueHiding = this.hot\n      .runHooks('beforeUnhideColumns', currentHideConfig, destinationHideConfig, isValidConfig && isAnyColumnShowed);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isValidConfig && isAnyColumnShowed) {\n      this.#hiddenColumnsMap.setValues(hidingMapValues);\n    }\n\n    // @TODO Should call once per render cycle, currently fired separately in different plugins\n    this.hot.view.adjustElementsSize();\n\n    this.hot.runHooks('afterUnhideColumns', currentHideConfig, destinationHideConfig,\n      isValidConfig && isAnyColumnShowed, isValidConfig && destinationHideConfig.length < currentHideConfig.length);\n  }\n\n  /**\n   * Shows a single column.\n   *\n   * @param {...number} column Visual column index.\n   */\n  showColumn(...column) {\n    this.showColumns(column);\n  }\n\n  /**\n   * Hides the columns provided in the array.\n   *\n   * @param {number[]} columns Array of visual column indexes.\n   */\n  hideColumns(columns) {\n    const currentHideConfig = this.getHiddenColumns();\n    const isConfigValid = this.isValidConfig(columns);\n    let destinationHideConfig = currentHideConfig;\n\n    if (isConfigValid) {\n      destinationHideConfig = Array.from(new Set(currentHideConfig.concat(columns)));\n    }\n\n    const continueHiding = this.hot\n      .runHooks('beforeHideColumns', currentHideConfig, destinationHideConfig, isConfigValid);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isConfigValid) {\n      this.hot.batchExecution(() => {\n        arrayEach(columns, (visualColumn) => {\n          this.#hiddenColumnsMap.setValueAtIndex(this.hot.toPhysicalColumn(visualColumn), true);\n        });\n      }, true);\n    }\n\n    this.hot.runHooks('afterHideColumns', currentHideConfig, destinationHideConfig, isConfigValid,\n      isConfigValid && destinationHideConfig.length > currentHideConfig.length);\n  }\n\n  /**\n   * Hides a single column.\n   *\n   * @param {...number} column Visual column index.\n   */\n  hideColumn(...column) {\n    this.hideColumns(column);\n  }\n\n  /**\n   * Returns an array of visual indexes of hidden columns.\n   *\n   * @returns {number[]}\n   */\n  getHiddenColumns() {\n    return arrayMap(this.#hiddenColumnsMap.getHiddenIndexes(), (physicalColumnIndex) => {\n      return this.hot.toVisualColumn(physicalColumnIndex);\n    });\n  }\n\n  /**\n   * Checks if the provided column is hidden.\n   *\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  isHidden(column) {\n    return this.#hiddenColumnsMap.getValueAtIndex(this.hot.toPhysicalColumn(column)) || false;\n  }\n\n  /**\n   * Get if trim config is valid. Check whether all of the provided column indexes are within the bounds of the table.\n   *\n   * @param {Array} hiddenColumns List of hidden column indexes.\n   * @returns {boolean}\n   */\n  isValidConfig(hiddenColumns) {\n    const nrOfColumns = this.hot.countCols();\n\n    if (Array.isArray(hiddenColumns) && hiddenColumns.length > 0) {\n      return hiddenColumns\n        .every(visualColumn => Number.isInteger(visualColumn) && visualColumn >= 0 && visualColumn < nrOfColumns);\n    }\n\n    return false;\n  }\n\n  /**\n   * Reset all rendered cells meta.\n   *\n   * @private\n   */\n  resetCellsMeta() {\n    arrayEach(this.hot.getCellsMeta(), (meta) => {\n      if (meta) {\n        meta.skipColumnOnPaste = false;\n      }\n    });\n  }\n\n  /**\n   * Adds the additional column width for the hidden column indicators.\n   *\n   * @param {number|undefined} width Column width.\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  #onModifyColWidth(width, column) {\n    // Hook is triggered internally only for the visible columns. Conditional will be handled for the API\n    // calls of the `getColWidth` function on not visible indexes.\n    if (this.isHidden(column)) {\n      return 0;\n    }\n\n    if (this.#settings.indicators && (this.isHidden(column + 1) || this.isHidden(column - 1))) {\n\n      // Add additional space for hidden column indicator.\n      if (typeof width === 'number' && this.hot.hasColHeaders()) {\n        return width + 15;\n      }\n    }\n  }\n\n  /**\n   * Sets the copy-related cell meta.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell properties.\n   */\n  #onAfterGetCellMeta(row, column, cellProperties) {\n    if (this.#settings.copyPasteEnabled === false && this.isHidden(column)) {\n      // Cell property handled by the `Autofill` and the `CopyPaste` plugins.\n      cellProperties.skipColumnOnPaste = true;\n    }\n\n    if (this.isHidden(column - 1)) {\n      cellProperties.className = cellProperties.className || '';\n\n      if (cellProperties.className.indexOf('afterHiddenColumn') === -1) {\n        cellProperties.className += ' afterHiddenColumn';\n      }\n    } else if (cellProperties.className) {\n      const classArr = cellProperties.className.split(' ');\n\n      if (classArr.length > 0) {\n        const containAfterHiddenColumn = classArr.indexOf('afterHiddenColumn');\n\n        if (containAfterHiddenColumn > -1) {\n          classArr.splice(containAfterHiddenColumn, 1);\n        }\n\n        cellProperties.className = classArr.join(' ');\n      }\n    }\n  }\n\n  /**\n   * Modifies the copyable range, accordingly to the provided config.\n   *\n   * @param {Array} ranges An array of objects defining copyable cells.\n   * @returns {Array}\n   */\n  #onModifyCopyableRange(ranges) {\n    // Ranges shouldn't be modified when `copyPasteEnabled` option is set to `true` (by default).\n    if (this.#settings.copyPasteEnabled) {\n      return ranges;\n    }\n\n    const newRanges = [];\n\n    const pushRange = (startRow, endRow, startCol, endCol) => {\n      newRanges.push({ startRow, endRow, startCol, endCol });\n    };\n\n    arrayEach(ranges, (range) => {\n      let isHidden = true;\n      let rangeStart = 0;\n\n      rangeEach(range.startCol, range.endCol, (visualColumn) => {\n        if (this.isHidden(visualColumn)) {\n          if (!isHidden) {\n            pushRange(range.startRow, range.endRow, rangeStart, visualColumn - 1);\n          }\n\n          isHidden = true;\n\n        } else {\n          if (isHidden) {\n            rangeStart = visualColumn;\n          }\n\n          if (visualColumn === range.endCol) {\n            pushRange(range.startRow, range.endRow, rangeStart, visualColumn);\n          }\n\n          isHidden = false;\n        }\n      });\n    });\n\n    return newRanges;\n  }\n\n  /**\n   * Adds the needed classes to the headers.\n   *\n   * @param {number} column Visual column index.\n   * @param {HTMLElement} TH Header's TH element.\n   */\n  #onAfterGetColHeader(column, TH) {\n    if (!this.#settings.indicators || column < 0) {\n      return;\n    }\n\n    const classList = [];\n\n    if (column >= 1 && this.isHidden(column - 1)) {\n      classList.push('afterHiddenColumn');\n    }\n\n    if (column < this.hot.countCols() - 1 && this.isHidden(column + 1)) {\n      classList.push('beforeHiddenColumn');\n    }\n\n    addClass(TH, classList);\n  }\n\n  /**\n   * Add Show-hide columns to context menu.\n   *\n   * @param {object} options An array of objects containing information about the pre-defined Context Menu items.\n   */\n  #onAfterContextMenuDefaultOptions(options) {\n    options.items.push(\n      {\n        name: SEPARATOR\n      },\n      hideColumnItem(this),\n      showColumnItem(this)\n    );\n  }\n\n  /**\n   * On map initialized hook callback.\n   */\n  #onMapInit() {\n    if (Array.isArray(this.#settings.columns)) {\n      this.hideColumns(this.#settings.columns);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#settings = null;\n    this.#hiddenColumnsMap = null;\n\n    super.destroy();\n  }\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenColumns} hiddenColumnsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function hideColumnItem(hiddenColumnsPlugin) {\n  return {\n    key: 'hidden_columns_hide',\n    name() {\n      const selection = this.getSelectedLast();\n      let pluralForm = 0;\n\n      if (Array.isArray(selection)) {\n        const [, fromColumn, , toColumn] = selection;\n\n        if (fromColumn - toColumn !== 0) {\n          pluralForm = 1;\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_HIDE_COLUMN, pluralForm);\n    },\n    callback() {\n      const { from, to } = this.getSelectedRangeLast();\n      const start = Math.max(Math.min(from.col, to.col), 0);\n      const end = Math.max(from.col, to.col);\n      const columnsToHide = [];\n\n      for (let visualColumn = start; visualColumn <= end; visualColumn += 1) {\n        columnsToHide.push(visualColumn);\n      }\n\n      hiddenColumnsPlugin.hideColumns(columnsToHide);\n\n      const lastHiddenColumn = columnsToHide[columnsToHide.length - 1];\n      const columnToSelect = this.columnIndexMapper.getNearestNotHiddenIndex(lastHiddenColumn, 1, true);\n\n      if (Number.isInteger(columnToSelect) && columnToSelect >= 0) {\n        this.selectColumns(columnToSelect);\n\n      } else {\n        this.deselectCell();\n      }\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    disabled: false,\n    hidden() {\n      return !(this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner());\n    }\n  };\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenColumns} hiddenColumnsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function showColumnItem(hiddenColumnsPlugin) {\n  const columns = [];\n\n  return {\n    key: 'hidden_columns_show',\n    name() {\n      const pluralForm = columns.length > 1 ? 1 : 0;\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_SHOW_COLUMN, pluralForm);\n    },\n    callback() {\n      if (columns.length === 0) {\n        return;\n      }\n\n      let startVisualColumn = columns[0];\n      let endVisualColumn = columns[columns.length - 1];\n\n      // Add to the selection one more visual column on the left.\n      startVisualColumn = this.columnIndexMapper\n        .getNearestNotHiddenIndex(startVisualColumn - 1, -1) ?? 0;\n      // Add to the selection one more visual column on the right.\n      endVisualColumn = this.columnIndexMapper\n        .getNearestNotHiddenIndex(endVisualColumn + 1, 1) ?? this.countCols() - 1;\n\n      hiddenColumnsPlugin.showColumns(columns);\n\n      // We render columns at first. It was needed for getting fixed columns.\n      // Please take a look at #6864 for broader description.\n      this.render();\n      this.view.adjustElementsSize();\n\n      const allColumnsSelected = endVisualColumn - startVisualColumn + 1 === this.countCols();\n\n      // When all headers needs to be selected then do nothing. The header selection is\n      // automatically handled by corner click.\n      if (!allColumnsSelected) {\n        this.selectColumns(startVisualColumn, endVisualColumn);\n      }\n    },\n    disabled: false,\n    hidden() {\n      const hiddenPhysicalColumns = arrayMap(hiddenColumnsPlugin.getHiddenColumns(), (visualColumnIndex) => {\n        return this.toPhysicalColumn(visualColumnIndex);\n      });\n\n      if (!(this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner()) ||\n          hiddenPhysicalColumns.length < 1) {\n        return true;\n      }\n\n      columns.length = 0;\n\n      const selectedRangeLast = this.getSelectedRangeLast();\n      const visualStartColumn = selectedRangeLast.getTopStartCorner().col;\n      const visualEndColumn = selectedRangeLast.getBottomEndCorner().col;\n      const columnIndexMapper = this.columnIndexMapper;\n      const renderableStartColumn = columnIndexMapper.getRenderableFromVisualIndex(visualStartColumn);\n      const renderableEndColumn = columnIndexMapper.getRenderableFromVisualIndex(visualEndColumn);\n      const notTrimmedColumnIndexes = columnIndexMapper.getNotTrimmedIndexes();\n      const physicalColumnIndexes = [];\n\n      if (visualStartColumn !== visualEndColumn) {\n        const visualColumnsInRange = visualEndColumn - visualStartColumn + 1;\n        const renderedColumnsInRange = renderableEndColumn - renderableStartColumn + 1;\n\n        // Collect not trimmed columns if there are some hidden columns in the selection range.\n        if (visualColumnsInRange > renderedColumnsInRange) {\n          const physicalIndexesInRange = notTrimmedColumnIndexes.slice(visualStartColumn, visualEndColumn + 1);\n\n          physicalColumnIndexes.push(...physicalIndexesInRange\n            .filter(physicalIndex => hiddenPhysicalColumns.includes(physicalIndex)));\n        }\n\n      // Handled column is the first rendered index and there are some visual indexes before it.\n      } else if (renderableStartColumn === 0 && renderableStartColumn < visualStartColumn) {\n        // not trimmed indexes -> array of mappings from visual (native array's index) to physical indexes (value).\n        physicalColumnIndexes.push(...notTrimmedColumnIndexes.slice(0, visualStartColumn)); // physical indexes\n\n      // When all columns are hidden and the context menu is triggered using top-left corner.\n      } else if (renderableStartColumn === null) {\n        // Show all hidden columns.\n        physicalColumnIndexes.push(...notTrimmedColumnIndexes.slice(0, this.countCols()));\n\n      } else {\n        const lastVisualIndex = this.countCols() - 1;\n        const lastRenderableIndex = columnIndexMapper.getRenderableFromVisualIndex(\n          columnIndexMapper.getNearestNotHiddenIndex(lastVisualIndex, -1)\n        );\n\n        // Handled column is the last rendered index and there are some visual indexes after it.\n        if (renderableEndColumn === lastRenderableIndex && lastVisualIndex > visualEndColumn) {\n          physicalColumnIndexes.push(...notTrimmedColumnIndexes.slice(visualEndColumn + 1));\n        }\n      }\n\n      arrayEach(physicalColumnIndexes, (physicalColumnIndex) => {\n        columns.push(this.toVisualColumn(physicalColumnIndex));\n      });\n\n      return columns.length === 0;\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  HiddenRows,\n} from './hiddenRows';\n","import { BasePlugin } from '../base';\nimport { addClass } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport { arrayEach, arrayMap, arrayReduce } from '../../helpers/array';\nimport { isObject } from '../../helpers/object';\nimport { isUndefined } from '../../helpers/mixed';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport Hooks from '../../pluginHooks';\nimport hideRowItem from './contextMenuItem/hideRow';\nimport showRowItem from './contextMenuItem/showRow';\nimport { HidingMap } from '../../translations';\n\nimport './hiddenRows.css';\n\nHooks.getSingleton().register('beforeHideRows');\nHooks.getSingleton().register('afterHideRows');\nHooks.getSingleton().register('beforeUnhideRows');\nHooks.getSingleton().register('afterUnhideRows');\n\nexport const PLUGIN_KEY = 'hiddenRows';\nexport const PLUGIN_PRIORITY = 320;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin HiddenRows\n * @class HiddenRows\n *\n * @description\n * The `HiddenRows` plugin lets you [hide specified rows](@/guides/rows/row-hiding/row-hiding.md).\n *\n * \"Hiding a row\" means that the hidden row doesn't get rendered as a DOM element.\n *\n * The `HiddenRows` plugin doesn't modify the source data,\n * and doesn't participate in data transformation\n * (the shape of the data returned by the [`getData*()` methods](@/api/core.md#getdata) stays intact).\n *\n * You can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `rows` | No | Array | - | [Hides specified rows by default](@/guides/rows/row-hiding/row-hiding.md#step-1-specify-rows-hidden-by-default) |\n * | `indicators` | No | Boolean | `false` | [Shows UI indicators](@/guides/rows/row-hiding/row-hiding.md#step-2-show-ui-indicators) |\n * | `copyPasteEnabled` | No | Boolean | `true` | [Sets up copy/paste behavior](@/guides/rows/row-hiding/row-hiding.md#step-4-set-up-copy-and-paste-behavior) |\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   hiddenRows: {\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     rows: [1, 2, 5]\n *   }\n * });\n *\n * // access the `HiddenRows` plugin's instance\n * const hiddenRowsPlugin = hot.getPlugin('hiddenRows');\n *\n * // hide a single row\n * hiddenRowsPlugin.hideRow(1);\n *\n * // hide multiple rows\n * hiddenRowsPlugin.hideRow(1, 2, 9);\n *\n * // hide multiple rows as an array\n * hiddenRowsPlugin.hideRows([1, 2, 9]);\n *\n * // unhide a single row\n * hiddenRowsPlugin.showRow(1);\n *\n * // unhide multiple rows\n * hiddenRowsPlugin.showRow(1, 2, 9);\n *\n * // unhide multiple rows as an array\n * hiddenRowsPlugin.showRows([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   hiddenRows={{\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     rows: [1, 2, 5]\n *   }}\n * />\n *\n * // access the `HiddenRows` plugin's instance\n * const hot = hotRef.current.hotInstance;\n * const hiddenRowsPlugin = hot.getPlugin('hiddenRows');\n *\n * // hide a single row\n * hiddenRowsPlugin.hideRow(1);\n *\n * // hide multiple rows\n * hiddenRowsPlugin.hideRow(1, 2, 9);\n *\n * // hide multiple rows as an array\n * hiddenRowsPlugin.hideRows([1, 2, 9]);\n *\n * // unhide a single row\n * hiddenRowsPlugin.showRow(1);\n *\n * // unhide multiple rows\n * hiddenRowsPlugin.showRow(1, 2, 9);\n *\n * // unhide multiple rows as an array\n * hiddenRowsPlugin.showRows([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n */\nexport class HiddenRows extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Cached settings from Handsontable settings.\n   *\n   * @private\n   * @type {object}\n   */\n  #settings = {};\n  /**\n   * Map of hidden rows by the plugin.\n   *\n   * @private\n   * @type {HidingMap|null}\n   */\n  #hiddenRowsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link HiddenRows#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (isObject(pluginSettings)) {\n      this.#settings = pluginSettings;\n\n      if (isUndefined(pluginSettings.copyPasteEnabled)) {\n        pluginSettings.copyPasteEnabled = true;\n      }\n    }\n\n    this.#hiddenRowsMap = new HidingMap();\n    this.#hiddenRowsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.rowIndexMapper.registerMap(this.pluginName, this.#hiddenRowsMap);\n\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#onAfterContextMenuDefaultOptions(...args));\n    this.addHook('afterGetCellMeta', (row, col, cellProperties) => this.#onAfterGetCellMeta(row, col, cellProperties));\n    this.addHook('modifyRowHeight', (height, row) => this.#onModifyRowHeight(height, row));\n    this.addHook('afterGetRowHeader', (...args) => this.#onAfterGetRowHeader(...args));\n    this.addHook('modifyCopyableRange', ranges => this.#onModifyCopyableRange(ranges));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`hiddenRows`](@/api/options.md#hiddenrows)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    this.#settings = {};\n\n    super.disablePlugin();\n    this.resetCellsMeta();\n  }\n\n  /**\n   * Shows the rows provided in the array.\n   *\n   * @param {number[]} rows Array of visual row indexes.\n   */\n  showRows(rows) {\n    const currentHideConfig = this.getHiddenRows();\n    const isValidConfig = this.isValidConfig(rows);\n    let destinationHideConfig = currentHideConfig;\n    const hidingMapValues = this.#hiddenRowsMap.getValues().slice();\n    const isAnyRowShowed = rows.length > 0;\n\n    if (isValidConfig && isAnyRowShowed) {\n      const physicalRows = rows.map(visualRow => this.hot.toPhysicalRow(visualRow));\n\n      // Preparing new values for hiding map.\n      arrayEach(physicalRows, (physicalRow) => {\n        hidingMapValues[physicalRow] = false;\n      });\n\n      // Preparing new hiding config.\n      destinationHideConfig = arrayReduce(hidingMapValues, (hiddenIndexes, isHidden, physicalIndex) => {\n        if (isHidden) {\n          hiddenIndexes.push(this.hot.toVisualRow(physicalIndex));\n        }\n\n        return hiddenIndexes;\n      }, []);\n    }\n\n    const continueHiding = this.hot\n      .runHooks('beforeUnhideRows', currentHideConfig, destinationHideConfig, isValidConfig && isAnyRowShowed);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isValidConfig && isAnyRowShowed) {\n      this.#hiddenRowsMap.setValues(hidingMapValues);\n    }\n\n    this.hot.runHooks('afterUnhideRows', currentHideConfig, destinationHideConfig, isValidConfig && isAnyRowShowed,\n      isValidConfig && destinationHideConfig.length < currentHideConfig.length);\n  }\n\n  /**\n   * Shows the row provided as row index (counting from 0).\n   *\n   * @param {...number} row Visual row index.\n   */\n  showRow(...row) {\n    this.showRows(row);\n  }\n\n  /**\n   * Hides the rows provided in the array.\n   *\n   * @param {number[]} rows Array of visual row indexes.\n   */\n  hideRows(rows) {\n    const currentHideConfig = this.getHiddenRows();\n    const isConfigValid = this.isValidConfig(rows);\n    let destinationHideConfig = currentHideConfig;\n\n    if (isConfigValid) {\n      destinationHideConfig = Array.from(new Set(currentHideConfig.concat(rows)));\n    }\n\n    const continueHiding = this.hot.runHooks('beforeHideRows', currentHideConfig, destinationHideConfig, isConfigValid);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isConfigValid) {\n      this.hot.batchExecution(() => {\n        arrayEach(rows, (visualRow) => {\n          this.#hiddenRowsMap.setValueAtIndex(this.hot.toPhysicalRow(visualRow), true);\n        });\n      }, true);\n    }\n\n    this.hot.runHooks('afterHideRows', currentHideConfig, destinationHideConfig, isConfigValid,\n      isConfigValid && destinationHideConfig.length > currentHideConfig.length);\n  }\n\n  /**\n   * Hides the row provided as row index (counting from 0).\n   *\n   * @param {...number} row Visual row index.\n   */\n  hideRow(...row) {\n    this.hideRows(row);\n  }\n\n  /**\n   * Returns an array of visual indexes of hidden rows.\n   *\n   * @returns {number[]}\n   */\n  getHiddenRows() {\n    return arrayMap(this.#hiddenRowsMap.getHiddenIndexes(), (physicalRowIndex) => {\n      return this.hot.toVisualRow(physicalRowIndex);\n    });\n  }\n\n  /**\n   * Checks if the provided row is hidden.\n   *\n   * @param {number} row Visual row index.\n   * @returns {boolean}\n   */\n  isHidden(row) {\n    return this.#hiddenRowsMap.getValueAtIndex(this.hot.toPhysicalRow(row)) || false;\n  }\n\n  /**\n   * Checks whether all of the provided row indexes are within the bounds of the table.\n   *\n   * @param {Array} hiddenRows List of hidden visual row indexes.\n   * @returns {boolean}\n   */\n  isValidConfig(hiddenRows) {\n    const nrOfRows = this.hot.countRows();\n\n    if (Array.isArray(hiddenRows) && hiddenRows.length > 0) {\n      return hiddenRows.every(visualRow => Number.isInteger(visualRow) && visualRow >= 0 && visualRow < nrOfRows);\n    }\n\n    return false;\n  }\n\n  /**\n   * Resets all rendered cells meta.\n   *\n   * @private\n   */\n  resetCellsMeta() {\n    arrayEach(this.hot.getCellsMeta(), (meta) => {\n      if (meta) {\n        meta.skipRowOnPaste = false;\n      }\n    });\n  }\n\n  /**\n   * Adds the additional row height for the hidden row indicators.\n   *\n   * @param {number|undefined} height Row height.\n   * @param {number} row Visual row index.\n   * @returns {number}\n   */\n  #onModifyRowHeight(height, row) {\n    // Hook is triggered internally only for the visible rows. Conditional will be handled for the API\n    // calls of the `getRowHeight` function on not visible indexes.\n    if (this.isHidden(row)) {\n      return 0;\n    }\n\n    return height;\n  }\n\n  /**\n   * Sets the copy-related cell meta.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell properties.\n   */\n  #onAfterGetCellMeta(row, column, cellProperties) {\n    if (this.#settings.copyPasteEnabled === false && this.isHidden(row)) {\n      // Cell property handled by the `Autofill` and the `CopyPaste` plugins.\n      cellProperties.skipRowOnPaste = true;\n    }\n\n    if (this.isHidden(row - 1)) {\n      cellProperties.className = cellProperties.className || '';\n\n      if (cellProperties.className.indexOf('afterHiddenRow') === -1) {\n        cellProperties.className += ' afterHiddenRow';\n      }\n    } else if (cellProperties.className) {\n      const classArr = cellProperties.className.split(' ');\n\n      if (classArr.length > 0) {\n        const containAfterHiddenRow = classArr.indexOf('afterHiddenRow');\n\n        if (containAfterHiddenRow > -1) {\n          classArr.splice(containAfterHiddenRow, 1);\n        }\n\n        cellProperties.className = classArr.join(' ');\n      }\n    }\n  }\n\n  /**\n   * Modifies the copyable range, accordingly to the provided config.\n   *\n   * @param {Array} ranges An array of objects defining copyable cells.\n   * @returns {Array}\n   */\n  #onModifyCopyableRange(ranges) {\n    // Ranges shouldn't be modified when `copyPasteEnabled` option is set to `true` (by default).\n    if (this.#settings.copyPasteEnabled) {\n      return ranges;\n    }\n\n    const newRanges = [];\n\n    const pushRange = (startRow, endRow, startCol, endCol) => {\n      newRanges.push({ startRow, endRow, startCol, endCol });\n    };\n\n    arrayEach(ranges, (range) => {\n      let isHidden = true;\n      let rangeStart = 0;\n\n      rangeEach(range.startRow, range.endRow, (visualRow) => {\n        if (this.isHidden(visualRow)) {\n          if (!isHidden) {\n            pushRange(rangeStart, visualRow - 1, range.startCol, range.endCol);\n          }\n\n          isHidden = true;\n\n        } else {\n          if (isHidden) {\n            rangeStart = visualRow;\n          }\n\n          if (visualRow === range.endRow) {\n            pushRange(rangeStart, visualRow, range.startCol, range.endCol);\n          }\n\n          isHidden = false;\n        }\n      });\n    });\n\n    return newRanges;\n  }\n\n  /**\n   * Adds the needed classes to the headers.\n   *\n   * @param {number} row Visual row index.\n   * @param {HTMLElement} TH Header's TH element.\n   */\n  #onAfterGetRowHeader(row, TH) {\n    if (!this.#settings.indicators || row < 0) {\n      return;\n    }\n\n    const classList = [];\n\n    if (row >= 1 && this.isHidden(row - 1)) {\n      classList.push('afterHiddenRow');\n    }\n\n    if (row < this.hot.countRows() - 1 && this.isHidden(row + 1)) {\n      classList.push('beforeHiddenRow');\n    }\n\n    addClass(TH, classList);\n  }\n\n  /**\n   * Add Show-hide rows to context menu.\n   *\n   * @param {object} options An array of objects containing information about the pre-defined Context Menu items.\n   */\n  #onAfterContextMenuDefaultOptions(options) {\n    options.items.push(\n      {\n        name: SEPARATOR\n      },\n      hideRowItem(this),\n      showRowItem(this)\n    );\n  }\n\n  /**\n   * On map initialized hook callback.\n   */\n  #onMapInit() {\n    if (Array.isArray(this.#settings.rows)) {\n      this.hideRows(this.#settings.rows);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#settings = null;\n    this.#hiddenRowsMap = null;\n\n    super.destroy();\n  }\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenRows} hiddenRowsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function hideRowItem(hiddenRowsPlugin) {\n  return {\n    key: 'hidden_rows_hide',\n    name() {\n      const selection = this.getSelectedLast();\n      let pluralForm = 0;\n\n      if (Array.isArray(selection)) {\n        const [fromRow, , toRow] = selection;\n\n        if (fromRow - toRow !== 0) {\n          pluralForm = 1;\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_HIDE_ROW, pluralForm);\n    },\n    callback() {\n      const { from, to } = this.getSelectedRangeLast();\n      const start = Math.max(Math.min(from.row, to.row), 0);\n      const end = Math.max(from.row, to.row);\n      const rowsToHide = [];\n\n      for (let visualRow = start; visualRow <= end; visualRow += 1) {\n        rowsToHide.push(visualRow);\n      }\n\n      hiddenRowsPlugin.hideRows(rowsToHide);\n\n      const lastHiddenRow = rowsToHide[rowsToHide.length - 1];\n      const rowToSelect = this.rowIndexMapper.getNearestNotHiddenIndex(lastHiddenRow, 1, true);\n\n      if (Number.isInteger(rowToSelect) && rowToSelect >= 0) {\n        this.selectRows(rowToSelect);\n\n      } else {\n        this.deselectCell();\n      }\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    disabled: false,\n    hidden() {\n      return !(this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner());\n    }\n  };\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenRows} hiddenRowsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function showRowItem(hiddenRowsPlugin) {\n  const rows = [];\n\n  return {\n    key: 'hidden_rows_show',\n    name() {\n      const pluralForm = rows.length > 1 ? 1 : 0;\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_SHOW_ROW, pluralForm);\n    },\n    callback() {\n      if (rows.length === 0) {\n        return;\n      }\n\n      let startVisualRow = rows[0];\n      let endVisualRow = rows[rows.length - 1];\n\n      // Add to the selection one more visual row on the top.\n      startVisualRow = this.rowIndexMapper\n        .getNearestNotHiddenIndex(startVisualRow - 1, -1) ?? 0;\n      // Add to the selection one more visual row on the bottom.\n      endVisualRow = this.rowIndexMapper\n        .getNearestNotHiddenIndex(endVisualRow + 1, 1) ?? this.countRows() - 1;\n\n      hiddenRowsPlugin.showRows(rows);\n\n      // We render rows at first. It was needed for getting fixed rows.\n      // Please take a look at #6864 for broader description.\n      this.render();\n      this.view.adjustElementsSize();\n\n      const allRowsSelected = endVisualRow - startVisualRow + 1 === this.countRows();\n\n      // When all headers needs to be selected then do nothing. The header selection is\n      // automatically handled by corner click.\n      if (!allRowsSelected) {\n        this.selectRows(startVisualRow, endVisualRow);\n      }\n    },\n    disabled: false,\n    hidden() {\n      const hiddenPhysicalRows = arrayMap(hiddenRowsPlugin.getHiddenRows(), (visualRowIndex) => {\n        return this.toPhysicalRow(visualRowIndex);\n      });\n\n      if (!(this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner()) ||\n        hiddenPhysicalRows.length < 1) {\n        return true;\n      }\n\n      rows.length = 0;\n\n      const selectedRangeLast = this.getSelectedRangeLast();\n      const visualStartRow = selectedRangeLast.getTopStartCorner().row;\n      const visualEndRow = selectedRangeLast.getBottomEndCorner().row;\n      const rowIndexMapper = this.rowIndexMapper;\n      const renderableStartRow = rowIndexMapper.getRenderableFromVisualIndex(visualStartRow);\n      const renderableEndRow = rowIndexMapper.getRenderableFromVisualIndex(visualEndRow);\n      const notTrimmedRowIndexes = rowIndexMapper.getNotTrimmedIndexes();\n      const physicalRowIndexes = [];\n\n      if (visualStartRow !== visualEndRow) {\n        const visualRowsInRange = visualEndRow - visualStartRow + 1;\n        const renderedRowsInRange = renderableEndRow - renderableStartRow + 1;\n\n        // Collect not trimmed rows if there are some hidden rows in the selection range.\n        if (visualRowsInRange > renderedRowsInRange) {\n          const physicalIndexesInRange = notTrimmedRowIndexes.slice(visualStartRow, visualEndRow + 1);\n\n          physicalRowIndexes.push(\n            ...physicalIndexesInRange.filter(physicalIndex => hiddenPhysicalRows.includes(physicalIndex))\n          );\n        }\n\n        // Handled row is the first rendered index and there are some visual indexes before it.\n      } else if (renderableStartRow === 0 && renderableStartRow < visualStartRow) {\n        // not trimmed indexes -> array of mappings from visual (native array's index) to physical indexes (value).\n        physicalRowIndexes.push(...notTrimmedRowIndexes.slice(0, visualStartRow)); // physical indexes\n\n        // When all rows are hidden and the context menu is triggered using top-left corner.\n      } else if (renderableStartRow === null) {\n        // Show all hidden rows.\n        physicalRowIndexes.push(...notTrimmedRowIndexes.slice(0, this.countRows()));\n\n      } else {\n        const lastVisualIndex = this.countRows() - 1;\n        const lastRenderableIndex = rowIndexMapper.getRenderableFromVisualIndex(\n          rowIndexMapper.getNearestNotHiddenIndex(lastVisualIndex, -1)\n        );\n\n        // Handled row is the last rendered index and there are some visual indexes after it.\n        if (renderableEndRow === lastRenderableIndex && lastVisualIndex > visualEndRow) {\n          physicalRowIndexes.push(...notTrimmedRowIndexes.slice(visualEndRow + 1));\n        }\n      }\n\n      arrayEach(physicalRowIndexes, (physicalRowIndex) => {\n        rows.push(this.toVisualRow(physicalRowIndex));\n      });\n\n      return rows.length === 0;\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualColumnFreeze,\n} from './manualColumnFreeze';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport freezeColumnItem from './contextMenuItem/freezeColumn';\nimport unfreezeColumnItem from './contextMenuItem/unfreezeColumn';\n\nimport './manualColumnFreeze.css';\n\nHooks.getSingleton().register('beforeColumnFreeze');\nHooks.getSingleton().register('afterColumnFreeze');\nHooks.getSingleton().register('beforeColumnUnfreeze');\nHooks.getSingleton().register('afterColumnUnfreeze');\n\nexport const PLUGIN_KEY = 'manualColumnFreeze';\nexport const PLUGIN_PRIORITY = 110;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualColumnFreeze\n * @class ManualColumnFreeze\n *\n * @description\n * This plugin allows to manually \"freeze\" and \"unfreeze\" a column using an entry in the Context Menu or using API.\n * You can turn it on by setting a {@link Options#manualColumnFreeze} property to `true`.\n *\n * @example\n * ```js\n * // Enables the plugin\n * manualColumnFreeze: true,\n * ```\n */\nexport class ManualColumnFreeze extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Determines when the moving operation is allowed.\n   *\n   * @type {boolean}\n   */\n  #afterFirstUse = false;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualColumnFreeze#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.#addContextMenuEntry(options));\n    this.addHook('beforeColumnMove', (columns, finalIndex) => this.#onBeforeColumnMove(columns, finalIndex));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#afterFirstUse = false;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualColumnFreeze`](@/api/options.md#manualcolumnfreeze)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Freezes the specified column (adds it to fixed columns).\n   *\n   * `freezeColumn()` doesn't re-render the table,\n   * so you need to call the `render()` method afterward.\n   *\n   * @param {number} column Visual column index.\n   */\n  freezeColumn(column) {\n    const settings = this.hot.getSettings();\n    // columns are already fixed (frozen)\n    const freezePerformed = settings.fixedColumnsStart < this.hot.countCols()\n      && column > settings.fixedColumnsStart - 1;\n\n    if (!this.#afterFirstUse) {\n      this.#afterFirstUse = true;\n    }\n\n    const beforeColumnFreezeHook = this.hot.runHooks('beforeColumnFreeze', column, freezePerformed);\n\n    if (beforeColumnFreezeHook === false) {\n      return;\n    }\n\n    if (freezePerformed) {\n      this.hot.columnIndexMapper.moveIndexes(column, settings.fixedColumnsStart);\n\n      // Since 12.0.0, the \"fixedColumnsLeft\" is replaced with the \"fixedColumnsStart\" option.\n      // However, keeping the old name still in effect. When both option names are used together,\n      // the error is thrown. To prevent that, the plugin needs to modify the original option key\n      // to bypass the validation.\n      settings._fixedColumnsStart += 1;\n    }\n\n    this.hot.runHooks('afterColumnFreeze', column, freezePerformed);\n  }\n\n  /**\n   * Unfreezes the given column (remove it from fixed columns and bring to it's previous position).\n   *\n   * @param {number} column Visual column index.\n   */\n  unfreezeColumn(column) {\n    const settings = this.hot.getSettings();\n    // columns are not fixed (not frozen)\n    const unfreezePerformed = settings.fixedColumnsStart > 0 && (column <= settings.fixedColumnsStart - 1);\n\n    if (!this.#afterFirstUse) {\n      this.#afterFirstUse = true;\n    }\n\n    const beforeColumnUnfreezeHook = this.hot.runHooks('beforeColumnUnfreeze', column, unfreezePerformed);\n\n    if (beforeColumnUnfreezeHook === false) {\n      return;\n    }\n\n    if (unfreezePerformed) {\n      // Since 12.0.0, the \"fixedColumnsLeft\" is replaced with the \"fixedColumnsStart\" option.\n      // However, keeping the old name still in effect. When both option names are used together,\n      // the error is thrown. To prevent that, the plugin needs to modify the original option key\n      // to bypass the validation.\n      settings._fixedColumnsStart -= 1;\n\n      this.hot.columnIndexMapper.moveIndexes(column, settings.fixedColumnsStart);\n    }\n\n    this.hot.runHooks('afterColumnUnfreeze', column, unfreezePerformed);\n  }\n\n  /**\n   * Adds the manualColumnFreeze context menu entries.\n   *\n   * @private\n   * @param {object} options Context menu options.\n   */\n  #addContextMenuEntry(options) {\n    options.items.push(\n      { name: '---------' },\n      freezeColumnItem(this),\n      unfreezeColumnItem(this)\n    );\n  }\n\n  /**\n   * Prevents moving the columns from/to fixed area.\n   *\n   * @private\n   * @param {Array} columns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * @returns {boolean|undefined}\n   */\n  #onBeforeColumnMove(columns, finalIndex) {\n    if (this.#afterFirstUse) {\n      const freezeLine = this.hot.getSettings().fixedColumnsStart;\n\n      // Moving any column before the \"freeze line\" isn't possible.\n      if (finalIndex < freezeLine) {\n        return false;\n      }\n\n      // Moving frozen column isn't possible.\n      if (columns.some(column => column < freezeLine)) {\n        return false;\n      }\n    }\n  }\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {ManualColumnFreeze} manualColumnFreezePlugin The plugin instance.\n * @returns {object}\n */\nexport default function freezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'freeze_column',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_FREEZE_COLUMN);\n    },\n    callback(key, selected) {\n      const [{ start: { col: selectedColumn } }] = selected;\n\n      manualColumnFreezePlugin.freezeColumn(selectedColumn);\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    hidden() {\n      const selection = this.getSelectedRange();\n      let hide = false;\n\n      if (selection === undefined) {\n        hide = true;\n\n      } else if (selection.length > 1) {\n        hide = true;\n\n      } else if ((selection[0].from.col !== selection[0].to.col) ||\n                 (selection[0].from.col <= this.getSettings().fixedColumnsStart - 1)) {\n        hide = true;\n      }\n\n      return hide;\n    },\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {ManualColumnFreeze} manualColumnFreezePlugin The plugin instance.\n * @returns {object}\n */\nexport default function unfreezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'unfreeze_column',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN);\n    },\n    callback(key, selected) {\n      const [{ start: { col: selectedColumn } }] = selected;\n\n      manualColumnFreezePlugin.unfreezeColumn(selectedColumn);\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    hidden() {\n      const selection = this.getSelectedRange();\n      let hide = false;\n\n      if (selection === undefined) {\n        hide = true;\n\n      } else if (selection.length > 1) {\n        hide = true;\n\n      } else if ((selection[0].from.col !== selection[0].to.col) ||\n                  selection[0].from.col >= this.getSettings().fixedColumnsStart) {\n        hide = true;\n      }\n\n      return hide;\n    },\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualColumnMove,\n} from './manualColumnMove';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { arrayReduce } from '../../helpers/array';\nimport { addClass, removeClass, offset, hasClass, outerWidth } from '../../helpers/dom/element';\nimport { offsetRelativeTo } from '../../helpers/dom/event';\nimport { rangeEach } from '../../helpers/number';\nimport BacklightUI from './ui/backlight';\nimport GuidelineUI from './ui/guideline';\n\nimport './manualColumnMove.css';\n\nHooks.getSingleton().register('beforeColumnMove');\nHooks.getSingleton().register('afterColumnMove');\n\nexport const PLUGIN_KEY = 'manualColumnMove';\nexport const PLUGIN_PRIORITY = 120;\nconst CSS_PLUGIN = 'ht__manualColumnMove';\nconst CSS_SHOW_UI = 'show-ui';\nconst CSS_ON_MOVING = 'on-moving--columns';\nconst CSS_AFTER_SELECTION = 'after-selection--columns';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualColumnMove\n * @class ManualColumnMove\n *\n * @description\n * This plugin allows to change columns order. To make columns order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - `moveColumn` - move single column to the new position.\n * - `moveColumns` - move many columns (as an array of indexes) to the new position.\n * - `dragColumn` - drag single column to the new position.\n * - `dragColumns` - drag many columns (as an array of indexes) to the new position.\n *\n * [Documentation](@/guides/columns/column-moving/column-moving.md) explain differences between drag and move actions.\n * Please keep in mind that if you want apply visual changes,\n * you have to call manually the `render` method on the instance of Handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected columns.\n * - guideline - line which shows where columns has been moved.\n *\n * @class ManualColumnMove\n * @plugin ManualColumnMove\n */\nexport class ManualColumnMove extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Backlight UI object.\n   *\n   * @type {object}\n   */\n  #backlight = new BacklightUI(this.hot);\n  /**\n   * Guideline UI object.\n   *\n   * @type {object}\n   */\n  #guideline = new GuidelineUI(this.hot);\n  /**\n   * @type {number[]}\n   */\n  #columnsToMove = [];\n  /**\n   * @type {number}\n   */\n  #countCols = 0;\n  /**\n   * @type {boolean}\n   */\n  #pressed = false;\n  /**\n   * @type {object}\n   */\n  #target = {};\n  /**\n   * @type {number}\n   */\n  #cachedDropIndex;\n  /**\n   * @type {number}\n   */\n  #hoveredColumn;\n  /**\n   * @type {number}\n   */\n  #rootElementOffset;\n  /**\n   * @type {boolean}\n   */\n  #hasRowHeaders;\n  /**\n   * @type {number}\n   */\n  #fixedColumnsStart;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualColumnMove#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeOnCellMouseOver', (...args) => this.#onBeforeOnCellMouseOver(...args));\n    this.addHook('afterScrollVertically', () => this.#onAfterScrollVertically());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    this.buildPluginUI();\n    this.registerEvents();\n\n    // TODO: move adding plugin classname to BasePlugin.\n    addClass(this.hot.rootElement, CSS_PLUGIN);\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualColumnMove`](@/api/options.md#manualcolumnmove)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.moveBySettingsOrLoad();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    removeClass(this.hot.rootElement, CSS_PLUGIN);\n\n    this.unregisterEvents();\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Moves a single column.\n   *\n   * @param {number} column Visual column index to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  moveColumn(column, finalIndex) {\n    return this.moveColumns([column], finalIndex);\n  }\n\n  /**\n   * Moves a multiple columns.\n   *\n   * @param {Array} columns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  moveColumns(columns, finalIndex) {\n    const dropIndex = this.#cachedDropIndex;\n    const movePossible = this.isMovePossible(columns, finalIndex);\n    const beforeMoveHook = this.hot.runHooks('beforeColumnMove', columns, finalIndex, dropIndex, movePossible);\n\n    this.#cachedDropIndex = undefined;\n\n    if (beforeMoveHook === false) {\n      return;\n    }\n\n    if (movePossible) {\n      this.hot.columnIndexMapper.moveIndexes(columns, finalIndex);\n    }\n\n    const movePerformed = movePossible && this.isColumnOrderChanged(columns, finalIndex);\n\n    this.hot.runHooks('afterColumnMove', columns, finalIndex, dropIndex, movePossible, movePerformed);\n\n    return movePerformed;\n  }\n\n  /**\n   * Drag a single column to drop index position.\n   *\n   * @param {number} column Visual column index to be dragged.\n   * @param {number} dropIndex Visual column index, being a drop index for the moved columns. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  dragColumn(column, dropIndex) {\n    return this.dragColumns([column], dropIndex);\n  }\n\n  /**\n   * Drag multiple columns to drop index position.\n   *\n   * @param {Array} columns Array of visual column indexes to be dragged.\n   * @param {number} dropIndex Visual column index, being a drop index for the moved columns. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  dragColumns(columns, dropIndex) {\n    const finalIndex = this.countFinalIndex(columns, dropIndex);\n\n    this.#cachedDropIndex = dropIndex;\n\n    return this.moveColumns(columns, finalIndex);\n  }\n\n  /**\n   * Indicates if it's possible to move columns to the desired position. Some of the actions aren't\n   * possible, i.e. You can’t move more than one element to the last position.\n   *\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @returns {boolean}\n   */\n  isMovePossible(movedColumns, finalIndex) {\n    const length = this.hot.columnIndexMapper.getNotTrimmedIndexesLength();\n\n    // An attempt to transfer more columns to start destination than is possible (only when moving from the top to the bottom).\n    const tooHighDestinationIndex = movedColumns.length + finalIndex > length;\n\n    const tooLowDestinationIndex = finalIndex < 0;\n    const tooLowMovedColumnIndex = movedColumns.some(movedColumn => movedColumn < 0);\n    const tooHighMovedColumnIndex = movedColumns.some(movedColumn => movedColumn >= length);\n\n    if (tooHighDestinationIndex || tooLowDestinationIndex || tooLowMovedColumnIndex || tooHighMovedColumnIndex) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Indicates if order of columns was changed.\n   *\n   * @private\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @returns {boolean}\n   */\n  isColumnOrderChanged(movedColumns, finalIndex) {\n    return movedColumns.some((column, nrOfMovedElement) => column - nrOfMovedElement !== finalIndex);\n  }\n\n  /**\n   * Count the final column index from the drop index.\n   *\n   * @private\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} dropIndex Visual column index, being a drop index for the moved columns.\n   * @returns {number} Visual column index, being a start index for the moved columns.\n   */\n  countFinalIndex(movedColumns, dropIndex) {\n    const numberOfColumnsLowerThanDropIndex = arrayReduce(movedColumns, (numberOfColumns, currentColumnIndex) => {\n      if (currentColumnIndex < dropIndex) {\n        numberOfColumns += 1;\n      }\n\n      return numberOfColumns;\n    }, 0);\n\n    return dropIndex - numberOfColumnsLowerThanDropIndex;\n  }\n\n  /**\n   * Gets the sum of the widths of columns in the provided range.\n   *\n   * @private\n   * @param {number} fromColumn Visual column index.\n   * @param {number} toColumn Visual column index.\n   * @returns {number}\n   */\n  getColumnsWidth(fromColumn, toColumn) {\n    const columnMapper = this.hot.columnIndexMapper;\n    let columnsWidth = 0;\n\n    for (let visualColumnIndex = fromColumn; visualColumnIndex <= toColumn; visualColumnIndex += 1) {\n      // We can't use just `getColWidth` (even without indexes translation) as it doesn't return proper values\n      // when column is stretched.\n      const renderableIndex = columnMapper.getRenderableFromVisualIndex(visualColumnIndex);\n\n      if (visualColumnIndex < 0) {\n        columnsWidth += this.hot.view._wt.wtViewport.getRowHeaderWidth() || 0;\n\n      } else if (renderableIndex !== null) {\n        columnsWidth += this.hot.view._wt.wtTable.getStretchedColumnWidth(renderableIndex) || 0;\n      }\n    }\n\n    return columnsWidth;\n  }\n\n  /**\n   * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n   *\n   * @private\n   */\n  moveBySettingsOrLoad() {\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(pluginSettings)) {\n      this.moveColumns(pluginSettings, 0);\n\n    } else if (pluginSettings !== undefined) {\n      const persistentState = this.persistentStateLoad();\n\n      if (persistentState.length) {\n        this.moveColumns(persistentState, 0);\n      }\n    }\n  }\n\n  /**\n   * Checks if the provided column is in the fixedColumnsTop section.\n   *\n   * @private\n   * @param {number} column Visual column index to check.\n   * @returns {boolean}\n   */\n  isFixedColumnsStart(column) {\n    return column < this.hot.getSettings().fixedColumnsStart;\n  }\n\n  /**\n   * Saves the manual column positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateSave\n   */\n  persistentStateSave() {\n    this.hot.runHooks('persistentStateSave', 'manualColumnMove', this.hot.columnIndexMapper.getIndexesSequence()); // The `PersistentState` plugin should be refactored.\n  }\n\n  /**\n   * Loads the manual column positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateLoad\n   * @returns {Array} Stored state.\n   */\n  persistentStateLoad() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', 'manualColumnMove', storedState);\n\n    return storedState.value ? storedState.value : [];\n  }\n\n  /**\n   * Prepares an array of indexes based on actual selection.\n   *\n   * @private\n   * @param {number} start The start index.\n   * @param {number} end The end index.\n   * @returns {Array}\n   */\n  prepareColumnsToMoving(start, end) {\n    const selectedColumns = [];\n\n    rangeEach(start, end, (i) => {\n      selectedColumns.push(i);\n    });\n\n    return selectedColumns;\n  }\n\n  /**\n   * Update the UI visual position.\n   *\n   * @private\n   */\n  refreshPositions() {\n    const firstVisible = this.hot.view.getFirstFullyVisibleColumn();\n\n    if (this.isFixedColumnsStart(this.#hoveredColumn) && firstVisible > 0) {\n      this.hot.scrollViewportTo({\n        col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1)\n      });\n    }\n\n    const wtTable = this.hot.view._wt.wtTable;\n    const scrollableElement = this.hot.view._wt.wtOverlays.scrollableElement;\n    const scrollStart = typeof scrollableElement.scrollX === 'number' ?\n      scrollableElement.scrollX : scrollableElement.scrollLeft;\n    let tdOffsetStart = this.hot.view.THEAD.offsetLeft + this.getColumnsWidth(0, this.#hoveredColumn - 1);\n    const hiderWidth = wtTable.hider.offsetWidth;\n    const tbodyOffsetLeft = wtTable.TBODY.offsetLeft;\n    const backlightElemMarginStart = this.#backlight.getOffset().start;\n    const backlightElemWidth = this.#backlight.getSize().width;\n    let rowHeaderWidth = 0;\n    let mouseOffsetStart = 0;\n\n    if (this.hot.isRtl()) {\n      const rootWindow = this.hot.rootWindow;\n      const containerWidth = outerWidth(this.hot.rootElement);\n      const gridMostRightPos = rootWindow.innerWidth - this.#rootElementOffset - containerWidth;\n\n      mouseOffsetStart = rootWindow.innerWidth - this.#target.eventPageX - gridMostRightPos -\n        (scrollableElement.scrollX === undefined ? scrollStart : 0);\n\n    } else {\n      mouseOffsetStart = this.#target.eventPageX -\n        (this.#rootElementOffset - (scrollableElement.scrollX === undefined ? scrollStart : 0));\n    }\n\n    if (this.#hasRowHeaders) {\n      rowHeaderWidth = this.hot.view._wt.wtOverlays.inlineStartOverlay.clone.wtTable.getColumnHeader(-1).offsetWidth;\n    }\n\n    if (this.isFixedColumnsStart(this.#hoveredColumn)) {\n      tdOffsetStart += scrollStart;\n    }\n\n    tdOffsetStart += rowHeaderWidth;\n\n    if (this.#hoveredColumn < 0) {\n      // if hover on rowHeader\n      if (this.#fixedColumnsStart > 0) {\n        this.#target.col = 0;\n      } else {\n        this.#target.col = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n      }\n\n    } else if (((this.#target.TD.offsetWidth / 2) + tdOffsetStart) <= mouseOffsetStart) {\n      const newCoordsCol = this.#hoveredColumn >= this.#countCols ? this.#countCols - 1 : this.#hoveredColumn;\n\n      // if hover on right part of TD\n      this.#target.col = newCoordsCol + 1;\n      // unfortunately first column is bigger than rest\n      tdOffsetStart += this.#target.TD.offsetWidth;\n\n    } else {\n      // elsewhere on table\n      this.#target.col = this.#hoveredColumn;\n    }\n\n    let backlightStart = mouseOffsetStart;\n    let guidelineStart = tdOffsetStart;\n\n    if (mouseOffsetStart + backlightElemWidth + backlightElemMarginStart >= hiderWidth) {\n      // prevent display backlight on the right side of the table\n      backlightStart = hiderWidth - backlightElemWidth - backlightElemMarginStart;\n\n    } else if (mouseOffsetStart + backlightElemMarginStart < tbodyOffsetLeft + rowHeaderWidth) {\n      // prevent display backlight on the left side of the table\n      backlightStart = tbodyOffsetLeft + rowHeaderWidth + Math.abs(backlightElemMarginStart);\n    }\n\n    if (tdOffsetStart >= hiderWidth - 1) {\n      // prevent display guideline outside the table\n      guidelineStart = hiderWidth - 1;\n\n    } else if (guidelineStart === 0) {\n      // guideline has got `margin-left: -1px` as default\n      guidelineStart = 1;\n\n    } else if (scrollableElement.scrollX !== undefined && this.#hoveredColumn < this.#fixedColumnsStart) {\n      guidelineStart -= ((this.#rootElementOffset <= scrollableElement.scrollX) ? this.#rootElementOffset : 0);\n    }\n\n    this.#backlight.setPosition(null, backlightStart);\n    this.#guideline.setPosition(null, guidelineStart);\n  }\n\n  /**\n   * Binds the events used by the plugin.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { documentElement } = this.hot.rootDocument;\n\n    this.eventManager.addEventListener(documentElement, 'mousemove', event => this.#onMouseMove(event));\n    this.eventManager.addEventListener(documentElement, 'mouseup', () => this.#onMouseUp());\n  }\n\n  /**\n   * Unbinds the events used by the plugin.\n   *\n   * @private\n   */\n  unregisterEvents() {\n    this.eventManager.clear();\n  }\n\n  /**\n   * Change the behavior of selection / dragging.\n   *\n   * @param {MouseEvent} event `mousedown` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    const wtTable = this.hot.view._wt.wtTable;\n    const isHeaderSelection = this.hot.selection.isSelectedByColumnHeader();\n    const selection = this.hot.getSelectedRangeLast();\n    // This block action shouldn't be handled below.\n    const isSortingElement = hasClass(event.target, 'sortAction');\n\n    if (!selection || !isHeaderSelection || this.#pressed || event.button !== 0 || isSortingElement) {\n      this.#pressed = false;\n      this.#columnsToMove.length = 0;\n      removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n\n      return;\n    }\n\n    const guidelineIsNotReady = this.#guideline.isBuilt() && !this.#guideline.isAppended();\n    const backlightIsNotReady = this.#backlight.isBuilt() && !this.#backlight.isAppended();\n\n    if (guidelineIsNotReady && backlightIsNotReady) {\n      this.#guideline.appendTo(wtTable.hider);\n      this.#backlight.appendTo(wtTable.hider);\n    }\n\n    const { from, to } = selection;\n    const start = Math.min(from.col, to.col);\n    const end = Math.max(from.col, to.col);\n\n    if (coords.row < 0 && (coords.col >= start && coords.col <= end)) {\n      controller.column = true;\n      this.#pressed = true;\n\n      const eventOffsetX = TD.firstChild ? offsetRelativeTo(event, TD.firstChild).x : event.offsetX;\n\n      this.#target.eventPageX = event.pageX;\n      this.#hoveredColumn = coords.col;\n      this.#target.TD = TD;\n      this.#target.col = coords.col;\n      this.#columnsToMove = this.prepareColumnsToMoving(start, end);\n      this.#hasRowHeaders = !!this.hot.getSettings().rowHeaders;\n      this.#countCols = this.hot.countCols();\n      this.#fixedColumnsStart = this.hot.getSettings().fixedColumnsStart;\n      this.#rootElementOffset = offset(this.hot.rootElement).left;\n\n      const countColumnsFrom = this.#hasRowHeaders ? -1 : 0;\n      const topPos = wtTable.holder.scrollTop + wtTable.getColumnHeaderHeight(0) + 1;\n      const fixedColumnsStart = coords.col < this.#fixedColumnsStart;\n      const horizontalScrollPosition = this.hot.view._wt.wtOverlays.inlineStartOverlay.getOverlayOffset();\n      const offsetX = Math.abs(eventOffsetX - (this.hot.isRtl() ? TD.offsetWidth : 0));\n      const inlineOffset = this.getColumnsWidth(start, coords.col - 1) + offsetX;\n      const inlinePos = this.getColumnsWidth(countColumnsFrom, start - 1) +\n        (fixedColumnsStart ? horizontalScrollPosition : 0) + inlineOffset;\n\n      this.#backlight.setPosition(topPos, inlinePos);\n      this.#backlight.setSize(this.getColumnsWidth(start, end), wtTable.hider.offsetHeight - topPos);\n      this.#backlight.setOffset(null, -inlineOffset);\n\n      addClass(this.hot.rootElement, CSS_ON_MOVING);\n\n    } else {\n      removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n      this.#pressed = false;\n      this.#columnsToMove.length = 0;\n    }\n  }\n\n  /**\n   * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n   *\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  #onMouseMove(event) {\n    if (!this.#pressed) {\n      return;\n    }\n\n    this.#target.eventPageX = event.pageX;\n    this.refreshPositions();\n  }\n\n  /**\n   * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n   *\n   * @param {MouseEvent} event `mouseover` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseOver(event, coords, TD, controller) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n\n    if (!selectedRange || !this.#pressed) {\n      return;\n    }\n\n    if (this.#columnsToMove.indexOf(coords.col) > -1) {\n      removeClass(this.hot.rootElement, CSS_SHOW_UI);\n\n    } else {\n      addClass(this.hot.rootElement, CSS_SHOW_UI);\n    }\n\n    controller.row = true;\n    controller.column = true;\n    controller.cell = true;\n    this.#hoveredColumn = coords.col;\n    this.#target.TD = TD;\n  }\n\n  /**\n   * `onMouseUp` hook callback.\n   */\n  #onMouseUp() {\n    const target = this.#target.col;\n    const columnsLen = this.#columnsToMove.length;\n\n    this.#hoveredColumn = undefined;\n    this.#pressed = false;\n\n    removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n    if (this.hot.selection.isSelectedByColumnHeader()) {\n      addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n    }\n\n    if (columnsLen < 1 || target === undefined) {\n      return;\n    }\n\n    const firstMovedVisualColumn = this.#columnsToMove[0];\n    const firstMovedPhysicalColumn = this.hot.toPhysicalColumn(firstMovedVisualColumn);\n    const movePerformed = this.dragColumns(this.#columnsToMove, target);\n\n    this.#columnsToMove.length = 0;\n\n    if (movePerformed === true) {\n      this.persistentStateSave();\n      this.hot.render();\n      this.hot.view.adjustElementsSize();\n\n      const selectionStart = this.hot.toVisualColumn(firstMovedPhysicalColumn);\n      const selectionEnd = selectionStart + columnsLen - 1;\n\n      this.hot.selectColumns(selectionStart, selectionEnd);\n    }\n  }\n\n  /**\n   * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n   */\n  #onAfterScrollVertically() {\n    const wtTable = this.hot.view._wt.wtTable;\n    const headerHeight = wtTable.getColumnHeaderHeight(0) + 1;\n    const scrollTop = wtTable.holder.scrollTop;\n    const posTop = headerHeight + scrollTop;\n\n    this.#backlight.setPosition(posTop);\n    this.#backlight.setSize(null, wtTable.hider.offsetHeight - posTop);\n  }\n\n  /**\n   * Builds the plugin's UI.\n   *\n   * @private\n   */\n  buildPluginUI() {\n    this.#backlight.build();\n    this.#guideline.build();\n  }\n\n  /**\n   * Callback for the `afterLoadData` hook.\n   *\n   * @private\n   */\n  #onAfterLoadData() {\n    this.moveBySettingsOrLoad();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.destroy();\n  }\n}\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualColumnMove--backlight';\n\n/**\n * @class BacklightUI\n * @util\n */\nclass BacklightUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default BacklightUI;\n","import { isNumeric } from '../../../helpers/number';\nimport { toUpperCaseFirst } from '../../../helpers/string';\n\nconst STATE_INITIALIZED = 0;\nconst STATE_BUILT = 1;\nconst STATE_APPENDED = 2;\nconst UNIT = 'px';\n\n/**\n * @class\n * @private\n */\nclass BaseUI {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * DOM element representing the ui element.\n   *\n   * @type {HTMLElement}\n   * @private\n   */\n  _element = null;\n  /**\n   * Flag which determines build state of element.\n   *\n   * @type {number}\n   */\n  state = STATE_INITIALIZED;\n  /**\n   * Defines the \"start\" physical CSS property name used within the class depending on what document\n   * layout direction the library runs.\n   *\n   * @type {string}\n   */\n  inlineProperty;\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n    this.inlineProperty = hotInstance.isRtl() ? 'right' : 'left';\n  }\n\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n  appendTo(wrapper) {\n    wrapper.appendChild(this._element);\n\n    this.state = STATE_APPENDED;\n  }\n\n  /**\n   * Method for create UI element. Only create, without append to table.\n   */\n  build() {\n    if (this.state !== STATE_INITIALIZED) {\n      return;\n    }\n\n    this._element = this.hot.rootDocument.createElement('div');\n    this.state = STATE_BUILT;\n  }\n\n  /**\n   * Method for remove UI element.\n   */\n  destroy() {\n    if (this.isAppended()) {\n      this._element.parentElement.removeChild(this._element);\n    }\n\n    this._element = null;\n    this.state = STATE_INITIALIZED;\n  }\n\n  /**\n   * Check if UI element are appended.\n   *\n   * @returns {boolean}\n   */\n  isAppended() {\n    return this.state === STATE_APPENDED;\n  }\n\n  /**\n   * Check if UI element are built.\n   *\n   * @returns {boolean}\n   */\n  isBuilt() {\n    return this.state >= STATE_BUILT;\n  }\n\n  /**\n   * Setter for position.\n   *\n   * @param {number} top New top position of the element.\n   * @param {number} inlinePosition New left/right (depends on LTR/RTL document mode) position of the element.\n   */\n  setPosition(top, inlinePosition) {\n    if (isNumeric(top)) {\n      this._element.style.top = top + UNIT;\n    }\n    if (isNumeric(inlinePosition)) {\n      this._element.style[this.inlineProperty] = inlinePosition + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains left and top position of the element.\n   */\n  getPosition() {\n    const style = this._element.style;\n\n    return {\n      top: style.top ? parseInt(style.top, 10) : 0,\n      start: style[this.inlineProperty] ? parseInt(style[this.inlineProperty], 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element size.\n   *\n   * @param {number} width New width of the element.\n   * @param {number} height New height of the element.\n   */\n  setSize(width, height) {\n    if (isNumeric(width)) {\n      this._element.style.width = width + UNIT;\n    }\n    if (isNumeric(height)) {\n      this._element.style.height = height + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains height and width of the element.\n   */\n  getSize() {\n    return {\n      width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n      height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n   *\n   * @param {number} top New margin top of the element.\n   * @param {number} inlineOffset New margin left/right (depends on LTR/RTL document mode) of the element.\n   */\n  setOffset(top, inlineOffset) {\n    if (isNumeric(top)) {\n      this._element.style.marginTop = top + UNIT;\n    }\n    if (isNumeric(inlineOffset)) {\n      this._element.style[`margin${toUpperCaseFirst(this.inlineProperty)}`] = inlineOffset + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element offset.\n   *\n   * @returns {object} Object contains top and left offset of the element.\n   */\n  getOffset() {\n    const style = this._element.style;\n    const inlineProp = `margin${toUpperCaseFirst(this.inlineProperty)}`;\n\n    return {\n      top: style.marginTop ? parseInt(style.marginTop, 10) : 0,\n      start: style[inlineProp] ? parseInt(style[inlineProp], 10) : 0\n    };\n  }\n}\n\nexport default BaseUI;\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualColumnMove--guideline';\n\n/**\n * @class GuidelineUI\n * @util\n */\nclass GuidelineUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default GuidelineUI;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualColumnResize,\n} from './manualColumnResize';\n","import { BasePlugin } from '../base';\nimport { addClass, closest, hasClass, removeClass, outerHeight, isDetached } from '../../helpers/dom/element';\nimport { arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js\n\nexport const PLUGIN_KEY = 'manualColumnResize';\nexport const PLUGIN_PRIORITY = 130;\nconst PERSISTENT_STATE_KEY = 'manualColumnWidths';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualColumnResize\n * @class ManualColumnResize\n *\n * @description\n * This plugin allows to change columns width. To make columns width persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired width of the column.\n * - guide - the helper guide that shows the desired width as a vertical guide.\n */\nexport class ManualColumnResize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * @type {HTMLTableHeaderCellElement}\n   */\n  #currentTH = null;\n  /**\n   * @type {number}\n   */\n  #currentCol = null;\n  /**\n   * @type {number[]}\n   */\n  #selectedCols = [];\n  /**\n   * @type {number}\n   */\n  #currentWidth = null;\n  /**\n   * @type {number}\n   */\n  #newSize = null;\n  /**\n   * @type {number}\n   */\n  #startY = null;\n  /**\n   * @type {number}\n   */\n  #startWidth = null;\n  /**\n   * @type {number}\n   */\n  #startOffset = null;\n  /**\n   * @type {HTMLElement}\n   */\n  #handle = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {HTMLElement}\n   */\n  #guide = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {boolean}\n   */\n  #pressed = null;\n  /**\n   * @type {boolean}\n   */\n  #isTriggeredByRMB = false;\n  /**\n   * @type {number}\n   */\n  #dblclick = 0;\n  /**\n   * @type {number}\n   */\n  #autoresizeTimeout = null;\n  /**\n   * PhysicalIndexToValueMap to keep and track widths for physical column indexes.\n   *\n   * @type {PhysicalIndexToValueMap}\n   */\n  #columnWidthsMap;\n  /**\n   * Private pool to save configuration from updateSettings.\n   *\n   * @type {object}\n   */\n  #config;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n\n    addClass(this.#handle, 'manualColumnResizer');\n    addClass(this.#guide, 'manualColumnResizerGuide');\n  }\n\n  /**\n   * @private\n   * @returns {string}\n   */\n  get inlineDir() {\n    return this.hot.isRtl() ? 'right' : 'left';\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualColumnResize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.#columnWidthsMap = new IndexToValueMap();\n    this.#columnWidthsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.columnIndexMapper.registerMap(this.pluginName, this.#columnWidthsMap);\n\n    this.addHook('modifyColWidth', (width, col) => this.#onModifyColWidth(width, col), 1);\n    this.addHook('beforeStretchingColumnWidth',\n      (stretchedWidth, column) => this.#onBeforeStretchingColumnWidth(stretchedWidth, column));\n    this.addHook('beforeColumnResize',\n      (newSize, column, isDoubleClick) => this.#onBeforeColumnResize(newSize, column, isDoubleClick));\n\n    this.bindEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualColumnResize`](@/api/options.md#manualcolumnresize)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#config = this.#columnWidthsMap.getValues();\n    this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n    super.disablePlugin();\n  }\n\n  /**\n   * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @fires Hooks#persistentStateSave\n   */\n  saveManualColumnWidths() {\n    this.hot.runHooks('persistentStateSave', PERSISTENT_STATE_KEY, this.#columnWidthsMap.getValues());\n  }\n\n  /**\n   * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @returns {Array}\n   * @fires Hooks#persistentStateLoad\n   */\n  loadManualColumnWidths() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', PERSISTENT_STATE_KEY, storedState);\n\n    return storedState.value;\n  }\n\n  /**\n   * Sets the new width for specified column index.\n   *\n   * @param {number} column Visual column index.\n   * @param {number} width Column width (no less than 20px).\n   * @returns {number} Returns new width.\n   */\n  setManualSize(column, width) {\n    const newWidth = Math.max(width, 20);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.#columnWidthsMap.setValueAtIndex(physicalColumn, newWidth);\n\n    return newWidth;\n  }\n\n  /**\n   * Clears the cache for the specified column index.\n   *\n   * @param {number} column Visual column index.\n   */\n  clearManualSize(column) {\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.#columnWidthsMap.setValueAtIndex(physicalColumn, null);\n  }\n\n  /**\n   * Callback to call on map's `init` local hook.\n   *\n   * @private\n   */\n  #onMapInit() {\n    const initialSetting = this.hot.getSettings()[PLUGIN_KEY];\n    const loadedManualColumnWidths = this.loadManualColumnWidths();\n\n    if (typeof loadedManualColumnWidths !== 'undefined') {\n      this.hot.batchExecution(() => {\n        loadedManualColumnWidths.forEach((width, physicalIndex) => {\n          this.#columnWidthsMap.setValueAtIndex(physicalIndex, width);\n        });\n      }, true);\n\n    } else if (Array.isArray(initialSetting)) {\n      this.hot.batchExecution(() => {\n        initialSetting.forEach((width, physicalIndex) => {\n          this.#columnWidthsMap.setValueAtIndex(physicalIndex, width);\n        });\n      }, true);\n\n      this.#config = initialSetting;\n\n    } else if (initialSetting === true && Array.isArray(this.#config)) {\n      this.hot.batchExecution(() => {\n        this.#config.forEach((width, physicalIndex) => {\n          this.#columnWidthsMap.setValueAtIndex(physicalIndex, width);\n        });\n      }, true);\n    }\n  }\n\n  /**\n   * Set the resize handle position.\n   *\n   * @private\n   * @param {HTMLCellElement} TH TH HTML element.\n   */\n  setupHandlePosition(TH) {\n    if (!TH.parentNode) {\n      return;\n    }\n\n    this.#currentTH = TH;\n\n    const { _wt: wt } = this.hot.view;\n    const cellCoords = wt.wtTable.getCoords(this.#currentTH);\n    const col = cellCoords.col;\n\n    // Ignore column headers.\n    if (col < 0) {\n      return;\n    }\n\n    const headerHeight = outerHeight(this.#currentTH);\n    const box = this.#currentTH.getBoundingClientRect();\n    // Read \"fixedColumnsStart\" through the Walkontable as in that context, the fixed columns\n    // are modified (reduced by the number of hidden columns) by TableView module.\n    const fixedColumn = col < wt.getSetting('fixedColumnsStart');\n    let relativeHeaderPosition;\n\n    if (fixedColumn) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .topInlineStartCornerOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    // If the TH is not a child of the top-left overlay, recalculate using\n    // the top overlay - as this overlay contains the rest of the headers.\n    if (!relativeHeaderPosition) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .topOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    this.#currentCol = this.hot.columnIndexMapper.getVisualFromRenderableIndex(col);\n    this.#selectedCols = [];\n\n    const isFullColumnSelected = this.hot.selection.isSelectedByCorner() ||\n      this.hot.selection.isSelectedByColumnHeader();\n\n    if (this.hot.selection.isSelected() && isFullColumnSelected) {\n      const selectionRanges = this.hot.getSelectedRange();\n\n      arrayEach(selectionRanges, (selectionRange) => {\n        const fromColumn = selectionRange.getTopStartCorner().col;\n        const toColumn = selectionRange.getBottomEndCorner().col;\n\n        // Add every selected column for resize action.\n        rangeEach(fromColumn, toColumn, (columnIndex) => {\n          if (!this.#selectedCols.includes(columnIndex)) {\n            this.#selectedCols.push(columnIndex);\n          }\n        });\n      });\n    }\n\n    // Resizing element beyond the current selection (also when there is no selection).\n    if (!this.#selectedCols.includes(this.#currentCol)) {\n      this.#selectedCols = [this.#currentCol];\n    }\n\n    this.#startOffset = relativeHeaderPosition.start - 6;\n    this.#startWidth = parseInt(box.width, 10);\n\n    this.#handle.style.top = `${relativeHeaderPosition.top}px`;\n    this.#handle.style[this.inlineDir] = `${this.#startOffset + this.#startWidth}px`;\n\n    this.#handle.style.height = `${headerHeight}px`;\n    this.hot.rootElement.appendChild(this.#handle);\n  }\n\n  /**\n   * Refresh the resize handle position.\n   *\n   * @private\n   */\n  refreshHandlePosition() {\n    this.#handle.style[this.inlineDir] = `${this.#startOffset + this.#currentWidth}px`;\n  }\n\n  /**\n   * Sets the resize guide position.\n   *\n   * @private\n   */\n  setupGuidePosition() {\n    const handleHeight = parseInt(outerHeight(this.#handle), 10);\n    const handleBottomPosition = parseInt(this.#handle.style.top, 10) + handleHeight;\n    const maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10);\n\n    addClass(this.#handle, 'active');\n    addClass(this.#guide, 'active');\n\n    this.#guide.style.top = `${handleBottomPosition}px`;\n    this.refreshGuidePosition();\n    this.#guide.style.height = `${maximumVisibleElementHeight - handleHeight}px`;\n    this.hot.rootElement.appendChild(this.#guide);\n  }\n\n  /**\n   * Refresh the resize guide position.\n   *\n   * @private\n   */\n  refreshGuidePosition() {\n    this.#guide.style[this.inlineDir] = this.#handle.style[this.inlineDir];\n  }\n\n  /**\n   * Hides both the resize handle and resize guide.\n   *\n   * @private\n   */\n  hideHandleAndGuide() {\n    removeClass(this.#handle, 'active');\n    removeClass(this.#guide, 'active');\n  }\n\n  /**\n   * Checks if provided element is considered a column header.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {boolean}\n   */\n  checkIfColumnHeader(element) {\n    const thead = closest(element, ['THEAD'], this.hot.rootElement);\n    const { topOverlay, topInlineStartCornerOverlay } = this.hot.view._wt.wtOverlays;\n\n    return [\n      topOverlay.clone.wtTable.THEAD,\n      topInlineStartCornerOverlay.clone.wtTable.THEAD,\n    ].includes(thead);\n  }\n\n  /**\n   * Gets the TH element from the provided element.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {HTMLElement}\n   */\n  getClosestTHParent(element) {\n    if (element.tagName !== 'TABLE') {\n      if (element.tagName === 'TH') {\n        return element;\n      }\n\n      return this.getClosestTHParent(element.parentNode);\n    }\n\n    return null;\n  }\n\n  /**\n   * 'mouseover' event callback - set the handle position.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseOver(event) {\n    // Workaround for #6926 - if the `event.target` is temporarily detached, we can skip this callback and wait for\n    // the next `onmouseover`.\n    if (isDetached(event.target)) {\n      return;\n    }\n\n    // A \"mouseover\" action is triggered right after executing \"contextmenu\" event. It should be ignored.\n    if (this.#isTriggeredByRMB === true) {\n      return;\n    }\n\n    if (this.checkIfColumnHeader(event.target)) {\n      const th = this.getClosestTHParent(event.target);\n\n      if (!th) {\n        return;\n      }\n\n      const colspan = th.getAttribute('colspan');\n\n      if (th && (colspan === null || colspan === '1')) {\n        if (!this.#pressed) {\n          this.setupHandlePosition(th);\n        }\n      }\n    }\n  }\n\n  /**\n   * Auto-size row after doubleclick - callback.\n   *\n   * @private\n   * @fires Hooks#beforeColumnResize\n   * @fires Hooks#afterColumnResize\n   */\n  afterMouseDownTimeout() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const resize = (column, forceRender) => {\n      const hookNewSize = this.hot.runHooks('beforeColumnResize', this.#newSize, column, true);\n\n      if (hookNewSize !== undefined) {\n        this.#newSize = hookNewSize;\n      }\n\n      if (this.hot.getSettings().stretchH === 'all') {\n        this.clearManualSize(column);\n      } else {\n        this.setManualSize(column, this.#newSize); // double click sets by auto row size plugin\n      }\n\n      this.saveManualColumnWidths();\n\n      this.hot.runHooks('afterColumnResize', this.#newSize, column, true);\n\n      if (forceRender) {\n        render();\n      }\n    };\n\n    if (this.#dblclick >= 2) {\n      const selectedColsLength = this.#selectedCols.length;\n\n      if (selectedColsLength > 1) {\n        arrayEach(this.#selectedCols, (selectedCol) => {\n          resize(selectedCol);\n        });\n        render();\n      } else {\n        arrayEach(this.#selectedCols, (selectedCol) => {\n          resize(selectedCol, true);\n        });\n      }\n    }\n    this.#dblclick = 0;\n    this.#autoresizeTimeout = null;\n  }\n\n  /**\n   * 'mousedown' event callback.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseDown(event) {\n    if (event.target.parentNode !== this.hot.rootElement) {\n      return;\n    }\n\n    if (hasClass(event.target, 'manualColumnResizer')) {\n      this.setupHandlePosition(this.#currentTH);\n      this.setupGuidePosition();\n      this.#pressed = true;\n\n      if (this.#autoresizeTimeout === null) {\n        this.#autoresizeTimeout = setTimeout(() => this.afterMouseDownTimeout(), 500);\n\n        this.hot._registerTimeout(this.#autoresizeTimeout);\n      }\n      this.#dblclick += 1;\n\n      this.startX = event.pageX;\n      this.#newSize = this.#startWidth;\n    }\n  }\n\n  /**\n   * 'mousemove' event callback - refresh the handle and guide positions, cache the new column width.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseMove(event) {\n    if (this.#pressed) {\n      const change = (event.pageX - this.startX) * this.hot.getDirectionFactor();\n\n      this.#currentWidth = this.#startWidth + change;\n\n      arrayEach(this.#selectedCols, (selectedCol) => {\n        this.#newSize = this.setManualSize(selectedCol, this.#currentWidth);\n      });\n\n      this.refreshHandlePosition();\n      this.refreshGuidePosition();\n    }\n  }\n\n  /**\n   * 'mouseup' event callback - apply the column resizing.\n   *\n   * @fires Hooks#beforeColumnResize\n   * @fires Hooks#afterColumnResize\n   */\n  #onMouseUp() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const resize = (column, forceRender) => {\n      this.hot.runHooks('beforeColumnResize', this.#newSize, column, false);\n\n      if (forceRender) {\n        render();\n      }\n\n      this.saveManualColumnWidths();\n\n      this.hot.runHooks('afterColumnResize', this.#newSize, column, false);\n    };\n\n    if (this.#pressed) {\n      this.hideHandleAndGuide();\n      this.#pressed = false;\n\n      if (this.#newSize !== this.#startWidth) {\n        const selectedColsLength = this.#selectedCols.length;\n\n        if (selectedColsLength > 1) {\n          arrayEach(this.#selectedCols, (selectedCol) => {\n            resize(selectedCol);\n          });\n          render();\n        } else {\n          arrayEach(this.#selectedCols, (selectedCol) => {\n            resize(selectedCol, true);\n          });\n        }\n      }\n\n      this.setupHandlePosition(this.#currentTH);\n    }\n  }\n\n  /**\n   * Callback for \"contextmenu\" event triggered on element showing move handle. It removes handle and guide elements.\n   */\n  #onContextMenu() {\n    this.hideHandleAndGuide();\n    this.hot.rootElement.removeChild(this.#handle);\n    this.hot.rootElement.removeChild(this.#guide);\n\n    this.#pressed = false;\n    this.#isTriggeredByRMB = true;\n\n    // There is thrown \"mouseover\" event right after opening a context menu. This flag inform that handle\n    // shouldn't be drawn just after removing it.\n    this.hot._registerImmediate(() => {\n      this.#isTriggeredByRMB = false;\n    });\n  }\n\n  /**\n   * Binds the mouse events.\n   *\n   * @private\n   */\n  bindEvents() {\n    const { rootWindow, rootElement } = this.hot;\n\n    this.eventManager.addEventListener(rootElement, 'mouseover', e => this.#onMouseOver(e));\n    this.eventManager.addEventListener(rootElement, 'mousedown', e => this.#onMouseDown(e));\n    this.eventManager.addEventListener(rootWindow, 'mousemove', e => this.#onMouseMove(e));\n    this.eventManager.addEventListener(rootWindow, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(this.#handle, 'contextmenu', () => this.#onContextMenu());\n  }\n\n  /**\n   * Modifies the provided column width, based on the plugin settings.\n   *\n   * @param {number} width Column width.\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  #onModifyColWidth(width, column) {\n    let newWidth = width;\n\n    if (this.enabled) {\n      const physicalColumn = this.hot.toPhysicalColumn(column);\n      const columnWidth = this.#columnWidthsMap.getValueAtIndex(physicalColumn);\n\n      if (this.hot.getSettings()[PLUGIN_KEY] && columnWidth) {\n        newWidth = columnWidth;\n      }\n    }\n\n    return newWidth;\n  }\n\n  /**\n   * Modifies the provided column stretched width. This hook decides if specified column should be stretched or not.\n   *\n   * @param {number} stretchedWidth Stretched width.\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  #onBeforeStretchingColumnWidth(stretchedWidth, column) {\n    let width = this.#columnWidthsMap.getValueAtIndex(column);\n\n    if (width === null) {\n      width = stretchedWidth;\n    }\n\n    return width;\n  }\n\n  /**\n   * `beforeColumnResize` hook callback.\n   */\n  #onBeforeColumnResize() {\n    // clear the header height cache information\n    this.hot.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualRowMove,\n} from './manualRowMove';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { arrayReduce } from '../../helpers/array';\nimport { addClass, removeClass, offset, getTrimmingContainer } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport BacklightUI from './ui/backlight';\nimport GuidelineUI from './ui/guideline';\n\nimport './manualRowMove.css';\n\nHooks.getSingleton().register('beforeRowMove');\nHooks.getSingleton().register('afterRowMove');\n\nexport const PLUGIN_KEY = 'manualRowMove';\nexport const PLUGIN_PRIORITY = 140;\nconst CSS_PLUGIN = 'ht__manualRowMove';\nconst CSS_SHOW_UI = 'show-ui';\nconst CSS_ON_MOVING = 'on-moving--rows';\nconst CSS_AFTER_SELECTION = 'after-selection--rows';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualRowMove\n * @class ManualRowMove\n *\n * @description\n * This plugin allows to change rows order. To make rows order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - `moveRow` - move single row to the new position.\n * - `moveRows` - move many rows (as an array of indexes) to the new position.\n * - `dragRow` - drag single row to the new position.\n * - `dragRows` - drag many rows (as an array of indexes) to the new position.\n *\n * [Documentation](@/guides/rows/row-moving/row-moving.md) explain differences between drag and move actions. Please keep in mind that if you want apply visual changes,\n * you have to call manually the `render` method on the instance of Handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected rows.\n * - guideline - line which shows where rows has been moved.\n *\n * @class ManualRowMove\n * @plugin ManualRowMove\n */\nexport class ManualRowMove extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Backlight UI object.\n   *\n   * @type {object}\n   */\n  #backlight = new BacklightUI(this.hot);\n  /**\n   * Guideline UI object.\n   *\n   * @type {object}\n   */\n  #guideline = new GuidelineUI(this.hot);\n  /**\n   * @type {number[]}\n   */\n  #rowsToMove = [];\n  /**\n   * @type {boolean}\n   */\n  #pressed;\n  /**\n   * @type {object}\n   */\n  #target = {};\n  /**\n   * @type {number}\n   */\n  #cachedDropIndex;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualRowMove#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeOnCellMouseOver', (...args) => this.#onBeforeOnCellMouseOver(...args));\n    this.addHook('afterScrollHorizontally', () => this.#onAfterScrollHorizontally());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    this.buildPluginUI();\n    this.registerEvents();\n\n    // TODO: move adding plugin classname to BasePlugin.\n    addClass(this.hot.rootElement, CSS_PLUGIN);\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualRowMove`](@/api/options.md#manualrowmove)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.moveBySettingsOrLoad();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    removeClass(this.hot.rootElement, CSS_PLUGIN);\n\n    this.unregisterEvents();\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Moves a single row.\n   *\n   * To see the outcome, rerender your grid by calling [`render()`](@/api/core.md#render).\n   *\n   * @param {number} row Visual row index to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  moveRow(row, finalIndex) {\n    return this.moveRows([row], finalIndex);\n  }\n\n  /**\n   * Moves multiple rows.\n   *\n   * To see the outcome, rerender your grid by calling [`render()`](@/api/core.md#render).\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  moveRows(rows, finalIndex) {\n    const dropIndex = this.#cachedDropIndex;\n    const movePossible = this.isMovePossible(rows, finalIndex);\n    const beforeMoveHook = this.hot.runHooks('beforeRowMove', rows, finalIndex, dropIndex, movePossible);\n\n    this.#cachedDropIndex = undefined;\n\n    if (beforeMoveHook === false) {\n      return;\n    }\n\n    if (movePossible) {\n      this.hot.rowIndexMapper.moveIndexes(rows, finalIndex);\n    }\n\n    const movePerformed = movePossible && this.isRowOrderChanged(rows, finalIndex);\n\n    this.hot.runHooks('afterRowMove', rows, finalIndex, dropIndex, movePossible, movePerformed);\n\n    return movePerformed;\n  }\n\n  /**\n   * Drag a single row to drop index position.\n   *\n   * @param {number} row Visual row index to be dragged.\n   * @param {number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  dragRow(row, dropIndex) {\n    return this.dragRows([row], dropIndex);\n  }\n\n  /**\n   * Drag multiple rows to drop index position.\n   *\n   * @param {Array} rows Array of visual row indexes to be dragged.\n   * @param {number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  dragRows(rows, dropIndex) {\n    const finalIndex = this.countFinalIndex(rows, dropIndex);\n\n    this.#cachedDropIndex = dropIndex;\n\n    return this.moveRows(rows, finalIndex);\n  }\n\n  /**\n   * Indicates if it's possible to move rows to the desired position. Some of the actions aren't possible, i.e. You can’t move more than one element to the last position.\n   *\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @returns {boolean}\n   */\n  isMovePossible(movedRows, finalIndex) {\n    const length = this.hot.rowIndexMapper.getNotTrimmedIndexesLength();\n\n    // An attempt to transfer more rows to start destination than is possible (only when moving from the top to the bottom).\n    const tooHighDestinationIndex = movedRows.length + finalIndex > length;\n\n    const tooLowDestinationIndex = finalIndex < 0;\n    const tooLowMovedRowIndex = movedRows.some(movedRow => movedRow < 0);\n    const tooHighMovedRowIndex = movedRows.some(movedRow => movedRow >= length);\n\n    if (tooHighDestinationIndex || tooLowDestinationIndex || tooLowMovedRowIndex || tooHighMovedRowIndex) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Indicates if order of rows was changed.\n   *\n   * @private\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @returns {boolean}\n   */\n  isRowOrderChanged(movedRows, finalIndex) {\n    return movedRows.some((row, nrOfMovedElement) => row - nrOfMovedElement !== finalIndex);\n  }\n\n  /**\n   * Count the final row index from the drop index.\n   *\n   * @private\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} dropIndex Visual row index, being a drop index for the moved rows.\n   * @returns {number} Visual row index, being a start index for the moved rows.\n   */\n  countFinalIndex(movedRows, dropIndex) {\n    const numberOfRowsLowerThanDropIndex = arrayReduce(movedRows, (numberOfRows, currentRowIndex) => {\n      if (currentRowIndex < dropIndex) {\n        numberOfRows += 1;\n      }\n\n      return numberOfRows;\n    }, 0);\n\n    return dropIndex - numberOfRowsLowerThanDropIndex;\n  }\n\n  /**\n   * Gets the sum of the heights of rows in the provided range.\n   *\n   * @private\n   * @param {number} fromRow Visual row index.\n   * @param {number} toRow Visual row index.\n   * @returns {number}\n   */\n  getRowsHeight(fromRow, toRow) {\n    const rowMapper = this.hot.rowIndexMapper;\n    let rowsHeight = 0;\n\n    for (let visualRowIndex = fromRow; visualRowIndex <= toRow; visualRowIndex++) {\n      const renderableIndex = rowMapper.getRenderableFromVisualIndex(visualRowIndex);\n\n      if (renderableIndex !== null) {\n        rowsHeight += this.hot.view._wt.wtTable.getRowHeight(renderableIndex) || 23;\n      }\n    }\n\n    return rowsHeight;\n  }\n\n  /**\n   * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n   *\n   * @private\n   */\n  moveBySettingsOrLoad() {\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(pluginSettings)) {\n      this.moveRows(pluginSettings, 0);\n\n    } else if (pluginSettings !== undefined) {\n      const persistentState = this.persistentStateLoad();\n\n      if (persistentState.length) {\n        this.moveRows(persistentState, 0);\n      }\n    }\n  }\n\n  /**\n   * Checks if the provided row is in the fixedRowsTop section.\n   *\n   * @private\n   * @param {number} row Visual row index to check.\n   * @returns {boolean}\n   */\n  isFixedRowTop(row) {\n    return row < this.hot.getSettings().fixedRowsTop;\n  }\n\n  /**\n   * Checks if the provided row is in the fixedRowsBottom section.\n   *\n   * @private\n   * @param {number} row Visual row index to check.\n   * @returns {boolean}\n   */\n  isFixedRowBottom(row) {\n    return row > this.hot.countRows() - 1 - this.hot.getSettings().fixedRowsBottom;\n  }\n\n  /**\n   * Saves the manual row positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateSave\n   */\n  persistentStateSave() {\n    // The `PersistentState` plugin should be refactored.\n    this.hot.runHooks('persistentStateSave', 'manualRowMove', this.hot.rowIndexMapper.getIndexesSequence());\n  }\n\n  /**\n   * Loads the manual row positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateLoad\n   * @returns {Array} Stored state.\n   */\n  persistentStateLoad() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', 'manualRowMove', storedState);\n\n    return storedState.value ? storedState.value : [];\n  }\n\n  /**\n   * Prepares an array of indexes based on actual selection.\n   *\n   * @private\n   * @returns {Array}\n   */\n  prepareRowsToMoving() {\n    const selection = this.hot.getSelectedRangeLast();\n    const selectedRows = [];\n\n    if (!selection) {\n      return selectedRows;\n    }\n\n    const { from, to } = selection;\n    const start = Math.min(from.row, to.row);\n    const end = Math.max(from.row, to.row);\n\n    rangeEach(start, end, (i) => {\n      selectedRows.push(i);\n    });\n\n    return selectedRows;\n  }\n\n  /**\n   * Update the UI visual position.\n   *\n   * @private\n   */\n  refreshPositions() {\n    const coords = this.#target.coords;\n    const firstVisible = this.hot.view.getFirstFullyVisibleRow();\n    const lastVisible = this.hot.view.getLastFullyVisibleRow();\n    const countRows = this.hot.countRows();\n\n    if (this.isFixedRowTop(coords.row) && firstVisible > 0) {\n      this.hot.scrollViewportTo(this.hot.rowIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1));\n    }\n    if (this.isFixedRowBottom(coords.row) && lastVisible < countRows) {\n      this.hot.scrollViewportTo(\n        this.hot.rowIndexMapper.getNearestNotHiddenIndex(lastVisible + 1, 1), undefined, true);\n    }\n\n    const wtTable = this.hot.view._wt.wtTable;\n    const TD = this.#target.TD;\n    const rootElement = this.hot.rootElement;\n    const rootElementOffset = offset(rootElement);\n    const trimmingContainer = getTrimmingContainer(rootElement);\n    const tableScroll = wtTable.holder.scrollTop;\n    const trimmingContainerScroll = this.hot.rootWindow !== trimmingContainer ? trimmingContainer.scrollTop : 0;\n\n    const pixelsAbove = rootElementOffset.top - trimmingContainerScroll;\n    const pixelsRelToTableStart = this.#target.eventPageY - pixelsAbove + tableScroll;\n    const hiderHeight = wtTable.hider.offsetHeight;\n    const tbodyOffsetTop = wtTable.TBODY.offsetTop;\n    const backlightElemMarginTop = this.#backlight.getOffset().top;\n    const backlightElemHeight = this.#backlight.getSize().height;\n    const tdMiddle = (TD.offsetHeight / 2);\n    const tdHeight = TD.offsetHeight;\n    let tdStartPixel = this.hot.view.THEAD.offsetHeight + this.getRowsHeight(0, coords.row - 1);\n    const isBelowTable = pixelsRelToTableStart >= tdStartPixel + tdMiddle;\n\n    if (this.isFixedRowTop(coords.row)) {\n      tdStartPixel += this.hot.view._wt.wtOverlays.topOverlay.getOverlayOffset();\n    }\n\n    if (coords.row < 0) {\n      // if hover on colHeader\n      this.#target.row = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n    } else if (isBelowTable) {\n      // if hover on lower part of TD\n      this.#target.row = coords.row + 1;\n      // unfortunately first row is bigger than rest\n      tdStartPixel += coords.row === 0 ? tdHeight - 1 : tdHeight;\n\n    } else {\n      // elsewhere on table\n      this.#target.row = coords.row;\n    }\n\n    let backlightTop = pixelsRelToTableStart;\n    let guidelineTop = tdStartPixel;\n\n    if (pixelsRelToTableStart + backlightElemHeight + backlightElemMarginTop >= hiderHeight) {\n      // prevent display backlight below table\n      backlightTop = hiderHeight - backlightElemHeight - backlightElemMarginTop;\n\n    } else if (pixelsRelToTableStart + backlightElemMarginTop < tbodyOffsetTop) {\n      // prevent display above below table\n      backlightTop = tbodyOffsetTop + Math.abs(backlightElemMarginTop);\n    }\n\n    if (tdStartPixel >= hiderHeight - 1) {\n      // prevent display guideline below table\n      guidelineTop = hiderHeight - 1;\n    }\n\n    this.#backlight.setPosition(backlightTop);\n    this.#guideline.setPosition(guidelineTop);\n  }\n\n  /**\n   * Binds the events used by the plugin.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { documentElement } = this.hot.rootDocument;\n\n    this.eventManager.addEventListener(documentElement, 'mousemove', event => this.#onMouseMove(event));\n    this.eventManager.addEventListener(documentElement, 'mouseup', () => this.#onMouseUp());\n  }\n\n  /**\n   * Unbinds the events used by the plugin.\n   *\n   * @private\n   */\n  unregisterEvents() {\n    this.eventManager.clear();\n  }\n\n  /**\n   * Change the behavior of selection / dragging.\n   *\n   * @param {MouseEvent} event `mousedown` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    const { wtTable, wtViewport } = this.hot.view._wt;\n    const isHeaderSelection = this.hot.selection.isSelectedByRowHeader();\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection || !isHeaderSelection || this.#pressed || event.button !== 0) {\n      this.#pressed = false;\n      this.#rowsToMove.length = 0;\n      removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n\n      return;\n    }\n\n    const guidelineIsNotReady = this.#guideline.isBuilt() && !this.#guideline.isAppended();\n    const backlightIsNotReady = this.#backlight.isBuilt() && !this.#backlight.isAppended();\n\n    if (guidelineIsNotReady && backlightIsNotReady) {\n      this.#guideline.appendTo(wtTable.hider);\n      this.#backlight.appendTo(wtTable.hider);\n    }\n\n    const { from, to } = selection;\n    const start = Math.min(from.row, to.row);\n    const end = Math.max(from.row, to.row);\n\n    if (coords.col < 0 && (coords.row >= start && coords.row <= end)) {\n      controller.row = true;\n      this.#pressed = true;\n\n      this.#target.eventPageY = event.pageY;\n      this.#target.coords = coords;\n      this.#target.TD = TD;\n      this.#rowsToMove = this.prepareRowsToMoving();\n\n      const leftPos = wtTable.holder.scrollLeft + wtViewport.getRowHeaderWidth();\n      const topOffset = this.getRowsHeight(start, coords.row - 1) + event.offsetY;\n\n      this.#backlight.setPosition(null, leftPos);\n      this.#backlight.setSize(wtTable.hider.offsetWidth - leftPos, this.getRowsHeight(start, end));\n      this.#backlight.setOffset(-topOffset, null);\n\n      addClass(this.hot.rootElement, CSS_ON_MOVING);\n\n      this.refreshPositions();\n\n    } else {\n      removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n      this.#pressed = false;\n      this.#rowsToMove.length = 0;\n    }\n  }\n\n  /**\n   * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n   *\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  #onMouseMove(event) {\n    if (!this.#pressed) {\n      return;\n    }\n\n    this.#target.eventPageY = event.pageY;\n    this.refreshPositions();\n  }\n\n  /**\n   * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n   *\n   * @param {MouseEvent} event `mouseover` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseOver(event, coords, TD, controller) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n\n    if (!selectedRange || !this.#pressed) {\n      return;\n    }\n\n    if (this.#rowsToMove.indexOf(coords.row) > -1) {\n      removeClass(this.hot.rootElement, CSS_SHOW_UI);\n\n    } else {\n      addClass(this.hot.rootElement, CSS_SHOW_UI);\n    }\n\n    controller.row = true;\n    controller.column = true;\n    controller.cell = true;\n    this.#target.coords = coords;\n    this.#target.TD = TD;\n  }\n\n  /**\n   * `onMouseUp` hook callback.\n   */\n  #onMouseUp() {\n    const target = this.#target.row;\n    const rowsLen = this.#rowsToMove.length;\n\n    this.#pressed = false;\n\n    removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n    if (this.hot.selection.isSelectedByRowHeader()) {\n      addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n    }\n\n    if (rowsLen < 1 || target === undefined) {\n      return;\n    }\n\n    const firstMovedVisualRow = this.#rowsToMove[0];\n    const firstMovedPhysicalRow = this.hot.toPhysicalRow(firstMovedVisualRow);\n    const movePerformed = this.dragRows(this.#rowsToMove, target);\n\n    this.#rowsToMove.length = 0;\n\n    if (movePerformed === true) {\n      this.persistentStateSave();\n      this.hot.render();\n      this.hot.view.adjustElementsSize();\n\n      const selectionStart = this.hot.toVisualRow(firstMovedPhysicalRow);\n      const selectionEnd = selectionStart + rowsLen - 1;\n\n      this.hot.selectRows(selectionStart, selectionEnd);\n    }\n  }\n\n  /**\n   * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n   */\n  #onAfterScrollHorizontally() {\n    const wtTable = this.hot.view._wt.wtTable;\n    const headerWidth = this.hot.view._wt.wtViewport.getRowHeaderWidth();\n    const scrollLeft = wtTable.holder.scrollLeft;\n    const posLeft = headerWidth + scrollLeft;\n\n    this.#backlight.setPosition(null, posLeft);\n    this.#backlight.setSize(wtTable.hider.offsetWidth - posLeft);\n  }\n\n  /**\n   * Builds the plugin's UI.\n   *\n   * @private\n   */\n  buildPluginUI() {\n    this.#backlight.build();\n    this.#guideline.build();\n  }\n\n  /**\n   * Callback for the `afterLoadData` hook.\n   */\n  #onAfterLoadData() {\n    this.moveBySettingsOrLoad();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.destroy();\n  }\n}\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualRowMove--backlight';\n\n/**\n * @private\n * @class BacklightUI\n */\nclass BacklightUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default BacklightUI;\n","const STATE_INITIALIZED = 0;\nconst STATE_BUILT = 1;\nconst STATE_APPENDED = 2;\nconst UNIT = 'px';\n\n/**\n * @private\n */\nclass BaseUI {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * DOM element representing the ui element.\n   *\n   * @type {HTMLElement}\n   * @private\n   */\n  _element = null;\n  /**\n   * Flag which determines build state of element.\n   *\n   * @type {number}\n   */\n  state = STATE_INITIALIZED;\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n  appendTo(wrapper) {\n    wrapper.appendChild(this._element);\n\n    this.state = STATE_APPENDED;\n  }\n\n  /**\n   * Method for create UI element. Only create, without append to table.\n   */\n  build() {\n    if (this.state !== STATE_INITIALIZED) {\n      return;\n    }\n\n    this._element = this.hot.rootDocument.createElement('div');\n    this.state = STATE_BUILT;\n  }\n\n  /**\n   * Method for remove UI element.\n   */\n  destroy() {\n    if (this.isAppended()) {\n      this._element.parentElement.removeChild(this._element);\n    }\n\n    this._element = null;\n    this.state = STATE_INITIALIZED;\n  }\n\n  /**\n   * Check if UI element are appended.\n   *\n   * @returns {boolean}\n   */\n  isAppended() {\n    return this.state === STATE_APPENDED;\n  }\n\n  /**\n   * Check if UI element are built.\n   *\n   * @returns {boolean}\n   */\n  isBuilt() {\n    return this.state >= STATE_BUILT;\n  }\n\n  /**\n   * Setter for position.\n   *\n   * @param {number} top New top position of the element.\n   * @param {number} left New left position of the element.\n   */\n  setPosition(top, left) {\n    if (top !== undefined) {\n      this._element.style.top = top + UNIT;\n    }\n    if (left !== undefined) {\n      this._element.style.left = left + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains left and top position of the element.\n   */\n  getPosition() {\n    return {\n      top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n      left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element size.\n   *\n   * @param {number} width New width of the element.\n   * @param {number} height New height of the element.\n   */\n  setSize(width, height) {\n    if (width) {\n      this._element.style.width = width + UNIT;\n    }\n    if (height) {\n      this._element.style.height = height + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains height and width of the element.\n   */\n  getSize() {\n    return {\n      width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n      height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n   *\n   * @param {number} top New margin top of the element.\n   * @param {number} left New margin left of the element.\n   */\n  setOffset(top, left) {\n    if (top) {\n      this._element.style.marginTop = top + UNIT;\n    }\n    if (left) {\n      this._element.style.marginLeft = left + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element offset.\n   *\n   * @returns {object} Object contains top and left offset of the element.\n   */\n  getOffset() {\n    return {\n      top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n      left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n    };\n  }\n}\n\nexport default BaseUI;\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualRowMove--guideline';\n\n/**\n * @private\n * @class GuidelineUI\n */\nclass GuidelineUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default GuidelineUI;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualRowResize,\n} from './manualRowResize';\n","import { BasePlugin } from '../base';\nimport { addClass, closest, hasClass, removeClass, outerWidth, isDetached } from '../../helpers/dom/element';\nimport { arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\nimport { DEFAULT_ROW_HEIGHT } from '../../3rdparty/walkontable/src';\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualColumnResize.js\n\nexport const PLUGIN_KEY = 'manualRowResize';\nexport const PLUGIN_PRIORITY = 30;\nconst PERSISTENT_STATE_KEY = 'manualRowHeights';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualRowResize\n * @class ManualRowResize\n *\n * @description\n * This plugin allows to change rows height. To make rows height persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired height of the row.\n * - guide - the helper guide that shows the desired height as a horizontal guide.\n */\nexport class ManualRowResize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * @type {HTMLTableCellElement}\n   */\n  #currentTH = null;\n  /**\n   * @type {number}\n   */\n  #currentRow = null;\n  /**\n   * @type {number[]}\n   */\n  #selectedRows = [];\n  /**\n   * @type {number}\n   */\n  #currentHeight = null;\n  /**\n   * @type {number}\n   */\n  #newSize = null;\n  /**\n   * @type {number}\n   */\n  #startY = null;\n  /**\n   * @type {number}\n   */\n  #startHeight = null;\n  /**\n   * @type {number}\n   */\n  #startOffset = null;\n  /**\n   * @type {HTMLElement}\n   */\n  #handle = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {HTMLElement}\n   */\n  #guide = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {boolean}\n   */\n  #pressed = false;\n  /**\n   * @type {boolean}\n   */\n  #isTriggeredByRMB = false;\n  /**\n   * @type {number}\n   */\n  #dblclick = 0;\n  /**\n   * @type {number}\n   */\n  #autoresizeTimeout = null;\n  /**\n   * PhysicalIndexToValueMap to keep and track widths for physical row indexes.\n   *\n   * @type {PhysicalIndexToValueMap}\n   */\n  #rowHeightsMap;\n  /**\n   * Private pool to save configuration from updateSettings.\n   *\n   * @type {object}\n   */\n  #config;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n\n    addClass(this.#handle, 'manualRowResizer');\n    addClass(this.#guide, 'manualRowResizerGuide');\n  }\n\n  /**\n   * @private\n   * @returns {string}\n   */\n  get inlineDir() {\n    return this.hot.isRtl() ? 'right' : 'left';\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualRowResize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.#rowHeightsMap = new IndexToValueMap();\n    this.#rowHeightsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.rowIndexMapper.registerMap(this.pluginName, this.#rowHeightsMap);\n\n    this.addHook('modifyRowHeight', (height, row) => this.#onModifyRowHeight(height, row));\n\n    this.bindEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualRowResize`](@/api/options.md#manualrowresize)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#config = this.#rowHeightsMap.getValues();\n\n    this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    super.disablePlugin();\n  }\n\n  /**\n   * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be\n   * enabled).\n   *\n   * @fires Hooks#persistentStateSave\n   */\n  saveManualRowHeights() {\n    this.hot.runHooks('persistentStateSave', PERSISTENT_STATE_KEY, this.#rowHeightsMap.getValues());\n  }\n\n  /**\n   * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option\n   * has be enabled).\n   *\n   * @returns {Array}\n   * @fires Hooks#persistentStateLoad\n   */\n  loadManualRowHeights() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', PERSISTENT_STATE_KEY, storedState);\n\n    return storedState.value;\n  }\n\n  /**\n   * Sets the new height for specified row index.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} height Row height.\n   * @returns {number} Returns new height.\n   */\n  setManualSize(row, height) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const newHeight = Math.max(height, DEFAULT_ROW_HEIGHT);\n\n    this.#rowHeightsMap.setValueAtIndex(physicalRow, newHeight);\n\n    return newHeight;\n  }\n\n  /**\n   * Returns the last desired row height set manually with the resize handle.\n   *\n   * @returns {number} The last desired row height.\n   */\n  getLastDesiredRowHeight() {\n    return this.#currentHeight;\n  }\n\n  /**\n   * Sets the resize handle position.\n   *\n   * @private\n   * @param {HTMLCellElement} TH TH HTML element.\n   */\n  setupHandlePosition(TH) {\n    this.#currentTH = TH;\n\n    const { view } = this.hot;\n    const { _wt: wt } = view;\n    const cellCoords = wt.wtTable.getCoords(this.#currentTH);\n    const row = cellCoords.row;\n\n    // Ignore row headers.\n    if (row < 0) {\n      return;\n    }\n\n    const headerWidth = outerWidth(this.#currentTH);\n    const box = this.#currentTH.getBoundingClientRect();\n    // Read \"fixedRowsTop\" and \"fixedRowsBottom\" through the Walkontable as in that context, the fixed\n    // rows are modified (reduced by the number of hidden rows) by TableView module.\n    const fixedRowTop = row < wt.getSetting('fixedRowsTop');\n    const fixedRowBottom = row >= view.countNotHiddenRowIndexes(0, 1) - wt.getSetting('fixedRowsBottom');\n    let relativeHeaderPosition;\n\n    if (fixedRowTop) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .topInlineStartCornerOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n\n    } else if (fixedRowBottom) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .bottomInlineStartCornerOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    // If the TH is not a child of the top-left/bottom-left overlay, recalculate using\n    // the left overlay - as this overlay contains the rest of the headers.\n    if (!relativeHeaderPosition) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .inlineStartOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    this.#currentRow = this.hot.rowIndexMapper.getVisualFromRenderableIndex(row);\n    this.#selectedRows = [];\n\n    const isFullRowSelected = this.hot.selection.isSelectedByCorner() || this.hot.selection.isSelectedByRowHeader();\n\n    if (this.hot.selection.isSelected() && isFullRowSelected) {\n      const selectionRanges = this.hot.getSelectedRange();\n\n      arrayEach(selectionRanges, (selectionRange) => {\n        const fromRow = selectionRange.getTopStartCorner().row;\n        const toRow = selectionRange.getBottomStartCorner().row;\n\n        // Add every selected row for resize action.\n        rangeEach(fromRow, toRow, (rowIndex) => {\n          if (!this.#selectedRows.includes(rowIndex)) {\n            this.#selectedRows.push(rowIndex);\n          }\n        });\n      });\n    }\n\n    // Resizing element beyond the current selection (also when there is no selection).\n    if (!this.#selectedRows.includes(this.#currentRow)) {\n      this.#selectedRows = [this.#currentRow];\n    }\n\n    this.#startOffset = relativeHeaderPosition.top - 6;\n    this.#startHeight = parseInt(box.height, 10);\n\n    this.#handle.style.top = `${this.#startOffset + this.#startHeight}px`;\n    this.#handle.style[this.inlineDir] = `${relativeHeaderPosition.start}px`;\n\n    this.#handle.style.width = `${headerWidth}px`;\n    this.hot.rootElement.appendChild(this.#handle);\n  }\n\n  /**\n   * Refresh the resize handle position.\n   *\n   * @private\n   */\n  refreshHandlePosition() {\n    this.#handle.style.top = `${this.#startOffset + this.#currentHeight}px`;\n  }\n\n  /**\n   * Sets the resize guide position.\n   *\n   * @private\n   */\n  setupGuidePosition() {\n    const handleWidth = parseInt(outerWidth(this.#handle), 10);\n    const handleEndPosition = parseInt(this.#handle.style[this.inlineDir], 10) + handleWidth;\n    const maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10);\n\n    addClass(this.#handle, 'active');\n    addClass(this.#guide, 'active');\n\n    this.#guide.style.top = this.#handle.style.top;\n    this.#guide.style[this.inlineDir] = `${handleEndPosition}px`;\n    this.#guide.style.width = `${maximumVisibleElementWidth - handleWidth}px`;\n    this.hot.rootElement.appendChild(this.#guide);\n  }\n\n  /**\n   * Refresh the resize guide position.\n   *\n   * @private\n   */\n  refreshGuidePosition() {\n    this.#guide.style.top = this.#handle.style.top;\n  }\n\n  /**\n   * Hides both the resize handle and resize guide.\n   *\n   * @private\n   */\n  hideHandleAndGuide() {\n    removeClass(this.#handle, 'active');\n    removeClass(this.#guide, 'active');\n  }\n\n  /**\n   * Checks if provided element is considered as a row header.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {boolean}\n   */\n  checkIfRowHeader(element) {\n    const tbody = closest(element, ['TBODY'], this.hot.rootElement);\n    const {\n      inlineStartOverlay,\n      topInlineStartCornerOverlay,\n      bottomInlineStartCornerOverlay,\n    } = this.hot.view._wt.wtOverlays;\n\n    return [\n      inlineStartOverlay.clone.wtTable.TBODY,\n      topInlineStartCornerOverlay.clone.wtTable.TBODY,\n      bottomInlineStartCornerOverlay.clone.wtTable.TBODY,\n    ].includes(tbody);\n  }\n\n  /**\n   * Gets the TH element from the provided element.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {HTMLElement}\n   */\n  getClosestTHParent(element) {\n    if (element.tagName !== 'TABLE') {\n      if (element.tagName === 'TH') {\n        return element;\n      }\n\n      return this.getClosestTHParent(element.parentNode);\n\n    }\n\n    return null;\n  }\n\n  /**\n   * Returns the actual height for the provided row index.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @returns {number} Actual row height.\n   */\n  getActualRowHeight(row) {\n    // TODO: this should utilize `this.hot.getRowHeight` after it's fixed and working properly.\n    const walkontableHeight = this.hot.view._wt.wtTable.getRowHeight(row);\n\n    if (walkontableHeight !== undefined && this.#newSize < walkontableHeight) {\n      return walkontableHeight;\n    }\n\n    return this.#newSize;\n  }\n\n  /**\n   * 'mouseover' event callback - set the handle position.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseOver(event) {\n    // Workaround for #6926 - if the `event.target` is temporarily detached, we can skip this callback and wait for\n    // the next `onmouseover`.\n    if (isDetached(event.target)) {\n      return;\n    }\n\n    // A \"mouseover\" action is triggered right after executing \"contextmenu\" event. It should be ignored.\n    if (this.#isTriggeredByRMB === true) {\n      return;\n    }\n\n    if (this.checkIfRowHeader(event.target)) {\n      const th = this.getClosestTHParent(event.target);\n\n      if (th) {\n        if (!this.#pressed) {\n          this.setupHandlePosition(th);\n        }\n      }\n    }\n  }\n\n  /**\n   * Auto-size row after doubleclick - callback.\n   *\n   * @private\n   * @fires Hooks#beforeRowResize\n   * @fires Hooks#afterRowResize\n   */\n  afterMouseDownTimeout() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const resize = (row, forceRender) => {\n      const hookNewSize = this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, true);\n\n      if (hookNewSize !== undefined) {\n        this.#newSize = hookNewSize;\n      }\n\n      this.setManualSize(row, this.#newSize); // double click sets auto row size\n\n      this.hot.runHooks('afterRowResize', this.getActualRowHeight(row), row, true);\n\n      if (forceRender) {\n        render();\n      }\n    };\n\n    if (this.#dblclick >= 2) {\n      const selectedRowsLength = this.#selectedRows.length;\n\n      if (selectedRowsLength > 1) {\n        arrayEach(this.#selectedRows, (selectedRow) => {\n          resize(selectedRow);\n        });\n        render();\n      } else {\n        arrayEach(this.#selectedRows, (selectedRow) => {\n          resize(selectedRow, true);\n        });\n      }\n    }\n    this.#dblclick = 0;\n    this.#autoresizeTimeout = null;\n  }\n\n  /**\n   * 'mousedown' event callback.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseDown(event) {\n    if (hasClass(event.target, 'manualRowResizer')) {\n      this.setupHandlePosition(this.#currentTH);\n      this.setupGuidePosition();\n      this.#pressed = true;\n\n      if (this.#autoresizeTimeout === null) {\n        this.#autoresizeTimeout = setTimeout(() => this.afterMouseDownTimeout(), 500);\n\n        this.hot._registerTimeout(this.#autoresizeTimeout);\n      }\n\n      this.#dblclick += 1;\n      this.#startY = event.pageY;\n      this.#newSize = this.#startHeight;\n    }\n  }\n\n  /**\n   * 'mousemove' event callback - refresh the handle and guide positions, cache the new row height.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseMove(event) {\n    if (this.#pressed) {\n      this.#currentHeight = this.#startHeight + (event.pageY - this.#startY);\n\n      arrayEach(this.#selectedRows, (selectedRow) => {\n        this.#newSize = this.setManualSize(selectedRow, this.#currentHeight);\n      });\n\n      this.refreshHandlePosition();\n      this.refreshGuidePosition();\n    }\n  }\n\n  /**\n   * 'mouseup' event callback - apply the row resizing.\n   *\n   * @fires Hooks#beforeRowResize\n   * @fires Hooks#afterRowResize\n   */\n  #onMouseUp() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const runHooks = (row, forceRender) => {\n      this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, false);\n\n      if (forceRender) {\n        render();\n      }\n\n      this.saveManualRowHeights();\n\n      this.hot.runHooks('afterRowResize', this.getActualRowHeight(row), row, false);\n    };\n\n    if (this.#pressed) {\n      this.hideHandleAndGuide();\n      this.#pressed = false;\n\n      if (this.#newSize !== this.#startHeight) {\n        const selectedRowsLength = this.#selectedRows.length;\n\n        if (selectedRowsLength > 1) {\n          arrayEach(this.#selectedRows, (selectedRow) => {\n            runHooks(selectedRow);\n          });\n          render();\n        } else {\n          arrayEach(this.#selectedRows, (selectedRow) => {\n            runHooks(selectedRow, true);\n          });\n        }\n      }\n\n      this.setupHandlePosition(this.#currentTH);\n    }\n  }\n\n  /**\n   * Callback for \"contextmenu\" event triggered on element showing move handle. It removes handle and guide elements.\n   */\n  #onContextMenu() {\n    this.hideHandleAndGuide();\n    this.hot.rootElement.removeChild(this.#handle);\n    this.hot.rootElement.removeChild(this.#guide);\n\n    this.#pressed = false;\n    this.#isTriggeredByRMB = true;\n\n    // There is thrown \"mouseover\" event right after opening a context menu. This flag inform that handle\n    // shouldn't be drawn just after removing it.\n    this.hot._registerImmediate(() => {\n      this.#isTriggeredByRMB = false;\n    });\n  }\n\n  /**\n   * Binds the mouse events.\n   *\n   * @private\n   */\n  bindEvents() {\n    const { rootElement, rootWindow } = this.hot;\n\n    this.eventManager.addEventListener(rootElement, 'mouseover', e => this.#onMouseOver(e));\n    this.eventManager.addEventListener(rootElement, 'mousedown', e => this.#onMouseDown(e));\n    this.eventManager.addEventListener(rootWindow, 'mousemove', e => this.#onMouseMove(e));\n    this.eventManager.addEventListener(rootWindow, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(this.#handle, 'contextmenu', () => this.#onContextMenu());\n  }\n\n  /**\n   * Modifies the provided row height, based on the plugin settings.\n   *\n   * @param {number} height Row height.\n   * @param {number} row Visual row index.\n   * @returns {number}\n   */\n  #onModifyRowHeight(height, row) {\n    let newHeight = height;\n\n    if (this.enabled) {\n      const physicalRow = this.hot.toPhysicalRow(row);\n      const rowHeight = this.#rowHeightsMap.getValueAtIndex(physicalRow);\n\n      if (this.hot.getSettings()[PLUGIN_KEY] && rowHeight) {\n        newHeight = rowHeight;\n      }\n    }\n\n    return newHeight;\n  }\n\n  /**\n   * Callback to call on map's `init` local hook.\n   */\n  #onMapInit() {\n    const initialSetting = this.hot.getSettings()[PLUGIN_KEY];\n    const loadedManualRowHeights = this.loadManualRowHeights();\n\n    this.hot.batchExecution(() => {\n      if (typeof loadedManualRowHeights !== 'undefined') {\n        loadedManualRowHeights.forEach((height, index) => {\n          this.#rowHeightsMap.setValueAtIndex(index, height);\n        });\n\n      } else if (Array.isArray(initialSetting)) {\n\n        initialSetting.forEach((height, index) => {\n          this.#rowHeightsMap.setValueAtIndex(index, height);\n        });\n\n        this.#config = initialSetting;\n\n      } else if (initialSetting === true && Array.isArray(this.#config)) {\n        this.#config.forEach((height, index) => {\n          this.#rowHeightsMap.setValueAtIndex(index, height);\n        });\n      }\n    }, true);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  MergeCells,\n} from './mergeCells';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport MergedCellsCollection from './cellsCollection';\nimport MergedCellCoords from './cellCoords';\nimport AutofillCalculations from './calculations/autofill';\nimport SelectionCalculations from './calculations/selection';\nimport toggleMergeItem from './contextMenuItem/toggleMerge';\nimport { arrayEach } from '../../helpers/array';\nimport { isObject } from '../../helpers/object';\nimport { warn } from '../../helpers/console';\nimport { rangeEach } from '../../helpers/number';\nimport './mergeCells.css';\nimport { getStyle } from '../../helpers/dom/element';\nimport { isChrome } from '../../helpers/browser';\nimport { FocusOrder } from './focusOrder';\nimport { createMergeCellRenderer } from './renderer';\n\nHooks.getSingleton().register('beforeMergeCells');\nHooks.getSingleton().register('afterMergeCells');\nHooks.getSingleton().register('beforeUnmergeCells');\nHooks.getSingleton().register('afterUnmergeCells');\n\nexport const PLUGIN_KEY = 'mergeCells';\nexport const PLUGIN_PRIORITY = 150;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin MergeCells\n * @class MergeCells\n *\n * @description\n * Plugin, which allows merging cells in the table (using the initial configuration, API or context menu).\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *  data: getData(),\n *  mergeCells: [\n *    {row: 0, col: 3, rowspan: 3, colspan: 3},\n *    {row: 2, col: 6, rowspan: 2, colspan: 2},\n *    {row: 4, col: 8, rowspan: 3, colspan: 3}\n *  ],\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   // enable plugin\n *   mergeCells={[\n *    {row: 0, col: 3, rowspan: 3, colspan: 3},\n *    {row: 2, col: 6, rowspan: 2, colspan: 2},\n *    {row: 4, col: 8, rowspan: 3, colspan: 3}\n *   ]}\n * />\n * ```\n * :::\n */\nexport class MergeCells extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * A container for all the merged cells.\n   *\n   * @private\n   * @type {MergedCellsCollection}\n   */\n  mergedCellsCollection = null;\n  /**\n   * Instance of the class responsible for all the autofill-related calculations.\n   *\n   * @private\n   * @type {AutofillCalculations}\n   */\n  autofillCalculations = null;\n  /**\n   * Instance of the class responsible for the selection-related calculations.\n   *\n   * @private\n   * @type {SelectionCalculations}\n   */\n  selectionCalculations = null;\n  /**\n   * The holder for the last selected focus coordinates. This allows keeping the correct coordinates in cases after the\n   * focus is moved out of the merged cell.\n   *\n   * @type {CellCoords}\n   */\n  #lastSelectedFocus = null;\n  /**\n   * The last used transformation delta.\n   *\n   * @type {{ row: number, col: number }}\n   */\n  #lastFocusDelta = { row: 0, col: 0 };\n  /**\n   * The module responsible for providing the correct focus order (vertical and horizontal) within a selection that\n   * contains merged cells.\n   *\n   * @type {FocusOrder}\n   */\n  #focusOrder = new FocusOrder({\n    mergedCellsGetter: (row, column) => this.mergedCellsCollection.get(row, column),\n    rowIndexMapper: this.hot.rowIndexMapper,\n    columnIndexMapper: this.hot.columnIndexMapper,\n  });\n  /**\n   * The cell renderer responsible for rendering the merged cells.\n   *\n   * @type {{before: Function, after: Function}}\n   */\n  #cellRenderer = createMergeCellRenderer(this);\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link MergeCells#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.mergedCellsCollection = new MergedCellsCollection(this);\n    this.autofillCalculations = new AutofillCalculations(this);\n    this.selectionCalculations = new SelectionCalculations(this);\n\n    this.addHook('afterInit', (...args) => this.#onAfterInit(...args));\n    this.addHook('modifyTransformFocus', (...args) => this.#onModifyTransformFocus(...args));\n    this.addHook('modifyTransformStart', (...args) => this.#onModifyTransformStart(...args));\n    this.addHook('modifyTransformEnd', (...args) => this.#onModifyTransformEnd(...args));\n    this.addHook('beforeSelectionHighlightSet', (...args) => this.#onBeforeSelectionHighlightSet(...args));\n    this.addHook('beforeSetRangeStart', (...args) => this.#onBeforeSetRangeStart(...args));\n    this.addHook('beforeSetRangeStartOnly', (...args) => this.#onBeforeSetRangeStart(...args));\n    this.addHook('beforeSelectionFocusSet', (...args) => this.#onBeforeSelectionFocusSet(...args));\n    this.addHook('afterSelectionFocusSet', (...args) => this.#onAfterSelectionFocusSet(...args));\n    this.addHook('afterSelectionEnd', (...args) => this.#onAfterSelectionEnd(...args));\n    this.addHook('modifyGetCellCoords', (...args) => this.#onModifyGetCellCoords(...args));\n    this.addHook('afterIsMultipleSelection', (...args) => this.#onAfterIsMultipleSelection(...args));\n    this.addHook('afterRenderer', (...args) => this.#cellRenderer.after(...args));\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#addMergeActionsToContextMenu(...args));\n    this.addHook('afterGetCellMeta', (...args) => this.#onAfterGetCellMeta(...args));\n    this.addHook('afterViewportRowCalculatorOverride',\n      (...args) => this.#onAfterViewportRowCalculatorOverride(...args));\n    this.addHook('afterViewportColumnCalculatorOverride',\n      (...args) => this.#onAfterViewportColumnCalculatorOverride(...args));\n    this.addHook('modifyAutofillRange', (...args) => this.#onModifyAutofillRange(...args));\n    this.addHook('afterCreateCol', (...args) => this.#onAfterCreateCol(...args));\n    this.addHook('afterRemoveCol', (...args) => this.#onAfterRemoveCol(...args));\n    this.addHook('afterCreateRow', (...args) => this.#onAfterCreateRow(...args));\n    this.addHook('afterRemoveRow', (...args) => this.#onAfterRemoveRow(...args));\n    this.addHook('afterChange', (...args) => this.#onAfterChange(...args));\n    this.addHook('beforeDrawBorders', (...args) => this.#onBeforeDrawAreaBorders(...args));\n    this.addHook('afterDrawSelection', (...args) => this.#onAfterDrawSelection(...args));\n    this.addHook('beforeRemoveCellClassNames', (...args) => this.#onBeforeRemoveCellClassNames(...args));\n    this.addHook('beforeBeginEditing', (...args) => this.#onBeforeBeginEditing(...args));\n    this.addHook('modifyRowHeightByOverlayName', (...args) => this.#onModifyRowHeightByOverlayName(...args));\n    this.addHook('beforeUndoStackChange', (action, source) => {\n      if (source === 'MergeCells') {\n        return false;\n      }\n    });\n\n    this.registerShortcuts();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.clearCollections();\n    this.unregisterShortcuts();\n    this.hot.render();\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the\n   * following configuration options:\n   *  - [`mergeCells`](@/api/options.md#mergecells)\n   */\n  updatePlugin() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.generateFromSettings(settings);\n\n    super.updatePlugin();\n  }\n\n  /**\n   * If the browser is recognized as Chrome, force an additional repaint to prevent showing the effects of a Chrome bug.\n   *\n   * Issue described in https://github.com/handsontable/dev-handsontable/issues/521.\n   *\n   * @private\n   */\n  ifChromeForceRepaint() {\n    if (!isChrome()) {\n      return;\n    }\n\n    const rowsToRefresh = [];\n    let rowIndexesToRefresh = [];\n\n    this.mergedCellsCollection.mergedCells.forEach((mergedCell) => {\n      const { row, rowspan } = mergedCell;\n\n      for (let r = row + 1; r < row + rowspan; r++) {\n        rowIndexesToRefresh.push(r);\n      }\n    });\n\n    // Remove duplicates\n    rowIndexesToRefresh = [...new Set(rowIndexesToRefresh)];\n\n    rowIndexesToRefresh.forEach((rowIndex) => {\n      const renderableRowIndex = this.hot.rowIndexMapper.getRenderableFromVisualIndex(rowIndex);\n\n      this.hot.view._wt.wtOverlays.getOverlays(true).map(\n        overlay => (overlay?.name === 'master' ? overlay : overlay.clone.wtTable)\n      ).forEach((wtTableRef) => {\n        const rowToRefresh = wtTableRef.getRow(renderableRowIndex);\n\n        if (rowToRefresh) {\n          // Modify the TR's `background` property to later modify it asynchronously.\n          // The background color is getting modified only with the alpha, so the change should not be visible (and is\n          // covered by the TDs' background color).\n          rowToRefresh.style.background =\n            getStyle(rowToRefresh, 'backgroundColor').replace(')', ', 0.99)');\n\n          rowsToRefresh.push(rowToRefresh);\n        }\n      });\n    });\n\n    // Asynchronously revert the TRs' `background` property to force a fresh repaint.\n    this.hot._registerTimeout(() => {\n      rowsToRefresh.forEach((rowElement) => {\n        rowElement.style.background =\n          getStyle(rowElement, 'backgroundColor').replace(', 0.99)', ')');\n      });\n    }, 1);\n  }\n\n  /**\n   * Validates a single setting object, represented by a single merged cell information object.\n   *\n   * @private\n   * @param {object} setting An object with `row`, `col`, `rowspan` and `colspan` properties.\n   * @returns {boolean}\n   */\n  validateSetting(setting) {\n    if (!setting) {\n      return false;\n    }\n\n    if (MergedCellCoords.containsNegativeValues(setting)) {\n      warn(MergedCellCoords.NEGATIVE_VALUES_WARNING(setting));\n\n      return false;\n    }\n    if (MergedCellCoords.isOutOfBounds(setting, this.hot.countRows(), this.hot.countCols())) {\n      warn(MergedCellCoords.IS_OUT_OF_BOUNDS_WARNING(setting));\n\n      return false;\n    }\n    if (MergedCellCoords.isSingleCell(setting)) {\n      warn(MergedCellCoords.IS_SINGLE_CELL(setting));\n\n      return false;\n    }\n    if (MergedCellCoords.containsZeroSpan(setting)) {\n      warn(MergedCellCoords.ZERO_SPAN_WARNING(setting));\n\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Generates the merged cells from the settings provided to the plugin.\n   *\n   * @private\n   * @param {Array|boolean} settings The settings provided to the plugin.\n   */\n  generateFromSettings(settings) {\n    if (!Array.isArray(settings)) {\n      return;\n    }\n\n    const validSettings = settings\n      .filter(mergeCellInfo => this.validateSetting(mergeCellInfo));\n    const nonOverlappingSettings = this.mergedCellsCollection\n      .filterOverlappingMergeCells(validSettings);\n\n    const populatedNulls = [];\n\n    nonOverlappingSettings.forEach((mergeCellInfo) => {\n      const { row, col, rowspan, colspan } = mergeCellInfo;\n      const from = this.hot._createCellCoords(row, col);\n      const to = this.hot._createCellCoords(row + rowspan - 1, col + colspan - 1);\n      const mergeRange = this.hot._createCellRange(from, from, to);\n\n      // Merging without data population.\n      this.mergeRange(mergeRange, true, true);\n\n      for (let r = row; r < row + rowspan; r++) {\n        for (let c = col; c < col + colspan; c++) {\n          // Not resetting a cell representing a merge area's value.\n          if (r !== row || c !== col) {\n            populatedNulls.push([r, c, null]);\n          }\n        }\n      }\n    });\n\n    // There are no merged cells. Thus, no data population is needed.\n    if (populatedNulls.length === 0) {\n      return;\n    }\n\n    // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.\n    this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);\n  }\n\n  /**\n   * Clears the merged cells from the merged cell container.\n   */\n  clearCollections() {\n    this.mergedCellsCollection.clear();\n  }\n\n  /**\n   * Returns `true` if a range is mergeable.\n   *\n   * @private\n   * @param {object} newMergedCellInfo Merged cell information object to test.\n   * @param {boolean} [auto=false] `true` if triggered at initialization.\n   * @returns {boolean}\n   */\n  canMergeRange(newMergedCellInfo, auto = false) {\n    return auto ? true : this.validateSetting(newMergedCellInfo);\n  }\n\n  /**\n   * Merges the selection provided as a cell range.\n   *\n   * @param {CellRange} [cellRange] Selection cell range.\n   */\n  mergeSelection(cellRange = this.hot.getSelectedRangeLast()) {\n    if (!cellRange) {\n      return;\n    }\n\n    cellRange.setDirection(this.hot.isRtl() ? 'NE-SW' : 'NW-SE');\n\n    const { from, to } = cellRange;\n\n    this.unmergeRange(cellRange, true);\n    this.mergeRange(cellRange);\n    this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n  }\n\n  /**\n   * Unmerges the selection provided as a cell range.\n   *\n   * @param {CellRange} [cellRange] Selection cell range.\n   */\n  unmergeSelection(cellRange = this.hot.getSelectedRangeLast()) {\n    if (!cellRange) {\n      return;\n    }\n\n    const { from, to } = cellRange;\n\n    this.unmergeRange(cellRange, true);\n    this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n  }\n\n  /**\n   * Merges cells in the provided cell range.\n   *\n   * @private\n   * @param {CellRange} cellRange Cell range to merge.\n   * @param {boolean} [auto=false] `true` if is called automatically, e.g. At initialization.\n   * @param {boolean} [preventPopulation=false] `true`, if the method should not run `populateFromArray` at the end,\n   *   but rather return its arguments.\n   * @returns {Array|boolean} Returns an array of [row, column, dataUnderCollection] if preventPopulation is set to\n   *   true. If the the merging process went successful, it returns `true`, otherwise - `false`.\n   * @fires Hooks#beforeMergeCells\n   * @fires Hooks#afterMergeCells\n   */\n  mergeRange(cellRange, auto = false, preventPopulation = false) {\n    const topStart = cellRange.getTopStartCorner();\n    const bottomEnd = cellRange.getBottomEndCorner();\n    const mergeParent = {\n      row: topStart.row,\n      col: topStart.col,\n      rowspan: bottomEnd.row - topStart.row + 1,\n      colspan: bottomEnd.col - topStart.col + 1\n    };\n    const clearedData = [];\n    let populationInfo = null;\n\n    if (!this.canMergeRange(mergeParent, auto)) {\n      return false;\n    }\n\n    this.hot.runHooks('beforeMergeCells', cellRange, auto);\n\n    rangeEach(0, mergeParent.rowspan - 1, (i) => {\n      rangeEach(0, mergeParent.colspan - 1, (j) => {\n        let clearedValue = null;\n\n        if (!clearedData[i]) {\n          clearedData[i] = [];\n        }\n\n        if (i === 0 && j === 0) {\n          clearedValue = this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(mergeParent.row),\n            this.hot.toPhysicalColumn(mergeParent.col));\n\n        } else {\n          this.hot.setCellMeta(mergeParent.row + i, mergeParent.col + j, 'hidden', true);\n        }\n\n        clearedData[i][j] = clearedValue;\n      });\n    });\n\n    this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);\n\n    const mergedCellAdded = this.mergedCellsCollection.add(mergeParent, auto);\n\n    if (mergedCellAdded) {\n      if (preventPopulation) {\n        populationInfo = [mergeParent.row, mergeParent.col, clearedData];\n\n      } else {\n        // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.\n        this.hot.populateFromArray(\n          mergeParent.row, mergeParent.col, clearedData, undefined, undefined, this.pluginName);\n      }\n\n      if (!auto) {\n        this.ifChromeForceRepaint();\n      }\n\n      this.hot.runHooks('afterMergeCells', cellRange, mergeParent, auto);\n\n      return populationInfo;\n    }\n\n    return true;\n  }\n\n  /**\n   * Unmerges the selection provided as a cell range. If no cell range is provided, it uses the current selection.\n   *\n   * @private\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   *\n   * @fires Hooks#beforeUnmergeCells\n   * @fires Hooks#afterUnmergeCells\n   */\n  unmergeRange(cellRange, auto = false) {\n    const mergedCells = this.mergedCellsCollection.getWithinRange(cellRange);\n\n    if (mergedCells.length === 0) {\n      return;\n    }\n\n    this.hot.runHooks('beforeUnmergeCells', cellRange, auto);\n\n    arrayEach(mergedCells, (currentCollection) => {\n      this.mergedCellsCollection.remove(currentCollection.row, currentCollection.col);\n\n      rangeEach(0, currentCollection.rowspan - 1, (i) => {\n        rangeEach(0, currentCollection.colspan - 1, (j) => {\n          this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');\n          this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'copyable');\n        });\n      });\n\n      this.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');\n    });\n\n    this.hot.runHooks('afterUnmergeCells', cellRange, auto);\n    this.hot.render();\n  }\n\n  /**\n   * Merges or unmerges, based on the cell range provided as `cellRange`.\n   *\n   * @private\n   * @param {CellRange} cellRange The cell range to merge or unmerged.\n   */\n  toggleMerge(cellRange) {\n    const mergedCell = this.mergedCellsCollection.get(cellRange.from.row, cellRange.from.col);\n    const mergedCellCoversWholeRange = mergedCell.row === cellRange.from.row &&\n      mergedCell.col === cellRange.from.col &&\n      mergedCell.row + mergedCell.rowspan - 1 === cellRange.to.row &&\n      mergedCell.col + mergedCell.colspan - 1 === cellRange.to.col;\n\n    if (mergedCellCoversWholeRange) {\n      this.unmergeRange(cellRange);\n\n    } else {\n      this.mergeSelection(cellRange);\n    }\n  }\n\n  /**\n   * Merges the specified range.\n   *\n   * @param {number} startRow Start row of the merged cell.\n   * @param {number} startColumn Start column of the merged cell.\n   * @param {number} endRow End row of the merged cell.\n   * @param {number} endColumn End column of the merged cell.\n   * @fires Hooks#beforeMergeCells\n   * @fires Hooks#afterMergeCells\n   */\n  merge(startRow, startColumn, endRow, endColumn) {\n    const start = this.hot._createCellCoords(startRow, startColumn);\n    const end = this.hot._createCellCoords(endRow, endColumn);\n\n    this.mergeRange(this.hot._createCellRange(start, start, end));\n  }\n\n  /**\n   * Unmerges the merged cell in the provided range.\n   *\n   * @param {number} startRow Start row of the merged cell.\n   * @param {number} startColumn Start column of the merged cell.\n   * @param {number} endRow End row of the merged cell.\n   * @param {number} endColumn End column of the merged cell.\n   * @fires Hooks#beforeUnmergeCells\n   * @fires Hooks#afterUnmergeCells\n   */\n  unmerge(startRow, startColumn, endRow, endColumn) {\n    const start = this.hot._createCellCoords(startRow, startColumn);\n    const end = this.hot._createCellCoords(endRow, endColumn);\n\n    this.unmergeRange(this.hot._createCellRange(start, start, end));\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.generateFromSettings(this.hot.getSettings()[PLUGIN_KEY]);\n    this.hot.render();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling a merge.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const gridContext = shortcutManager.getContext('grid');\n\n    gridContext.addShortcut({\n      keys: [['Control', 'm']],\n      callback: () => {\n        const range = this.hot.getSelectedRangeLast();\n\n        if (range && !range.isSingleHeader()) {\n          this.toggleMerge(range);\n          this.hot.render();\n        }\n      },\n      runOnlyIf: event => !event.altKey, // right ALT in some systems triggers ALT+CTRL\n      group: SHORTCUTS_GROUP,\n    });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling a merge.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const gridContext = shortcutManager.getContext('grid');\n\n    gridContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Modifies the information on whether the current selection contains multiple cells. The `afterIsMultipleSelection`\n   * hook callback.\n   *\n   * @param {boolean} isMultiple Determines whether the current selection contains multiple cells.\n   * @returns {boolean}\n   */\n  #onAfterIsMultipleSelection(isMultiple) {\n    if (isMultiple) {\n      const mergedCells = this.mergedCellsCollection.mergedCells;\n      const selectionRange = this.hot.getSelectedRangeLast();\n      const topStartCoords = selectionRange.getTopStartCorner();\n      const bottomEndCoords = selectionRange.getBottomEndCorner();\n\n      for (let group = 0; group < mergedCells.length; group += 1) {\n        if (\n          topStartCoords.row === mergedCells[group].row &&\n          topStartCoords.col === mergedCells[group].col &&\n          bottomEndCoords.row === mergedCells[group].row + mergedCells[group].rowspan - 1 &&\n          bottomEndCoords.col === mergedCells[group].col + mergedCells[group].colspan - 1\n        ) {\n          return false;\n        }\n      }\n    }\n\n    return isMultiple;\n  }\n\n  /**\n   * `modifyTransformFocus` hook callback.\n   *\n   * @param {object} delta The transformation delta.\n   */\n  #onModifyTransformFocus(delta) {\n    this.#lastFocusDelta.row = delta.row;\n    this.#lastFocusDelta.col = delta.col;\n  }\n\n  /**\n   * `modifyTransformStart` hook callback.\n   *\n   * @param {object} delta The transformation delta.\n   */\n  #onModifyTransformStart(delta) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const { highlight } = selectedRange;\n    const { columnIndexMapper, rowIndexMapper } = this.hot;\n\n    if (this.#lastSelectedFocus) {\n      if (rowIndexMapper.getRenderableFromVisualIndex(this.#lastSelectedFocus.row) !== null) {\n        highlight.row = this.#lastSelectedFocus.row;\n      }\n\n      if (columnIndexMapper.getRenderableFromVisualIndex(this.#lastSelectedFocus.col) !== null) {\n        highlight.col = this.#lastSelectedFocus.col;\n      }\n\n      this.#lastSelectedFocus = null;\n    }\n\n    const mergedParent = this.mergedCellsCollection.get(highlight.row, highlight.col);\n\n    if (!mergedParent) {\n      return;\n    }\n\n    const visualColumnIndexStart = mergedParent.col;\n    const visualColumnIndexEnd = mergedParent.col + mergedParent.colspan - 1;\n\n    if (delta.col < 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexStart - 1 : visualColumnIndexEnd;\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).\n        delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);\n      } else {\n        delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);\n      }\n\n    } else if (delta.col > 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexEnd + 1 : visualColumnIndexStart;\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).\n        delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());\n      } else {\n        delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);\n      }\n    }\n\n    const visualRowIndexStart = mergedParent.row;\n    const visualRowIndexEnd = mergedParent.row + mergedParent.rowspan - 1;\n\n    if (delta.row < 0) {\n      const nextRow = highlight.row >= visualRowIndexStart && highlight.row <= visualRowIndexEnd ?\n        visualRowIndexStart - 1 : visualRowIndexEnd;\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, -1);\n\n      if (notHiddenRowIndex === null) {\n        // There are no visible rows anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the previous column (if autoWrapCol is enabled).\n        delta.row = -this.hot.view.countRenderableRowsInRange(0, highlight.row);\n      } else {\n        delta.row = -Math.max(this.hot.view.countRenderableRowsInRange(notHiddenRowIndex, highlight.row) - 1, 1);\n      }\n\n    } else if (delta.row > 0) {\n      const nextRow = highlight.row >= visualRowIndexStart && highlight.row <= visualRowIndexEnd ?\n        visualRowIndexEnd + 1 : visualRowIndexStart;\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, 1);\n\n      if (notHiddenRowIndex === null) {\n        // There are no visible rows anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the next column (if autoWrapCol is enabled).\n        delta.row = this.hot.view.countRenderableRowsInRange(highlight.row, this.hot.countRows());\n      } else {\n        delta.row = Math.max(this.hot.view.countRenderableRowsInRange(highlight.row, notHiddenRowIndex) - 1, 1);\n      }\n    }\n  }\n\n  /**\n   * The hook allows to modify the delta transformation object necessary for correct selection end transformations.\n   * The logic here handles \"jumping over\" merged merged cells, while selecting.\n   *\n   * @param {{ row: number, col: number }} delta The transformation delta.\n   */\n  #onModifyTransformEnd(delta) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const cloneRange = selectedRange.clone();\n    const { to } = selectedRange;\n    const { columnIndexMapper, rowIndexMapper } = this.hot;\n    const expandCloneRange = (row, col) => {\n      cloneRange.expand(this.hot._createCellCoords(row, col));\n\n      for (let i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n        cloneRange.expandByRange(this.mergedCellsCollection.mergedCells[i].getRange());\n      }\n    };\n\n    if (delta.col < 0) {\n      let nextColumn = this.mergedCellsCollection.getStartMostColumnIndex(selectedRange, to.col) + delta.col;\n\n      expandCloneRange(to.row, nextColumn);\n\n      if (selectedRange.getHorizontalDirection() === 'E-W' && cloneRange.getHorizontalDirection() === 'E-W') {\n        nextColumn = cloneRange.getTopStartCorner().col;\n      }\n\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);\n\n      if (notHiddenColumnIndex !== null) {\n        delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, to.col) - 1, 1);\n      }\n\n    } else if (delta.col > 0) {\n      let nextColumn = this.mergedCellsCollection.getEndMostColumnIndex(selectedRange, to.col) + delta.col;\n\n      expandCloneRange(to.row, nextColumn);\n\n      if (selectedRange.getHorizontalDirection() === 'W-E' && cloneRange.getHorizontalDirection() === 'W-E') {\n        nextColumn = cloneRange.getBottomEndCorner().col;\n      }\n\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);\n\n      if (notHiddenColumnIndex !== null) {\n        delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(to.col, notHiddenColumnIndex) - 1, 1);\n      }\n    }\n\n    if (delta.row < 0) {\n      let nextRow = this.mergedCellsCollection.getTopMostRowIndex(selectedRange, to.row) + delta.row;\n\n      expandCloneRange(nextRow, to.col);\n\n      if (selectedRange.getVerticalDirection() === 'S-N' && cloneRange.getVerticalDirection() === 'S-N') {\n        nextRow = cloneRange.getTopStartCorner().row;\n      }\n\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, 1);\n\n      if (notHiddenRowIndex !== null) {\n        delta.row = -Math.max(this.hot.view.countRenderableRowsInRange(notHiddenRowIndex, to.row) - 1, 1);\n      }\n\n    } else if (delta.row > 0) {\n      let nextRow = this.mergedCellsCollection.getBottomMostRowIndex(selectedRange, to.row) + delta.row;\n\n      expandCloneRange(nextRow, to.col);\n\n      if (selectedRange.getVerticalDirection() === 'N-S' && cloneRange.getVerticalDirection() === 'N-S') {\n        nextRow = cloneRange.getBottomStartCorner().row;\n      }\n\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, -1);\n\n      if (notHiddenRowIndex !== null) {\n        delta.row = Math.max(this.hot.view.countRenderableRowsInRange(to.row, notHiddenRowIndex) - 1, 1);\n      }\n    }\n  }\n\n  /**\n   * The hook corrects the range (before drawing it) after the selection was made on the merged cells.\n   * It expands the range to cover the entire area of the selected merged cells.\n   */\n  #onBeforeSelectionHighlightSet() {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const { highlight } = selectedRange;\n\n    if (this.hot.selection.isSelectedByColumnHeader() || this.hot.selection.isSelectedByRowHeader()) {\n      this.#lastSelectedFocus = highlight.clone();\n\n      return;\n    }\n\n    for (let i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n      selectedRange.expandByRange(this.mergedCellsCollection.mergedCells[i].getRange(), false);\n    }\n    // TODO: This is a workaround for an issue with the selection not being extended properly.\n    // In some cases when the merge cells are defined in random order the selection is not\n    // extended in that way that it covers all overlapped merge cells.\n    for (let i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n      selectedRange.expandByRange(this.mergedCellsCollection.mergedCells[i].getRange(), false);\n    }\n\n    const mergedParent = this.mergedCellsCollection.get(highlight.row, highlight.col);\n\n    this.#lastSelectedFocus = highlight.clone();\n\n    if (mergedParent) {\n      highlight.assign(mergedParent);\n    }\n  }\n\n  /**\n   * `modifyGetCellCoords` hook callback. Swaps the `getCell` coords with the merged parent coords.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Visual column index.\n   * @returns {Array|undefined} Visual coordinates of the merge.\n   */\n  #onModifyGetCellCoords(row, column) {\n    if (row < 0 || column < 0) {\n      return;\n    }\n\n    const mergeParent = this.mergedCellsCollection.get(row, column);\n\n    if (!mergeParent) {\n      return;\n    }\n\n    const { row: mergeRow, col: mergeColumn, colspan, rowspan } = mergeParent;\n\n    return [\n      // Most top-left merged cell coords.\n      mergeRow, mergeColumn,\n      // Most bottom-right merged cell coords.\n      mergeRow + rowspan - 1,\n      mergeColumn + colspan - 1\n    ];\n  }\n\n  /**\n   * `afterContextMenuDefaultOptions` hook callback.\n   *\n   * @param {object} defaultOptions The default context menu options.\n   */\n  #addMergeActionsToContextMenu(defaultOptions) {\n    defaultOptions.items.push(\n      {\n        name: '---------',\n      },\n      toggleMergeItem(this)\n    );\n  }\n\n  /**\n   * Clears the last selected coordinates before setting a new selection range.\n   */\n  #onBeforeSetRangeStart() {\n    this.#lastSelectedFocus = null;\n  }\n\n  /**\n   * Detects if the last selected cell was a header cell if so update the order list active node for further\n   * computations.\n   */\n  #onBeforeSelectionFocusSet() {\n    if (this.#lastSelectedFocus.isCell()) {\n      return;\n    }\n\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const verticalDir = selectedRange.getVerticalDirection();\n    const horizontalDir = selectedRange.getHorizontalDirection();\n    const focusCoords = this.#lastSelectedFocus.clone().normalize();\n\n    this.#focusOrder.setActiveNode(focusCoords.row, focusCoords.col);\n\n    if (this.#lastFocusDelta.row > 0 || this.#lastFocusDelta.col > 0) {\n      this.#focusOrder.setPrevNodeAsActive();\n\n    } else if (\n      horizontalDir === 'E-W' && this.#lastFocusDelta.col < 0 ||\n      verticalDir === 'S-N' && this.#lastFocusDelta.row < 0\n    ) {\n      this.#focusOrder.setNextNodeAsActive();\n    }\n  }\n\n  /**\n   * Changes the focus selection to the next or previous cell or merged cell position.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} column The visual column index.\n   */\n  #onAfterSelectionFocusSet(row, column) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const { columnIndexMapper, rowIndexMapper } = this.hot;\n    let notHiddenRowIndex = null;\n    let notHiddenColumnIndex = null;\n\n    if (this.#lastFocusDelta.col < 0) {\n      const { rowEnd, colEnd } = this.#focusOrder.getPrevHorizontalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);\n\n    } else if (this.#lastFocusDelta.col > 0) {\n      const { rowStart, colStart } = this.#focusOrder.getNextHorizontalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);\n\n    } else if (this.#lastFocusDelta.row < 0) {\n      const { rowEnd, colEnd } = this.#focusOrder.getPrevVerticalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);\n\n    } else if (this.#lastFocusDelta.row > 0) {\n      const { rowStart, colStart } = this.#focusOrder.getNextVerticalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);\n    }\n\n    if (notHiddenRowIndex !== null || notHiddenColumnIndex !== null) {\n      const coords = this.hot._createCellCoords(notHiddenRowIndex, notHiddenColumnIndex);\n      const mergeParent = this.mergedCellsCollection.get(coords.row, coords.col);\n      const focusHighlight = this.hot.selection.highlight.getFocus();\n\n      row = coords.row;\n      column = coords.col;\n\n      if (mergeParent) {\n        selectedRange.highlight.assign({\n          row: this.hot.rowIndexMapper.getNearestNotHiddenIndex(mergeParent.row, 1),\n          col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(mergeParent.col, 1),\n        });\n      } else {\n        selectedRange.highlight.assign(coords);\n      }\n\n      focusHighlight.clear();\n      focusHighlight\n        .add(coords)\n        .commit();\n    }\n\n    this.#focusOrder.setActiveNode(row, column);\n    this.#lastFocusDelta = { row: 0, col: 0 };\n  }\n\n  /**\n   * Creates the horizontal and vertical cells order matrix (linked lists) for focused cell.\n   */\n  #onAfterSelectionEnd() {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection.isHeader()) {\n      this.#focusOrder.buildFocusOrder(this.hot.getSelectedRangeLast());\n    }\n  }\n\n  /**\n   * The `afterGetCellMeta` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} col Column index.\n   * @param {object} cellProperties The cell properties object.\n   */\n  #onAfterGetCellMeta(row, col, cellProperties) {\n    const mergeParent = this.mergedCellsCollection.get(row, col);\n\n    if (mergeParent) {\n      if (mergeParent.row !== row || mergeParent.col !== col) {\n        cellProperties.copyable = false;\n\n      } else {\n        cellProperties.rowspan = mergeParent.rowspan;\n        cellProperties.colspan = mergeParent.colspan;\n      }\n    }\n  }\n\n  /**\n   * `afterViewportRowCalculatorOverride` hook callback.\n   *\n   * @param {object} calc The row calculator object.\n   */\n  #onAfterViewportRowCalculatorOverride(calc) {\n    const nrOfColumns = this.hot.countCols();\n\n    this.modifyViewportRowStart(calc, nrOfColumns);\n    this.modifyViewportRowEnd(calc, nrOfColumns);\n  }\n\n  /**\n   * Modify viewport start when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The row calculator object.\n   * @param {number} nrOfColumns Number of visual columns.\n   */\n  modifyViewportRowStart(calc, nrOfColumns) {\n    const rowMapper = this.hot.rowIndexMapper;\n    const visualStartRow = rowMapper.getVisualFromRenderableIndex(calc.startRow);\n\n    for (let visualColumnIndex = 0; visualColumnIndex < nrOfColumns; visualColumnIndex += 1) {\n      const mergeParentForViewportStart = this.mergedCellsCollection.get(visualStartRow, visualColumnIndex);\n\n      if (isObject(mergeParentForViewportStart)) {\n        const renderableIndexAtMergeStart = rowMapper.getRenderableFromVisualIndex(\n          rowMapper.getNearestNotHiddenIndex(mergeParentForViewportStart.row, 1));\n\n        // Merge start is out of the viewport (i.e. when we scrolled to the bottom and we can see just part of a merge).\n        if (renderableIndexAtMergeStart < calc.startRow) {\n          // We extend viewport when some rows have been merged.\n          calc.startRow = renderableIndexAtMergeStart;\n          // We are looking for next merges inside already extended viewport (starting again from row equal to 0).\n          this.modifyViewportRowStart(calc, nrOfColumns); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   *  Modify viewport end when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The row calculator object.\n   * @param {number} nrOfColumns Number of visual columns.\n   */\n  modifyViewportRowEnd(calc, nrOfColumns) {\n    const rowMapper = this.hot.rowIndexMapper;\n    const visualEndRow = rowMapper.getVisualFromRenderableIndex(calc.endRow);\n\n    for (let visualColumnIndex = 0; visualColumnIndex < nrOfColumns; visualColumnIndex += 1) {\n      const mergeParentForViewportEnd = this.mergedCellsCollection.get(visualEndRow, visualColumnIndex);\n\n      if (isObject(mergeParentForViewportEnd)) {\n        const mergeEnd = mergeParentForViewportEnd.row + mergeParentForViewportEnd.rowspan - 1;\n        const renderableIndexAtMergeEnd = rowMapper.getRenderableFromVisualIndex(\n          rowMapper.getNearestNotHiddenIndex(mergeEnd, -1));\n\n        // Merge end is out of the viewport.\n        if (renderableIndexAtMergeEnd > calc.endRow) {\n          // We extend the viewport when some rows have been merged.\n          calc.endRow = renderableIndexAtMergeEnd;\n          // We are looking for next merges inside already extended viewport (starting again from row equal to 0).\n          this.modifyViewportRowEnd(calc, nrOfColumns); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   * `afterViewportColumnCalculatorOverride` hook callback.\n   *\n   * @param {object} calc The column calculator object.\n   */\n  #onAfterViewportColumnCalculatorOverride(calc) {\n    const nrOfRows = this.hot.countRows();\n\n    this.modifyViewportColumnStart(calc, nrOfRows);\n    this.modifyViewportColumnEnd(calc, nrOfRows);\n  }\n\n  /**\n   * Modify viewport start when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The column calculator object.\n   * @param {number} nrOfRows Number of visual rows.\n   */\n  modifyViewportColumnStart(calc, nrOfRows) {\n    const columnMapper = this.hot.columnIndexMapper;\n    const visualStartCol = columnMapper.getVisualFromRenderableIndex(calc.startColumn);\n\n    for (let visualRowIndex = 0; visualRowIndex < nrOfRows; visualRowIndex += 1) {\n      const mergeParentForViewportStart = this.mergedCellsCollection.get(visualRowIndex, visualStartCol);\n\n      if (isObject(mergeParentForViewportStart)) {\n        const renderableIndexAtMergeStart = columnMapper.getRenderableFromVisualIndex(\n          columnMapper.getNearestNotHiddenIndex(mergeParentForViewportStart.col, 1));\n\n        // Merge start is out of the viewport (i.e. when we scrolled to the right and we can see just part of a merge).\n        if (renderableIndexAtMergeStart < calc.startColumn) {\n          // We extend viewport when some columns have been merged.\n          calc.startColumn = renderableIndexAtMergeStart;\n          // We are looking for next merges inside already extended viewport (starting again from column equal to 0).\n          this.modifyViewportColumnStart(calc, nrOfRows); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   *  Modify viewport end when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The column calculator object.\n   * @param {number} nrOfRows Number of visual rows.\n   */\n  modifyViewportColumnEnd(calc, nrOfRows) {\n    const columnMapper = this.hot.columnIndexMapper;\n    const visualEndCol = columnMapper.getVisualFromRenderableIndex(calc.endColumn);\n\n    for (let visualRowIndex = 0; visualRowIndex < nrOfRows; visualRowIndex += 1) {\n      const mergeParentForViewportEnd = this.mergedCellsCollection.get(visualRowIndex, visualEndCol);\n\n      if (isObject(mergeParentForViewportEnd)) {\n        const mergeEnd = mergeParentForViewportEnd.col + mergeParentForViewportEnd.colspan - 1;\n        const renderableIndexAtMergeEnd = columnMapper.getRenderableFromVisualIndex(\n          columnMapper.getNearestNotHiddenIndex(mergeEnd, -1));\n\n        // Merge end is out of the viewport.\n        if (renderableIndexAtMergeEnd > calc.endColumn) {\n          // We extend the viewport when some columns have been merged.\n          calc.endColumn = renderableIndexAtMergeEnd;\n          // We are looking for next merges inside already extended viewport (starting again from column equal to 0).\n          this.modifyViewportColumnEnd(calc, nrOfRows); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   * Translates merged cell coordinates to renderable indexes.\n   *\n   * @private\n   * @param {number} parentRow Visual row index.\n   * @param {number} rowspan Rowspan which describes shift which will be applied to parent row\n   *                         to calculate renderable index which points to the most bottom\n   *                         index position. Pass rowspan as `0` to calculate the most top\n   *                         index position.\n   * @param {number} parentColumn Visual column index.\n   * @param {number} colspan Colspan which describes shift which will be applied to parent column\n   *                         to calculate renderable index which points to the most right\n   *                         index position. Pass colspan as `0` to calculate the most left\n   *                         index position.\n   * @returns {number[]}\n   */\n  translateMergedCellToRenderable(parentRow, rowspan, parentColumn, colspan) {\n    const { rowIndexMapper: rowMapper, columnIndexMapper: columnMapper } = this.hot;\n    let firstNonHiddenRow;\n    let firstNonHiddenColumn;\n\n    if (rowspan === 0) {\n      firstNonHiddenRow = rowMapper.getNearestNotHiddenIndex(parentRow, 1);\n    } else {\n      firstNonHiddenRow = rowMapper.getNearestNotHiddenIndex(parentRow + rowspan - 1, -1);\n    }\n\n    if (colspan === 0) {\n      firstNonHiddenColumn = columnMapper.getNearestNotHiddenIndex(parentColumn, 1);\n    } else {\n      firstNonHiddenColumn = columnMapper.getNearestNotHiddenIndex(parentColumn + colspan - 1, -1);\n    }\n\n    const renderableRow = parentRow >= 0 ?\n      rowMapper.getRenderableFromVisualIndex(firstNonHiddenRow) : parentRow;\n    const renderableColumn = parentColumn >= 0 ?\n      columnMapper.getRenderableFromVisualIndex(firstNonHiddenColumn) : parentColumn;\n\n    return [renderableRow, renderableColumn];\n  }\n\n  /**\n   * The `modifyAutofillRange` hook callback.\n   *\n   * @param {Array} drag The drag area coordinates.\n   * @param {Array} select The selection information.\n   * @returns {Array} The new drag area.\n   */\n  #onModifyAutofillRange(drag, select) {\n    this.autofillCalculations.correctSelectionAreaSize(select);\n    const dragDirection = this.autofillCalculations.getDirection(select, drag);\n    let dragArea = drag;\n\n    if (this.autofillCalculations.dragAreaOverlapsCollections(select, dragArea, dragDirection)) {\n      dragArea = select;\n\n      return dragArea;\n    }\n\n    const from = this.hot._createCellCoords(select[0], select[1]);\n    const to = this.hot._createCellCoords(select[2], select[3]);\n    const range = this.hot._createCellRange(from, from, to);\n    const mergedCellsWithinSelectionArea = this.mergedCellsCollection.getWithinRange(range);\n\n    if (mergedCellsWithinSelectionArea.length === 0) {\n      return dragArea;\n    }\n\n    dragArea = this.autofillCalculations.snapDragArea(select, dragArea, dragDirection, mergedCellsWithinSelectionArea);\n\n    return dragArea;\n  }\n\n  /**\n   * `afterCreateCol` hook callback.\n   *\n   * @param {number} column Column index.\n   * @param {number} count Number of created columns.\n   */\n  #onAfterCreateCol(column, count) {\n    this.mergedCellsCollection.shiftCollections('right', column, count);\n  }\n\n  /**\n   * `afterRemoveCol` hook callback.\n   *\n   * @param {number} column Column index.\n   * @param {number} count Number of removed columns.\n   */\n  #onAfterRemoveCol(column, count) {\n    this.mergedCellsCollection.shiftCollections('left', column, count);\n  }\n\n  /**\n   * `afterCreateRow` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} count Number of created rows.\n   * @param {string} source Source of change.\n   */\n  #onAfterCreateRow(row, count, source) {\n    if (source === 'auto') {\n      return;\n    }\n\n    this.mergedCellsCollection.shiftCollections('down', row, count);\n  }\n\n  /**\n   * `afterRemoveRow` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} count Number of removed rows.\n   */\n  #onAfterRemoveRow(row, count) {\n    this.mergedCellsCollection.shiftCollections('up', row, count);\n  }\n\n  /**\n   * `afterChange` hook callback. Used to propagate merged cells after using Autofill.\n   *\n   * @param {Array} changes The changes array.\n   * @param {string} source Determines the source of the change.\n   */\n  #onAfterChange(changes, source) {\n    if (source !== 'Autofill.fill') {\n      return;\n    }\n\n    this.autofillCalculations.recreateAfterDataPopulation(changes);\n  }\n\n  /**\n   * `beforeDrawAreaBorders` hook callback.\n   *\n   * @param {Array} corners Visual coordinates of the area corners.\n   * @param {string} className Class name for the area.\n   */\n  #onBeforeDrawAreaBorders(corners, className) {\n    if (className && className === 'area') {\n      const selectedRange = this.hot.getSelectedRangeLast();\n      const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(selectedRange);\n\n      arrayEach(mergedCellsWithinRange, (mergedCell) => {\n        if (selectedRange.getBottomEndCorner().row === mergedCell.getLastRow() &&\n          selectedRange.getBottomEndCorner().col === mergedCell.getLastColumn()) {\n          corners[2] = mergedCell.row;\n          corners[3] = mergedCell.col;\n        }\n      });\n    }\n  }\n\n  /**\n   * `afterDrawSelection` hook callback. Used to add the additional class name for the entirely-selected merged cells.\n   *\n   * @param {number} currentRow Visual row index of the currently processed cell.\n   * @param {number} currentColumn Visual column index of the currently cell.\n   * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow,\n   *   endColumn]`.\n   * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n   * @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently\n   *   processed cell.\n   */\n  #onAfterDrawSelection(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n    // Nothing's selected (hook might be triggered by the custom borders)\n    if (!cornersOfSelection) {\n      return;\n    }\n\n    return this.selectionCalculations\n      .getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);\n  }\n\n  /**\n   * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.\n   *\n   * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from\n   *   all the cells in the table.\n   */\n  #onBeforeRemoveCellClassNames() {\n    return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();\n  }\n\n  /**\n   * Allows to prevent opening the editor while more than one merged cell is selected.\n   *\n   * @param {number} row Visual row index of the edited cell.\n   * @param {number} column Visual column index of the edited cell.\n   * @param {string | null} initialValue The initial editor value.\n   * @param {MouseEvent | KeyboardEvent} event The event which was responsible for opening the editor.\n   * @returns {boolean | undefined}\n   */\n  #onBeforeBeginEditing(row, column, initialValue, event) {\n    if (!(event instanceof MouseEvent)) {\n      return;\n    }\n\n    const selection = this.hot.getSelectedRangeLast();\n    const mergeCell = this.mergedCellsCollection.getByRange(selection);\n\n    if (!mergeCell) {\n      return;\n    }\n\n    const from = this.hot._createCellCoords(\n      mergeCell.row,\n      mergeCell.col\n    );\n    const to = this.hot._createCellCoords(\n      mergeCell.row + mergeCell.rowspan - 1,\n      mergeCell.col + mergeCell.colspan - 1\n    );\n\n    return this.hot.selection.getLayerLevel() === 0 && selection.isEqual(\n      this.hot._createCellRange(from, from, to)\n    );\n  }\n\n  /**\n   * Hook used to modify the row height depends on the merged cells in the row.\n   *\n   * @param {number} height The row height value provided by the Core.\n   * @param {number} row The visual row index.\n   * @param {string} overlayType The overlay type that is currently rendered.\n   * @returns {number}\n   */\n  #onModifyRowHeightByOverlayName(height, row, overlayType) {\n    if (\n      this.hot.getSettings().rowHeaders ||\n      // merged cells do not work with the bottom overlays\n      overlayType === 'bottom' || overlayType === 'bottom_inline_start_corner'\n    ) {\n      return height;\n    }\n\n    let firstColumn;\n    let lastColumn;\n\n    if (overlayType === 'master') {\n      firstColumn = this.hot.view.getFirstRenderedVisibleColumn();\n      lastColumn = this.hot.view.getLastRenderedVisibleColumn();\n\n    } else {\n      const activeOverlay = this.hot.view.getOverlayByName(overlayType);\n\n      firstColumn = this.hot.columnIndexMapper\n        .getVisualFromRenderableIndex(activeOverlay.clone.wtTable.getFirstRenderedColumn());\n      lastColumn = this.hot.columnIndexMapper\n        .getVisualFromRenderableIndex(activeOverlay.clone.wtTable.getLastRenderedColumn());\n    }\n\n    const firstMergedCellInRow = this.mergedCellsCollection.get(row, firstColumn);\n\n    if (!firstMergedCellInRow) {\n      return height;\n    }\n\n    const from = this.hot._createCellCoords(row, firstColumn);\n    const to = this.hot._createCellCoords(row, lastColumn);\n    const viewportRange = this.hot._createCellRange(from, from, to);\n    const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(viewportRange);\n    const maxRowspan = mergedCellsWithinRange.reduce((acc, { rowspan }) => Math.max(acc, rowspan), 1);\n    let rowspanCorrection = 0;\n\n    if (mergedCellsWithinRange.length > 1 && mergedCellsWithinRange[0].rowspan < maxRowspan) {\n      rowspanCorrection = maxRowspan - mergedCellsWithinRange[0].rowspan;\n    }\n\n    mergedCellsWithinRange.forEach(({ rowspan }) => {\n      let rowspanAfterCorrection = 0;\n\n      if (overlayType === 'top' || overlayType === 'top_inline_start_corner') {\n        rowspanAfterCorrection = Math.min(maxRowspan, this.hot.view.countNotHiddenFixedRowsTop() - row);\n      } else {\n        rowspanAfterCorrection = rowspan - rowspanCorrection;\n      }\n\n      height = Math.max(height ?? 0, this.#sumCellsHeights(row, rowspanAfterCorrection));\n    });\n\n    return height;\n  }\n\n  /**\n   * Sums the heights of the all cells that the merge cell consists of.\n   *\n   * @param {number} row The visual row index of the merged cell.\n   * @param {number} rowspan The rowspan value of the merged cell.\n   * @returns {number}\n   */\n  #sumCellsHeights(row, rowspan) {\n    const defaultHeight = this.hot.view._wt.wtSettings.getSettingPure('defaultRowHeight');\n    const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');\n    let height = 0;\n\n    for (let i = row; i < row + rowspan; i++) {\n      if (!this.hot.rowIndexMapper.isHidden(i)) {\n        height += autoRowSizePlugin?.getRowHeight(i) ?? defaultHeight;\n      }\n    }\n\n    return height;\n  }\n}\n","import MergedCellCoords from './cellCoords';\nimport { rangeEach } from '../../helpers/number';\nimport { warn } from '../../helpers/console';\nimport { arrayEach } from '../../helpers/array';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\n\n/**\n * Defines a container object for the merged cells.\n *\n * @private\n * @class MergedCellsCollection\n */\nclass MergedCellsCollection {\n  /**\n   * Reference to the Merge Cells plugin.\n   *\n   * @type {MergeCells}\n   */\n  plugin;\n  /**\n   * Array of merged cells.\n   *\n   * @type {MergedCellCoords[]}\n   */\n  mergedCells = [];\n  /**\n   * Matrix of cells (row, col) that points to the instances of the MergedCellCoords objects.\n   *\n   * @type {Array}\n   */\n  mergedCellsMatrix = new Map();\n  /**\n   * The Handsontable instance.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n\n  constructor(mergeCellsPlugin) {\n    this.plugin = mergeCellsPlugin;\n    this.hot = mergeCellsPlugin.hot;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data overlaps already existing merged cells.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static IS_OVERLAPPING_WARNING({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}], overlaps\\x20\n      with the other declared merged cell. The overlapping merged cell was not added to the table, please\\x20\n      fix your setup.`;\n  }\n\n  /**\n   * Get a merged cell from the container, based on the provided arguments. You can provide either the \"starting coordinates\"\n   * of a merged cell, or any coordinates from the body of the merged cell.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @returns {MergedCellCoords|boolean} Returns a wanted merged cell on success and `false` on failure.\n   */\n  get(row, column) {\n    if (!this.mergedCellsMatrix.has(row)) {\n      return false;\n    }\n\n    return this.mergedCellsMatrix.get(row).get(column) ?? false;\n  }\n\n  /**\n   * Get the first-found merged cell containing the provided range.\n   *\n   * @param {CellRange|object} range The range to search merged cells for.\n   * @returns {MergedCellCoords|boolean}\n   */\n  getByRange(range) {\n    let result = false;\n\n    arrayEach(this.mergedCells, (mergedCell) => {\n      if (mergedCell.row <= range.from.row && mergedCell.row + mergedCell.rowspan - 1 >= range.to.row &&\n        mergedCell.col <= range.from.col && mergedCell.col + mergedCell.colspan - 1 >= range.to.col) {\n        result = mergedCell;\n\n        return result;\n      }\n\n      return true;\n    });\n\n    return result;\n  }\n\n  /**\n   * Filters merge cells objects provided by users from overlapping cells.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCellsInfo The merged cell information object.\n   * Has to contain `row`, `col`, `colspan` and `rowspan` properties.\n   * @returns {Array<{ row: number, col: number, rowspan: number, colspan: number }>}\n   */\n  filterOverlappingMergeCells(mergedCellsInfo) {\n    const occupiedCells = new Set();\n\n    this.mergedCells.forEach((mergedCell) => {\n      const { row, col, colspan, rowspan } = mergedCell;\n\n      for (let r = row; r < row + rowspan; r++) {\n        for (let c = col; c < col + colspan; c++) {\n          occupiedCells.add(`r${r},c${c}`);\n        }\n      }\n    });\n\n    const filteredMergeCells = mergedCellsInfo.filter((mergedCell) => {\n      const { row, col, colspan, rowspan } = mergedCell;\n      const localOccupiedCells = new Set();\n      let isOverlapping = false;\n\n      for (let r = row; r < row + rowspan; r++) {\n        for (let c = col; c < col + colspan; c++) {\n          const cellId = `r${r},c${c}`;\n\n          if (occupiedCells.has(cellId)) {\n            warn(MergedCellsCollection.IS_OVERLAPPING_WARNING(mergedCell));\n            isOverlapping = true;\n            break;\n          }\n\n          localOccupiedCells.add(cellId);\n        }\n\n        if (isOverlapping) {\n          break;\n        }\n      }\n\n      if (!isOverlapping) {\n        occupiedCells.add(...localOccupiedCells);\n      }\n\n      return !isOverlapping;\n    });\n\n    return filteredMergeCells;\n  }\n\n  /**\n   * Get a merged cell contained in the provided range.\n   *\n   * @param {CellRange} range The range to search merged cells in.\n   * @param {boolean} [countPartials=false] If set to `true`, all the merged cells overlapping the range will be taken into calculation.\n   * @returns {MergedCellCoords[]} Array of found merged cells.\n   */\n  getWithinRange(range, countPartials = false) {\n    const { row: rowStart, col: columnStart } = range.getTopStartCorner();\n    const { row: rowEnd, col: columnEnd } = range.getBottomEndCorner();\n    const result = [];\n\n    for (let row = rowStart; row <= rowEnd; row++) {\n      for (let column = columnStart; column <= columnEnd; column++) {\n        const mergedCell = this.get(row, column);\n\n        if (\n          mergedCell &&\n          (countPartials ||\n          !countPartials && mergedCell.row === row && mergedCell.col === column)\n        ) {\n          result.push(mergedCell);\n        }\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Add a merged cell to the container.\n   *\n   * @param {object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.\n   * @param {boolean} [auto=false] `true` if called internally by the plugin (usually in batch).\n   * @returns {MergedCellCoords|boolean} Returns the new merged cell on success and `false` on failure.\n   */\n  add(mergedCellInfo, auto = false) {\n    const row = mergedCellInfo.row;\n    const column = mergedCellInfo.col;\n    const rowspan = mergedCellInfo.rowspan;\n    const colspan = mergedCellInfo.colspan;\n    const newMergedCell = new MergedCellCoords(row, column, rowspan, colspan,\n      this.hot._createCellCoords, this.hot._createCellRange);\n    const alreadyExists = this.get(row, column);\n    const isOverlapping = auto ? false : this.isOverlapping(newMergedCell);\n\n    if (!alreadyExists && !isOverlapping) {\n      if (this.hot) {\n        newMergedCell.normalize(this.hot);\n      }\n\n      this.mergedCells.push(newMergedCell);\n      this.#addMergedCellToMatrix(newMergedCell);\n\n      return newMergedCell;\n    }\n\n    warn(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));\n\n    return false;\n  }\n\n  /**\n   * Remove a merged cell from the container. You can provide either the \"starting coordinates\"\n   * of a merged cell, or any coordinates from the body of the merged cell.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @returns {MergedCellCoords|boolean} Returns the removed merged cell on success and `false` on failure.\n   */\n  remove(row, column) {\n    const mergedCell = this.get(row, column);\n    const mergedCellIndex = mergedCell ? this.mergedCells.indexOf(mergedCell) : -1;\n\n    if (mergedCell && mergedCellIndex !== -1) {\n      this.mergedCells.splice(mergedCellIndex, 1);\n      this.#removeMergedCellFromMatrix(mergedCell);\n\n      return mergedCell;\n    }\n\n    return false;\n  }\n\n  /**\n   * Clear all the merged cells.\n   */\n  clear() {\n    arrayEach(this.mergedCells, ({ row, col, rowspan, colspan }) => {\n      rangeEach(row, row + rowspan, (r) => {\n        rangeEach(col, col + colspan, (c) => {\n          const TD = this.hot.getCell(r, c);\n\n          if (TD) {\n            TD.removeAttribute('rowspan');\n            TD.removeAttribute('colspan');\n            TD.style.display = '';\n          }\n        });\n      });\n    });\n\n    this.mergedCells.length = 0;\n    this.mergedCellsMatrix = new Map();\n  }\n\n  /**\n   * Check if the provided merged cell overlaps with the others already added.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.\n   * @returns {boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.\n   */\n  isOverlapping(mergedCell) {\n    const mergedCellRange = mergedCell.getRange();\n\n    for (let i = 0; i < this.mergedCells.length; i++) {\n      const otherMergedCell = this.mergedCells[i];\n      const otherMergedCellRange = otherMergedCell.getRange();\n\n      if (otherMergedCellRange.overlaps(mergedCellRange)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Check whether the provided row/col coordinates direct to a first not hidden cell within merge area.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  isFirstRenderableMergedCell(row, column) {\n    const mergeParent = this.get(row, column);\n\n    // Return if row and column indexes are within merge area and if they are first rendered indexes within the area.\n    return mergeParent && this.hot.rowIndexMapper.getNearestNotHiddenIndex(mergeParent.row, 1) === row &&\n        this.hot.columnIndexMapper.getNearestNotHiddenIndex(mergeParent.col, 1) === column;\n  }\n\n  /**\n   * Get the first renderable coords of the merged cell at the provided coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {CellCoords} A `CellCoords` object with the coordinates to the first renderable cell within the\n   *                        merged cell.\n   */\n  getFirstRenderableCoords(row, column) {\n    const mergeParent = this.get(row, column);\n\n    if (!mergeParent || this.isFirstRenderableMergedCell(row, column)) {\n      return this.hot._createCellCoords(row, column);\n    }\n\n    const firstRenderableRow = this.hot.rowIndexMapper.getNearestNotHiddenIndex(mergeParent.row, 1);\n    const firstRenderableColumn = this.hot.columnIndexMapper.getNearestNotHiddenIndex(mergeParent.col, 1);\n\n    return this.hot._createCellCoords(firstRenderableRow, firstRenderableColumn);\n  }\n\n  /**\n   * Gets the start-most visual column index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualColumnIndex The visual column index to start the search from.\n   * @returns {number}\n   */\n  getStartMostColumnIndex(range, visualColumnIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'col', -1);\n    let startMostIndex = visualColumnIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] <= visualColumnIndex) {\n        startMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return startMostIndex;\n  }\n\n  /**\n   * Gets the end-most visual column index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualColumnIndex The visual column index to start the search from.\n   * @returns {number}\n   */\n  getEndMostColumnIndex(range, visualColumnIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'col', 1);\n    let endMostIndex = visualColumnIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] >= visualColumnIndex) {\n        endMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return endMostIndex;\n  }\n\n  /**\n   * Gets the top-most visual row index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualRowIndex The visual row index to start the search from.\n   * @returns {number}\n   */\n  getTopMostRowIndex(range, visualRowIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'row', -1);\n    let topMostIndex = visualRowIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] <= visualRowIndex) {\n        topMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return topMostIndex;\n  }\n\n  /**\n   * Gets the bottom-most visual row index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualRowIndex The visual row index to start the search from.\n   * @returns {number}\n   */\n  getBottomMostRowIndex(range, visualRowIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'row', 1);\n    let bottomMostIndex = visualRowIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] >= visualRowIndex) {\n        bottomMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return bottomMostIndex;\n  }\n\n  /**\n   * Gets the list of the indexes that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {'row' | 'col'} axis The axis to search within.\n   * @param {number} scanDirection  The direction to scan the range. `1` for forward, `-1` for backward.\n   * @returns {number[]}\n   */\n  #getNonIntersectingIndexes(range, axis, scanDirection = 1) {\n    const indexes = new Map();\n    const from = scanDirection === 1 ? range.getTopStartCorner() : range.getBottomEndCorner();\n    const to = scanDirection === 1 ? range.getBottomEndCorner() : range.getTopStartCorner();\n\n    for (\n      let row = from.row;\n      scanDirection === 1 ? row <= to.row : row >= to.row;\n      row += scanDirection\n    ) {\n      for (\n        let column = from.col;\n        scanDirection === 1 ? column <= to.col : column >= to.col;\n        column += scanDirection\n      ) {\n        const index = axis === 'row' ? row : column;\n        const mergedCell = this.get(row, column);\n        let lastIndex = index;\n\n        if (mergedCell) {\n          lastIndex = scanDirection === 1 ? mergedCell[axis] + mergedCell[`${axis}span`] - 1 : mergedCell[axis];\n        }\n\n        if (!indexes.has(index)) {\n          indexes.set(index, new Set());\n        }\n\n        indexes.get(index).add(lastIndex);\n      }\n    }\n\n    return Array.from(\n      new Set(Array.from(indexes.entries())\n        .filter(([, set]) => set.size === 1)\n        .flatMap(([, set]) => Array.from(set)))\n    );\n  }\n\n  /**\n   * Shift the merged cell in the direction and by an offset defined in the arguments.\n   *\n   * @param {string} direction `right`, `left`, `up` or `down`.\n   * @param {number} index Index where the change, which caused the shifting took place.\n   * @param {number} count Number of rows/columns added/removed in the preceding action.\n   */\n  shiftCollections(direction, index, count) {\n    const shiftVector = [0, 0];\n\n    switch (direction) {\n      case 'right':\n        shiftVector[0] += count;\n        break;\n\n      case 'left':\n        shiftVector[0] -= count;\n        break;\n\n      case 'down':\n        shiftVector[1] += count;\n        break;\n\n      case 'up':\n        shiftVector[1] -= count;\n        break;\n\n      default:\n    }\n\n    const removedMergedCells = [];\n\n    this.mergedCells.forEach((currentMerge) => {\n      currentMerge.shift(shiftVector, index);\n\n      if (currentMerge.removed) {\n        removedMergedCells.push(currentMerge);\n      }\n    });\n\n    removedMergedCells.forEach((removedMerge) => {\n      this.mergedCells.splice(this.mergedCells.indexOf(removedMerge), 1);\n    });\n\n    this.mergedCellsMatrix.clear();\n\n    this.mergedCells.forEach((currentMerge) => {\n      this.#addMergedCellToMatrix(currentMerge);\n    });\n  }\n\n  /**\n   * Adds a merged cell to the matrix.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to add.\n   */\n  #addMergedCellToMatrix(mergedCell) {\n    for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {\n      for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {\n        if (!this.mergedCellsMatrix.has(row)) {\n          this.mergedCellsMatrix.set(row, new Map());\n        }\n\n        this.mergedCellsMatrix.get(row).set(col, mergedCell);\n      }\n    }\n  }\n\n  /**\n   * Removes a merged cell from the matrix.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to remove.\n   */\n  #removeMergedCellFromMatrix(mergedCell) {\n    for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {\n      for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {\n        this.mergedCellsMatrix.get(row).delete(col);\n      }\n    }\n  }\n}\n\nexport default MergedCellsCollection;\n","import { toSingleLine } from '../../helpers/templateLiteralTag';\n\n/**\n * The `MergedCellCoords` class represents a single merged cell.\n *\n * @private\n * @class MergedCellCoords\n */\nclass MergedCellCoords {\n  /**\n   * The index of the topmost merged cell row.\n   *\n   * @type {number}\n   */\n  row;\n  /**\n   * The index of the leftmost column.\n   *\n   * @type {number}\n   */\n  col;\n  /**\n   * The `rowspan` value of the merged cell.\n   *\n   * @type {number}\n   */\n  rowspan;\n  /**\n   * The `colspan` value of the merged cell.\n   *\n   * @type {number}\n   */\n  colspan;\n  /**\n   * `true` only if the merged cell is bound to be removed.\n   *\n   * @type {boolean}\n   */\n  removed = false;\n  /**\n   * The CellCoords function factory.\n   *\n   * @type {Function}\n   */\n  cellCoordsFactory;\n  /**\n   * The CellRange function factory.\n   *\n   * @type {Function}\n   */\n  cellRangeFactory;\n  /**\n   * The cached range coordinates of the merged cell.\n   *\n   * @type {CellRange}\n   */\n  #cellRange = null;\n\n  constructor(row, column, rowspan, colspan, cellCoordsFactory, cellRangeFactory) {\n    this.row = row;\n    this.col = column;\n    this.rowspan = rowspan;\n    this.colspan = colspan;\n    this.cellCoordsFactory = cellCoordsFactory;\n    this.cellRangeFactory = cellRangeFactory;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data contains negative values.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static NEGATIVE_VALUES_WARNING({ row, col, rowspan, colspan }) {\n    return toSingleLine`The merged cell declared with {row: ${row}, col: ${col},\\x20\n      rowspan: ${rowspan}, colspan: ${colspan}} contains negative values, which is\\x20\n      not supported. It will not be added to the collection.`;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data contains values exceeding the table limits.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static IS_OUT_OF_BOUNDS_WARNING({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}] is positioned\\x20\n      (or positioned partially) outside of the table range. It was not added to the table, please fix your setup.`;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data represents a single cell.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static IS_SINGLE_CELL({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}] has both \"rowspan\"\\x20\n      and \"colspan\" declared as \"1\", which makes it a single cell. It cannot be added to the collection.`;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data contains \"colspan\" or \"rowspan\", that equals 0.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static ZERO_SPAN_WARNING({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}] has \"rowspan\"\\x20\n      or \"colspan\" declared as \"0\", which is not supported. It cannot be added to the collection.`;\n  }\n\n  /**\n   * Check whether the values provided for a merged cell contain any negative values.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {boolean}\n   */\n  static containsNegativeValues({ row, col, rowspan, colspan }) {\n    return row < 0 || col < 0 || rowspan < 0 || colspan < 0;\n  }\n\n  /**\n   * Check whether the provided merged cell information object represents a single cell.\n   *\n   * @private\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {boolean}\n   */\n  static isSingleCell({ rowspan, colspan }) {\n    return colspan === 1 && rowspan === 1;\n  }\n\n  /**\n   * Check whether the provided merged cell information object contains a rowspan or colspan of 0.\n   *\n   * @private\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {boolean}\n   */\n  static containsZeroSpan({ rowspan, colspan }) {\n    return colspan === 0 || rowspan === 0;\n  }\n\n  /**\n   * Check whether the provided merged cell object is to be declared out of bounds of the table.\n   *\n   * @param {object} mergeCell Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n   * @param {number} rowCount Number of rows in the table.\n   * @param {number} columnCount Number of rows in the table.\n   * @returns {boolean}\n   */\n  static isOutOfBounds(mergeCell, rowCount, columnCount) {\n    return mergeCell.row < 0 ||\n      mergeCell.col < 0 ||\n      mergeCell.row >= rowCount ||\n      mergeCell.row + mergeCell.rowspan - 1 >= rowCount ||\n      mergeCell.col >= columnCount ||\n      mergeCell.col + mergeCell.colspan - 1 >= columnCount;\n  }\n\n  /**\n   * Sanitize (prevent from going outside the boundaries) the merged cell.\n   *\n   * @param {Core} hotInstance The Handsontable instance.\n   */\n  normalize(hotInstance) {\n    const totalRows = hotInstance.countRows();\n    const totalColumns = hotInstance.countCols();\n\n    if (this.row < 0) {\n      this.row = 0;\n\n    } else if (this.row > totalRows - 1) {\n      this.row = totalRows - 1;\n    }\n\n    if (this.col < 0) {\n      this.col = 0;\n\n    } else if (this.col > totalColumns - 1) {\n      this.col = totalColumns - 1;\n    }\n\n    if (this.row + this.rowspan > totalRows - 1) {\n      this.rowspan = totalRows - this.row;\n    }\n\n    if (this.col + this.colspan > totalColumns - 1) {\n      this.colspan = totalColumns - this.col;\n    }\n\n    this.#cellRange = null;\n  }\n\n  /**\n   * Returns `true` if the provided coordinates are inside the merged cell.\n   *\n   * @param {number} row The row index.\n   * @param {number} column The column index.\n   * @returns {boolean}\n   */\n  includes(row, column) {\n    return this.row <= row && this.col <= column &&\n      this.row + this.rowspan - 1 >= row && this.col + this.colspan - 1 >= column;\n  }\n\n  /**\n   * Returns `true` if the provided `column` property is within the column span of the merged cell.\n   *\n   * @param {number} column The column index.\n   * @returns {boolean}\n   */\n  includesHorizontally(column) {\n    return this.col <= column && this.col + this.colspan - 1 >= column;\n  }\n\n  /**\n   * Returns `true` if the provided `row` property is within the row span of the merged cell.\n   *\n   * @param {number} row Row index.\n   * @returns {boolean}\n   */\n  includesVertically(row) {\n    return this.row <= row && this.row + this.rowspan - 1 >= row;\n  }\n\n  /**\n   * Shift (and possibly resize, if needed) the merged cell.\n   *\n   * @param {Array} shiftVector 2-element array containing the information on the shifting in the `x` and `y` axis.\n   * @param {number} indexOfChange Index of the preceding change.\n   * @returns {boolean} Returns `false` if the whole merged cell was removed.\n   */\n  shift(shiftVector, indexOfChange) {\n    const shiftValue = shiftVector[0] || shiftVector[1];\n    const shiftedIndex = indexOfChange + Math.abs(shiftVector[0] || shiftVector[1]) - 1;\n    const span = shiftVector[0] ? 'colspan' : 'rowspan';\n    const index = shiftVector[0] ? 'col' : 'row';\n    const changeStart = Math.min(indexOfChange, shiftedIndex);\n    const changeEnd = Math.max(indexOfChange, shiftedIndex);\n    const mergeStart = this[index];\n    const mergeEnd = this[index] + this[span] - 1;\n\n    if (mergeStart >= indexOfChange) {\n      this[index] += shiftValue;\n    }\n\n    // adding rows/columns\n    if (shiftValue > 0) {\n      if (indexOfChange <= mergeEnd && indexOfChange > mergeStart) {\n        this[span] += shiftValue;\n      }\n\n      // removing rows/columns\n    } else if (shiftValue < 0) {\n\n      // removing the whole merge\n      if (changeStart <= mergeStart && changeEnd >= mergeEnd) {\n        this.removed = true;\n        this.#cellRange = null;\n\n        return false;\n\n        // removing the merge partially, including the beginning\n      } else if (mergeStart >= changeStart && mergeStart <= changeEnd) {\n        const removedOffset = changeEnd - mergeStart + 1;\n        const preRemovedOffset = Math.abs(shiftValue) - removedOffset;\n\n        this[index] -= preRemovedOffset + shiftValue;\n        this[span] -= removedOffset;\n\n        // removing the middle part of the merge\n      } else if (mergeStart <= changeStart && mergeEnd >= changeEnd) {\n        this[span] += shiftValue;\n\n        // removing the end part of the merge\n      } else if (mergeStart <= changeStart && mergeEnd >= changeStart && mergeEnd < changeEnd) {\n        const removedPart = mergeEnd - changeStart + 1;\n\n        this[span] -= removedPart;\n      }\n    }\n\n    this.#cellRange = null;\n\n    return true;\n  }\n\n  /**\n   * Check if the second provided merged cell is \"farther\" in the provided direction.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to check.\n   * @param {string} direction Drag direction.\n   * @returns {boolean|null} `true` if the second provided merged cell is \"farther\".\n   */\n  isFarther(mergedCell, direction) {\n    if (!mergedCell) {\n      return true;\n    }\n\n    if (direction === 'down') {\n      return mergedCell.row + mergedCell.rowspan - 1 < this.row + this.rowspan - 1;\n\n    } else if (direction === 'up') {\n      return mergedCell.row > this.row;\n\n    } else if (direction === 'right') {\n      return mergedCell.col + mergedCell.colspan - 1 < this.col + this.colspan - 1;\n\n    } else if (direction === 'left') {\n      return mergedCell.col > this.col;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get the bottom row index of the merged cell.\n   *\n   * @returns {number}\n   */\n  getLastRow() {\n    return this.row + this.rowspan - 1;\n  }\n\n  /**\n   * Get the rightmost column index of the merged cell.\n   *\n   * @returns {number}\n   */\n  getLastColumn() {\n    return this.col + this.colspan - 1;\n  }\n\n  /**\n   * Get the range coordinates of the merged cell.\n   *\n   * @returns {CellRange}\n   */\n  getRange() {\n    if (!this.#cellRange) {\n      this.#cellRange = this.cellRangeFactory(\n        this.cellCoordsFactory(this.row, this.col),\n        this.cellCoordsFactory(this.row, this.col),\n        this.cellCoordsFactory(this.getLastRow(), this.getLastColumn()),\n      );\n    }\n\n    return this.#cellRange;\n  }\n}\n\nexport default MergedCellCoords;\n","import { extend } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\n\n/**\n * Class responsible for all of the Autofill-related operations on merged cells.\n *\n * @private\n * @class AutofillCalculations\n */\nclass AutofillCalculations {\n  /**\n   * Reference to the Merge Cells plugin.\n   *\n   * @type {MergeCells}\n   */\n  plugin;\n  /**\n   * Reference to the MergedCellsCollection class instance.\n   *\n   * @type {MergedCellsCollection}\n   */\n  mergedCellsCollection;\n  /**\n   * Cache of the currently processed autofill data.\n   *\n   * @private\n   * @type {object}\n   */\n  currentFillData = null;\n\n  constructor(plugin) {\n    this.plugin = plugin;\n    this.mergedCellsCollection = this.plugin.mergedCellsCollection;\n  }\n\n  /**\n   * Correct the provided selection area, so it's not selecting only a part of a merged cell.\n   *\n   * @param {Array} selectionArea The selection to correct.\n   */\n  correctSelectionAreaSize(selectionArea) {\n    if (selectionArea[0] === selectionArea[2] && selectionArea[1] === selectionArea[3]) {\n      const mergedCell = this.mergedCellsCollection.get(selectionArea[0], selectionArea[1]);\n\n      if (mergedCell) {\n        selectionArea[2] = selectionArea[0] + mergedCell.rowspan - 1;\n        selectionArea[3] = selectionArea[1] + mergedCell.colspan - 1;\n      }\n    }\n  }\n\n  /**\n   * Get the direction of the autofill process.\n   *\n   * @param {Array} selectionArea The selection area.\n   * @param {Array} finalArea The final area (base + drag).\n   * @returns {string} `up`, `down`, `left` or `right`.\n   */\n  getDirection(selectionArea, finalArea) {\n    let direction = null;\n\n    if (finalArea[0] === selectionArea[0] &&\n        finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n      direction = 'down';\n\n    } else if (finalArea[2] === selectionArea[2] &&\n               finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n      direction = 'up';\n\n    } else if (finalArea[1] === selectionArea[1] && finalArea[2] === selectionArea[2]) {\n      direction = 'right';\n\n    } else {\n      direction = 'left';\n    }\n\n    return direction;\n  }\n\n  /**\n   * Snap the drag area to the farthest merged cell, so it won't clip any of the merged cells.\n   *\n   * @param {Array} baseArea The base selected area.\n   * @param {Array} dragArea The drag area.\n   * @param {string} dragDirection The autofill drag direction.\n   * @param {Array} foundMergedCells MergeCellCoords found in the base selection area.\n   * @returns {Array} The new drag area.\n   */\n  snapDragArea(baseArea, dragArea, dragDirection, foundMergedCells) {\n    const newDragArea = dragArea.slice(0);\n    const fillSize = this.getAutofillSize(baseArea, dragArea, dragDirection);\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const verticalDirection = ['up', 'down'].indexOf(dragDirection) > -1;\n    const fullCycle = verticalDirection ?\n      baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n    const fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n    const partials = fillSize - fulls;\n    const farthestCollection = this.getFarthestCollection(baseArea, dragArea, dragDirection, foundMergedCells);\n\n    if (farthestCollection) {\n      if (dragDirection === 'down') {\n        const fill = farthestCollection.row + farthestCollection.rowspan - baseAreaStartRow - partials;\n        const newLimit = newDragArea[2] + fill;\n\n        if (newLimit >= this.plugin.hot.countRows()) {\n          newDragArea[2] -= partials;\n\n        } else {\n          newDragArea[2] += partials ? fill : 0;\n        }\n\n      } else if (dragDirection === 'right') {\n        const fill = farthestCollection.col + farthestCollection.colspan - baseAreaStartColumn - partials;\n        const newLimit = newDragArea[3] + fill;\n\n        if (newLimit >= this.plugin.hot.countCols()) {\n          newDragArea[3] -= partials;\n\n        } else {\n          newDragArea[3] += partials ? fill : 0;\n        }\n\n      } else if (dragDirection === 'up') {\n        const fill = baseAreaEndRow - partials - farthestCollection.row + 1;\n        const newLimit = newDragArea[0] + fill;\n\n        if (newLimit < 0) {\n          newDragArea[0] += partials;\n\n        } else {\n          newDragArea[0] -= partials ? fill : 0;\n        }\n\n      } else if (dragDirection === 'left') {\n        const fill = baseAreaEndColumn - partials - farthestCollection.col + 1;\n        const newLimit = newDragArea[1] + fill;\n\n        if (newLimit < 0) {\n          newDragArea[1] += partials;\n\n        } else {\n          newDragArea[1] -= partials ? fill : 0;\n        }\n      }\n    }\n\n    this.updateCurrentFillCache({\n      baseArea,\n      dragDirection,\n      foundMergedCells,\n      fillSize,\n      dragArea: newDragArea,\n      cycleLength: fullCycle,\n    });\n\n    return newDragArea;\n  }\n\n  /**\n   * Update the current fill cache with the provided object.\n   *\n   * @private\n   * @param {object} updateObject The current filled object cache.\n   */\n  updateCurrentFillCache(updateObject) {\n    if (!this.currentFillData) {\n      this.currentFillData = {};\n    }\n\n    extend(this.currentFillData, updateObject);\n  }\n\n  /**\n   * Get the \"length\" of the drag area.\n   *\n   * @private\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} dragArea The drag area (containing the base area).\n   * @param {string} direction The drag direction.\n   * @returns {number|null} The \"length\" (height or width, depending on the direction) of the drag.\n   */\n  getAutofillSize(baseArea, dragArea, direction) {\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n\n    switch (direction) {\n      case 'up':\n        return baseAreaStartRow - dragAreaStartRow;\n      case 'down':\n        return dragAreaEndRow - baseAreaEndRow;\n      case 'left':\n        return baseAreaStartColumn - dragAreaStartColumn;\n      case 'right':\n        return dragAreaEndColumn - baseAreaEndColumn;\n      default:\n        return null;\n    }\n  }\n\n  /**\n   * Trim the default drag area (containing the selection area) to the drag-only area.\n   *\n   * @private\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} dragArea The base selection area extended by the drag area.\n   * @param {string} direction Drag direction.\n   * @returns {Array|null} Array representing the drag area coordinates.\n   */\n  getDragArea(baseArea, dragArea, direction) {\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n\n    switch (direction) {\n      case 'up':\n        return [dragAreaStartRow, dragAreaStartColumn, baseAreaStartRow - 1, baseAreaEndColumn];\n      case 'down':\n        return [baseAreaEndRow + 1, baseAreaStartColumn, dragAreaEndRow, baseAreaEndColumn];\n      case 'left':\n        return [dragAreaStartRow, dragAreaStartColumn, baseAreaEndRow, baseAreaStartColumn - 1];\n      case 'right':\n        return [baseAreaStartRow, baseAreaEndColumn + 1, dragAreaEndRow, dragAreaEndColumn];\n      default:\n        return null;\n    }\n  }\n\n  /**\n   * Get the to-be-farthest merged cell in the newly filled area.\n   *\n   * @private\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} dragArea The drag area (containing the base area).\n   * @param {string} direction The drag direction.\n   * @param {Array} mergedCellArray Array of the merged cells found in the base area.\n   * @returns {MergedCellCoords|null}\n   */\n  getFarthestCollection(baseArea, dragArea, direction, mergedCellArray) {\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const verticalDirection = ['up', 'down'].indexOf(direction) > -1;\n    const baseEnd = verticalDirection ? baseAreaEndRow : baseAreaEndColumn;\n    const baseStart = verticalDirection ? baseAreaStartRow : baseAreaStartColumn;\n    const fillSize = this.getAutofillSize(baseArea, dragArea, direction);\n    const fullCycle = verticalDirection ?\n      baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n    const fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n    const partials = fillSize - fulls;\n    let inclusionFunctionName = null;\n    let farthestCollection = null;\n    let endOfDragRecreationIndex = null;\n\n    switch (direction) {\n      case 'up':\n        inclusionFunctionName = 'includesVertically';\n        endOfDragRecreationIndex = baseEnd - partials + 1;\n        break;\n\n      case 'left':\n        inclusionFunctionName = 'includesHorizontally';\n        endOfDragRecreationIndex = baseEnd - partials + 1;\n        break;\n\n      case 'down':\n        inclusionFunctionName = 'includesVertically';\n        endOfDragRecreationIndex = baseStart + partials - 1;\n        break;\n\n      case 'right':\n        inclusionFunctionName = 'includesHorizontally';\n        endOfDragRecreationIndex = baseStart + partials - 1;\n        break;\n\n      default:\n    }\n\n    arrayEach(mergedCellArray, (currentCollection) => {\n      if (currentCollection[inclusionFunctionName](endOfDragRecreationIndex) &&\n        currentCollection.isFarther(farthestCollection, direction)) {\n        farthestCollection = currentCollection;\n      }\n    });\n\n    return farthestCollection;\n  }\n\n  /**\n   * Recreate the merged cells after the autofill process.\n   *\n   * @param {Array} changes Changes made.\n   */\n  recreateAfterDataPopulation(changes) {\n    if (!this.currentFillData) {\n      return;\n    }\n\n    const fillRange = this.getRangeFromChanges(changes);\n    const foundMergedCells = this.currentFillData.foundMergedCells;\n    const dragDirection = this.currentFillData.dragDirection;\n    const inBounds = (current, offset) => {\n      switch (dragDirection) {\n        case 'up':\n          return current.row - offset >= fillRange.from.row;\n        case 'down':\n          return current.row + current.rowspan - 1 + offset <= fillRange.to.row;\n        case 'left':\n          return current.col - offset >= fillRange.from.column;\n        case 'right':\n          return current.col + current.colspan - 1 + offset <= fillRange.to.column;\n        default:\n          return null;\n      }\n    };\n    let fillOffset = 0;\n    let current = null;\n    let multiplier = 1;\n\n    do {\n      for (let j = 0; j < foundMergedCells.length; j += 1) {\n        current = foundMergedCells[j];\n\n        fillOffset = multiplier * this.currentFillData.cycleLength;\n\n        if (inBounds(current, fillOffset)) {\n          switch (dragDirection) {\n            case 'up':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row - fillOffset,\n                rowspan: current.rowspan,\n                col: current.col,\n                colspan: current.colspan\n              });\n              break;\n\n            case 'down':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row + fillOffset,\n                rowspan: current.rowspan,\n                col: current.col,\n                colspan: current.colspan\n              });\n              break;\n\n            case 'left':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row,\n                rowspan: current.rowspan,\n                col: current.col - fillOffset,\n                colspan: current.colspan\n              });\n              break;\n\n            case 'right':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row,\n                rowspan: current.rowspan,\n                col: current.col + fillOffset,\n                colspan: current.colspan\n              });\n              break;\n\n            default:\n          }\n        }\n\n        if (j === foundMergedCells.length - 1) {\n          multiplier += 1;\n        }\n      }\n\n    } while (inBounds(current, fillOffset));\n\n    this.currentFillData = null;\n    this.plugin.hot.render();\n\n    if (foundMergedCells.length > 0) {\n      this.plugin.ifChromeForceRepaint();\n    }\n  }\n\n  /**\n   * Get the drag range from the changes made.\n   *\n   * @private\n   * @param {Array} changes The changes made.\n   * @returns {object} Object with `from` and `to` properties, both containing `row` and `column` keys.\n   */\n  getRangeFromChanges(changes) {\n    const rows = { min: null, max: null };\n    const columns = { min: null, max: null };\n\n    arrayEach(changes, (change) => {\n      const rowIndex = change[0];\n      const columnIndex = this.plugin.hot.propToCol(change[1]);\n\n      if (rows.min === null || rowIndex < rows.min) {\n        rows.min = rowIndex;\n      }\n\n      if (rows.max === null || rowIndex > rows.max) {\n        rows.max = rowIndex;\n      }\n\n      if (columns.min === null || columnIndex < columns.min) {\n        columns.min = columnIndex;\n      }\n\n      if (columns.max === null || columnIndex > columns.max) {\n        columns.max = columnIndex;\n      }\n    });\n\n    return {\n      from: {\n        row: rows.min,\n        column: columns.min\n      },\n      to: {\n        row: rows.max,\n        column: columns.max\n      }\n    };\n  }\n\n  /**\n   * Check if the drag area contains any merged cells.\n   *\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} fullArea The base area extended by the drag area.\n   * @param {string} direction Drag direction.\n   * @returns {boolean}\n   */\n  dragAreaOverlapsCollections(baseArea, fullArea, direction) {\n    const dragArea = this.getDragArea(baseArea, fullArea, direction);\n    const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n    const topLeft = this.plugin.hot._createCellCoords(dragAreaStartRow, dragAreaStartColumn);\n    const bottomRight = this.plugin.hot._createCellCoords(dragAreaEndRow, dragAreaEndColumn);\n    const dragRange = this.plugin.hot._createCellRange(topLeft, topLeft, bottomRight);\n\n    return this.mergedCellsCollection.getWithinRange(dragRange, true).length > 0;\n  }\n}\n\nexport default AutofillCalculations;\n","/**\n * Class responsible for all of the Selection-related operations on merged cells.\n *\n * @private\n * @class SelectionCalculations\n */\nclass SelectionCalculations {\n  /**\n   * Reference to the Merge Cells plugin.\n   *\n   * @type {MergeCells}\n   */\n  plugin;\n  /**\n   * Reference to the Handsontable instance.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Class name used for fully selected merged cells.\n   *\n   * @type {string}\n   */\n  fullySelectedMergedCellClassName = 'fullySelectedMergedCell';\n\n  constructor(plugin) {\n    this.plugin = plugin;\n    this.hot = plugin.hot;\n  }\n\n  /**\n   * Generate an additional class name for the entirely-selected merged cells.\n   *\n   * @param {number} currentRow Visual row index of the currently processed cell.\n   * @param {number} currentColumn Visual column index of the currently cell.\n   * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n   * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n   * @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n   */\n  getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n    const startRow = Math.min(cornersOfSelection[0], cornersOfSelection[2]);\n    const startColumn = Math.min(cornersOfSelection[1], cornersOfSelection[3]);\n    const endRow = Math.max(cornersOfSelection[0], cornersOfSelection[2]);\n    const endColumn = Math.max(cornersOfSelection[1], cornersOfSelection[3]);\n\n    if (layerLevel === undefined) {\n      return;\n    }\n\n    const isFirstRenderableMergedCell =\n      this.plugin.mergedCellsCollection.isFirstRenderableMergedCell(currentRow, currentColumn);\n\n    // We add extra classes just to the first renderable merged cell.\n    if (!isFirstRenderableMergedCell) {\n      return;\n    }\n\n    const mergedCell = this.plugin.mergedCellsCollection.get(currentRow, currentColumn);\n\n    if (!mergedCell) {\n      return;\n    }\n\n    const mergeRowEnd = mergedCell.getLastRow();\n    const mergeColumnEnd = mergedCell.getLastColumn();\n    const fullMergeAreaWithinSelection =\n      startRow <= mergedCell.row && startColumn <= mergedCell.col &&\n      endRow >= mergeRowEnd && endColumn >= mergeColumnEnd;\n\n    if (fullMergeAreaWithinSelection) {\n      return `${this.fullySelectedMergedCellClassName}-${layerLevel}`;\n\n    } else if (this.isMergeCellFullySelected(mergedCell, this.plugin.hot.getSelectedRange())) {\n      return `${this.fullySelectedMergedCellClassName}-multiple`;\n    }\n  }\n\n  /**\n   * Check if the provided merged cell is fully selected (by one or many layers of selection).\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to be processed.\n   * @param {CellRange[]} selectionRangesArray Array of selection ranges.\n   * @returns {boolean}\n   */\n  isMergeCellFullySelected(mergedCell, selectionRangesArray) {\n    const mergedCellIndividualCoords = [];\n\n    if (!selectionRangesArray || !mergedCell) {\n      return false;\n    }\n\n    for (let r = 0; r < mergedCell.rowspan; r += 1) {\n      for (let c = 0; c < mergedCell.colspan; c += 1) {\n        mergedCellIndividualCoords.push(this.hot._createCellCoords(mergedCell.row + r, mergedCell.col + c));\n      }\n    }\n\n    for (let i = 0; i < mergedCellIndividualCoords.length; i += 1) {\n      const insideSelections = [];\n\n      for (let s = 0; s < selectionRangesArray.length; s += 1) {\n        insideSelections[s] = selectionRangesArray[s].includes(mergedCellIndividualCoords[i]);\n      }\n\n      if (!insideSelections.includes(true)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Generate an array of the entirely-selected merged cells' class names.\n   *\n   * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n   */\n  getSelectedMergedCellClassNameToRemove() {\n    const classNames = [];\n\n    for (let i = 0; i <= 7; i += 1) {\n      classNames.push(`${this.fullySelectedMergedCellClassName}-${i}`);\n    }\n\n    classNames.push(`${this.fullySelectedMergedCellClassName}-multiple`);\n\n    return classNames;\n  }\n}\n\nexport default SelectionCalculations;\n","import * as C from '../../../i18n/constants';\nimport MergedCellCoords from '../cellCoords';\n\n/**\n * @param {*} plugin The plugin instance.\n * @returns {object}\n */\nexport default function toggleMergeItem(plugin) {\n  return {\n    key: 'mergeCells',\n    name() {\n      const sel = this.getSelectedLast();\n\n      if (sel) {\n        const info = plugin.mergedCellsCollection.get(sel[0], sel[1]);\n\n        if (info.row === sel[0] && info.col === sel[1] &&\n            info.row + info.rowspan - 1 === sel[2] && info.col + info.colspan - 1 === sel[3]) {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNMERGE_CELLS);\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_MERGE_CELLS);\n    },\n    callback() {\n      const currentRange = this.getSelectedRangeLast();\n\n      if (!currentRange) {\n        return;\n      }\n\n      currentRange.setDirection(this.isRtl() ? 'NE-SW' : 'NW-SE');\n\n      const { from, to } = currentRange;\n\n      plugin.toggleMerge(currentRange);\n      this.selectCell(from.row, from.col, to.row, to.col, false);\n    },\n    disabled() {\n      const sel = this.getSelectedLast();\n\n      if (!sel) {\n        return true;\n      }\n\n      const isSingleCell = MergedCellCoords.isSingleCell({\n        row: sel[0],\n        col: sel[1],\n        rowspan: sel[2] - sel[0] + 1,\n        colspan: sel[3] - sel[1] + 1\n      });\n\n      return isSingleCell || this.selection.isSelectedByCorner();\n    },\n    hidden: false\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","import LinkedList from '../../utils/dataStructures/linkedList';\n\n/**\n * Class responsible for providing the correct focus order (vertical and horizontal) within a selection that\n * contains merged cells.\n *\n * @private\n */\nexport class FocusOrder {\n  /**\n   * The linked list of the all cells within the current selection in horizontal order. The list is\n   * recreated every time the selection is changed.\n   *\n   * @type {LinkedList}\n   */\n  #cellsHorizontalOrder = new LinkedList();\n  /**\n   * The linked list of the all cells within the current selection in horizontal order. The list is\n   * recreated every time the selection is changed.\n   *\n   * @type {LinkedList}\n   */\n  #cellsVerticalOrder = new LinkedList();\n  /**\n   * The currently highlighted cell within the horizontal linked list.\n   *\n   * @type {NodeStructure | null}\n   */\n  #currentHorizontalLinkedNode = null;\n  /**\n   * The currently highlighted cell within the vertical linked list.\n   *\n   * @type {NodeStructure | null}\n   */\n  #currentVerticalLinkedNode = null;\n  /**\n   * The merged cells getter function.\n   *\n   * @type {function(): {row: number, col: number, rowspan: number, colspan: number} | null}}\n   */\n  #mergedCellsGetter = null;\n  /**\n   * The row index mapper.\n   *\n   * @type {IndexMapper}\n   */\n  #rowIndexMapper = null;\n  /**\n   * The column index mapper.\n   *\n   * @type {IndexMapper}\n   */\n  #columnIndexMapper = null;\n\n  constructor({ mergedCellsGetter, rowIndexMapper, columnIndexMapper }) {\n    this.#mergedCellsGetter = mergedCellsGetter;\n    this.#rowIndexMapper = rowIndexMapper;\n    this.#columnIndexMapper = columnIndexMapper;\n  }\n\n  /**\n   * Gets the currently selected node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getCurrentVerticalNode() {\n    return this.#currentVerticalLinkedNode.data;\n  }\n\n  /**\n   * Gets the first node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getFirstVerticalNode() {\n    return this.#cellsVerticalOrder.first.data;\n  }\n\n  /**\n   * Gets the next selected node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getNextVerticalNode() {\n    return this.#currentVerticalLinkedNode.next.data;\n  }\n\n  /**\n   * Gets the previous selected node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getPrevVerticalNode() {\n    return this.#currentVerticalLinkedNode.prev.data;\n  }\n\n  /**\n   * Gets the currently selected node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getCurrentHorizontalNode() {\n    return this.#currentHorizontalLinkedNode.data;\n  }\n\n  /**\n   * Gets the first node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getFirstHorizontalNode() {\n    return this.#cellsHorizontalOrder.first.data;\n  }\n\n  /**\n   * Gets the next selected node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getNextHorizontalNode() {\n    return this.#currentHorizontalLinkedNode.next.data;\n  }\n\n  /**\n   * Gets the previous selected node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getPrevHorizontalNode() {\n    return this.#currentHorizontalLinkedNode.prev.data;\n  }\n\n  /**\n   * Sets the previous node from the vertical focus order list as active.\n   */\n  setPrevNodeAsActive() {\n    this.#currentVerticalLinkedNode = this.#currentVerticalLinkedNode.prev;\n    this.#currentHorizontalLinkedNode = this.#currentHorizontalLinkedNode.prev;\n  }\n\n  /**\n   * Sets the previous node from the horizontal focus order list as active.\n   */\n  setNextNodeAsActive() {\n    this.#currentVerticalLinkedNode = this.#currentVerticalLinkedNode.next;\n    this.#currentHorizontalLinkedNode = this.#currentHorizontalLinkedNode.next;\n  }\n\n  /**\n   * Rebuilds the focus order list based on the provided selection.\n   *\n   * @param {CellRange} selectedRange The selected range to build the focus order for.\n   */\n  buildFocusOrder(selectedRange) {\n    const topStart = selectedRange.getTopStartCorner();\n    const bottomEnd = selectedRange.getBottomEndCorner();\n    const visitedHorizontalCells = new WeakSet();\n\n    this.#cellsHorizontalOrder = new LinkedList();\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      if (this.#rowIndexMapper.isHidden(r)) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        if (this.#columnIndexMapper.isHidden(c)) {\n          // eslint-disable-next-line no-continue\n          continue;\n        }\n\n        const node = this.#pushOrderNode(selectedRange, this.#cellsHorizontalOrder, visitedHorizontalCells, r, c);\n\n        if (node) {\n          this.#currentHorizontalLinkedNode = node;\n        }\n      }\n    }\n\n    // create circular linked list\n    if (this.#cellsHorizontalOrder.first) {\n      this.#cellsHorizontalOrder.first.prev = this.#cellsHorizontalOrder.last;\n      this.#cellsHorizontalOrder.last.next = this.#cellsHorizontalOrder.first;\n    }\n\n    const visitedVerticalCells = new WeakSet();\n\n    this.#cellsVerticalOrder = new LinkedList();\n\n    for (let c = topStart.col; c <= bottomEnd.col; c++) {\n      if (this.#columnIndexMapper.isHidden(c)) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      for (let r = topStart.row; r <= bottomEnd.row; r++) {\n        if (this.#rowIndexMapper.isHidden(r)) {\n          // eslint-disable-next-line no-continue\n          continue;\n        }\n\n        const node = this.#pushOrderNode(selectedRange, this.#cellsVerticalOrder, visitedVerticalCells, r, c);\n\n        if (node) {\n          this.#currentVerticalLinkedNode = node;\n        }\n      }\n    }\n\n    // create circular linked list\n    if (this.#cellsVerticalOrder.first) {\n      this.#cellsVerticalOrder.first.prev = this.#cellsVerticalOrder.last;\n      this.#cellsVerticalOrder.last.next = this.#cellsVerticalOrder.first;\n    }\n  }\n\n  /**\n   * Pushes a new node to the provided list order.\n   *\n   * @param {CellRange} selectedRange The selected range to build the focus order for.\n   * @param {LinkedList} listOrder The list order to push the node to.\n   * @param {WeakSet} mergeCellsVisitor The set of visited cells.\n   * @param {number} row The visual row index.\n   * @param {number} column The visual column index.\n   * @returns {NodeStructure | null}\n   */\n  #pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column) {\n    const topStart = selectedRange.getTopStartCorner();\n    const bottomEnd = selectedRange.getBottomEndCorner();\n    const highlight = selectedRange.highlight.clone().normalize();\n    const mergeParent = this.#mergedCellsGetter(row, column);\n\n    if (mergeParent && mergeCellsVisitor.has(mergeParent)) {\n      return null;\n    }\n\n    const node = {\n      colStart: column,\n      colEnd: column,\n      rowStart: row,\n      rowEnd: row,\n    };\n\n    if (mergeParent) {\n      mergeCellsVisitor.add(mergeParent);\n\n      if (\n        mergeParent.row < topStart.row ||\n        mergeParent.row + mergeParent.rowspan - 1 > bottomEnd.row ||\n        mergeParent.col < topStart.col ||\n        mergeParent.col + mergeParent.colspan - 1 > bottomEnd.col\n      ) {\n        return null;\n      }\n\n      node.colStart = mergeParent.col;\n      node.colEnd = mergeParent.col + mergeParent.colspan - 1;\n      node.rowStart = mergeParent.row;\n      node.rowEnd = mergeParent.row + mergeParent.rowspan - 1;\n    }\n\n    const linkedNode = listOrder.push(node);\n\n    if (\n      row === highlight.row && column === highlight.col ||\n      mergeParent &&\n      (highlight.row >= mergeParent.row && highlight.row <= mergeParent.row + mergeParent.rowspan - 1 &&\n      highlight.col >= mergeParent.col && highlight.col <= mergeParent.col + mergeParent.colspan - 1)\n    ) {\n      return linkedNode;\n    }\n\n    return null;\n  }\n\n  /**\n   * Sets the active node based on the provided row and column.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} column The visual column index.\n   * @returns {FocusOrder}\n   */\n  setActiveNode(row, column) {\n    this.#cellsHorizontalOrder.inorder((node) => {\n      const { rowStart, rowEnd, colStart, colEnd } = node.data;\n\n      if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {\n        this.#currentHorizontalLinkedNode = node;\n\n        return false;\n      }\n    });\n\n    this.#cellsVerticalOrder.inorder((node) => {\n      const { rowStart, rowEnd, colStart, colEnd } = node.data;\n\n      if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {\n        this.#currentVerticalLinkedNode = node;\n\n        return false;\n      }\n    });\n\n    return this;\n  }\n}\n","/**\n * Refactored implementation of LinkedList (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia, Microfed and Jakeh (part of javascript-algorithms project - all project contributors\n * at repository website).\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms.\n */\n\n/**\n * Linked list node.\n *\n * @class NodeStructure\n * @util\n */\nclass NodeStructure {\n  /**\n   * Data of the node.\n   *\n   * @member {object}\n   */\n  data;\n  /**\n   * Next node.\n   *\n   * @member {NodeStructure}\n   */\n  next = null;\n  /**\n   * Previous node.\n   *\n   * @member {NodeStructure}\n   */\n  prev = null;\n\n  constructor(data) {\n    this.data = data;\n  }\n}\n\n/**\n * Linked list.\n *\n * @class LinkedList\n * @util\n */\nclass LinkedList {\n  first = null;\n  last = null;\n\n  /**\n   * Add data to the end of linked list.\n   *\n   * @param {object} data Data which should be added.\n   * @returns {NodeStructure} Returns the node which has been added.\n   */\n  push(data) {\n    const node = new NodeStructure(data);\n\n    if (this.first === null) {\n      this.first = node;\n      this.last = node;\n\n    } else {\n      const temp = this.last;\n\n      this.last = node;\n      node.prev = temp;\n      temp.next = node;\n    }\n\n    return node;\n  }\n\n  /**\n   * Add data to the beginning of linked list.\n   *\n   * @param {object} data Data which should be added.\n   */\n  unshift(data) {\n    const node = new NodeStructure(data);\n\n    if (this.first === null) {\n      this.first = node;\n      this.last = node;\n\n    } else {\n      const temp = this.first;\n\n      this.first = node;\n      node.next = temp;\n      temp.prev = node;\n    }\n  }\n\n  /**\n   * In order traversal of the linked list.\n   *\n   * @param {Function} callback Callback which should be executed on each node.\n   */\n  inorder(callback) {\n    let temp = this.first;\n\n    while (temp) {\n      const interrupt = callback(temp);\n\n      if (temp === this.last || interrupt === true) {\n        break;\n      }\n\n      temp = temp.next;\n    }\n  }\n\n  /**\n   * Remove data from the linked list.\n   *\n   * @param {object} data Data which should be removed.\n   * @returns {boolean} Returns true if data has been removed.\n   */\n  remove(data) {\n    if (this.first === null) {\n      return false;\n    }\n\n    let temp = this.first;\n    let next;\n    let prev;\n\n    while (temp) {\n      if (temp.data === data) {\n        next = temp.next;\n        prev = temp.prev;\n\n        if (next) {\n          next.prev = prev;\n        }\n\n        if (prev) {\n          prev.next = next;\n        }\n\n        if (temp === this.first) {\n          this.first = next;\n        }\n\n        if (temp === this.last) {\n          this.last = prev;\n        }\n\n        return true;\n      }\n\n      temp = temp.next;\n    }\n\n    return false;\n  }\n\n  /**\n   * Check if linked list contains cycle.\n   *\n   * @returns {boolean} Returns true if linked list contains cycle.\n   */\n  hasCycle() {\n    let fast = this.first;\n    let slow = this.first;\n\n    while (true) {\n      if (fast === null) {\n        return false;\n      }\n\n      fast = fast.next;\n\n      if (fast === null) {\n        return false;\n      }\n\n      fast = fast.next;\n      slow = slow.next;\n\n      if (fast === slow) {\n        return true;\n      }\n    }\n  }\n\n  /**\n   * Return last node from the linked list.\n   *\n   * @returns {NodeStructure} Last node.\n   */\n  pop() {\n    if (this.last === null) {\n      return null;\n    }\n\n    const temp = this.last;\n\n    this.last = this.last.prev;\n\n    return temp;\n  }\n\n  /**\n   * Return first node from the linked list.\n   *\n   * @returns {NodeStructure} First node.\n   */\n  shift() {\n    if (this.first === null) {\n      return null;\n    }\n\n    const temp = this.first;\n\n    this.first = this.first.next;\n\n    return temp;\n  }\n\n  /**\n   * Reverses the linked list recursively.\n   */\n  recursiveReverse() {\n    /**\n     * @param {*} current The current value.\n     * @param {*} next The next value.\n     */\n    function inverse(current, next) {\n      if (!next) {\n        return;\n      }\n      inverse(next, next.next);\n      next.next = current;\n    }\n\n    if (!this.first) {\n      return;\n    }\n\n    inverse(this.first, this.first.next);\n\n    this.first.next = null;\n    const temp = this.first;\n\n    this.first = this.last;\n    this.last = temp;\n  }\n\n  /**\n   * Reverses the linked list iteratively.\n   */\n  reverse() {\n    if (!this.first || !this.first.next) {\n      return;\n    }\n\n    let current = this.first.next;\n    let prev = this.first;\n    let temp;\n\n    while (current) {\n      temp = current.next;\n      current.next = prev;\n      prev.prev = current;\n      prev = current;\n      current = temp;\n    }\n\n    this.first.next = null;\n    this.last.prev = null;\n    temp = this.first;\n    this.first = prev;\n    this.last = temp;\n  }\n}\n\nexport { NodeStructure };\nexport default LinkedList;\n","import { isObject } from '../../helpers/object';\n\n/**\n * Creates a renderer object for the `MergeCells` plugin.\n *\n * @private\n * @param {MergeCells} plugin The `MergeCells` plugin instance.\n * @returns {{before: Function, after: Function}}\n */\nexport function createMergeCellRenderer(plugin) {\n  const {\n    hot,\n  } = plugin;\n  const {\n    rowIndexMapper: rowMapper,\n    columnIndexMapper: columnMapper,\n  } = hot;\n\n  /**\n   * Runs before the cell is rendered.\n   *\n   * @private\n   */\n  function before() {}\n\n  /**\n   * Runs after the cell is rendered.\n   *\n   * @private\n   * @param {HTMLElement} TD The cell to be modified.\n   * @param {number} row Row index.\n   * @param {number} col Visual column index.\n   */\n  function after(TD, row, col) {\n    const mergedCell = plugin.mergedCellsCollection.get(row, col);\n\n    if (!isObject(mergedCell)) {\n      TD.removeAttribute('rowspan');\n      TD.removeAttribute('colspan');\n      TD.style.display = '';\n\n      return;\n    }\n\n    const {\n      row: origRow,\n      col: origColumn,\n      colspan: origColspan,\n      rowspan: origRowspan,\n    } = mergedCell;\n    const [\n      lastMergedRowIndex,\n      lastMergedColumnIndex,\n    ] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);\n\n    const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);\n    const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);\n\n    const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.\n    const maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.\n\n    const notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);\n    const notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);\n    const notHiddenRowspan = Math.min(origRowspan, maxRowSpan);\n    const notHiddenColspan = Math.min(origColspan, maxColSpan);\n\n    if (notHiddenRow === row && notHiddenColumn === col) {\n      TD.setAttribute('rowspan', notHiddenRowspan);\n      TD.setAttribute('colspan', notHiddenColspan);\n\n    } else {\n      TD.removeAttribute('rowspan');\n      TD.removeAttribute('colspan');\n      TD.style.display = 'none';\n    }\n  }\n\n  return { before, after };\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  MultiColumnSorting,\n} from './multiColumnSorting';\n","import {\n  APPEND_COLUMN_CONFIG_STRATEGY,\n  ColumnSorting\n} from '../columnSorting';\nimport { registerRootComparator } from '../columnSorting/sortService';\nimport { wasHeaderClickedProperly } from '../columnSorting/utils';\nimport { addClass, removeClass } from '../../helpers/dom/element';\nimport { rootComparator } from './rootComparator';\nimport { warnAboutPluginsConflict } from './utils';\nimport { getClassesToAdd, getClassesToRemove } from './domHelpers';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\n\nimport './multiColumnSorting.scss';\n\nexport const PLUGIN_KEY = 'multiColumnSorting';\nexport const PLUGIN_PRIORITY = 170;\nconst CONFLICTED_PLUGIN_KEY = 'columnSorting';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nregisterRootComparator(PLUGIN_KEY, rootComparator);\n\n/**\n * @plugin MultiColumnSorting\n * @class MultiColumnSorting\n *\n * @description\n * This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the\n * {@link Options#multiColumnSorting} property to the correct value (see the examples below).\n *\n * @example\n * ```js\n * // as boolean\n * multiColumnSorting: true\n *\n * // as an object with initial sort config (sort ascending for column at index 1 and then sort descending for column at index 0)\n * multiColumnSorting: {\n *   initialConfig: [{\n *     column: 1,\n *     sortOrder: 'asc'\n *   }, {\n *     column: 0,\n *     sortOrder: 'desc'\n *   }]\n * }\n *\n * // as an object which define specific sorting options for all columns\n * multiColumnSorting: {\n *   sortEmptyCells: true, // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table (by default)\n *   indicator: true, // true = shows indicator for all columns (by default), false = don't show indicator for columns\n *   headerAction: true, // true = allow to click on the headers to sort (by default), false = turn off possibility to click on the headers to sort\n *   compareFunctionFactory: function(sortOrder, columnMeta) {\n *     return function(value, nextValue) {\n *       // Some value comparisons which will return -1, 0 or 1...\n *     }\n *   }\n * }\n *\n * // as an object passed to the `column` property, allows specifying a custom options for the desired column.\n * // please take a look at documentation of `column` property: {@link Options#columns}\n * columns: [{\n *   multiColumnSorting: {\n *     indicator: false, // disable indicator for the first column,\n *     sortEmptyCells: true,\n *     headerAction: false, // clicks on the first column won't sort\n *     compareFunctionFactory: function(sortOrder, columnMeta) {\n *       return function(value, nextValue) {\n *         return 0; // Custom compare function for the first column (don't sort)\n *       }\n *     }\n *   }\n * }]\n * ```\n */\nexport class MultiColumnSorting extends ColumnSorting {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Main settings key designed for the plugin.\n   *\n   * @private\n   * @type {string}\n   */\n  pluginKey = PLUGIN_KEY;\n\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link MultiColumnSorting#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return super.isEnabled();\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (!this.enabled && this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {\n      warnAboutPluginsConflict();\n\n      this.hot.getPlugin(CONFLICTED_PLUGIN_KEY).disablePlugin();\n    }\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    super.registerShortcuts();\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Shift', 'Enter']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n\n          if (highlight.row === -1 && highlight.col >= 0) {\n            this.sort(this.getNextSortConfig(highlight.col, APPEND_COLUMN_CONFIG_STRATEGY));\n          }\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.getSelectedRangeLast()?.isSingle() &&\n            this.hot.selection.isCellVisible(highlight) && highlight.isHeader();\n        },\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    super.unregisterShortcuts();\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Sorts the table by chosen columns and orders.\n   *\n   * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   *\n   * **Note**: Please keep in mind that every call of `sort` function set an entirely new sort order. Previous sort configs aren't preserved.\n   *\n   * @example\n   * ```js\n   * // sort ascending first visual column\n   * hot.getPlugin('multiColumnSorting').sort({ column: 0, sortOrder: 'asc' });\n   *\n   * // sort first two visual column in the defined sequence\n   * hot.getPlugin('multiColumnSorting').sort([{\n   *   column: 1, sortOrder: 'asc'\n   * }, {\n   *   column: 0, sortOrder: 'desc'\n   * }]);\n   * ```\n   *\n   * @fires Hooks#beforeColumnSort\n   * @fires Hooks#afterColumnSort\n   */\n  sort(sortConfig) {\n    super.sort(sortConfig);\n  }\n\n  /**\n   * Clear the sort performed on the table.\n   */\n  clearSort() {\n    super.clearSort();\n  }\n\n  /**\n   * Checks if the table is sorted (any column have to be sorted).\n   *\n   * @returns {boolean}\n   */\n  isSorted() {\n    return super.isSorted();\n  }\n\n  /**\n   * Get sort configuration for particular column or for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key. They are handled by the `sort` function.\n   *\n   * @param {number} [column] Visual column index.\n   * @returns {undefined|object|Array}\n   */\n  getSortConfig(column) {\n    return super.getSortConfig(column);\n  }\n\n  /**\n   * @description\n   * Warn: Useful mainly for providing server side sort implementation (see in the example below). It doesn't sort the data set. It just sets sort configuration for all sorted columns.\n   * Note: Please keep in mind that this method doesn't re-render the table.\n   *\n   * @example\n   * ```js\n   * beforeColumnSort: function(currentSortConfig, destinationSortConfigs) {\n   *   const columnSortPlugin = this.getPlugin('multiColumnSorting');\n   *\n   *   columnSortPlugin.setSortConfig(destinationSortConfigs);\n   *\n   *   // const newData = ... // Calculated data set, ie. from an AJAX call.\n   *\n   *   this.loadData(newData); // Load new data set and re-render the table.\n   *\n   *   return false; // The blockade for the default sort action.\n   * }\n   * ```\n   *\n   * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   */\n  setSortConfig(sortConfig) {\n    super.setSortConfig(sortConfig);\n  }\n\n  /**\n   * Get normalized sort configs.\n   *\n   * @private\n   * @param {object|Array} [sortConfig=[]] Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   * @returns {Array}\n   */\n  getNormalizedSortConfigs(sortConfig = []) {\n    if (Array.isArray(sortConfig)) {\n      return sortConfig;\n    }\n\n    return [sortConfig];\n  }\n\n  /**\n   * Update header classes.\n   *\n   * @private\n   * @param {HTMLElement} headerSpanElement Header span element.\n   * @param {...*} args Extra arguments for helpers.\n   */\n  updateHeaderClasses(headerSpanElement, ...args) {\n    super.updateHeaderClasses(headerSpanElement, ...args);\n\n    removeClass(headerSpanElement, getClassesToRemove(headerSpanElement));\n\n    if (this.enabled !== false) {\n      addClass(headerSpanElement, getClassesToAdd(...args));\n    }\n  }\n\n  /**\n   * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called\n   * for `updateSettings` in specific situations.\n   *\n   * @private\n   * @param {object} newSettings New settings object.\n   */\n  onUpdateSettings(newSettings) {\n    if (this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {\n      warnAboutPluginsConflict();\n    }\n\n    super.onUpdateSettings(newSettings);\n  }\n\n  /**\n   * Callback for the `onAfterOnCellMouseDown` hook.\n   *\n   * @private\n   * @param {Event} event Event which are provided by hook.\n   * @param {CellCoords} coords Visual coords of the selected cell.\n   */\n  onAfterOnCellMouseDown(event, coords) {\n    if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n      return;\n    }\n\n    if (this.wasClickableHeaderClicked(event, coords.col)) {\n      if (this.hot.getShortcutManager().isCtrlPressed()) {\n        this.hot.deselectCell();\n        this.hot.selectColumns(coords.col);\n\n        this.sort(this.getNextSortConfig(coords.col, APPEND_COLUMN_CONFIG_STRATEGY));\n\n      } else {\n        this.sort(this.getColumnNextConfig(coords.col));\n      }\n    }\n  }\n}\n","import { getCompareFunctionFactory, DO_NOT_SWAP } from '../columnSorting/sortService';\n\n/**\n * Sort comparator handled by conventional sort algorithm.\n *\n * @param {Array} sortingOrders Sort orders (`asc` for ascending, `desc` for descending).\n * @param {Array} columnMetas Column meta objects.\n * @returns {Function}\n */\nexport function rootComparator(sortingOrders, columnMetas) {\n  return function(rowIndexWithValues, nextRowIndexWithValues) {\n    // We sort array of arrays. Single array is in form [rowIndex, ...values].\n    // We compare just values, stored at second index of array.\n    const [, ...values] = rowIndexWithValues;\n    const [, ...nextValues] = nextRowIndexWithValues;\n\n    return (function getCompareResult(column) {\n      const sortingOrder = sortingOrders[column];\n      const columnMeta = columnMetas[column];\n      const value = values[column];\n      const nextValue = nextValues[column];\n      const pluginSettings = columnMeta.multiColumnSorting;\n      const compareFunctionFactory = pluginSettings.compareFunctionFactory ?\n        pluginSettings.compareFunctionFactory : getCompareFunctionFactory(columnMeta.type);\n      const compareResult = compareFunctionFactory(sortingOrder, columnMeta, pluginSettings)(value, nextValue);\n\n      if (compareResult === DO_NOT_SWAP) {\n        const nextSortedColumn = column + 1;\n\n        if (typeof columnMetas[nextSortedColumn] !== 'undefined') {\n          return getCompareResult(nextSortedColumn);\n        }\n      }\n\n      return compareResult;\n    }(0));\n  };\n}\n","import { warn } from '../../helpers/console';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\n\n/**\n * Warn users about problems when using `columnSorting` and `multiColumnSorting` plugins simultaneously.\n */\nexport function warnAboutPluginsConflict() {\n  warn(toSingleLine`Plugins \\`columnSorting\\` and \\`multiColumnSorting\\` should not be enabled simultaneously. \n    Only \\`multiColumnSorting\\` will work. The \\`columnSorting\\` plugin will be disabled.`);\n}\n","const COLUMN_ORDER_PREFIX = 'sort';\n\n/**\n * Get CSS classes which should be added to particular column header.\n *\n * @param {object} columnStatesManager Instance of column state manager.\n * @param {number} column Visual column index.\n * @param {boolean} showSortIndicator Indicates if indicator should be shown for the particular column.\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToAdd(columnStatesManager, column, showSortIndicator) {\n  const cssClasses = [];\n\n  if (showSortIndicator === false) {\n    return cssClasses;\n  }\n\n  if (columnStatesManager.isColumnSorted(column) && columnStatesManager.getNumberOfSortedColumns() > 1) {\n    cssClasses.push(`${COLUMN_ORDER_PREFIX}-${columnStatesManager.getIndexOfColumnInSortQueue(column) + 1}`);\n  }\n\n  return cssClasses;\n}\n\n/**\n * Get CSS classes which should be removed from column header.\n *\n * @param {HTMLElement} htmlElement An element to process.\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToRemove(htmlElement) {\n  const cssClasses = htmlElement.className.split(' ');\n  const sortSequenceRegExp = new RegExp(`^${COLUMN_ORDER_PREFIX}-[0-9]{1,2}$`);\n\n  return cssClasses.filter(cssClass => sortSequenceRegExp.test(cssClass));\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  MultipleSelectionHandles,\n} from './multipleSelectionHandles';\n","import { hasClass } from '../../helpers/dom/element';\nimport { isMobileBrowser } from '../../helpers/browser';\nimport { BasePlugin } from '../base';\n\nexport const PLUGIN_KEY = 'multipleSelectionHandles';\nexport const PLUGIN_PRIORITY = 160;\n\n/**\n * @private\n * @plugin MultipleSelectionHandles\n * @class MultipleSelectionHandles\n */\nexport class MultipleSelectionHandles extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * @type {Array}\n   */\n  dragged = [];\n  /**\n   * @type {null}\n   */\n  lastSetCell = null;\n\n  /**\n   * Check if the plugin is enabled in the handsontable settings.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return isMobileBrowser();\n  }\n\n  /**\n   * Enable plugin for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.registerListeners();\n    super.enablePlugin();\n  }\n\n  /**\n   * Bind the touch events.\n   *\n   * @private\n   */\n  registerListeners() {\n    const _this = this;\n    const { rootElement } = this.hot;\n\n    /**\n     * @private\n     * @param {string} query Query for the position.\n     * @returns {boolean}\n     */\n    function removeFromDragged(query) {\n\n      if (_this.dragged.length === 1) {\n        // clear array\n        _this.dragged.splice(0, _this.dragged.length);\n\n        return true;\n      }\n\n      const entryPosition = _this.dragged.indexOf(query);\n\n      if (entryPosition === -1) {\n        return false;\n      } else if (entryPosition === 0) {\n        _this.dragged = _this.dragged.slice(0, 1);\n      } else if (entryPosition === 1) {\n        _this.dragged = _this.dragged.slice(-1);\n      }\n    }\n\n    this.eventManager.addEventListener(rootElement, 'touchstart', (event) => {\n      let selectedRange;\n\n      if (hasClass(event.target, 'topSelectionHandle-HitArea')) {\n        selectedRange = _this.hot.getSelectedRangeLast();\n\n        _this.dragged.push('top');\n\n        _this.touchStartRange = {\n          width: selectedRange.getWidth(),\n          height: selectedRange.getHeight(),\n          direction: selectedRange.getDirection()\n        };\n\n        event.preventDefault();\n\n        return false;\n\n      } else if (hasClass(event.target, 'bottomSelectionHandle-HitArea')) {\n        selectedRange = _this.hot.getSelectedRangeLast();\n\n        _this.dragged.push('bottom');\n\n        _this.touchStartRange = {\n          width: selectedRange.getWidth(),\n          height: selectedRange.getHeight(),\n          direction: selectedRange.getDirection()\n        };\n\n        event.preventDefault();\n\n        return false;\n      }\n    });\n\n    this.eventManager.addEventListener(rootElement, 'touchend', (event) => {\n      if (hasClass(event.target, 'topSelectionHandle-HitArea')) {\n        removeFromDragged.call(_this, 'top');\n\n        _this.touchStartRange = undefined;\n\n        event.preventDefault();\n\n        return false;\n\n      } else if (hasClass(event.target, 'bottomSelectionHandle-HitArea')) {\n        removeFromDragged.call(_this, 'bottom');\n\n        _this.touchStartRange = undefined;\n\n        event.preventDefault();\n\n        return false;\n      }\n    });\n\n    this.eventManager.addEventListener(rootElement, 'touchmove', (event) => {\n      const { rootDocument } = this.hot;\n      let targetCoords;\n      let selectedRange;\n      let rangeWidth;\n      let rangeHeight;\n      let rangeDirection;\n      let newRangeCoords;\n\n      if (_this.dragged.length === 0) {\n        return;\n      }\n\n      const endTarget = rootDocument.elementFromPoint(event.touches[0].clientX, event.touches[0].clientY);\n\n      if (!endTarget || endTarget === _this.lastSetCell) {\n        return;\n      }\n\n      if (endTarget.nodeName === 'TD' || endTarget.nodeName === 'TH') {\n        targetCoords = _this.hot.getCoords(endTarget);\n\n        if (targetCoords.col === -1) {\n          targetCoords.col = 0;\n        }\n\n        selectedRange = _this.hot.getSelectedRangeLast();\n        rangeWidth = selectedRange.getWidth();\n        rangeHeight = selectedRange.getHeight();\n        rangeDirection = selectedRange.getDirection();\n\n        if (rangeWidth === 1 && rangeHeight === 1) {\n          _this.hot.selection.setRangeEnd(targetCoords);\n        }\n\n        newRangeCoords = _this.getCurrentRangeCoords(\n          selectedRange,\n          targetCoords,\n          _this.touchStartRange.direction,\n          rangeDirection,\n          _this.dragged[0]\n        );\n\n        if (newRangeCoords.start !== null) {\n          _this.hot.selection.setRangeStart(newRangeCoords.start);\n        }\n\n        _this.hot.selection.setRangeEnd(newRangeCoords.end);\n\n        _this.lastSetCell = endTarget;\n\n      }\n\n      event.preventDefault();\n    });\n  }\n\n  getCurrentRangeCoords(selectedRange, currentTouch, touchStartDirection, currentDirection, draggedHandle) {\n    const topStartCorner = selectedRange.getTopStartCorner();\n    const bottomEndCorner = selectedRange.getBottomEndCorner();\n    const bottomStartCorner = selectedRange.getBottomStartCorner();\n    const topEndCorner = selectedRange.getTopEndCorner();\n\n    let newCoords = {\n      start: null,\n      end: null\n    };\n\n    switch (touchStartDirection) {\n      case 'NE-SW':\n        switch (currentDirection) {\n          case 'NE-SW':\n          case 'NW-SE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, selectedRange.highlight.col),\n                end: this.hot._createCellCoords(bottomStartCorner.row, currentTouch.col)\n              };\n            } else {\n              newCoords = {\n                start: this.hot._createCellCoords(selectedRange.highlight.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, topStartCorner.col)\n              };\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'bottom') {\n              newCoords = {\n                start: this.hot._createCellCoords(bottomEndCorner.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, topStartCorner.col)\n              };\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      case 'NW-SE':\n        switch (currentDirection) {\n          case 'NE-SW':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: bottomStartCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'NW-SE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: bottomEndCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: topStartCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'SW-NE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: topEndCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      case 'SW-NE':\n        switch (currentDirection) {\n          case 'NW-SE':\n            if (draggedHandle === 'bottom') {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, topStartCorner.col),\n                end: this.hot._createCellCoords(bottomStartCorner.row, currentTouch.col)\n              };\n            } else {\n              newCoords = {\n                start: this.hot._createCellCoords(topStartCorner.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, bottomEndCorner.col)\n              };\n            }\n            break;\n          // case 'NE-SW':\n          //\n          //  break;\n          case 'SW-NE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: this.hot._createCellCoords(selectedRange.highlight.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, bottomEndCorner.col)\n              };\n            } else {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, topStartCorner.col),\n                end: this.hot._createCellCoords(topStartCorner.row, currentTouch.col)\n              };\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'bottom') {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, topEndCorner.col),\n                end: this.hot._createCellCoords(topStartCorner.row, currentTouch.col)\n              };\n            } else if (draggedHandle === 'top') {\n              newCoords = {\n                start: bottomStartCorner,\n                end: currentTouch\n              };\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      case 'SE-NW':\n        switch (currentDirection) {\n          case 'NW-SE':\n          case 'NE-SW':\n          case 'SW-NE':\n            if (draggedHandle === 'top') {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'top') {\n              newCoords.end = currentTouch;\n            } else {\n              newCoords = {\n                start: currentTouch,\n                end: topStartCorner\n              };\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      default:\n        break;\n    }\n\n    return newCoords;\n  }\n\n  /**\n   * Check if user is currently dragging the handle.\n   *\n   * @returns {boolean} Dragging state.\n   */\n  isDragged() {\n    return this.dragged.length > 0;\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  NestedHeaders,\n} from './nestedHeaders';\n","import {\n  addClass,\n  removeClass,\n} from '../../helpers/dom/element';\nimport { isNumeric, clamp } from '../../helpers/number';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport { isLeftClick, isRightClick, isTouchEvent } from '../../helpers/dom/event';\nimport { warn } from '../../helpers/console';\nimport {\n  ACTIVE_HEADER_TYPE,\n  HEADER_TYPE,\n} from '../../selection';\nimport { BasePlugin } from '../base';\nimport StateManager from './stateManager';\nimport GhostTable from './utils/ghostTable';\n\nimport './nestedHeaders.css';\n\nexport const PLUGIN_KEY = 'nestedHeaders';\nexport const PLUGIN_PRIORITY = 280;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin NestedHeaders\n * @class NestedHeaders\n *\n * @description\n * The plugin allows to create a nested header structure, using the HTML's colspan attribute.\n *\n * To make any header wider (covering multiple table columns), it's corresponding configuration array element should be\n * provided as an object with `label` and `colspan` properties. The `label` property defines the header's label,\n * while the `colspan` property defines a number of columns that the header should cover.\n * You can also set custom class names to any of the headers by providing the `headerClassName` property.\n *\n * __Note__ that the plugin supports a *nested* structure, which means, any header cannot be wider than it's \"parent\". In\n * other words, headers cannot overlap each other.\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   nestedHeaders: [\n *     ['A', {label: 'B', colspan: 8, headerClassName: 'htRight'}, 'C'],\n *     ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n *     ['H', {label: 'I', colspan: 2}, {label: 'J', colspan: 2}, {label: 'K', colspan: 2}, {label: 'L', colspan: 2}, 'M'],\n *     ['N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W']\n *  ],\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   nestedHeaders={[\n *     ['A', {label: 'B', colspan: 8, headerClassName: 'htRight'}, 'C'],\n *     ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n *     ['H', {label: 'I', colspan: 2}, {label: 'J', colspan: 2}, {label: 'K', colspan: 2}, {label: 'L', colspan: 2}, 'M'],\n *     ['N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W']\n *  ]}\n * />\n * ```\n * :::\n */\nexport class NestedHeaders extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * The state manager for the nested headers.\n   *\n   * @type {StateManager}\n   */\n  #stateManager = new StateManager();\n  /**\n   * The instance of the ChangesObservable class that allows track the changes that happens in the\n   * column indexes.\n   *\n   * @type {ChangesObservable}\n   */\n  #hidingIndexMapObserver = null;\n  /**\n   * Holds the coords that points to the place where the column selection starts.\n   *\n   * @type {number|null}\n   */\n  #focusInitialCoords = null;\n  /**\n   * Determines if there is performed the column selection.\n   *\n   * @type {boolean}\n   */\n  #isColumnsSelectionInProgress = false;\n  /**\n   * Custom helper for getting widths of the nested headers.\n   *\n   * @private\n   * @type {GhostTable}\n   */\n  // @TODO This should be changed after refactor handsontable/utils/ghostTable.\n  ghostTable = new GhostTable(this.hot, (row, column) => this.getHeaderSettings(row, column));\n  /**\n   * The flag which determines that the nested header settings contains overlapping headers\n   * configuration.\n   *\n   * @type {boolean}\n   */\n  detectedOverlappedHeaders = false;\n\n  /**\n   * Check if plugin is enabled.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const { nestedHeaders } = this.hot.getSettings();\n\n    if (!Array.isArray(nestedHeaders) || !Array.isArray(nestedHeaders[0])) {\n      warn(toSingleLine`Your Nested Headers plugin configuration is invalid. The settings has to be\\x20\n                        passed as an array of arrays e.q. [['A1', { label: 'A2', colspan: 2 }]]`);\n    }\n\n    this.addHook('init', () => this.#onInit());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('afterOnCellMouseDown', (...args) => this.#onAfterOnCellMouseDown(...args));\n    this.addHook('beforeOnCellMouseOver', (...args) => this.#onBeforeOnCellMouseOver(...args));\n    this.addHook('beforeOnCellMouseUp', (...args) => this.#onBeforeOnCellMouseUp(...args));\n    this.addHook('beforeSelectionHighlightSet', (...args) => this.#onBeforeSelectionHighlightSet(...args));\n    this.addHook('modifyTransformStart', (...args) => this.#onModifyTransformStart(...args));\n    this.addHook('afterSelection', () => this.#updateFocusHighlightPosition());\n    this.addHook('afterSelectionFocusSet', () => this.#updateFocusHighlightPosition());\n    this.addHook('beforeViewportScrollHorizontally', (...args) => this.#onBeforeViewportScrollHorizontally(...args));\n    this.addHook('afterGetColumnHeaderRenderers', array => this.#onAfterGetColumnHeaderRenderers(array));\n    this.addHook('modifyColWidth', (...args) => this.#onModifyColWidth(...args));\n    this.addHook('modifyColumnHeaderValue', (...args) => this.#onModifyColumnHeaderValue(...args));\n    this.addHook('beforeHighlightingColumnHeader', (...args) => this.#onBeforeHighlightingColumnHeader(...args));\n    this.addHook('beforeCopy', (...args) => this.#onBeforeCopy(...args));\n    this.addHook('beforeSelectColumns', (...args) => this.#onBeforeSelectColumns(...args));\n    this.addHook(\n      'afterViewportColumnCalculatorOverride',\n      (...args) => this.#onAfterViewportColumnCalculatorOverride(...args)\n    );\n    this.addHook('modifyFocusedElement', (...args) => this.#onModifyFocusedElement(...args));\n    this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.#updateFocusHighlightPosition());\n    this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.#updateFocusHighlightPosition());\n\n    super.enablePlugin();\n    this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`nestedHeaders`](@/api/options.md#nestedheaders)\n   */\n  updatePlugin() {\n    if (!this.hot.view) { // @TODO: Workaround for broken plugin initialization abstraction.\n      return;\n    }\n\n    const { nestedHeaders } = this.hot.getSettings();\n\n    this.#stateManager.setColumnsLimit(this.hot.countCols());\n\n    if (Array.isArray(nestedHeaders)) {\n      this.detectedOverlappedHeaders = this.#stateManager.setState(nestedHeaders);\n    }\n\n    if (this.detectedOverlappedHeaders) {\n      warn(toSingleLine`Your Nested Headers plugin setup contains overlapping headers. This kind of configuration\\x20\n                        is currently not supported.`);\n    }\n\n    if (this.enabled) {\n      // This line covers the case when a developer uses the external hiding maps to manipulate\n      // the columns' visibility. The tree state built from the settings - which is always built\n      // as if all the columns are visible, needs to be modified to be in sync with a dataset.\n      this.hot.columnIndexMapper\n        .hidingMapsCollection\n        .getMergedValues()\n        .forEach((isColumnHidden, physicalColumnIndex) => {\n          const actionName = isColumnHidden === true ? 'hide-column' : 'show-column';\n\n          this.#stateManager.triggerColumnModification(actionName, physicalColumnIndex);\n        });\n    }\n\n    if (!this.#hidingIndexMapObserver && this.enabled) {\n      this.#hidingIndexMapObserver = this.hot.columnIndexMapper\n        .createChangesObserver('hiding')\n        .subscribe((changes) => {\n          changes.forEach(({ op, index: columnIndex, newValue }) => {\n            if (op === 'replace') {\n              const actionName = newValue === true ? 'hide-column' : 'show-column';\n\n              this.#stateManager.triggerColumnModification(actionName, columnIndex);\n            }\n          });\n\n          this.ghostTable.buildWidthsMap();\n        });\n    }\n\n    this.ghostTable\n      .setLayersCount(this.getLayersCount())\n      .buildWidthsMap();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.clearColspans();\n    this.#stateManager.clear();\n    this.#hidingIndexMapObserver.unsubscribe();\n    this.#hidingIndexMapObserver = null;\n    this.ghostTable.clear();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Returns an instance of the internal state manager of the plugin.\n   *\n   * @private\n   * @returns {StateManager}\n   */\n  getStateManager() {\n    return this.#stateManager;\n  }\n\n  /**\n   * Gets a total number of headers levels.\n   *\n   * @private\n   * @returns {number}\n   */\n  getLayersCount() {\n    return this.#stateManager.getLayersCount();\n  }\n\n  /**\n   * Gets column settings for a specified header. The returned object contains\n   * information about the header label, its colspan length, or if it is hidden\n   * in the header renderers.\n   *\n   * @private\n   * @param {number} headerLevel Header level (0 = most distant to the table).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object}\n   */\n  getHeaderSettings(headerLevel, columnIndex) {\n    return this.#stateManager.getHeaderSettings(headerLevel, columnIndex);\n  }\n\n  /**\n   * Clear the colspans remaining after plugin usage.\n   *\n   * @private\n   */\n  clearColspans() {\n    if (!this.hot.view) {\n      return;\n    }\n\n    const { _wt: wt } = this.hot.view;\n    const headerLevels = wt.getSetting('columnHeaders').length;\n    const mainHeaders = wt.wtTable.THEAD;\n    const topHeaders = wt.wtOverlays.topOverlay.clone.wtTable.THEAD;\n    const topLeftCornerHeaders = wt.wtOverlays.topInlineStartCornerOverlay ?\n      wt.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.THEAD : null;\n\n    for (let i = 0; i < headerLevels; i++) {\n      const masterLevel = mainHeaders.childNodes[i];\n\n      if (!masterLevel) {\n        break;\n      }\n\n      const topLevel = topHeaders.childNodes[i];\n      const topLeftCornerLevel = topLeftCornerHeaders ? topLeftCornerHeaders.childNodes[i] : null;\n\n      for (let j = 0, masterNodes = masterLevel.childNodes.length; j < masterNodes; j++) {\n        masterLevel.childNodes[j].removeAttribute('colspan');\n        removeClass(masterLevel.childNodes[j], 'hiddenHeader');\n\n        if (topLevel && topLevel.childNodes[j]) {\n          topLevel.childNodes[j].removeAttribute('colspan');\n          removeClass(topLevel.childNodes[j], 'hiddenHeader');\n        }\n\n        if (topLeftCornerHeaders && topLeftCornerLevel && topLeftCornerLevel.childNodes[j]) {\n          topLeftCornerLevel.childNodes[j].removeAttribute('colspan');\n          removeClass(topLeftCornerLevel.childNodes[j], 'hiddenHeader');\n        }\n      }\n    }\n  }\n\n  /**\n   * Generates the appropriate header renderer for a header row.\n   *\n   * @private\n   * @param {number} headerLevel The index of header level counting from the top (positive\n   *                             values counting from 0 to N).\n   * @returns {Function}\n   * @fires Hooks#afterGetColHeader\n   */\n  headerRendererFactory(headerLevel) {\n    const fixedColumnsStart = this.hot.view._wt.getSetting('fixedColumnsStart');\n\n    return (renderedColumnIndex, TH) => {\n      const { columnIndexMapper, view } = this.hot;\n\n      let visualColumnIndex = columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n      if (visualColumnIndex === null) {\n        visualColumnIndex = renderedColumnIndex;\n      }\n\n      TH.removeAttribute('colspan');\n      removeClass(TH, 'hiddenHeader');\n\n      const {\n        colspan,\n        isHidden,\n        isPlaceholder,\n        headerClassNames,\n      } = this.#stateManager.getHeaderSettings(headerLevel, visualColumnIndex) ?? { label: '' };\n\n      if (isPlaceholder || isHidden) {\n        addClass(TH, 'hiddenHeader');\n\n      } else if (colspan > 1) {\n        const { wtOverlays } = view._wt;\n        const isTopInlineStartOverlay = wtOverlays.topInlineStartCornerOverlay?.clone.wtTable.THEAD.contains(TH);\n        const isInlineStartOverlay = wtOverlays.inlineStartOverlay?.clone.wtTable.THEAD.contains(TH);\n\n        // Check if there is a fixed column enabled, if so then reduce colspan to fixed column width.\n        const correctedColspan = isTopInlineStartOverlay || isInlineStartOverlay ?\n          Math.min(colspan, fixedColumnsStart - renderedColumnIndex) : colspan;\n\n        if (correctedColspan > 1) {\n          TH.setAttribute('colspan', correctedColspan);\n        }\n      }\n\n      this.hot.view.appendColHeader(\n        visualColumnIndex,\n        TH,\n        (...args) => this.getColumnHeaderValue(...args),\n        headerLevel,\n      );\n\n      // Replace the higher-order `headerClassName`s with the one provided in the plugin config, if it was provided.\n      if (!isPlaceholder && !isHidden) {\n        const innerHeaderDiv = TH.querySelector('div.relative');\n\n        if (innerHeaderDiv && headerClassNames && headerClassNames.length > 0) {\n          removeClass(innerHeaderDiv, this.hot.getColumnMeta(visualColumnIndex).headerClassName);\n          addClass(innerHeaderDiv, headerClassNames);\n        }\n      }\n    };\n  }\n\n  /**\n   * Returns the column header value for specified column and header level index.\n   *\n   * @private\n   * @param {number} visualColumnIndex Visual column index.\n   * @param {number} headerLevel The index of header level. The header level accepts positive (0 to N)\n   *                             and negative (-1 to -N) values. For positive values, 0 points to the\n   *                             top most header, and for negative direction, -1 points to the most bottom\n   *                             header (the header closest to the cells).\n   * @returns {string} Returns the column header value to update.\n   */\n  getColumnHeaderValue(visualColumnIndex, headerLevel) {\n    const {\n      isHidden,\n      isPlaceholder,\n    } = this.#stateManager.getHeaderSettings(headerLevel, visualColumnIndex) ?? {};\n\n    if (isPlaceholder || isHidden) {\n      return '';\n    }\n\n    return this.hot.getColHeader(visualColumnIndex, headerLevel);\n  }\n\n  /**\n   * Updates the selection focus highlight position to point to the nested header root element (TH)\n   * even when the logical coordinates point in-between the header.\n   */\n  #updateFocusHighlightPosition() {\n    const selection = this.hot?.getSelectedRangeLast();\n\n    if (!selection) {\n      return;\n    }\n\n    const { highlight } = selection;\n    const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;\n\n    if (isNestedHeadersRange) {\n      const columnIndex = this.#stateManager.findLeftMostColumnIndex(highlight.row, highlight.col);\n      const focusHighlight = this.hot.selection.highlight.getFocus();\n\n      // Correct the highlight/focus selection to highlight the correct TH element\n      focusHighlight.visualCellRange.highlight.col = columnIndex;\n      focusHighlight.visualCellRange.from.col = columnIndex;\n      focusHighlight.visualCellRange.to.col = columnIndex;\n      focusHighlight.commit();\n    }\n  }\n\n  /**\n   * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport\n   * is scrolled to the correct column for the nested header the most left and the most right visual column\n   * indexes are used.\n   *\n   * @param {number} visualColumn A visual column index to which the viewport will be scrolled.\n   * @returns {number}\n   */\n  #onBeforeViewportScrollHorizontally(visualColumn) {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection) {\n      return visualColumn;\n    }\n\n    const { highlight } = selection;\n    const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;\n\n    if (!isNestedHeadersRange) {\n      return visualColumn;\n    }\n\n    const firstColumn = this.hot.view.getFirstFullyVisibleColumn();\n    const lastColumn = this.hot.view.getLastFullyVisibleColumn();\n    const mostLeftColumnIndex = this.#stateManager.findLeftMostColumnIndex(highlight.row, highlight.col);\n    const mostRightColumnIndex = this.#stateManager.findRightMostColumnIndex(highlight.row, highlight.col);\n\n    // do not scroll the viewport when the header is wider than the viewport\n    if (mostLeftColumnIndex < firstColumn && mostRightColumnIndex > lastColumn) {\n      return visualColumn;\n    }\n\n    return mostLeftColumnIndex < firstColumn ? mostLeftColumnIndex : mostRightColumnIndex;\n  }\n\n  /**\n   * Allows to control which header DOM element will be used to highlight.\n   *\n   * @param {number} visualColumn A visual column index of the highlighted row header.\n   * @param {number} headerLevel A row header level that is currently highlighted.\n   * @param {object} highlightMeta An object with meta data that describes the highlight state.\n   * @returns {number}\n   */\n  #onBeforeHighlightingColumnHeader(visualColumn, headerLevel, highlightMeta) {\n    const headerNodeData = this.#stateManager.getHeaderTreeNodeData(headerLevel, visualColumn);\n\n    if (!headerNodeData) {\n      return visualColumn;\n    }\n\n    const {\n      columnCursor,\n      selectionType,\n      selectionWidth,\n    } = highlightMeta;\n    const {\n      isRoot,\n      colspan,\n    } = this.#stateManager.getHeaderSettings(headerLevel, visualColumn);\n\n    if (selectionType === HEADER_TYPE) {\n      if (!isRoot) {\n        return headerNodeData.columnIndex;\n      }\n\n    } else if (selectionType === ACTIVE_HEADER_TYPE) {\n      if (colspan > selectionWidth - columnCursor || !isRoot) {\n        // Prevents adding any CSS class names to the TH element\n        return null;\n      }\n    }\n\n    return visualColumn;\n  }\n\n  /**\n   * Listens the `beforeCopy` hook that allows processing the copied column headers so that the\n   * merged column headers do not propagate the value for each column but only once at the beginning\n   * of the column.\n   *\n   * @private\n   * @param {Array[]} data An array of arrays which contains data to copied.\n   * @param {object[]} copyableRanges An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                                  which will copied.\n   * @param {{ columnHeadersCount: number }} copiedHeadersCount An object with keys that holds information with\n   *                                                            the number of copied headers.\n   */\n  #onBeforeCopy(data, copyableRanges, { columnHeadersCount }) {\n    if (columnHeadersCount === 0) {\n      return;\n    }\n\n    for (let rangeIndex = 0; rangeIndex < copyableRanges.length; rangeIndex++) {\n      const { startRow, startCol, endRow, endCol } = copyableRanges[rangeIndex];\n      const rowsCount = endRow - startRow + 1;\n      const columnsCount = startCol - endCol + 1;\n\n      // do not process dataset ranges and column headers where only one column is copied\n      if (startRow >= 0 || columnsCount === 1) {\n        break;\n      }\n\n      for (let column = startCol; column <= endCol; column++) {\n        for (let row = startRow; row <= endRow; row++) {\n          const zeroBasedColumnHeaderLevel = rowsCount + row;\n          const zeroBasedColumnIndex = column - startCol;\n\n          if (zeroBasedColumnIndex === 0) {\n            continue; // eslint-disable-line no-continue\n          }\n\n          const isRoot = this.#stateManager.getHeaderTreeNodeData(row, column)?.isRoot;\n\n          if (isRoot === false) {\n            data[zeroBasedColumnHeaderLevel][zeroBasedColumnIndex] = '';\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Allows blocking the column selection that is controlled by the core Selection module.\n   *\n   * @param {MouseEvent} event Mouse event.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {CellCoords} TD The table cell or header element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    const headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n    if (headerNodeData) {\n      // Block the Selection module in controlling how the columns are selected. Pass the\n      // responsibility of the column selection to this plugin (see \"onAfterOnCellMouseDown\" hook).\n      controller.column = true;\n    }\n  }\n\n  /**\n   * Allows to control how the column selection based on the coordinates and the nested headers is made.\n   *\n   * @param {MouseEvent} event Mouse event.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   */\n  #onAfterOnCellMouseDown(event, coords) {\n    const headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n    if (!headerNodeData) {\n      return;\n    }\n\n    this.#focusInitialCoords = coords.clone();\n    this.#isColumnsSelectionInProgress = true;\n\n    const { selection } = this.hot;\n    const currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n    const columnsToSelect = [];\n    const {\n      columnIndex,\n      origColspan,\n    } = headerNodeData;\n\n    // The Selection module doesn't allow it to extend its behavior easily. That's why here we need\n    // to re-implement the \"click\" and \"shift\" behavior. As a workaround, the logic for the nested\n    // headers must implement a similar logic as in the original Selection handler\n    // (see src/selection/mouseEventHandler.js).\n    const allowRightClickSelection = !selection.inInSelection(coords);\n\n    if (event.shiftKey && currentSelection) {\n      if (coords.col < currentSelection.from.col) {\n        columnsToSelect.push(currentSelection.getTopEndCorner().col, columnIndex, coords.row);\n\n      } else if (coords.col > currentSelection.from.col) {\n        columnsToSelect.push(currentSelection.getTopStartCorner().col, columnIndex + origColspan - 1, coords.row);\n\n      } else {\n        columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);\n      }\n\n    } else if (isLeftClick(event) || (isRightClick(event) && allowRightClickSelection) || isTouchEvent(event)) {\n      columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);\n    }\n\n    // The plugin takes control of how the columns are selected.\n    selection.selectColumns(...columnsToSelect);\n  }\n\n  /**\n   * Makes the header-selection properly select the nested headers.\n   *\n   * @param {MouseEvent} event Mouse event.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLElement} TD The cell element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseOver(event, coords, TD, controller) {\n    if (!this.hot.view.isMouseDown()) {\n      return;\n    }\n\n    const headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n    if (!headerNodeData) {\n      return;\n    }\n\n    const {\n      columnIndex,\n      origColspan,\n    } = headerNodeData;\n\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const topStartCoords = selectedRange.getTopStartCorner();\n    const bottomEndCoords = selectedRange.getBottomEndCorner();\n    const { from } = selectedRange;\n\n    // Block the Selection module in controlling how the columns and cells are selected.\n    // From now on, the plugin is responsible for the selection.\n    controller.column = true;\n    controller.cell = true;\n\n    const columnsToSelect = [];\n    const headerLevel = clamp(coords.row, -Infinity, -1);\n\n    if (coords.col < from.col) {\n      columnsToSelect.push(bottomEndCoords.col, columnIndex, headerLevel);\n\n    } else if (coords.col > from.col) {\n      columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, headerLevel);\n\n    } else {\n      columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, headerLevel);\n    }\n\n    this.hot.selection.selectColumns(...columnsToSelect);\n  }\n\n  /**\n   * Switches internal flag about selection progress to `false`.\n   */\n  #onBeforeOnCellMouseUp() {\n    this.#isColumnsSelectionInProgress = false;\n  }\n\n  /**\n   * The hook checks and ensures that the focus position that depends on the selected columns\n   * range is always positioned within the range.\n   */\n  #onBeforeSelectionHighlightSet() {\n    const { navigableHeaders } = this.hot.getSettings();\n\n    if (!this.hot.view.isMouseDown() || !this.#isColumnsSelectionInProgress || !navigableHeaders) {\n      return;\n    }\n\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const columnStart = selectedRange.getTopStartCorner().col;\n    const columnEnd = selectedRange.getBottomEndCorner().col;\n    const {\n      columnIndex,\n      origColspan,\n    } = this.#stateManager.getHeaderTreeNodeData(this.#focusInitialCoords.row, this.#focusInitialCoords.col);\n\n    selectedRange.setHighlight(this.#focusInitialCoords);\n\n    if (origColspan > selectedRange.getWidth() ||\n        columnIndex < columnStart ||\n        columnIndex + origColspan - 1 > columnEnd) {\n\n      const headerLevel = this.#stateManager\n        .findTopMostEntireHeaderLevel(\n          clamp(columnStart, columnIndex, columnIndex + origColspan - 1),\n          clamp(columnEnd, columnIndex, columnIndex + origColspan - 1),\n        );\n\n      selectedRange.highlight.row = headerLevel;\n      selectedRange.highlight.col = selectedRange.from.col;\n    }\n  }\n\n  /**\n   * `modifyTransformStart` hook is called every time the keyboard navigation is used.\n   *\n   * @param {object} delta The transformation delta.\n   */\n  #onModifyTransformStart(delta) {\n    const { highlight } = this.hot.getSelectedRangeLast();\n    const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);\n    const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;\n\n    if (!isNestedHeadersRange) {\n      return;\n    }\n\n    const visualColumnIndexStart = this.#stateManager.findLeftMostColumnIndex(nextCoords.row, nextCoords.col);\n    const visualColumnIndexEnd = this.#stateManager.findRightMostColumnIndex(nextCoords.row, nextCoords.col);\n\n    if (delta.col < 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexStart - 1 : visualColumnIndexEnd;\n      const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).\n        delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);\n      } else {\n        delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);\n      }\n\n    } else if (delta.col > 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexEnd + 1 : visualColumnIndexStart;\n      const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).\n        delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());\n      } else {\n        delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);\n      }\n    }\n  }\n\n  /**\n   * The hook observes the column selection from the Selection API and modifies the column range to\n   * ensure that the whole nested column will be covered.\n   *\n   * @param {CellCoords} from The coords object where the selection starts.\n   * @param {CellCoords} to The coords object where the selection ends.\n   */\n  #onBeforeSelectColumns(from, to) {\n    const headerLevel = from.row;\n    const startNodeData = this._getHeaderTreeNodeDataByCoords({\n      row: headerLevel,\n      col: from.col,\n    });\n    const endNodeData = this._getHeaderTreeNodeDataByCoords({\n      row: headerLevel,\n      col: to.col,\n    });\n\n    if (to.col < from.col) { // Column selection from right to left\n      if (startNodeData) {\n        from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;\n      }\n\n      if (endNodeData) {\n        to.col = endNodeData.columnIndex;\n      }\n\n    } else if (to.col >= from.col) { // Column selection from left to right or a single column selection\n      if (startNodeData) {\n        from.col = startNodeData.columnIndex;\n      }\n\n      if (endNodeData) {\n        to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;\n      }\n    }\n  }\n\n  /**\n   * `afterGetColumnHeader` hook callback - prepares the header structure.\n   *\n   * @param {Array} renderersArray Array of renderers.\n   */\n  #onAfterGetColumnHeaderRenderers(renderersArray) {\n    renderersArray.length = 0;\n\n    for (let headerLayer = 0; headerLayer < this.#stateManager.getLayersCount(); headerLayer++) {\n      renderersArray.push(this.headerRendererFactory(headerLayer));\n    }\n  }\n\n  /**\n   * Make the renderer render the first nested column in its entirety.\n   *\n   * @param {object} calc Viewport column calculator.\n   */\n  #onAfterViewportColumnCalculatorOverride(calc) {\n    const headerLayersCount = this.#stateManager.getLayersCount();\n    let newStartColumn = calc.startColumn;\n    let nonRenderable = !!headerLayersCount;\n\n    for (let headerLayer = 0; headerLayer < headerLayersCount; headerLayer++) {\n      const startColumn = this.#stateManager.findLeftMostColumnIndex(headerLayer, calc.startColumn);\n      const renderedStartColumn = this.hot.columnIndexMapper.getRenderableFromVisualIndex(startColumn);\n\n      // If any of the headers for that column index is rendered, all of them should be rendered properly, see\n      // comment below.\n      if (startColumn >= 0) {\n        nonRenderable = false;\n      }\n\n      // `renderedStartColumn` can be `null` if the leftmost columns are hidden. In that case -> ignore that header\n      // level, as it should be handled by the \"parent\" header\n      if (isNumeric(renderedStartColumn) && renderedStartColumn < calc.startColumn) {\n        newStartColumn = renderedStartColumn;\n        break;\n      }\n    }\n\n    // If no headers for the provided column index are renderable, start rendering from the beginning of the upmost\n    // header for that position.\n    calc.startColumn =\n      nonRenderable ?\n        this.#stateManager.getHeaderTreeNodeData(0, newStartColumn).columnIndex :\n        newStartColumn;\n  }\n\n  /**\n   * `modifyColWidth` hook callback - returns width from cache, when is greater than incoming from hook.\n   *\n   * @param {number} width Width from hook.\n   * @param {number} column Visual index of an column.\n   * @returns {number}\n   */\n  #onModifyColWidth(width, column) {\n    const cachedWidth = this.ghostTable.getWidth(column);\n\n    return width > cachedWidth ? width : cachedWidth;\n  }\n\n  /**\n   * Listens the `modifyColumnHeaderValue` hook that overwrites the column headers values based on\n   * the internal state and settings of the plugin.\n   *\n   * @param {string} value The column header value.\n   * @param {number} visualColumnIndex The visual column index.\n   * @param {number} headerLevel The index of header level. The header level accepts positive (0 to N)\n   *                             and negative (-1 to -N) values. For positive values, 0 points to the\n   *                             top most header, and for negative direction, -1 points to the most bottom\n   *                             header (the header closest to the cells).\n   * @returns {string} Returns the column header value to update.\n   */\n  #onModifyColumnHeaderValue(value, visualColumnIndex, headerLevel) {\n    const {\n      label,\n    } = this.#stateManager.getHeaderTreeNodeData(headerLevel, visualColumnIndex) ?? { label: '' };\n\n    return label;\n  }\n\n  /**\n   * `modifyFocusedElement` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @returns {HTMLTableCellElement} The `TH` element to be focused.\n   */\n  #onModifyFocusedElement(row, column) {\n    if (row < 0) {\n      return this.hot.getCell(row, this.#stateManager.findLeftMostColumnIndex(row, column), true);\n    }\n  }\n\n  /**\n   * Updates the plugin state after HoT initialization.\n   */\n  #onInit() {\n    // @TODO: Workaround for broken plugin initialization abstraction.\n    this.updatePlugin();\n  }\n\n  /**\n   * Updates the plugin state after new dataset load.\n   *\n   * @param {Array[]} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded\n   *                              during the initialization.\n   */\n  #onAfterLoadData(sourceData, initialLoad) {\n    if (!initialLoad) {\n      this.updatePlugin();\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#stateManager = null;\n\n    if (this.#hidingIndexMapObserver !== null) {\n      this.#hidingIndexMapObserver.unsubscribe();\n      this.#hidingIndexMapObserver = null;\n    }\n\n    super.destroy();\n  }\n\n  /**\n   * Gets the tree data that belongs to the column headers pointed by the passed coordinates.\n   *\n   * @private\n   * @param {CellCoords} coords The CellCoords instance.\n   * @returns {object|undefined}\n   */\n  _getHeaderTreeNodeDataByCoords(coords) {\n    if (coords.row >= 0 || coords.col < 0) {\n      return;\n    }\n\n    return this.#stateManager.getHeaderTreeNodeData(coords.row, coords.col);\n  }\n}\n","import { arrayMap, arrayReduce } from '../../../helpers/array';\nimport SourceSettings from './sourceSettings';\nimport HeadersTree from './headersTree';\nimport { triggerNodeModification } from './nodeModifiers';\nimport { generateMatrix } from './matrixGenerator';\nimport { TRAVERSAL_DF_PRE } from '../../../utils/dataStructures/tree';\n\n/**\n * The state manager is a source of truth for nested headers configuration.\n * The state generation process is divided into three stages.\n *\n *   +---------------------+  1. User-defined configuration normalization;\n *   │                     │  The source settings class normalizes and shares API for\n *   │   SourceSettings    │  raw settings passed by the developer. It is only consumed by\n *   │                     │  the header tree module.\n *   +---------------------+\n *             │\n *            \\│/\n *   +---------------------+  2. Building a tree structure for validation and easier node manipulation;\n *   │                     │  The header tree generates a tree based on source settings for future\n *   │     HeadersTree     │  node manipulation (such as collapsible columns feature). While generating a tree\n *   │                     │  the source settings is checked to see if the configuration has overlapping headers.\n *   +---------------------+  If `true` the colspan matrix generation is skipped, overlapped headers are not supported.\n *             │\n *            \\│/\n *   +---------------------+  3. Matrix generation;\n *   │                     │  Based on built trees the matrix generation is performed. That part of code\n *   │  matrix generation  │  generates an array structure similar to normalized data from the SourceSettings\n *   │                     │  but with the difference that this structure contains column settings which changed\n *   +---------------------+  during runtime (after the tree manipulation) e.q after collapse or expand column.\n *                            That settings describes how the TH element should be modified (colspan attribute,\n *                            CSS classes, etc) for a specific column and layer level.\n *\n * @class StateManager\n */\nexport default class StateManager {\n  /**\n   * The instance of the source settings class.\n   *\n   * @private\n   * @type {SourceSettings}\n   */\n  #sourceSettings = new SourceSettings();\n  /**\n   * The instance of the headers tree. The tree is generated after setting new configuration data.\n   *\n   * @private\n   * @type {HeadersTree}\n   */\n  #headersTree = new HeadersTree(this.#sourceSettings);\n  /**\n   * Cached matrix which is generated from the tree structure.\n   *\n   * @private\n   * @type {Array[]}\n   */\n  #stateMatrix = [[]];\n\n  /**\n   * Sets a new state for the nested headers plugin based on settings passed\n   * directly to the plugin.\n   *\n   * @param {Array[]} nestedHeadersSettings The user-defined settings.\n   * @returns {boolean} Returns `true` if the settings are processed correctly, `false` otherwise.\n   */\n  setState(nestedHeadersSettings) {\n    this.#sourceSettings.setData(nestedHeadersSettings);\n    let hasError = false;\n\n    try {\n      this.#headersTree.buildTree();\n    } catch (ex) {\n      this.#headersTree.clear();\n      this.#sourceSettings.clear();\n      hasError = true;\n    }\n\n    this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n\n    return hasError;\n  }\n\n  /**\n   * Sets columns limit to the state will be trimmed. All headers (colspans) which\n   * overlap the column limit will be reduced to keep the structure solid.\n   *\n   * @param {number} columnsCount The number of columns to limit to.\n   */\n  setColumnsLimit(columnsCount) {\n    this.#sourceSettings.setColumnsLimit(columnsCount);\n  }\n\n  /**\n   * Merges settings with current plugin state.\n   *\n   * By default only foreign keys are merged with source state and passed to the tree. But only\n   * known keys are exported to matrix.\n   *\n   * @param {object[]} settings An array of objects to merge with the current source settings.\n   *                            It is a requirement that every object has `row` and `col` properties\n   *                            which points to the specific header settings object.\n   */\n  mergeStateWith(settings) {\n    const transformedSettings = arrayMap(settings, ({ row, ...rest }) => {\n      return {\n        row: row < 0 ? this.rowCoordsToLevel(row) : row,\n        ...rest,\n      };\n    });\n\n    this.#sourceSettings.mergeWith(transformedSettings);\n    this.#headersTree.buildTree();\n    this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n  }\n\n  /**\n   * Maps the current state with a callback. For each header settings the callback function\n   * is called. If the function returns value that value is merged with the state.\n   *\n   * By default only foreign keys are merged with source state and passed to the tree. But only\n   * known keys are exported to matrix.\n   *\n   * @param {Function} callback A function that is called for every header source settings.\n   *                            Each time the callback is called, the returned value extends\n   *                            header settings.\n   */\n  mapState(callback) {\n    this.#sourceSettings.map(callback);\n    this.#headersTree.buildTree();\n    this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n  }\n\n  /**\n   * Maps the current tree nodes with a callback. For each node the callback function\n   * is called. If the function returns value that value is added to returned array.\n   *\n   * @param {Function} callback A function that is called for every tree node.\n   *                            Each time the callback is called, the returned value is\n   *                            added to returned array.\n   * @returns {Array}\n   */\n  mapNodes(callback) {\n    return arrayReduce(this.#headersTree.getRoots(), (acc, rootNode) => {\n      rootNode.walkDown((node) => {\n        const result = callback(node.data);\n\n        if (result !== undefined) {\n          acc.push(result);\n        }\n      });\n\n      return acc;\n    }, []);\n  }\n\n  /**\n   * Triggers an action (e.g. \"collapse\") from the NodeModifiers module. The module\n   * modifies a tree structure in such a way as to obtain the correct structure consistent with the\n   * called action.\n   *\n   * @param {string} action An action name to trigger.\n   * @param {number} headerLevel Header level index (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|undefined}\n   */\n  triggerNodeModification(action, headerLevel, columnIndex) {\n    if (headerLevel < 0) {\n      headerLevel = this.rowCoordsToLevel(headerLevel);\n    }\n\n    const nodeToProcess = this.#headersTree.getNode(headerLevel, columnIndex);\n    let actionResult;\n\n    if (nodeToProcess) {\n      actionResult = triggerNodeModification(action, nodeToProcess, columnIndex);\n\n      // TODO (perf-tip): Trigger matrix generation once after multiple node modifications.\n      this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n    }\n\n    return actionResult;\n  }\n\n  /**\n   * Triggers an action (e.g. \"hide-column\") from the NodeModifiers module. The action is\n   * triggered starting from the lowest header. The module modifies a tree structure in\n   * such a way as to obtain the correct structure consistent with the called action.\n   *\n   * @param {string} action An action name to trigger.\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|undefined}\n   */\n  triggerColumnModification(action, columnIndex) {\n    return this.triggerNodeModification(action, -1, columnIndex);\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof StateManager#\n   * @function rowCoordsToLevel\n   *\n   * Translates row coordinates into header level. The row coordinates counts from -1 to -N\n   * and describes headers counting from most closest to most distant from the table.\n   * The header levels are counted from 0 to N where 0 describes most distant header\n   * from the table.\n   *\n   *  Row coords             Header level\n   *           +--------------+\n   *       -3  │ A1 │ A1      │  0\n   *           +--------------+\n   *       -2  │ B1 │ B2 │ B3 │  1\n   *           +--------------+\n   *       -1  │ C1 │ C2 │ C3 │  2\n   *           +==============+\n   *           │    │    │    │\n   *           +--------------+\n   *           │    │    │    │\n   *\n   * @param {number} rowIndex A visual row index.\n   * @returns {number|null} Returns unsigned number.\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  rowCoordsToLevel(rowIndex) {\n    if (rowIndex >= 0) {\n      return null;\n    }\n\n    const headerLevel = rowIndex + Math.max(this.getLayersCount(), 1);\n\n    if (headerLevel < 0) {\n      return null;\n    }\n\n    return headerLevel;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof StateManager#\n   * @function levelToRowCoords\n   *\n   * Translates header level into row coordinates. The row coordinates counts from -1 to -N\n   * and describes headers counting from most closest to most distant from the table.\n   * The header levels are counted from 0 to N where 0 describes most distant header\n   * from the table.\n   *\n   *  Header level            Row coords\n   *           +--------------+\n   *        0  │ A1 │ A1      │  -3\n   *           +--------------+\n   *        1  │ B1 │ B2 │ B3 │  -2\n   *           +--------------+\n   *        2  │ C1 │ C2 │ C3 │  -1\n   *           +==============+\n   *           │    │    │    │\n   *           +--------------+\n   *           │    │    │    │\n   *\n   * @param {number} headerLevel Header level index.\n   * @returns {number} Returns negative number.\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  levelToRowCoords(headerLevel) {\n    if (headerLevel < 0) {\n      return null;\n    }\n\n    const rowIndex = headerLevel - Math.max(this.getLayersCount(), 1);\n\n    if (rowIndex >= 0) {\n      return null;\n    }\n\n    return rowIndex;\n  }\n\n  /**\n   * Gets column header settings for a specified column and header index. The returned object contains\n   * all information necessary for header renderers. It contains header label, colspan length, or hidden\n   * flag.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|null}\n   */\n  getHeaderSettings(headerLevel, columnIndex) {\n    if (headerLevel < 0) {\n      headerLevel = this.rowCoordsToLevel(headerLevel);\n    }\n\n    if (headerLevel === null || headerLevel >= this.getLayersCount()) {\n      return null;\n    }\n\n    return this.#stateMatrix[headerLevel]?.[columnIndex] ?? null;\n  }\n\n  /**\n   * Gets tree data that is connected to the column header. The returned object contains all information\n   * necessary for modifying tree structure (column collapsing, hiding, etc.). It contains a header\n   * label, colspan length, or visual column index that indicates which column index the node is rendered from.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|null}\n   */\n  getHeaderTreeNodeData(headerLevel, columnIndex) {\n    const node = this.getHeaderTreeNode(headerLevel, columnIndex);\n\n    if (!node) {\n      return null;\n    }\n\n    return {\n      ...node.data,\n    };\n  }\n\n  /**\n   * Gets tree node that is connected to the column header.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {TreeNode|null}\n   */\n  getHeaderTreeNode(headerLevel, columnIndex) {\n    if (headerLevel < 0) {\n      headerLevel = this.rowCoordsToLevel(headerLevel);\n    }\n\n    if (headerLevel === null || headerLevel >= this.getLayersCount()) {\n      return null;\n    }\n\n    const node = this.#headersTree.getNode(headerLevel, columnIndex);\n\n    if (!node) {\n      return null;\n    }\n\n    return node;\n  }\n\n  /**\n   * Finds the most top header level of the column header that is rendered entirely within\n   * the passed visual columns range. If multiple columns headers are found within the range the\n   * most top header level value will be returned.\n   *\n   * @param {number} columnIndexFrom A visual column index.\n   * @param {number} [columnIndexTo] A visual column index.\n   * @returns {number} Returns a header level in format -1 to -N.\n   */\n  findTopMostEntireHeaderLevel(columnIndexFrom, columnIndexTo = columnIndexFrom) {\n    const columnsWidth = (columnIndexTo - columnIndexFrom) + 1;\n    let atLeastOneRootFound = false;\n    let headerLevel = null;\n\n    for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {\n      const rootNode = this.#headersTree.getRootByColumn(columnIndex);\n\n      if (!rootNode) {\n        break;\n      }\n\n      atLeastOneRootFound = true;\n\n      // eslint-disable-next-line\n      rootNode.walkDown((node) => {\n        const {\n          columnIndex: nodeColumnIndex,\n          headerLevel: nodeHeaderLevel,\n          origColspan,\n          isHidden,\n        } = node.data;\n\n        if (isHidden) {\n          return;\n        }\n\n        // if the header fits entirely within the columns range get and save the node header level\n        if (origColspan <= columnsWidth &&\n            nodeColumnIndex >= columnIndexFrom &&\n            nodeColumnIndex + origColspan - 1 <= columnIndexTo &&\n            (headerLevel === null || nodeHeaderLevel < headerLevel)) {\n\n          headerLevel = nodeHeaderLevel;\n        }\n      }, TRAVERSAL_DF_PRE);\n    }\n\n    if (atLeastOneRootFound && headerLevel === null) {\n      return -1;\n    }\n\n    return this.levelToRowCoords(headerLevel ?? 0);\n  }\n\n  /**\n   * The method is helpful in cases where the column index targets in-between currently\n   * collapsed column. In that case, the method returns the left-most column index\n   * where the nested header begins.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {number}\n   */\n  findLeftMostColumnIndex(headerLevel, columnIndex) {\n    const {\n      isRoot\n    } = this.getHeaderSettings(headerLevel, columnIndex) ?? { isRoot: true };\n\n    if (isRoot) {\n      return columnIndex;\n    }\n\n    let stepBackColumn = columnIndex - 1;\n\n    while (stepBackColumn >= 0) {\n      const {\n        isRoot: isRootNode\n      } = this.getHeaderSettings(headerLevel, stepBackColumn) ?? { isRoot: true };\n\n      if (isRootNode) {\n        break;\n      }\n\n      stepBackColumn -= 1;\n    }\n\n    return stepBackColumn;\n  }\n\n  /**\n   * The method is helpful in cases where the column index targets in-between currently\n   * collapsed column. In that case, the method returns the right-most column index\n   * where the nested header ends.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {number}\n   */\n  findRightMostColumnIndex(headerLevel, columnIndex) {\n    const {\n      isRoot,\n      origColspan,\n    } = this.getHeaderSettings(headerLevel, columnIndex) ?? { isRoot: true, origColspan: 1 };\n\n    if (isRoot) {\n      return columnIndex + origColspan - 1;\n    }\n\n    let stepForthColumn = columnIndex + 1;\n\n    while (stepForthColumn < this.getColumnsCount()) {\n      const {\n        isRoot: isRootNode,\n      } = this.getHeaderSettings(headerLevel, stepForthColumn) ?? { isRoot: true };\n\n      if (isRootNode) {\n        break;\n      }\n\n      stepForthColumn += 1;\n    }\n\n    return stepForthColumn - 1;\n  }\n\n  /**\n   * Gets a total number of headers levels.\n   *\n   * @returns {number}\n   */\n  getLayersCount() {\n    return this.#sourceSettings.getLayersCount();\n  }\n\n  /**\n   * Gets a total number of columns count.\n   *\n   * @returns {number}\n   */\n  getColumnsCount() {\n    return this.#sourceSettings.getColumnsCount();\n  }\n\n  /**\n   * Clears the column state manager to the initial state.\n   */\n  clear() {\n    this.#stateMatrix = [];\n    this.#sourceSettings.clear();\n    this.#headersTree.clear();\n  }\n}\n","import { extend, isObject } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\nimport { normalizeSettings } from './settingsNormalizer';\n\n/**\n * List of properties which are configurable. That properties can be changed using public API.\n *\n * @type {string[]}\n */\nexport const HEADER_CONFIGURABLE_PROPS = ['label', 'collapsible'];\n\n/**\n * The class manages and normalizes settings passed by the developer\n * into the nested headers plugin. The SourceSettings class is a\n * source of truth for tree builder (HeaderTree) module.\n *\n * @private\n * @class SourceSettings\n */\nexport default class SourceSettings {\n  /**\n   * The normalized source data (normalized user-defined settings for nested headers).\n   *\n   * @private\n   * @type {Array[]}\n   */\n  #data = [];\n  /**\n   * The total length of the nested header layers.\n   *\n   * @private\n   * @type {number}\n   */\n  #dataLength = 0;\n  /**\n   * Columns count limit value trims source settings to that value. If columns\n   * count limit intersects nested header, the header's colspan value is reduced\n   * to keep the whole structure stable (trimmed precisely where the limit is set).\n   *\n   * @type {number}\n   */\n  #columnsLimit = Infinity;\n\n  /**\n   * Sets columns limit to the source settings will be trimmed. All headers which\n   * overlap the column limit will be reduced to keep the structure solid.\n   *\n   * @param {number} columnsCount The number of columns to limit to.\n   */\n  setColumnsLimit(columnsCount) {\n    this.#columnsLimit = columnsCount;\n  }\n\n  /**\n   * Sets a new nested header configuration.\n   *\n   * @param {Array[]} [nestedHeadersSettings=[]] The user-defined nested headers settings.\n   */\n  setData(nestedHeadersSettings = []) {\n    this.#data = normalizeSettings(nestedHeadersSettings, this.#columnsLimit);\n    this.#dataLength = this.#data.length;\n  }\n\n  /**\n   * Gets normalized source settings.\n   *\n   * @returns {Array[]}\n   */\n  getData() {\n    return this.#data;\n  }\n\n  /**\n   * Merges settings with current source settings.\n   *\n   * @param {object[]} additionalSettings An array of objects with `row`, `col` and additional\n   *                                      properties to merge with current source settings.\n   */\n  mergeWith(additionalSettings) {\n    arrayEach(additionalSettings, ({ row, col, ...rest }) => {\n      const headerSettings = this.getHeaderSettings(row, col);\n\n      if (headerSettings !== null) {\n        extend(headerSettings, rest, HEADER_CONFIGURABLE_PROPS);\n      }\n    });\n  }\n\n  /**\n   * Maps the current state with a callback. For each source settings the callback function\n   * is called. If the function returns value that value is merged with the source settings.\n   *\n   * @param {Function} callback A function that is called for every header settings.\n   *                            Each time the callback is called, the returned value extends\n   *                            header settings.\n   */\n  map(callback) {\n    arrayEach(this.#data, (header) => {\n      arrayEach(header, (headerSettings) => {\n        const propsToExtend = callback({ ...headerSettings });\n\n        if (isObject(propsToExtend)) {\n          extend(headerSettings, propsToExtend, HEADER_CONFIGURABLE_PROPS);\n        }\n      });\n    });\n  }\n\n  /**\n   * Gets source column header settings for a specified header. The returned\n   * object contains information about the header label, its colspan length,\n   * or if it is hidden in the header renderers.\n   *\n   * @param {number} headerLevel Header level (0 = most distant to the table).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|null}\n   */\n  getHeaderSettings(headerLevel, columnIndex) {\n    if (headerLevel >= this.#dataLength || headerLevel < 0) {\n      return null;\n    }\n\n    const headersSettings = this.#data[headerLevel];\n\n    if (Array.isArray(headersSettings) === false || columnIndex >= headersSettings.length) {\n      return null;\n    }\n\n    return headersSettings[columnIndex] ?? null;\n  }\n\n  /**\n   * Gets source of column headers settings for specified headers. If the retrieved column\n   * settings overlap the range \"box\" determined by \"columnIndex\" and \"columnsLength\"\n   * the exception will be thrown.\n   *\n   * @param {number} headerLevel Header level (0 = most distant to the table).\n   * @param {number} columnIndex A visual column index from which the settings will be extracted.\n   * @param {number} [columnsLength=1] The number of columns involved in the extraction of settings.\n   * @returns {object}\n   */\n  getHeadersSettings(headerLevel, columnIndex, columnsLength = 1) {\n    const headersSettingsChunks = [];\n\n    if (headerLevel >= this.#dataLength || headerLevel < 0) {\n      return headersSettingsChunks;\n    }\n\n    const headersSettings = this.#data[headerLevel];\n    let currentLength = 0;\n\n    for (let i = columnIndex; i < headersSettings.length; i++) {\n      const headerSettings = headersSettings[i];\n\n      if (headerSettings.isPlaceholder) {\n        throw new Error('The first column settings cannot overlap the other header layers');\n      }\n\n      currentLength += headerSettings.colspan;\n      headersSettingsChunks.push(headerSettings);\n\n      if (headerSettings.colspan > 1) {\n        i += headerSettings.colspan - 1;\n      }\n\n      // We met the current sum of the child colspans\n      if (currentLength === columnsLength) {\n        break;\n      }\n      // We exceeds the current sum of the child colspans, the last columns colspan overlaps the \"columnsLength\" length.\n      if (currentLength > columnsLength) {\n        throw new Error('The last column settings cannot overlap the other header layers');\n      }\n    }\n\n    return headersSettingsChunks;\n  }\n\n  /**\n   * Gets a total number of headers levels.\n   *\n   * @returns {number}\n   */\n  getLayersCount() {\n    return this.#dataLength;\n  }\n\n  /**\n   * Gets a total number of columns count.\n   *\n   * @returns {number}\n   */\n  getColumnsCount() {\n    return this.#dataLength > 0 ? this.#data[0].length : 0;\n  }\n\n  /**\n   * Clears the data.\n   */\n  clear() {\n    this.#data = [];\n    this.#dataLength = 0;\n  }\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\nimport { arrayEach, arrayMap } from '../../../helpers/array';\nimport { isObject } from '../../../helpers/object';\nimport { stringify } from '../../../helpers/mixed';\nimport { createDefaultHeaderSettings, createPlaceholderHeaderSettings } from './utils';\n\n/**\n * A function that normalizes user-defined settings into one predictable\n * structure. Currently, the developer can declare nested headers by passing\n * the following unstructured (and sometimes uncompleted) array.\n *   [\n *     [{ label: 'A1', colspan: 2 }],\n *     [{ label: true }, 'B2', 4],\n *     [],\n *   ]\n *\n * The normalization process equalizes the length of columns to each header\n * layers to the same length and generates object settings with a common shape.\n * So the above mentioned example will be normalized into this:\n *   [\n *     [\n *       { label: 'A1', colspan: 2, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: true, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: 'true', colspan: 1, isHidden: false, ... },\n *       { label: 'B2', colspan: 1, isHidden: false, ... },\n *       { label: '4', colspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: '', colspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *     ],\n *   ]\n *\n * @param {Array[]} sourceSettings An array with defined nested headers settings.\n * @param {number} [columnsLimit=Infinity] A number of columns to which the structure\n *                                         will be trimmed. While trimming the colspan\n *                                         values are adjusted to preserve the original\n *                                         structure.\n * @returns {Array[]}\n */\nexport function normalizeSettings(sourceSettings, columnsLimit = Infinity) {\n  const normalizedSettings = [];\n\n  if (columnsLimit === 0) {\n    return normalizedSettings;\n  }\n\n  // Normalize array items (header settings) into one shape - literal object with default props.\n  arrayEach(sourceSettings, (headersSettings) => {\n    const columns = [];\n    let columnIndex = 0;\n\n    normalizedSettings.push(columns);\n\n    arrayEach(headersSettings, (sourceHeaderSettings) => {\n      const headerSettings = createDefaultHeaderSettings();\n\n      if (isObject(sourceHeaderSettings)) {\n        const {\n          label, colspan, headerClassName\n        } = sourceHeaderSettings;\n\n        headerSettings.label = stringify(label);\n\n        if (typeof colspan === 'number' && colspan > 1) {\n          headerSettings.colspan = colspan;\n          headerSettings.origColspan = colspan;\n        }\n\n        if (typeof headerClassName === 'string') {\n          headerSettings.headerClassNames = [...headerClassName.split(' ')];\n        }\n\n      } else {\n        headerSettings.label = stringify(sourceHeaderSettings);\n      }\n\n      columnIndex += headerSettings.origColspan;\n\n      let cancelProcessing = false;\n\n      if (columnIndex >= columnsLimit) {\n        // Adjust the colspan value to not overlap the columns limit.\n        headerSettings.colspan = headerSettings.origColspan - (columnIndex - columnsLimit);\n        headerSettings.origColspan = headerSettings.colspan;\n        cancelProcessing = true;\n      }\n\n      columns.push(headerSettings);\n\n      if (headerSettings.colspan > 1) {\n        for (let i = 0; i < headerSettings.colspan - 1; i++) {\n          columns.push(createPlaceholderHeaderSettings());\n        }\n      }\n\n      return !cancelProcessing;\n    });\n  });\n\n  const columnsLength = Math.max(...arrayMap(normalizedSettings, (headersSettings => headersSettings.length)));\n\n  // Normalize the length of each header layer to the same columns length.\n  arrayEach(normalizedSettings, (headersSettings) => {\n    if (headersSettings.length < columnsLength) {\n      const defaultSettings = arrayMap(\n        new Array(columnsLength - headersSettings.length), () => createDefaultHeaderSettings()\n      );\n\n      headersSettings.splice(headersSettings.length, 0, ...defaultSettings);\n    }\n  });\n\n  return normalizedSettings;\n}\n","/**\n * @typedef {object} DefaultHeaderSettings\n * @property {string} label The name/label of the column header.\n * @property {number} colspan Current calculated colspan value of the rendered column header element.\n * @property {number} origColspan Original colspan value, set once while parsing user-defined nested header settings.\n * @property {boolean} collapsible The flag determines whether the node is collapsible (can be collapsed/expanded).\n * @property {number[]} crossHiddenColumns The list of visual column indexes which indicates that the specified columns within\n *                                         the header settings are hidden.\n * @property {boolean} isCollapsed The flag determines whether the node is collapsed.\n * @property {boolean} isHidden The flag determines whether the column header at specified index is hidden. If true\n *                              the TH element will be rendered as hidden (display: none).\n * @property {boolean} isRoot The flag which determines whether the column header settings is actually not renderable. That kind\n *                            of objects are generated after colspaned header to fill an array to correct size.\n *                            For example for header with colspan = 8 the 7 blank objects are generated to fill the array settings\n *                            to length = 8.\n * @property {boolean} isPlaceholder The flag determines whether the column header at the specified index is non-renderable.\n * @property {string[]} headerClassNames The list of CSS classes that will be added to the `div` element inside the\n * header Acts as a replacement for the analogous property from the Handsontable settings.\n */\n\n/**\n * Creates the header settings object with default values.\n *\n * @param {DefaultHeaderSettings} initialValues The initial values for the header settings object.\n * @returns {DefaultHeaderSettings}\n */\nexport function createDefaultHeaderSettings({\n  label = '',\n  colspan = 1,\n  origColspan = 1,\n  collapsible = false,\n  crossHiddenColumns = [],\n  isCollapsed = false,\n  isHidden = false,\n  isRoot = false,\n  isPlaceholder = false,\n  headerClassNames = []\n} = {}) {\n  return {\n    label,\n    colspan,\n    origColspan,\n    collapsible,\n    isCollapsed,\n    crossHiddenColumns,\n    isHidden,\n    isRoot,\n    isPlaceholder,\n    headerClassNames,\n  };\n}\n\n/**\n * Creates the placeholder header settings object. Those settings tell the header renderers\n * that this TH element should not be rendered (the node will be overlapped by the previously\n * created node with colspan bigger than 1).\n *\n * @returns {object}\n */\nexport function createPlaceholderHeaderSettings() {\n  return {\n    label: '',\n    isPlaceholder: true,\n  };\n}\n","import { arrayEach } from '../../../helpers/array';\nimport TreeNode from '../../../utils/dataStructures/tree';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @private\n * @class HeadersTree\n *\n * The header tree class keeps nested header settings in the tree\n * structure for easier node manipulation (e.q collapse or expand column).\n * That trees represent the current state of the nested headers. From the\n * trees, the matrix is generated for nested header renderers.\n *\n * The second role of the module is validation. While building the tree,\n * there is check whether the configuration contains overlapping\n * headers. If true, then the exception is thrown.\n *\n * The tree is static; it means that its column indexing never changes\n * even when a collapsing header is performed. The structure is based\n * on visual column indexes.\n *\n * For example, for that header configuration:\n *   +----+----+----+----+----+\n *   │ A1                │ A2 │\n *   +----+----+----+----+----+\n *   │ B1           │ B2 │ B3 │\n *   +----+----+----+----+----+\n *   │ C1      │ C2 │ C3 │ C4 │\n *   +----+----+----+----+----+\n *\n * The tree structures look like:\n *                (0)                      (4)           // a visual column index\n *                 │                        │\n *        .------(A1)------.              (A2)--.\n *   .--(B1)--.           (B2)--.              (B3)--.\n *  (C1)     (C2)              (C3)                 (C4)\n *\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport default class HeadersTree {\n  /**\n   * The collection of nested headers settings structured into trees. The root trees are stored\n   * under the visual column index.\n   *\n   * @private\n   * @type {Map<number, TreeNode>}\n   */\n  #rootNodes = new Map();\n  /**\n   * A map that translates the visual column indexes that intersect the range\n   * defined by the header colspan width to the root index.\n   *\n   * @private\n   * @type {Map<number, number>}\n   */\n  #rootsIndex = new Map();\n  /**\n   * The instance of the SourceSettings class.\n   *\n   * @private\n   * @type {SourceSettings}\n   */\n  #sourceSettings = null;\n\n  constructor(sourceSettings) {\n    this.#sourceSettings = sourceSettings;\n  }\n\n  /**\n   * Gets an array of the all root nodes.\n   *\n   * @returns {TreeNode[]}\n   */\n  getRoots() {\n    return Array.from(this.#rootNodes.values());\n  }\n\n  /**\n   * Gets a root node by specified visual column index.\n   *\n   * @param {number} columnIndex A visual column index.\n   * @returns {TreeNode|undefined}\n   */\n  getRootByColumn(columnIndex) {\n    let node;\n\n    if (this.#rootsIndex.has(columnIndex)) {\n      node = this.#rootNodes.get(this.#rootsIndex.get(columnIndex));\n    }\n\n    return node;\n  }\n\n  /**\n   * Gets a tree node by its position in the grid settings.\n   *\n   * @param {number} headerLevel Header level index (there is support only for positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {TreeNode|undefined}\n   */\n  getNode(headerLevel, columnIndex) {\n    const rootNode = this.getRootByColumn(columnIndex);\n\n    if (!rootNode) {\n      return;\n    }\n\n    // Normalize the visual column index to a 0-based system for a specific \"box\" defined\n    // by root node colspan width.\n    const normColumnIndex = columnIndex - this.#rootsIndex.get(columnIndex);\n    let columnCursor = 0;\n    let treeNode;\n\n    // Collect all parent nodes that depend on the collapsed node.\n    rootNode.walkDown((node) => {\n      const { data: { origColspan, headerLevel: nodeHeaderLevel } } = node;\n\n      if (headerLevel === nodeHeaderLevel) {\n        if (normColumnIndex >= columnCursor && normColumnIndex <= columnCursor + origColspan - 1) {\n          treeNode = node;\n          treeNode.data.isRoot = columnIndex === treeNode.data.columnIndex;\n\n          return false; // Cancel tree traversing.\n        }\n\n        columnCursor += origColspan;\n      }\n    });\n\n    return treeNode;\n  }\n\n  /**\n   * Builds (or rebuilds if called again) root nodes indexes.\n   */\n  rebuildTreeIndex() {\n    let columnIndex = 0;\n\n    this.#rootsIndex.clear();\n\n    arrayEach(this.#rootNodes, ([, { data: { colspan } }]) => {\n      // Map tree range (colspan range/width) into visual column index of the root node.\n      for (let i = columnIndex; i < columnIndex + colspan; i++) {\n        this.#rootsIndex.set(i, columnIndex);\n      }\n\n      columnIndex += colspan;\n    });\n  }\n\n  /**\n   * Builds trees based on SourceSettings class. Calling a method causes clearing the tree state built\n   * from the previous call.\n   */\n  buildTree() {\n    this.clear();\n\n    const columnsCount = this.#sourceSettings.getColumnsCount();\n    let columnIndex = 0;\n\n    while (columnIndex < columnsCount) {\n      const columnSettings = this.#sourceSettings.getHeaderSettings(0, columnIndex);\n      const rootNode = new TreeNode();\n\n      this.#rootNodes.set(columnIndex, rootNode);\n      this.buildLeaves(rootNode, columnIndex, 0, columnSettings.origColspan);\n\n      columnIndex += columnSettings.origColspan;\n    }\n\n    this.rebuildTreeIndex();\n  }\n\n  /**\n   * Builds leaves for specified tree node.\n   *\n   * @param {TreeNode} parentNode A node to which the leaves applies.\n   * @param {number} columnIndex A visual column index.\n   * @param {number} headerLevel Currently processed header level.\n   * @param {number} [extractionLength=1] Determines column extraction length for node children.\n   */\n  buildLeaves(parentNode, columnIndex, headerLevel, extractionLength = 1) {\n    const columnsSettings = this.#sourceSettings.getHeadersSettings(headerLevel, columnIndex, extractionLength);\n\n    headerLevel += 1;\n\n    arrayEach(columnsSettings, (columnSettings) => {\n      const nodeData = {\n        ...columnSettings,\n        /**\n         * The header level (tree node depth level).\n         *\n         * @type {number}\n         */\n        headerLevel: headerLevel - 1,\n        /**\n         * A visual column index.\n         *\n         * @type {number}\n         */\n        columnIndex,\n      };\n      let node;\n\n      if (headerLevel === 1) { // fill the root node\n        parentNode.data = nodeData;\n        node = parentNode;\n\n      } else {\n        node = new TreeNode(nodeData);\n\n        parentNode.addChild(node);\n      }\n\n      if (headerLevel < this.#sourceSettings.getLayersCount()) {\n        this.buildLeaves(node, columnIndex, headerLevel, columnSettings.origColspan);\n      }\n\n      columnIndex += columnSettings.origColspan;\n    });\n  }\n\n  /**\n   * Clears the tree to the initial state.\n   */\n  clear() {\n    this.#rootNodes.clear();\n    this.#rootsIndex.clear();\n  }\n}\n","/**\n * Depth-first pre-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Pre-order_(NLR)).\n *\n * @type {string}\n */\nexport const TRAVERSAL_DF_PRE = 'DF-pre-order';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n * @returns {boolean}\n */\nexport function depthFirstPreOrder(callback, context) {\n  let continueTraverse = callback.call(context, this);\n\n  for (let i = 0; i < this.childs.length; i++) {\n    if (continueTraverse === false) {\n      return false;\n    }\n\n    continueTraverse = depthFirstPreOrder.call(this.childs[i], callback, context);\n  }\n\n  return continueTraverse;\n}\n\n/**\n * Depth-first post-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Post-order_(NLR)).\n *\n * @type {string}\n */\nexport const TRAVERSAL_DF_POST = 'DF-post-order';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n * @returns {boolean}\n */\nfunction depthFirstPostOrder(callback, context) {\n  for (let i = 0; i < this.childs.length; i++) {\n    const continueTraverse = depthFirstPostOrder.call(this.childs[i], callback, context);\n\n    if (continueTraverse === false) {\n      return false;\n    }\n  }\n\n  return callback.call(context, this);\n}\n\n/**\n * Breadth-first traversal strategy (https://en.wikipedia.org/wiki/Tree_traversal#Breadth-first_search_/_level_order).\n *\n * @type {string}\n */\nexport const TRAVERSAL_BF = 'BF';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n */\nfunction breadthFirst(callback, context) {\n  const queue = [this];\n\n  /**\n   * Internal processor.\n   */\n  function process() {\n    if (queue.length === 0) {\n      return;\n    }\n\n    const node = queue.shift();\n\n    queue.push(...node.childs);\n\n    if (callback.call(context, node) !== false) {\n      process();\n    }\n  }\n\n  process();\n}\n\n/**\n * Default strategy for tree traversal.\n *\n * @type {string}\n */\nconst DEFAULT_TRAVERSAL_STRATEGY = TRAVERSAL_BF;\n/**\n * Collection of all available tree traversal strategies.\n *\n * @type {Map<string, Function>}\n */\nconst TRAVERSAL_STRATEGIES = new Map([\n  [TRAVERSAL_DF_PRE, depthFirstPreOrder],\n  [TRAVERSAL_DF_POST, depthFirstPostOrder],\n  [TRAVERSAL_BF, breadthFirst],\n]);\n\n/**\n *\n */\nexport default class TreeNode {\n  /**\n   * A tree data.\n   *\n   * @type {object}\n   */\n  data = {};\n  /**\n   * A parent node.\n   *\n   * @type {TreeNode}\n   */\n  parent = null;\n  /**\n   * A tree leaves.\n   *\n   * @type {TreeNode[]}\n   */\n  childs = [];\n\n  constructor(data) {\n    this.data = data;\n  }\n\n  /**\n   * Adds a node to tree leaves. Added node is linked with the parent node through \"parent\" property.\n   *\n   * @param {TreeNode} node A TreeNode to add.\n   */\n  addChild(node) {\n    node.parent = this;\n    this.childs.push(node);\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof TreeNode#\n   * @function cloneTree\n   *\n   * Clones a tree structure deeply.\n   *\n   * For example, for giving a tree structure:\n   *      .--(B1)--.\n   *   .-(C1)   .-(C2)-.----.\n   *  (D1)     (D2)   (D3) (D4)\n   *\n   * Cloning a tree starting from C2 node creates a mirrored tree structure.\n   *     .-(C2')-.-----.\n   *    (D2')   (D3') (D4')\n   *\n   * The cloned tree can be safely modified without affecting the original structure.\n   * After modification, the clone can be merged with a tree using the \"replaceTreeWith\" method.\n   *\n   * @param {TreeNode} [nodeTree=this] A TreeNode to clone.\n   * @returns {TreeNode}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  cloneTree(nodeTree = this) {\n    const clonedNode = new TreeNode({\n      ...nodeTree.data,\n    });\n\n    for (let i = 0; i < nodeTree.childs.length; i++) {\n      clonedNode.addChild(this.cloneTree(nodeTree.childs[i]));\n    }\n\n    return clonedNode;\n  }\n\n  /**\n   * Replaces the current node with a passed tree structure.\n   *\n   * @param {TreeNode} nodeTree A TreeNode to replace with.\n   */\n  replaceTreeWith(nodeTree) {\n    this.data = { ...nodeTree.data };\n    this.childs = [];\n\n    for (let i = 0; i < nodeTree.childs.length; i++) {\n      this.addChild(nodeTree.childs[i]);\n    }\n  }\n\n  /**\n   * Traverses the tree structure through node childs. The walk down traversing supports\n   * a three different strategies.\n   *  - Depth-first pre-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Pre-order_(NLR));\n   *  - Depth-first post-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Post-order_(NLR));\n   *  - Breadth-first traversal strategy (https://en.wikipedia.org/wiki/Tree_traversal#Breadth-first_search_/_level_order).\n   *\n   * @param {Function} callback The callback function which will be called for each node.\n   * @param {string} [traversalStrategy=DEFAULT_TRAVERSAL_STRATEGY] Traversing strategy.\n   */\n  walkDown(callback, traversalStrategy = DEFAULT_TRAVERSAL_STRATEGY) {\n    if (!TRAVERSAL_STRATEGIES.has(traversalStrategy)) {\n      throw new Error(`Traversal strategy \"${traversalStrategy}\" does not exist`);\n    }\n\n    TRAVERSAL_STRATEGIES.get(traversalStrategy).call(this, callback, this);\n  }\n\n  /**\n   * Traverses the tree structure through node parents.\n   *\n   * @param {Function} callback The callback function which will be called for each node.\n   */\n  walkUp(callback) {\n    const context = this;\n    const process = (node) => {\n      const continueTraverse = callback.call(context, node);\n\n      if (continueTraverse !== false && node.parent !== null) {\n        process(node.parent);\n      }\n    };\n\n    process(this);\n  }\n}\n","/**\n * The NodeModifiers module is responsible for the modification of a tree structure\n * in a way to achieve new column headers state.\n */\nimport { collapseNode } from './collapse';\nimport { expandNode } from './expand';\nimport { hideColumn } from './hideColumn';\nimport { showColumn } from './showColumn';\n\nconst availableModifiers = new Map([\n  ['collapse', collapseNode],\n  ['expand', expandNode],\n  ['hide-column', hideColumn],\n  ['show-column', showColumn],\n]);\n\n/**\n * An entry point for triggering a node modifiers. If the triggered action\n * does not exist the exception is thrown.\n *\n * @param {string} actionName An action name to trigger.\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that comes from the nested headers grid.\n *                                 The index, as opposed to the `columnIndex` in the tree node\n *                                 (which describes the column index of the root node of the header\n *                                 element), describes the index passed from the grid. Hence, the\n *                                 index can be between the column index of the node and its colspan\n *                                 width.\n * @returns {object}\n */\nexport function triggerNodeModification(actionName, nodeToProcess, gridColumnIndex) {\n  if (!availableModifiers.has(actionName)) {\n    throw new Error(`The node modifier action (\"${actionName}\") does not exist.`);\n  }\n\n  return availableModifiers.get(actionName)(nodeToProcess, gridColumnIndex);\n}\n","import { arrayEach } from '../../../../helpers/array';\nimport { expandNode } from './expand';\nimport {\n  getFirstChildProperty,\n  isNodeReflectsFirstChildColspan,\n  traverseHiddenNodeColumnIndexes,\n} from './utils/tree';\n\n/**\n * Collapsing a node is a process where the processing node is collapsed\n * to the colspan width of the first child. All node children, except the\n * first one, are hidden. To prevent losing a current state of node children\n * on the right, all nodes are cloned (and restored while expanding), and\n * only then original nodes are modified (hidden in this case).\n *\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @returns {object} Returns an object with properties:\n *                    - rollbackModification: The function that rollbacks\n *                      the tree to the previous state.\n *                    - affectedColumns: The list of the visual column\n *                      indexes which are affected. That list is passed\n *                      to the hiddens column logic.\n *                    - colspanCompensation: The number of colspan by\n *                      which the processed node colspan was reduced.\n */\nexport function collapseNode(nodeToProcess) {\n  const { data: nodeData, childs: nodeChilds } = nodeToProcess;\n\n  if (nodeData.isCollapsed || nodeData.isHidden || nodeData.origColspan <= 1) {\n    return {\n      rollbackModification: () => {},\n      affectedColumns: [],\n      colspanCompensation: 0,\n    };\n  }\n\n  const isNodeReflected = isNodeReflectsFirstChildColspan(nodeToProcess);\n\n  if (isNodeReflected) {\n    return collapseNode(nodeChilds[0]);\n  }\n\n  nodeData.isCollapsed = true;\n\n  const allLeavesExceptMostLeft = nodeChilds.slice(1);\n  const affectedColumns = new Set();\n\n  if (allLeavesExceptMostLeft.length > 0) {\n    arrayEach(allLeavesExceptMostLeft, (node) => {\n      traverseHiddenNodeColumnIndexes(node, (gridColumnIndex) => {\n        affectedColumns.add(gridColumnIndex);\n      });\n\n      // Clone the tree to preserve original tree state after header expanding.\n      node.data.clonedTree = node.cloneTree();\n\n      // Hide all leaves except the first leaf on the left (on headers context hide all\n      // headers on the right).\n      node.walkDown(({ data }) => {\n        data.isHidden = true;\n      });\n    });\n\n  } else {\n    const {\n      origColspan,\n      columnIndex,\n    } = nodeData;\n\n    // Add column to \"affected\" started from 1. The header without children can not be\n    // collapsed so the first have to be visible (untouched).\n    for (let i = 1; i < origColspan; i++) {\n      const gridColumnIndex = columnIndex + i;\n\n      affectedColumns.add(gridColumnIndex);\n    }\n  }\n\n  // Calculate by how many colspan it needs to reduce the headings to match them to\n  // the first child colspan width.\n  const colspanCompensation = nodeData.colspan - (getFirstChildProperty(nodeToProcess, 'colspan') ?? 1);\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.colspan -= colspanCompensation;\n\n    if (data.colspan <= 1) {\n      data.colspan = 1;\n      data.isCollapsed = true;\n\n    } else if (isNodeReflectsFirstChildColspan(node)) {\n      data.isCollapsed = getFirstChildProperty(node, 'isCollapsed');\n    }\n  });\n\n  return {\n    rollbackModification: () => expandNode(nodeToProcess),\n    affectedColumns: Array.from(affectedColumns),\n    colspanCompensation,\n  };\n}\n","import { arrayEach } from '../../../../helpers/array';\nimport { collapseNode } from './collapse';\nimport {\n  getFirstChildProperty,\n  isNodeReflectsFirstChildColspan,\n  traverseHiddenNodeColumnIndexes,\n} from './utils/tree';\n\n/**\n * Expanding a node is a process where the processing node is expanded to\n * its original colspan width. To restore an original state of all node\n * children on the right, the modified nodes are replaced with the cloned\n * nodes (they were cloned while collapsing).\n *\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @returns {object} Returns an object with properties:\n *                    - rollbackModification: The function that rollbacks\n *                      the tree to the previous state.\n *                    - affectedColumns: The list of the visual column\n *                      indexes which are affected. That list is passed\n *                      to the hiddens column logic.\n *                    - colspanCompensation: The number of colspan by\n *                      which the processed node colspan was increased.\n */\nexport function expandNode(nodeToProcess) {\n  const { data: nodeData, childs: nodeChilds } = nodeToProcess;\n\n  if (!nodeData.isCollapsed || nodeData.isHidden || nodeData.origColspan <= 1) {\n    return {\n      rollbackModification: () => {},\n      affectedColumns: [],\n      colspanCompensation: 0,\n    };\n  }\n\n  const isNodeReflected = isNodeReflectsFirstChildColspan(nodeToProcess);\n\n  if (isNodeReflected) {\n    return expandNode(nodeChilds[0]);\n  }\n\n  nodeData.isCollapsed = false;\n\n  const allLeavesExceptMostLeft = nodeChilds.slice(1);\n  const affectedColumns = new Set();\n  let colspanCompensation = 0;\n\n  if (allLeavesExceptMostLeft.length > 0) {\n    arrayEach(allLeavesExceptMostLeft, (node) => {\n      // Restore original state of the collapsed headers.\n      node.replaceTreeWith(node.data.clonedTree);\n      node.data.clonedTree = null;\n\n      const leafData = node.data;\n\n      // Calculate by how many colspan it needs to increase the headings to match them to\n      // the colspan width of all its children.\n      colspanCompensation += leafData.colspan;\n\n      traverseHiddenNodeColumnIndexes(node, (gridColumnIndex) => {\n        affectedColumns.add(gridColumnIndex);\n      });\n    });\n\n  } else {\n    const {\n      colspan,\n      origColspan,\n      columnIndex,\n    } = nodeData;\n\n    // In a case when the node doesn't have any children restore the colspan width to\n    // its original state.\n    colspanCompensation = origColspan - colspan;\n\n    // Add column to \"affected\" started from 1. The header without children can not be\n    // collapsed so the first column is already visible and we shouldn't touch it.\n    for (let i = 1; i < origColspan; i++) {\n      affectedColumns.add(columnIndex + i);\n    }\n  }\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.colspan += colspanCompensation;\n\n    if (data.colspan >= data.origColspan) {\n      data.colspan = data.origColspan;\n      data.isCollapsed = false;\n\n    } else if (isNodeReflectsFirstChildColspan(node)) {\n      data.isCollapsed = getFirstChildProperty(node, 'isCollapsed');\n    }\n  });\n\n  return {\n    rollbackModification: () => collapseNode(nodeToProcess),\n    affectedColumns: Array.from(affectedColumns),\n    colspanCompensation,\n  };\n}\n","/**\n * Traverses the tree nodes and calls a callback when no hidden node is found. The callback\n * is called with visual column index then.\n *\n * @param {TreeNode} node A tree node to traverse.\n * @param {Function} callback The callback function which will be called for each node.\n */\nexport function traverseHiddenNodeColumnIndexes(node, callback) {\n  node.walkDown(({ data, childs }) => {\n    if (!data.isHidden) {\n      callback(data.columnIndex);\n\n      if (childs.length === 0) {\n        for (let i = 1; i < data.colspan; i++) {\n          callback(data.columnIndex + i);\n        }\n      }\n    }\n  });\n}\n\n/**\n * A tree helper for retrieving a data from the first child.\n *\n * @param {TreeNode} node A tree node to check.\n * @param {string} propertyName A name of the property whose value you want to get.\n * @returns {*}\n */\nexport function getFirstChildProperty({ childs }, propertyName) {\n  if (childs.length === 0) {\n    return;\n  }\n\n  return childs[0].data[propertyName];\n}\n\n/**\n * A tree helper which checks if passed node has the same original colspan as its\n * first child. In that case the node is treated as \"mirrored\" or \"reflected\" every\n * action performed on one of that nodes should be reflected to other \"mirrored\" node.\n *\n * In that case nodes A1 and A2 are \"reflected\"\n *   +----+----+----+----+\n *   | A1      | B1      |\n *   +----+----+----+----+\n *   | A2      | B2 | B3 |\n *   +----+----+----+----+.\n *\n * @param {TreeNode} node A tree node to check.\n * @returns {boolean}\n */\nexport function isNodeReflectsFirstChildColspan(node) {\n  return getFirstChildProperty(node, 'origColspan') === node.data.origColspan;\n}\n","import { toSingleLine } from '../../../../helpers/templateLiteralTag';\n\n/**\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that triggers the node modification.\n *                                 The index can be between the root node column index and\n *                                 column index plus node colspan length.\n */\nexport function hideColumn(nodeToProcess, gridColumnIndex) {\n  if (!Number.isInteger(gridColumnIndex)) {\n    throw new Error('The passed gridColumnIndex argument has invalid type.');\n  }\n\n  if (nodeToProcess.childs.length > 0) {\n    throw new Error(toSingleLine`The passed node is not the last node on the tree. Only for\\x20\nthe last node, the hide column modification can be applied.`);\n  }\n\n  const {\n    crossHiddenColumns,\n  } = nodeToProcess.data;\n\n  if (crossHiddenColumns.includes(gridColumnIndex)) {\n    return;\n  }\n\n  let isCollapsibleNode = false;\n\n  nodeToProcess.walkUp((node) => {\n    const { data: { collapsible } } = node;\n\n    if (collapsible) {\n      isCollapsibleNode = true;\n\n      return false; // Cancel tree traversing\n    }\n  });\n\n  // TODO: When the node is collapsible do not hide the column. Currently collapsible headers\n  // does not work with hidden columns (hidden index map types).\n  if (isCollapsibleNode) {\n    return;\n  }\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.crossHiddenColumns.push(gridColumnIndex);\n\n    if (data.colspan > 1) {\n      data.colspan -= 1;\n    } else {\n      data.isHidden = true;\n    }\n  });\n}\n","import { toSingleLine } from '../../../../helpers/templateLiteralTag';\n\n/**\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that triggers the node modification.\n *                                 The index can be between the root node column index and\n *                                 column index plus node colspan length.\n */\nexport function showColumn(nodeToProcess, gridColumnIndex) {\n  if (!Number.isInteger(gridColumnIndex)) {\n    throw new Error('The passed gridColumnIndex argument has invalid type.');\n  }\n\n  if (nodeToProcess.childs.length > 0) {\n    throw new Error(toSingleLine`The passed node is not the last node on the tree. Only for\\x20\nthe last node, the show column modification can be applied.`);\n  }\n\n  const {\n    crossHiddenColumns,\n  } = nodeToProcess.data;\n\n  if (!crossHiddenColumns.includes(gridColumnIndex)) {\n    return;\n  }\n\n  let isCollapsibleNode = false;\n\n  nodeToProcess.walkUp((node) => {\n    const { data: { collapsible } } = node;\n\n    if (collapsible) {\n      isCollapsibleNode = true;\n\n      return false; // Cancel tree traversing\n    }\n  });\n\n  // TODO: When the node is collapsible do not show the column. Currently collapsible headers\n  // does not work with hidden columns (hidden index map types).\n  if (isCollapsibleNode) {\n    return;\n  }\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.crossHiddenColumns.splice(data.crossHiddenColumns.indexOf(gridColumnIndex), 1);\n\n    if (!data.isHidden && data.colspan < data.origColspan) {\n      data.colspan += 1;\n    }\n\n    data.isHidden = false;\n  });\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\nimport { arrayEach } from '../../../helpers/array';\nimport { createDefaultHeaderSettings, createPlaceholderHeaderSettings } from './utils';\n\n/**\n * A function that dump a tree structure into multidimensional array. That structure is\n * later processed by header renderers to modify TH elements to achieve a proper\n * DOM structure.\n *\n * That structure contains settings object for every TH element generated by Walkontable.\n * The matrix operates on visual column index.\n *\n * Output example:\n *   [\n *     [\n *       { label: 'A1', colspan: 2, origColspan: 2, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: true, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: 'true', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: 'B2', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '4', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *   ]\n *\n * @param {TreeNode[]} headerRoots An array of root nodes.\n * @returns {Array[]}\n */\nexport function generateMatrix(headerRoots) {\n  const matrix = [];\n\n  arrayEach(headerRoots, (rootNode) => {\n    rootNode.walkDown((node) => {\n      const nodeData = node.data;\n      const {\n        origColspan,\n        columnIndex,\n        headerLevel,\n        crossHiddenColumns,\n      } = nodeData;\n      const colspanHeaderLayer = createNestedArrayIfNecessary(matrix, headerLevel);\n      let isRootSettingsFound = false;\n\n      for (let i = columnIndex; i < columnIndex + origColspan; i++) {\n        const isColumnHidden = crossHiddenColumns.includes(i);\n\n        if (isColumnHidden || isRootSettingsFound) {\n          colspanHeaderLayer.push(createPlaceholderHeaderSettings(nodeData));\n        } else {\n          const headerRootSettings = createHeaderSettings(nodeData);\n\n          headerRootSettings.isRoot = true;\n          colspanHeaderLayer.push(headerRootSettings);\n          isRootSettingsFound = true;\n        }\n      }\n    });\n  });\n\n  return matrix;\n}\n\n/**\n * Creates header settings object.\n *\n * @param {object} nodeData The tree data object.\n * @returns {object}\n */\nfunction createHeaderSettings(nodeData) {\n  // For the matrix module we do not need to export \"crossHiddenColumns\" key. It's redundant here.\n  const { crossHiddenColumns, ...headerRootSettings } = createDefaultHeaderSettings(nodeData);\n\n  return headerRootSettings;\n}\n\n/**\n * Internal helper which ensures that subarray exists under specified index.\n *\n * @param {Array[]} array An array to check.\n * @param {number} index An array index under the subarray should be checked.\n * @returns {Array}\n */\nfunction createNestedArrayIfNecessary(array, index) {\n  let subArray;\n\n  if (Array.isArray(array[index])) {\n    subArray = array[index];\n  } else {\n    subArray = [];\n    array[index] = subArray;\n  }\n\n  return subArray;\n}\n","import { fastInnerHTML } from '../../../helpers/dom/element';\n\n/**\n * The class generates the nested headers structure in the DOM and reads the column width for\n * each column. The hierarchy is built only for visible, non-hidden columns. Each time the\n * column is shown or hidden, the structure is rebuilt, and the width of the columns in the\n * map updated.\n *\n * @private\n */\nclass GhostTable {\n  /**\n   * Reference to the Handsontable instance.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * The function for retrieving the nested headers settings.\n   *\n   * @private\n   * @type {Function}\n   */\n  nestedHeaderSettingsGetter;\n  /**\n   * The value that holds information about the number of the nested header layers (header rows).\n   *\n   * @private\n   * @type {number}\n   */\n  layersCount = 0;\n  /**\n   * Temporary element created to get minimal headers widths.\n   *\n   * @private\n   * @type {*}\n   */\n  container;\n  /**\n   * PhysicalIndexToValueMap to keep and track of the columns' widths.\n   *\n   * @private\n   * @type {PhysicalIndexToValueMap}\n   */\n  widthsMap;\n\n  constructor(hot, nestedHeaderSettingsGetter) {\n    this.hot = hot;\n    this.nestedHeaderSettingsGetter = nestedHeaderSettingsGetter;\n    this.widthsMap = this.hot.columnIndexMapper\n      .createAndRegisterIndexMap('nestedHeaders.widthsMap', 'physicalIndexToValue');\n  }\n\n  /**\n   * Sets the number of nested headers layers count.\n   *\n   * @param {number} layersCount Total number of headers levels.\n   * @returns {GhostTable}\n   */\n  setLayersCount(layersCount) {\n    this.layersCount = layersCount;\n\n    return this;\n  }\n\n  /**\n   * Gets the column width based on the visual column index.\n   *\n   * @param {number} visualColumn Visual column index.\n   * @returns {number|null}\n   */\n  getWidth(visualColumn) {\n    return this.widthsMap.getValueAtIndex(this.hot.toPhysicalColumn(visualColumn));\n  }\n\n  /**\n   * Build cache of the headers widths.\n   */\n  buildWidthsMap() {\n    this.container = this.hot.rootDocument.createElement('div');\n    this.container.classList.add('handsontable', 'htGhostTable', 'htAutoSize');\n    this._buildGhostTable(this.container);\n    this.hot.rootDocument.body.appendChild(this.container);\n\n    const columns = this.container.querySelectorAll('tr:last-of-type th');\n    const maxColumns = columns.length;\n\n    this.widthsMap.clear();\n\n    for (let column = 0; column < maxColumns; column++) {\n      const visualColumnsIndex = this.hot.columnIndexMapper.getVisualFromRenderableIndex(column);\n      const physicalColumnIndex = this.hot.toPhysicalColumn(visualColumnsIndex);\n\n      this.widthsMap.setValueAtIndex(physicalColumnIndex, columns[column].offsetWidth);\n    }\n\n    this.container.parentNode.removeChild(this.container);\n    this.container = null;\n  }\n\n  /**\n   * Build temporary table for getting minimal columns widths.\n   *\n   * @private\n   * @param {HTMLElement} container The element where the DOM nodes are injected.\n   */\n  _buildGhostTable(container) {\n    const { rootDocument, columnIndexMapper } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const table = rootDocument.createElement('table');\n    const isDropdownEnabled = !!this.hot.getSettings().dropdownMenu;\n    const maxRenderedCols = columnIndexMapper.getRenderableIndexesLength();\n\n    for (let row = 0; row < this.layersCount; row++) {\n      const tr = rootDocument.createElement('tr');\n\n      for (let col = 0; col < maxRenderedCols; col++) {\n        let visualColumnsIndex = columnIndexMapper.getVisualFromRenderableIndex(col);\n\n        if (visualColumnsIndex === null) {\n          visualColumnsIndex = col;\n        }\n\n        const th = rootDocument.createElement('th');\n        const headerSettings = this.nestedHeaderSettingsGetter(row, visualColumnsIndex);\n\n        if (headerSettings && (!headerSettings.isPlaceholder || headerSettings.isHidden)) {\n          let label = headerSettings.label;\n\n          if (isDropdownEnabled) {\n            label += '<button class=\"changeType\"></button>';\n          }\n\n          fastInnerHTML(th, label);\n          th.colSpan = headerSettings.colspan;\n          tr.appendChild(th);\n        }\n      }\n\n      table.appendChild(tr);\n    }\n\n    fragment.appendChild(table);\n    container.appendChild(fragment);\n  }\n\n  /**\n   * Clear the widths cache.\n   */\n  clear() {\n    this.widthsMap.clear();\n    this.container = null;\n  }\n}\n\nexport default GhostTable;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  NestedRows,\n} from './nestedRows';\n","import { BasePlugin } from '../base';\nimport DataManager from './data/dataManager';\nimport CollapsingUI from './ui/collapsing';\nimport HeadersUI from './ui/headers';\nimport ContextMenuUI from './ui/contextMenu';\nimport { error } from '../../helpers/console';\nimport { isArrayOfObjects } from '../../helpers/data';\nimport { TrimmingMap } from '../../translations';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport RowMoveController from './utils/rowMoveController';\n\nimport './nestedRows.scss';\n\nexport const PLUGIN_KEY = 'nestedRows';\nexport const PLUGIN_PRIORITY = 300;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * Error message for the wrong data type error.\n */\nconst WRONG_DATA_TYPE_ERROR = 'The Nested Rows plugin requires an Array of Objects as a dataset to be' +\n  ' provided. The plugin has been disabled.';\n\n/**\n * @plugin NestedRows\n * @class NestedRows\n *\n * @description\n * Plugin responsible for displaying and operating on data sources with nested structures.\n */\nexport class NestedRows extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Reference to the DataManager instance.\n   *\n   * @private\n   * @type {object}\n   */\n  dataManager = null;\n  /**\n   * Reference to the HeadersUI instance.\n   *\n   * @private\n   * @type {object}\n   */\n  headersUI = null;\n  /**\n   * Map of skipped rows by plugin.\n   *\n   * @private\n   * @type {null|TrimmingMap}\n   */\n  collapsedRowsMap = null;\n  /**\n   * Allows skipping the render cycle if set as `true`.\n   *\n   * @type {boolean}\n   */\n  #skipRender = false;\n  /**\n   * Allows skipping the internal Core methods call if set as `true`.\n   *\n   * @type {boolean}\n   */\n  #skipCoreAPIModifiers = false;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link NestedRows#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.collapsedRowsMap = this.hot.rowIndexMapper.registerMap('nestedRows', new TrimmingMap());\n\n    this.dataManager = new DataManager(this, this.hot);\n    this.collapsingUI = new CollapsingUI(this, this.hot);\n    this.headersUI = new HeadersUI(this, this.hot);\n    this.contextMenuUI = new ContextMenuUI(this, this.hot);\n    this.rowMoveController = new RowMoveController(this);\n\n    this.addHook('afterInit', (...args) => this.#onAfterInit(...args));\n    this.addHook('beforeViewRender', (...args) => this.#onBeforeViewRender(...args));\n    this.addHook('modifyRowData', (...args) => this.onModifyRowData(...args));\n    this.addHook('modifySourceLength', (...args) => this.onModifySourceLength(...args));\n    this.addHook('beforeDataSplice', (...args) => this.onBeforeDataSplice(...args));\n    this.addHook('filterData', (...args) => this.#onFilterData(...args));\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#onAfterContextMenuDefaultOptions(...args));\n    this.addHook('afterGetRowHeader', (...args) => this.#onAfterGetRowHeader(...args));\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeRemoveRow', (...args) => this.#onBeforeRemoveRow(...args));\n    this.addHook('afterRemoveRow', (...args) => this.#onAfterRemoveRow(...args));\n    this.addHook('beforeAddChild', (...args) => this.#onBeforeAddChild(...args));\n    this.addHook('afterAddChild', (...args) => this.#onAfterAddChild(...args));\n    this.addHook('beforeDetachChild', (...args) => this.#onBeforeDetachChild(...args));\n    this.addHook('afterDetachChild', (...args) => this.#onAfterDetachChild(...args));\n    this.addHook('modifyRowHeaderWidth', (...args) => this.#onModifyRowHeaderWidth(...args));\n    this.addHook('afterCreateRow', (...args) => this.#onAfterCreateRow(...args));\n    this.addHook('beforeRowMove', (...args) => this.#onBeforeRowMove(...args));\n    this.addHook('beforeLoadData', data => this.#onBeforeLoadData(data));\n    this.addHook('beforeUpdateData', data => this.#onBeforeLoadData(data));\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap('nestedRows');\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`nestedRows`](@/api/options.md#nestedrows)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n\n    // We store a state of the data manager.\n    const currentSourceData = this.dataManager.getData();\n\n    this.enablePlugin();\n\n    // After enabling plugin previously stored data is restored.\n    this.dataManager.updateWithData(currentSourceData);\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Enter']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n          const row = this.collapsingUI.translateTrimmedRow(highlight.row);\n\n          if (this.collapsingUI.areChildrenCollapsed(row)) {\n            this.collapsingUI.expandChildren(row);\n          } else {\n            this.collapsingUI.collapseChildren(row);\n          }\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.getSelectedRangeLast()?.isSingle() &&\n            this.hot.selection.isCellVisible(highlight) && highlight.col === -1 && highlight.row >= 0;\n        },\n        group: SHORTCUTS_GROUP,\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * `beforeRowMove` hook callback.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n   *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n   *   [documentation](@/guides/rows/row-summary/row-summary.md).\n   * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n   *   are going to drop the moved elements. To check visualization of drop index please take a look at\n   *   [documentation](@/guides/rows/row-summary/row-summary.md).\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  #onBeforeRowMove(rows, finalIndex, dropIndex, movePossible) {\n    return this.rowMoveController.onBeforeRowMove(rows, finalIndex, dropIndex, movePossible);\n  }\n\n  /**\n   * Enable the modify hook skipping flag - allows retrieving the data from Handsontable without this plugin's\n   * modifications.\n   *\n   * @private\n   */\n  disableCoreAPIModifiers() {\n    this.#skipCoreAPIModifiers = true;\n  }\n\n  /**\n   * Disable the modify hook skipping flag.\n   *\n   * @private\n   */\n  enableCoreAPIModifiers() {\n    this.#skipCoreAPIModifiers = false;\n  }\n\n  /**\n   * `beforeOnCellMousedown` hook callback.\n   *\n   * @param {MouseEvent} event Mousedown event.\n   * @param {object} coords Cell coords.\n   * @param {HTMLElement} TD Clicked cell.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD) {\n    this.collapsingUI.toggleState(event, coords, TD);\n  }\n\n  /**\n   * The modifyRowData hook callback.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @returns {boolean}\n   */\n  onModifyRowData(row) {\n    if (this.#skipCoreAPIModifiers) {\n      return;\n    }\n\n    return this.dataManager.getDataObject(row);\n  }\n\n  /**\n   * Modify the source data length to match the length of the nested structure.\n   *\n   * @private\n   * @returns {number}\n   */\n  onModifySourceLength() {\n    if (this.#skipCoreAPIModifiers) {\n      return;\n    }\n\n    return this.dataManager.countAllRows();\n  }\n\n  /**\n   * @private\n   * @param {number} index The index where the data was spliced.\n   * @param {number} amount An amount of items to remove.\n   * @param {object} element An element to add.\n   * @returns {boolean}\n   */\n  onBeforeDataSplice(index, amount, element) {\n    if (this.#skipCoreAPIModifiers || this.dataManager.isRowHighestLevel(index)) {\n      return true;\n    }\n\n    this.dataManager.spliceData(index, amount, element);\n\n    return false;\n  }\n\n  /**\n   * Provide custom source data filtering. It's handled by core method and replaces the native filtering.\n   *\n   * @param {number} index The index where the data filtering starts.\n   * @param {number} amount An amount of rows which filtering applies to.\n   * @param {number} physicalRows Physical row indexes.\n   * @returns {Array}\n   */\n  #onFilterData(index, amount, physicalRows) {\n    this.collapsingUI.collapsedRowsStash.stash();\n    this.collapsingUI.collapsedRowsStash.trimStash(physicalRows[0], amount);\n    this.collapsingUI.collapsedRowsStash.shiftStash(physicalRows[0], null, (-1) * amount);\n    this.dataManager.filterData(index, amount, physicalRows);\n\n    this.#skipRender = true;\n\n    return this.dataManager.getData().slice(); // Data contains reference sometimes.\n  }\n\n  /**\n   * `afterContextMenuDefaultOptions` hook callback.\n   *\n   * @param {object} defaultOptions The default context menu items order.\n   * @returns {boolean}\n   */\n  #onAfterContextMenuDefaultOptions(defaultOptions) {\n    return this.contextMenuUI.appendOptions(defaultOptions);\n  }\n\n  /**\n   * `afterGetRowHeader` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {HTMLElement} TH Row header element.\n   */\n  #onAfterGetRowHeader(row, TH) {\n    this.headersUI.appendLevelIndicators(row, TH);\n  }\n\n  /**\n   * `modifyRowHeaderWidth` hook callback.\n   *\n   * @param {number} rowHeaderWidth The initial row header width(s).\n   * @returns {number}\n   */\n  #onModifyRowHeaderWidth(rowHeaderWidth) {\n    return Math.max(this.headersUI.rowHeaderWidthCache, rowHeaderWidth);\n  }\n\n  /**\n   * `onAfterRemoveRow` hook callback.\n   *\n   * @param {number} index Removed row.\n   * @param {number} amount Amount of removed rows.\n   * @param {Array} logicRows An array of the removed physical rows.\n   * @param {string} source Source of action.\n   */\n  #onAfterRemoveRow(index, amount, logicRows, source) {\n    if (source === this.pluginName) {\n      return;\n    }\n\n    this.hot._registerTimeout(() => {\n      this.#skipRender = false;\n      this.headersUI.updateRowHeaderWidth();\n      this.collapsingUI.collapsedRowsStash.applyStash();\n    });\n  }\n\n  /**\n   * Callback for the `beforeRemoveRow` change list of removed physical indexes by reference. Removing parent node\n   * has effect in removing children nodes.\n   *\n   * @param {number} index Visual index of starter row.\n   * @param {number} amount Amount of rows to be removed.\n   * @param {Array} physicalRows List of physical indexes.\n   */\n  #onBeforeRemoveRow(index, amount, physicalRows) {\n    const modifiedPhysicalRows = Array.from(physicalRows.reduce((removedRows, physicalIndex) => {\n      if (this.dataManager.isParent(physicalIndex)) {\n        const children = this.dataManager.getDataObject(physicalIndex).__children;\n\n        // Preserve a parent in the list of removed rows.\n        removedRows.add(physicalIndex);\n\n        if (Array.isArray(children)) {\n          // Add a children to the list of removed rows.\n          children.forEach(child => removedRows.add(this.dataManager.getRowIndex(child)));\n        }\n\n        return removedRows;\n      }\n\n      // Don't modify list of removed rows when already checked element isn't a parent.\n      return removedRows.add(physicalIndex);\n    }, new Set()));\n\n    // Modifying hook's argument by the reference.\n    physicalRows.length = 0;\n    physicalRows.push(...modifiedPhysicalRows);\n  }\n\n  /**\n   * `beforeAddChild` hook callback.\n   */\n  #onBeforeAddChild() {\n    this.collapsingUI.collapsedRowsStash.stash();\n  }\n\n  /**\n   * `afterAddChild` hook callback.\n   *\n   * @param {object} parent Parent element.\n   * @param {object} element New child element.\n   */\n  #onAfterAddChild(parent, element) {\n    this.collapsingUI.collapsedRowsStash.shiftStash(this.dataManager.getRowIndex(element));\n    this.collapsingUI.collapsedRowsStash.applyStash();\n\n    this.headersUI.updateRowHeaderWidth();\n  }\n\n  /**\n   * `beforeDetachChild` hook callback.\n   */\n  #onBeforeDetachChild() {\n    this.collapsingUI.collapsedRowsStash.stash();\n  }\n\n  /**\n   * `afterDetachChild` hook callback.\n   *\n   * @param {object} parent Parent element.\n   * @param {object} element New child element.\n   * @param {number} finalElementRowIndex The final row index of the detached element.\n   */\n  #onAfterDetachChild(parent, element, finalElementRowIndex) {\n    this.collapsingUI.collapsedRowsStash.shiftStash(finalElementRowIndex, null, -1);\n    this.collapsingUI.collapsedRowsStash.applyStash();\n\n    this.headersUI.updateRowHeaderWidth();\n  }\n\n  /**\n   * `afterCreateRow` hook callback.\n   */\n  #onAfterCreateRow() {\n    this.dataManager.rewriteCache();\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.headersUI.updateRowHeaderWidth();\n  }\n\n  /**\n   * `beforeViewRender` hook callback.\n   *\n   * @param {boolean} force Indicates if the render call was triggered by a change of settings or data.\n   * @param {object} skipRender An object, holder for skipRender functionality.\n   */\n  #onBeforeViewRender(force, skipRender) {\n    if (this.#skipRender) {\n      skipRender.skipRender = true;\n    }\n  }\n\n  /**\n   * `beforeLoadData` hook callback.\n   *\n   * @param {Array} data The source data.\n   */\n  #onBeforeLoadData(data) {\n    if (!isArrayOfObjects(data)) {\n      error(WRONG_DATA_TYPE_ERROR);\n\n      this.hot.getSettings()[PLUGIN_KEY] = false;\n      this.disablePlugin();\n\n      return;\n    }\n\n    this.dataManager.setData(data);\n    this.dataManager.rewriteCache();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { rangeEach } from '../../../helpers/number';\nimport { objectEach } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\n\n/**\n * Class responsible for making data operations.\n *\n * @private\n */\nclass DataManager {\n  /**\n   * Main Handsontable instance reference.\n   *\n   * @type {object}\n   */\n  hot;\n  /**\n   * Reference to the source data object.\n   *\n   * @type {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n   */\n  data = null;\n  /**\n   * Reference to the NestedRows plugin.\n   *\n   * @type {object}\n   */\n  plugin;\n  /**\n   * Map of row object parents.\n   *\n   * @type {WeakMap}\n   */\n  parentReference = new WeakMap();\n  /**\n   * Nested structure cache.\n   *\n   * @type {object}\n   */\n  cache = {\n    levels: [],\n    levelCount: 0,\n    rows: [],\n    nodeInfo: new WeakMap()\n  };\n\n  constructor(nestedRowsPlugin, hotInstance) {\n    this.hot = hotInstance;\n    this.plugin = nestedRowsPlugin;\n  }\n\n  /**\n   * Set the data for the manager.\n   *\n   * @param {Handsontable.CellValue[][]|Handsontable.RowObject[]} data Data for the manager.\n   */\n  setData(data) {\n    this.data = data;\n  }\n\n  /**\n   * Get the data cached in the manager.\n   *\n   * @returns {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n   */\n  getData() {\n    return this.data;\n  }\n\n  /**\n   * Load the \"raw\" source data, without NestedRows' modifications.\n   *\n   * @returns {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n   */\n  getRawSourceData() {\n    let rawSourceData = null;\n\n    this.plugin.disableCoreAPIModifiers();\n    rawSourceData = this.hot.getSourceData();\n    this.plugin.enableCoreAPIModifiers();\n\n    return rawSourceData;\n  }\n\n  /**\n   * Update the Data Manager with new data and refresh cache.\n   *\n   * @param {Handsontable.CellValue[][]|Handsontable.RowObject[]} data Data for the manager.\n   */\n  updateWithData(data) {\n    this.setData(data);\n    this.rewriteCache();\n  }\n\n  /**\n   * Rewrite the nested structure cache.\n   *\n   * @private\n   */\n  rewriteCache() {\n    this.cache = {\n      levels: [],\n      levelCount: 0,\n      rows: [],\n      nodeInfo: new WeakMap()\n    };\n\n    rangeEach(0, this.data.length - 1, (i) => {\n      this.cacheNode(this.data[i], 0, null);\n    });\n  }\n\n  /**\n   * Cache a data node.\n   *\n   * @private\n   * @param {object} node Node to cache.\n   * @param {number} level Level of the node.\n   * @param {object} parent Parent of the node.\n   */\n  cacheNode(node, level, parent) {\n    if (!this.cache.levels[level]) {\n      this.cache.levels[level] = [];\n      this.cache.levelCount += 1;\n    }\n    this.cache.levels[level].push(node);\n    this.cache.rows.push(node);\n    this.cache.nodeInfo.set(node, {\n      parent,\n      row: this.cache.rows.length - 1,\n      level\n    });\n\n    if (this.hasChildren(node)) {\n      arrayEach(node.__children, (elem) => {\n        this.cacheNode(elem, level + 1, node);\n      });\n    }\n  }\n\n  /**\n   * Get the date for the provided visual row number.\n   *\n   * @param {number} row Row index.\n   * @returns {object}\n   */\n  getDataObject(row) {\n    return row === null || row === undefined ? null : this.cache.rows[row];\n  }\n\n  /**\n   * Read the row tree in search for a specific row index or row object.\n   *\n   * @private\n   * @param {object} parent The initial parent object.\n   * @param {number} readCount Number of read nodes.\n   * @param {number} neededIndex The row index we search for.\n   * @param {object} neededObject The row object we search for.\n   * @returns {number|object}\n   */\n  readTreeNodes(parent, readCount, neededIndex, neededObject) {\n    let rootLevel = false;\n    let readNodesCount = readCount;\n\n    if (isNaN(readNodesCount) && readNodesCount.end) {\n      return readNodesCount;\n    }\n\n    let parentObj = parent;\n\n    if (!parentObj) {\n      parentObj = {\n        __children: this.data\n      };\n      rootLevel = true;\n      readNodesCount -= 1;\n    }\n\n    if (neededIndex !== null && neededIndex !== undefined && readNodesCount === neededIndex) {\n      return { result: parentObj, end: true };\n    }\n\n    if (neededObject !== null && neededObject !== undefined && parentObj === neededObject) {\n      return { result: readNodesCount, end: true };\n    }\n\n    readNodesCount += 1;\n\n    if (parentObj.__children) {\n      arrayEach(parentObj.__children, (val) => {\n\n        this.parentReference.set(val, rootLevel ? null : parentObj);\n\n        readNodesCount = this.readTreeNodes(val, readNodesCount, neededIndex, neededObject);\n\n        if (isNaN(readNodesCount) && readNodesCount.end) {\n          return false;\n        }\n      });\n    }\n\n    return readNodesCount;\n  }\n\n  /**\n   * Mock a parent node.\n   *\n   * @private\n   * @returns {*}\n   */\n  mockParent() {\n    const fakeParent = this.mockNode();\n\n    fakeParent.__children = this.data;\n\n    return fakeParent;\n  }\n\n  /**\n   * Mock a data node.\n   *\n   * @private\n   * @returns {{}}\n   */\n  mockNode() {\n    const fakeNode = {};\n\n    objectEach(this.data[0], (val, key) => {\n      fakeNode[key] = null;\n    });\n\n    return fakeNode;\n  }\n\n  /**\n   * Get the row index for the provided row object.\n   *\n   * @param {object} rowObj The row object.\n   * @returns {number} Row index.\n   */\n  getRowIndex(rowObj) {\n    return rowObj === null || rowObj === undefined ? null : this.cache.nodeInfo.get(rowObj).row;\n  }\n\n  /**\n   * Get the index of the provided row index/row object within its parent.\n   *\n   * @param {number|object} row Row index / row object.\n   * @returns {number}\n   */\n  getRowIndexWithinParent(row) {\n    let rowObj = null;\n\n    if (isNaN(row)) {\n      rowObj = row;\n    } else {\n      rowObj = this.getDataObject(row);\n    }\n\n    const parent = this.getRowParent(row);\n\n    if (parent === null || parent === undefined) {\n      return this.data.indexOf(rowObj);\n    }\n\n    return parent.__children.indexOf(rowObj);\n  }\n\n  /**\n   * Count all rows (including all parents and children).\n   *\n   * @returns {number}\n   */\n  countAllRows() {\n    const rootNodeMock = {\n      __children: this.data\n    };\n\n    return this.countChildren(rootNodeMock);\n  }\n\n  /**\n   * Count children of the provided parent.\n   *\n   * @param {object|number} parent Parent node.\n   * @returns {number} Children count.\n   */\n  countChildren(parent) {\n    let rowCount = 0;\n    let parentNode = parent;\n\n    if (!isNaN(parentNode)) {\n      parentNode = this.getDataObject(parentNode);\n    }\n\n    if (!parentNode || !parentNode.__children) {\n      return 0;\n    }\n\n    arrayEach(parentNode.__children, (elem) => {\n      rowCount += 1;\n\n      if (elem.__children) {\n        rowCount += this.countChildren(elem);\n      }\n    });\n\n    return rowCount;\n  }\n\n  /**\n   * Get the parent of the row at the provided index.\n   *\n   * @param {number|object} row Physical row index.\n   * @returns {object}\n   */\n  getRowParent(row) {\n    let rowObject;\n\n    if (isNaN(row)) {\n      rowObject = row;\n    } else {\n      rowObject = this.getDataObject(row);\n    }\n\n    return this.getRowObjectParent(rowObject);\n  }\n\n  /**\n   * Get the parent of the provided row object.\n   *\n   * @private\n   * @param {object} rowObject The row object (tree node).\n   * @returns {object|null}\n   */\n  getRowObjectParent(rowObject) {\n    if (!rowObject || typeof rowObject !== 'object') {\n      return null;\n    }\n\n    return this.cache.nodeInfo.get(rowObject).parent;\n  }\n\n  /**\n   * Get the nesting level for the row with the provided row index.\n   *\n   * @param {number} row Row index.\n   * @returns {number|null} Row level or null, when row doesn't exist.\n   */\n  getRowLevel(row) {\n    let rowObject = null;\n\n    if (isNaN(row)) {\n      rowObject = row;\n    } else {\n      rowObject = this.getDataObject(row);\n    }\n\n    return rowObject ? this.getRowObjectLevel(rowObject) : null;\n  }\n\n  /**\n   * Get the nesting level for the row with the provided row index.\n   *\n   * @private\n   * @param {object} rowObject Row object.\n   * @returns {number} Row level.\n   */\n  getRowObjectLevel(rowObject) {\n    return rowObject === null || rowObject === undefined ? null : this.cache.nodeInfo.get(rowObject).level;\n  }\n\n  /**\n   * Check if the provided row/row element has children.\n   *\n   * @param {number|object} row Row number or row element.\n   * @returns {boolean}\n   */\n  hasChildren(row) {\n    let rowObj = row;\n\n    if (!isNaN(rowObj)) {\n      rowObj = this.getDataObject(rowObj);\n    }\n\n    return !!(rowObj.__children && rowObj.__children.length);\n  }\n\n  /**\n   * Returns `true` if the row at the provided index has a parent.\n   *\n   * @param {number} index Row index.\n   * @returns {boolean} `true` if the row at the provided index has a parent, `false` otherwise.\n   */\n  isChild(index) {\n    return this.getRowParent(index) !== null;\n  }\n\n  /**\n   * Get child at a provided index from the parent element.\n   *\n   * @param {object} parent The parent row object.\n   * @param {number} index Index of the child element to be retrieved.\n   * @returns {object|null} The child element or `null` if the child doesn't exist.\n   */\n  getChild(parent, index) {\n    return parent.__children?.[index] || null;\n  }\n\n  /**\n   * Return `true` of the row at the provided index is located at the topmost level.\n   *\n   * @param {number} index Row index.\n   * @returns {boolean} `true` of the row at the provided index is located at the topmost level, `false` otherwise.\n   */\n  isRowHighestLevel(index) {\n    return !this.isChild(index);\n  }\n\n  /**\n   * Return `true` if the provided row index / row object represents a parent in the nested structure.\n   *\n   * @param {number|object} row Row index / row object.\n   * @returns {boolean} `true` if the row is a parent, `false` otherwise.\n   */\n  isParent(row) {\n    let rowObj = row;\n\n    if (!isNaN(rowObj)) {\n      rowObj = this.getDataObject(rowObj);\n    }\n\n    return rowObj && (!!rowObj.__children && rowObj.__children?.length !== 0);\n  }\n\n  /**\n   * Add a child to the provided parent. It's optional to add a row object as the \"element\".\n   *\n   * @param {object} parent The parent row object.\n   * @param {object} [element] The element to add as a child.\n   */\n  addChild(parent, element) {\n    let childElement = element;\n\n    this.hot.runHooks('beforeAddChild', parent, childElement);\n\n    let parentIndex = null;\n\n    if (parent) {\n      parentIndex = this.getRowIndex(parent);\n    }\n\n    this.hot.runHooks('beforeCreateRow', parentIndex + this.countChildren(parent) + 1, 1);\n    let functionalParent = parent;\n\n    if (!parent) {\n      functionalParent = this.mockParent();\n    }\n    if (!functionalParent.__children) {\n      functionalParent.__children = [];\n    }\n\n    if (!childElement) {\n      childElement = this.mockNode();\n    }\n\n    functionalParent.__children.push(childElement);\n\n    this.rewriteCache();\n\n    const newRowIndex = this.getRowIndex(childElement);\n\n    this.hot.rowIndexMapper.insertIndexes(newRowIndex, 1);\n\n    this.hot.runHooks('afterCreateRow', newRowIndex, 1);\n    this.hot.runHooks('afterAddChild', parent, childElement);\n  }\n\n  /**\n   * Add a child node to the provided parent at a specified index.\n   *\n   * @param {object} parent Parent node.\n   * @param {number} index Index to insert the child element at.\n   * @param {object} [element] Element (node) to insert.\n   */\n  addChildAtIndex(parent, index, element) {\n    let childElement = element;\n    let flattenedIndex;\n\n    if (!childElement) {\n      childElement = this.mockNode();\n    }\n\n    this.hot.runHooks('beforeAddChild', parent, childElement, index);\n\n    if (parent) {\n      const parentIndex = this.getRowIndex(parent);\n      const finalChildIndex = parentIndex + index + 1;\n\n      this.hot.runHooks('beforeCreateRow', finalChildIndex, 1);\n\n      parent.__children.splice(index, null, childElement);\n\n      this.rewriteCache();\n\n      this.plugin.disableCoreAPIModifiers();\n\n      this.hot.setSourceDataAtCell(\n        this.getRowIndexWithinParent(parent),\n        '__children',\n        parent.__children,\n        'NestedRows.addChildAtIndex'\n      );\n\n      this.hot.rowIndexMapper.insertIndexes(finalChildIndex, 1);\n\n      this.plugin.enableCoreAPIModifiers();\n\n      this.hot.runHooks('afterCreateRow', finalChildIndex, 1);\n\n      flattenedIndex = finalChildIndex;\n\n    } else {\n      this.plugin.disableCoreAPIModifiers();\n      this.hot.alter('insert_row_above', index, 1, 'NestedRows.addChildAtIndex');\n      this.plugin.enableCoreAPIModifiers();\n\n      flattenedIndex = this.getRowIndex(this.data[index]);\n    }\n\n    // Workaround for refreshing cache losing the reference to the mocked row.\n    childElement = this.getDataObject(flattenedIndex);\n\n    this.hot.runHooks('afterAddChild', parent, childElement, index);\n  }\n\n  /**\n   * Add a sibling element at the specified index.\n   *\n   * @param {number} index New element sibling's index.\n   * @param {('above'|'below')} where Direction in which the sibling is to be created.\n   */\n  addSibling(index, where = 'below') {\n    const translatedIndex = this.translateTrimmedRow(index);\n    const parent = this.getRowParent(translatedIndex);\n    const indexWithinParent = this.getRowIndexWithinParent(translatedIndex);\n\n    switch (where) {\n      case 'below':\n        this.addChildAtIndex(parent, indexWithinParent + 1, null);\n        break;\n      case 'above':\n        this.addChildAtIndex(parent, indexWithinParent, null);\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Detach the provided element from its parent and add it right after it.\n   *\n   * @param {object|Array} elements Row object or an array of selected coordinates.\n   * @param {boolean} [forceRender=true] If true (default), it triggers render after finished.\n   */\n  detachFromParent(elements, forceRender = true) {\n    let element = null;\n    const rowObjects = [];\n\n    if (Array.isArray(elements)) {\n      rangeEach(elements[0], elements[2], (i) => {\n        const translatedIndex = this.translateTrimmedRow(i);\n\n        rowObjects.push(this.getDataObject(translatedIndex));\n      });\n\n      rangeEach(0, rowObjects.length - 2, (i) => {\n        this.detachFromParent(rowObjects[i], false);\n      });\n\n      element = rowObjects[rowObjects.length - 1];\n    } else {\n      element = elements;\n    }\n\n    const childRowIndex = this.getRowIndex(element);\n    const childCount = this.countChildren(element);\n    const indexWithinParent = this.getRowIndexWithinParent(element);\n    const parent = this.getRowParent(element);\n    const grandparent = this.getRowParent(parent);\n    const grandparentRowIndex = this.getRowIndex(grandparent);\n    let movedElementRowIndex = null;\n\n    this.hot.runHooks('beforeDetachChild', parent, element);\n\n    if (indexWithinParent !== null && indexWithinParent !== undefined) {\n      const removedRowIndexes = Array.from(\n        new Array(childRowIndex + childCount + 1).keys()\n      ).splice(-1 * (childCount + 1));\n\n      this.hot.runHooks(\n        'beforeRemoveRow',\n        childRowIndex,\n        childCount + 1,\n        removedRowIndexes,\n        this.plugin.pluginName\n      );\n\n      parent.__children.splice(indexWithinParent, 1);\n\n      this.rewriteCache();\n\n      this.hot.runHooks(\n        'afterRemoveRow',\n        childRowIndex,\n        childCount + 1,\n        removedRowIndexes,\n        this.plugin.pluginName\n      );\n\n      if (grandparent) {\n        movedElementRowIndex = grandparentRowIndex + this.countChildren(grandparent);\n\n        const lastGrandparentChild = this.getChild(grandparent, this.countChildren(grandparent) - 1);\n        const lastGrandparentChildIndex = this.getRowIndex(lastGrandparentChild);\n\n        this.hot.runHooks('beforeCreateRow', lastGrandparentChildIndex + 1, childCount + 1, this.plugin.pluginName);\n\n        grandparent.__children.push(element);\n\n      } else {\n        movedElementRowIndex = this.hot.countRows() + 1;\n        this.hot.runHooks('beforeCreateRow', movedElementRowIndex - 2, childCount + 1, this.plugin.pluginName);\n\n        this.data.push(element);\n      }\n    }\n\n    this.rewriteCache();\n\n    this.hot.runHooks('afterCreateRow', movedElementRowIndex - 2, childCount + 1, this.plugin.pluginName);\n\n    this.hot.runHooks('afterDetachChild', parent, element, this.getRowIndex(element));\n\n    if (forceRender) {\n      this.hot.render();\n    }\n  }\n\n  /**\n   * Filter the data by the `logicRows` array.\n   *\n   * @private\n   * @param {number} index Index of the first row to remove.\n   * @param {number} amount Number of elements to remove.\n   * @param {Array} logicRows Array of indexes to remove.\n   */\n  filterData(index, amount, logicRows) {\n    // TODO: why are the first 2 arguments not used?\n\n    const elementsToRemove = [];\n\n    arrayEach(logicRows, (elem) => {\n      elementsToRemove.push(this.getDataObject(elem));\n    });\n\n    arrayEach(elementsToRemove, (elem) => {\n      const indexWithinParent = this.getRowIndexWithinParent(elem);\n      const tempParent = this.getRowParent(elem);\n\n      if (tempParent === null) {\n        this.data.splice(indexWithinParent, 1);\n      } else {\n        tempParent.__children.splice(indexWithinParent, 1);\n      }\n    });\n\n    this.rewriteCache();\n  }\n\n  /**\n   * Used to splice the source data. Needed to properly modify the nested structure, which wouldn't work with the\n   * default script.\n   *\n   * @private\n   * @param {number} index Physical index of the element at the splice beginning.\n   * @param {number} amount Number of elements to be removed.\n   * @param {object[]} elements Array of row objects to add.\n   */\n  spliceData(index, amount, elements) {\n    const previousElement = this.getDataObject(index - 1);\n    let newRowParent = null;\n    let indexWithinParent = index;\n\n    if (previousElement && previousElement.__children && previousElement.__children.length === 0) {\n      newRowParent = previousElement;\n      indexWithinParent = 0;\n\n    } else if (index < this.countAllRows()) {\n      newRowParent = this.getRowParent(index);\n      indexWithinParent = this.getRowIndexWithinParent(index);\n    }\n\n    if (newRowParent) {\n      if (elements) {\n        newRowParent.__children.splice(indexWithinParent, amount, ...elements);\n\n      } else {\n        newRowParent.__children.splice(indexWithinParent, amount);\n      }\n\n    } else if (elements) {\n      this.data.splice(indexWithinParent, amount, ...elements);\n\n    } else {\n      this.data.splice(indexWithinParent, amount);\n    }\n\n    this.rewriteCache();\n  }\n\n  /**\n   * Update the `__children` key of the upmost parent of the provided row object.\n   *\n   * @private\n   * @param {object} rowElement Row object.\n   */\n  syncRowWithRawSource(rowElement) {\n    let upmostParent = rowElement;\n    let tempParent = null;\n\n    do {\n      tempParent = this.getRowParent(tempParent);\n\n      if (tempParent !== null) {\n        upmostParent = tempParent;\n      }\n\n    } while (tempParent !== null);\n\n    this.plugin.disableCoreAPIModifiers();\n    this.hot.setSourceDataAtCell(\n      this.getRowIndex(upmostParent),\n      '__children',\n      upmostParent.__children,\n      'NestedRows.syncRowWithRawSource',\n    );\n    this.plugin.enableCoreAPIModifiers();\n  }\n\n  /* eslint-disable jsdoc/require-param */\n  /**\n   * Move a single row.\n   *\n   * @param {number} fromIndex Index of the row to be moved.\n   * @param {number} toIndex Index of the destination.\n   * @param {boolean} moveToCollapsed `true` if moving a row to a collapsed parent.\n   * @param {boolean} moveToLastChild `true` if moving a row to be a last child of the new parent.\n   */\n\n  /* eslint-enable jsdoc/require-param */\n  moveRow(fromIndex, toIndex, moveToCollapsed, moveToLastChild) {\n    const moveToLastRow = toIndex === this.hot.countRows();\n    const fromParent = this.getRowParent(fromIndex);\n    const indexInFromParent = this.getRowIndexWithinParent(fromIndex);\n    const elemToMove = fromParent.__children.slice(indexInFromParent, indexInFromParent + 1);\n    const movingUp = fromIndex > toIndex;\n    let toParent = moveToLastRow ? this.getRowParent(toIndex - 1) : this.getRowParent(toIndex);\n\n    if (toParent === null || toParent === undefined) {\n      toParent = this.getRowParent(toIndex - 1);\n    }\n\n    if (toParent === null || toParent === undefined) {\n      toParent = this.getDataObject(toIndex - 1);\n    }\n\n    if (!toParent) {\n      toParent = this.getDataObject(toIndex);\n      toParent.__children = [];\n\n    } else if (!toParent.__children) {\n      toParent.__children = [];\n    }\n\n    const indexInTargetParent = moveToLastRow || moveToCollapsed || moveToLastChild ?\n      toParent.__children.length : this.getRowIndexWithinParent(toIndex);\n    const sameParent = fromParent === toParent;\n\n    toParent.__children.splice(indexInTargetParent, 0, elemToMove[0]);\n    fromParent.__children.splice(indexInFromParent + (movingUp && sameParent ? 1 : 0), 1);\n\n    // Sync the changes in the cached data with the actual data stored in HOT.\n    this.syncRowWithRawSource(fromParent);\n\n    if (!sameParent) {\n      this.syncRowWithRawSource(toParent);\n    }\n  }\n\n  /**\n   * Translate the visual row index to the physical index, taking into consideration the state of collapsed rows.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  translateTrimmedRow(row) {\n    if (this.plugin.collapsingUI) {\n      return this.plugin.collapsingUI.translateTrimmedRow(row);\n    }\n\n    return row;\n  }\n\n  /**\n   * Translate the physical row index to the visual index, taking into consideration the state of collapsed rows.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  untranslateTrimmedRow(row) {\n    if (this.plugin.collapsingUI) {\n      return this.plugin.collapsingUI.untranslateTrimmedRow(row);\n    }\n\n    return row;\n  }\n}\n\nexport default DataManager;\n","import { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { arrayEach } from '../../../helpers/array';\nimport { rangeEach } from '../../../helpers/number';\nimport { hasClass } from '../../../helpers/dom/element';\nimport BaseUI from './_base';\nimport HeadersUI from './headers';\n\n/**\n * Class responsible for the UI for collapsing and expanding groups.\n *\n * @private\n * @class\n * @augments BaseUI\n */\nclass CollapsingUI extends BaseUI {\n  constructor(nestedRowsPlugin, hotInstance) {\n    super(nestedRowsPlugin, hotInstance);\n\n    /**\n     * Reference to the TrimRows plugin.\n     */\n    this.dataManager = this.plugin.dataManager;\n    this.collapsedRows = [];\n    this.collapsedRowsStash = {\n      stash: (forceRender = false) => {\n        this.lastCollapsedRows = this.collapsedRows.slice(0);\n\n        // Workaround for wrong indexes being set in the trimRows plugin\n        this.expandMultipleChildren(this.lastCollapsedRows, forceRender);\n      },\n      shiftStash: (baseIndex, targetIndex, delta = 1) => {\n        if (targetIndex === null || targetIndex === undefined) {\n          targetIndex = Infinity;\n        }\n\n        arrayEach(this.lastCollapsedRows, (elem, i) => {\n          if (elem >= baseIndex && elem < targetIndex) {\n            this.lastCollapsedRows[i] = elem + delta;\n          }\n        });\n      },\n      applyStash: (forceRender = true) => {\n        this.collapseMultipleChildren(this.lastCollapsedRows, forceRender);\n        this.lastCollapsedRows = undefined;\n      },\n      trimStash: (realElementIndex, amount) => {\n        rangeEach(realElementIndex, realElementIndex + amount - 1, (i) => {\n          const indexOfElement = this.lastCollapsedRows.indexOf(i);\n\n          if (indexOfElement > -1) {\n            this.lastCollapsedRows.splice(indexOfElement, 1);\n          }\n        });\n      }\n    };\n  }\n\n  /**\n   * Collapse the children of the row passed as an argument.\n   *\n   * @param {number|object} row The parent row.\n   * @param {boolean} [forceRender=true] Whether to render the table after the function ends.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   * @returns {Array}\n   */\n  collapseChildren(row, forceRender = true, doTrimming = true) {\n    const rowsToCollapse = [];\n    let rowObject = null;\n    let rowIndex = null;\n    let rowsToTrim = null;\n\n    if (isNaN(row)) {\n      rowObject = row;\n      rowIndex = this.dataManager.getRowIndex(rowObject);\n    } else {\n      rowObject = this.dataManager.getDataObject(row);\n      rowIndex = row;\n    }\n\n    if (this.dataManager.hasChildren(rowObject)) {\n      arrayEach(rowObject.__children, (elem) => {\n        rowsToCollapse.push(this.dataManager.getRowIndex(elem));\n      });\n    }\n\n    rowsToTrim = this.collapseRows(rowsToCollapse, true, false);\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n\n    if (this.collapsedRows.indexOf(rowIndex) === -1) {\n      this.collapsedRows.push(rowIndex);\n    }\n\n    return rowsToTrim;\n  }\n\n  /**\n   * Collapse multiple children.\n   *\n   * @param {Array} rows Rows to collapse (including their children).\n   * @param {boolean} [forceRender=true] `true` if the table should be rendered after finishing the function.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   */\n  collapseMultipleChildren(rows, forceRender = true, doTrimming = true) {\n    const rowsToTrim = [];\n\n    arrayEach(rows, (elem) => {\n      rowsToTrim.push(...this.collapseChildren(elem, false, false));\n    });\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n  }\n\n  /**\n   * Collapse a single row.\n   *\n   * @param {number} rowIndex Index of the row to collapse.\n   * @param {boolean} [recursive=true] `true` if it should collapse the row's children.\n   */\n  collapseRow(rowIndex, recursive = true) {\n    this.collapseRows([rowIndex], recursive);\n  }\n\n  /**\n   * Collapse multiple rows.\n   *\n   * @param {Array} rowIndexes Array of row indexes to collapse.\n   * @param {boolean} [recursive=true] `true` if it should collapse the rows' children.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   * @returns {Array} Rows prepared for trimming (or trimmed, if doTrimming == true).\n   */\n  collapseRows(rowIndexes, recursive = true, doTrimming = false) {\n    const rowsToTrim = [];\n\n    arrayEach(rowIndexes, (elem) => {\n      rowsToTrim.push(elem);\n\n      if (recursive) {\n        this.collapseChildRows(elem, rowsToTrim);\n      }\n    });\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n\n    return rowsToTrim;\n  }\n\n  /**\n   * Collapse child rows of the row at the provided index.\n   *\n   * @param {number} parentIndex Index of the parent node.\n   * @param {Array} [rowsToTrim=[]] Array of rows to trim. Defaults to an empty array.\n   * @param {boolean} [recursive] `true` if the collapsing process should be recursive.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   */\n  collapseChildRows(parentIndex, rowsToTrim = [], recursive, doTrimming = false) {\n    if (this.dataManager.hasChildren(parentIndex)) {\n      const parentObject = this.dataManager.getDataObject(parentIndex);\n\n      arrayEach(parentObject.__children, (elem) => {\n        const elemIndex = this.dataManager.getRowIndex(elem);\n\n        rowsToTrim.push(elemIndex);\n        this.collapseChildRows(elemIndex, rowsToTrim);\n      });\n    }\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n  }\n\n  /**\n   * Expand a single row.\n   *\n   * @param {number} rowIndex Index of the row to expand.\n   * @param {boolean} [recursive=true] `true` if it should expand the row's children recursively.\n   */\n  expandRow(rowIndex, recursive = true) {\n    this.expandRows([rowIndex], recursive);\n  }\n\n  /**\n   * Expand multiple rows.\n   *\n   * @param {Array} rowIndexes Array of indexes of the rows to expand.\n   * @param {boolean} [recursive=true] `true` if it should expand the rows' children recursively.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   * @returns {Array} Array of row indexes to be untrimmed.\n   */\n  expandRows(rowIndexes, recursive = true, doTrimming = false) {\n    const rowsToUntrim = [];\n\n    arrayEach(rowIndexes, (elem) => {\n      rowsToUntrim.push(elem);\n\n      if (recursive) {\n        this.expandChildRows(elem, rowsToUntrim);\n      }\n    });\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n\n    return rowsToUntrim;\n  }\n\n  /**\n   * Expand child rows of the provided index.\n   *\n   * @param {number} parentIndex Index of the parent row.\n   * @param {Array} [rowsToUntrim=[]] Array of the rows to be untrimmed.\n   * @param {boolean} [recursive] `true` if it should expand the rows' children recursively.\n   * @param {boolean} [doTrimming=false] I determine whether collapsing should envolve trimming rows.\n   */\n  expandChildRows(parentIndex, rowsToUntrim = [], recursive, doTrimming = false) {\n    if (this.dataManager.hasChildren(parentIndex)) {\n      const parentObject = this.dataManager.getDataObject(parentIndex);\n\n      arrayEach(parentObject.__children, (elem) => {\n        if (!this.isAnyParentCollapsed(elem)) {\n          const elemIndex = this.dataManager.getRowIndex(elem);\n\n          rowsToUntrim.push(elemIndex);\n          this.expandChildRows(elemIndex, rowsToUntrim);\n        }\n      });\n    }\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n  }\n\n  /**\n   * Expand the children of the row passed as an argument.\n   *\n   * @param {number|object} row Parent row.\n   * @param {boolean} [forceRender=true] Whether to render the table after the function ends.\n   * @param {boolean} [doTrimming=true] If set to `true`, the trimming will be applied when the function finishes.\n   * @returns {number[]}\n   */\n  expandChildren(row, forceRender = true, doTrimming = true) {\n    const rowsToExpand = [];\n    let rowObject = null;\n    let rowIndex = null;\n    let rowsToUntrim = null;\n\n    if (isNaN(row)) {\n      rowObject = row;\n      rowIndex = this.dataManager.getRowIndex(row);\n    } else {\n      rowObject = this.dataManager.getDataObject(row);\n      rowIndex = row;\n    }\n\n    this.collapsedRows.splice(this.collapsedRows.indexOf(rowIndex), 1);\n\n    if (this.dataManager.hasChildren(rowObject)) {\n      arrayEach(rowObject.__children, (elem) => {\n        const childIndex = this.dataManager.getRowIndex(elem);\n\n        rowsToExpand.push(childIndex);\n      });\n    }\n\n    rowsToUntrim = this.expandRows(rowsToExpand, true, false);\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n\n    return rowsToUntrim;\n  }\n\n  /**\n   * Expand multiple rows' children.\n   *\n   * @param {Array} rows Array of rows which children are about to be expanded.\n   * @param {boolean} [forceRender=true] `true` if the table should render after finishing the function.\n   * @param {boolean} [doTrimming=true] `true` if the rows should be untrimmed after finishing the function.\n   */\n  expandMultipleChildren(rows, forceRender = true, doTrimming = true) {\n    const rowsToUntrim = [];\n\n    arrayEach(rows, (elem) => {\n      rowsToUntrim.push(...this.expandChildren(elem, false, false));\n    });\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n  }\n\n  /**\n   * Collapse all collapsable rows.\n   */\n  collapseAll() {\n    const data = this.dataManager.getData();\n    const parentsToCollapse = [];\n\n    arrayEach(data, (elem) => {\n      if (this.dataManager.hasChildren(elem)) {\n        parentsToCollapse.push(elem);\n      }\n    });\n\n    this.collapseMultipleChildren(parentsToCollapse);\n\n    this.renderAndAdjust();\n  }\n\n  /**\n   * Expand all collapsable rows.\n   */\n  expandAll() {\n    const data = this.dataManager.getData();\n    const parentsToExpand = [];\n\n    arrayEach(data, (elem) => {\n      if (this.dataManager.hasChildren(elem)) {\n        parentsToExpand.push(elem);\n      }\n    });\n\n    this.expandMultipleChildren(parentsToExpand);\n\n    this.renderAndAdjust();\n  }\n\n  /**\n   * Trim rows.\n   *\n   * @param {Array} rows Physical row indexes.\n   */\n  trimRows(rows) {\n    this.hot.batchExecution(() => {\n      arrayEach(rows, (physicalRow) => {\n        this.plugin.collapsedRowsMap.setValueAtIndex(physicalRow, true);\n      });\n    }, true);\n  }\n\n  /**\n   * Untrim rows.\n   *\n   * @param {Array} rows Physical row indexes.\n   */\n  untrimRows(rows) {\n    this.hot.batchExecution(() => {\n      arrayEach(rows, (physicalRow) => {\n        this.plugin.collapsedRowsMap.setValueAtIndex(physicalRow, false);\n      });\n    }, true);\n  }\n\n  /**\n   * Check if all child rows are collapsed.\n   *\n   * @private\n   * @param {number|object|null} row The parent row. `null` for the top level.\n   * @returns {boolean}\n   */\n  areChildrenCollapsed(row) {\n    let rowObj = isNaN(row) ? row : this.dataManager.getDataObject(row);\n    let allCollapsed = true;\n\n    // Checking the children of the top-level \"parent\"\n    if (rowObj === null) {\n      rowObj = {\n        __children: this.dataManager.data\n      };\n\n    }\n\n    if (this.dataManager.hasChildren(rowObj)) {\n      arrayEach(rowObj.__children, (elem) => {\n        const rowIndex = this.dataManager.getRowIndex(elem);\n\n        if (!this.plugin.collapsedRowsMap.getValueAtIndex(rowIndex)) {\n          allCollapsed = false;\n\n          return false;\n        }\n      });\n    }\n\n    return allCollapsed;\n  }\n\n  /**\n   * Check if any of the row object parents are collapsed.\n   *\n   * @private\n   * @param {object} rowObj Row object.\n   * @returns {boolean}\n   */\n  isAnyParentCollapsed(rowObj) {\n    let parent = rowObj;\n\n    while (parent !== null) {\n      parent = this.dataManager.getRowParent(parent);\n      const parentIndex = this.dataManager.getRowIndex(parent);\n\n      if (this.collapsedRows.indexOf(parentIndex) > -1) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Toggle collapsed state. Callback for the `beforeOnCellMousedown` hook.\n   *\n   * @private\n   * @param {MouseEvent} event `mousedown` event.\n   * @param {object} coords Coordinates of the clicked cell/header.\n   */\n  toggleState(event, coords) {\n    if (coords.col >= 0) {\n      return;\n    }\n\n    const row = this.translateTrimmedRow(coords.row);\n\n    if (hasClass(event.target, HeadersUI.CSS_CLASSES.button)) {\n      if (this.areChildrenCollapsed(row)) {\n        this.expandChildren(row);\n      } else {\n        this.collapseChildren(row);\n      }\n\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Translate visual row after trimming to physical base row index.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number} Base row index.\n   */\n  translateTrimmedRow(row) {\n    return this.hot.toPhysicalRow(row);\n  }\n\n  /**\n   * Translate physical row after trimming to visual base row index.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number} Base row index.\n   */\n  untranslateTrimmedRow(row) {\n    return this.hot.toVisualRow(row);\n  }\n\n  /**\n   * Helper function to render the table and call the `adjustElementsSize` method.\n   *\n   * @private\n   */\n  renderAndAdjust() {\n    this.hot.render();\n\n    // Dirty workaround to prevent scroll height not adjusting to the table height. Needs refactoring in the future.\n    this.hot.view.adjustElementsSize();\n  }\n}\n\nexport default CollapsingUI;\n","/**\n * Base class for the Nested Rows' UI sub-classes.\n *\n * @private\n * @class\n */\nclass BaseUI {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Reference to the main plugin instance.\n   */\n  plugin;\n\n  constructor(pluginInstance, hotInstance) {\n    this.hot = hotInstance;\n    this.plugin = pluginInstance;\n  }\n}\n\nexport default BaseUI;\n","import { arrayEach } from '../../../helpers/array';\nimport { rangeEach } from '../../../helpers/number';\nimport { addClass, setAttribute } from '../../../helpers/dom/element';\nimport BaseUI from './_base';\nimport { A11Y_EXPANDED, A11Y_HIDDEN } from '../../../helpers/a11y';\n\n/**\n * Class responsible for the UI in the Nested Rows' row headers.\n *\n * @private\n * @class HeadersUI\n * @augments BaseUI\n */\nclass HeadersUI extends BaseUI {\n  /**\n   * CSS classes used in the row headers.\n   *\n   * @type {object}\n   */\n  static get CSS_CLASSES() {\n    return {\n      indicatorContainer: 'ht_nestingLevels',\n      parent: 'ht_nestingParent',\n      indicator: 'ht_nestingLevel',\n      emptyIndicator: 'ht_nestingLevel_empty',\n      button: 'ht_nestingButton',\n      expandButton: 'ht_nestingExpand',\n      collapseButton: 'ht_nestingCollapse'\n    };\n  }\n\n  constructor(nestedRowsPlugin, hotInstance) {\n    super(nestedRowsPlugin, hotInstance);\n    /**\n     * Reference to the DataManager instance connected with the Nested Rows plugin.\n     *\n     * @type {DataManager}\n     */\n    this.dataManager = this.plugin.dataManager;\n    // /**\n    //  * Level cache array.\n    //  *\n    //  * @type {Array}\n    //  */\n    // this.levelCache = this.dataManager.cache.levels;\n    /**\n     * Reference to the CollapsingUI instance connected with the Nested Rows plugin.\n     *\n     * @type {CollapsingUI}\n     */\n    this.collapsingUI = this.plugin.collapsingUI;\n    /**\n     * Cache for the row headers width.\n     *\n     * @type {null|number}\n     */\n    this.rowHeaderWidthCache = null;\n  }\n\n  /**\n   * Append nesting indicators and buttons to the row headers.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @param {HTMLElement} TH TH 3element.\n   */\n  appendLevelIndicators(row, TH) {\n    const rowIndex = this.hot.toPhysicalRow(row);\n    const rowLevel = this.dataManager.getRowLevel(rowIndex);\n    const rowObject = this.dataManager.getDataObject(rowIndex);\n    const innerDiv = TH.getElementsByTagName('DIV')[0];\n    const innerSpan = innerDiv.querySelector('span.rowHeader');\n    const previousIndicators = innerDiv.querySelectorAll('[class^=\"ht_nesting\"]');\n    const ariaEnabled = this.hot.getSettings().ariaTags;\n\n    arrayEach(previousIndicators, (elem) => {\n      if (elem) {\n        innerDiv.removeChild(elem);\n      }\n    });\n\n    addClass(TH, HeadersUI.CSS_CLASSES.indicatorContainer);\n\n    if (rowLevel) {\n      const { rootDocument } = this.hot;\n      const initialContent = innerSpan.cloneNode(true);\n\n      innerDiv.innerHTML = '';\n\n      rangeEach(0, rowLevel - 1, () => {\n        const levelIndicator = rootDocument.createElement('SPAN');\n\n        addClass(levelIndicator, HeadersUI.CSS_CLASSES.emptyIndicator);\n        innerDiv.appendChild(levelIndicator);\n      });\n\n      innerDiv.appendChild(initialContent);\n    }\n\n    if (this.dataManager.hasChildren(rowObject)) {\n      const buttonsContainer = this.hot.rootDocument.createElement('DIV');\n\n      if (ariaEnabled) {\n        setAttribute(buttonsContainer, [\n          A11Y_HIDDEN(),\n        ]);\n      }\n\n      addClass(TH, HeadersUI.CSS_CLASSES.parent);\n\n      if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {\n        addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);\n\n        if (ariaEnabled) {\n          setAttribute(TH, [\n            A11Y_EXPANDED(false)\n          ]);\n        }\n\n      } else {\n        addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);\n\n        if (ariaEnabled) {\n          setAttribute(TH, [\n            A11Y_EXPANDED(true)\n          ]);\n        }\n      }\n\n      innerDiv.appendChild(buttonsContainer);\n    }\n  }\n\n  /**\n   * Update the row header width according to number of levels in the dataset.\n   *\n   * @private\n   * @param {number} deepestLevel Cached deepest level of nesting.\n   */\n  updateRowHeaderWidth(deepestLevel) {\n    let deepestLevelIndex = deepestLevel;\n\n    if (!deepestLevelIndex) {\n      deepestLevelIndex = this.dataManager.cache.levelCount;\n    }\n\n    this.rowHeaderWidthCache = Math.max(50, 11 + (10 * deepestLevelIndex) + 25);\n\n    this.hot.render();\n  }\n}\n\nexport default HeadersUI;\n","import { rangeEach } from '../../../helpers/number';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\nimport BaseUI from './_base';\n\n/**\n * Class responsible for the Context Menu entries for the Nested Rows plugin.\n *\n * @private\n * @class ContextMenuUI\n * @augments BaseUI\n */\nclass ContextMenuUI extends BaseUI {\n  /**\n   * Reference to the DataManager instance connected with the Nested Rows plugin.\n   *\n   * @type {DataManager}\n   */\n  dataManager = this.plugin.dataManager;\n\n  #menuEntries = {\n    row_above: (key, selection) => {\n      const lastSelection = selection[selection.length - 1];\n\n      this.dataManager.addSibling(lastSelection.start.row, 'above');\n    },\n    row_below: (key, selection) => {\n      const lastSelection = selection[selection.length - 1];\n\n      this.dataManager.addSibling(lastSelection.start.row, 'below');\n    }\n  };\n\n  /**\n   * Append options to the context menu. (Propagated from the `afterContextMenuDefaultOptions` hook callback)\n   * f.\n   *\n   * @private\n   * @param {object} defaultOptions Default context menu options.\n   * @returns {*}\n   */\n  appendOptions(defaultOptions) {\n    const newEntries = [\n      {\n        key: 'add_child',\n        name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD);\n        },\n        callback: () => {\n          const translatedRowIndex = this.dataManager.translateTrimmedRow(this.hot.getSelectedLast()[0]);\n          const parent = this.dataManager.getDataObject(translatedRowIndex);\n\n          this.dataManager.addChild(parent);\n        },\n        disabled: () => {\n          const selected = this.hot.getSelectedLast();\n\n          return !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() ||\n            this.hot.countRows() >= this.hot.getSettings().maxRows;\n        }\n      },\n      {\n        key: 'detach_from_parent',\n        name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD);\n        },\n        callback: () => {\n          this.dataManager.detachFromParent(this.hot.getSelectedLast());\n        },\n        disabled: () => {\n          const selected = this.hot.getSelectedLast();\n          const translatedRowIndex = this.dataManager.translateTrimmedRow(selected[0]);\n          const parent = this.dataManager.getRowParent(translatedRowIndex);\n\n          return !parent || !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() ||\n            this.hot.countRows() >= this.hot.getSettings().maxRows;\n        }\n      },\n      {\n        name: '---------',\n      },\n    ];\n\n    rangeEach(0, defaultOptions.items.length - 1, (i) => {\n      if (i === 0) {\n        arrayEach(newEntries, (val, j) => {\n          defaultOptions.items.splice(i + j, 0, val);\n        });\n\n        return false;\n      }\n    });\n\n    return this.modifyRowInsertingOptions(defaultOptions);\n  }\n\n  /**\n   * Modify how the row inserting options work.\n   *\n   * @private\n   * @param {object} defaultOptions Default context menu items.\n   * @returns {*}\n   */\n  modifyRowInsertingOptions(defaultOptions) {\n    rangeEach(0, defaultOptions.items.length - 1, (i) => {\n      const option = this.#menuEntries[defaultOptions.items[i].key];\n\n      if (option !== null && option !== undefined) {\n        defaultOptions.items[i].callback = option;\n      }\n    });\n\n    return defaultOptions;\n  }\n}\n\nexport default ContextMenuUI;\n","import { isUndefined } from '../../../helpers/mixed';\nimport { warn } from '../../../helpers/console';\nimport { toSingleLine } from '../../../helpers/templateLiteralTag';\n\n/**\n * Helper class for the row-move-related operations.\n *\n * @private\n * @class RowMoveController\n */\nexport default class RowMoveController {\n  /**\n   * Reference to the Nested Rows plugin instance.\n   *\n   * @type {NestedRows}\n   */\n  plugin;\n  /**\n   * Reference to the Handsontable instance.\n   *\n   * @type {Handsontable.Core}\n   */\n  hot;\n  /**\n   * Reference to the Data Manager class instance.\n   *\n   * @type {DataManager}\n   */\n  dataManager;\n  /**\n   * Reference to the Collapsing UI class instance.\n   *\n   * @type {CollapsingUI}\n   */\n  collapsingUI;\n\n  constructor(plugin) {\n    this.plugin = plugin;\n    this.hot = plugin.hot;\n    this.dataManager = plugin.dataManager;\n    this.collapsingUI = plugin.collapsingUI;\n  }\n\n  /**\n   * `beforeRowMove` hook callback.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n   *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n   *   are going to drop the moved elements. To check visualization of drop index please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  onBeforeRowMove(rows, finalIndex, dropIndex, movePossible) {\n    const improperUsage = this.displayAPICompatibilityWarning({ rows, finalIndex, dropIndex, movePossible });\n\n    if (improperUsage) {\n      return false;\n    }\n\n    this.movedToCollapsed = false;\n    const dropToLastRow = dropIndex === this.hot.countRows();\n    const physicalDropIndex = dropToLastRow ?\n      this.hot.countSourceRows() :\n      this.dataManager.translateTrimmedRow(dropIndex);\n    let allowMove = true;\n    const physicalStartIndexes = rows.map((rowIndex) => {\n      // Don't do the logic for the rest of the rows, as it's bound to fail anyway.\n      if (!allowMove) {\n        return false;\n      }\n\n      const physicalRowIndex = this.dataManager.translateTrimmedRow(rowIndex);\n\n      allowMove = this.shouldAllowMoving(physicalRowIndex, physicalDropIndex);\n\n      return physicalRowIndex;\n    });\n    const willDataChange = physicalStartIndexes.indexOf(physicalDropIndex) === -1;\n\n    if (!allowMove || !willDataChange) {\n      return false;\n    }\n\n    const baseParent = this.getBaseParent(physicalStartIndexes);\n    const targetParent = this.getTargetParent(dropToLastRow, physicalDropIndex);\n    const sameParent = baseParent === targetParent;\n\n    this.movedToCollapsed = this.collapsingUI.areChildrenCollapsed(targetParent);\n\n    // Stash the current state of collapsed rows\n    this.collapsingUI.collapsedRowsStash.stash();\n\n    this.shiftCollapsibleParentsLocations(physicalStartIndexes, physicalDropIndex, sameParent);\n\n    this.moveRows(physicalStartIndexes, physicalDropIndex, targetParent);\n\n    this.dataManager.rewriteCache();\n\n    this.moveCellsMeta(physicalStartIndexes, physicalDropIndex);\n\n    this.collapsingUI.collapsedRowsStash.applyStash(false);\n\n    // TODO: Trying to mock real work of the `ManualRowMove` plugin. It was blocked by returning `false` below.\n    this.hot.runHooks('afterRowMove',\n      rows, finalIndex, dropIndex, movePossible, movePossible && this.isRowOrderChanged(rows, finalIndex));\n\n    // Not necessary - added to keep compatibility with other plugins (namely: columnSummary).\n    this.hot.render();\n\n    this.selectCells(rows, dropIndex);\n\n    return false;\n  }\n\n  /**\n   * Display a `dragRows`/`moveRows` method compatibility warning if needed.\n   *\n   * @param {object} beforeMoveRowHookArgs A set of arguments from the `beforeMoveRow` hook.\n   * @returns {boolean} `true` if is a result of an improper usage of the moving API.\n   */\n  displayAPICompatibilityWarning(beforeMoveRowHookArgs) {\n    const {\n      rows,\n      finalIndex,\n      dropIndex,\n      movePossible\n    } = beforeMoveRowHookArgs;\n    let shouldTerminate = false;\n\n    if (isUndefined(dropIndex)) {\n      warn(toSingleLine`Since version 8.0.0 of the Handsontable the 'moveRows' method isn't used for moving rows\\x20\n      when the NestedRows plugin is enabled. Please use the 'dragRows' method instead.`);\n\n      // TODO: Trying to mock real work of the `ManualRowMove` plugin. It was blocked by returning `false` below.\n      this.hot.runHooks('afterRowMove', rows, finalIndex, dropIndex, movePossible, false);\n\n      shouldTerminate = true;\n    }\n\n    return shouldTerminate;\n  }\n\n  /**\n   * Check if the moving action should be allowed.\n   *\n   * @param {number} physicalRowIndex Physical start row index.\n   * @param {number} physicalDropIndex Physical drop index.\n   * @returns {boolean} `true` if it should continue with the moving action.\n   */\n  shouldAllowMoving(physicalRowIndex, physicalDropIndex) {\n    /*\n       We can't move rows when any of them is:\n       - a parent\n       - a top-level element\n       - is being moved to the top level\n       - is being moved to the position of any of the moved rows (not changing position)\n    */\n\n    return !(\n      this.dataManager.isParent(physicalRowIndex) ||\n      this.dataManager.isRowHighestLevel(physicalRowIndex) ||\n      physicalRowIndex === physicalDropIndex ||\n      physicalDropIndex === 0\n    );\n  }\n\n  /**\n   * Get the base row parent.\n   *\n   * @param {number} physicalStartIndexes Physical start row index.\n   * @returns {object|null} The base row parent.\n   */\n  getBaseParent(physicalStartIndexes) {\n    return this.dataManager.getRowParent(physicalStartIndexes[0]);\n  }\n\n  /**\n   * Get the target row parent.\n   *\n   * @param {boolean} dropToLastRow `true` if the row is moved to the last row of the table.\n   * @param {number} physicalDropIndex Physical drop row index.\n   * @returns {object|null} The target row parent.\n   */\n  getTargetParent(dropToLastRow, physicalDropIndex) {\n    let targetParent = this.dataManager.getRowParent(dropToLastRow ? physicalDropIndex - 1 : physicalDropIndex);\n\n    // If we try to move an element to the place of a top-level parent, snap the element to the previous top-level\n    // parent's children instead\n    if (targetParent === null || targetParent === undefined) {\n      targetParent = this.dataManager.getRowParent(physicalDropIndex - 1);\n    }\n\n    return targetParent;\n  }\n\n  /**\n   * Shift the cached collapsible rows position according to the move action.\n   *\n   * @param {number[]} physicalStartIndexes Physical start row indexes.\n   * @param {number} physicalDropIndex Physical drop index.\n   * @param {boolean} sameParent `true` if the row's being moved between siblings of the same parent.\n   */\n  shiftCollapsibleParentsLocations(physicalStartIndexes, physicalDropIndex, sameParent) {\n    if (!sameParent) {\n      if (Math.max(...physicalStartIndexes) <= physicalDropIndex) {\n        this.collapsingUI.collapsedRowsStash.shiftStash(physicalStartIndexes[0], physicalDropIndex,\n          (-1) * physicalStartIndexes.length);\n\n      } else {\n        this.collapsingUI.collapsedRowsStash.shiftStash(physicalDropIndex, physicalStartIndexes[0],\n          physicalStartIndexes.length);\n      }\n    }\n  }\n\n  /**\n   * Move the rows at the provided coordinates.\n   *\n   * @param {number[]} physicalStartIndexes Physical indexes of the rows about to be moved.\n   * @param {number} physicalDropIndex Physical drop index.\n   * @param {object} targetParent Parent of the destination row.\n   */\n  moveRows(physicalStartIndexes, physicalDropIndex, targetParent) {\n    const moveToLastChild = physicalDropIndex === this.dataManager.getRowIndex(targetParent) +\n      this.dataManager.countChildren(targetParent) + 1;\n\n    this.hot.batchRender(() => {\n      physicalStartIndexes.forEach((physicalStartIndex) => {\n        this.dataManager.moveRow(physicalStartIndex, physicalDropIndex, this.movedToCollapsed, moveToLastChild);\n      });\n    });\n  }\n\n  /**\n   * Move the cell meta for multiple rows.\n   *\n   * @param {number[]} baseIndexes Array of indexes for the rows being moved.\n   * @param {number} targetIndex Index of the destination of the move.\n   */\n  moveCellsMeta(baseIndexes, targetIndex) {\n    const rowsOfMeta = [];\n    const movingDown = Math.max(...baseIndexes) < targetIndex;\n\n    baseIndexes.forEach((baseIndex) => {\n      rowsOfMeta.push(this.hot.getCellMetaAtRow(baseIndex));\n    });\n\n    this.hot.spliceCellsMeta(baseIndexes[0], baseIndexes.length);\n\n    this.hot.spliceCellsMeta(targetIndex - (movingDown ? rowsOfMeta.length : 0), 0, ...rowsOfMeta);\n  }\n\n  /**\n   * Select cells after the move.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n   *   are going to drop the moved elements. To check visualization of drop index please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   */\n  selectCells(rows, dropIndex) {\n    const rowsLen = rows.length;\n    let startRow = 0;\n    let endRow = 0;\n    let selection = null;\n    let lastColIndex = null;\n\n    if (this.movedToCollapsed) {\n      let physicalDropIndex = null;\n\n      if (rows[rowsLen - 1] < dropIndex) {\n        physicalDropIndex = this.dataManager.translateTrimmedRow(dropIndex - rowsLen);\n\n      } else {\n        physicalDropIndex = this.dataManager.translateTrimmedRow(dropIndex);\n      }\n\n      const parentObject = this.dataManager.getRowParent(\n        physicalDropIndex === null ? this.hot.countSourceRows() - 1 : physicalDropIndex - 1\n      );\n      const parentIndex = this.dataManager.getRowIndex(parentObject);\n\n      startRow = this.dataManager.untranslateTrimmedRow(parentIndex);\n      endRow = startRow;\n\n    } else if (rows[rowsLen - 1] < dropIndex) {\n      endRow = dropIndex - 1;\n      startRow = endRow - rowsLen + 1;\n\n    } else {\n      startRow = dropIndex;\n      endRow = startRow + rowsLen - 1;\n    }\n\n    selection = this.hot.selection;\n    lastColIndex = this.hot.countCols() - 1;\n\n    selection.setRangeStart(this.hot._createCellCoords(startRow, 0));\n    selection.setRangeEnd(this.hot._createCellCoords(endRow, lastColIndex), true);\n  }\n\n  // TODO: Reimplementation of function which is inside the `ManualRowMove` plugin.\n  /**\n   * Indicates if order of rows was changed.\n   *\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n   *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @returns {boolean}\n   */\n  isRowOrderChanged(movedRows, finalIndex) {\n    return movedRows.some((row, nrOfMovedElement) => row - nrOfMovedElement !== finalIndex);\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  PersistentState,\n} from './persistentState';\n","import { BasePlugin } from '../base';\nimport Storage from './storage';\nimport Hooks from '../../pluginHooks';\n\nHooks.getSingleton().register('persistentStateSave');\nHooks.getSingleton().register('persistentStateLoad');\nHooks.getSingleton().register('persistentStateReset');\n\nexport const PLUGIN_KEY = 'persistentState';\nexport const PLUGIN_PRIORITY = 0;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin PersistentState\n * @class PersistentState\n *\n * @description\n * Save the state of column sorting, column positions and column sizes in local storage to preserve table state\n * between page reloads.\n *\n * In order to enable data storage mechanism, {@link Options#persistentState} option must be set to `true`.\n *\n * When persistentState is enabled it exposes 3 hooks:\n * - {@link Hooks#persistentStateSave} - Saves value under given key in browser local storage.\n * - {@link Hooks#persistentStateLoad} - Loads value, saved under given key, from browser local storage. The loaded\n * value will be saved in `saveTo.value`.\n * - {@link Hooks#persistentStateReset} - Clears the value saved under key. If no key is given, all values associated\n * with table will be cleared.\n *\n * __Note:__ The main reason behind using `persistentState` hooks rather than regular LocalStorage API is that it\n * ensures separation of data stored by multiple Handsontable instances. In other words, if you have two (or more)\n * instances of Handsontable on one page, data saved by one instance won't be accessible by the second instance.\n * Those two instances can store data under the same key and no data would be overwritten.\n *\n * __Important:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`.\n *\n */\nexport class PersistentState extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Instance of {@link Storage}.\n   *\n   * @private\n   * @type {Storage}\n   */\n  storage;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link PersistentState#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    if (!this.storage) {\n      this.storage = new Storage(this.hot.rootElement.id, this.hot.rootWindow);\n    }\n\n    this.addHook('persistentStateSave', (key, value) => this.saveValue(key, value));\n    this.addHook('persistentStateLoad', (key, saveTo) => this.loadValue(key, saveTo));\n    this.addHook('persistentStateReset', () => this.resetValue());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.storage = undefined;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`persistentState`](@/api/options.md#persistentstate)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Loads the value from local storage.\n   *\n   * @param {string} key Storage key.\n   * @param {object} saveTo Saved value from local storage.\n   */\n  loadValue(key, saveTo) {\n    saveTo.value = this.storage.loadValue(key);\n  }\n\n  /**\n   * Saves the data to local storage.\n   *\n   * @param {string} key Storage key.\n   * @param {Mixed} value Value to save.\n   */\n  saveValue(key, value) {\n    this.storage.saveValue(key, value);\n  }\n\n  /**\n   * Resets the data or all data from local storage.\n   *\n   * @param {string} key [optional] Storage key.\n   */\n  resetValue(key) {\n    if (typeof key === 'undefined') {\n      this.storage.resetAll();\n\n    } else {\n      this.storage.reset(key);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { arrayEach } from '../../helpers/array';\n\n/**\n * @private\n * @class Storage\n */\nclass Storage {\n  /**\n   * Reference to proper window.\n   *\n   * @type {Window}\n   */\n  rootWindow;\n  /**\n   * Prefix for key (id element).\n   *\n   * @type {string}\n   */\n  prefix;\n\n  /**\n   * Saved keys.\n   *\n   * @type {Array}\n   */\n  savedKeys = [];\n\n  // eslint-disable-next-line no-restricted-globals\n  constructor(prefix, rootWindow = window) {\n    this.rootWindow = rootWindow;\n    this.prefix = prefix;\n\n    this.loadSavedKeys();\n  }\n\n  /**\n   * Save data to localStorage.\n   *\n   * @param {string} key Key string.\n   * @param {Mixed} value Value to save.\n   */\n  saveValue(key, value) {\n    this.rootWindow.localStorage.setItem(`${this.prefix}_${key}`, JSON.stringify(value));\n\n    if (this.savedKeys.indexOf(key) === -1) {\n      this.savedKeys.push(key);\n      this.saveSavedKeys();\n    }\n  }\n\n  /**\n   * Load data from localStorage.\n   *\n   * @param {string} key Key string.\n   * @param {object} defaultValue Object containing the loaded data.\n   *\n   * @returns {object|undefined}\n   */\n  loadValue(key, defaultValue) {\n    const itemKey = typeof key === 'undefined' ? defaultValue : key;\n    const value = this.rootWindow.localStorage.getItem(`${this.prefix}_${itemKey}`);\n\n    return value === null ? undefined : JSON.parse(value);\n  }\n\n  /**\n   * Reset given data from localStorage.\n   *\n   * @param {string} key Key string.\n   */\n  reset(key) {\n    this.rootWindow.localStorage.removeItem(`${this.prefix}_${key}`);\n  }\n\n  /**\n   * Reset all data from localStorage.\n   *\n   */\n  resetAll() {\n    arrayEach(this.savedKeys, (value, index) => {\n      this.rootWindow.localStorage.removeItem(`${this.prefix}_${this.savedKeys[index]}`);\n    });\n\n    this.clearSavedKeys();\n  }\n\n  /**\n   * Load and save all keys from localStorage.\n   *\n   * @private\n   */\n  loadSavedKeys() {\n    const keysJSON = this.rootWindow.localStorage.getItem(`${this.prefix}__persistentStateKeys`);\n    const keys = typeof keysJSON === 'string' ? JSON.parse(keysJSON) : undefined;\n\n    this.savedKeys = keys || [];\n  }\n\n  /**\n   * Save saved key in localStorage.\n   *\n   * @private\n   */\n  saveSavedKeys() {\n    this.rootWindow.localStorage.setItem(`${this.prefix}__persistentStateKeys`, JSON.stringify(this.savedKeys));\n  }\n\n  /**\n   * Clear saved key from localStorage.\n   *\n   * @private\n   */\n  clearSavedKeys() {\n    this.savedKeys.length = 0;\n    this.saveSavedKeys();\n  }\n}\n\nexport default Storage;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Search,\n} from './search';\n","import { BasePlugin } from '../base';\nimport { isObject } from '../../helpers/object';\nimport { rangeEach } from '../../helpers/number';\nimport { isUndefined } from '../../helpers/mixed';\n\nexport const PLUGIN_KEY = 'search';\nexport const PLUGIN_PRIORITY = 190;\nconst DEFAULT_SEARCH_RESULT_CLASS = 'htSearchResult';\n\nconst DEFAULT_CALLBACK = function(instance, row, col, data, testResult) {\n  instance.getCellMeta(row, col).isSearchResult = testResult;\n};\n\nconst DEFAULT_QUERY_METHOD = function(query, value, cellProperties) {\n  if (isUndefined(query) || query === null || !query.toLocaleLowerCase || query.length === 0) {\n    return false;\n  }\n  if (isUndefined(value) || value === null) {\n    return false;\n  }\n\n  return value.toString().toLocaleLowerCase(cellProperties.locale)\n    .indexOf(query.toLocaleLowerCase(cellProperties.locale)) !== -1;\n};\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin Search\n * @class Search\n *\n * @description\n * The search plugin provides an easy interface to search data across Handsontable.\n *\n * In order to enable search mechanism, {@link Options#search} option must be set to `true`.\n *\n * @example\n * ```js\n * // as boolean\n * search: true\n * // as a object with one or more options\n * search: {\n *   callback: myNewCallbackFunction,\n *   queryMethod: myNewQueryMethod,\n *   searchResultClass: 'customClass'\n * }\n *\n * // Access to search plugin instance:\n * const searchPlugin = hot.getPlugin('search');\n *\n * // Set callback programmatically:\n * searchPlugin.setCallback(myNewCallbackFunction);\n * // Set query method programmatically:\n * searchPlugin.setQueryMethod(myNewQueryMethod);\n * // Set search result cells class programmatically:\n * searchPlugin.setSearchResultClass(customClass);\n * ```\n */\nexport class Search extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Function called during querying for each cell from the {@link DataMap}.\n   *\n   * @private\n   * @type {Function}\n   */\n  callback = DEFAULT_CALLBACK;\n  /**\n   * Query function is responsible for determining whether a query matches the value stored in a cell.\n   *\n   * @private\n   * @type {Function}\n   */\n  queryMethod = DEFAULT_QUERY_METHOD;\n  /**\n   * Class name added to each cell that belongs to the searched query.\n   *\n   * @private\n   * @type {string}\n   */\n  searchResultClass = DEFAULT_SEARCH_RESULT_CLASS;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const searchSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    this.updatePluginSettings(searchSettings);\n\n    this.addHook('beforeRenderer', (...args) => this.#onBeforeRenderer(...args));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    const beforeRendererCallback = (...args) => this.#onBeforeRenderer(...args);\n\n    this.hot.addHook('beforeRenderer', beforeRendererCallback);\n    this.hot.addHookOnce('afterViewRender', () => {\n      this.hot.removeHook('beforeRenderer', beforeRendererCallback);\n    });\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`search`](@/api/options.md#search)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Makes the query.\n   *\n   * @param {string} queryStr Value to be search.\n   * @param {Function} [callback] Callback function performed on cells with values which matches to the searched query.\n   * @param {Function} [queryMethod] Query function responsible for determining whether a query matches the value stored in a cell.\n   * @returns {object[]} Return an array of objects with `row`, `col`, `data` properties or empty array.\n   */\n  query(queryStr, callback = this.getCallback(), queryMethod = this.getQueryMethod()) {\n    const rowCount = this.hot.countRows();\n    const colCount = this.hot.countCols();\n    const queryResult = [];\n    const instance = this.hot;\n\n    rangeEach(0, rowCount - 1, (rowIndex) => {\n      rangeEach(0, colCount - 1, (colIndex) => {\n        const cellData = this.hot.getDataAtCell(rowIndex, colIndex);\n        const cellProperties = this.hot.getCellMeta(rowIndex, colIndex);\n        const cellCallback = cellProperties.search.callback || callback;\n        const cellQueryMethod = cellProperties.search.queryMethod || queryMethod;\n        const testResult = cellQueryMethod(queryStr, cellData, cellProperties);\n\n        if (testResult) {\n          const singleResult = {\n            row: rowIndex,\n            col: colIndex,\n            data: cellData,\n          };\n\n          queryResult.push(singleResult);\n        }\n\n        if (cellCallback) {\n          cellCallback(instance, rowIndex, colIndex, cellData, testResult);\n        }\n      });\n    });\n\n    return queryResult;\n  }\n\n  /**\n   * Gets the callback function.\n   *\n   * @returns {Function} Return the callback function.\n   */\n  getCallback() {\n    return this.callback;\n  }\n\n  /**\n   * Sets the callback function. This function will be called during querying for each cell.\n   *\n   * @param {Function} newCallback A callback function.\n   */\n  setCallback(newCallback) {\n    this.callback = newCallback;\n  }\n\n  /**\n   * Gets the query method function.\n   *\n   * @returns {Function} Return the query method.\n   */\n  getQueryMethod() {\n    return this.queryMethod;\n  }\n\n  /**\n   * Sets the query method function. The function is responsible for determining whether a query matches the value stored in a cell.\n   *\n   * @param {Function} newQueryMethod A function with specific match logic.\n   */\n  setQueryMethod(newQueryMethod) {\n    this.queryMethod = newQueryMethod;\n  }\n\n  /**\n   * Gets search result cells class name.\n   *\n   * @returns {string} Return the cell class name.\n   */\n  getSearchResultClass() {\n    return this.searchResultClass;\n  }\n\n  /**\n   * Sets search result cells class name. This class name will be added to each cell that belongs to the searched query.\n   *\n   * @param {string} newElementClass CSS class name.\n   */\n  setSearchResultClass(newElementClass) {\n    this.searchResultClass = newElementClass;\n  }\n\n  /**\n   * Updates the settings of the plugin.\n   *\n   * @param {object} searchSettings The plugin settings, taken from Handsontable configuration.\n   * @private\n   */\n  updatePluginSettings(searchSettings) {\n    if (isObject(searchSettings)) {\n      if (searchSettings.searchResultClass) {\n        this.setSearchResultClass(searchSettings.searchResultClass);\n      }\n\n      if (searchSettings.queryMethod) {\n        this.setQueryMethod(searchSettings.queryMethod);\n      }\n\n      if (searchSettings.callback) {\n        this.setCallback(searchSettings.callback);\n      }\n    }\n  }\n\n  /**\n   * The `beforeRenderer` hook callback.\n   *\n   * @param {HTMLTableCellElement} TD The rendered `TD` element.\n   * @param {number} row Visual row index.\n   * @param {number} col Visual column index.\n   * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n   * @param {string} value Value of the rendered cell.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  #onBeforeRenderer(TD, row, col, prop, value, cellProperties) {\n    // TODO: #4972\n    const className = cellProperties.className || [];\n    let classArray = [];\n\n    if (typeof className === 'string') {\n      classArray = className.split(' ');\n\n    } else {\n      classArray.push(...className);\n    }\n\n    if (this.isEnabled() && cellProperties.isSearchResult) {\n      if (!classArray.includes(this.searchResultClass)) {\n        classArray.push(`${this.searchResultClass}`);\n      }\n\n    } else if (classArray.includes(this.searchResultClass)) {\n      classArray.splice(classArray.indexOf(this.searchResultClass), 1);\n    }\n\n    cellProperties.className = classArray.join(' ');\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  TouchScroll,\n} from './touchScroll';\n","import { addClass, removeClass } from '../../helpers/dom/element';\nimport { arrayEach } from '../../helpers/array';\nimport { BasePlugin } from '../base';\nimport { isTouchSupported } from '../../helpers/feature';\n\nexport const PLUGIN_KEY = 'touchScroll';\nexport const PLUGIN_PRIORITY = 200;\n\n/**\n * @private\n * @plugin TouchScroll\n * @class TouchScroll\n */\nexport class TouchScroll extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return true;\n  }\n\n  /**\n   * Collection of scrollbars to update.\n   *\n   * @type {Array}\n   */\n  scrollbars = [];\n  /**\n   * Collection of overlays to update.\n   *\n   * @type {Array}\n   */\n  clones = [];\n  /**\n   * Flag which determines if collection of overlays should be refilled on every table render.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  lockedCollection = false;\n  /**\n   * Flag which determines if walkontable should freeze overlays while scrolling.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  freezeOverlays = false;\n\n  /**\n   * Check if plugin is enabled.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return isTouchSupported();\n  }\n\n  /**\n   * Enable the plugin.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterViewRender', () => this.#onAfterViewRender());\n    this.registerEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin to use the latest options you have specified.\n   */\n  updatePlugin() {\n    this.lockedCollection = false;\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disable plugin for this Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n  }\n\n  /**\n   * Register all necessary events.\n   *\n   * @private\n   */\n  registerEvents() {\n    this.addHook('beforeTouchScroll', () => this.#onBeforeTouchScroll());\n    this.addHook('afterMomentumScroll', () => this.#onAfterMomentumScroll());\n  }\n\n  /**\n   * After view render listener.\n   */\n  #onAfterViewRender() {\n    if (this.lockedCollection) {\n      return;\n    }\n\n    const {\n      topOverlay,\n      bottomOverlay,\n      inlineStartOverlay,\n      topInlineStartCornerOverlay,\n      bottomInlineStartCornerOverlay\n    } = this.hot.view._wt.wtOverlays;\n\n    this.lockedCollection = true;\n    this.scrollbars.length = 0;\n    this.scrollbars.push(topOverlay);\n\n    if (bottomOverlay.clone) {\n      this.scrollbars.push(bottomOverlay);\n    }\n\n    this.scrollbars.push(inlineStartOverlay);\n\n    if (topInlineStartCornerOverlay) {\n      this.scrollbars.push(topInlineStartCornerOverlay);\n    }\n    if (bottomInlineStartCornerOverlay && bottomInlineStartCornerOverlay.clone) {\n      this.scrollbars.push(bottomInlineStartCornerOverlay);\n    }\n\n    this.clones = [];\n\n    if (topOverlay.needFullRender) {\n      this.clones.push(topOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (bottomOverlay.needFullRender) {\n      this.clones.push(bottomOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (inlineStartOverlay.needFullRender) {\n      this.clones.push(inlineStartOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (topInlineStartCornerOverlay) {\n      this.clones.push(topInlineStartCornerOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (bottomInlineStartCornerOverlay && bottomInlineStartCornerOverlay.clone) {\n      this.clones.push(bottomInlineStartCornerOverlay.clone.wtTable.holder.parentNode);\n    }\n  }\n\n  /**\n   * Touch scroll listener.\n   */\n  #onBeforeTouchScroll() {\n    this.freezeOverlays = true;\n\n    arrayEach(this.clones, (clone) => {\n      addClass(clone, 'hide-tween');\n    });\n  }\n\n  /**\n   * After momentum scroll listener.\n   */\n  #onAfterMomentumScroll() {\n    this.freezeOverlays = false;\n\n    arrayEach(this.clones, (clone) => {\n      removeClass(clone, 'hide-tween');\n      addClass(clone, 'show-tween');\n    });\n\n    this.hot._registerTimeout(() => {\n      arrayEach(this.clones, (clone) => {\n        removeClass(clone, 'show-tween');\n      });\n    }, 400);\n\n    arrayEach(this.scrollbars, (scrollbar) => {\n      scrollbar.refresh();\n      scrollbar.resetFixedPosition();\n    });\n\n    this.hot.view._wt.wtOverlays.syncScrollWithMaster();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  TrimRows,\n} from './trimRows';\n","import { BasePlugin } from '../base';\nimport { TrimmingMap } from '../../translations';\nimport { arrayEach, arrayReduce } from '../../helpers/array';\n\nexport const PLUGIN_KEY = 'trimRows';\nexport const PLUGIN_PRIORITY = 330;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin TrimRows\n * @class TrimRows\n *\n * @description\n * The plugin allows to trim certain rows. The trimming is achieved by applying the transformation algorithm to the data\n * transformation. In this case, when the row is trimmed it is not accessible using `getData*` methods thus the trimmed\n * data is not visible to other plugins.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   // hide selected rows on table initialization\n *   trimRows: [1, 2, 5]\n * });\n *\n * // access the trimRows plugin instance\n * const trimRowsPlugin = hot.getPlugin('trimRows');\n *\n * // hide single row\n * trimRowsPlugin.trimRow(1);\n *\n * // hide multiple rows\n * trimRowsPlugin.trimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.trimRows([1, 2, 9]);\n *\n * // show single row\n * trimRowsPlugin.untrimRow(1);\n *\n * // show multiple rows\n * trimRowsPlugin.untrimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.untrimRows([1, 2, 9]);\n *\n * // rerender table to see the changes\n * hot.render();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   // hide selected rows on table initialization\n *   trimRows={[1, 2, 5]}\n * />\n *\n * const hot = hotRef.current.hotInstance;\n * // access the trimRows plugin instance\n * const trimRowsPlugin = hot.getPlugin('trimRows');\n *\n * // hide single row\n * trimRowsPlugin.trimRow(1);\n *\n * // hide multiple rows\n * trimRowsPlugin.trimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.trimRows([1, 2, 9]);\n *\n * // show single row\n * trimRowsPlugin.untrimRow(1);\n *\n * // show multiple rows\n * trimRowsPlugin.untrimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.untrimRows([1, 2, 9]);\n *\n * // rerender table to see the changes\n * hot.render();\n * ```\n * :::\n */\nexport class TrimRows extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Map of skipped rows by the plugin.\n   *\n   * @private\n   * @type {null|TrimmingMap}\n   */\n  trimmedRowsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.trimmedRowsMap = this.hot.rowIndexMapper.registerMap('trimRows', new TrimmingMap());\n    this.trimmedRowsMap.addLocalHook('init', () => this.#onMapInit());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`trimRows`](@/api/options.md#trimrows)\n   */\n  updatePlugin() {\n    const trimmedRows = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(trimmedRows)) {\n      this.hot.batchExecution(() => {\n        this.trimmedRowsMap.clear();\n\n        arrayEach(trimmedRows, (physicalRow) => {\n          this.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n        });\n      }, true);\n    }\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap('trimRows');\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Get list of trimmed rows.\n   *\n   * @returns {Array} Physical rows.\n   */\n  getTrimmedRows() {\n    return this.trimmedRowsMap.getTrimmedIndexes();\n  }\n\n  /**\n   * Trims the rows provided in the array.\n   *\n   * @param {number[]} rows Array of physical row indexes.\n   * @fires Hooks#beforeTrimRow\n   * @fires Hooks#afterTrimRow\n   */\n  trimRows(rows) {\n    const currentTrimConfig = this.getTrimmedRows();\n\n    const isValidConfig = this.isValidConfig(rows);\n    let destinationTrimConfig = currentTrimConfig;\n\n    if (isValidConfig) {\n      destinationTrimConfig = Array.from(new Set(currentTrimConfig.concat(rows)));\n    }\n\n    const allowTrimRow = this.hot.runHooks('beforeTrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig);\n\n    if (allowTrimRow === false) {\n      return;\n    }\n\n    if (isValidConfig) {\n      this.hot.batchExecution(() => {\n        arrayEach(rows, (physicalRow) => {\n          this.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n        });\n      }, true);\n    }\n\n    this.hot.runHooks('afterTrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig,\n      isValidConfig && destinationTrimConfig.length > currentTrimConfig.length);\n  }\n\n  /**\n   * Trims the row provided as a physical row index (counting from 0).\n   *\n   * @param {...number} row Physical row index.\n   */\n  trimRow(...row) {\n    this.trimRows(row);\n  }\n\n  /**\n   * Untrims the rows provided in the array.\n   *\n   * @param {number[]} rows Array of physical row indexes.\n   * @fires Hooks#beforeUntrimRow\n   * @fires Hooks#afterUntrimRow\n   */\n  untrimRows(rows) {\n    const currentTrimConfig = this.getTrimmedRows();\n    const isValidConfig = this.isValidConfig(rows);\n    let destinationTrimConfig = currentTrimConfig;\n    const trimmingMapValues = this.trimmedRowsMap.getValues().slice();\n    const isAnyRowUntrimmed = rows.length > 0;\n\n    if (isValidConfig && isAnyRowUntrimmed) {\n      // Preparing new values for trimming map.\n      arrayEach(rows, (physicalRow) => {\n        trimmingMapValues[physicalRow] = false;\n      });\n\n      // Preparing new trimming config.\n      destinationTrimConfig = arrayReduce(trimmingMapValues, (trimmedIndexes, isTrimmed, physicalIndex) => {\n        if (isTrimmed) {\n          trimmedIndexes.push(physicalIndex);\n        }\n\n        return trimmedIndexes;\n      }, []);\n    }\n\n    const allowUntrimRow = this.hot\n      .runHooks('beforeUntrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig && isAnyRowUntrimmed);\n\n    if (allowUntrimRow === false) {\n      return;\n    }\n\n    if (isValidConfig && isAnyRowUntrimmed) {\n      this.trimmedRowsMap.setValues(trimmingMapValues);\n    }\n\n    this.hot.runHooks('afterUntrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig && isAnyRowUntrimmed,\n      isValidConfig && destinationTrimConfig.length < currentTrimConfig.length);\n  }\n\n  /**\n   * Untrims the row provided as a physical row index (counting from 0).\n   *\n   * @param {...number} row Physical row index.\n   */\n  untrimRow(...row) {\n    this.untrimRows(row);\n  }\n\n  /**\n   * Checks if given row is hidden.\n   *\n   * @param {number} physicalRow Physical row index.\n   * @returns {boolean}\n   */\n  isTrimmed(physicalRow) {\n    return this.trimmedRowsMap.getValueAtIndex(physicalRow) || false;\n  }\n\n  /**\n   * Untrims all trimmed rows.\n   */\n  untrimAll() {\n    this.untrimRows(this.getTrimmedRows());\n  }\n\n  /**\n   * Get if trim config is valid. Check whether all of the provided physical row indexes are within source data.\n   *\n   * @param {Array} trimmedRows List of physical row indexes.\n   * @returns {boolean}\n   */\n  isValidConfig(trimmedRows) {\n    const sourceRows = this.hot.countSourceRows();\n\n    return trimmedRows\n      .every(trimmedRow => (Number.isInteger(trimmedRow) && trimmedRow >= 0 && trimmedRow < sourceRows));\n  }\n\n  /**\n   * On map initialized hook callback.\n   */\n  #onMapInit() {\n    const trimmedRows = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(trimmedRows)) {\n      this.hot.batchExecution(() => {\n        arrayEach(trimmedRows, (physicalRow) => {\n          this.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n        });\n      }, true);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import UndoRedo, { PLUGIN_KEY } from './undoRedo';\n\nexport {\n  PLUGIN_KEY,\n  UndoRedo,\n};\n","import Hooks from '../../pluginHooks';\nimport { arrayMap, arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { inherit, deepClone } from '../../helpers/object';\nimport { align } from '../contextMenu/utils';\nimport { getMoves } from '../../helpers/moves';\n\nconst SHORTCUTS_GROUP = 'undoRedo';\n\nexport const PLUGIN_KEY = 'undoRedo';\n\n/**\n * @description\n * Handsontable UndoRedo plugin allows to undo and redo certain actions done in the table.\n *\n * __Note__, that not all actions are currently undo-able. The UndoRedo plugin is enabled by default.\n * @example\n * ```js\n * undo: true\n * ```\n * @class UndoRedo\n * @plugin UndoRedo\n * @param {Core} instance The Handsontable instance.\n */\nfunction UndoRedo(instance) {\n  const plugin = this;\n\n  this.instance = instance;\n  this.doneActions = [];\n  this.undoneActions = [];\n  this.ignoreNewActions = false;\n  this.enabled = false;\n\n  instance.addHook('afterChange', function(changes, source) {\n    const changesLen = changes && changes.length;\n\n    if (!changesLen) {\n      return;\n    }\n\n    const hasDifferences = changes.find((change) => {\n      const [, , oldValue, newValue] = change;\n\n      return oldValue !== newValue;\n    });\n\n    if (!hasDifferences) {\n      return;\n    }\n\n    const wrappedAction = () => {\n      const clonedChanges = changes.reduce((arr, change) => {\n        arr.push([...change]);\n\n        return arr;\n      }, []);\n\n      arrayEach(clonedChanges, (change) => {\n        change[1] = instance.propToCol(change[1]);\n      });\n\n      const selected = changesLen > 1 ? this.getSelected() : [[clonedChanges[0][0], clonedChanges[0][1]]];\n\n      return new UndoRedo.ChangeAction(clonedChanges, selected);\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n\n  instance.addHook('afterCreateRow', (index, amount, source) => {\n    plugin.done(() => new UndoRedo.CreateRowAction(index, amount), source);\n  });\n\n  const getCellMetas = (fromRow, toRow, fromColumn, toColumn) => {\n    const genericKeys = ['visualRow', 'visualCol', 'row', 'col', 'prop'];\n    const genericKeysLength = genericKeys.length;\n    const cellMetas = [];\n\n    rangeEach(fromColumn, toColumn, (columnIndex) => {\n      rangeEach(fromRow, toRow, (rowIndex) => {\n        const cellMeta = instance.getCellMeta(rowIndex, columnIndex);\n\n        if (Object.keys(cellMeta).length !== genericKeysLength) {\n          const uniqueMeta =\n            Object.fromEntries(Object.entries(cellMeta).filter(([key]) => genericKeys.includes(key) === false));\n\n          cellMetas.push([cellMeta.visualRow, cellMeta.visualCol, uniqueMeta]);\n        }\n      });\n    });\n\n    return cellMetas;\n  };\n\n  instance.addHook('beforeRemoveRow', (index, amount, logicRows, source) => {\n    const wrappedAction = () => {\n      const physicalRowIndex = instance.toPhysicalRow(index);\n      const lastRowIndex = physicalRowIndex + amount - 1;\n      const removedData = deepClone(\n        plugin.instance.getSourceData(\n          physicalRowIndex, 0, physicalRowIndex + amount - 1, plugin.instance.countSourceCols() - 1\n        )\n      );\n\n      return new UndoRedo.RemoveRowAction(\n        physicalRowIndex,\n        removedData,\n        instance.getSettings().fixedRowsBottom,\n        instance.getSettings().fixedRowsTop,\n        instance.rowIndexMapper.getIndexesSequence(),\n        getCellMetas(physicalRowIndex, lastRowIndex, 0, instance.countCols() - 1)\n      );\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n\n  instance.addHook('afterCreateCol', (index, amount, source) => {\n    plugin.done(() => new UndoRedo.CreateColumnAction(index, amount), source);\n  });\n\n  instance.addHook('beforeRemoveCol', (index, amount, logicColumns, source) => {\n    const wrappedAction = () => {\n      const originalData = plugin.instance.getSourceDataArray();\n      const columnIndex = (plugin.instance.countCols() + index) % plugin.instance.countCols();\n      const lastColumnIndex = columnIndex + amount - 1;\n      const removedData = [];\n      const headers = [];\n      const indexes = [];\n\n      rangeEach(originalData.length - 1, (i) => {\n        const column = [];\n        const origRow = originalData[i];\n\n        rangeEach(columnIndex, lastColumnIndex, (j) => {\n          column.push(origRow[instance.toPhysicalColumn(j)]);\n        });\n\n        removedData.push(column);\n      });\n\n      rangeEach(amount - 1, (i) => {\n        indexes.push(instance.toPhysicalColumn(columnIndex + i));\n      });\n\n      if (Array.isArray(instance.getSettings().colHeaders)) {\n        rangeEach(amount - 1, (i) => {\n          headers.push(instance.getSettings().colHeaders[instance.toPhysicalColumn(columnIndex + i)] || null);\n        });\n      }\n\n      const columnsMap = instance.columnIndexMapper.getIndexesSequence();\n      const rowsMap = instance.rowIndexMapper.getIndexesSequence();\n\n      return new UndoRedo.RemoveColumnAction(\n        columnIndex,\n        indexes,\n        removedData,\n        headers,\n        columnsMap,\n        rowsMap,\n        instance.getSettings().fixedColumnsStart,\n        getCellMetas(0, instance.countRows(), columnIndex, lastColumnIndex)\n      );\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n\n  instance.addHook('beforeCellAlignment', (stateBefore, range, type, alignment) => {\n    plugin.done(() => new UndoRedo.CellAlignmentAction(stateBefore, range, type, alignment));\n  });\n\n  instance.addHook('beforeFilter', (conditionsStack, previousConditionsStack) => {\n    plugin.done(() => new UndoRedo.FiltersAction(conditionsStack, previousConditionsStack));\n  });\n\n  instance.addHook('beforeRowMove', (rows, finalIndex) => {\n    if (rows === false) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.RowMoveAction(rows, finalIndex));\n  });\n\n  instance.addHook('beforeColumnMove', (columns, finalIndex) => {\n    if (columns === false) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.ColumnMoveAction(columns, finalIndex));\n  });\n\n  instance.addHook('beforeMergeCells', (cellRange, auto) => {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.MergeCellsAction(instance, cellRange));\n  });\n\n  instance.addHook('afterUnmergeCells', (cellRange, auto) => {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.UnmergeCellsAction(instance, cellRange));\n  });\n\n  instance.addHook('beforeColumnSort', (currentSortConfig, destinationSortConfigs, sortPossible) => {\n    if (!sortPossible) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.ColumnSortAction(currentSortConfig, destinationSortConfigs));\n  });\n\n  // TODO: Why this callback is needed? One test doesn't pass after calling method right after plugin creation (outside the callback).\n  instance.addHook('afterInit', () => {\n    plugin.init();\n  });\n}\n\n/**\n * Stash information about performed actions.\n *\n * @function done\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @param {Function} wrappedAction The action descriptor wrapped in a closure.\n * @param {string} [source] Source of the action. It is defined just for more general actions (not related to plugins).\n */\nUndoRedo.prototype.done = function(wrappedAction, source) {\n  if (this.ignoreNewActions) {\n    return;\n  }\n\n  const isBlockedByDefault = source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';\n\n  if (isBlockedByDefault) {\n    return;\n  }\n\n  const doneActionsCopy = this.doneActions.slice();\n  const continueAction = this.instance.runHooks('beforeUndoStackChange', doneActionsCopy, source);\n\n  if (continueAction === false) {\n    return;\n  }\n\n  const newAction = wrappedAction();\n  const undoneActionsCopy = this.undoneActions.slice();\n\n  this.doneActions.push(newAction);\n\n  this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n  this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n\n  this.undoneActions.length = 0;\n\n  this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n};\n\n/**\n * Undo the last action performed to the table.\n *\n * @function undo\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @fires Hooks#beforeUndo\n * @fires Hooks#afterUndo\n */\nUndoRedo.prototype.undo = function() {\n  if (this.isUndoAvailable()) {\n    const doneActionsCopy = this.doneActions.slice();\n\n    this.instance.runHooks('beforeUndoStackChange', doneActionsCopy);\n\n    const action = this.doneActions.pop();\n\n    this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n\n    const actionClone = deepClone(action);\n\n    const continueAction = this.instance.runHooks('beforeUndo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n\n    const that = this;\n    const undoneActionsCopy = this.undoneActions.slice();\n\n    this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n\n    action.undo(this.instance, () => {\n      that.ignoreNewActions = false;\n      that.undoneActions.push(action);\n    });\n\n    this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n    this.instance.runHooks('afterUndo', actionClone);\n  }\n};\n\n/**\n * Redo the previous action performed to the table (used to reverse an undo).\n *\n * @function redo\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @fires Hooks#beforeRedo\n * @fires Hooks#afterRedo\n */\nUndoRedo.prototype.redo = function() {\n  if (this.isRedoAvailable()) {\n    const undoneActionsCopy = this.undoneActions.slice();\n\n    this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n\n    const action = this.undoneActions.pop();\n\n    this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n\n    const actionClone = deepClone(action);\n\n    const continueAction = this.instance.runHooks('beforeRedo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n\n    const that = this;\n    const doneActionsCopy = this.doneActions.slice();\n\n    this.instance.runHooks('beforeUndoStackChange', doneActionsCopy);\n\n    action.redo(this.instance, () => {\n      that.ignoreNewActions = false;\n      that.doneActions.push(action);\n    });\n\n    this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n    this.instance.runHooks('afterRedo', actionClone);\n  }\n};\n\n/**\n * Checks if undo action is available.\n *\n * @function isUndoAvailable\n * @memberof UndoRedo#\n * @returns {boolean} Return `true` if undo can be performed, `false` otherwise.\n */\nUndoRedo.prototype.isUndoAvailable = function() {\n  return this.doneActions.length > 0;\n};\n\n/**\n * Checks if redo action is available.\n *\n * @function isRedoAvailable\n * @memberof UndoRedo#\n * @returns {boolean} Return `true` if redo can be performed, `false` otherwise.\n */\nUndoRedo.prototype.isRedoAvailable = function() {\n  return this.undoneActions.length > 0;\n};\n\n/**\n * Clears undo history.\n *\n * @function clear\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.clear = function() {\n  this.doneActions.length = 0;\n  this.undoneActions.length = 0;\n};\n\n/**\n * Checks if the plugin is enabled.\n *\n * @function isEnabled\n * @memberof UndoRedo#\n * @returns {boolean}\n */\nUndoRedo.prototype.isEnabled = function() {\n  return this.enabled;\n};\n\n/**\n * Enables the plugin.\n *\n * @function enable\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.enable = function() {\n  if (this.isEnabled()) {\n    return;\n  }\n\n  const hot = this.instance;\n\n  this.enabled = true;\n  exposeUndoRedoMethods(hot);\n\n  this.registerShortcuts();\n  hot.addHook('afterChange', onAfterChange);\n};\n\n/**\n * Disables the plugin.\n *\n * @function disable\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.disable = function() {\n  if (!this.isEnabled()) {\n    return;\n  }\n\n  const hot = this.instance;\n\n  this.enabled = false;\n  removeExposedUndoRedoMethods(hot);\n\n  this.unregisterShortcuts();\n  hot.removeHook('afterChange', onAfterChange);\n};\n\n/**\n * Destroys the instance.\n *\n * @function destroy\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.destroy = function() {\n  this.clear();\n  this.instance = null;\n  this.doneActions = null;\n  this.undoneActions = null;\n};\n\nUndoRedo.Action = function() {};\nUndoRedo.Action.prototype.undo = function() {};\nUndoRedo.Action.prototype.redo = function() {};\n\n/**\n * Change action.\n *\n * @private\n * @param {Array} changes 2D array containing information about each of the edited cells.\n * @param {number[]} selected The cell selection.\n */\nUndoRedo.ChangeAction = function(changes, selected) {\n  this.changes = changes;\n  this.selected = selected;\n  this.actionType = 'change';\n};\ninherit(UndoRedo.ChangeAction, UndoRedo.Action);\n\nUndoRedo.ChangeAction.prototype.undo = function(instance, undoneCallback) {\n  const data = deepClone(this.changes);\n  const emptyRowsAtTheEnd = instance.countEmptyRows(true);\n  const emptyColsAtTheEnd = instance.countEmptyCols(true);\n\n  for (let i = 0, len = data.length; i < len; i++) {\n    data[i].splice(3, 1);\n  }\n\n  instance.addHookOnce('afterChange', undoneCallback);\n\n  instance.setDataAtCell(data, null, null, 'UndoRedo.undo');\n\n  for (let i = 0, len = data.length; i < len; i++) {\n    const [row, column] = data[i];\n\n    if (instance.getSettings().minSpareRows &&\n        row + 1 + instance.getSettings().minSpareRows === instance.countRows() &&\n        emptyRowsAtTheEnd === instance.getSettings().minSpareRows) {\n\n      instance.alter('remove_row', parseInt(row + 1, 10), instance.getSettings().minSpareRows);\n      instance.undoRedo.doneActions.pop();\n    }\n\n    if (instance.getSettings().minSpareCols &&\n        column + 1 + instance.getSettings().minSpareCols === instance.countCols() &&\n        emptyColsAtTheEnd === instance.getSettings().minSpareCols) {\n\n      instance.alter('remove_col', parseInt(column + 1, 10), instance.getSettings().minSpareCols);\n      instance.undoRedo.doneActions.pop();\n    }\n  }\n\n  const selectedLast = instance.getSelectedLast();\n\n  if (selectedLast !== undefined) {\n    const [changedRow, changedColumn] = data[0];\n    const [selectedRow, selectedColumn] = selectedLast;\n    const firstFullyVisibleRow = instance.view.getFirstFullyVisibleRow();\n    const firstFullyVisibleColumn = instance.view.getFirstFullyVisibleColumn();\n    const isInVerticalViewPort = changedRow >= firstFullyVisibleRow;\n    const isInHorizontalViewPort = changedColumn >= firstFullyVisibleColumn;\n    const isInViewport = isInVerticalViewPort && isInHorizontalViewPort;\n    const isChangedSelection = selectedRow !== changedRow || selectedColumn !== changedColumn;\n\n    // Performing scroll only when selection has been changed right after editing a cell.\n    if (isInViewport === false && isChangedSelection === true) {\n      const scrollConfig = {\n        row: changedRow,\n        col: changedColumn,\n      };\n\n      if (isInVerticalViewPort === false) {\n        scrollConfig.verticalSnap = 'top';\n      }\n\n      if (isInHorizontalViewPort === false) {\n        scrollConfig.horizontalSnap = 'start';\n      }\n\n      instance.scrollViewportTo(scrollConfig);\n    }\n  }\n\n  instance.selectCells(this.selected, false, false);\n};\nUndoRedo.ChangeAction.prototype.redo = function(instance, onFinishCallback) {\n  const data = deepClone(this.changes);\n\n  for (let i = 0, len = data.length; i < len; i++) {\n    data[i].splice(2, 1);\n  }\n\n  instance.addHookOnce('afterChange', onFinishCallback);\n  instance.setDataAtCell(data, null, null, 'UndoRedo.redo');\n\n  if (this.selected) {\n    instance.selectCells(this.selected, false, false);\n  }\n};\n\n/**\n * Create row action.\n *\n * @private\n * @param {number} index The visual row index.\n * @param {number} amount The number of created rows.\n */\nUndoRedo.CreateRowAction = function(index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_row';\n};\ninherit(UndoRedo.CreateRowAction, UndoRedo.Action);\n\nUndoRedo.CreateRowAction.prototype.undo = function(instance, undoneCallback) {\n  const rowCount = instance.countRows();\n  const minSpareRows = instance.getSettings().minSpareRows;\n\n  if (this.index >= rowCount && this.index - minSpareRows < rowCount) {\n    this.index -= minSpareRows; // work around the situation where the needed row was removed due to an 'undo' of a made change\n  }\n\n  instance.addHookOnce('afterRemoveRow', undoneCallback);\n  instance.alter('remove_row', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateRowAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterCreateRow', redoneCallback);\n  instance.alter('insert_row_above', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove row action.\n *\n * @private\n * @param {number} index The visual row index.\n * @param {Array} data The removed data.\n * @param {number} fixedRowsBottom Number of fixed rows on the bottom. Remove row action change it sometimes.\n * @param {number} fixedRowsTop Number of fixed rows on the top. Remove row action change it sometimes.\n * @param {Array} rowIndexesSequence Row index sequence taken from the row index mapper.\n * @param {Array} removedCellMetas List of removed cell metas.\n */\nUndoRedo.RemoveRowAction = function(index, data, fixedRowsBottom, fixedRowsTop, rowIndexesSequence, removedCellMetas) {\n  this.index = index;\n  this.data = data;\n  this.actionType = 'remove_row';\n  this.fixedRowsBottom = fixedRowsBottom;\n  this.fixedRowsTop = fixedRowsTop;\n  this.rowIndexesSequence = rowIndexesSequence;\n  this.removedCellMetas = removedCellMetas;\n};\ninherit(UndoRedo.RemoveRowAction, UndoRedo.Action);\n\nUndoRedo.RemoveRowAction.prototype.undo = function(instance, undoneCallback) {\n  const settings = instance.getSettings();\n  const changes = [];\n\n  // Changing by the reference as `updateSettings` doesn't work the best.\n  settings.fixedRowsBottom = this.fixedRowsBottom;\n  settings.fixedRowsTop = this.fixedRowsTop;\n\n  // Prepare the change list to fill the source data.\n  this.data.forEach((dataRow, rowIndexDelta) => {\n    Object.keys(dataRow).forEach((columnProp) => {\n      const columnIndex = parseInt(columnProp, 10);\n\n      changes.push([this.index + rowIndexDelta, isNaN(columnIndex) ? columnProp : columnIndex, dataRow[columnProp]]);\n    });\n  });\n\n  instance.alter('insert_row_above', this.index, this.data.length, 'UndoRedo.undo');\n\n  this.removedCellMetas.forEach(([rowIndex, columnIndex, cellMeta]) => {\n    instance.setCellMetaObject(rowIndex, columnIndex, cellMeta);\n  });\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  instance.setSourceDataAtCell(changes, null, null, 'UndoRedo.undo');\n\n  instance.rowIndexMapper.setIndexesSequence(this.rowIndexesSequence);\n};\n\nUndoRedo.RemoveRowAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveRow', redoneCallback);\n  instance.alter('remove_row', this.index, this.data.length, 'UndoRedo.redo');\n};\n\n/**\n * Create column action.\n *\n * @private\n * @param {number} index The visual column index.\n * @param {number} amount The number of created columns.\n */\nUndoRedo.CreateColumnAction = function(index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_col';\n};\ninherit(UndoRedo.CreateColumnAction, UndoRedo.Action);\n\nUndoRedo.CreateColumnAction.prototype.undo = function(instance, undoneCallback) {\n  instance.addHookOnce('afterRemoveCol', undoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateColumnAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterCreateCol', redoneCallback);\n  instance.alter('insert_col_start', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove column action.\n *\n * @private\n * @param {number} index The visual column index.\n * @param {number[]} indexes The visual column indexes.\n * @param {Array} data The removed data.\n * @param {Array} headers The header values.\n * @param {number[]} columnPositions The column position.\n * @param {number[]} rowPositions The row position.\n * @param {number} fixedColumnsStart Number of fixed columns on the left. Remove column action change it sometimes.\n * @param {Array} removedCellMetas List of removed cell metas.\n */\nUndoRedo.RemoveColumnAction = function(index, indexes, data, headers, columnPositions, rowPositions, fixedColumnsStart, removedCellMetas) { // eslint-disable-line max-len\n  this.index = index;\n  this.indexes = indexes;\n  this.data = data;\n  this.amount = this.data[0].length;\n  this.headers = headers;\n  this.columnPositions = columnPositions.slice(0);\n  this.rowPositions = rowPositions.slice(0);\n  this.actionType = 'remove_col';\n  this.fixedColumnsStart = fixedColumnsStart;\n  this.removedCellMetas = removedCellMetas;\n};\ninherit(UndoRedo.RemoveColumnAction, UndoRedo.Action);\n\nUndoRedo.RemoveColumnAction.prototype.undo = function(instance, undoneCallback) {\n  const settings = instance.getSettings();\n\n  // Changing by the reference as `updateSettings` doesn't work the best.\n  settings.fixedColumnsStart = this.fixedColumnsStart;\n\n  const ascendingIndexes = this.indexes.slice(0).sort();\n  const sortByIndexes = (elem, j, arr) => arr[this.indexes.indexOf(ascendingIndexes[j])];\n\n  const removedDataLength = this.data.length;\n  const sortedData = [];\n\n  for (let rowIndex = 0; rowIndex < removedDataLength; rowIndex++) {\n    sortedData.push(arrayMap(this.data[rowIndex], sortByIndexes));\n  }\n\n  const sortedHeaders = arrayMap(this.headers, sortByIndexes);\n  const changes = [];\n\n  instance.alter('insert_col_start', this.indexes[0], this.indexes.length, 'UndoRedo.undo');\n\n  arrayEach(instance.getSourceDataArray(), (rowData, rowIndex) => {\n    arrayEach(ascendingIndexes, (changedIndex, contiquesIndex) => {\n      rowData[changedIndex] = sortedData[rowIndex][contiquesIndex];\n\n      changes.push([rowIndex, changedIndex, rowData[changedIndex]]);\n    });\n  });\n\n  instance.setSourceDataAtCell(changes, undefined, undefined, 'UndoRedo.undo');\n\n  if (typeof this.headers !== 'undefined') {\n    arrayEach(sortedHeaders, (headerData, columnIndex) => {\n      instance.getSettings().colHeaders[ascendingIndexes[columnIndex]] = headerData;\n    });\n  }\n\n  this.removedCellMetas.forEach(([rowIndex, columnIndex, cellMeta]) => {\n    instance.setCellMetaObject(rowIndex, columnIndex, cellMeta);\n  });\n\n  instance.batchExecution(() => {\n    // Restore row sequence in a case when all columns are removed. the original\n    // row sequence is lost in that case.\n    instance.rowIndexMapper.setIndexesSequence(this.rowPositions);\n    instance.columnIndexMapper.setIndexesSequence(this.columnPositions);\n  }, true);\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  instance.render();\n};\n\nUndoRedo.RemoveColumnAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveCol', redoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Cell alignment action.\n *\n * @private\n * @param {Array} stateBefore The previous state.\n * @param {object} range The cell range.\n * @param {string} type The type of the alignment (\"top\", \"left\", \"bottom\" or \"right\").\n * @param {string} alignment The alignment CSS class.\n */\nUndoRedo.CellAlignmentAction = function(stateBefore, range, type, alignment) {\n  this.stateBefore = stateBefore;\n  this.range = range;\n  this.type = type;\n  this.alignment = alignment;\n};\nUndoRedo.CellAlignmentAction.prototype.undo = function(instance, undoneCallback) {\n  arrayEach(this.range, (range) => {\n    range.forAll((row, col) => {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        instance.setCellMeta(row, col, 'className', this.stateBefore[row][col] || ' htLeft');\n      }\n    });\n  });\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.render();\n};\nUndoRedo.CellAlignmentAction.prototype.redo = function(instance, undoneCallback) {\n  align(this.range, this.type, this.alignment, (row, col) => instance.getCellMeta(row, col),\n    (row, col, key, value) => instance.setCellMeta(row, col, key, value));\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.render();\n};\n\n/**\n * Filters action.\n *\n * @private\n * @param {Array} conditionsStack An array of the filter conditions.\n * @param {Array} previousConditionsStack An array of the previous filter conditions.\n */\nUndoRedo.FiltersAction = function(conditionsStack, previousConditionsStack) {\n  this.previousConditionsStack = previousConditionsStack;\n  this.conditionsStack = conditionsStack;\n  this.actionType = 'filter';\n};\ninherit(UndoRedo.FiltersAction, UndoRedo.Action);\n\nUndoRedo.FiltersAction.prototype.undo = function(instance, undoneCallback) {\n  const filters = instance.getPlugin('filters');\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  if (this.previousConditionsStack) {\n    filters.conditionCollection.importAllConditions(this.previousConditionsStack);\n  }\n\n  filters.filter();\n};\nUndoRedo.FiltersAction.prototype.redo = function(instance, redoneCallback) {\n  const filters = instance.getPlugin('filters');\n\n  instance.addHookOnce('afterViewRender', redoneCallback);\n\n  filters.conditionCollection.importAllConditions(this.conditionsStack);\n  filters.filter();\n};\n\n/**\n * Merge Cells action.\n *\n * @util\n */\nclass MergeCellsAction extends UndoRedo.Action {\n  constructor(instance, cellRange) {\n    super();\n    this.cellRange = cellRange;\n\n    const topStartCorner = this.cellRange.getTopStartCorner();\n    const bottomEndCorner = this.cellRange.getBottomEndCorner();\n\n    this.rangeData = instance.getData(\n      topStartCorner.row,\n      topStartCorner.col,\n      bottomEndCorner.row,\n      bottomEndCorner.col\n    );\n  }\n\n  undo(instance, undoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', undoneCallback);\n\n    mergeCellsPlugin.unmergeRange(this.cellRange, true);\n\n    const topStartCorner = this.cellRange.getTopStartCorner();\n\n    instance.populateFromArray(\n      topStartCorner.row,\n      topStartCorner.col,\n      this.rangeData,\n      undefined,\n      undefined,\n      'MergeCells'\n    );\n  }\n\n  redo(instance, redoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', redoneCallback);\n\n    mergeCellsPlugin.mergeRange(this.cellRange);\n  }\n}\nUndoRedo.MergeCellsAction = MergeCellsAction;\n\n/**\n * Unmerge Cells action.\n *\n * @util\n */\nclass UnmergeCellsAction extends UndoRedo.Action {\n  constructor(instance, cellRange) {\n    super();\n    this.cellRange = cellRange;\n  }\n\n  undo(instance, undoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', undoneCallback);\n\n    mergeCellsPlugin.mergeRange(this.cellRange, true);\n  }\n\n  redo(instance, redoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', redoneCallback);\n\n    mergeCellsPlugin.unmergeRange(this.cellRange, true);\n    instance.render();\n  }\n}\nUndoRedo.UnmergeCellsAction = UnmergeCellsAction;\n\n/**\n * ManualRowMove action.\n *\n * @TODO removeRow undo should works on logical index\n * @private\n * @param {number[]} rows An array with moved rows.\n * @param {number} finalIndex The destination index.\n */\nUndoRedo.RowMoveAction = function(rows, finalIndex) {\n  this.rows = rows.slice();\n  this.finalRowIndex = finalIndex;\n  this.actionType = 'row_move';\n};\ninherit(UndoRedo.RowMoveAction, UndoRedo.Action);\n\nUndoRedo.RowMoveAction.prototype.undo = function(instance, undoneCallback) {\n  const manualRowMove = instance.getPlugin('manualRowMove');\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  const rowMoves = getMoves(this.rows, this.finalRowIndex, instance.rowIndexMapper.getNumberOfIndexes());\n\n  rowMoves.reverse().forEach(({ from, to }) => {\n    if (from < to) {\n      to -= 1;\n    }\n\n    manualRowMove.moveRow(to, from);\n  });\n\n  instance.render();\n  instance.deselectCell();\n  instance.selectRows(this.rows[0], this.rows[0] + this.rows.length - 1);\n};\nUndoRedo.RowMoveAction.prototype.redo = function(instance, redoneCallback) {\n  const manualRowMove = instance.getPlugin('manualRowMove');\n\n  instance.addHookOnce('afterViewRender', redoneCallback);\n  manualRowMove.moveRows(this.rows.slice(), this.finalRowIndex);\n  instance.render();\n\n  instance.deselectCell();\n  instance.selectRows(this.finalRowIndex, this.finalRowIndex + this.rows.length - 1);\n};\n\n/**\n * ManualColumnMove action.\n *\n * @private\n * @param {number[]} columns An array with moved columns.\n * @param {number} finalIndex The destination index.\n */\nUndoRedo.ColumnMoveAction = function(columns, finalIndex) {\n  this.columns = columns.slice();\n  this.finalColumnIndex = finalIndex;\n  this.actionType = 'col_move';\n};\ninherit(UndoRedo.ColumnMoveAction, UndoRedo.Action);\n\nUndoRedo.ColumnMoveAction.prototype.undo = function(instance, undoneCallback) {\n  const manualColumnMove = instance.getPlugin('manualColumnMove');\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  const columnMoves = getMoves(this.columns, this.finalColumnIndex, instance.columnIndexMapper.getNumberOfIndexes());\n\n  columnMoves.reverse().forEach(({ from, to }) => {\n    if (from < to) {\n      to -= 1;\n    }\n\n    manualColumnMove.moveColumn(to, from);\n  });\n\n  instance.render();\n  instance.deselectCell();\n  instance.selectColumns(this.columns[0], this.columns[0] + this.columns.length - 1);\n};\nUndoRedo.ColumnMoveAction.prototype.redo = function(instance, redoneCallback) {\n  const manualColumnMove = instance.getPlugin('manualColumnMove');\n\n  instance.addHookOnce('afterViewRender', redoneCallback);\n  manualColumnMove.moveColumns(this.columns.slice(), this.finalColumnIndex);\n  instance.render();\n\n  instance.deselectCell();\n  instance.selectColumns(this.finalColumnIndex, this.finalColumnIndex + this.columns.length - 1);\n};\n\n/**\n * ColumnSort action.\n *\n * @private\n * @param {Array} currentSortState The current sort state.\n * @param {Array} newSortState The new sort state.\n */\nUndoRedo.ColumnSortAction = function(currentSortState, newSortState) {\n  this.previousSortState = currentSortState;\n  this.nextSortState = newSortState;\n};\ninherit(UndoRedo.ColumnSortAction, UndoRedo.Action);\n\nUndoRedo.ColumnSortAction.prototype.undo = function(instance, undoneCallback) {\n  const sortPlugin = instance.getPlugin('columnSorting');\n  const multiSortPlugin = instance.getPlugin('multiColumnSorting');\n  const enabledSortPlugin = multiSortPlugin.isEnabled() ? multiSortPlugin : sortPlugin;\n\n  if (this.previousSortState.length) {\n    enabledSortPlugin.sort(this.previousSortState);\n\n  } else {\n    enabledSortPlugin.clearSort();\n  }\n\n  undoneCallback();\n};\n\nUndoRedo.ColumnSortAction.prototype.redo = function(instance, redoneCallback) {\n  const sortPlugin = instance.getPlugin('columnSorting');\n  const multiSortPlugin = instance.getPlugin('multiColumnSorting');\n  const enabledSortPlugin = multiSortPlugin.isEnabled() ? multiSortPlugin : sortPlugin;\n\n  enabledSortPlugin.sort(this.nextSortState);\n\n  redoneCallback();\n};\n\n/**\n * Enabling and disabling plugin and attaching its to an instance.\n *\n * @private\n */\nUndoRedo.prototype.init = function() {\n  const settings = this.instance.getSettings().undo;\n  const pluginEnabled = typeof settings === 'undefined' || settings;\n\n  if (!this.instance.undoRedo) {\n    this.instance.undoRedo = this;\n  }\n\n  if (pluginEnabled) {\n    this.instance.undoRedo.enable();\n\n  } else {\n    this.instance.undoRedo.disable();\n  }\n};\n\n/**\n * Registers shortcuts responsible for performing undo/redo.\n *\n * @private\n */\nUndoRedo.prototype.registerShortcuts = function() {\n  const shortcutManager = this.instance.getShortcutManager();\n  const gridContext = shortcutManager.getContext('grid');\n  const runOnlyIf = (event) => {\n    return !event.altKey; // right ALT in some systems triggers ALT+CTR\n  };\n  const config = {\n    runOnlyIf,\n    group: SHORTCUTS_GROUP,\n  };\n\n  gridContext.addShortcuts([{\n    keys: [['Control/Meta', 'z']],\n    callback: () => {\n      this.undo();\n    },\n  }, {\n    keys: [['Control/Meta', 'y'], ['Control/Meta', 'Shift', 'z']],\n    callback: () => {\n      this.redo();\n    },\n  }], config);\n};\n\n/**\n * Unregister shortcuts responsible for performing undo/redo.\n *\n * @private\n */\nUndoRedo.prototype.unregisterShortcuts = function() {\n  const shortcutManager = this.instance.getShortcutManager();\n  const gridContext = shortcutManager.getContext('grid');\n\n  gridContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n};\n\n/**\n * @param {Array} changes 2D array containing information about each of the edited cells.\n * @param {string} source String that identifies source of hook call.\n * @returns {boolean}\n */\nfunction onAfterChange(changes, source) {\n  const instance = this;\n\n  if (source === 'loadData') {\n    return instance.undoRedo.clear();\n  }\n}\n\n/**\n * @param {Core} instance The Handsontable instance.\n */\nfunction exposeUndoRedoMethods(instance) {\n  /**\n   * {@link UndoRedo#undo}.\n   *\n   * @alias undo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.undo = function() {\n    return instance.undoRedo.undo();\n  };\n\n  /**\n   * {@link UndoRedo#redo}.\n   *\n   * @alias redo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.redo = function() {\n    return instance.undoRedo.redo();\n  };\n\n  /**\n   * {@link UndoRedo#isUndoAvailable}.\n   *\n   * @alias isUndoAvailable\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.isUndoAvailable = function() {\n    return instance.undoRedo.isUndoAvailable();\n  };\n\n  /**\n   * {@link UndoRedo#isRedoAvailable}.\n   *\n   * @alias isRedoAvailable\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.isRedoAvailable = function() {\n    return instance.undoRedo.isRedoAvailable();\n  };\n\n  /**\n   * {@link UndoRedo#clear}.\n   *\n   * @alias clearUndo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.clearUndo = function() {\n    return instance.undoRedo.clear();\n  };\n}\n\n/**\n * @param {Core} instance The Handsontable instance.\n */\nfunction removeExposedUndoRedoMethods(instance) {\n  delete instance.undo;\n  delete instance.redo;\n  delete instance.isUndoAvailable;\n  delete instance.isRedoAvailable;\n  delete instance.clearUndo;\n}\n\nconst hook = Hooks.getSingleton();\n\nhook.add('afterUpdateSettings', function() {\n  this.getPlugin('undoRedo')?.init();\n});\n\nhook.register('beforeUndo');\nhook.register('afterUndo');\nhook.register('beforeRedo');\nhook.register('afterRedo');\n\nUndoRedo.PLUGIN_KEY = PLUGIN_KEY;\nUndoRedo.SETTING_KEYS = true;\n\nexport default UndoRedo;\n","'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n  fromEntries: function fromEntries(iterable) {\n    var obj = {};\n    iterate(iterable, function (k, v) {\n      createProperty(obj, k, v);\n    }, { AS_ENTRIES: true });\n    return obj;\n  }\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_RECORD = !!(options && options.IS_RECORD);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal', condition);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_RECORD) {\n    iterator = iterable.iterator;\n  } else if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = IS_RECORD ? iterable.next : iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n  else object[key] = value;\n};\n","/**\n * @param {Core} Handsontable The Handsontable instance.\n */\nexport default function jQueryWrapper(Handsontable) {\n  // eslint-disable-next-line\n  const jQuery = typeof window === 'undefined' ? false : window.jQuery;\n\n  if (!jQuery) {\n    return;\n  }\n\n  jQuery.fn.handsontable = function(action, ...args) {\n    const $this = this.first(); // Use only first element from list\n    let instance = $this.data('handsontable');\n\n    // Init case\n    if (typeof action !== 'string') {\n      const userSettings = action || {};\n\n      if (instance) {\n        instance.updateSettings(userSettings);\n\n      } else {\n        instance = new Handsontable.Core($this[0], userSettings);\n        $this.data('handsontable', instance);\n        instance.init();\n      }\n\n      return $this;\n    }\n\n    let output;\n\n    // Action case\n    if (instance) {\n      if (typeof instance[action] !== 'undefined') {\n        output = instance[action].call(instance, ...args);\n\n        if (action === 'destroy') {\n          $this.removeData();\n        }\n\n      } else {\n        throw new Error(`Handsontable do not provide action: ${action}`);\n      }\n    }\n\n    return output;\n  };\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Handsontable, { CellCoords, CellRange } from './base';\nimport { registerAllModules } from './registry';\nimport EventManager, { getListenersCounter } from './eventManager';\nimport { getRegisteredMapsCounter } from './translations';\n\nimport jQueryWrapper from './helpers/wrappers/jquery';\n\nimport GhostTable from './utils/ghostTable';\nimport * as parseTableHelpers from './utils/parseTable';\nimport * as arrayHelpers from './helpers/array';\nimport * as browserHelpers from './helpers/browser';\nimport * as dataHelpers from './helpers/data';\nimport * as dateHelpers from './helpers/date';\nimport * as featureHelpers from './helpers/feature';\nimport * as functionHelpers from './helpers/function';\nimport * as mixedHelpers from './helpers/mixed';\nimport * as numberHelpers from './helpers/number';\nimport * as objectHelpers from './helpers/object';\nimport * as stringHelpers from './helpers/string';\nimport * as unicodeHelpers from './helpers/unicode';\nimport * as domHelpers from './helpers/dom/element';\nimport * as domEventHelpers from './helpers/dom/event';\n\nimport {\n  getRegisteredEditorNames,\n  getEditor,\n  registerEditor,\n} from './editors/registry';\nimport {\n  getRegisteredRendererNames,\n  getRenderer,\n  registerRenderer,\n} from './renderers/registry';\nimport {\n  getRegisteredValidatorNames,\n  getValidator,\n  registerValidator,\n} from './validators/registry';\nimport {\n  getRegisteredCellTypeNames,\n  getCellType,\n  registerCellType,\n} from './cellTypes/registry';\nimport {\n  getPluginsNames,\n  getPlugin,\n  registerPlugin,\n} from './plugins/registry';\nimport { BasePlugin } from './plugins/base';\n\nregisterAllModules();\njQueryWrapper(Handsontable);\n\n// TODO: Remove this exports after rewrite tests about this module\nHandsontable.__GhostTable = GhostTable;\n\nHandsontable._getListenersCounter = getListenersCounter; // For MemoryLeak tests\nHandsontable._getRegisteredMapsCounter = getRegisteredMapsCounter; // For MemoryLeak tests\nHandsontable.EventManager = EventManager;\n\n// Export all helpers to the Handsontable object\nconst HELPERS = [\n  arrayHelpers,\n  browserHelpers,\n  dataHelpers,\n  dateHelpers,\n  featureHelpers,\n  functionHelpers,\n  mixedHelpers,\n  numberHelpers,\n  objectHelpers,\n  stringHelpers,\n  unicodeHelpers,\n  parseTableHelpers,\n];\nconst DOM = [\n  domHelpers,\n  domEventHelpers,\n];\n\nHandsontable.helper = {};\nHandsontable.dom = {};\n\n// Fill general helpers.\narrayHelpers.arrayEach(HELPERS, (helper) => {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (key) => {\n    if (key.charAt(0) !== '_') {\n      Handsontable.helper[key] = helper[key];\n    }\n  });\n});\n\n// Fill DOM helpers.\narrayHelpers.arrayEach(DOM, (helper) => {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (key) => {\n    if (key.charAt(0) !== '_') {\n      Handsontable.dom[key] = helper[key];\n    }\n  });\n});\n\n// Export cell types.\nHandsontable.cellTypes = Handsontable.cellTypes ?? {};\n\narrayHelpers.arrayEach(getRegisteredCellTypeNames(), (cellTypeName) => {\n  Handsontable.cellTypes[cellTypeName] = getCellType(cellTypeName);\n});\n\nHandsontable.cellTypes.registerCellType = registerCellType;\nHandsontable.cellTypes.getCellType = getCellType;\n\n// Export all registered editors from the Handsontable.\nHandsontable.editors = Handsontable.editors ?? {};\n\narrayHelpers.arrayEach(getRegisteredEditorNames(), (editorName) => {\n  Handsontable.editors[`${stringHelpers.toUpperCaseFirst(editorName)}Editor`] = getEditor(editorName);\n});\n\nHandsontable.editors.registerEditor = registerEditor;\nHandsontable.editors.getEditor = getEditor;\n\n// Export all registered renderers from the Handsontable.\nHandsontable.renderers = Handsontable.renderers ?? {};\n\narrayHelpers.arrayEach(getRegisteredRendererNames(), (rendererName) => {\n  const renderer = getRenderer(rendererName);\n\n  if (rendererName === 'base') {\n    Handsontable.renderers.cellDecorator = renderer;\n  }\n  Handsontable.renderers[`${stringHelpers.toUpperCaseFirst(rendererName)}Renderer`] = renderer;\n});\n\nHandsontable.renderers.registerRenderer = registerRenderer;\nHandsontable.renderers.getRenderer = getRenderer;\n\n// Export all registered validators from the Handsontable.\nHandsontable.validators = Handsontable.validators ?? {};\n\narrayHelpers.arrayEach(getRegisteredValidatorNames(), (validatorName) => {\n  Handsontable.validators[`${stringHelpers.toUpperCaseFirst(validatorName)}Validator`] = getValidator(validatorName);\n});\n\nHandsontable.validators.registerValidator = registerValidator;\nHandsontable.validators.getValidator = getValidator;\n\n// Export all registered plugins from the Handsontable.\n// Make sure to initialize the plugin dictionary as an empty object. Otherwise, while\n// transpiling the files into ES and CommonJS format, the injected CoreJS helper\n// `import \"core-js/modules/es.object.get-own-property-names\";` won't be processed\n// by the `./config/plugin/babel/add-import-extension` babel plugin. Thus, the distribution\n// files will be broken. The reason is not known right now (probably it's caused by bug in\n// the Babel or missing something in the plugin).\nHandsontable.plugins = Handsontable.plugins ?? {};\n\narrayHelpers.arrayEach(getPluginsNames(), (pluginName) => {\n  Handsontable.plugins[pluginName] = getPlugin(pluginName);\n});\n\nHandsontable.plugins[`${stringHelpers.toUpperCaseFirst(BasePlugin.PLUGIN_KEY)}Plugin`] = BasePlugin;\n\nHandsontable.plugins.registerPlugin = registerPlugin;\nHandsontable.plugins.getPlugin = getPlugin;\n\nexport {\n  CellCoords,\n  CellRange,\n};\nexport default Handsontable;\n"],"names":["require","_core","_interopRequireDefault","_rootInstance","_dataMap","_pluginHooks","_registry","_registry2","_textType","_baseEditor","_src","exports","CellCoords","CellRange","registerCellType","TextCellType","Handsontable","editors","BaseEditor","rootElement","userSettings","instance","Core","rootInstanceSymbol","init","arguments","length","undefined","DefaultSettings","metaSchemaFactory","hooks","Hooks","getSingleton","packageName","buildDate","version","languages","dictionaryKeys","getLanguageDictionary","getLanguagesDictionaries","registerLanguageDictionary","getTranslatedPhrase","_default","default","_element","_function","_mixed","_browser","_editorManager","_eventManager","_object","_focusManager","_array","_parseTable","_registry3","_registry4","_string","_number","_tableView","_dataSource","_data","_translations","_registry5","_utils","_selection","_index3","_uniqueMap","_shortcuts","_shortcutContexts","activeGuid","foreignHotInstances","Map","deprecationWarns","Set","_userSettings$layoutD","_this","eventManager","EventManager","datamap","dataSource","grid","editorManager","focusManager","viewportScroller","firstRun","hasValidParameter","registerAsRootInstance","rootDocument","ownerDocument","rootWindow","defaultView","isDestroyed","renderSuspendedCounter","executionSuspendedCounter","layoutDirection","rootElementDirection","includes","getComputedStyle","direction","setAttribute","isRtl","isLtr","getDirectionFactor","language","getValidLanguageCode","metaManager","MetaManager","DynamicCellMetaMod","ExtendMetaPropertiesMod","tableMeta","getTableMeta","globalMeta","getGlobalMeta","pluginsRegistry","createUniqueMap","container","createElement","renderCall","insertBefore","firstChild","isRootInstance","_injectProductInfo","licenseKey","guid","randomString","set","columnIndexMapper","IndexMapper","rowIndexMapper","addLocalHook","source","runHooks","DataSource","id","substring","visualToRenderableCoords","coords","row","visualRow","col","visualColumn","_createCellCoords","getRenderableFromVisualIndex","renderableToVisualCoords","renderableRow","renderableColumn","getVisualFromRenderableIndex","findFirstNonHiddenRenderableRow","visualRowFrom","visualRowTo","dir","minIndex","Math","min","maxIndex","max","rowIndex","getNearestNotHiddenIndex","findFirstNonHiddenRenderableColumn","visualColumnFrom","visualColumnTo","columnIndex","selection","Selection","countCols","countRows","propToCol","prop","isEditorOpened","getActiveEditor","isOpened","countRenderableColumns","view","countRenderableRows","countRowHeaders","countColHeaders","countRenderableRowsInRange","countRenderableColumnsInRange","getShortcutManager","createCellCoords","column","createCellRange","highlight","from","to","_createCellRange","isDisabledCellSelection","getSettings","disableVisualSelection","getCellMeta","onIndexMapperCacheUpdate","_ref","hiddenIndexesChanged","commit","cellCoords","isLastSelectionLayer","preventScrolling","createObjectPropListener","selectionRange","getSelectedRange","current","selectionLayerLevel","size","colToProp","isTouched","value","scrollTo","isSelectedByRowHeader","isSelectedByColumnHeader","addClass","removeClass","getSelectionSource","closeEditor","render","prepareEditor","cellRanges","isMultiple","changedIsMultiple","_len","args","Array","_key","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","_len11","_key11","_len12","_key12","_len13","_key13","_len14","_key14","_len15","_key15","totalRows","alter","totalCols","action","index","_index","_index2","amount","keepEmptyRows","normalizeIndexesGroup","indexes","sortedIndexes","sort","_ref2","_ref3","indexA","indexB","normalizedIndexes","arrayReduce","acc","_ref4","groupIndex","groupAmount","previousItem","prevIndex","prevAmount","prevLastIndex","amountToAdd","push","numberOfSourceRows","countSourceRows","maxRows","insertRowMode","delta","rowDelta","startPhysicalIndex","startRowPhysicalIndex","createRow","mode","shiftRows","toVisualRow","insertColumnMode","countSourceCols","colDelta","startColumnPhysicalIndex","createCol","isArray","colHeaders","spliceArray","toVisualColumn","prototype","splice","apply","shiftColumns","removeRow","offset","arrayEach","_ref5","calcIndex","isEmpty","Number","isInteger","wasRemoved","isSelected","getSelectedRangeLast","deselect","refresh","fixedRowsTop","fixedRowsBottom","removeCol","_ref6","physicalColumnIndex","toPhysicalColumn","totalColumns","fixedColumnsStart","Error","adjustRowsAndCols","minRows","minSpareRows","minCols","minSpareCols","nrOfRows","emptyRows","countEmptyRows","emptyRowsMissing","rowsToCreate","emptyCols","countEmptyCols","nrOfColumns","columns","colsToCreate","dataType","emptyColsMissing","maxCols","adjustElementsSize","populateFromArray","start","input","end","method","r","rlen","c","clen","setData","newDataByColumns","startRow","startColumn","columnsPopulationEnd","rowsPopulationEnd","isObject","populatedDataByColumns","pivot","numberOfDataColumns","numberOfColumnsToPopulate","pushedDownDataByRows","getData","slice","pushedDownDataByColumns","concat","fill","numberOfDataRows","numberOfRowsToPopulate","pushedRightDataByRows","map","rowData","i","skippedRow","skippedColumn","pushData","cellMeta","getInputValue","rowValue","rowInputLength","rowSelectionLength","allowInsertRow","colInputLength","colSelectionLength","skipRowOnPaste","allowInsertColumn","skipColumnOnPaste","readOnly","orgValue","getDataAtCell","orgValueSchema","duckSchema","valueSchema","isObjectEqual","deepClone","setDataAtCell","setLanguage","languageCode","normalizedLanguageCode","normalizeLanguageCode","hasLanguageDictionary","warnUserAboutLanguageRegistration","setClassName","className","classSettings","element","table","globalMetaSettingsArray","settingsArray","stringToArray","classNameToRemove","getDifferenceOfArrays","classNameToAdd","data","isMobileBrowser","isIpadOS","updateSettings","TableView","EditorManager","getInstance","createViewportScroller","FocusManager","installFocusCatcher","forceFullRender","offsetParent","observeVisibilityChangeOnce","_wt","wtOverlays","updateLastSpreaderSize","ValidatorsQueue","resolved","validatorsInQueue","valid","addValidatorToQueue","removeValidatorFormQueue","checkIfQueueIsEmpty","onQueueEmpty","getParsedNumber","numericData","unifiedNumericData","replace","isNaN","parseFloat","validateChanges","changes","callback","activeEditor","waitingForValidator","shouldBeCanceled","cancelChanges","newValue","visualCol","cellProperties","Object","getPrototypeOf","type","isNumericLike","getCellValidator","validateCell","cellPropertiesReference","result","allowInvalid","applyChanges","skipThisChange","numberOfCreatedRows","numberOfCreatedColumns","hasChanges","isDefined","refreshValue","validator","done","canBeValidated","hidden","td","getCell","nodeName","getSetting","isRegExp","expression","cellValue","validatorCallback","test","isFunction","_registerImmediate","call","setDataInputToArray","propOrCol","processChanges","beforeChangeResult","filteredChanges","filter","change","changeSource","ilen","getAtCell","toPhysicalRow","processedChanges","setDataAtRowProp","listen","isListening","forEach","foreignHot","unlisten","destroyEditor","revertOriginal","prepareEditorIfNeeded","endRow","endCol","spliceCol","_len16","elements","_key16","spliceRow","_len17","_key17","getSelected","arrayMap","_ref7","getSelectedLast","selected","selectedRange","emptySelectedCells","cellRange","isSingleHeader","topStart","getTopStartCorner","bottomEnd","getBottomEndCorner","rangeEach","isRenderSuspended","suspendRender","resumeRender","nextValue","batchRender","wrappedOperations","isExecutionSuspended","suspendExecution","suspendOperations","resumeExecution","forceFlushChanges","resumeOperations","batchExecution","batch","refreshDimensions","width","lastWidth","height","lastHeight","getLastSize","getBoundingClientRect","isSizeChanged","isResizeBlocked","scrollableElement","setLastSize","updateData","replaceData","newDataMap","fitToLength","getInitialColumnCount","hotInstance","dataMap","internalSource","loadData","clearCellsCache","initIndexMappers","columnsSettings","finalNrOfColumns","nrOfSourceColumns","colToPropCache","dataSchema","schema","getSchema","deepObjectSize","initToLength","row2","column2","isUndefined","getAll","getRange","DESTINATION_RENDERER","getCopyableText","startCol","getCopyableData","getCopyable","settings","dataUpdateFunction","bind","columnsAsFunc","j","rows","cols","ganttChart","tableClassName","syncOverlayTableClassNames","isRegistered","isDeprecated","initialHook","addHook","hasOwnProperty","createMap","columnSetting","cell","cells","clearCache","updateColumnMeta","objectEach","setCellMetaObject","currentHeight","style","parseInt","initialStyle","getAttribute","indexOf","overflow","wtViewport","resetHasOversizedColumnHeadersMarked","exportSettingsAsClassNames","updateMainScrollableElements","getValue","sel","clear","selectAll","topmost","renderableColumnIndex","renderableRowIndex","isHidden","getCellAtCoords","getCoords","renderableCoords","wtTable","getVisualFromPhysicalIndex","getPhysicalFromVisualIndex","get","getDataAtRowProp","getDataAtCol","columnData","dataByRows","getDataAtProp","getSourceData","getByRange","getSourceDataArray","getSourceDataAtCol","getAtColumn","setSourceDataAtCell","isThereAnySetSourceListener","hasHook","changesForHook","_ref8","changeRow","changeProp","changeValue","_ref9","setAtCell","getSourceDataAtRow","getAtRow","getSourceDataAtCell","getDataAtRow","getDataType","rowFrom","columnFrom","rowTo","columnTo","rowStart","columnStart","rowEnd","columnEnd","previousType","currentType","isTypeEqual","cellType","removeCellMeta","key","physicalRow","physicalColumn","cachedValue","getCellMetaKeyValue","hookResult","spliceCellsMeta","visualIndex","deleteAmount","_len18","cellMetaRows","_key18","reverse","cellMetaRow","setCellMeta","allowSetCellMeta","getCellsMeta","getColumnMeta","getCellMetaAtRow","getCellsMetaAtRow","isColumnModificationAllowed","getCellRenderer","rowOrMeta","cellRenderer","renderer","getRenderer","getCellEditor","cellEditor","editor","getEditor","cellValidator","getValidator","validateCells","_validateCells","validateRows","validateColumns","getRowHeader","rowHeader","rowHeaders","hasRowHeaders","hasColHeaders","getColHeader","headerLevel","out","translateVisualIndexToColumns","visualColumnIndex","arr","columnsLen","title","spreadsheetColumnLabel","_getColWidthFromSettings","colWidths","getColWidth","DEFAULT_COLUMN_WIDTH","_getRowHeightFromSettings","rowHeights","getRowHeight","countFirstRowKeys","getLength","dataLen","getNotTrimmedIndexesLength","countRenderedRows","drawn","getRenderedRowsCount","countVisibleRows","getVisibleRowsCount","countRenderedCols","getRenderedColumnsCount","countVisibleCols","getVisibleColumnsCount","getRowHeadersCount","getColumnHeadersCount","ending","rangeEachReverse","isEmptyRow","emptyColumns","isEmptyCol","selectCell","endColumn","scrollToCell","changeListener","selectCells","suspend","wasSelected","resume","selectColumns","focusPosition","selectRows","deselectCell","includeRowHeaders","includeColumnHeaders","options","skipNextScrollCycle","getIndexToScroll","indexMapper","scrollViewportTo","_options","_arguments$","verticalSnap","horizontalSnap","considerHiddenIndexes","snapToTop","snapToBottom","snapToInlineStart","snapToInlineEnd","isValidRowGrid","isValidColumnGrid","visualRowToScroll","visualColumnToScroll","isRowInteger","isColumnInteger","scrollViewport","scrollViewportVertically","scrollViewportHorizontally","scrollToFocusedCell","addHookOnce","isScrolled","toObject","removeHook","destroy","_clearTimeouts","_clearImmediates","delete","licenseInfo","querySelector","parentNode","removeChild","empty","unregisterAll","getItems","_ref10","plugin","property","obj","postMortem","getFirstRenderedVisibleRow","getLastRenderedVisibleRow","getFirstRenderedVisibleColumn","getLastRenderedVisibleColumn","getFirstFullyVisibleRow","getLastFullyVisibleRow","getFirstFullyVisibleColumn","getLastFullyVisibleColumn","getFirstPartiallyVisibleRow","getLastPartiallyVisibleRow","getFirstPartiallyVisibleColumn","getLastPartiallyVisibleColumn","getPlugin","pluginName","unifiedPluginName","toUpperCaseFirst","undoRedo","getItem","getPluginName","constructor","PLUGIN_KEY","getId","orderIndex","add","has","once","remove","p1","p2","p3","p4","p5","p6","run","dictionaryKey","extraArguments","toHTML","instanceToHTML","toTableElement","tempElement","insertAdjacentHTML","firstElementChild","timeouts","_registerTimeout","handle","delay","handleFunc","setTimeout","handler","clearTimeout","immediates","setImmediate","clearImmediate","_getEditorManager","shortcutManager","createShortcutManager","handleEvent","beforeKeyDown","event","afterKeyDown","ownerWindow","ctrlKey","metaKey","releasePressedKeys","getFocusManager","getPluginsNames","PluginClass","addItem","registerAllShortcutContexts","setActiveContextName","_a11y","getParent","level","iteration","parent","elementToCheck","host","nodeType","Node","DOCUMENT_FRAGMENT_NODE","isThisHotChild","thisHotContainer","closestHandsontableContainer","closest","getFrameElement","frame","frameElement","getParentWindow","hasAccessToParentWindow","nodes","until","ELEMENT_NODE","closestDown","matched","contains","isChildOf","child","node","queriedParents","querySelectorAll","previousSibling","overlayContainsElement","overlayType","root","overlayElement","parentElement","filterEmptyClassNames","classNames","x","filterRegexes","list","returnBoth","regexFree","regexes","entry","isRegex","RegExp","hasClass","classList","split","stringClasses","regexClasses","regexClassName","currentClassName","domElement","attributes","attributeValue","attributeInfo","removeAttribute","attributesToRemove","stringAttributes","regexAttributes","attributeNameToRemove","attributeRegex","getAttributeNames","attributeName","removeTextNodes","childs","childNodes","lastChild","HTML_CHARACTERS","fastInnerHTML","content","sanitizeContent","innerHTML","sanitize","fastInnerText","nextSibling","textContent","appendChild","createTextNode","isVisible","documentElement","next","impl","display","offsetLeft","offsetTop","lastElem","body","position","pageXOffset","scrollLeft","pageYOffset","scrollTop","left","top","getWindowScrollTop","window","scrollY","getWindowScrollLeft","scrollX","getScrollTop","getScrollLeft","getScrollableElement","document","props","el","overflowX","overflowY","clientHeight","scrollHeight","clientWidth","scrollWidth","getMaximumScrollTop","getMaximumScrollLeft","getTrimmingContainer","base","computedStyle","allowedProperties","getPropertyValue","propertyY","propertyX","getStyle","innerWidth","innerHeight","styleProp","matchesCSSRules","rule","selectorText","CSSRule","STYLE_RULE","msMatchesSelector","matches","currentStyle","outerWidth","offsetWidth","outerHeight","offsetHeight","addEvent","addEventListener","removeEvent","removeEventListener","getCaretPosition","selectionStart","getSelectionEndPosition","selectionEnd","getSelectionText","text","getSelection","toString","createRange","clearTextSelection","removeAllRanges","setCaretPosition","pos","endPos","setSelectionRange","focus","err","elementParent","parentDisplayValue","cachedScrollbarWidth","walkontableCalculateScrollbarWidth","inner","outer","boxSizing","visibility","w1","w2","getScrollbarWidth","hasVerticalScrollbar","hasHorizontalScrollbar","setOverlayPosition","overlayElem","transform","getCssTransform","resetCssTransform","isInput","inputs","contentEditable","isOutsideInput","hasAttribute","selectElementIfAllowed","activeElement","select","isDetached","elementToBeObserved","visibilityObserver","IntersectionObserver","entries","observer","isIntersecting","unobserve","observe","makeElementContentEditableAndSelectItsContent","invisibleSelection","ariaHidden","range","A11Y_HIDDEN","selectNodeContents","addRange","removeContentEditableFromElementAndDeselect","selectedElement","removeInvisibleSelectionClass","runWithSelectedContendEditableElement","_dompurify","string","toUpperCase","substr","equalsIgnoreCase","unique","strings","stringify","toLowerCase","s4","floor","random","isPercentValue","substitute","template","variables","match","name","charAt","stripTags","ALLOWED_TAGS","DOMPurify","_moment","_templateLiteralTag","variable","_m","_hd","v","_pi","_ss","s","l","_cp","_norm","_extractTime","_ignored","location","_notified","consoleMessages","invalid","toSingleLine","expired","keyValidityDate","hotVersion","missing","non_commercial","domMessages","hasValidType","isNonCommercial","consoleMessageState","domMessageState","schemaValidity","_checkKeySchema","releaseDate","moment","releaseDays","toDate","getTime","keyValidityDays","format","message","console","messageNode","z","p","shift","abs","padStart","expressions","previousValue","currentValue","valueWithoutWhiteSpaces","expressionForIndex","trim","to2dArray","extendArray","extension","pivotedArr","rowCount","colCount","array","iteratee","accumulator","initFromArray","iterable","arrayFilter","predicate","resIndex","arraySum","a","b","arrayMax","arrayMin","arrayAvg","arrayFlatten","initial","arrayUnique","arrays","first","rest","filteredFirstArray","getIntersectionOfArrays","getUnionOfArrays","delimiter","A11Y_TABINDEX","val","A11Y_TREEGRID","A11Y_PRESENTATION","A11Y_GRIDCELL","A11Y_ROWHEADER","A11Y_ROWGROUP","A11Y_COLUMNHEADER","A11Y_ROW","A11Y_MENU","A11Y_MENU_ITEM","A11Y_MENU_ITEM_CHECKBOX","A11Y_COMBOBOX","A11Y_LISTBOX","A11Y_OPTION","A11Y_CHECKBOX","A11Y_SCOPE_COL","A11Y_SCOPE_ROW","A11Y_TEXT","A11Y_LABEL","A11Y_DISABLED","A11Y_MULTISELECTABLE","A11Y_HASPOPUP","A11Y_ROWCOUNT","A11Y_COLCOUNT","A11Y_ROWINDEX","A11Y_COLINDEX","A11Y_EXPANDED","A11Y_SORT","A11Y_READONLY","A11Y_INVALID","A11Y_CHECKED","A11Y_SELECTED","A11Y_AUTOCOMPLETE","A11Y_CONTROLS","A11Y_ACTIVEDESCENDANT","A11Y_LIVE","A11Y_RELEVANT","A11Y_SETSIZE","A11Y_POSINSET","func","throttle","wait","lastCalled","lastCallThrottled","lastTimer","_throttle","stamp","Date","now","needCall","remaining","throttleAfterHits","hits","funcThrottle","remainHits","_clearHits","_throttleAfterHits","clearHits","debounce","_debounce","pipe","functions","firstFunc","restFunc","_pipe","fn","partial","params","_partial","restParams","curry","argsLength","given","argsSoFar","_curry","passedArgsSoFar","curryRight","fastCall","context","arg1","arg2","arg3","arg4","arg5","arg6","_feature","tester","testerFunc","ua","vendor","browsers","chrome","chromeWebKit","edge","edgeWebKit","firefox","firefoxWebKit","mobile","safari","platforms","mac","platform","win","linux","ios","setBrowserMeta","userAgent","navigator","setPlatformMeta","isCSR","isChrome","isChromeWebKit","isFirefox","isFirefoxWebKit","isSafari","isEdge","isEdgeWebKit","isIOS","maxTouchPoints","isWindowsOS","isMacOS","isLinuxOS","object","inherit","Child","Parent","extend","target","writableKeys","hasWritableKeys","deepExtend","JSON","parse","clone","mixin","Base","MIXINS","mixins","mixinItem","MIXIN_NAME","getter","_getter","initialValue","propertyName","initValue","setter","_setter","defineProperty","configurable","object1","object2","defineGetter","writable","enumerable","getProperty","names","nameItem","setProperty","workingObject","propName","recursObjLen","defaultValue","propertyToListen","privateProperty","holder","_touched","requestAnimationFrame","cancelAnimationFrame","isTouchSupported","comparisonFunction","getComparisonFunction","Intl","Collator","compare","String","localeCompare","_unicode","_event","_classPrivateMethodInitSpec","e","_checkPrivateRedeclaration","t","TypeError","_assertClassBrand","n","_EditorManager_brand","WeakSet","_defineProperty2","hot","_onAfterDocumentKeyDown","destroyed","openEditor","update","elem","_onCellDblClick","_this$hot$getSelected","isWaiting","dataSaved","isHeader","modifiedCellCoords","visualRowToCheck","visualColumnToCheck","isCellEditable","clearActiveEditor","editorClass","originalValue","getEditorInstance","prepare","newInitialValue","enableFullEditMode","allowOpening","MouseEvent","getLayerLevel","isSingle","beginEditing","restoreOriginalValue","isCtrlPressed","finishEditing","closeEditorAndSaveChanges","closeEditorAndRestoreOriginalValue","isCellHidden","moveSelectionAfterEnter","enterMoves","shiftKey","transformFocus","transformStart","isImmediatePropagationStopped","keyCode","altKey","isFunctionKey","isCtrlMetaKey","isCell","instances","WeakMap","KEY_CODES","ALT","ARROW_DOWN","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","AUDIO_DOWN","AUDIO_MUTE","AUDIO_UP","BACKSPACE","CAPS_LOCK","COMMA","COMMAND_LEFT","COMMAND_RIGHT","COMMAND_FIREFOX","CONTROL","DELETE","END","ENTER","ESCAPE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","F16","F17","F18","F19","HOME","INSERT","MEDIA_NEXT","MEDIA_PLAY_PAUSE","MEDIA_PREV","MEDIA_STOP","NULL","NUM_LOCK","PAGE_DOWN","PAGE_UP","PAUSE","PERIOD","SCROLL_LOCK","SHIFT","SPACE","TAB","A","C","D","F","L","O","P","S","V","X","Y","Z","FUNCTION_KEYS","isPrintableChar","isCtrlKey","keys","isKey","baseCode","stopImmediatePropagation","isImmediatePropagationEnabled","cancelBubble","isRightClick","button","isLeftClick","isTouchEvent","TouchEvent","offsetRelativeTo","untilElement","offsetX","y","offsetY","HTMLElement","_staticRegister","registeredEditorClasses","register","hasItem","getNames","getValues","staticRegister","getRegisteredEditors","getRegisteredEditorNames","hasEditor","RegisteredEditor","Clazz","getConstructor","_getEditorInstance","_register","_getItem","EDITOR_TYPE","editorWrapper","_console","REGISTERED_HOOKS","REMOVED_MESSAGE","REMOVED_HOOKS","DEPRECATED_HOOKS","callbackOrder","getGlobalSingleton","globalBucket","createEmptyBucket","bucket","create","hook","initOrderMap","getBucket","pluginHookBucket","warn","hookName","removedInVersion","skip","foundInitialHook","cb","setCallbackOrderIndex","orderBucketByOrderIndex","runOnce","globalHandlers","res","localHandlers","deregister","getRegistered","normalizedOrderIndex","orderMap","getCallbackOrderMap","flatMap","callbacks","globalSingleton","log","info","error","collection","namespace","subCollection","item","values","listenersCounter","eventListeners","eventName","callbackProxy","extendEvent","onlyOwnEvents","len","tmpEvent","clearEvents","destroyWithOwnEventsOnly","fireEvent","bubbles","cancelable","detail","screenX","screenY","clientX","clientY","relatedTarget","createEvent","initMouseEvent","createEventObject","dispatchEvent","nativeStopImmediatePropagation","_stopImmediatePropagation","getListenersCounter","_classPrivateFieldInitSpec","_classPrivateFieldGet","_classPrivateFieldSet","FOCUS_MODES","freeze","CELL","MIXED","_hot","_focusMode","_refocusDelay","_refocusElementGetter","_debouncedSelect","_FocusManager_brand","hotSettings","imeFastEdit","_onUpdateSettings","_focusCell","_focusEditorElement","getFocusMode","setFocusMode","focusMode","getRefocusDelay","setRefocusDelay","setRefocusElementGetter","getRefocusElementFunction","getRefocusElement","_classPrivateFieldGet2","TEXTAREA","focusOnHighlightedCell","selectedCell","focusElement","_classPrivateFieldGet3","_classPrivateFieldGet4","currentHighlightCoords","elementToBeFocused","preventScroll","_getSelectedCell","refocusToEditorTextarea","_classPrivateFieldGet5","refocusElement","_classPrivateFieldGet6","isCellVisible","blur","newSettings","ESCAPED_HTML_CHARS","regEscapedChars","join","isHTMLTable","hasColumnHeaders","TABLE","THEAD","TBODY","rowModifier","columnModifier","isColumnHeadersRow","CELLS","isRowHeadersColumn","cellData","rowspan","colspan","attrs","TR","_dataToHTML","inputLen","columnsResult","parsedCellData","repeat","htmlToGridSettings","settingsObj","fragment","createDocumentFragment","tempElem","checkElement","escapedAdjacentHTML","cellFragment","openingTag","paragraphRegexp","lastIndexOf","replaceAll","closingTag","generator","trElement","reduce","colSpan","tFoot","thRowsLen","tHead","thRows","tr","isDataRow","nestedHeaders","headersRow","headers","header","currentIndex","nextHeader","label","children","dataRows","tBodies","sections","section","dataArr","mergeCells","cellsLen","cellId","rowSpan","findIndex","rstart","cstart","styleAttr","ignoreMerge","_priorityMap","_uniqueSet","ERROR_PLUGIN_REGISTERED","ERROR_PRIORITY_REGISTERED","priority","ERROR_PRIORITY_NAN","priorityPluginsQueue","createPriorityMap","errorPriorityExists","errorPriorityNaN","uniquePluginsQueue","createUniqueSet","errorItemExists","uniquePluginsList","errorIdExists","hasPlugin","registerPlugin","pluginClass","unifyPluginArguments","_registerPlugin","PLUGIN_PRIORITY","ASC","DESC","ORDER_MAP","DEFAULT_ERROR_PRIORITY_EXISTS","DEFAULT_ERROR_PRIORITY_NAN","priorityMap","isNumeric","order","right","additionalDelimiters","isFinite","d","valueOf","rangeFrom","rangeTo","valueAccordingPercent","percent","clamp","minValue","maxValue","DEFAULT_ERROR_ID_EXISTS","uniqueMap","removeItem","itemId","find","DEFAULT_ERROR_ITEM_EXISTS","uniqueSet","getRegisteredRenderers","getRegisteredRendererNames","hasRenderer","RENDERER_TYPE","getRegisteredValidators","getRegisteredValidatorNames","hasValidator","VALIDATOR_TYPE","_mouseEventHandler","_columnHeadersCount","_rowHeadersCount","_selectionMouseDown","_mouseDown","_table","_lastWidth","_lastHeight","_TableView_brand","createElements","registerEvents","initializeWalkontable","postponedAdjustElementsSize","draw","snapToRight","snapToLeft","originalStyle","ariaTags","isTextSelectionAllowed","preventDefault","fragmentSelection","isInProgress","finish","isOutsideInputElement","isSelectedByAnyHeader","originalTarget","eventX","eventY","scrollbarWidth","elementFromPoint","isTargetWebComponent","outsideClickDeselects","parentWindow","translateFromRenderableToVisualCoords","translateFromRenderableToVisualIndex","countRenderableIndexes","maxElements","consideredElements","firstNotHiddenIndex","countNotHiddenRowIndexes","incrementBy","countNotHiddenIndexes","countNotHiddenColumnIndexes","renderableIndexesCount","firstVisibleIndex","renderableIndex","notHiddenIndexes","countNotHiddenFixedColumnsStart","visualFixedColumnsStart","countNotHiddenFixedRowsTop","visualFixedRowsTop","countNotHiddenFixedRowsBottom","visualFixedRowsBottom","count","isMainTableNotFullyCoveredByOverlays","fixedAllRows","fixedAllColumns","walkontableConfig","rtlMode","externalRowCalculator","isEnabled","isDataViewInstance","preventOverflow","preventWheel","stretchH","shouldRenderInlineStartOverlay","shouldRenderTopOverlay","columnHeaders","shouldRenderBottomOverlay","renderAllRows","renderAllColumns","headerRenderers","TH","visualRowIndex","appendRowHeader","_getAriaColcount","_updateAriaColcount","renderedColumnIndex","visualColumnsIndex","appendColHeader","columnWidth","rowHeight","renderedRowIndex","rowHeightByOverlayName","TD","selections","hideBorderOnMouseDownOver","onWindowResize","onContainerElementResize","onCellMouseDown","wt","visualCoords","controller","activeWt","handleMouseEvent","cellCoordsFactory","onCellContextMenu","onCellMouseOut","onCellMouseOver","onCellMouseUp","onCellCornerMouseDown","onCellCornerDblClick","beforeDraw","force","skipRender","beforeRender","onDraw","afterRender","onBeforeViewportScrollVertically","rowMapper","areColumnHeadersSelected","onBeforeViewportScrollHorizontally","columnMapper","areRowHeadersSelected","onScrollVertically","onScrollHorizontally","onBeforeRemoveCellClassNames","onBeforeHighlightingRowHeader","highlightMeta","newVisualRow","onBeforeHighlightingColumnHeader","newVisualColumn","onAfterDrawSelection","currentRow","currentColumn","layerLevel","cornersOfSelection","selectionRangeSize","selectionForLayer","peekByIndex","onBeforeDrawBorders","corners","borderClassName","startRenderableRow","startRenderableColumn","endRenderableRow","endRenderableColumn","visualCorners","onBeforeTouchScroll","onAfterMomentumScroll","onBeforeStretchingColumnWidth","stretchedWidth","onModifyRowHeaderWidth","rowHeaderWidth","onModifyGetCellCoords","visualIndexes","viewportRowCalculatorOverride","calc","viewportOffset","viewportRowRenderingOffset","renderableRows","firstRenderedRow","lastRenderedRow","ceil","viewportColumnCalculatorOverride","viewportColumnRenderingOffset","renderableColumns","firstRenderedColumn","lastRenderedColumn","columnHeaderHeight","Walkontable","spreader","which","stopPropagation","observeDOMVisibility","drawInterrupted","isChildOfTableBody","isSelectedOnlyCell","isCellEdited","isMouseDown","_this$hot$getSelected2","isSingleCell","updateCellHeader","div","span","getColumnHeaderClassNames","metaHeaderClassNames","headerClassName","renderedIndex","parentOverlay","getParentOverlay","columnFilter","sourceToRendered","rowFilter","fromCharCode","maximumVisibleElementWidth","inlineOffset","workspaceWidth","getWorkspaceWidth","maxWidth","maximumVisibleElementHeight","topOffset","workspaceHeight","getWorkspaceHeight","maxHeight","rowsRenderCalculator","getFirstRenderedRow","getLastRenderedRow","columnsRenderCalculator","getFirstRenderedColumn","getLastRenderedColumn","wtScroll","getFirstVisibleRow","getLastVisibleRow","getFirstVisibleColumn","getLastVisibleColumn","getViewportWidth","getViewportHeight","getElementOverlayName","_this$_wt$wtOverlays$","getOverlayByName","overlayName","_calculator","ViewportColumnsCalculator","ViewportRowsCalculator","DEFAULT_ROW_HEIGHT","_coords","_range","HIGHLIGHT_ACTIVE_HEADER_TYPE","ACTIVE_HEADER_TYPE","HIGHLIGHT_AREA_TYPE","AREA_TYPE","HIGHLIGHT_FOCUS_TYPE","FOCUS_TYPE","HIGHLIGHT_FILL_TYPE","FILL_TYPE","HIGHLIGHT_HEADER_TYPE","HEADER_TYPE","HIGHLIGHT_ROW_TYPE","ROW_TYPE","HIGHLIGHT_COLUMN_TYPE","COLUMN_TYPE","HIGHLIGHT_CUSTOM_SELECTION_TYPE","CUSTOM_SELECTION_TYPE","Renderer","_interopRequireWildcard","_orderView","OrderView","SharedOrderView","_getRequireWildcardCache","__esModule","__proto__","getOwnPropertyDescriptor","u","_fullyVisibleColumns","FullyVisibleColumnsCalculationType","_fullyVisibleRows","FullyVisibleRowsCalculationType","_partiallyVisibleColumns","PartiallyVisibleColumnsCalculationType","_partiallyVisibleRows","PartiallyVisibleRowsCalculationType","_renderedAllColumns","RenderedAllColumnsCalculationType","_renderedAllRows","RenderedAllRowsCalculationType","_renderedColumns","RenderedColumnsCalculationType","_renderedRows","RenderedRowsCalculationType","_viewportColumns","DEFAULT_WIDTH","_viewportRows","DEFAULT_HEIGHT","initialize","process","viewportCalculator","totalCalculatedWidth","zeroBasedScrollOffset","viewportWidth","compensatedViewportWidth","finalize","_startPositions$this$","scrollOffset","inlineStartOffset","needReverse","startPositions","calculatedViewportHeight","startPosition","mostRightScrollOffset","inlineStartColumnOffset","getColumnWidth","at","isVisibleInTrimmingContainer","totalCalculatedHeight","innerViewportHeight","viewportHeight","horizontalScrollbarHeight","mostBottomScrollOffset","topRowOffset","calculatedViewportWidth","overrideFn","_viewportBase","ViewportBaseCalculator","calculationTypes","columnWidthFn","calculate","_initialize","_process","_finalize","calculator","calculationResults","getResultsFor","calculatorId","rowHeightFn","_isRtl","isValid","tableParams","isEqual","isSouthEastOf","testedCoords","isNorthWestOf","isSouthWestOf","isNorthEastOf","normalize","assign","setHighlight","setFrom","setTo","containsHeaders","getOuterHeight","getOuterWidth","getHeight","fromRow","toRow","getWidth","fromCol","toCol","getCellsCount","getOuterTopStartCorner","getOuterBottomEndCorner","includesRange","overlaps","getOuterTopLeftCorner","getOuterBottomRightCorner","isOverlappingHorizontally","getOuterTopEndCorner","isOverlappingVertically","getOuterBottomStartCorner","getOuterTopRightCorner","expand","expandByRange","expandingRange","changeDirection","initialDirection","getDirection","expandingTopStart","expandingBottomEnd","resultTopRow","resultTopCol","resultBottomRow","resultBottomCol","finalFrom","finalTo","setDirection","getVerticalDirection","flipDirectionVertically","getHorizontalDirection","flipDirectionHorizontally","getOuterBottomLeftCorner","getTopLeftCorner","getTopEndCorner","getBottomRightCorner","getBottomStartCorner","getTopRightCorner","getBottomLeftCorner","isCorner","getOppositeCorner","getBordersSharedWith","thisBorders","bottom","rangeBorders","getInner","forAll","breakIteration","_base","WalkontableFacade","settingsOrInstance","CoreAbstract","_wot","_initFromSettings","facade","domBindings","wtSettings","cloneSource","cloneOverlay","selectionManager","wtEvent","lastMouseOver","momentumScrolling","touchApplied","fastDraw","getViewport","getOverlayName","param1","param2","param3","param4","hasSetting","_overlays","_overlay","_settings","_master","_viewport","_manager","Settings","facadeGetter","MasterTable","getTableDao","Viewport","getViewportDao","SelectionManager","Event","Overlays","findOriginalHeaders","toExport","allClassNames","newClassNames","wtRootElement","_this$wtOverlays","CLONE_TYPES","camelCaseOverlay","wot","topOverlayTrimmingContainer","topOverlay","trimmingContainer","inlineStartOverlayTrimmingContainer","inlineStartOverlay","topScrollPosition","getScrollPosition","topParentOffset","getTableParentOffset","inlineStartScrollPosition","inlineStartParentOffset","bottomOverlay","_wtSettings","_domBindings","_wtTable","_selectionManager","_parent","_facadeGetter","_selectedCellBeforeTouchEnd","_dblClickTimeout","_dblClickOrigin","onContextMenu","onMouseOver","onMouseOut","initTouchEvents","onTouchStart","onTouchEnd","_timeout","ongoing","initMouseEvents","onMouseUp","onMouseDown","selectedCellWasTouched","touchTarget","cellUnderFinger","parentCell","coordsOfCellUnderFinger","rowTouched","rowSelected","colTouched","colSelected","getFocusSelection","getAreaSelection","getParentNode","realTarget","callListener","lastTD","nextTD","_this$parentCell","parentCellCoords","isCellsRange","isEventCancelable","interactiveElements","tagName","listener","getSettingPure","_hasRenderingStateChanged","_containerDomResizeCount","_containerDomResizeCountTimeout","wotInstance","ResizeObserver","resizeObserver","disconnect","scrollbarSize","isOverflowHidden","initOverlays","hasScrollbarBottom","hasScrollbarRight","keyPressed","spreaderLastSize","verticalScrolling","horizontalScrolling","initBrowserLineHeight","registerListeners","lastScrollX","lastScrollY","getOverlays","includeMaster","overlays","lineHeight","lineHeightFalback","fontSize","browserLineHeight","TopOverlay","BottomOverlay","InlineStartOverlay","topInlineStartCornerOverlay","TopInlineStartCornerOverlay","bottomInlineStartCornerOverlay","BottomInlineStartCornerOverlay","overlay","hasRenderingStateChanged","updateStateOfRendering","afterDraw","syncScrollWithMaster","needFullRender","reset","refreshAll","onScroll","mainTableScrollableElement","topOverlayScrollableElement","inlineStartOverlayScrollableElement","onKeyDown","onKeyUp","onTableScroll","passive","isHighPixelRatio","devicePixelRatio","isScrollOnWindow","wheelEventOptions","onCloneWheel","resizeTimeout","deregisterListeners","masterHorizontal","masterVertical","syncScrollPositions","shouldNotWheelVertically","shouldNotWheelHorizontally","isScrollPossible","translateMouseWheelToScroll","deltaY","wheelDeltaY","deltaX","wheelDeltaX","deltaMode","isScrollVerticallyPossible","scrollVertically","isScrollHorizontallyPossible","scrollHorizontally","previousScroll","topHolder","leftHolder","bottomHolder","master","updateMainScrollableElement","wasSpreaderSizeUpdated","needsUpdating","isWindowScrolled","headerRowSize","getRowHeaderWidth","headerColumnSize","getColumnHeaderHeight","proposedHiderHeight","sumCellSizes","proposedHiderWidth","hiderElement","hider","hiderStyle","isScrolledBeyondHiderHeight","isScrolledBeyondHiderWidth","columnHeaderBorderCompensation","rowHeaderBorderCompensation","rootElemScrollHeight","rootElemScrollWidth","holderScrollHeight","holderScrollWidth","expandHiderVerticallyBy","heightDelta","expandHiderHorizontallyBy","widthDelta","applyToDOM","masterTable","_bottomInlineStartCorner","_bottom","_inlineStart","Overlay","_topInlineStartCorner","_top","_constants","_exportNames","CLONE_BOTTOM_INLINE_START_CORNER","createTable","BottomInlineStartCornerOverlayTable","shouldBeRendered","resetFixedPosition","updateTrimmingContainer","overlayRoot","getOverlayOffset","repositionOverlay","tableHeight","tableWidth","hasDefinedSize","cloneRoot","bottomOffset","hasVerticalScroll","getTotalHeight","hasHorizontalScroll","_stickyRowsBottom","_stickyColumnsStart","Table","dataAccessObject","stickyRowsBottom","stickyColumnsStart","_column","_row","_renderer","_column2","_row2","isMaster","rootTable","createSpreader","createHider","createHolder","alignOverlaysWithTrimmingContainer","fixTableDomTree","correctHeaderWidth","origRowHeaderWidth","_modifyRowHeaderWidth","rowUtils","RowUtils","columnUtils","ColumnUtils","tableRenderer","COLGROUP","is","overlayTypeName","rowHeadersCount","columnHeadersCount","runFastDraw","holderOffset","createCalculators","leftScrollPos","previousState","tableOffset","parentTableOffset","RowFilter","ColumnFilter","performRedraw","setHeaderContentRenderers","CLONE_BOTTOM","resetOversizedRows","setActiveOverlayName","setViewportSize","setFilters","containerWidth","markOversizedColumnHeaders","adjustColumnHeaderHeights","markOversizedRows","createVisibleCalculators","hiderWidth","calculateWidths","colGroup","positionChanged","setActiveOverlay","markIfOversizedColumnHeader","sourceColIndex","renderedToSource","defaultRowHeight","previousColHeaderHeight","currentHeader","currentHeaderHeight","columnHeaderHeightSetting","getColumnHeader","oversizedColumnHeaders","rowsToRender","visibleRowIndex","sourceRow","oversizedRows","isRowBeforeRenderedRows","isRowAfterRenderedRows","isColumnBeforeRenderedColumns","isColumnAfterRenderedColumns","getRow","sourceColumnToVisibleRowHeadedColumn","_this$rowFilter","sourceRowToVisibleColHeadedRow","_this$rowFilter2","getColumnHeaders","THs","visibleColumn","renderedRow","visibleRow","getRowHeaders","cellElement","CONTAINER","cellIndex","CLONE_TOP_INLINE_START_CORNER","CLONE_TOP","visibleColHeadedRowToSourceRow","CLONE_INLINE_START","offsettedTH","visibleRowHeadedColumnToSourceColumn","expectedTableHeight","actualTableHeight","previousRowHeight","rowInnerHeight","sourceRowIndex","currentTr","getTrForRow","isColumnHeaderRendered","isRowHeaderRendered","isColumnAfterViewport","isRowAfterViewport","isColumnBeforeViewport","isLastRowFullyVisible","isLastColumnFullyVisible","allRowsInViewport","allColumnsInViewport","getHeaderHeight","sourceColumn","getStretchedColumnWidth","hasTableHeight","hasTableWidth","getTotalWidth","rowHeaderWidthFactory","widths","_correctRowHeaderWidth","total","countTH","offsetted","unOffsetted","unOffsettedTH","_rowHeaders","RowHeadersRenderer","_columnHeaders","ColumnHeadersRenderer","_colGroup","ColGroupRenderer","_rows","RowsRenderer","_cells","CellsRenderer","TableRenderer","setRenderers","setAxisUtils","rowsCount","columnsCount","adjust","BaseRenderer","obtainOrderView","rootNode","orderView","orderViews","sourceColumnIndex","nodesPool","obtain","rowHeaderFunctions","renderedRowToSource","getRenderedNode","cellsView","appendView","setSize","setOffset","renderedColumnToSource","visibleColumnIndex","getCurrentNode","isAriaEnabled","_view","_sharedView","_viewSizeSet","childNodeType","ViewSizeSet","sizeSet","isSharedViewSet","isShared","getNode","collectedNodes","getRenderedChildCount","childElementCount","isPlaceOn","WORKING_SPACE_TOP","nextElementSibling","nextSize","getViewSize","newNode","WORKING_SPACE_BOTTOM","isSharedPlacedOnTop","sharedSize","replaceChild","WORKING_SPACE_ALL","_viewSize","ViewSize","workingSpace","append","viewSize","prepend","currentSize","currentOffset","nextOffset","prependView","_nodesPool","NodesPool","setTable","setRootDocument","columnsToRender","allColumnsToRender","renderedNodes","theadChildrenLength","rowHeaderIndex","columnHeaderFunctions","performanceWarningAppeared","getHeaderWidth","ROW_CLASSNAMES","rowEven","rowOdd","_this$table$rowUtils$","_this$table$rowUtils","rowHeadersView","activeOverlayName","getHeightByOverlayName","_columnStretching","stretching","ColumnStretching","stretchMode","stretchingColumnWidthFn","sourceCol","sourceIndex","oversizedHeight","headerWidths","refreshStretching","mainHolder","scrollbarCompensation","rowHeaderWidthSetting","defaultColumnWidth","_totalTargetWidth","_totalColumns","_stretchingColumnWidthFn","_columnWidthFn","_stretchMode","totalWidth","stretchAllRatio","stretchAllColumnsWidth","needVerifyLastColumnWidth","stretchLastWidth","sumAll","_getColumnWidth","permanentColumnWidth","remainingSize","Infinity","lastColumnWidth","baseWidth","_getStretchedAllColumnWidth","_getStretchedLastColumnWidth","sumRatioWidth","round","newStretchedWidth","_clone","makeClone","drawPhase","getRelativeCellPosition","windowScroll","fixedColumnStart","fixedRowTop","fixedRowBottom","spreaderOffset","getRelativeStartPosition","elementOffset","offsetObject","getRelativeCellPositionWithinWindow","getRelativeCellPositionWithinHolder","onFixedRowTop","onFixedColumn","absoluteRootElementPosition","horizontalOffset","verticalOffset","absoluteRootElementStartPosition","absoluteOverlayPosition","onFixedRowBottom","tableScrollPosition","horizontal","vertical","clonedTable","tableParent","CLONE_CLASS_NAMES","mainTableRole","Clone","viewport","holderStyle","rootStyle","_scroll","Scroll","createScrollDao","originalHeaders","startColumnRendered","startColumnVisible","columnsVisibleCalculator","startColumnPartiallyVisible","columnsPartiallyVisibleCalculator","endColumnRendered","endColumnVisible","endColumnPartiallyVisible","countColumnsRendered","countColumnsVisible","startRowRendered","startRowVisible","rowsVisibleCalculator","startRowPartiallyVisible","rowsPartiallyVisibleCalculator","endRowRendered","endRowVisible","endRowPartiallyVisible","countRowsRendered","countRowsVisible","_Scroll_brand","scrolledHorizontally","scrolledVertically","autoSnapping","firstColumn","lastColumn","firstRow","lastRow","_getLastRowIndex","_getLastColumnIndex","lastColumnIndex","inlineStartRootElementOffset","tableRect","docOffsetWidth","rootElementOffset","windowScrollLeft","windowWidth","columnsWidth","lastRowIndex","windowScrollTop","windowHeight","rowsHeight","cachedFixedRowsBottom","BottomOverlayTable","overlayPosition","adjustHeaderBordersPosition","setScrollPosition","sum","adjustRootElementSize","adjustRootChildrenSize","overlayRootStyle","syncOverlayOffset","styleProperty","bottomEdge","newY","sourceInstance","overlayOffset","rootHeight","overlayRootHeight","maxOffset","docClientHeight","areFixedRowsBottomChanged","masterParent","_calculatedColumns","calculatedColumns","InlineStartOverlayTable","scrollbarHeight","selectionCornerOffset","CORNER_DEFAULT_STYLE","beyondRendered","newX","rootWidth","overlayRootWidth","preventVerticalOverflow","_calculatedRows","calculatedRows","_constants2","_localHooks","oldCoords","newCoords","getCorners","runLocalHooks","localHooks","clearLocalHooks","borderWidth","borderStyle","borderColor","_scanner2","_border","_activeOverlaysWot","_selections","_scanner","_appliedClasses","_destroyListeners","_selectionBorders","_SelectionManager_brand","SelectionScanner","activeWot","getFocus","createLayeredArea","getBorderInstance","border","borders","Border","getBorderInstances","destroyBorders","_resetCells","classNamesMap","headerAttributesMap","headerAttributes","createLayers","selectionType","borderInstance","disappear","setActiveSelection","scan","classNamesLayers","appear","occurrenceCount","_","flat","cellAttributes","appliedOverlaysClasses","classesToRemove","_SelectionScanner_brand","activeOverlaysWot","scanColumnsInHeadersRange","scanRowsInHeadersRange","scanCellsRange","scanRowsInCellsRange","scanColumnsInCellsRange","topRow","topColumn","bottomRow","bottomColumn","renderedColumnsCount","cursor","positiveBasedHeaderLevel","newSourceCol","columnCursor","selectionWidth","renderedRowsCount","newSourceRow","rowCursor","selectionHeight","_scanCellsRange","additionalSelectionClass","mouseDown","main","topStyle","bottomStyle","startStyle","endStyle","cornerDefaultStyle","cornerCenterPointOffset","corner","cornerStyle","createBorders","documentBody","onMouseEnter","bounds","isOutside","mouseEvent","handlerEvent","borderDivs","hide","backgroundColor","color","createMultipleSelectorHandles","bordersHolder","selectionHandles","topHitArea","bottomHitArea","hitAreaWidth","styles","hitAreaStyle","handleStyle","background","isPartRange","areaSelection","updateMultipleSelectionHandlesPosition","inlinePosProperty","topStyles","topHitAreaStyles","bottomStyles","bottomHitAreaStyles","handleBorderSize","handleSize","hitAreaSize","totalTableWidth","totalTableHeight","bottomHandlerInline","bottomHandlerAreaInline","bottomHandlerTop","bottomHandlerAreaTop","cornerVisible","zIndex","disabled","fromColumn","toColumn","columnHeader","fromTD","toTD","fromOffset","toOffset","containerOffset","minTop","minLeft","inlineStartPos","fromWidth","gridRightPos","isEntireColumnSelected","modifiedValues","getDimensionsFromHeader","fromTH","isEntireRowSelected","borderTopWidth","cornerVisibleSetting","checkRow","checkCol","borderRightWidth","trimToWindow","cornerHalfWidth","cornerHalfHeight","toTdOffsetLeft","cornerOverlappingContainer","cornerEdge","toTdOffsetTop","cornerBottomEdge","borderBottomWidth","startRowIndex","endRowIndex","startColumnIndex","endColumnIndex","fromIndex","toIndex","headerIndex","rootHotElement","getHeaderFn","dimensionFn","entireSelectionClassname","dimension","dimensionProperty","startHeader","endHeader","columnHeaderLevelCount","startHeaderOffset","endOffset","changeBorderStyle","borderElement","changeBorderToDefaultStyle","defaultBorder","toggleHiddenClass","TopInlineStartCornerOverlayTable","_stickyRowsTop","stickyRowsTop","cachedFixedRowsTop","TopOverlayTable","skipInnerBorderAdjusting","hiderRect","preventHorizontalOverflow","areFixedRowsTopChanged","getDefaults","defaults","currentRowClassName","currentColumnClassName","freezeOverlays","onCellDblClick","groups","settingValue","trimmingElement","trimmingElementParent","trimmingHeight","trimmingOverflow","cloneNode","cloneHeight","isTableVisible","hasOversizedColumnHeadersMarked","rowHeaderCount","columnCount","NaN","rowsCalculatorTypes","columnsCalculatorTypes","currentDocument","elemHeight","inlineStart","getContainerFillWidth","sumColumnWidths","stretchSetting","mainContainer","dummyElement","fillWidth","getWorkspaceOffset","containerHeight","rowHeadersWidthSetting","createRowsCalculator","calculatorTypes","fixedRowsHeight","createColumnsCalculator","fixedColumnsWidth","rowsCalculator","columnsCalculator","proposedRowsVisibleCalculator","areAllProposedVisibleRowsAlreadyRendered","proposedColumnsVisibleCalculator","areAllProposedVisibleColumnsAlreadyRendered","renderedStartRow","renderedEndRow","renderedStartColumn","renderedEndColumn","isShiftKey","currentSelection","selectedCorner","isSelectedByCorner","selectedRow","markSource","setRangeEnd","allowRightClickSelection","inInSelection","performSelection","setRangeStart","disableHeadersHighlight","markEndSource","mouseOver","selectedColumn","tableProps","handlers","isLeftClickEvent","isRightClickEvent","Symbol","rootSymbol","modifyRowData","toArray","getAllProps","dataDotNotation","dataRow","newDataRow","getAtPhysicalCell","rangeStart","rangeEnd","valueHolder","columnOrProp","modifiedSourceLength","COLUMN_LABEL_BASE","COLUMN_LABEL_BASE_LENGTH","dividend","columnLabel","modulo","spreadsheetColumnIndex","createSpreadsheetData","createSpreadsheetObjectData","createEmptySpreadsheetData","dataRowToChangesArray","rowOffset","changesArray","isArrayOfArrays","every","isArrayOfObjects","_indexMapper","_mapCollection","getRegisteredMapsCounter","getIncreasedIndexes","getDecreasedIndexes","alterUtilsFactory","_maps","_mapCollections","_observable","IndexesSequence","AggregatedCollection","valuesForIndex","some","MapCollection","ChangesObservable","initialIndexValue","indexesSequence","indexesSequenceChanged","updateCache","indexesChangeSource","trimmingMapsCollection","changedMap","trimmedIndexesChanged","hidingMapsCollection","variousMapsCollection","isBatched","createChangesObserver","indexMapType","hidingChangesObservable","createObserver","createAndRegisterIndexMap","indexName","mapType","initValueOrFn","registerMap","createIndexMap","uniqueName","indexMap","TrimmingMap","HidingMap","numberOfIndexes","getNumberOfIndexes","unregisterMap","unregister","physicalIndex","notTrimmedIndexesCache","getPhysicalFromRenderableIndex","renderablePhysicalIndexesCache","fromPhysicalToVisualIndexesCache","fromVisualToRenderableIndexesCache","fromVisualIndex","searchDirection","searchAlsoOtherWayAround","visibleIndexes","notHiddenIndexesCache","initEvery","currentIndexCount","indexesToBeRemoved","removeIndexes","insertIndexes","getIndexesSequence","setIndexesSequence","setValues","getNotTrimmedIndexes","readFromCache","isTrimmed","getNotHiddenIndexes","getNotHiddenIndexesLength","getRenderableIndexes","notTrimmedIndexes","getRenderableIndexesLength","moveIndexes","movedIndexes","finalIndex","physicalMovedIndexes","notTrimmedIndexesLength","movedIndexesLength","notMovedIndexes","getListWithRemovedItems","notTrimmedNotMovedItems","destinationPosition","getListWithInsertedItems","getMergedValueAtIndex","firstInsertedVisualIndex","amountOfIndexes","nthVisibleIndex","firstInsertedPhysicalIndex","insertionIndex","insertedIndexes","nextIndex","stepsFromStart","insert","insertToEvery","removedIndexes","removeFromEvery","anyCachedIndexChanged","cacheFromPhysicalToVisualIndexes","cacheFromVisualToRenderableIndexes","emit","getMergedValues","nrOfNotTrimmedIndexes","nrOfRenderableIndexes","_hidingMap","_indexMap","IndexMap","_linkedPhysicalIndexToValueMap","LinkedPhysicalIndexToValueMap","_physicalIndexToValueMap","PhysicalIndexToValueMap","_trimmingMap","_indexesSequence","_indexesSequence2","availableIndexMapTypes","getHiddenIndexes","indexesList","_physicallyIndexed","indexedValues","getValueAtIndex","setValueAtIndex","setDefaultValues","insertedValuesMapping","firstInsertedIndex","insertedIndex","ordinalNumber","_actionsOnIndexes","orderOfIndexes","clearValue","getListWithoutIndexes","getEntries","removedIndex","getTrimmedIndexes","listAfterUpdate","alterStrategies","sequenceStrategyInsert","sequenceStrategyRemove","physicalStrategyInsert","physicalStrategyRemove","indexationStrategy","_aggregatedCollection","aggregationFunction","fallbackValue","mergedValuesCache","mapsValuesMatrix","indexesValuesMatrix","mapsLength","mapIndex","valueAtIndex","registeredMaps","_observer","_observers","_indexMatrix","_currentIndexState","_isMatrixIndexesInitialized","_initialIndexValue","ChangesObserver","_writeInitialChanges","arrayDiff","indexesState","currentIndexState","_write","_currentInitialChanges","subscribe","unsubscribe","initialChanges","baseArray","newArray","op","oldValue","_phraseFormatters","_enUS","_dictionaryKeys","DEFAULT_LANGUAGE_CODE","DEFAULT_DICTIONARY","registerGloballyLanguageDictionary","getGlobalLanguageDictionary","hasGlobalLanguageDictionary","getGlobalLanguagesDictionaries","languageCodeOrDictionary","dictionary","dictionaryObject","extendLanguageDictionary","extendNotExistingKeys","getDefaultLanguageDictionary","argumentsForFormatters","languageDictionary","phrasePropositions","formattedPhrase","getFormattedPhrase","formattedPhrasePropositions","getPhraseFormatters","formatter","createCellHeadersRange","firstRowIndex","nextRowIndex","fromValue","toValue","languageCodePattern","partsOfLanguageCode","exec","_pluralize","registerGloballyPhraseFormatter","getGlobalPhraseFormatters","formatterFn","pluralizeFn","pluralize","pluralForm","isPluralizable","CONTEXTMENU_ITEMS_NO_ITEMS","CONTEXTMENU_ITEMS_ROW_ABOVE","CONTEXTMENU_ITEMS_ROW_BELOW","CONTEXTMENU_ITEMS_INSERT_LEFT","CONTEXTMENU_ITEMS_INSERT_RIGHT","CONTEXTMENU_ITEMS_REMOVE_ROW","CONTEXTMENU_ITEMS_REMOVE_COLUMN","CONTEXTMENU_ITEMS_UNDO","CONTEXTMENU_ITEMS_REDO","CONTEXTMENU_ITEMS_READ_ONLY","CONTEXTMENU_ITEMS_CLEAR_COLUMN","CONTEXTMENU_ITEMS_ALIGNMENT","CONTEXTMENU_ITEMS_ALIGNMENT_LEFT","CONTEXTMENU_ITEMS_ALIGNMENT_CENTER","CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT","CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY","CONTEXTMENU_ITEMS_ALIGNMENT_TOP","CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE","CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM","CONTEXTMENU_ITEMS_FREEZE_COLUMN","CONTEXTMENU_ITEMS_UNFREEZE_COLUMN","CONTEXTMENU_ITEMS_BORDERS","CONTEXTMENU_ITEMS_BORDERS_TOP","CONTEXTMENU_ITEMS_BORDERS_RIGHT","CONTEXTMENU_ITEMS_BORDERS_BOTTOM","CONTEXTMENU_ITEMS_BORDERS_LEFT","CONTEXTMENU_ITEMS_REMOVE_BORDERS","CONTEXTMENU_ITEMS_ADD_COMMENT","CONTEXTMENU_ITEMS_EDIT_COMMENT","CONTEXTMENU_ITEMS_REMOVE_COMMENT","CONTEXTMENU_ITEMS_READ_ONLY_COMMENT","CONTEXTMENU_ITEMS_MERGE_CELLS","CONTEXTMENU_ITEMS_UNMERGE_CELLS","CONTEXTMENU_ITEMS_COPY","CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS","CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS","CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY","CONTEXTMENU_ITEMS_CUT","CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD","CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD","CONTEXTMENU_ITEMS_HIDE_COLUMN","CONTEXTMENU_ITEMS_SHOW_COLUMN","CONTEXTMENU_ITEMS_HIDE_ROW","CONTEXTMENU_ITEMS_SHOW_ROW","FILTERS_CONDITIONS_NONE","FILTERS_CONDITIONS_EMPTY","FILTERS_CONDITIONS_NOT_EMPTY","FILTERS_CONDITIONS_EQUAL","FILTERS_CONDITIONS_NOT_EQUAL","FILTERS_CONDITIONS_BEGINS_WITH","FILTERS_CONDITIONS_ENDS_WITH","FILTERS_CONDITIONS_CONTAINS","FILTERS_CONDITIONS_NOT_CONTAIN","FILTERS_CONDITIONS_GREATER_THAN","FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL","FILTERS_CONDITIONS_LESS_THAN","FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL","FILTERS_CONDITIONS_BETWEEN","FILTERS_CONDITIONS_NOT_BETWEEN","FILTERS_CONDITIONS_AFTER","FILTERS_CONDITIONS_BEFORE","FILTERS_CONDITIONS_TODAY","FILTERS_CONDITIONS_TOMORROW","FILTERS_CONDITIONS_YESTERDAY","FILTERS_VALUES_BLANK_CELLS","FILTERS_DIVS_FILTER_BY_CONDITION","FILTERS_DIVS_FILTER_BY_VALUE","FILTERS_LABELS_CONJUNCTION","FILTERS_LABELS_DISJUNCTION","FILTERS_BUTTONS_SELECT_ALL","FILTERS_BUTTONS_CLEAR","FILTERS_BUTTONS_OK","FILTERS_BUTTONS_CANCEL","FILTERS_BUTTONS_PLACEHOLDER_SEARCH","FILTERS_BUTTONS_PLACEHOLDER_VALUE","FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE","CHECKBOX_CHECKED","CHECKBOX_UNCHECKED","CONTEXT_MENU_ITEMS_NAMESPACE","CM_ALIAS","FILTERS_NAMESPACE","FILTERS_CONDITIONS_NAMESPACE","FILTERS_CONDITIONS_BY_VALUE","CHECKBOX_RENDERER_NAMESPACE","detectSelectionType","normalizeSelectionFactory","_highlight","_transformation2","_transformation","_focusTransformation","_isFocusSelectionChanged","_disableHeadersHighlight","_selectionSource","_expectedLayersCount","SelectionRange","Highlight","currentHeaderClassName","activeHeaderClassName","rowClassName","columnClassName","currentColClassName","disabledCellSelection","cellCornerVisible","isCellCornerVisible","areaCornerVisible","isAreaCornerVisible","Transformation","autoWrapRow","autoWrapCol","sourceName","setExpectedLayers","layersCount","begin","inProgress","multipleSelection","highlightCoords","isMultipleMode","selectionMode","isMultipleSelection","coordsClone","selectedByRowHeader","selectedByColumnHeader","setRangeStartOnly","navigableHeaders","horizontalDir","verticalDir","setRangeFocus","applyAndCommit","isLastLayer","getAreas","getLayeredAreas","getActiveRowHeaders","getActiveColumnHeaders","getActiveCornerHeaders","getRowHighlights","getColumnHighlights","useLayerLevel","areaHighlight","createArea","layeredAreaHighlight","rowHeaderHighlight","createRowHeader","columnHeaderHighlight","createColumnHeader","activeRowHeaderHighlight","createActiveRowHeader","activeColumnHeaderHighlight","createActiveColumnHeader","activeCornerHeaderHighlight","createActiveCornerHeader","rowHighlight","createRowHighlight","columnHighlight","createColumnHighlight","isEnabledFor","previousRange","previous","syncWith","rowCoordsFrom","rowCoordsTo","columnCoordsFrom","columnCoordsTo","highlightRowHeaders","highlightColumnHeaders","focusHighlight","createMissingRecords","setOffsetSize","resetOffsetSize","transformEnd","columnsInRange","rowsInRange","focusCoords","minRow","coordsStartAmount","pop","coordsStart","coordsEnd","minColumn","isMultipleListener","isFocusSelectionChanged","fillHandle","_this$getSelectedRang","startCoords","endCoords","selectionRanges","_this2","SELECTION_TYPE_EMPTY","SELECTION_TYPE_UNRECOGNIZED","selectionSchemaNormalizer","keepDirection","rangeValidity","columnHeaderLastIndex","fromCoords","toCoords","highlightRow","highlightColumn","rowHeaderLastIndex","countColumns","ranges","customSelections","getCustomSelections","customSelection","currentLayer","areaLayeredHighlight","_activeHeader","_areaLayered","_area","_focus","_customSelection","_fill","_header","_Highlight_brand","createFocusHighlight","createFillHighlight","highlightType","disableHighlight","getFill","_createHighlight","layeredAreas","createAreaLayeredHighlight","areas","createAreaHighlight","createHeaderHighlight","activeRowHeaders","createActiveHighlight","activeColumnHeaders","activeCornerHeaders","rowHighlights","columnHighlights","addCustomSelection","selectionInstance","createCustomHighlight","iterator","cacheMap","highlightFactory","_visualSelection","createHighlight","restOptions","VisualSelection","visualCellRange","trimToVisibleCellsRangeOnly","visibleFromCoords","getNearestNotHiddenCoords","visibleToCoords","rowSearchDirection","columnSearchDirection","nextVisibleRow","nextVisibleColumn","trimmedCellRange","createRenderableCellRange","broaderCellRange","coordsFrom","rowDirection","columnDirection","renderableHighlight","cellCoordsVisual","currentHighlight","cellCoordsRenderable","getVisualCorners","visualFromCoords","visualToCoords","renderableFromCoords","renderableToCoords","_offset","_Transformation_brand","highlightRenderableCoords","rowTransformDir","colTransformDir","_getTableSize","_visualToZeroBasedCoords","zeroBasedCoords","isActionInterrupted","nextColumn","_zeroBasedToVisualCoords","previousColumn","nextRow","previousRow","rowDir","colDir","_clampCoords","_findFirstNonHiddenZeroBasedRow","_findFirstNonHiddenZeroBasedColumn","topStartCorner","topEndCorner","bottomEndCorner","columnRestDelta","rowRestDelta","bottomRowIndex","newVisualCoords","SELECTION_TYPE_ARRAY","SELECTION_TYPE_OBJECT","SELECTION_TYPES","ARRAY_TYPE_PATTERN","rootCall","childCall","_callSymbol","isRootCall","firstItem","isArrayType","isObjectType","origRowStart","origColumnStart","origRowEnd","origColumnEnd","transformSelectionToColumnDistance","unorderedIndexes","columnNonHeaderStart","orderedIndexes","normalizedColumnRanges","transformSelectionToRowDistance","rowNonHeaderStart","normalizedRowRanges","DataMap","_metaManager","_metaSchema","_replaceData","_dynamicCellMeta","_extendMetaProperties","_SheetClip","DESTINATION_CLIPBOARD_GENERATOR","createDuckSchema","propToColCache","filteredIndex","schemaLen","recursiveDuckColumns","lastCol","propertyParent","cachedPhysicalIndex","refreshDuckSchema","sourceRowsCount","physicalRowIndex","continueProcess","rowsToAdd","spliceData","newVisualRowIndex","numberOfCreatedCols","createColumn","newVisualColumnIndex","removedPhysicalIndexes","visualRowsToPhysical","sourceRowsLength","actionWasNotCancelled","numberOfRemovedIndexes","filterData","customDefinedColumns","descendingPhysicalRows","rowPhysicalIndex","visualColumnsToPhysical","descendingPhysicalColumns","isTableUniform","removedColumnsCount","removeColumn","colData","removed","after","deleteCount","continueSplicing","newData","physicalRows","modifiedRowData","sliced","copyable","logicRows","physicRow","rowsToRemove","visualCols","physicalCol","colsToRemove","maxRowsFromSettings","countCachedColumns","destination","output","getFn","getText","regUniversalNewLine","regNextCellNoQuotes","regNextEmptyCell","str","lastLength","nextCell","startsWith","quoteNo","isStillCell","nextChar","matchedText","rLen","cLen","_globalMeta","_tableMeta","_columnMeta","_cellMeta","customSettings","metaMods","GlobalMeta","TableMeta","columnMeta","ColumnMeta","CellMeta","ModifierClass","updateMeta","getMeta","updateGlobalMeta","updateTableMeta","setMeta","updateCellMeta","removeMeta","getMetas","getMetasAtRow","createTableMetaEmptyClass","meta","metaCtor","getMetaConstructor","_settings$type","extendByMetaType","canBeOverwritten","metaObject","_metaObject$_automati","_automaticallyAssignedMetaProps","settingsToCompareWith","validType","getCellType","expandedType","_metaObject$_automati2","columnFactory","conflictList","isUnsignedNumber","assert","condition","errorMessage","isNullish","getRegisteredCellTypes","getRegisteredCellTypeNames","hasCellType","CELL_TYPE","registerEditor","registerRenderer","registerValidator","allowEmpty","allowHtml","allowRemoveColumn","allowRemoveRow","autoColumnSize","autoRowSize","bindRowsWithHeaders","checkedTemplate","collapsibleColumns","columnSorting","columnSummary","commentedCellClassName","comments","contextMenu","copyPaste","correctFormat","customBorders","dateFormat","timeFormat","datePickerConfig","defaultDate","dragToScroll","dropdownMenu","enterBeginsEditing","autoInsertRow","filteringCaseSensitive","filters","fixedColumnsLeft","formulas","hiddenColumns","hiddenRows","invalidCellClassName","rowLen","colLen","locale","manualColumnFreeze","manualColumnMove","manualColumnResize","manualRowMove","manualRowResize","multiColumnSorting","tabNavigation","nestedRows","noWordWrapClassName","numericFormat","persistentState","placeholder","placeholderCellClassName","readOnlyCellClassName","search","selectOptions","sortByRelevance","startCols","startRows","strict","tabMoves","trimDropdown","trimRows","trimWhitespace","uncheckedTemplate","undo","visibleRows","wordWrap","MetaCtor","_lazyFactoryMap","COLUMNS_PROPS_CONFLICTS","LazyFactoryMap","_createMeta","metas","valueFactory","dataIndex","_getStorageIndexByKey","holes","reuseIndex","newIndexes","dataLength","validEntries","keyIndex","_getKeyByStorageIndex","_createRow","_cellMeta$_automatica","rowsMeta","setDataMapFunction","callbackFunction","config","capitalizedInternalSource","extendCellMeta","metaSyncMemo","_this$metaSyncMemo$ge","cellSettings","_cellSettings$type","initOnly","onChange","usageTracker","_initOnlyCallback","isInitialChange","extendMetaProps","propDescriptors","descriptor","alias","hasTarget","targetProp","origProp","installPropWatcher","_initOnlySettings","self","_focusCatcher","_viewportScroll","_focusDetector","clampCoordsIfNeeded","normalizeCoordsIfNeeded","recentlyAddedFocusCoords","activate","deactivate","installFocusDetector","onFocusFromTop","_clampCoordsIfNeeded","mostTopStartCoords","getMostTopStartPosition","onFocusFromBottom","_clampCoordsIfNeeded2","mostBottomEndCoords","getMostBottomEndPosition","rowWrapState","wrapped","flipped","isSavingCoordsEnabled","isTabOrShiftTabPressed","preventViewportScroll","_hot$getSelectedRange","interruptedByAutoInsertMode","isFlipped","deactivateTable","shortcutOptions","relativeToGroup","GRID_GROUP","group","getContext","addShortcuts","_rowIndexMapper$getVi","_columnIndexMapper$ge","_editor","_grid","shortcutsGridContext","shortcutsEditorContext","_commands","addContext","commandsPool","createKeyboardShortcutCommandsPool","EDITOR_EDIT_GROUP","editorCloseAndSaveByEnter","captureCtrl","forwardToContext","editorCloseAndSave","editorCloseAndSaveByArrowKeys","editorCloseWithoutSaving","_extendCellsSelection","_moveCellSelection","_emptySelectedCells","_scrollToFocusedCell","_selectAllCells","_selectAllCellsAndHeaders","_populateSelectedCellsData","allCommands","getAllEditorCommands","getAllSelectionExtendCommands","getAllSelectionMoveCommands","selectAllCells","selectAllCellsAndHeaders","populateSelectedCellsData","commands","_closeAndSave","_closeAndSaveByArrowKeys","_closeAndSaveByEnter","_closeWithoutSaving","_fastOpen","_open","getAllCommands","closeAndSave","closeAndSaveByArrowKeys","closeAndSaveByEnter","closeWithoutSaving","fastOpen","open","command","isInFullEditMode","state","EDITOR_STATE","EDITING","_hooksRefRegisterer","VIRGIN","WAITING","FINISHED","_fireCallbacks","_closeCallback","setValue","close","Editor","saveValue","ctrlDown","selectedLast","stringifiedInitialValue","_opened","previousCloseCallback","discardEditor","_fullEditMode","getEditedCellRect","_wtOverlays$getParent","getEditedCell","cellWidth","scrollableContainerTop","scrollableContainerLeft","containerScrollTop","containerScrollLeft","gridMostRightPos","overlayTable","editTopModifier","topPos","nrOfRenderableRowIndexes","firstRowIndexOfTheBottomOverlay","firstRowOffset","firstColumnOffset","horizontalScrollPosition","verticalScrollPosition","cellTopOffset","bottomWtViewport","bottomWtTable","cellStartOffset","cellComputedStyle","borderPhysicalWidthProp","inlineStartBorderCompensation","topBorderCompensation","actualVerticalScrollbarWidth","actualHorizontalScrollbarWidth","getEditedCellsLayerClass","editorSection","checkEditorSection","hooksRefRegisterer","_hooksStorage","removeHooksByKey","clearHooks","_down","_downByViewportHeight","_left","_right","_toColumns","_toMostBottom","_toMostInlineEnd","_toMostInlineStart","_toMostLeft","_toMostRight","_toMostTop","_toRows","_up","_upByViewportHeight","down","downByViewportHeight","toColumns","toMostBottom","toMostInlineEnd","toMostInlineStart","toMostLeft","toMostRight","toMostTop","toRows","up","upByViewportHeight","nextRowIndexToSelect","scrollPadding","nextVerticalScroll","isFocusHighlightedByHeader","newFrom","fixedColumns","_inlineEnd","_toMostBottomInlineEnd","_toMostTopInlineStart","inlineEnd","toMostBottomInlineEnd","toMostTopInlineStart","rowsStep","fixedRows","firstVisibleRow","firstVisibleColumn","lastVisibleRow","lastVisibleColumn","visibleCoordsFrom","visibleCoordsTo","visibleRange","scrollCoords","offsetColumns","offsetRows","valueToPopulate","cellValues","runOnlyIf","editorFastOpen","editorOpen","_hot$getSelectedRange2","_hot$getSelectedRange3","_hot$getSelectedRange4","extendCellsSelectionToColumns","extendCellsSelectionToRows","moveCellSelectionUp","moveCellSelectionToMostTop","extendCellsSelectionUp","extendCellsSelectionToMostTop","moveCellSelectionDown","moveCellSelectionToMostBottom","extendCellsSelectionDown","extendCellsSelectionToMostBottom","moveCellSelectionLeft","moveCellSelectionToMostLeft","extendCellsSelectionLeft","extendCellsSelectionToMostLeft","moveCellSelectionRight","moveCellSelectionToMostRight","extendCellsSelectionRight","extendCellsSelectionToMostRight","moveCellSelectionToMostInlineStart","extendCellsSelectionToMostInlineStart","moveCellSelectionToMostTopInlineStart","moveCellSelectionToMostInlineEnd","extendCellsSelectionToMostInlineEnd","moveCellSelectionToMostBottomInlineEnd","moveCellSelectionUpByViewportHight","extendCellsSelectionUpByViewportHeight","moveCellSelectionDownByViewportHeight","extendCellsSelectionDownByViewportHeight","moveCellSelectionInlineStart","moveCellSelectionInlineEnd","inputTrapTop","createInputElement","inputTrapBottom","before","tabIndex","_columnHeaderScroll","_cornerHeaderScroll","_focusScroll","_multipleScroll","_noncontiguousScroll","_rowHeaderScroll","_singleScroll","skipNextCall","isSuspended","_scrollStrategy","scrollStrategy","focusScrollStrategy","cornerHeaderScrollStrategy","rowHeaderScrollStrategy","columnHeaderScrollStrategy","multipleScrollStrategy","singleScrollStrategy","noncontiguousScrollStrategy","selectionSource","_context","_recorder","CONTEXTS","activeContextName","contextName","createContext","getActiveContextName","isCtrlKeySilenced","recorderCallback","activeContext","isContextObject","isExecutionCancelled","hasShortcut","shortcuts","getShortcuts","keyRecorder","useRecorder","mount","isPressed","unmount","__kindOf","objectToCheck","SHORTCUTS","addShortcut","newShortcut","keyCombination","normalizedKeys","normalizeKeys","hasKeyCombination","shortcut","removeShortcutsByKeys","removeShortcutsByGroup","leftOptions","option","getKeysList","mappings","lowercaseKey","specialCharactersSet","normalizeEventKey","normalizedKey","_keyObserver","MODIFIER_KEYS","modifierKeysObserver","createKeysObserver","modKeyListeners","instanceCounter","isModifierKey","pressedKey","getPressedModifierKeys","mergeMetaKeys","pressedModifierKeys","onkeydown","extraModifierKeys","pressedKeys","onkeydownForModKeys","press","onkeyupForModKeys","release","onblur","releaseAll","eventTarget","PRESSED_KEYS","_textEditor","_textRenderer","TextEditor","textRenderer","_autoResize","_caretPositioner","EDITOR_VISIBLE_CLASS_NAME","EDITOR_HIDDEN_CLASS_NAME","SHORTCUTS_GROUP","createInputElementResizer","bindEvents","showEditableElement","registerShortcuts","autoResize","unObserve","hideEditableElement","unregisterShortcuts","textareaStyle","TEXTAREA_PARENT","layerClass","textareaParentStyle","textIndent","opacity","hasClassHandsontableEditor","childNode","sourceData","fontFamily","textareaComputedStyle","horizontalPadding","paddingLeft","paddingRight","verticalPadding","paddingTop","paddingBottom","finalWidth","finalHeight","finalMaxWidth","finalMaxHeight","minWidth","minHeight","allowKeyEventPropagation","editorContext","contextConfig","insertNewLine","execCommand","keyName","updateCaretPosition","textHolder","textContainer","observedElement","resize","whiteSpace","elementStyle","delayedResize","extendDefaults","elementToObserve","doObserve","actionName","textareaElement","caretPosition","textLines","newCaretPosition","lineStartIndex","textLine","lineEndIndex","_baseRenderer","baseRenderer","escaped","rendererTemplate","TEMPLATE","HTMLTemplateElement","decorate","model","ariaEnabled","classesToAdd","attributesToAdd","_editors","registerAllEditors","_renderers","registerAllRenderers","_validators","registerAllValidators","_cellTypes","registerAllCellTypes","_plugins","registerAllPlugins","registerAllModules","_autocompleteEditor","AutocompleteEditor","AUTOCOMPLETE_EDITOR","BASE_EDITOR","_checkboxEditor","CheckboxEditor","CHECKBOX_EDITOR","_dateEditor","DateEditor","DATE_EDITOR","_dropdownEditor","DropdownEditor","DROPDOWN_EDITOR","_handsontableEditor","HandsontableEditor","HANDSONTABLE_EDITOR","_numericEditor","NumericEditor","NUMERIC_EDITOR","_passwordEditor","PasswordEditor","PASSWORD_EDITOR","_selectEditor","SelectEditor","SELECT_EDITOR","TEXT_EDITOR","_timeEditor","TimeEditor","TIME_EDITOR","_idPrefix","choices","caseSensitive","choicesRelevance","valueLength","choicesCount","charsLeft","currentItem","valueIndex","toLocaleLowerCase","baseIndex","selectedValue","rawChoices","strippedValue","stripValueIfNeeded","htContainer","rootInstanceAriaTagsEnabled","sourceArray","sourceSize","colIndex","onBeforeKeyDown","htEditor","query","indexOfMatch","afterSelectionEnd","queryChoices","updateChoicesList","stripValuesIfNeeded","choicesList","sortByRelevanceSetting","filterSetting","orderByRelevance","highlightIndex","orderByRelevanceLength","sorted","strippedChoices","updateDropdownDimensions","flipDropdownIfNeeded","highlightBestMatchingChoice","isWindowAsScrollableElement","textareaOffset","textareaHeight","dropdownHeight","getDropdownHeight","trimmingContainerScrollTop","headersHeight","spaceAbove","spaceBelow","flipNeeded","flipDropdown","unflipDropdown","limitDropdownIfNeeded","spaceAvailable","tempHeight","lastRowHeight","setDropdownHeight","dropdownStyle","currentDropdownWidth","firstRowHeight","stringifiedValues","strippedValues","allowed","timeOffset","htOptions","afterOnCellMouseDown","sourceValue","handsontable","onBeginEditing","DIV","assignHooks","rowToSelect","innerHOT","checkbox","click","_pikaday","SHORTCUTS_GROUP_EDITOR","Pikaday","parentDestroyed","destroyElements","datePicker","datePickerStyle","hideDatepicker","datePickerParentElement","$datePicker","showDatepicker","adjustDate","_this$$datePicker","defaultDateFormat","isMeta","dateStr","getDatePickerConfig","useMoment","_onInputFocus","setMoment","gotoToday","htInput","origOnSelect","onSelect","origOnClose","onClose","field","trigger","bound","keyboardInput","reposition","isRTL","pickerLeftPosition","registerHooks","prepareOptions","optionValue","optionElement","optionsToPrepare","preparedOptions","selectStyle","margin","previousOptionIndex","selectedIndex","nextOptionIndex","_autocompleteRenderer","autocompleteRenderer","AUTOCOMPLETE_RENDERER","BASE_RENDERER","_dropdownRenderer","dropdownRenderer","DROPDOWN_RENDERER","_checkboxRenderer","checkboxRenderer","CHECKBOX_RENDERER","_handsontableRenderer","handsontableRenderer","HANDSONTABLE_RENDERER","_htmlRenderer","htmlRenderer","HTML_RENDERER","_numericRenderer","numericRenderer","NUMERIC_RENDERER","_passwordRenderer","passwordRenderer","PASSWORD_RENDERER","_selectRenderer","selectRenderer","SELECT_RENDERER","TEXT_RENDERER","_timeRenderer","timeRenderer","TIME_RENDERER","rendererFunc","ARROW","acArrowListener","isListeningKeyDownEvent","isCheckboxListenerAdded","BAD_VALUE_CLASS","ATTR_ROW","ATTR_COLUMN","bundleSeed","labelValue","labelProperty","labelText","labelData","createInput","labelOptions","badValue","checked","createLabel","separated","gridContext","changeSelectedCheckboxesState","areSelectedCheckboxCells","_hotInstance$getSelec","_hotInstance$getSelec2","uncheckCheckbox","selRange","changesPerSubSelection","nonCheckboxChanges","changeCounter","cachedCellProperties","templates","dataAtCell","changesCount","sectionCount","changesChunk","topLeft","bottomRight","checkboxes","onClick","fullWidth","isCheckboxInput","newCheckboxValue","getRenderedValue","_numbro","cellCulture","culture","cellFormatPattern","pattern","numbro","shortTag","langData","allLanguages","registerLanguage","classArr","hashLength","hashSymbol","hash","_autocompleteValidator","autocompleteValidator","AUTOCOMPLETE_VALIDATOR","_dateValidator","dateValidator","DATE_VALIDATOR","_dropdownValidator","dropdownValidator","DROPDOWN_VALIDATOR","_numericValidator","numericValidator","NUMERIC_VALIDATOR","_timeValidator","timeValidator","TIME_VALIDATOR","valueToValidate","originalVal","found","slen","_date","dateEditor","DATE_EDITOR_TYPE","isValidFormat","isValidDate","correctedValue","dateFromDate","getNormalizedDate","dateFromMoment","isAlphanumeric","date","dateString","nativeDate","getDate","getTimezoneOffset","STRICT_FORMATS","twoDigitValue","isValidTime","_autocompleteType","AutocompleteCellType","AUTOCOMPLETE_TYPE","_checkboxType","CheckboxCellType","CHECKBOX_TYPE","_dateType","DateCellType","DATE_TYPE","_dropdownType","DropdownCellType","DROPDOWN_TYPE","_handsontableType","HandsontableCellType","HANDSONTABLE_TYPE","_numericType","NumericCellType","NUMERIC_TYPE","_passwordType","PasswordCellType","PASSWORD_TYPE","_selectType","SelectCellType","SELECT_TYPE","TEXT_TYPE","_timeType","TimeCellType","TIME_TYPE","_dateRenderer","dateRenderer","_autoColumnSize","AutoColumnSize","_autofill","Autofill","_autoRowSize","AutoRowSize","BasePlugin","_bindRowsWithHeaders","BindRowsWithHeaders","_collapsibleColumns","CollapsibleColumns","_columnSorting","ColumnSorting","_columnSummary","ColumnSummary","_comments","Comments","_contextMenu","ContextMenu","_copyPaste","CopyPaste","_customBorders","CustomBorders","_dragToScroll","DragToScroll","_dropdownMenu","DropdownMenu","_exportFile","ExportFile","_filters","Filters","_formulas","Formulas","_hiddenColumns","HiddenColumns","_hiddenRows","HiddenRows","_manualColumnFreeze","ManualColumnFreeze","_manualColumnMove","ManualColumnMove","_manualColumnResize","ManualColumnResize","_manualRowMove","ManualRowMove","_manualRowResize","ManualRowResize","_mergeCells","MergeCells","_multiColumnSorting","MultiColumnSorting","_multipleSelectionHandles","MultipleSelectionHandles","_nestedHeaders","NestedHeaders","_nestedRows","NestedRows","_persistentState","PersistentState","_search","Search","_touchScroll","TouchScroll","_trimRows","TrimRows","_undoRedo","UndoRedo","_ghostTable","_samplesGenerator","COLUMN_SIZE_MAP_NAME","_cachedColumnHeaders","_visualColumnsToRefresh","_AutoColumnSize_brand","SETTING_KEYS","CALCULATION_STEP","SYNC_CALCULATION_LIMIT","GhostTable","SamplesGenerator","spanned","IndexToValueMap","columnWidthsMap","isDblClick","_onBeforeColumnResize","enablePlugin","enabled","setting","useHeaders","ghostTable","setSetting","setSamplingOptions","_onAfterLoadData","_onBeforeChange","_onAfterFormulasValuesUpdate","_onBeforeRender","_onInit","updatePlugin","findColumnsWhereHeaderWasChanged","disablePlugin","calculateVisibleColumnsWidth","overwriteCache","calculateColumnsWidth","colRange","rowRange","columnsRange","rowsRange","samples","samplesGenerator","generateColumnSamples","sample","addColumn","getWidths","measuredColumns","clean","calculateAllColumnsWidth","timer","loop","syncLimit","getSyncCalculationLimit","samplingRatio","allowSampleDuplicates","setSampleCount","setAllowDuplicates","recalculateAllColumnsWidth","limit","colsLimit","defaultWidth","keepMinimum","_this$hot$view$getFir","_this$hot$view$getLas","changedColumns","columnTitle","cachedColumnsLength","physicalColumns","isNeedRecalculate","_calculateSpecificColumnsWidth","visualColumns","isFirstLoad","columnProperty","newSize","_change$address","address","DEPS_TYPE_CHECKERS","missingDepsMsgs","initializedPlugins","_hooks","_BasePlugin_brand","onAfterPluginsInitialized","onUpdateSettings","pluginDeps","PLUGIN_DEPS","deps","missingDependencies","dependency","moduleName","errorMsg","isAllPluginsAreInitialized","initialized","_this$eventManager","removeHooks","callOnPluginsReady","isPluginsReady","pluginsInitializedCallbacks","relevantToSettings","_isRelevantToSettings","_this$eventManager2","settingKeys","addRow","createContainer","rowObject","createColGroupsCol","addColumnHeadersRow","colHeader","appendColumnHeadersRow","columnObject","th","tBody","getHeights","injected","injectTable","setSettings","createColElement","domFragment","removeTable","isVertical","isHorizontal","tableLayout","containerClassName","SAMPLE_COUNT","dataFactory","getSampleCount","customSampleCount","sampleCount","allowDuplicates","generateRowSamples","generateSamples","specifierRange","generateSample","specifierValue","computedKey","sampledValues","hasCustomBundleSeed","seed","needed","duplicate","INSERT_ROW_ALTER_ACTION_NAME","INTERVAL_FOR_ADDING_ROW","_Autofill_brand","mapSettings","_onAfterCellCornerMouseDown","_onCellCornerDblClick","_onBeforeCellMouseOver","clearMappedSettings","getSelectionData","copyableRanges","copyableRows","copyableColumns","rowSet","fillIn","fillStartRow","fillStartColumn","fillEndRow","fillEndColumn","selectionRangeLast","resetSelectionOfDraggedArea","cornersOfSelectedCells","cornersOfSelectionAndDragAreas","directionOfDrag","startOfDragCoords","endOfDragCoords","getDragDirectionAndRange","selectionData","sourceRange","targetRange","beforeAutofillHookResult","fillData","dragLength","fillOffset","setSelection","reduceSelectionAreaIfNeeded","getCoordsOfDragAndDropBorders","coordsOfSelection","bottomRightCorner","directions","DIRECTIONS","showBorder","coordsOfDragAndDropBorders","redrawBorders","addingStarted","addNewRowIfNeeded","cornersOfSelectedDragArea","nrOfTableRows","getIndexOfLastAdjacentFilledInRow","lastFilledInRowIndex","dataInCell","dataInNextLeftCell","dataInNextRightCell","addSelectionFromStartAreaToSpecificRowIndex","selectStartArea","cornersOfArea","selectAdjacent","handleDraggedCells","getIfMouseWasDraggedOutside","tableBottom","tableRight","_onMouseUp","_onMouseMove","mappedSettings","getMappedFillHandleSetting","selectionApplied","mouseDownOnCellCorner","mouseWasDraggedOutside","mouseDragOutside","startSelection","endSelection","ROW_WIDTHS_MAP_NAME","_visualRowsToRefresh","_AutoRowSize_brand","rowHeightsMap","_onBeforeRowResize","recalculateAllRowsHeight","headerHeight","calculateVisibleRowsHeight","calculateRowsHeight","measuredRows","calculateAllRowsHeight","rowsLimit","defaultHeight","cachedHeight","clearCacheByRange","_calculateSpecificRowsHeight","visualRows","changedRows","_looseBindsMap","_strictBindsMap","DEFAULT_BIND","bindTypeToMapStrategy","LooseBindsMap","StrictBindsMap","_BindRowsWithHeaders_brand","bindType","MapStrategy","headerIndexes","_onModifyRowHeader","getNextValue","COLLAPSIBLE_ELEMENT_CLASS","actionDictionary","hideColumn","beforeHook","afterHook","_collapsedColumnsMap","_CollapsibleColumns_brand","nestedHeadersPlugin","headerStateManager","getStateManager","_onAfterGetColHeader","_onBeforeOnCellMouseDown","detectedOverlappedHeaders","mapState","headerSettings","collapsible","origColspan","mergeStateWith","clearButtons","_this$headerStateMana","isCollapsed","getHeaderTreeNodeData","expandSection","collapseSection","headerLevels","mainHeaders","topHeaders","topLeftCornerHeaders","removeButton","masterLevel","topLevel","topLeftCornerLevel","toggleCollapsibleSection","toggleAllCollapsibleSections","mapNodes","levelToRowCoords","collapseAll","expandAll","filteredCoords","isActionPossible","_this$headerStateMana2","getHeaderSettings","nodeModRollbacks","affectedColumnsIndexes","colspanCompensation","affectedColumns","rollbackModification","triggerNodeModification","currentCollapsedColumns","getCollapsedColumns","destinationCollapsedColumns","actionTranslator","isActionAllowed","nodeModRollback","isActionPerformed","_this$headerStateMana3","isNodeCollapsible","isAriaTagsEnabled","collapsibleElement","_collapsibleElement","initialLoad","APPEND_COLUMN_CONFIG_STRATEGY","REPLACE_COLUMN_CONFIG_STRATEGY","_columnStatesManager","_domHelpers","_rootComparator","_sortService","registerRootComparator","rootComparator","_ColumnSorting_brand","pluginKey","columnStatesManager","ColumnStatesManager","columnMetaCache","getMergedPluginSettings","onAfterOnCellMouseDown","_loadOrSortBySettings","clearColHeader","headerSpanElement","getHeaderSpanElement","isFirstLevelColumnHeader","updateHeaderClasses","indexesSequenceCache","getColumnNextConfig","sortConfig","currentSortConfig","getSortConfig","destinationSortConfigs","getNormalizedSortConfigs","sortPossible","areValidSortConfigs","allowSort","setSortStates","sortByPresetSortStates","saveAllSortSettings","clearSort","isSorted","isListOfSortedColumnsEmpty","getColumnSortState","getSortStates","setSortConfig","sortConfigs","numberOfColumns","areValidSortStates","allSortSettings","getAllColumnsProperties","translateColumnToPhysical","restOfProperties","initialConfig","getAllSavedSortSettings","storedAllSortSettings","translateColumnToVisual","sortOrder","getSortOrderOfColumn","nextSortOrder","getNextSortOrder","getNextSortConfig","columnToChange","strategyId","indexOfColumnToChange","getIndexOfColumnInSortQueue","isColumnSorted","nextColumnConfig","getPluginColumnConfig","columnConfig","pluginColumnConfig","pluginMainSettings","storedColumnProperties","getFirstCellSettings","cellMetaCopy","getNumberOfRowsToSort","numberOfRows","indexesWithData","getDataForSortedColumns","indexesBefore","indexWithData","indexesAfter","indexMapping","indexBefore","indexInsideArray","newIndexesSequence","sortBySettings","updateAllColumnsProperties","getClassesToRemove","getClassesToAdd","wasClickableHeaderClicked","pluginSettingsForColumn","headerActionEnabled","headerAction","HEADER_SPAN_CLASS","wasHeaderClickedProperly","nextConfig","_this$columnStatesMan","showSortIndicator","indicator","currentSortState","inheritedColumnProperties","SORT_EMPTY_CELLS_DEFAULT","SHOW_SORT_INDICATOR_DEFAULT","HEADER_ACTION_DEFAULT","mapName","sortingStates","columnProperties","sortEmptyCells","compareFunctionFactory","searchedColumn","_this$sortingStates$g","getNumberOfSortedColumns","sortingStatesQueue","sortStates","ASC_SORT_STATE","DESC_SORT_STATE","isValidColumnState","columnState","sortedColumns","TRs","clickEvent","createDateTimeCompareFunction","columnPluginSettings","DO_NOT_SWAP","FIRST_BEFORE_SECOND","FIRST_AFTER_SECOND","firstDate","nextDate","isAfter","isBefore","getRootComparator","getCompareFunctionFactory","_engine","_numeric","_checkbox","_time","registerCompareFunctionFactory","getGloballyCompareFunctionFactory","hasGloballyCompareFunctionFactory","DEFAULT_DATA_TYPE","CHECKBOX_DATA_TYPE","checkboxSort","DATE_DATA_TYPE","dateSort","defaultSort","NUMERIC_DATA_TYPE","numericSort","TIME_DATA_TYPE","timeSort","COLUMN_DATA_TYPE","parsedFirstValue","parsedSecondValue","isEmptyValue","isEmptyNextValue","unifiedValue","unifiedNextValue","isValueFromTemplate","isNextValueFromTemplate","defaultCompareFunctionFactory","rootComparatorId","argsForRootComparator","HEADER_CLASS_ASC_SORT","HEADER_CLASS_DESC_SORT","HEADER_CLASS_INDICATOR_DISABLED","HEADER_SORT_CLASS","HEADER_ACTION_CLASS","orderToCssClass","cssClasses","columnOrder","sortingOrders","columnMetas","rowIndexWithValues","nextRowIndexWithValues","nextValues","getCompareResult","sortingOrder","pluginSettings","compareResult","_endpoints","_ColumnSummary_brand","endpoints","Endpoints","_onAfterInit","_onAfterChange","_onAfterUpdateSettings","resetSetupBeforeStructureAlteration","resetSetupAfterStructureAlteration","_onAfterRowMove","currentEndpoint","initEndpoints","endpoint","calculateSum","calculateMinMax","countEntries","calculateAverage","customFunction","getPartialSum","biggestDecimalPlacesCount","getCellValue","isNullishOrNaN","decimalPlaces","partialResult","getPartialMinMax","countEmpty","counter","emptyCount","entriesCount","cellClassName","forceNumeric","suppressDataTypeErrors","refreshCellMetas","refreshChangedEndpoints","parseSettings","refreshAllEndpoints","getEndpoint","settingsType","fillMissingEndpointData","getAllEndpoints","endpointsArray","newEndpoint","assignSetting","destinationColumn","reversedRowCoords","number","destinationRow","alterRowOffset","alterColumnOffset","resetAllEndpoints","forceRefresh","beforeViewRenderCallback","multiplier","rowMoving","placeOfAlteration","extendEndpointRanges","recreatePhysicalRanges","clearOffsetInformation","shiftEndpointCoordinates","previousPosition","newRanges","allIndexes","newRange","coord","offsetStartIndex","subElement","useOffset","anyEndpointOutOfRange","alterColOffset","cellsToSetCache","resetEndpointValue","setEndpointValue","needToRefresh","changesObj","refreshEndpoint","destinationVisualRow","visualEndpointRowIndex","throwOutOfBoundsWarning","roundFloat","roundFloatValue","decimalPlacesCount","toFixed","_commentEditor","_displaySwitch2","_predefinedItems","_addEditComment","_removeComment","_readOnlyComment","META_COMMENT","META_COMMENT_VALUE","META_STYLE","META_READONLY","SHORTCUTS_CONTEXT_NAME","_displaySwitch","_preventEditorAutoSwitch","_preventEditorHiding","_cellBelowCursor","_commentValueBeforeSave","_Comments_brand","CommentEditor","_onEditorResize","DisplaySwitch","getDisplayDelaySetting","addToContextMenu","_onAfterRenderer","_onAfterScroll","showAtCell","updateDelay","manager","pluginContext","setRange","show","focusEditor","isFocused","editorElement","getEditorInputElement","_onMouseOver","_onMouseDown","_onEditorFocus","_onEditorBlur","clearRange","targetIsCellWithComment","closestCell","targetIsCommentTextArea","setComment","editorValue","comment","updateCommentMeta","setCommentAtCell","removeComment","forceRender","removeCommentAtCell","getComment","getCommentMeta","getCommentAtCell","cancelHiding","refreshEditor","_renderableRow","_renderableColumn","targetingPreviousRow","setPosition","isBeforeRenderedRows","isBeforeRenderedColumns","commentStyle","resetSize","lastColWidth","cellHeight","editorWidth","editorHeight","getSize","setReadOnlyState","observeSize","oldComment","newComment","items","SEPARATOR","addEditCommentItem","removeCommentItem","readOnlyCommentItem","commentSetting","displayDelay","getInputElement","eventCell","coordinates","_editorResizeObserver","_rootDocument","_container","_editorStyle","_hidden","_resizeObserver","CLASS_EDITOR_CONTAINER","CLASS_EDITOR","CLASS_INPUT","CLASS_CELL","EditorResizeObserver","createEditor","setObservedElement","textarea","containerParentElement","_ignoreInitialCall","_observedElement","_EditorResizeObserver_brand","_onResize","borderBoxSize","inlineSize","blockSize","DEFAULT_DISPLAY_DELAY","DEFAULT_HIDE_DELAY","wasLastActionShow","hidingTimer","showDebounced","_alignment","ALIGNMENT","KEY","_clearColumn","CLEAR_COLUMN","_columnLeft","COLUMN_LEFT","_columnRight","COLUMN_RIGHT","_readOnly","READ_ONLY","_redo","REDO","_removeColumn","REMOVE_COLUMN","_removeRow","REMOVE_ROW","_rowAbove","ROW_ABOVE","_rowBelow","ROW_BELOW","_separator","_noItems","NO_ITEMS","_undo","UNDO","ITEMS","separatorItem","noItemsItem","rowAboveItem","rowBelowItem","columnLeftItem","columnRightItem","clearColumnItem","removeRowItem","removeColumnItem","undoItem","redoItem","readOnlyItem","alignmentItem","predefinedItems","itemFactory","submenu","checkable","ariaLabel","ariaChecked","hasSelectionAClass","markLabelAsSelected","stateBefore","getAlignmentClasses","alignment","align","prepareVerticalAlignClass","replacedClassName","prepareHorizontalAlignClass","classes","cellDescriptor","propertySetter","applyAlignClassName","checkSelectionConsistency","comparator","getDocumentOffsetByElement","baseDocument","getAlignmentComparatorByClass","htClassName","latestSelection","alterAction","atLeastOneReadOnly","redo","isRedoAvailable","isCommand","isUndoAvailable","areReadOnly","currentState","_commandExecutor","_itemsFactory","_menu","_ContextMenu_brand","CommandExecutor","DEFAULT_ITEMS","commandExecutor","setCommonCallback","menu","Menu","keepInViewport","uiContainer","_onMenuBeforeOpen","_onMenuAfterOpen","_onMenuAfterClose","executeCommand","_onAfterOnCellContextMenu","rect","above","getNavigator","toFirstItem","_this$menu","below","prepareMenuItems","themeHasTableBorder","tableBorderWidth","_this$menu2","itemsFactory","commandName","execute","ItemsFactory","setPredefinedItems","menuItems","setMenuItems","registerCommand","showRowHeaders","showColHeaders","isValidElement","commandDescriptor","commonCallback","commandSplit","commandNamePrimary","subCommandName","findSubCommand","unshift","subCommands","cmd","cmds","orderPattern","defaultOrderPattern","predefinedItemsCollection","menuItemKey","itemsPattern","defaultPattern","_positioner","_navigator2","_menuItemRenderer","MIN_WIDTH","_navigator","_shortcutsCtrl","_tableBorderWidth","hotMenu","standalone","positioner","Positioner","parentMenu","isSubMenu","onDocumentMouseDown","onDocumentContextMenu","getKeyboardShortcutsCtrl","getSelectedItem","hasSelectedItem","delayedOpenSubMenu","openSubMenu","minWidthOfMenu","noItemsDefined","filteredItems","isItemHidden","filterSeparators","shouldAutoCloseMenu","modifyColWidth","createMenuItemRenderer","beforeOnCellMouseOver","setCurrentPage","afterOnCellMouseOver","isAllSubMenusClosed","afterOnCellContextMenu","afterSelection","beforeOnCellMouseUp","isCommandPassive","afterOnCellMouseUp","afterUnlisten","origOutsideClickDeselects","onAfterInit","createMenuNavigator","createKeyboardShortcutsCtrl","closeParent","closeAllSubMenus","hasSubMenu","dataItem","subMenu","hotSubMenus","closeSubMenu","menus","menuContainerParentElement","selectedItem","selRanges","normalizedSelection","normalizeSelection","isItemSeparator","isItemDisabled","isItemSubMenu","area","setParentElement","setElement","updatePosition","updateMenuDimensions","currentHiderWidth","realHeight","itemCell","currentRowHeight","doc","_cursor2","_parentContainer","_cursor","_keepInViewport","Cursor","fitsBelow","setPositionBelowCursor","fitsAbove","setPositionAboveCursor","updateHorizontalPosition","setPositionOnRightOfCursor","fitsOnLeft","setPositionOnLeftOfCursor","fitsOnRight","borderLeftWidth","topRelative","leftRelative","getSourceType","pageY","pageX","_paginator","createPaginator","onItemSelect","directItemChange","isSeparator","isDisabled","isSelectionDisabled","onClear","initialPage","visitedPages","_updateState","newIndex","lastIndex","changeProceed","getCurrentPage","toLastItem","toNextItem","toPreviousItem","itemToTest","isItemSelectionDisabled","shiftSeparators","separator","popSeparators","removeDuplicatedSeparators","isItemCheckable","_defaultShortcutsList","SHORTCUTS_CONTEXT","customKeyboardShortcuts","customShortcuts","_addShortcuts","createDefaultShortcutsList","addCustomShortcuts","k","getCustomShortcuts","_getContextName","_manager$getContext","mainTableHot","menuHot","wrapper","itemValue","isFocusable","_copy","_copyColumnHeadersOnly","_copyWithColumnGroupHeaders","_copyWithColumnHeaders","_cut","_pasteEvent","_copyableRanges","META_HEAD","_enableCopyColumnHeaders","_enableCopyColumnGroupHeaders","_enableCopyColumnHeadersOnly","_copyMode","_isTriggeredByCopy","_isTriggeredByCut","_copyableRangesFactory","_preventViewportScrollOnPaste","_CopyPaste_brand","CopyableRangesFactory","columnsLimit","countColumnHeaders","_settings$pasteMode","_settings$uiContainer","pasteMode","copyColumnHeaders","copyColumnGroupHeaders","copyColumnHeadersOnly","_onAfterContextMenuDefaultOptions","_onAfterSelection","_onAfterSelectionEnd","onCopy","onCut","onPaste","_onSafariMouseEnter","_onSafariMouseLeave","_onSafariAfterSelection","copy","copyMode","_ensureClipboardEventsGetTriggered","copyCellsOnly","copyWithAllColumnHeaders","copyWithColumnHeaders","cut","getRangedCopyableData","getRangedData","normalizeRanges","paste","pastableText","pastableHtml","pasteData","PasteEvent","clipboardData","setCopyableText","setSelectedRange","groupedRanges","getMostBottomColumnHeadersRange","getAllColumnHeadersRange","getCellsRange","cellsRange","isRangeTrimmed","_this$hot$getActiveEd","populateValues","inputArray","populatedRowsLength","populatedColumnsLength","newRows","endRowFromSelection","endColumnFromSelection","visualRowForPopulatedData","visualColumnForPopulatedData","lastVisualRow","lastVisualColumn","newRow","insertedRow","insertedColumn","_event$target","focusedElement","isHotInput","copiedHeadersCount","_countCopiedHeaders","allowCopying","textPlain","textHTML","ClipboardEvent","_event$target2","rangedData","allowCuttingOut","_event$target3","pastedData","ADD_TAGS","ADD_ATTR","FORCE_BODY","parsedConfig","lastSelectedRange","currentlySelectedCell","_addContentEditableToHighlightedCell","_removeContentEditableFromHighlightedCell","copyItem","copyWithColumnHeadersItem","copyWithColumnGroupHeadersItem","copyColumnHeadersOnlyItem","cutItem","copyPastePlugin","nounForm","_clipboardData","ClipboardData","_selectedRange","_countRows","_countColumns","_rowsLimit","_columnsLimit","_countColumnHeaders","_CopyableRangesFactory_brand","finalEndRow","_trimRowsRange","finalEndCol","_trimColumnsRange","maxRow","maxColumn","_contextMenuItem","_CustomBorders_brand","hideBorders","changeBorderSettings","setBorders","borderObject","borderKeys","normBorder","checkSettingsCohesion","normalizeBorder","borderKey","prepareBorderFromCustomAdded","toInlinePropName","getBorders","savedBorders","selectedBorders","denormalizeBorder","clearBorders","clearBordersFromSelectionSettings","clearNullCellRange","insertBorderIntoSettings","place","hasSavedBorders","checkSavedBorders","hasCustomSelections","checkCustomSelections","borderDescriptor","createEmptyBorders","extendDefaultBorder","prepareBorderFromCustomAddedRange","customBorder","removeAllBorders","borderId","createId","spliceBorder","setBorder","bordersMeta","createSingleEmptyBorder","hideCount","countHide","customSelectionsChecker","checkCustomSelectionsFromContextMenu","createDefaultCustomBorder","prepareBorder","topCol","bottomCol","createCustomBorders","normCustomBorder","check","savedBorder","bordersClone","hasLeftOrRight","hasLeftRightTypeOptions","hasStartOrEnd","hasStartEndTypeOptions","defaultOptions","menuItemTop","menuItemRight","menuItemBottom","menuItemLeft","menuItemNoBorders","_noBorders","noBorders","customBordersPlugin","hasBorder","checkSelectionBorders","markSelected","createDefaultHtBorder","_border$start","_border$end","atLeastOneHasBorder","metaBorders","physicalToInlinePropNames","_physicalToInlineProp","borderDirection","_DragToScroll_brand","_setupListening","unregisterEvents","setBoundaries","boundaries","setCallback","diffX","diffY","listening","onMouseMove","scrollHandler","_scrollHandler$scroll","_scrollHandler$scroll2","horizontalScrollValue","verticalScrollValue","scroll","sign","BUTTON_CLASS_NAME","_isButtonClicked","_DropdownMenu_brand","_onBeforeViewportScrollHorizontally","subMenuInstance","_onSubMenuAfterOpen","_onTableClick","setListening","_addCustomShortcuts","menuInstance","headerRow","headerRowList","existingButton","onclick","_dataProvider","_typeFactory","exportAsString","_createTypeFormatter","export","exportAsBlob","_createBlob","downloadFile","blob","URL","webkitURL","filename","fileExtension","download","url","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","EXPORT_TYPES","typeFactory","DataProvider","typeFormatter","Blob","mimeType","encoding","setOptions","_getDataRange","exportHiddenRows","_isHiddenRow","exportHiddenColumns","_isHiddenColumn","_csv","TYPE_CSV","TYPE_EXCEL","TYPE_PDF","Csv","dataProvider","CHAR_CARRIAGE_RETURN","CHAR_DOUBLE_QUOTES","CHAR_LINE_FEED","BaseType","DEFAULT_OPTIONS","bom","columnDelimiter","rowDelimiter","_escapeCell","escapedValue","_mergeOptions","YYYY","getFullYear","MM","getMonth","DD","constants","_condition","_operators","_value","_actionBar","_conditionCollection","_dataFilter","_conditionUpdateObserver","_focusController","_menuFocusNavigator","_Filters_brand","filtersRowsMap","dropdownMenuPlugin","dropdownSettings","menuContainer","addConfirmationHooks","component","_onActionBarSubmit","_onComponentChange","filterByConditionLabel","filterValueLabel","components","conditionComponent","ConditionComponent","addSeparator","_onSelectUIClosed","OperatorsComponent","ValueComponent","ActionBarComponent","conditionCollection","ConditionCollection","conditionUpdateObserver","ConditionUpdateObserver","getDataMapAtColumn","conditionState","_updateComponents","_onAfterDropdownMenuDefaultOptions","_onAfterDropdownMenuShow","_onAfterDropdownMenuHide","mainMenu","focusableItems","menuNavigator","lastSelectedMenuItem","getLastMenuPage","getElements","createMenuFocusController","forwardToFocusNavigation","_this$dropdownMenuPlu","clearConditions","addCondition","operationId","OPERATION_AND","removeConditions","dataFilter","_createDataFilter","needToFilter","visibleVisualRows","conditions","exportAllConditions","allowFiltering","previousConditionStack","trimmedRows","visibleVisualRowsAssertion","createArrayAssertion","setPreviousConditionStack","getSelectedColumn","_this$hot$getDataAtCe","dataValue","toEmptyString","updateValueComponentCondition","dataAtCol","selectedValues","unifyColumnValues","updateStatesAtColumn","restoreComponents","_this$getSelectedColu","restoreState","updateDependentComponentsVisibility","getOperationBasedOnArguments","suggestedOperation","byConditionState1","byConditionState2","byValueState","operation","OPERATION_OR","CONDITION_NONE","OPERATION_OR_THEN_VARIABLE","setListeningDropdownMenu","getState","componentsToShow","showOperators","showComponents","hideComponents","DataFilter","getIndexesOfComponents","getMenuItemDescriptor","changeComponentsVisibility","visible","showRows","hideRows","hasConditions","getSelectElement","closeOptions","submitType","_this$dropdownMenuPlu3","_this$dropdownMenuPlu2","getActiveOperationId","groupChanges","columnStackPosition","getColumnStackPosition","flush","saveState","inputsCount","conditionsState","_this$dropdownMenuPlu4","editedConditionStack","conditionsByValue","CONDITION_BY_VALUE","conditionsWithoutByValue","operationType","getOperation","updateState","_input","_select","_conditionRegisterer","_ConditionComponent_brand","BaseComponent","stateless","SelectUI","InputUI","_onConditionSelect","getInputElements","_onInputKeyDown","setState","copyOfCommand","arg","getConditionDescriptor","disableSelection","ui","getOptionsList","setItems","stateId","_none","CONDITION_NAME","_empty","CONDITION_EMPTY","_notEmpty","CONDITION_NOT_EMPTY","_equal","CONDITION_EQUAL","_notEqual","CONDITION_NOT_EQUAL","_greaterThan","CONDITION_GREATER_THAN","_greaterThanOrEqual","CONDITION_GREATER_THAN_OR_EQUAL","_lessThan","CONDITION_LESS_THAN","_lessThanOrEqual","CONDITION_LESS_THAN_OR_EQUAL","_between","CONDITION_BETWEEN","_notBetween","CONDITION_NOT_BETWEEN","_beginsWith","CONDITION_BEGINS_WITH","_endsWith","CONDITION_ENDS_WITH","_contains","CONDITION_CONTAINS","_notContains","CONDITION_NOT_CONTAINS","_before","CONDITION_DATE_BEFORE","_after","CONDITION_DATE_AFTER","_tomorrow","CONDITION_TOMORROW","_today","CONDITION_TODAY","_yesterday","CONDITION_YESTERDAY","_byValue","_true","CONDITION_TRUE","_false","CONDITION_FALSE","_conjunction","OPERATION_ID","_disjunction","_disjunctionWithExtraCondition","TYPE_NUMERIC","TYPE_TEXT","TYPE_DATE","TYPES","typeName","typeValue","getCondition","conditionArguments","inputValuesDecorator","registerCondition","inputValues","conditionValue","_from","_to","dateBefore","dateAfter","inputDate","diff","endsWith","isSame","subtract","startOf","sortCompare","sortComparison","toVisualValue","defaultEmptyValue","visualValue","SUPPORT_SET_CONSTRUCTOR","SUPPORT_FAST_DEDUPE","initialData","dataset","unifiedValues","intersectValues","same","selectedItemsAssertion","_logicalOperationRegisterer","SHORT_NAME_FOR_COMPONENT","operationResult","registerOperation","operations","getOperationFunc","getOperationName","_InputUI_brand","BaseUI","DEFAULTS","_onKeyup","build","icon","isBuilt","translateIfPossible","STATE_BUILT","STATE_BUILDING","EVENTS_TO_REGISTER","wrapIt","buildState","registerEvent","role","_menu2","_items","_caption","_captionElement","_dropdown","_SelectUI_brand","getMenu","_onClick","translateNames","caption","dropdown","_onMenuSelect","_onMenuClosed","conditionName","openOptions","_radioInput","SELECTED_AT_START_ELEMENT_INDEX","_OperatorsComponent_brand","buildOperatorsElement","operationKeys","radioInput","RadioInputUI","htmlFor","_onRadioInputChange","setChecked","searchedIndex","operationElement","isChecked","selectedOperationId","_label","_multipleSelect","_ValueComponent_brand","MultipleSelectUI","getMultipleSelectElement","_onModifyDisplayedValue","selectElement","getSearchInputElement","getSelectAllElement","getClearAllElement","itemsSnapshot","setLocale","availableItems","isSelectedAllValues","stateInfo","updateColumnState","conditionArgsChange","filteredRowsFactory","conditionsStack","firstByValueCondition","defaultBlankCellValue","filteredRows","rowValues","rowMetaMap","unifiedRowValues","_triggerModifyMultipleSelectionValueHook","dependentConditionStacks","rowEntries","_getColumnVisibleValues","metaMap","getRenderedNumericValue","_link","_itemsBox","_locale","_searchInput","_selectAllUI","_clearAllUI","_MultipleSelectUI_brand","LinkUI","getItemsBox","_onInput","_onSelectAllClick","_onClearAllClick","getLocale","itemsToValue","itemsBoxWrapper","selectionControl","hotInitializer","beforeRenderer","afterListen","valueToItems","isKeyCode","arrayAssertion","href","_ActionBarComponent","_ActionBarComponent_brand","BUTTON_OK","BUTTON_CANCEL","identifier","_onButtonClick","accept","cancel","MAP_NAME","isMapRegistrable","filteringStates","getFilteredColumns","isMatch","_stateForColumn$condi","stateForColumn","isMatchInConditions","conditionDefinition","localeForColumn","columnType","conditionsForColumn","getConditions","_this$filteringStates","_this$filteringStates2","_this$filteringStates3","allConditions","importAllConditions","stack","columnDataFactory","filteredData","_getIntersectData","filterByColumn","needles","needleRow","_ConditionUpdateObserver_brand","_onConditionBeforeModify","_onConditionBeforeClean","_onConditionAfterClean","grouping","editedColumnPosition","latestEditedColumnPosition","conditionsBefore","conditionsAfter","visibleDataFactory","curriedConditionsBefore","curriedColumn","splitConditionCollection","curriedConditionsBeforeArray","allRows","visibleRowsAssertion","editedConditions","latestOrderStack","_focusNavigator","SHORTCUTS_MENU_CONTEXT","focusNavigator","createFocusNavigator","updateNavigatorPosition","addKeyboardShortcuts","mainMenuShortcutsCtrl","currentMenuShortcutsCtrl","_indexSyncer","isBlockedSource","_internalOperationPending","_hotWasInitializedWithEmptyData","_engineListeners","_Formulas_brand","this","_onEngineValuesUpdated","_onEngineNamedExpressionsAdded","_onEngineNamedExpressionsRemoved","_onEngineSheetAdded","_onEngineSheetRenamed","_onEngineSheetRemoved","sheetId","sheetName","engine","getSheetId","_setupEngine","setupEngine","doesSheetExist","newSheetName","addSheet","_onBeforeLoadData","_onModifyData","_onModifySourceData","_onBeforeValidate","_onAfterSetSourceDataAtCell","_onAfterSetDataAtCell","_onBeforeCreateRow","_onBeforeCreateCol","_len19","_key19","_onAfterCreateRow","_len20","_key20","_onAfterCreateCol","_len21","_key21","_onBeforeRemoveRow","_len22","_key22","_onBeforeRemoveCol","_len23","_key23","_onAfterRemoveRow","_len24","_key24","_onAfterRemoveCol","indexSyncer","IndexSyncer","postponedAction","rowAxisSyncer","getForAxis","columnAxisSyncer","getIndexesChangeSyncMethod","movedRows","movePossible","storeMovesInformation","movedColumns","dropIndex","orderChanged","calculateAndSyncMoves","freezePerformed","unfreezePerformed","_len25","_key25","_onAfterCellMetaReset","setPerformUndo","setPerformRedo","_len26","_key26","_onAfterDetachChild","_len27","_key27","_onBeforeAutofill","on","off","unregisterEngine","newEngineSettings","getEngineSettingsWithOverrides","haveEngineSettingsChanged","getConfig","updateConfig","switchSheet","_this$engine","sheetData","actualSheetName","setSheetContent","serialized","getSheetSerialized","sheet","getHfIndexFromVisualIndex","isFormulaCellType","doesCellHaveFormula","renderDependentSheets","dependentCells","renderSelf","affectedSheetIds","getRegisteredHotInstances","relatedHot","_relatedHot$view","validateDependentCells","changedCells","stringifyAddress","_change$address2","changedCellsSet","_change$address3","_change$address4","addressId","boundHot","syncChangeWithEngine","isItPossibleToSetCellContents","isDate","isDateValid","getDateInHfFormat","isFormula","setCellContents","getDateFromExcelDate","sourceTopStartRow","sourceTopStartColumn","sourceBottomEndRow","sourceBottomEndColumn","targetTopStartRow","targetTopStartColumn","targetBottomEndRow","targetBottomEndColumn","engineSourceRange","engineTargetRange","fillRangeData","getFillRangeData","sourceStartRow","sourceStartColumn","sourceEndRow","sourceEndColumn","populationRowLength","populationColumnLength","populatedRowIndex","populatedColumnIndex","populatedValue","sourceCellMeta","getDateInHotFormat","sourceDataArray","valueChanged","setupSheet","isItPossibleToReplaceSheetContent","setupSyncEndpoint","ioMode","isEscapedFormulaExpression","unescapeFormulaExpression","singleCellMeta","dimensions","getSheetDimensions","getCellSerialized","outOfBoundsChanges","outOfBoundsDependentCells","hfRowIndex","isItPossibleToAddRows","hfColumnIndex","isItPossibleToAddColumns","hfRows","setRemovedHfIndexes","possible","hfRow","isItPossibleToRemoveRows","hfColumns","hfColumn","isItPossibleToRemoveColumns","addRows","addColumns","descendingHfRows","getRemovedHfIndexes","removeRows","descendingHfColumns","removeColumns","finalElementRowIndex","_element$__children","rowsData","__children","relativeRowIndex","namedExpressionName","addedSheetDisplayName","oldDisplayName","newDisplayName","removedSheetDisplayName","getEngineRelationshipRegistry","registryKey","pluginStaticRegistry","getSharedEngineUsageRegistry","engineConfigItem","hyperformula","_engineConfigItem$hyp","registerEngine","engineRelationship","sharedEngineUsage","DEFAULT_LICENSE_KEY","leapYear1900","DEFAULT_SETTINGS","nullDate","engineClass","engineSettings","getEngineSettingsWithDefaultsAndOverrides","engineRegistry","sharedEngineRegistry","registerCustomFunctions","engineInstance","buildEmpty","registerNamedExpressions","namedExpressions","rebuildAndRecalculate","_engineRegistry$get","hotInstances","engineHotRelationship","customFunctions","translations","registerFunction","languageSetting","langCode","suspendEvaluation","namedExp","scope","addNamedExpression","resumeEvaluation","useArrayArithmetic","useColumnIndex","useStats","evaluateNullToZero","precisionEpsilon","precisionRounding","smartRounding","year","month","day","nullYear","dateFormats","timeFormats","matchWholeCell","useRegularExpressions","useWildcards","functionArgSeparator","thousandSeparator","decimalSeparator","getEngineSettingsOverrides","_hotSettings$PLUGIN_K","maxColumns","cleanEngineSettings","_pluginSettings$engin","overrides","_pluginSettings$engin2","currentEngineSettings","settingOption","DEFAULT_DATE_FORMAT_HYPERFORMULA","numericDate","dateOffset","dateForFormatting","UTC","_axisSyncer","_rowIndexSyncer","_columnIndexSyncer","_postponeAction","_isPerformingUndo","_isPerformingRedo","_sheetId","postponeAction","AxisSyncer","indexType","flagValue","isPerformingUndoRedo","getEngine","getPostponeAction","_moves","_axis","_movedIndexes","_finalIndex","_removedIndexes","axis","syncMoves","moves","NUMBER_OF_MOVED_INDEXES","SYNC_MOVE_METHOD_NAME","move","moveToTheSamePosition","anotherMoveWithoutEffect","movedVisualIndexes","visualFinalIndex","calculatedMoves","getMoves","SYNC_ORDER_CHANGE_METHOD_NAME","newSequence","relativeTransformation","sheetDimensions","sizeForAxis","numberOfReorganisedIndexes","getMoveLine","notMovedElements","_notMovedElements$fin","getInitiallyCalculatedMoves","moveLine","movedIndex","previouslyMovedIndex","isMovingFromEndToStart","isMovingElementBefore","isMovingAfterElement","adjustedCalculatedMoves","nextMoved","nextMovedIndex","isMovingFromStartToEnd","_hideColumn","_showColumn","_hiddenColumnsMap","_HiddenColumns_brand","copyPasteEnabled","_onMapInit","_onAfterGetCellMeta","_onModifyColWidth","_onModifyCopyableRange","resetCellsMeta","showColumns","currentHideConfig","getHiddenColumns","isValidConfig","destinationHideConfig","hidingMapValues","isAnyColumnShowed","hiddenIndexes","continueHiding","showColumn","hideColumns","isConfigValid","indicators","containAfterHiddenColumn","pushRange","hideColumnItem","showColumnItem","hiddenColumnsPlugin","columnsToHide","lastHiddenColumn","columnToSelect","_this$columnIndexMapp","_this$columnIndexMapp2","startVisualColumn","endVisualColumn","allColumnsSelected","hiddenPhysicalColumns","selectedRangeLast","visualStartColumn","visualEndColumn","renderableStartColumn","renderableEndColumn","notTrimmedColumnIndexes","physicalColumnIndexes","visualColumnsInRange","renderedColumnsInRange","physicalIndexesInRange","lastVisualIndex","lastRenderableIndex","_hideRow","_showRow","_hiddenRowsMap","_HiddenRows_brand","_onModifyRowHeight","_onAfterGetRowHeader","getHiddenRows","isAnyRowShowed","showRow","hideRow","containAfterHiddenRow","hideRowItem","showRowItem","hiddenRowsPlugin","rowsToHide","lastHiddenRow","_this$rowIndexMapper$","_this$rowIndexMapper$2","startVisualRow","endVisualRow","allRowsSelected","hiddenPhysicalRows","visualStartRow","visualEndRow","renderableStartRow","renderableEndRow","notTrimmedRowIndexes","physicalRowIndexes","visualRowsInRange","renderedRowsInRange","_freezeColumn","_unfreezeColumn","_afterFirstUse","_ManualColumnFreeze_brand","_addContextMenuEntry","_onBeforeColumnMove","freezeColumn","beforeColumnFreezeHook","_fixedColumnsStart","unfreezeColumn","beforeColumnUnfreezeHook","freezeColumnItem","unfreezeColumnItem","freezeLine","manualColumnFreezePlugin","_backlight2","_guideline2","CSS_PLUGIN","CSS_SHOW_UI","CSS_ON_MOVING","CSS_AFTER_SELECTION","_backlight","_guideline","_columnsToMove","_countCols","_pressed","_target","_cachedDropIndex","_hoveredColumn","_rootElementOffset","_hasRowHeaders","_ManualColumnMove_brand","BacklightUI","GuidelineUI","_onBeforeOnCellMouseOver","_onAfterScrollVertically","buildPluginUI","moveBySettingsOrLoad","moveColumn","moveColumns","isMovePossible","beforeMoveHook","movePerformed","isColumnOrderChanged","dragColumn","dragColumns","countFinalIndex","tooHighDestinationIndex","tooLowDestinationIndex","tooLowMovedColumnIndex","movedColumn","tooHighMovedColumnIndex","nrOfMovedElement","numberOfColumnsLowerThanDropIndex","currentColumnIndex","getColumnsWidth","persistentStateLoad","isFixedColumnsStart","persistentStateSave","storedState","prepareColumnsToMoving","selectedColumns","refreshPositions","firstVisible","scrollStart","tdOffsetStart","tbodyOffsetLeft","backlightElemMarginStart","getOffset","backlightElemWidth","mouseOffsetStart","eventPageX","newCoordsCol","backlightStart","guidelineStart","isHeaderSelection","isSortingElement","guidelineIsNotReady","isAppended","backlightIsNotReady","appendTo","eventOffsetX","countColumnsFrom","inlinePos","firstMovedVisualColumn","firstMovedPhysicalColumn","posTop","CSS_CLASSNAME","STATE_INITIALIZED","STATE_APPENDED","UNIT","inlineProperty","inlinePosition","getPosition","marginTop","inlineProp","PERSISTENT_STATE_KEY","_currentTH","_currentCol","_selectedCols","_currentWidth","_newSize","_startY","_startWidth","_startOffset","_handle","_guide","_isTriggeredByRMB","_dblclick","_autoresizeTimeout","_columnWidthsMap","_config","_ManualColumnResize_brand","inlineDir","_onBeforeStretchingColumnWidth","isDoubleClick","saveManualColumnWidths","loadManualColumnWidths","setManualSize","newWidth","clearManualSize","setupHandlePosition","box","fixedColumn","relativeHeaderPosition","isFullColumnSelected","refreshHandlePosition","setupGuidePosition","handleHeight","handleBottomPosition","refreshGuidePosition","hideHandleAndGuide","checkIfColumnHeader","thead","getClosestTHParent","afterMouseDownTimeout","hookNewSize","selectedColsLength","selectedCol","_onContextMenu","initialSetting","loadedManualColumnWidths","startX","_rowsToMove","_ManualRowMove_brand","_onAfterScrollHorizontally","moveRow","moveRows","isRowOrderChanged","dragRow","dragRows","tooLowMovedRowIndex","movedRow","tooHighMovedRowIndex","numberOfRowsLowerThanDropIndex","currentRowIndex","getRowsHeight","isFixedRowTop","isFixedRowBottom","prepareRowsToMoving","selectedRows","lastVisible","tableScroll","trimmingContainerScroll","pixelsAbove","pixelsRelToTableStart","eventPageY","hiderHeight","tbodyOffsetTop","backlightElemMarginTop","backlightElemHeight","tdMiddle","tdHeight","tdStartPixel","isBelowTable","backlightTop","guidelineTop","leftPos","rowsLen","firstMovedVisualRow","firstMovedPhysicalRow","headerWidth","posLeft","marginLeft","_currentRow","_selectedRows","_currentHeight","_startHeight","_rowHeightsMap","_ManualRowResize_brand","saveManualRowHeights","loadManualRowHeights","newHeight","getLastDesiredRowHeight","isFullRowSelected","handleWidth","handleEndPosition","checkIfRowHeader","tbody","getActualRowHeight","walkontableHeight","selectedRowsLength","loadedManualRowHeights","_cellsCollection","_cellCoords","_toggleMerge","_focusOrder2","_lastSelectedFocus","_lastFocusDelta","_focusOrder","_cellRenderer","_MergeCells_brand","FocusOrder","mergedCellsGetter","mergedCellsCollection","createMergeCellRenderer","MergedCellsCollection","autofillCalculations","AutofillCalculations","selectionCalculations","SelectionCalculations","_onModifyTransformFocus","_onModifyTransformStart","_onModifyTransformEnd","_onBeforeSelectionHighlightSet","_onBeforeSetRangeStart","_onBeforeSelectionFocusSet","_onAfterSelectionFocusSet","_onModifyGetCellCoords","_onAfterIsMultipleSelection","_addMergeActionsToContextMenu","_onAfterViewportRowCalculatorOverride","_onAfterViewportColumnCalculatorOverride","_onModifyAutofillRange","_onBeforeDrawAreaBorders","_onAfterDrawSelection","_onBeforeRemoveCellClassNames","_onBeforeBeginEditing","_onModifyRowHeightByOverlayName","clearCollections","generateFromSettings","ifChromeForceRepaint","rowsToRefresh","rowIndexesToRefresh","mergedCells","mergedCell","wtTableRef","rowToRefresh","rowElement","validateSetting","MergedCellCoords","containsNegativeValues","NEGATIVE_VALUES_WARNING","isOutOfBounds","IS_OUT_OF_BOUNDS_WARNING","IS_SINGLE_CELL","containsZeroSpan","ZERO_SPAN_WARNING","validSettings","mergeCellInfo","nonOverlappingSettings","filterOverlappingMergeCells","populatedNulls","mergeRange","canMergeRange","newMergedCellInfo","auto","mergeSelection","unmergeRange","unmergeSelection","preventPopulation","mergeParent","clearedData","populationInfo","clearedValue","mergedCellAdded","getWithinRange","currentCollection","toggleMerge","mergedCellCoversWholeRange","merge","unmerge","modifyViewportRowStart","mergeParentForViewportStart","renderableIndexAtMergeStart","modifyViewportRowEnd","mergeParentForViewportEnd","mergeEnd","renderableIndexAtMergeEnd","modifyViewportColumnStart","visualStartCol","modifyViewportColumnEnd","visualEndCol","translateMergedCellToRenderable","parentRow","parentColumn","firstNonHiddenRow","firstNonHiddenColumn","topStartCoords","bottomEndCoords","mergedParent","visualColumnIndexStart","visualColumnIndexEnd","notHiddenColumnIndex","visualRowIndexStart","visualRowIndexEnd","notHiddenRowIndex","cloneRange","expandCloneRange","getStartMostColumnIndex","getEndMostColumnIndex","getTopMostRowIndex","getBottomMostRowIndex","mergeRow","mergeColumn","toggleMergeItem","setActiveNode","setPrevNodeAsActive","setNextNodeAsActive","colEnd","getPrevHorizontalNode","colStart","getNextHorizontalNode","getPrevVerticalNode","getNextVerticalNode","buildFocusOrder","drag","correctSelectionAreaSize","dragDirection","dragArea","dragAreaOverlapsCollections","mergedCellsWithinSelectionArea","snapDragArea","shiftCollections","recreateAfterDataPopulation","mergedCellsWithinRange","getLastRow","getLastColumn","getSelectedMergedCellClassName","getSelectedMergedCellClassNameToRemove","mergeCell","activeOverlay","firstMergedCellInRow","viewportRange","maxRowspan","rowspanCorrection","_height","rowspanAfterCorrection","_sumCellsHeights","autoRowSizePlugin","_autoRowSizePlugin$ge","_MergedCellsCollection_brand","mergeCellsPlugin","IS_OVERLAPPING_WARNING","_this$mergedCellsMatr","mergedCellsMatrix","mergedCellsInfo","occupiedCells","filteredMergeCells","localOccupiedCells","isOverlapping","countPartials","mergedCellInfo","newMergedCell","alreadyExists","_addMergedCellToMatrix","mergedCellIndex","_removeMergedCellFromMatrix","mergedCellRange","otherMergedCell","otherMergedCellRange","isFirstRenderableMergedCell","getFirstRenderableCoords","firstRenderableRow","firstRenderableColumn","_getNonIntersectingIndexes","startMostIndex","endMostIndex","topMostIndex","bottomMostIndex","shiftVector","removedMergedCells","currentMerge","removedMerge","scanDirection","_cellRange","cellRangeFactory","includesHorizontally","includesVertically","indexOfChange","shiftValue","shiftedIndex","changeStart","changeEnd","mergeStart","removedOffset","preRemovedOffset","removedPart","isFarther","selectionArea","finalArea","baseArea","foundMergedCells","newDragArea","fillSize","getAutofillSize","baseAreaStartRow","baseAreaStartColumn","baseAreaEndRow","baseAreaEndColumn","verticalDirection","fullCycle","fulls","partials","farthestCollection","getFarthestCollection","newLimit","updateCurrentFillCache","cycleLength","updateObject","currentFillData","dragAreaStartRow","dragAreaStartColumn","dragAreaEndRow","dragAreaEndColumn","getDragArea","mergedCellArray","baseEnd","baseStart","inclusionFunctionName","endOfDragRecreationIndex","fillRange","getRangeFromChanges","inBounds","fullArea","dragRange","mergeRowEnd","mergeColumnEnd","fullMergeAreaWithinSelection","fullySelectedMergedCellClassName","isMergeCellFullySelected","selectionRangesArray","mergedCellIndividualCoords","insideSelections","currentRange","_linkedList","_cellsHorizontalOrder","_cellsVerticalOrder","_currentHorizontalLinkedNode","_currentVerticalLinkedNode","_mergedCellsGetter","_rowIndexMapper","_columnIndexMapper","_FocusOrder_brand","LinkedList","getCurrentVerticalNode","getFirstVerticalNode","prev","getCurrentHorizontalNode","getFirstHorizontalNode","visitedHorizontalCells","_pushOrderNode","last","visitedVerticalCells","inorder","listOrder","mergeCellsVisitor","linkedNode","NodeStructure","temp","interrupt","hasCycle","fast","slow","recursiveReverse","inverse","origRow","origColumn","origRowspan","lastMergedRowIndex","lastMergedColumnIndex","maxRowSpan","maxColSpan","notHiddenRow","notHiddenColumn","notHiddenRowspan","notHiddenColspan","_utils2","CONFLICTED_PLUGIN_KEY","warnAboutPluginsConflict","nextSortedColumn","COLUMN_ORDER_PREFIX","htmlElement","sortSequenceRegExp","cssClass","removeFromDragged","dragged","entryPosition","touchStartRange","targetCoords","rangeWidth","rangeHeight","rangeDirection","newRangeCoords","endTarget","touches","lastSetCell","getCurrentRangeCoords","currentTouch","touchStartDirection","currentDirection","draggedHandle","bottomStartCorner","isDragged","_stateManager2","_stateManager","_hidingIndexMapObserver","_focusInitialCoords","_isColumnsSelectionInProgress","_NestedHeaders_brand","StateManager","_onAfterOnCellMouseDown","_onBeforeOnCellMouseUp","_updateFocusHighlightPosition","_onAfterGetColumnHeaderRenderers","_onModifyColumnHeaderValue","_onBeforeHighlightingColumnHeader","_onBeforeCopy","_onBeforeSelectColumns","_onModifyFocusedElement","setColumnsLimit","isColumnHidden","triggerColumnModification","buildWidthsMap","setLayersCount","getLayersCount","clearColspans","masterNodes","headerRendererFactory","isPlaceholder","headerClassNames","_wtOverlays$topInline","_wtOverlays$inlineSta","isTopInlineStartOverlay","isInlineStartOverlay","correctedColspan","getColumnHeaderValue","innerHeaderDiv","_getHeaderTreeNodeDataByCoords","_this$hot","isNestedHeadersRange","findLeftMostColumnIndex","mostLeftColumnIndex","mostRightColumnIndex","findRightMostColumnIndex","headerNodeData","isRoot","rangeIndex","zeroBasedColumnHeaderLevel","zeroBasedColumnIndex","columnsToSelect","findTopMostEntireHeaderLevel","nextCoords","startNodeData","endNodeData","renderersArray","headerLayer","headerLayersCount","newStartColumn","nonRenderable","cachedWidth","_sourceSettings2","_headersTree2","_nodeModifiers","_matrixGenerator","_tree","_sourceSettings","_headersTree","_stateMatrix","SourceSettings","HeadersTree","nestedHeadersSettings","hasError","buildTree","ex","generateMatrix","getRoots","transformedSettings","rowCoordsToLevel","mergeWith","walkDown","nodeToProcess","actionResult","getHeaderTreeNode","columnIndexFrom","_headerLevel","columnIndexTo","atLeastOneRootFound","getRootByColumn","nodeColumnIndex","nodeHeaderLevel","TRAVERSAL_DF_PRE","_this$getHeaderSettin","stepBackColumn","_this$getHeaderSettin2","isRootNode","_this$getHeaderSettin3","stepForthColumn","getColumnsCount","_this$getHeaderSettin4","_settingsNormalizer","HEADER_CONFIGURABLE_PROPS","_dataLength","normalizeSettings","additionalSettings","propsToExtend","_headersSettings$colu","headersSettings","getHeadersSettings","columnsLength","headersSettingsChunks","currentLength","sourceSettings","normalizedSettings","sourceHeaderSettings","createDefaultHeaderSettings","cancelProcessing","createPlaceholderHeaderSettings","defaultSettings","crossHiddenColumns","_rootNodes","_rootsIndex","normColumnIndex","treeNode","rebuildTreeIndex","columnSettings","TreeNode","buildLeaves","extractionLength","nodeData","addChild","depthFirstPreOrder","continueTraverse","TRAVERSAL_DF_POST","depthFirstPostOrder","TRAVERSAL_BF","breadthFirst","queue","DEFAULT_TRAVERSAL_STRATEGY","TRAVERSAL_STRATEGIES","cloneTree","nodeTree","clonedNode","replaceTreeWith","traversalStrategy","walkUp","_collapse","_expand","availableModifiers","collapseNode","expandNode","gridColumnIndex","_getFirstChildPropert","nodeChilds","isNodeReflected","isNodeReflectsFirstChildColspan","allLeavesExceptMostLeft","traverseHiddenNodeColumnIndexes","clonedTree","getFirstChildProperty","leafData","isCollapsibleNode","headerRoots","matrix","colspanHeaderLayer","createNestedArrayIfNecessary","isRootSettingsFound","headerRootSettings","createHeaderSettings","subArray","nestedHeaderSettingsGetter","widthsMap","_buildGhostTable","isDropdownEnabled","maxRenderedCols","_dataManager","_collapsing","_headers","_rowMoveController","WRONG_DATA_TYPE_ERROR","_skipRender","_skipCoreAPIModifiers","_NestedRows_brand","collapsedRowsMap","dataManager","DataManager","collapsingUI","CollapsingUI","headersUI","HeadersUI","contextMenuUI","ContextMenuUI","rowMoveController","RowMoveController","_onBeforeViewRender","onModifyRowData","onModifySourceLength","onBeforeDataSplice","_onFilterData","_onBeforeAddChild","_onAfterAddChild","_onBeforeDetachChild","_onModifyRowHeaderWidth","_onBeforeRowMove","currentSourceData","updateWithData","translateTrimmedRow","areChildrenCollapsed","expandChildren","collapseChildren","disableCoreAPIModifiers","enableCoreAPIModifiers","getDataObject","countAllRows","isRowHighestLevel","onBeforeRowMove","toggleState","collapsedRowsStash","stash","trimStash","shiftStash","appendOptions","appendLevelIndicators","rowHeaderWidthCache","updateRowHeaderWidth","applyStash","modifiedPhysicalRows","removedRows","isParent","getRowIndex","rewriteCache","nestedRowsPlugin","levels","levelCount","nodeInfo","getRawSourceData","rawSourceData","cache","cacheNode","hasChildren","readTreeNodes","readCount","neededIndex","neededObject","rootLevel","readNodesCount","parentObj","parentReference","mockParent","fakeParent","mockNode","fakeNode","rowObj","getRowIndexWithinParent","getRowParent","rootNodeMock","countChildren","getRowObjectParent","getRowLevel","getRowObjectLevel","isChild","getChild","_parent$__children","_rowObj$__children","childElement","parentIndex","functionalParent","newRowIndex","addChildAtIndex","flattenedIndex","finalChildIndex","addSibling","where","translatedIndex","indexWithinParent","detachFromParent","rowObjects","childRowIndex","childCount","grandparent","grandparentRowIndex","movedElementRowIndex","removedRowIndexes","lastGrandparentChild","lastGrandparentChildIndex","elementsToRemove","tempParent","previousElement","newRowParent","syncRowWithRawSource","upmostParent","moveToCollapsed","moveToLastChild","moveToLastRow","fromParent","indexInFromParent","elemToMove","movingUp","toParent","indexInTargetParent","sameParent","untranslateTrimmedRow","collapsedRows","lastCollapsedRows","expandMultipleChildren","targetIndex","collapseMultipleChildren","realElementIndex","indexOfElement","doTrimming","rowsToCollapse","rowsToTrim","collapseRows","renderAndAdjust","collapseRow","recursive","rowIndexes","collapseChildRows","parentObject","elemIndex","expandRow","expandRows","rowsToUntrim","expandChildRows","untrimRows","isAnyParentCollapsed","rowsToExpand","childIndex","parentsToCollapse","parentsToExpand","allCollapsed","CSS_CLASSES","pluginInstance","indicatorContainer","emptyIndicator","expandButton","collapseButton","rowLevel","innerDiv","getElementsByTagName","innerSpan","previousIndicators","initialContent","levelIndicator","buttonsContainer","deepestLevel","deepestLevelIndex","_menuEntries","row_above","lastSelection","row_below","newEntries","translatedRowIndex","modifyRowInsertingOptions","improperUsage","displayAPICompatibilityWarning","movedToCollapsed","dropToLastRow","physicalDropIndex","allowMove","physicalStartIndexes","shouldAllowMoving","willDataChange","baseParent","getBaseParent","targetParent","getTargetParent","shiftCollapsibleParentsLocations","moveCellsMeta","beforeMoveRowHookArgs","shouldTerminate","physicalStartIndex","baseIndexes","rowsOfMeta","movingDown","lastColIndex","_storage","storage","Storage","saveTo","loadValue","resetValue","resetAll","prefix","loadSavedKeys","localStorage","setItem","savedKeys","saveSavedKeys","itemKey","clearSavedKeys","keysJSON","DEFAULT_SEARCH_RESULT_CLASS","DEFAULT_CALLBACK","testResult","isSearchResult","DEFAULT_QUERY_METHOD","_Search_brand","searchSettings","updatePluginSettings","_onBeforeRenderer","beforeRendererCallback","queryStr","getCallback","queryMethod","getQueryMethod","queryResult","cellCallback","cellQueryMethod","singleResult","newCallback","setQueryMethod","newQueryMethod","getSearchResultClass","searchResultClass","setSearchResultClass","newElementClass","classArray","_TouchScroll_brand","_onAfterViewRender","lockedCollection","_onBeforeTouchScroll","_onAfterMomentumScroll","scrollbars","clones","scrollbar","_TrimRows_brand","trimmedRowsMap","getTrimmedRows","currentTrimConfig","destinationTrimConfig","allowTrimRow","trimRow","trimmingMapValues","isAnyRowUntrimmed","trimmedIndexes","allowUntrimRow","untrimRow","untrimAll","sourceRows","trimmedRow","doneActions","undoneActions","ignoreNewActions","changesLen","hasDifferences","wrappedAction","clonedChanges","ChangeAction","CreateRowAction","getCellMetas","genericKeys","genericKeysLength","cellMetas","uniqueMeta","fromEntries","removedData","RemoveRowAction","CreateColumnAction","logicColumns","originalData","columnsMap","rowsMap","RemoveColumnAction","CellAlignmentAction","previousConditionsStack","FiltersAction","RowMoveAction","ColumnMoveAction","MergeCellsAction","UnmergeCellsAction","ColumnSortAction","isBlockedByDefault","doneActionsCopy","continueAction","newAction","undoneActionsCopy","actionClone","that","enable","exposeUndoRedoMethods","onAfterChange","disable","removeExposedUndoRedoMethods","Action","actionType","undoneCallback","emptyRowsAtTheEnd","emptyColsAtTheEnd","changedRow","changedColumn","firstFullyVisibleRow","firstFullyVisibleColumn","isInVerticalViewPort","isInHorizontalViewPort","isInViewport","isChangedSelection","scrollConfig","onFinishCallback","redoneCallback","rowIndexesSequence","removedCellMetas","rowIndexDelta","columnProp","columnPositions","rowPositions","ascendingIndexes","sortByIndexes","removedDataLength","sortedData","sortedHeaders","changedIndex","contiquesIndex","headerData","rangeData","finalRowIndex","rowMoves","finalColumnIndex","columnMoves","newSortState","previousSortState","nextSortState","sortPlugin","multiSortPlugin","enabledSortPlugin","pluginEnabled","clearUndo","_this$getPlugin","jQueryWrapper","jQuery","$this","removeData","_jquery","parseTableHelpers","arrayHelpers","browserHelpers","dataHelpers","dateHelpers","featureHelpers","functionHelpers","mixedHelpers","numberHelpers","objectHelpers","stringHelpers","unicodeHelpers","domHelpers","domEventHelpers","_registry6","_base2","_Handsontable$cellTyp","_Handsontable$editors","_Handsontable$rendere","_Handsontable$validat","_Handsontable$plugins","__GhostTable","_getListenersCounter","_getRegisteredMapsCounter","HELPERS","DOM","helper","dom","getOwnPropertyNames","cellTypes","cellTypeName","editorName","renderers","rendererName","cellDecorator","validators","validatorName","plugins"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"handsontable.js","mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAAC0b,aAAa,GAAG,YAAW;IAC9B,IAAI,CAAC1b,sBAAsB,IAAI,CAAC;EAClC,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAAC2b,YAAY,GAAG,YAAW;IAC7B,MAAMC,SAAS,GAAG,IAAI,CAAC5b,sBAAsB,GAAG,CAAC;IAEjD,IAAI,CAACA,sBAAsB,GAAG4D,IAAI,CAACG,GAAG,CAAC6X,SAAS,EAAE,CAAC,CAAC;IAEpD,IAAI,CAAC,IAAI,CAACH,iBAAiB,CAAC,CAAC,IAAIG,SAAS,KAAK,IAAI,CAAC5b,sBAAsB,EAAE;MAC1E,IAAI,IAAI,CAACyB,UAAU,EAAE;QACnB,IAAI,CAACgG,MAAM,CAAC,CAAC;MACf,CAAC,MAAM;QACLhM,QAAQ,CAACuJ,IAAI,CAACyC,MAAM,CAAC,CAAC;MACxB;IACF;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACA,MAAM,GAAG,YAAW;IACvB,IAAI,IAAI,CAACzC,IAAI,EAAE;MACb,IAAI,CAACvD,UAAU,GAAG,IAAI;MACtB,IAAI,CAACsT,eAAe,GAAG,IAAI,CAAC,CAAC;;MAE7B,IAAI,CAAC,IAAI,CAAC0G,iBAAiB,CAAC,CAAC,EAAE;QAC7BhgB,QAAQ,CAACuJ,IAAI,CAACyC,MAAM,CAAC,CAAC;MACxB;IACF;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACoU,WAAW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,CAAC8L,4BAA4B,CAAC,CAAC;IAC7D;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACC,QAAQ,GAAG,YAAW;IACzB,MAAMC,GAAG,GAAG1lB,QAAQ,CAACqf,eAAe,CAAC,CAAC;IAEtC,IAAI7Z,SAAS,CAACigB,QAAQ,EAAE;MACtB,IAAI,IAAAxI,oBAAU,EAACzX,SAAS,CAACigB,QAAQ,CAAC,EAAE;QAClC,OAAOjgB,SAAS,CAACigB,QAAQ,CAACtI,IAAI,CAACnd,QAAQ,CAAC;MAC1C,CAAC,MAAM,IAAI0lB,GAAG,EAAE;QACd,OAAO1lB,QAAQ,CAACyV,OAAO,CAAC,CAAC,CAACiQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAClgB,SAAS,CAACigB,QAAQ,CAAC;MAC1D;IACF,CAAC,MAAM,IAAIC,GAAG,EAAE;MACd,OAAO1lB,QAAQ,CAACoX,aAAa,CAACsO,GAAG,CAAC,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACpb,WAAW,GAAG,YAAW;IAC5B,OAAO9E,SAAS;EAClB,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,IAAI,CAACmgB,KAAK,GAAG,YAAW;IACtB,IAAI,CAACC,SAAS,CAAC,CAAC;IAChB,IAAI,CAACpG,kBAAkB,CAAC,CAAC;EAC3B,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,I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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACE,aAAa,GAAG,UAASnZ,WAAW,EAA0C;IAAA,IAAxC4Y,SAAS,GAAAxtB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG4U,WAAW;IAAA,IAAEoZ,aAAa,GAAAhuB,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IAC/E,OAAOuI,SAAS,CAACslB,aAAa,CAACnZ,WAAW,EAAE4Y,SAAS,EAAEQ,aAAa,CAAC;EACvE,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACC,UAAU,GAAG,UAAStZ,QAAQ,EAAoC;IAAA,IAAlC0J,MAAM,GAAAre,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG2U,QAAQ;IAAA,IAAEqZ,aAAa,GAAAhuB,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IACnE,OAAOuI,SAAS,CAACwlB,UAAU,CAACtZ,QAAQ,EAAE0J,MAAM,EAAE2P,aAAa,CAAC;EAC9D,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,IAAI,CAACE,YAAY,GAAG,YAAW;IAC7BzlB,SAAS,CAACyJ,QAAQ,CAAC,CAAC;EACtB,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACsT,SAAS,GAAG,YAAsF;IAAA,IAA7E2I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AO,CAAC,GAAoC;AACvD,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,aAAa,mBAAO,CAAC,EAA+B;AACpD,YAAY,mBAAO,CAAC,EAAoB;AACxC,WAAW,mBAAO,CAAC,GAAmB;AACtC,iBAAiB,mBAAO,CAAC,GAA0B;AACnD,oBAAoB,mBAAO,CAAC,EAAsC;AAClE,8BAA8B,mBAAO,CAAC,GAAwC;AAC9E,aAAa,mBAAO,CAAC,GAAiC;AACtD,cAAc,mBAAO,CAAC,GAAkC;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;ACpHa;AACb,kBAAkB,mBAAO,CAAC,GAA2C;AACrE,gBAAgB,mBAAO,CAAC,EAAyB;AACjD,kBAAkB,mBAAO,CAAC,EAAmC;;AAE7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACba;AACb,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,kBAAkB,mBAAO,CAAC,EAAoC;;AAE9D;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACTa;AACb,iBAAiB,mBAAO,CAAC,EAA2B;;AAEpD;;;;;;;;ACHa;AACb,kBAAkB,mBAAO,CAAC,EAAoC;;AAE9D;;;;;;;;ACHa;AACb;;AAEA;AACA;AACA;AACA;;;;;;;;ACNa;AACb,gBAAgB,mBAAO,CAAC,EAAqC;;AAE7D;AACA;;;;;;;;ACJa;AACb,kBAAkB,mBAAO,CAAC,GAA0B;;AAEpD;;;;;;;;ACHa;AACb;AACA,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,gBAAgB,mBAAO,CAAC,EAAqC;AAC7D,cAAc,mBAAO,CAAC,EAA0B;;AAEhD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;ACpBY;AACb,QAAQ,mBAAO,CAAC,CAAqB;AACrC,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,cAAc,8BAAgC;AAC9C,oBAAoB,mBAAO,CAAC,GAA6B;;AAEzD;AACA;;AAEA;AACA;AACA,IAAI,8FAA8F;AAClG;AACA,CAAC;;;;;;;;ACbY;AACb,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,YAAY,mBAAO,CAAC,EAA6B;AACjD,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,kBAAkB,mBAAO,CAAC,GAA0B;AACpD,iBAAiB,mBAAO,CAAC,EAAqC;AAC9D,iBAAiB,mBAAO,CAAC,GAA0B;AACnD,8BAA8B,mBAAO,CAAC,GAAwC;;AAE9E;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,IAAI;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BA,IAAAmC,OAAA,GAAAxD,mBAAA;AACA,IAAAg3B,KAAA,GAAAh3B,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASi3B,SAASA,CAACxd,OAAO,EAAa;EAAA,IAAXyd,KAAK,GAAAz1B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EAC1C,IAAI01B,SAAS,GAAG,CAAC,CAAC;EAClB,IAAIC,MAAM,GAAG,IAAI;EACjB,IAAIC,cAAc,GAAG5d,OAAO;EAE5B,OAAO4d,cAAc,KAAK,IAAI,EAAE;IAC9B,IAAIF,SAAS,KAAKD,KAAK,EAAE;MACvBE,MAAM,GAAGC,cAAc;MACvB;IACF;IAEA,IAAIA,cAAc,CAACC,IAAI,IAAID,cAAc,CAACE,QAAQ,KAAKC,IAAI,CAACC,sBAAsB,EAAE;MAClFJ,cAAc,GAAGA,cAAc,CAACC,IAAI;IAEtC,CAAC,MAAM;MACLH,SAAS,IAAI,CAAC;MACdE,cAAc,GAAGA,cAAc,CAACrF,UAAU;IAC5C;EACF;EAEA,OAAOoF,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASM,cAAcA,CAACje,OAAO,EAAEke,gBAAgB,EAAE;EACxD,MAAMC,4BAA4B,GAAGne,OAAO,CAACoe,OAAO,CAAC,eAAe,CAAC;EAErE,OAAO,CAAC,CAACD,4BAA4B,KAEjCA,4BAA4B,CAAC5F,UAAU,KAAK2F,gBAAgB,IAC5DC,4BAA4B,KAAKD,gBAAgB,CAClD;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,eAAeA,CAACC,KAAK,EAAE;EACrC,OAAOtb,MAAM,CAACC,cAAc,CAACqb,KAAK,CAACX,MAAM,CAAC,IAAIW,KAAK,CAACC,YAAY;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACF,KAAK,EAAE;EACrC,OAAOD,eAAe,CAACC,KAAK,CAAC,IAAIA,KAAK,CAACX,MAAM;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASc,uBAAuBA,CAACH,KAAK,EAAE;EAC7C,OAAO,CAAC,CAACtb,MAAM,CAACC,cAAc,CAACqb,KAAK,CAACX,MAAM,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASS,OAAOA,CAACpe,OAAO,EAAqB;EAAA,IAAnB0e,KAAK,GAAA12B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,IAAE22B,KAAK,GAAA32B,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;EAChD,MAAM;IAAE02B,YAAY;IAAEZ;EAAuB,CAAC,GAAGD,IAAI;EACrD,IAAIH,cAAc,GAAG5d,OAAO;EAE5B,OAAO4d,cAAc,KAAK,IAAI,IAAIA,cAAc,KAAK11B,SAAS,IAAI01B,cAAc,KAAKe,KAAK,EAAE;IAC1F,MAAM;MAAEb,QAAQ;MAAExZ;IAAS,CAAC,GAAGsZ,cAAc;IAE7C,IAAIE,QAAQ,KAAKc,YAAY,KAAKF,KAAK,CAACnyB,QAAQ,CAAC+X,QAAQ,CAAC,IAAIoa,KAAK,CAACnyB,QAAQ,CAACqxB,cAAc,CAAC,CAAC,EAAE;MAC7F,OAAOA,cAAc;IACvB;IAEA,MAAM;MAAEC;IAAK,CAAC,GAAGD,cAAc;IAE/B,IAAIC,IAAI,IAAIC,QAAQ,KAAKE,sBAAsB,EAAE;MAC/CJ,cAAc,GAAGC,IAAI;IAEvB,CAAC,MAAM;MACLD,cAAc,GAAGA,cAAc,CAACrF,UAAU;IAC5C;EACF;EAEA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASsG,WAAWA,CAAC7e,OAAO,EAAE0e,KAAK,EAAEC,KAAK,EAAE;EACjD,MAAMG,OAAO,GAAG,EAAE;EAClB,IAAIlB,cAAc,GAAG5d,OAAO;EAE5B,OAAO4d,cAAc,EAAE;IACrBA,cAAc,GAAGQ,OAAO,CAACR,cAAc,EAAEc,KAAK,EAAEC,KAAK,CAAC;IAEtD,IAAI,CAACf,cAAc,IAAKe,KAAK,IAAI,CAACA,KAAK,CAACI,QAAQ,CAACnB,cAAc,CAAE,EAAE;MACjE;IACF;IACAkB,OAAO,CAACjnB,IAAI,CAAC+lB,cAAc,CAAC;IAE5B,IAAIA,cAAc,CAACC,IAAI,IAAID,cAAc,CAACE,QAAQ,KAAKC,IAAI,CAACC,sBAAsB,EAAE;MAClFJ,cAAc,GAAGA,cAAc,CAACC,IAAI;IAEtC,CAAC,MAAM;MACLD,cAAc,GAAGA,cAAc,CAACrF,UAAU;IAC5C;EACF;EACA,MAAMtwB,MAAM,GAAG62B,OAAO,CAAC72B,MAAM;EAE7B,OAAOA,MAAM,GAAG62B,OAAO,CAAC72B,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS+2B,SAASA,CAACC,KAAK,EAAEtB,MAAM,EAAE;EACvC,IAAIuB,IAAI,GAAGD,KAAK,CAAC1G,UAAU;EAC3B,IAAI4G,cAAc,GAAG,EAAE;EAEvB,IAAI,OAAOxB,MAAM,KAAK,QAAQ,EAAE;IAC9B,IAAIsB,KAAK,CAAChzB,WAAW,EAAE;MACrBkzB,cAAc,GAAGhrB,KAAK,CAACgF,SAAS,CAACmE,KAAK,CAACyH,IAAI,CAACka,KAAK,CAACG,gBAAgB,CAACzB,MAAM,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC,MAAM;MACLwB,cAAc,GAAGhrB,KAAK,CAACgF,SAAS,CAACmE,KAAK,CAACyH,IAAI,CAACka,KAAK,CAAClzB,aAAa,CAACqzB,gBAAgB,CAACzB,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9F;EACF,CAAC,MAAM;IACLwB,cAAc,CAACtnB,IAAI,CAAC8lB,MAAM,CAAC;EAC7B;EAEA,OAAOuB,IAAI,KAAK,IAAI,EAAE;IACpB,IAAIC,cAAc,CAACpS,OAAO,CAACmS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;IACAA,IAAI,GAAGA,IAAI,CAAC3G,UAAU;EACxB;EAEA,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASliB,KAAKA,CAAC2J,OAAO,EAAE;EAC7B,IAAIjC,CAAC,GAAG,CAAC;EACT,IAAI6f,cAAc,GAAG5d,OAAO;EAE5B,IAAI4d,cAAc,CAACyB,eAAe,EAAE;IAClC;IACA,OAAOzB,cAAc,GAAGA,cAAc,CAACyB,eAAe,EAAE;MACtDthB,CAAC,IAAI,CAAC;IACR;EACF;EAEA,OAAOA,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASuhB,sBAAsBA,CAACC,WAAW,EAAEvf,OAAO,EAAEwf,IAAI,EAAE;EACjE,MAAMC,cAAc,GAAGD,IAAI,CAACE,aAAa,CAACpH,aAAa,CAAC,aAAaiH,WAAW,EAAE,CAAC;EAEnF,OAAOE,cAAc,GAAGA,cAAc,CAACV,QAAQ,CAAC/e,OAAO,CAAC,GAAG,IAAI;AACjE;;AAEA;AACA;AACA;AACA;AACA,SAAS2f,qBAAqBA,CAACC,UAAU,EAAE;EACzC,IAAI,CAACA,UAAU,IAAI,CAACA,UAAU,CAAC33B,MAAM,EAAE;IACrC,OAAO,EAAE;EACX;EAEA,OAAO23B,UAAU,CAACva,MAAM,CAACwa,CAAC,IAAI,CAAC,CAACA,CAAC,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAACC,IAAI,EAAEC,UAAU,EAAE;EACvC,IAAI,CAACD,IAAI,IAAI,CAACA,IAAI,CAAC93B,MAAM,EAAE;IACzB,OAAO+3B,UAAU,GAAG;MAAEC,SAAS,EAAE,EAAE;MAAEC,OAAO,EAAE;IAAG,CAAC,GAAG,EAAE;EACzD;EAEA,MAAMA,OAAO,GAAG,EAAE;EAClB,MAAMD,SAAS,GAAG,EAAE;EAEpBA,SAAS,CAACpoB,IAAI,CAAC,GAAGkoB,IAAI,CAAC1a,MAAM,CAAE8a,KAAK,IAAK;IACvC,MAAMC,OAAO,GAAGD,KAAK,YAAYE,MAAM;IAEvC,IAAID,OAAO,IAAIJ,UAAU,EAAE;MACzBE,OAAO,CAACroB,IAAI,CAACsoB,KAAK,CAAC;IACrB;IAEA,OAAO,CAACC,OAAO;EACjB,CAAC,CAAC,CAAC;EAEH,OAAOJ,UAAU,GAAG;IAClBC,SAAS;IACTC;EACF,CAAC,GAAGD,SAAS;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,QAAQA,CAACtgB,OAAO,EAAEF,SAAS,EAAE;EAC3C,IAAIE,OAAO,CAACugB,SAAS,KAAKr4B,SAAS,IAAI,OAAO4X,SAAS,KAAK,QAAQ,IAAIA,SAAS,KAAK,EAAE,EAAE;IACxF,OAAO,KAAK;EACd;EAEA,OAAOE,OAAO,CAACugB,SAAS,CAACxB,QAAQ,CAACjf,SAAS,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAStM,QAAQA,CAACwM,OAAO,EAAEF,SAAS,EAAE;EAC3C,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;IACjCA,SAAS,GAAGA,SAAS,CAAC0gB,KAAK,CAAC,GAAG,CAAC;EAClC;EAEA1gB,SAAS,GAAG6f,qBAAqB,CAAC7f,SAAS,CAAC;EAE5C,IAAIA,SAAS,CAAC7X,MAAM,GAAG,CAAC,EAAE;IACxB+X,OAAO,CAACugB,SAAS,CAAC/F,GAAG,CAAC,GAAG1a,SAAS,CAAC;EACrC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASrM,WAAWA,CAACuM,OAAO,EAAEF,SAAS,EAAE;EAC9C,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;IACjCA,SAAS,GAAGA,SAAS,CAAC0gB,KAAK,CAAC,GAAG,CAAC;EAElC,CAAC,MAAM,IAAI1gB,SAAS,YAAYugB,MAAM,EAAE;IACtCvgB,SAAS,GAAG,CAACA,SAAS,CAAC;EACzB;EAEA,IAAI;IACFmgB,SAAS,EAAEQ,aAAa;IACxB;IACAP,OAAO,EAAEQ;EACX,CAAC,GAAGZ,aAAa,CAAChgB,SAAS,EAAE,IAAI,CAAC;EAElC2gB,aAAa,GAAGd,qBAAqB,CAACc,aAAa,CAAC;EAEpD,IAAIA,aAAa,CAACx4B,MAAM,GAAG,CAAC,EAAE;IAC5B+X,OAAO,CAACugB,SAAS,CAAC5F,MAAM,CAAC,GAAG8F,aAAa,CAAC;EAC5C;EAEAC,YAAY,CAAC3a,OAAO,CAAE4a,cAAc,IAAK;IACvC3gB,OAAO,CAACugB,SAAS,CAACxa,OAAO,CAAE6a,gBAAgB,IAAK;MAC9C,IAAID,cAAc,CAAC/b,IAAI,CAACgc,gBAAgB,CAAC,EAAE;QACzC5gB,OAAO,CAACugB,SAAS,CAAC5F,MAAM,CAACiG,gBAAgB,CAAC;MAC5C;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASl0B,YAAYA,CAACm0B,UAAU,EAAmC;EAAA,IAAjCC,UAAU,GAAA94B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAAA,IAAE+4B,cAAc,GAAA/4B,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;EACtE,IAAI,CAACiM,KAAK,CAAC4E,OAAO,CAAC+nB,UAAU,CAAC,EAAE;IAC9BA,UAAU,GAAG,CAAC,CAACA,UAAU,EAAEC,cAAc,CAAC,CAAC;EAC7C;EAEAD,UAAU,CAAC/a,OAAO,CAAEib,aAAa,IAAK;IACpC,IAAI7sB,KAAK,CAAC4E,OAAO,CAACioB,aAAa,CAAC,IAAIA,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;MAC3DH,UAAU,CAACn0B,YAAY,CAAC,GAAGs0B,aAAa,CAAC;IAC3C;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACJ,UAAU,EAA2B;EAAA,IAAzBK,kBAAkB,GAAAl5B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EACjE,IAAI,OAAOk5B,kBAAkB,KAAK,QAAQ,EAAE;IAC1CA,kBAAkB,GAAGA,kBAAkB,CAACV,KAAK,CAAC,GAAG,CAAC;EAEpD,CAAC,MAAM,IAAIU,kBAAkB,YAAYb,MAAM,EAAE;IAC/Ca,kBAAkB,GAAG,CAACA,kBAAkB,CAAC;EAC3C;EAEA,MAAM;IACJjB,SAAS,EAAEkB,gBAAgB;IAC3BjB,OAAO,EAAEkB;EACX,CAAC,GAAGtB,aAAa,CAACoB,kBAAkB,EAAE,IAAI,CAAC;EAE3CC,gBAAgB,CAACpb,OAAO,CAAEsb,qBAAqB,IAAK;IAClD,IAAIA,qBAAqB,KAAK,EAAE,EAAE;MAChCR,UAAU,CAACI,eAAe,CAACI,qBAAqB,CAAC;IACnD;EACF,CAAC,CAAC;EAEFD,eAAe,CAACrb,OAAO,CAAEub,cAAc,IAAK;IAC1CT,UAAU,CAACU,iBAAiB,CAAC,CAAC,CAACxb,OAAO,CAAEyb,aAAa,IAAK;MACxD,IAAIF,cAAc,CAAC1c,IAAI,CAAC4c,aAAa,CAAC,EAAE;QACtCX,UAAU,CAACI,eAAe,CAACO,aAAa,CAAC;MAC3C;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACO,SAASC,eAAeA,CAACzhB,OAAO,EAAE;EACvC,IAAIA,OAAO,CAAC8d,QAAQ,KAAK,CAAC,EAAE;IAC1B9d,OAAO,CAACuY,UAAU,CAACC,WAAW,CAACxY,OAAO,CAAC,CAAC,CAAC;EAE3C,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC+M,OAAO,CAAC/M,OAAO,CAACsE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;IACpF,MAAMod,MAAM,GAAG1hB,OAAO,CAAC2hB,UAAU;IAEjC,KAAK,IAAI5jB,CAAC,GAAG2jB,MAAM,CAACz5B,MAAM,GAAG,CAAC,EAAE8V,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MAC3C0jB,eAAe,CAACC,MAAM,CAAC3jB,CAAC,CAAC,CAAC;IAC5B;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0a,KAAKA,CAACzY,OAAO,EAAE;EAC7B,IAAIif,KAAK;;EAET;EACA,OAAOA,KAAK,GAAGjf,OAAO,CAAC4hB,SAAS,EAAE;IAChC5hB,OAAO,CAACwY,WAAW,CAACyG,KAAK,CAAC;EAC5B;AACF;AAEO,MAAM4C,eAAe,GAAA36B,uBAAA,GAAG,iBAAiB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS46B,aAAaA,CAAC9hB,OAAO,EAAE+hB,OAAO,EAA0B;EAAA,IAAxBC,eAAe,GAAAh6B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EACpE,IAAI65B,eAAe,CAACjd,IAAI,CAACmd,OAAO,CAAC,EAAE;IACjC/hB,OAAO,CAACiiB,SAAS,GAAGD,eAAe,GAAG,IAAAE,gBAAQ,EAACH,OAAO,CAAC,GAAGA,OAAO;EACnE,CAAC,MAAM;IACLI,aAAa,CAACniB,OAAO,EAAE+hB,OAAO,CAAC;EACjC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,aAAaA,CAACniB,OAAO,EAAE+hB,OAAO,EAAE;EAC9C,MAAM9C,KAAK,GAAGjf,OAAO,CAAClS,UAAU;EAEhC,IAAImxB,KAAK,IAAIA,KAAK,CAACnB,QAAQ,KAAK,CAAC,IAAImB,KAAK,CAACmD,WAAW,KAAK,IAAI,EAAE;IAC/D;IACAnD,KAAK,CAACoD,WAAW,GAAGN,OAAO;EAE7B,CAAC,MAAM;IACL;IACAtJ,KAAK,CAACzY,OAAO,CAAC;IACdA,OAAO,CAACsiB,WAAW,CAACtiB,OAAO,CAACjU,aAAa,CAACw2B,cAAc,CAACR,OAAO,CAAC,CAAC;EACpE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASS,SAASA,CAACxiB,OAAO,EAAE;EACjC,MAAMyiB,eAAe,GAAGziB,OAAO,CAACjU,aAAa,CAAC02B,eAAe;EAC7D,IAAIC,IAAI,GAAG1iB,OAAO;EAElB,OAAO0iB,IAAI,KAAKD,eAAe,EAAE;IAAE;IACjC,IAAIC,IAAI,KAAK,IAAI,EAAE;MAAE;MACnB,OAAO,KAAK;IAEd,CAAC,MAAM,IAAIA,IAAI,CAAC5E,QAAQ,KAAKC,IAAI,CAACC,sBAAsB,EAAE;MACxD,IAAI0E,IAAI,CAAC7E,IAAI,EAAE;QAAE;QACf;QACA;QACA,IAAI6E,IAAI,CAAC7E,IAAI,CAAC8E,IAAI,EAAE;UAAE;UACpB,OAAOH,SAAS,CAACE,IAAI,CAAC7E,IAAI,CAAC8E,IAAI,CAAC;QAElC,CAAC,MAAM,IAAID,IAAI,CAAC7E,IAAI,EAAE;UAAE;UACtB,OAAO2E,SAAS,CAACE,IAAI,CAAC7E,IAAI,CAAC;QAC7B;QACA,MAAM,IAAIjjB,KAAK,CAAC,8BAA8B,CAAC;MAEjD,CAAC,MAAM;QACL,OAAO,KAAK,CAAC,CAAC;MAChB;IAEF,CAAC,MAAM,IAAIpO,gBAAgB,CAACk2B,IAAI,CAAC,CAACE,OAAO,KAAK,MAAM,EAAE;MACpD,OAAO,KAAK;IACd;IAEAF,IAAI,GAAGA,IAAI,CAACnK,UAAU;EACxB;EAEA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS/e,MAAMA,CAACwG,OAAO,EAAE;EAC9B,MAAMlU,YAAY,GAAGkU,OAAO,CAACjU,aAAa;EAC1C,MAAMC,UAAU,GAAGF,YAAY,CAACG,WAAW;EAC3C,MAAMw2B,eAAe,GAAG32B,YAAY,CAAC22B,eAAe;EACpD,IAAI7E,cAAc,GAAG5d,OAAO;EAC5B,IAAI6iB,UAAU;EACd,IAAIC,SAAS;EACb,IAAIC,QAAQ;EAEZF,UAAU,GAAGjF,cAAc,CAACiF,UAAU;EACtCC,SAAS,GAAGlF,cAAc,CAACkF,SAAS;EACpCC,QAAQ,GAAGnF,cAAc;;EAEzB;EACA,OAAOA,cAAc,GAAGA,cAAc,CAACzc,YAAY,EAAE;IACnD;IACA,IAAIyc,cAAc,KAAK9xB,YAAY,CAACk3B,IAAI,EAAE;MACxC;IACF;IACA;IACA;IACA,IAAI,EAAE,YAAY,IAAIpF,cAAc,CAAC,EAAE;MACrC;IACF;IACAiF,UAAU,IAAIjF,cAAc,CAACiF,UAAU;IACvCC,SAAS,IAAIlF,cAAc,CAACkF,SAAS;IACrCC,QAAQ,GAAGnF,cAAc;EAC3B;;EAEA;EACA,IAAImF,QAAQ,IAAIA,QAAQ,CAACpW,KAAK,CAACsW,QAAQ,KAAK,OAAO,EAAE;IACnD;IACAJ,UAAU,IAAI72B,UAAU,CAACk3B,WAAW,IAAIT,eAAe,CAACU,UAAU;IAClEL,SAAS,IAAI92B,UAAU,CAACo3B,WAAW,IAAIX,eAAe,CAACY,SAAS;EAClE;EAEA,OAAO;IACLC,IAAI,EAAET,UAAU;IAChBU,GAAG,EAAET;EACP,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,kBAAkBA,CAAA,EAAsB;EAAA,IAArBx3B,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EACpD,OAAOz3B,UAAU,CAAC03B,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,mBAAmBA,CAAA,EAAsB;EAAA,IAArB33B,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EACrD,OAAOz3B,UAAU,CAAC43B,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAAC7jB,OAAO,EAAuB;EAAA,IAArBhU,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EACvD,IAAIzjB,OAAO,KAAKhU,UAAU,EAAE;IAC1B,OAAOw3B,kBAAkB,CAACx3B,UAAU,CAAC;EACvC;EAEA,OAAOgU,OAAO,CAACqjB,SAAS;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASS,aAAaA,CAAC9jB,OAAO,EAAuB;EAAA,IAArBhU,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EACxD,IAAIzjB,OAAO,KAAKhU,UAAU,EAAE;IAC1B,OAAO23B,mBAAmB,CAAC33B,UAAU,CAAC;EACxC;EAEA,OAAOgU,OAAO,CAACmjB,UAAU;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASY,oBAAoBA,CAAC/jB,OAAO,EAAE;EAC5C,IAAIlU,YAAY,GAAGkU,OAAO,CAACjU,aAAa;EACxC,IAAIC,UAAU,GAAGF,YAAY,GAAGA,YAAY,CAACG,WAAW,GAAG/D,SAAS;EAEpE,IAAI,CAAC4D,YAAY,EAAE;IACjBA,YAAY,GAAGkU,OAAO,CAACgkB,QAAQ,GAAGhkB,OAAO,CAACgkB,QAAQ,GAAGhkB,OAAO;IAC5DhU,UAAU,GAAGF,YAAY,CAACG,WAAW;EACvC;EAEA,MAAMg4B,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;EAChC,IAAIC,EAAE,GAAGlkB,OAAO,CAACuY,UAAU;EAE3B,OAAO2L,EAAE,IAAIA,EAAE,CAACvX,KAAK,IAAI7gB,YAAY,CAACk3B,IAAI,KAAKkB,EAAE,EAAE;IACjD,IAAI;MAAElX,QAAQ;MAAEmX,SAAS;MAAEC;IAAU,CAAC,GAAGF,EAAE,CAACvX,KAAK;IAEjD,IAAI,CAACK,QAAQ,EAAEmX,SAAS,EAAEC,SAAS,CAAC,CAAC73B,QAAQ,CAAC,QAAQ,CAAC,EAAE;MACvD,OAAO23B,EAAE;IAEX,CAAC,MAAM;MACL,CAAC;QAAElX,QAAQ;QAAEmX,SAAS;QAAEC;MAAU,CAAC,GAAGp4B,UAAU,CAACQ,gBAAgB,CAAC03B,EAAE,CAAC;MAErE,IAAID,KAAK,CAAC13B,QAAQ,CAACygB,QAAQ,CAAC,IAAIiX,KAAK,CAAC13B,QAAQ,CAAC43B,SAAS,CAAC,IAAIF,KAAK,CAAC13B,QAAQ,CAAC63B,SAAS,CAAC,EAAE;QACtF,OAAOF,EAAE;MACX;IACF;;IAEA;IACA,IAAIA,EAAE,CAACG,YAAY,IAAIH,EAAE,CAACI,YAAY,GAAG,CAAC,KAAKL,KAAK,CAAC13B,QAAQ,CAAC63B,SAAS,CAAC,IAAIH,KAAK,CAAC13B,QAAQ,CAACygB,QAAQ,CAAC,CAAC,EAAE;MACrG,OAAOkX,EAAE;IACX;IACA,IAAIA,EAAE,CAACK,WAAW,IAAIL,EAAE,CAACM,WAAW,GAAG,CAAC,KAAKP,KAAK,CAAC13B,QAAQ,CAAC43B,SAAS,CAAC,IAAIF,KAAK,CAAC13B,QAAQ,CAACygB,QAAQ,CAAC,CAAC,EAAE;MACnG,OAAOkX,EAAE;IACX;IAEAA,EAAE,GAAGA,EAAE,CAAC3L,UAAU;EACpB;EAEA,OAAOvsB,UAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASy4B,mBAAmBA,CAACzkB,OAAO,EAAE;EAC3C,OAAOA,OAAO,CAACskB,YAAY,GAAGtkB,OAAO,CAACqkB,YAAY;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,oBAAoBA,CAAC1kB,OAAO,EAAE;EAC5C,OAAOA,OAAO,CAACwkB,WAAW,GAAGxkB,OAAO,CAACukB,WAAW;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,oBAAoBA,CAACC,IAAI,EAAE;EACzC,MAAM94B,YAAY,GAAG84B,IAAI,CAAC74B,aAAa;EACvC,MAAMC,UAAU,GAAGF,YAAY,CAACG,WAAW;EAE3C,IAAIi4B,EAAE,GAAGU,IAAI,CAACrM,UAAU;EAExB,OAAO2L,EAAE,IAAIA,EAAE,CAACvX,KAAK,IAAI7gB,YAAY,CAACk3B,IAAI,KAAKkB,EAAE,EAAE;IACjD,IAAIA,EAAE,CAACvX,KAAK,CAACK,QAAQ,KAAK,SAAS,IAAIkX,EAAE,CAACvX,KAAK,CAACK,QAAQ,KAAK,EAAE,EAAE;MAC/D,OAAOkX,EAAE;IACX;IAEA,MAAMW,aAAa,GAAGr4B,gBAAgB,CAAC03B,EAAE,EAAEl4B,UAAU,CAAC;IACtD,MAAM84B,iBAAiB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;IACtD,MAAMhM,QAAQ,GAAG+L,aAAa,CAACE,gBAAgB,CAAC,UAAU,CAAC;IAC3D,MAAMC,SAAS,GAAGH,aAAa,CAACE,gBAAgB,CAAC,YAAY,CAAC;IAC9D,MAAME,SAAS,GAAGJ,aAAa,CAACE,gBAAgB,CAAC,YAAY,CAAC;IAE9D,IAAID,iBAAiB,CAACv4B,QAAQ,CAACusB,QAAQ,CAAC,IACpCgM,iBAAiB,CAACv4B,QAAQ,CAACy4B,SAAS,CAAC,IACrCF,iBAAiB,CAACv4B,QAAQ,CAAC04B,SAAS,CAAC,EAAE;MACzC,OAAOf,EAAE;IACX;IAEAA,EAAE,GAAGA,EAAE,CAAC3L,UAAU;EACpB;EAEA,OAAOvsB,UAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASk5B,QAAQA,CAACllB,OAAO,EAAElP,IAAI,EAAuB;EAAA,IAArB9E,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EACzD,IAAI,CAACzjB,OAAO,EAAE;IACZ;EAEF,CAAC,MAAM,IAAIA,OAAO,KAAKhU,UAAU,EAAE;IACjC,IAAI8E,IAAI,KAAK,OAAO,EAAE;MACpB,OAAO,GAAG9E,UAAU,CAACm5B,UAAU,IAAI;IAErC,CAAC,MAAM,IAAIr0B,IAAI,KAAK,QAAQ,EAAE;MAC5B,OAAO,GAAG9E,UAAU,CAACo5B,WAAW,IAAI;IACtC;IAEA;EACF;EAEA,MAAMC,SAAS,GAAGrlB,OAAO,CAAC2M,KAAK,CAAC7b,IAAI,CAAC;EAErC,IAAIu0B,SAAS,KAAK,EAAE,IAAIA,SAAS,KAAKn9B,SAAS,EAAE;IAC/C,OAAOm9B,SAAS;EAClB;EAEA,MAAMR,aAAa,GAAGr4B,gBAAgB,CAACwT,OAAO,EAAEhU,UAAU,CAAC;EAE3D,IAAI64B,aAAa,CAAC/zB,IAAI,CAAC,KAAK,EAAE,IAAI+zB,aAAa,CAAC/zB,IAAI,CAAC,KAAK5I,SAAS,EAAE;IACnE,OAAO28B,aAAa,CAAC/zB,IAAI,CAAC;EAC5B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASw0B,eAAeA,CAACtlB,OAAO,EAAEulB,IAAI,EAAE;EAC7C,MAAM;IAAEC;EAAa,CAAC,GAAGD,IAAI;EAC7B,IAAIhiB,MAAM,GAAG,KAAK;EAElB,IAAIgiB,IAAI,CAACriB,IAAI,KAAKuiB,OAAO,CAACC,UAAU,IAAIF,YAAY,EAAE;IACpD,IAAIxlB,OAAO,CAAC2lB,iBAAiB,EAAE;MAC7BpiB,MAAM,GAAGvD,OAAO,CAAC2lB,iBAAiB,CAACH,YAAY,CAAC;IAElD,CAAC,MAAM,IAAIxlB,OAAO,CAAC4lB,OAAO,EAAE;MAC1BriB,MAAM,GAAGvD,OAAO,CAAC4lB,OAAO,CAACJ,YAAY,CAAC;IACxC;EACF;EAEA,OAAOjiB,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS/W,gBAAgBA,CAACwT,OAAO,EAAuB;EAAA,IAArBhU,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EAC3D,OAAOzjB,OAAO,CAAC6lB,YAAY,IAAI75B,UAAU,CAACQ,gBAAgB,CAACwT,OAAO,CAAC;AACrE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS8lB,UAAUA,CAAC9lB,OAAO,EAAE;EAClC,OAAOA,OAAO,CAAC+lB,WAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,WAAWA,CAAChmB,OAAO,EAAE;EACnC,OAAOA,OAAO,CAACimB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASb,WAAWA,CAACplB,OAAO,EAAE;EACnC,OAAOA,OAAO,CAACqkB,YAAY,IAAIrkB,OAAO,CAAColB,WAAW;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASD,UAAUA,CAACnlB,OAAO,EAAE;EAClC,OAAOA,OAAO,CAACukB,WAAW,IAAIvkB,OAAO,CAACmlB,UAAU;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASe,QAAQA,CAAClmB,OAAO,EAAE2c,KAAK,EAAEna,QAAQ,EAAE;EACjDxC,OAAO,CAACmmB,gBAAgB,CAACxJ,KAAK,EAAEna,QAAQ,EAAE,KAAK,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS4jB,WAAWA,CAACpmB,OAAO,EAAE2c,KAAK,EAAEna,QAAQ,EAAE;EACpDxC,OAAO,CAACqmB,mBAAmB,CAAC1J,KAAK,EAAEna,QAAQ,EAAE,KAAK,CAAC;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS8jB,gBAAgBA,CAACpC,EAAE,EAAE;EACnC,IAAIA,EAAE,CAACqC,cAAc,EAAE;IACrB,OAAOrC,EAAE,CAACqC,cAAc;EAC1B;EAEA,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,uBAAuBA,CAACtC,EAAE,EAAE;EAC1C,IAAIA,EAAE,CAACuC,YAAY,EAAE;IACnB,OAAOvC,EAAE,CAACuC,YAAY;EACxB;EAEA,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAAA,EAAsB;EAAA,IAArB16B,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EAClD,MAAM33B,YAAY,GAAGE,UAAU,CAACg4B,QAAQ;EACxC,IAAI2C,IAAI,GAAG,EAAE;EAEb,IAAI36B,UAAU,CAAC46B,YAAY,EAAE;IAC3BD,IAAI,GAAG36B,UAAU,CAAC46B,YAAY,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAE7C,CAAC,MAAM,IAAI/6B,YAAY,CAAC2E,SAAS,IAAI3E,YAAY,CAAC2E,SAAS,CAACyS,IAAI,KAAK,SAAS,EAAE;IAC9EyjB,IAAI,GAAG76B,YAAY,CAAC2E,SAAS,CAACq2B,WAAW,CAAC,CAAC,CAACH,IAAI;EAClD;EAEA,OAAOA,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,kBAAkBA,CAAA,EAAsB;EAAA,IAArB/6B,UAAU,GAAAhE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGy7B,MAAM;EACpD;EACA,IAAIz3B,UAAU,CAAC46B,YAAY,EAAE;IAC3B,IAAI56B,UAAU,CAAC46B,YAAY,CAAC,CAAC,CAACnO,KAAK,EAAE;MAAE;MACrCzsB,UAAU,CAAC46B,YAAY,CAAC,CAAC,CAACnO,KAAK,CAAC,CAAC;IACnC,CAAC,MAAM,IAAIzsB,UAAU,CAAC46B,YAAY,CAAC,CAAC,CAACI,eAAe,EAAE;MAAE;MACtDh7B,UAAU,CAAC46B,YAAY,CAAC,CAAC,CAACI,eAAe,CAAC,CAAC;IAC7C;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAACjnB,OAAO,EAAEknB,GAAG,EAAEC,MAAM,EAAE;EACrD,IAAIA,MAAM,KAAKj/B,SAAS,EAAE;IACxBi/B,MAAM,GAAGD,GAAG;EACd;EACA,IAAIlnB,OAAO,CAAConB,iBAAiB,EAAE;IAC7BpnB,OAAO,CAACqnB,KAAK,CAAC,CAAC;IAEf,IAAI;MACFrnB,OAAO,CAAConB,iBAAiB,CAACF,GAAG,EAAEC,MAAM,CAAC;IACxC,CAAC,CAAC,OAAOG,GAAG,EAAE;MACZ,MAAMC,aAAa,GAAGvnB,OAAO,CAACuY,UAAU;MACxC,MAAMiP,kBAAkB,GAAGD,aAAa,CAAC5a,KAAK,CAACiW,OAAO;MAEtD2E,aAAa,CAAC5a,KAAK,CAACiW,OAAO,GAAG,OAAO;MACrC5iB,OAAO,CAAConB,iBAAiB,CAACF,GAAG,EAAEC,MAAM,CAAC;MACtCI,aAAa,CAAC5a,KAAK,CAACiW,OAAO,GAAG4E,kBAAkB;IAClD;EACF;AACF;AAEA,IAAIC,oBAAoB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,kCAAkCA,CAAA,EAA0B;EAAA,IAAzB57B,YAAY,GAAA9D,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGg8B,QAAQ;EACjE,MAAM2D,KAAK,GAAG77B,YAAY,CAAC6B,aAAa,CAAC,KAAK,CAAC;EAE/Cg6B,KAAK,CAAChb,KAAK,CAAC9D,MAAM,GAAG,OAAO;EAC5B8e,KAAK,CAAChb,KAAK,CAAChE,KAAK,GAAG,MAAM;EAE1B,MAAMif,KAAK,GAAG97B,YAAY,CAAC6B,aAAa,CAAC,KAAK,CAAC;EAE/Ci6B,KAAK,CAACjb,KAAK,CAACkb,SAAS,GAAG,aAAa;EACrCD,KAAK,CAACjb,KAAK,CAAC9D,MAAM,GAAG,OAAO;EAC5B+e,KAAK,CAACjb,KAAK,CAAC2W,IAAI,GAAG,KAAK;EACxBsE,KAAK,CAACjb,KAAK,CAACK,QAAQ,GAAG,QAAQ;EAC/B4a,KAAK,CAACjb,KAAK,CAACsW,QAAQ,GAAG,UAAU;EACjC2E,KAAK,CAACjb,KAAK,CAAC4W,GAAG,GAAG,KAAK;EACvBqE,KAAK,CAACjb,KAAK,CAAChE,KAAK,GAAG,OAAO;EAC3Bif,KAAK,CAACjb,KAAK,CAACmb,UAAU,GAAG,QAAQ;EACjCF,KAAK,CAACtF,WAAW,CAACqF,KAAK,CAAC;EAExB,CAAC77B,YAAY,CAACk3B,IAAI,IAAIl3B,YAAY,CAAC22B,eAAe,EAAEH,WAAW,CAACsF,KAAK,CAAC;EACtE,MAAMG,EAAE,GAAGJ,KAAK,CAAC5B,WAAW;EAE5B6B,KAAK,CAACjb,KAAK,CAACK,QAAQ,GAAG,QAAQ;EAC/B,IAAIgb,EAAE,GAAGL,KAAK,CAAC5B,WAAW;EAE1B,IAAIgC,EAAE,KAAKC,EAAE,EAAE;IACbA,EAAE,GAAGJ,KAAK,CAACrD,WAAW;EACxB;EACA,CAACz4B,YAAY,CAACk3B,IAAI,IAAIl3B,YAAY,CAAC22B,eAAe,EAAEjK,WAAW,CAACoP,KAAK,CAAC;EAEtE,OAAQG,EAAE,GAAGC,EAAE;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,iBAAiBA,CAAA,EAA0B;EAAA,IAAzBn8B,YAAY,GAAA9D,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGg8B,QAAQ;EACvD,IAAIyD,oBAAoB,KAAKv/B,SAAS,EAAE;IACtCu/B,oBAAoB,GAAGC,kCAAkC,CAAC57B,YAAY,CAAC;EACzE;EAEA,OAAO27B,oBAAoB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASS,oBAAoBA,CAACloB,OAAO,EAAE;EAC5C,OAAOA,OAAO,CAAC+lB,WAAW,KAAK/lB,OAAO,CAACukB,WAAW;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS4D,sBAAsBA,CAACnoB,OAAO,EAAE;EAC9C,OAAOA,OAAO,CAACimB,YAAY,KAAKjmB,OAAO,CAACqkB,YAAY;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS+D,kBAAkBA,CAACC,WAAW,EAAE/E,IAAI,EAAEC,GAAG,EAAE;EACzD8E,WAAW,CAAC1b,KAAK,CAAC2b,SAAS,GAAG,eAAehF,IAAI,IAAIC,GAAG,KAAK;AAC/D;;AAEA;AACA;AACA;AACA;AACO,SAASgF,eAAeA,CAACvoB,OAAO,EAAE;EACvC,IAAIsoB,SAAS;EAEb,IAAItoB,OAAO,CAAC2M,KAAK,CAAC2b,SAAS,IAAI,CAACA,SAAS,GAAGtoB,OAAO,CAAC2M,KAAK,CAAC2b,SAAS,MAAM,EAAE,EAAE;IAC3E,OAAO,CAAC,WAAW,EAAEA,SAAS,CAAC;EACjC;EAEA,OAAO,CAAC,CAAC;AACX;;AAEA;AACA;AACA;AACO,SAASE,iBAAiBA,CAACxoB,OAAO,EAAE;EACzC,IAAIA,OAAO,CAAC2M,KAAK,CAAC2b,SAAS,IAAItoB,OAAO,CAAC2M,KAAK,CAAC2b,SAAS,KAAK,EAAE,EAAE;IAC7DtoB,OAAO,CAAC2M,KAAK,CAAC2b,SAAS,GAAG,EAAE;EAC9B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,OAAOA,CAACzoB,OAAO,EAAE;EAC/B,MAAM0oB,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC;EAE9C,OAAO1oB,OAAO,KAAK0oB,MAAM,CAAC3b,OAAO,CAAC/M,OAAO,CAACsE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAItE,OAAO,CAAC2oB,eAAe,KAAK,MAAM,CAAC;AACjG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAcA,CAAC5oB,OAAO,EAAE;EACtC,OAAOyoB,OAAO,CAACzoB,OAAO,CAAC,IAAIA,OAAO,CAAC6oB,YAAY,CAAC,gBAAgB,CAAC,KAAK,KAAK;AAC7E;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAAC9oB,OAAO,EAAE;EAC9C,MAAM+oB,aAAa,GAAG/oB,OAAO,CAACjU,aAAa,CAACg9B,aAAa;EAEzD,IAAI,CAACH,cAAc,CAACG,aAAa,CAAC,EAAE;IAClC/oB,OAAO,CAACgpB,MAAM,CAAC,CAAC;EAClB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAACjpB,OAAO,EAAE;EAClC,OAAO,CAACA,OAAO,CAACuY,UAAU;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASnX,2BAA2BA,CAAC8nB,mBAAmB,EAAE1mB,QAAQ,EAAE;EACzE,MAAM2mB,kBAAkB,GAAG,IAAIC,oBAAoB,CAAC,CAACC,OAAO,EAAEC,QAAQ,KAAK;IACzED,OAAO,CAACtjB,OAAO,CAAEoa,KAAK,IAAK;MACzB,IAAIA,KAAK,CAACoJ,cAAc,IAAIL,mBAAmB,CAAC/nB,YAAY,KAAK,IAAI,EAAE;QACrEqB,QAAQ,CAAC,CAAC;QACV8mB,QAAQ,CAACE,SAAS,CAACN,mBAAmB,CAAC;MACzC;IACF,CAAC,CAAC;EACJ,CAAC,EAAE;IACD1J,IAAI,EAAE0J,mBAAmB,CAACn9B,aAAa,CAACi3B;EAC1C,CAAC,CAAC;EAEFmG,kBAAkB,CAACM,OAAO,CAACP,mBAAmB,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASQ,6CAA6CA,CAAC1pB,OAAO,EAAgD;EAAA,IAA9C2pB,kBAAkB,GAAA3hC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAAA,IAAE4hC,UAAU,GAAA5hC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EACjH,MAAM+D,aAAa,GAAGiU,OAAO,CAACjU,aAAa;EAC3C,MAAM89B,KAAK,GAAG99B,aAAa,CAAC+6B,WAAW,CAAC,CAAC;EACzC,MAAMxZ,GAAG,GAAGvhB,aAAa,CAACE,WAAW,CAAC26B,YAAY,CAAC,CAAC;EAEpDl6B,YAAY,CAACsT,OAAO,EAAE,iBAAiB,EAAE,IAAI,CAAC;EAE9C,IAAI4pB,UAAU,EAAE;IACdl9B,YAAY,CAACsT,OAAO,EAAE,GAAG,IAAA8pB,iBAAW,EAAC,CAAC,CAAC;EACzC;EAEA,IAAIH,kBAAkB,EAAE;IACtBn2B,QAAQ,CAACwM,OAAO,EAAE,oBAAoB,CAAC;EACzC;EAEA6pB,KAAK,CAACE,kBAAkB,CAAC/pB,OAAO,CAAC;EAEjCsN,GAAG,CAAC0Z,eAAe,CAAC,CAAC;EAErB1Z,GAAG,CAAC0c,QAAQ,CAACH,KAAK,CAAC;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,2CAA2CA,CAACC,eAAe,EAAwC;EAAA,IAAtCC,6BAA6B,GAAAniC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAC/G,MAAMslB,GAAG,GAAG4c,eAAe,CAACn+B,aAAa,CAACE,WAAW,CAAC26B,YAAY,CAAC,CAAC;EAEpE,IAAIsD,eAAe,CAACrB,YAAY,CAAC,aAAa,CAAC,EAAE;IAC/CqB,eAAe,CAACjJ,eAAe,CAAC,aAAa,CAAC;EAChD;EAEA3T,GAAG,CAAC0Z,eAAe,CAAC,CAAC;EAErB,IAAImD,6BAA6B,EAAE;IACjC12B,WAAW,CAACy2B,eAAe,EAAE,oBAAoB,CAAC;EACpD;EAEAA,eAAe,CAACjJ,eAAe,CAAC,iBAAiB,CAAC;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASmJ,qCAAqCA,CAACpqB,OAAO,EAAEwC,QAAQ,EAA6B;EAAA,IAA3BmnB,kBAAkB,GAAA3hC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;EAChG0hC,6CAA6C,CAAC1pB,OAAO,EAAE2pB,kBAAkB,CAAC;EAE1EnnB,QAAQ,CAAC,CAAC;EAEVynB,2CAA2C,CAACjqB,OAAO,EAAE2pB,kBAAkB,CAAC;AAC1E;;;;;;;;;;;;;;;;;;;ACjpCA,IAAAU,UAAA,GAAA5jC,sBAAA,CAAAF,mBAAA;AACA,IAAA8C,MAAA,GAAA9C,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASyzB,gBAAgBA,CAACsQ,MAAM,EAAE;EACvC,OAAOA,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGD,MAAM,CAACE,MAAM,CAAC,CAAC,CAAC;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAAA,EAAa;EAC3C,MAAMC,MAAM,GAAG,EAAE;EAAC,SAAAz2B,IAAA,GAAAjM,SAAA,CAAAC,MAAA,EADgB0iC,OAAO,OAAAx2B,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;IAAPu2B,OAAO,CAAAv2B,IAAA,IAAApM,SAAA,CAAAoM,IAAA;EAAA;EAEzC,IAAInM,MAAM,GAAG0iC,OAAO,CAAC1iC,MAAM;EAE3B,OAAOA,MAAM,EAAE;IACbA,MAAM,IAAI,CAAC;IACX,MAAMqiC,MAAM,GAAG,IAAAM,gBAAS,EAACD,OAAO,CAAC1iC,MAAM,CAAC,CAAC,CAAC4iC,WAAW,CAAC,CAAC;IAEvD,IAAIH,MAAM,CAAC3d,OAAO,CAACud,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;MACjCI,MAAM,CAAC7yB,IAAI,CAACyyB,MAAM,CAAC;IACrB;EACF;EAEA,OAAOI,MAAM,CAACziC,MAAM,KAAK,CAAC;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASkG,YAAYA,CAAA,EAAG;EAC7B;AACF;AACA;EACE,SAAS28B,EAAEA,CAAA,EAAG;IACZ,OAAO/6B,IAAI,CAACg7B,KAAK,CAAC,CAAC,CAAC,GAAGh7B,IAAI,CAACi7B,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAC7CnE,QAAQ,CAAC,EAAE,CAAC,CACZh4B,SAAS,CAAC,CAAC,CAAC;EACjB;EAEA,OAAOi8B,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC,GAAGA,EAAE,CAAC,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,cAAcA,CAAC73B,KAAK,EAAE;EACpC,OAAO,2BAA2B,CAACwR,IAAI,CAACxR,KAAK,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS83B,UAAUA,CAACC,QAAQ,EAAkB;EAAA,IAAhBC,SAAS,GAAApjC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACjD,OAAQ,GAAGmjC,QAAQ,EAAE,CAAEhpB,OAAO,CAAC,sBAAsB,EAAE,CAACkpB,KAAK,EAAEC,IAAI,KAAK;IACtE,IAAID,KAAK,CAACE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;MAC5B,OAAOF,KAAK,CAACb,MAAM,CAAC,CAAC,EAAEa,KAAK,CAACpjC,MAAM,GAAG,CAAC,CAAC;IAC1C;IAEA,OAAOmjC,SAAS,CAACE,IAAI,CAAC,KAAKpjC,SAAS,GAAG,EAAE,GAAGkjC,SAAS,CAACE,IAAI,CAAC;EAC7D,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,SAASA,CAAClB,MAAM,EAAE;EAChC,OAAOpI,QAAQ,CAAC,GAAGoI,MAAM,EAAE,EAAE;IAAEmB,YAAY,EAAE;EAAG,CAAC,CAAC;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASvJ,QAAQA,CAACoI,MAAM,EAAEjU,OAAO,EAAE;EACxC,OAAOqV,kBAAS,CAACxJ,QAAQ,CAACoI,MAAM,EAAEjU,OAAO,CAAC;AAC5C;;;;;;;ACpGA;;;;;;;;;;;;;;;;;ACAA,IAAAsV,OAAA,GAAAllC,sBAAA,CAAAF,mBAAA;AACA,IAAAqlC,mBAAA,GAAArlC,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASqkC,SAASA,CAACx3B,KAAK,EAAE;EAC/B,IAAImQ,MAAM;EAEV,QAAQ,OAAOnQ,KAAK;IAClB,KAAK,QAAQ;IACb,KAAK,QAAQ;MACXmQ,MAAM,GAAG,GAAGnQ,KAAK,EAAE;MACnB;IAEF,KAAK,QAAQ;MACXmQ,MAAM,GAAGnQ,KAAK,KAAK,IAAI,GAAG,EAAE,GAAGA,KAAK,CAACyzB,QAAQ,CAAC,CAAC;MAC/C;IACF,KAAK,WAAW;MACdtjB,MAAM,GAAG,EAAE;MACX;IACF;MACEA,MAAM,GAAGnQ,KAAK,CAACyzB,QAAQ,CAAC,CAAC;MACzB;EACJ;EAEA,OAAOtjB,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASO,SAASA,CAAC+nB,QAAQ,EAAE;EAClC,OAAO,OAAOA,QAAQ,KAAK,WAAW;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASlhB,WAAWA,CAACkhB,QAAQ,EAAE;EACpC,OAAO,OAAOA,QAAQ,KAAK,WAAW;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASjyB,OAAOA,CAACiyB,QAAQ,EAAE;EAChC,OAAOA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAK,EAAE,IAAIlhB,WAAW,CAACkhB,QAAQ,CAAC;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASrnB,QAAQA,CAACqnB,QAAQ,EAAE;EACjC,OAAO7oB,MAAM,CAAC7J,SAAS,CAAC0tB,QAAQ,CAAC9hB,IAAI,CAAC8mB,QAAQ,CAAC,KAAK,iBAAiB;AACvE;;AAEA;AACA,MAAMC,EAAE,GAAG,0BAA0B;AACrC,MAAMC,GAAG,GAAIC,CAAC,IAAKpf,QAAQ,CAACof,CAAC,EAAE,EAAE,CAAC;AAClC,MAAMC,GAAG,GAAID,CAAC,IAAKpf,QAAQ,CAACof,CAAC,EAAE,EAAE,CAAC;AAClC,MAAME,GAAG,GAAGA,CAACF,CAAC,EAAEG,CAAC,EAAEC,CAAC,KAAKJ,CAAC,CAAC,0BAA0B,CAAC,CAACG,CAAC,EAAEC,CAAC,CAAC;AAC5D,MAAMC,GAAG,GAAIL,CAAC,IAAKA,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC5E,MAAMM,KAAK,GAAIN,CAAC,IAAK,GAAGA,CAAC,EAAE,CAAC7pB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9C,MAAMoqB,YAAY,GAAIP,CAAC,IAAKD,GAAG,CAACG,GAAG,CAACI,KAAK,CAACN,CAAC,CAAC,EAAED,GAAG,CAAC,IAAI,CAAC,EAAEM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAIN,GAAG,CAACG,GAAG,CAACI,KAAK,CAACN,CAAC,CAAC,EAAEK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAACP,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1H,MAAMU,QAAQ,GAAGA,CAAA,KAAM,OAAOC,QAAQ,KAAK,WAAW,IAAI,qFAAqF,CAAC7nB,IAAI,CAAC6nB,QAAQ,CAAC5O,IAAI,CAAC;AACnK,IAAI6O,SAAS,GAAG,KAAK;AAErB,MAAMC,eAAe,GAAG;EACtBC,OAAO,EAAEA,CAAA,KAAM,IAAAC,gCAAY;AAC7B;AACA,kEAAkE;EAChEC,OAAO,EAAEx6B,IAAA;IAAA,IAAC;MAAEy6B,eAAe;MAAEC;IAAW,CAAC,GAAA16B,IAAA;IAAA,OAAK,IAAAu6B,gCAAY;AAC5D,kDAAkDE,eAAe;AACjE,cAAcC,UAAU;AACxB,SAASD,eAAe,+DAA+D;EAAA;EACrFE,OAAO,EAAEA,CAAA,KAAM,IAAAJ,gCAAY;AAC7B;AACA;AACA;AACA,oCAAoC;EAClCK,cAAc,EAAEA,CAAA,KAAM;AACxB,CAAC;AACD,MAAMC,WAAW,GAAG;EAClBP,OAAO,EAAEA,CAAA,KAAM,IAAAC,gCAAY;AAC7B;AACA;AACA,iHAAiH;EAC/GC,OAAO,EAAEh2B,KAAA;IAAA,IAAC;MAAEi2B,eAAe;MAAEC;IAAW,CAAC,GAAAl2B,KAAA;IAAA,OAAK,IAAA+1B,gCAAY;AAC5D,kDAAkDE,eAAe;AACjE,cAAcC,UAAU;AACxB,8DAA8DD,eAAe;AAC7E,4FAA4F;EAAA;EAC1FE,OAAO,EAAEA,CAAA,KAAM,IAAAJ,gCAAY;AAC7B;AACA;AACA;AACA;AACA,+GAA+G;EAC7GK,cAAc,EAAEA,CAAA,KAAM;AACxB,CAAC;AAEM,SAASl/B,kBAAkBA,CAAC0iB,GAAG,EAAE1Q,OAAO,EAAE;EAC/C,MAAMotB,YAAY,GAAG,CAACxzB,OAAO,CAAC8W,GAAG,CAAC;EAClC,MAAM2c,eAAe,GAAG,OAAO3c,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACma,WAAW,CAAC,CAAC,KAAK,+BAA+B;EACxG,MAAMmC,UAAU,WAA0B;EAC1C,IAAID,eAAe;EACnB,IAAIO,mBAAmB,GAAG,SAAS;EACnC,IAAIC,eAAe,GAAG,SAAS;EAE/B7c,GAAG,GAAG4b,KAAK,CAAC5b,GAAG,IAAI,EAAE,CAAC;EAEtB,MAAM8c,cAAc,GAAGC,eAAe,CAAC/c,GAAG,CAAC;EAE3C,IAAI0c,YAAY,IAAIC,eAAe,IAAIG,cAAc,EAAE;IACrD,IAAIA,cAAc,EAAE;MAClB,MAAME,WAAW,GAAG,IAAAC,eAAM,gBAA+B,YAAY,CAAC;MACtE,MAAMC,WAAW,GAAG79B,IAAI,CAACg7B,KAAK,CAAC2C,WAAW,CAACG,MAAM,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;MACvE,MAAMC,eAAe,GAAGxB,YAAY,CAAC7b,GAAG,CAAC;MAEzCqc,eAAe,GAAG,IAAAY,eAAM,EAAC,CAACI,eAAe,GAAG,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,CAACC,MAAM,CAAC,eAAe,CAAC;MAErF,IAAIJ,WAAW,GAAGG,eAAe,EAAE;QACjCT,mBAAmB,GAAG,SAAS;QAC/BC,eAAe,GAAG,SAAS;MAC7B,CAAC,MAAM;QACLD,mBAAmB,GAAG,OAAO;QAC7BC,eAAe,GAAG,OAAO;MAC3B;IAEF,CAAC,MAAM,IAAIF,eAAe,EAAE;MAC1BC,mBAAmB,GAAG,gBAAgB;MACtCC,eAAe,GAAG,OAAO;IAE3B,CAAC,MAAM;MACLD,mBAAmB,GAAG,SAAS;MAC/BC,eAAe,GAAG,SAAS;IAC7B;EAEF,CAAC,MAAM;IACLD,mBAAmB,GAAG,SAAS;IAC/BC,eAAe,GAAG,SAAS;EAC7B;EAEA,IAAIf,QAAQ,CAAC,CAAC,EAAE;IACdc,mBAAmB,GAAG,OAAO;IAC7BC,eAAe,GAAG,OAAO;EAC3B;EAEA,IAAI,CAACb,SAAS,IAAIY,mBAAmB,KAAK,OAAO,EAAE;IACjD,MAAMW,OAAO,GAAGtB,eAAe,CAACW,mBAAmB,CAAC,CAAC;MACnDP,eAAe;MACfC;IACF,CAAC,CAAC;IAEF,IAAIiB,OAAO,EAAE;MACXC,OAAO,CAACZ,mBAAmB,KAAK,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC,CAACX,eAAe,CAACW,mBAAmB,CAAC,CAAC;QACvGP,eAAe;QACfC;MACF,CAAC,CAAC,CAAC;IACL;IACAN,SAAS,GAAG,IAAI;EAClB;EAEA,IAAIa,eAAe,KAAK,OAAO,IAAIvtB,OAAO,CAACuY,UAAU,EAAE;IACrD,MAAM0V,OAAO,GAAGd,WAAW,CAACI,eAAe,CAAC,CAAC;MAC3CR,eAAe;MACfC;IACF,CAAC,CAAC;IAEF,IAAIiB,OAAO,EAAE;MACX,MAAME,WAAW,GAAGnK,QAAQ,CAACr2B,aAAa,CAAC,KAAK,CAAC;MAEjDwgC,WAAW,CAACruB,SAAS,GAAG,0BAA0B;MAClDquB,WAAW,CAAClM,SAAS,GAAGkL,WAAW,CAACI,eAAe,CAAC,CAAC;QACnDR,eAAe;QACfC;MACF,CAAC,CAAC;MACFhtB,OAAO,CAACuY,UAAU,CAAC1qB,YAAY,CAACsgC,WAAW,EAAEnuB,OAAO,CAACoiB,WAAW,CAAC;IACnE;EACF;AACF;AAEA,SAASqL,eAAeA,CAACzB,CAAC,EAAE;EAC1B,IAAIoC,CAAC,GAAG,EAAE,CAACtC,EAAE,CAAC;EACd,IAAIuC,CAAC,GAAGD,CAAC;EAET,IAAIpC,CAAC,CAACF,EAAE,CAAC,KAAKO,GAAG,CAAC,MAAM,CAAC,EAAE;IACzB,OAAO,KAAK;EACd;EAEA,KAAK,IAAI9vB,CAAC,GAAG,EAAE,EAAEwB,CAAC,GAAG,0BAA0B,CAACyiB,KAAK,CAAC,EAAE,CAAC,EAAEjV,CAAC,GAAG8gB,GAAG,CAACtuB,CAAC,CAACuwB,KAAK,CAAC,CAAC,CAAC,EAAE/iB,CAAC,EAAEA,CAAC,GAAG8gB,GAAG,CAACtuB,CAAC,CAACuwB,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;IAC3G,EAAE/iB,CAAC,GAAC,EAAE,CAACugB,EAAE,CAAC,GAACuC,CAAC,GAACA,CAAC,GAAC,CAACpC,GAAG,CAAC,GAAGA,GAAG,CAACF,GAAG,CAACxvB,CAAC,CAAC,GAAC,CAACwvB,GAAG,CAACG,GAAG,CAACF,CAAC,EAACj8B,IAAI,CAACw+B,GAAG,CAAChjB,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,EAAE,EAAEijB,QAAQ,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAC,EAAE,IAAE,CAAC,KAAG,CAAC,GAACjyB,CAAC,GAAC2vB,GAAG,CAACF,CAAC,EAACzgB,CAAC,EAAC,CAACA,CAAC,GAAC,CAAC,GAACxN,CAAC,CAAC+tB,EAAE,CAAC,KAAG,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC;EAC9H;EAEA,OAAOuC,CAAC,KAAKD,CAAC;AAChB;AACA;;;;;;;ACpNA;;;;;;;;;;;ACAA,IAAAzkC,MAAA,GAAApD,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASsmC,YAAYA,CAAClC,OAAO,EAAkB;EAAA,SAAA12B,IAAA,GAAAjM,SAAA,CAAAC,MAAA,EAAbwmC,WAAW,OAAAt6B,KAAA,CAAAF,IAAA,OAAAA,IAAA,WAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;IAAXq6B,WAAW,CAAAr6B,IAAA,QAAApM,SAAA,CAAAoM,IAAA;EAAA;EAClD,MAAMmP,MAAM,GAAG,IAAApM,kBAAW,EAACwzB,OAAO,EAAE,CAAC+D,aAAa,EAAEC,YAAY,EAAEt4B,KAAK,KAAK;IAE1E,MAAMu4B,uBAAuB,GAAGD,YAAY,CAACxsB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IACrE,MAAM0sB,kBAAkB,GAAGJ,WAAW,CAACp4B,KAAK,CAAC,GAAGo4B,WAAW,CAACp4B,KAAK,CAAC,GAAG,EAAE;IAEvE,OAAOq4B,aAAa,GAAGE,uBAAuB,GAAGC,kBAAkB;EACrE,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOtrB,MAAM,CAACurB,IAAI,CAAC,CAAC;AACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACO,SAASC,SAASA,CAACvb,GAAG,EAAE;EAC7B,MAAMhO,IAAI,GAAGgO,GAAG,CAACvrB,MAAM;EACvB,IAAI8V,CAAC,GAAG,CAAC;EAET,OAAOA,CAAC,GAAGyH,IAAI,EAAE;IACfgO,GAAG,CAACzV,CAAC,CAAC,GAAG,CAACyV,GAAG,CAACzV,CAAC,CAAC,CAAC;IACjBA,CAAC,IAAI,CAAC;EACR;AACF;;AAEA;AACA;AACA;AACA;AACO,SAASixB,WAAWA,CAACxb,GAAG,EAAEyb,SAAS,EAAE;EAC1C,MAAMzpB,IAAI,GAAGypB,SAAS,CAAChnC,MAAM;EAC7B,IAAI8V,CAAC,GAAG,CAAC;EAET,OAAOA,CAAC,GAAGyH,IAAI,EAAE;IACfgO,GAAG,CAAC3b,IAAI,CAACo3B,SAAS,CAAClxB,CAAC,CAAC,CAAC;IACtBA,CAAC,IAAI,CAAC;EACR;AACF;;AAEA;AACA;AACA;AACA;AACO,SAASd,KAAKA,CAACuW,GAAG,EAAE;EACzB,MAAM0b,UAAU,GAAG,EAAE;EAErB,IAAI,CAAC1b,GAAG,IAAIA,GAAG,CAACvrB,MAAM,KAAK,CAAC,IAAI,CAACurB,GAAG,CAAC,CAAC,CAAC,IAAIA,GAAG,CAAC,CAAC,CAAC,CAACvrB,MAAM,KAAK,CAAC,EAAE;IAC9D,OAAOinC,UAAU;EACnB;EAEA,MAAMC,QAAQ,GAAG3b,GAAG,CAACvrB,MAAM;EAC3B,MAAMmnC,QAAQ,GAAG5b,GAAG,CAAC,CAAC,CAAC,CAACvrB,MAAM;EAE9B,KAAK,IAAI8V,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoxB,QAAQ,EAAEpxB,CAAC,EAAE,EAAE;IACjC,KAAK,IAAIwN,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6jB,QAAQ,EAAE7jB,CAAC,EAAE,EAAE;MACjC,IAAI,CAAC2jB,UAAU,CAAC3jB,CAAC,CAAC,EAAE;QAClB2jB,UAAU,CAAC3jB,CAAC,CAAC,GAAG,EAAE;MACpB;MAEA2jB,UAAU,CAAC3jB,CAAC,CAAC,CAACxN,CAAC,CAAC,GAAGyV,GAAG,CAACzV,CAAC,CAAC,CAACwN,CAAC,CAAC;IAC9B;EACF;EAEA,OAAO2jB,UAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS/3B,WAAWA,CAACk4B,KAAK,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,aAAa,EAAE;EACvE,IAAIn5B,KAAK,GAAG,CAAC,CAAC;EACd,IAAIo5B,QAAQ,GAAGJ,KAAK;EACpB,IAAI9rB,MAAM,GAAGgsB,WAAW;EAExB,IAAI,CAACp7B,KAAK,CAAC4E,OAAO,CAACs2B,KAAK,CAAC,EAAE;IACzBI,QAAQ,GAAGt7B,KAAK,CAACrC,IAAI,CAACu9B,KAAK,CAAC;EAC9B;EACA,MAAMpnC,MAAM,GAAGwnC,QAAQ,CAACxnC,MAAM;EAE9B,IAAIunC,aAAa,IAAIvnC,MAAM,EAAE;IAC3BoO,KAAK,IAAI,CAAC;IACVkN,MAAM,GAAGksB,QAAQ,CAACp5B,KAAK,CAAC;EAC1B;EAEAA,KAAK,IAAI,CAAC;EAEV,OAAOA,KAAK,GAAGpO,MAAM,EAAE;IACrBsb,MAAM,GAAG+rB,QAAQ,CAAC/rB,MAAM,EAAEksB,QAAQ,CAACp5B,KAAK,CAAC,EAAEA,KAAK,EAAEo5B,QAAQ,CAAC;IAC3Dp5B,KAAK,IAAI,CAAC;EACZ;EAEA,OAAOkN,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASmsB,WAAWA,CAACL,KAAK,EAAEM,SAAS,EAAE;EAC5C,IAAIt5B,KAAK,GAAG,CAAC;EACb,IAAIo5B,QAAQ,GAAGJ,KAAK;EAEpB,IAAI,CAACl7B,KAAK,CAAC4E,OAAO,CAACs2B,KAAK,CAAC,EAAE;IACzBI,QAAQ,GAAGt7B,KAAK,CAACrC,IAAI,CAACu9B,KAAK,CAAC;EAC9B;EAEA,MAAMpnC,MAAM,GAAGwnC,QAAQ,CAACxnC,MAAM;EAC9B,MAAMsb,MAAM,GAAG,EAAE;EACjB,IAAIqsB,QAAQ,GAAG,CAAC,CAAC;EAEjB,OAAOv5B,KAAK,GAAGpO,MAAM,EAAE;IACrB,MAAMmL,KAAK,GAAGq8B,QAAQ,CAACp5B,KAAK,CAAC;IAE7B,IAAIs5B,SAAS,CAACv8B,KAAK,EAAEiD,KAAK,EAAEo5B,QAAQ,CAAC,EAAE;MACrCG,QAAQ,IAAI,CAAC;MACbrsB,MAAM,CAACqsB,QAAQ,CAAC,GAAGx8B,KAAK;IAC1B;IAEAiD,KAAK,IAAI,CAAC;EACZ;EAEA,OAAOkN,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASwD,QAAQA,CAACsoB,KAAK,EAAEC,QAAQ,EAAE;EACxC,IAAIj5B,KAAK,GAAG,CAAC;EACb,IAAIo5B,QAAQ,GAAGJ,KAAK;EAEpB,IAAI,CAACl7B,KAAK,CAAC4E,OAAO,CAACs2B,KAAK,CAAC,EAAE;IACzBI,QAAQ,GAAGt7B,KAAK,CAACrC,IAAI,CAACu9B,KAAK,CAAC;EAC9B;EAEA,MAAMpnC,MAAM,GAAGwnC,QAAQ,CAACxnC,MAAM;EAC9B,MAAMsb,MAAM,GAAG,EAAE;EACjB,IAAIqsB,QAAQ,GAAG,CAAC,CAAC;EAEjB,OAAOv5B,KAAK,GAAGpO,MAAM,EAAE;IACrB,MAAMmL,KAAK,GAAGq8B,QAAQ,CAACp5B,KAAK,CAAC;IAE7Bu5B,QAAQ,IAAI,CAAC;IACbrsB,MAAM,CAACqsB,QAAQ,CAAC,GAAGN,QAAQ,CAACl8B,KAAK,EAAEiD,KAAK,EAAEo5B,QAAQ,CAAC;IACnDp5B,KAAK,IAAI,CAAC;EACZ;EAEA,OAAOkN,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS9J,SAASA,CAAC41B,KAAK,EAAEC,QAAQ,EAAE;EACzC,IAAIj5B,KAAK,GAAG,CAAC;EACb,IAAIo5B,QAAQ,GAAGJ,KAAK;EAEpB,IAAI,CAACl7B,KAAK,CAAC4E,OAAO,CAACs2B,KAAK,CAAC,EAAE;IACzBI,QAAQ,GAAGt7B,KAAK,CAACrC,IAAI,CAACu9B,KAAK,CAAC;EAC9B;EAEA,MAAMpnC,MAAM,GAAGwnC,QAAQ,CAACxnC,MAAM;EAE9B,OAAOoO,KAAK,GAAGpO,MAAM,EAAE;IACrB,IAAIqnC,QAAQ,CAACG,QAAQ,CAACp5B,KAAK,CAAC,EAAEA,KAAK,EAAEo5B,QAAQ,CAAC,KAAK,KAAK,EAAE;MACxD;IACF;IAEAp5B,KAAK,IAAI,CAAC;EACZ;EAEA,OAAOg5B,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASQ,QAAQA,CAACR,KAAK,EAAE;EAC9B,OAAOl4B,WAAW,CAACk4B,KAAK,EAAE,CAACS,CAAC,EAAEC,CAAC,KAAMD,CAAC,GAAGC,CAAE,EAAE,CAAC,CAAC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,QAAQA,CAACX,KAAK,EAAE;EAC9B,OAAOl4B,WAAW,CAACk4B,KAAK,EAAE,CAACS,CAAC,EAAEC,CAAC,KAAMD,CAAC,GAAGC,CAAC,GAAGD,CAAC,GAAGC,CAAE,EAAE57B,KAAK,CAAC4E,OAAO,CAACs2B,KAAK,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,GAAGnnC,SAAS,CAAC;AACnG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS+nC,QAAQA,CAACZ,KAAK,EAAE;EAC9B,OAAOl4B,WAAW,CAACk4B,KAAK,EAAE,CAACS,CAAC,EAAEC,CAAC,KAAMD,CAAC,GAAGC,CAAC,GAAGD,CAAC,GAAGC,CAAE,EAAE57B,KAAK,CAAC4E,OAAO,CAACs2B,KAAK,CAAC,GAAGA,KAAK,CAAC,CAAC,CAAC,GAAGnnC,SAAS,CAAC;AACnG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASgoC,QAAQA,CAACb,KAAK,EAAE;EAC9B,IAAI,CAACA,KAAK,CAACpnC,MAAM,EAAE;IACjB,OAAO,CAAC;EACV;EAEA,OAAO4nC,QAAQ,CAACR,KAAK,CAAC,GAAGA,KAAK,CAACpnC,MAAM;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASkoC,YAAYA,CAACd,KAAK,EAAE;EAClC,OAAOl4B,WAAW,CAACk4B,KAAK,EAAE,CAACe,OAAO,EAAEh9B,KAAK,KAAKg9B,OAAO,CAAC5yB,MAAM,CAACrJ,KAAK,CAAC4E,OAAO,CAAC3F,KAAK,CAAC,GAAG+8B,YAAY,CAAC/8B,KAAK,CAAC,GAAGA,KAAK,CAAC,EAAE,EAAE,CAAC;AACvH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASi9B,WAAWA,CAAChB,KAAK,EAAE;EACjC,MAAM3E,MAAM,GAAG,EAAE;EAEjBjxB,SAAS,CAAC41B,KAAK,EAAGj8B,KAAK,IAAK;IAC1B,IAAIs3B,MAAM,CAAC3d,OAAO,CAAC3Z,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;MAChCs3B,MAAM,CAAC7yB,IAAI,CAACzE,KAAK,CAAC;IACpB;EACF,CAAC,CAAC;EAEF,OAAOs3B,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASpqB,qBAAqBA,CAAA,EAAY;EAAA,SAAArM,IAAA,GAAAjM,SAAA,CAAAC,MAAA,EAARqoC,MAAM,OAAAn8B,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;IAANk8B,MAAM,CAAAl8B,IAAA,IAAApM,SAAA,CAAAoM,IAAA;EAAA;EAC7C,MAAM,CAACm8B,KAAK,EAAE,GAAGC,IAAI,CAAC,GAAG,CAAC,GAAGF,MAAM,CAAC;EACpC,IAAIG,kBAAkB,GAAGF,KAAK;EAE9B92B,SAAS,CAAC+2B,IAAI,EAAGnB,KAAK,IAAK;IACzBoB,kBAAkB,GAAGA,kBAAkB,CAACprB,MAAM,CAACjS,KAAK,IAAI,CAACi8B,KAAK,CAAC9iC,QAAQ,CAAC6G,KAAK,CAAC,CAAC;EACjF,CAAC,CAAC;EAEF,OAAOq9B,kBAAkB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,uBAAuBA,CAAA,EAAY;EAAA,SAAAr8B,KAAA,GAAArM,SAAA,CAAAC,MAAA,EAARqoC,MAAM,OAAAn8B,KAAA,CAAAE,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;IAANg8B,MAAM,CAAAh8B,KAAA,IAAAtM,SAAA,CAAAsM,KAAA;EAAA;EAC/C,MAAM,CAACi8B,KAAK,EAAE,GAAGC,IAAI,CAAC,GAAG,CAAC,GAAGF,MAAM,CAAC;EACpC,IAAIG,kBAAkB,GAAGF,KAAK;EAE9B92B,SAAS,CAAC+2B,IAAI,EAAGnB,KAAK,IAAK;IACzBoB,kBAAkB,GAAGA,kBAAkB,CAACprB,MAAM,CAACjS,KAAK,IAAIi8B,KAAK,CAAC9iC,QAAQ,CAAC6G,KAAK,CAAC,CAAC;EAChF,CAAC,CAAC;EAEF,OAAOq9B,kBAAkB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,gBAAgBA,CAAA,EAAY;EAAA,SAAAp8B,KAAA,GAAAvM,SAAA,CAAAC,MAAA,EAARqoC,MAAM,OAAAn8B,KAAA,CAAAI,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;IAAN87B,MAAM,CAAA97B,KAAA,IAAAxM,SAAA,CAAAwM,KAAA;EAAA;EACxC,MAAM,CAAC+7B,KAAK,EAAE,GAAGC,IAAI,CAAC,GAAG,CAAC,GAAGF,MAAM,CAAC;EACpC,MAAMliC,GAAG,GAAG,IAAIpD,GAAG,CAACulC,KAAK,CAAC;EAE1B92B,SAAS,CAAC+2B,IAAI,EAAGnB,KAAK,IAAK;IACzB51B,SAAS,CAAC41B,KAAK,EAAGj8B,KAAK,IAAK;MAC1B,IAAI,CAAChF,GAAG,CAACqsB,GAAG,CAACrnB,KAAK,CAAC,EAAE;QACnBhF,GAAG,CAACosB,GAAG,CAACpnB,KAAK,CAAC;MAChB;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAOe,KAAK,CAACrC,IAAI,CAAC1D,GAAG,CAAC;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASgS,aAAaA,CAAChN,KAAK,EAAmB;EAAA,IAAjBw9B,SAAS,GAAA5oC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EAClD,OAAOoL,KAAK,CAACotB,KAAK,CAACoQ,SAAS,CAAC;AAC/B;;;;;;;;;;ACvUO,MAAMC,aAAa,GAAGC,GAAG,IAAI,CAAC,UAAU,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAA2pC,aAAA;AAC/C,MAAME,aAAa,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAAC7pC,qBAAA,GAAA6pC,aAAA;AACjD,MAAMC,iBAAiB,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,cAAc,CAAC;AAAC9pC,yBAAA,GAAA8pC,iBAAA;AACzD,MAAMC,aAAa,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAAC/pC,qBAAA,GAAA+pC,aAAA;AACjD,MAAMC,cAAc,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,WAAW,CAAC;AAAChqC,sBAAA,GAAAgqC,cAAA;AACnD,MAAMC,aAAa,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAACjqC,qBAAA,GAAAiqC,aAAA;AACjD,MAAMC,iBAAiB,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,cAAc,CAAC;AAAClqC,yBAAA,GAAAkqC,iBAAA;AACzD,MAAMC,QAAQ,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,KAAK,CAAC;AAACnqC,gBAAA,GAAAmqC,QAAA;AACvC,MAAMC,SAAS,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAACpqC,iBAAA,GAAAoqC,SAAA;AACzC,MAAMC,cAAc,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAACrqC,sBAAA,GAAAqqC,cAAA;AAClD,MAAMC,uBAAuB,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;AAACtqC,+BAAA,GAAAsqC,uBAAA;AACnE,MAAMC,aAAa,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAACvqC,qBAAA,GAAAuqC,aAAA;AACjD,MAAMC,YAAY,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,SAAS,CAAC;AAACxqC,oBAAA,GAAAwqC,YAAA;AAC/C,MAAMC,WAAW,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;AAACzqC,mBAAA,GAAAyqC,WAAA;AAC7C,MAAMC,aAAa,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAAC1qC,qBAAA,GAAA0qC,aAAA;AACjD,MAAMC,cAAc,GAAGA,CAAA,KAAM,CAAC,OAAO,EAAE,KAAK,CAAC;AAAC3qC,sBAAA,GAAA2qC,cAAA;AAC9C,MAAMC,cAAc,GAAGA,CAAA,KAAM,CAAC,OAAO,EAAE,KAAK,CAAC;AAAC5qC,sBAAA,GAAA4qC,cAAA;AAC9C,MAAMC,SAAS,GAAGA,CAAA,KAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAAC7qC,iBAAA,GAAA6qC,SAAA;AACzC,MAAMC,UAAU,GAAGlB,GAAG,IAAI,CAAC,YAAY,EAAEA,GAAG,CAAC;AAAC5pC,kBAAA,GAAA8qC,UAAA;AAC9C,MAAMlI,WAAW,GAAGA,CAAA,KAAM,CAAC,aAAa,EAAE,MAAM,CAAC;AAAC5iC,mBAAA,GAAA4iC,WAAA;AAClD,MAAMmI,aAAa,GAAGA,CAAA,KAAM,CAAC,eAAe,EAAE,MAAM,CAAC;AAAC/qC,qBAAA,GAAA+qC,aAAA;AACtD,MAAMC,oBAAoB,GAAGA,CAAA,KAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC;AAAChrC,4BAAA,GAAAgrC,oBAAA;AACpE,MAAMC,aAAa,GAAGrB,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAirC,aAAA;AACpD,MAAMC,aAAa,GAAGtB,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAkrC,aAAA;AACpD,MAAMC,aAAa,GAAGvB,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAmrC,aAAA;AACpD,MAAMC,aAAa,GAAGxB,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAorC,aAAA;AACpD,MAAMC,aAAa,GAAGzB,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAqrC,aAAA;AACpD,MAAMC,aAAa,GAAG1B,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAsrC,aAAA;AACpD,MAAMC,SAAS,GAAG3B,GAAG,IAAI,CAAC,WAAW,EAAEA,GAAG,CAAC;AAAC5pC,iBAAA,GAAAurC,SAAA;AAC5C,MAAMC,aAAa,GAAGA,CAAA,KAAM,CAAC,eAAe,EAAE,MAAM,CAAC;AAACxrC,qBAAA,GAAAwrC,aAAA;AACtD,MAAMC,YAAY,GAAGA,CAAA,KAAM,CAAC,cAAc,EAAE,MAAM,CAAC;AAACzrC,oBAAA,GAAAyrC,YAAA;AACpD,MAAMC,YAAY,GAAG9B,GAAG,IAAI,CAAC,cAAc,EAAEA,GAAG,CAAC;AAAC5pC,oBAAA,GAAA0rC,YAAA;AAClD,MAAMC,aAAa,GAAGA,CAAA,KAAM,CAAC,eAAe,EAAE,MAAM,CAAC;AAAC3rC,qBAAA,GAAA2rC,aAAA;AACtD,MAAMC,iBAAiB,GAAGA,CAAA,KAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC;AAAC5rC,yBAAA,GAAA4rC,iBAAA;AAC9D,MAAMC,aAAa,GAAGjC,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAA6rC,aAAA;AACpD,MAAMC,qBAAqB,GAAGlC,GAAG,IAAI,CAAC,uBAAuB,EAAEA,GAAG,CAAC;AAAC5pC,6BAAA,GAAA8rC,qBAAA;AACpE,MAAMC,SAAS,GAAGnC,GAAG,IAAI,CAAC,WAAW,EAAEA,GAAG,CAAC;AAAC5pC,iBAAA,GAAA+rC,SAAA;AAC5C,MAAMC,aAAa,GAAGpC,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAgsC,aAAA;AACpD,MAAMC,YAAY,GAAGrC,GAAG,IAAI,CAAC,cAAc,EAAEA,GAAG,CAAC;AAAC5pC,oBAAA,GAAAisC,YAAA;AAClD,MAAMC,aAAa,GAAGtC,GAAG,IAAI,CAAC,eAAe,EAAEA,GAAG,CAAC;AAAC5pC,qBAAA,GAAAksC,aAAA;;;;;;;;;;;;;;;;;;;ACvC3D,IAAAzpC,MAAA,GAAApD,mBAAA;AACA,IAAA8C,MAAA,GAAA9C,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASse,UAAUA,CAACwuB,IAAI,EAAE;EAC/B,OAAO,OAAOA,IAAI,KAAK,UAAU;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,QAAQA,CAACD,IAAI,EAAc;EAAA,IAAZE,IAAI,GAAAvrC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EACvC,IAAIwrC,UAAU,GAAG,CAAC;EAClB,MAAMjwB,MAAM,GAAG;IACbkwB,iBAAiB,EAAE;EACrB,CAAC;EACD,IAAIC,SAAS,GAAG,IAAI;;EAEpB;AACF;AACA;AACA;EACE,SAASC,SAASA,CAAA,EAAU;IAAA,SAAA1/B,IAAA,GAAAjM,SAAA,CAAAC,MAAA,EAANiM,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAApM,SAAA,CAAAoM,IAAA;IAAA;IACxB,MAAMw/B,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IACxB,IAAIC,QAAQ,GAAG,KAAK;IAEpBxwB,MAAM,CAACkwB,iBAAiB,GAAG,IAAI;IAE/B,IAAI,CAACD,UAAU,EAAE;MACfA,UAAU,GAAGI,KAAK;MAClBG,QAAQ,GAAG,IAAI;IACjB;IACA,MAAMC,SAAS,GAAGT,IAAI,IAAIK,KAAK,GAAGJ,UAAU,CAAC;IAE7C,IAAIO,QAAQ,EAAE;MACZxwB,MAAM,CAACkwB,iBAAiB,GAAG,KAAK;MAChCJ,IAAI,CAACh6B,KAAK,CAAC,IAAI,EAAEnF,IAAI,CAAC;IACxB,CAAC,MAAM;MACL,IAAIw/B,SAAS,EAAE;QACbxX,YAAY,CAACwX,SAAS,CAAC;MACzB;MACAA,SAAS,GAAG1X,UAAU,CAAC,MAAM;QAC3BzY,MAAM,CAACkwB,iBAAiB,GAAG,KAAK;QAChCJ,IAAI,CAACh6B,KAAK,CAAC,IAAI,EAAEnF,IAAI,CAAC;QACtBs/B,UAAU,GAAG,CAAC;QACdE,SAAS,GAAGxrC,SAAS;MACvB,CAAC,EAAE8rC,SAAS,CAAC;IACf;IAEA,OAAOzwB,MAAM;EACf;EAEA,OAAOowB,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASM,iBAAiBA,CAACZ,IAAI,EAAyB;EAAA,IAAvBE,IAAI,GAAAvrC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EAAA,IAAEksC,IAAI,GAAAlsC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAC3D,MAAMmsC,YAAY,GAAGb,QAAQ,CAACD,IAAI,EAAEE,IAAI,CAAC;EACzC,IAAIa,UAAU,GAAGF,IAAI;;EAErB;AACF;AACA;EACE,SAASG,UAAUA,CAAA,EAAG;IACpBD,UAAU,GAAGF,IAAI;EACnB;EACA;AACF;AACA;AACA;EACE,SAASI,kBAAkBA,CAAA,EAAU;IAAA,SAAAjgC,KAAA,GAAArM,SAAA,CAAAC,MAAA,EAANiM,IAAI,OAAAC,KAAA,CAAAE,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAJJ,IAAI,CAAAI,KAAA,IAAAtM,SAAA,CAAAsM,KAAA;IAAA;IACjC,IAAI8/B,UAAU,EAAE;MACdA,UAAU,IAAI,CAAC;MAEf,OAAOf,IAAI,CAACh6B,KAAK,CAAC,IAAI,EAAEnF,IAAI,CAAC;IAC/B;IAEA,OAAOigC,YAAY,CAAC96B,KAAK,CAAC,IAAI,EAAEnF,IAAI,CAAC;EACvC;EACAogC,kBAAkB,CAACC,SAAS,GAAGF,UAAU;EAEzC,OAAOC,kBAAkB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,QAAQA,CAACnB,IAAI,EAAc;EAAA,IAAZE,IAAI,GAAAvrC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EACvC,IAAI0rC,SAAS,GAAG,IAAI;EACpB,IAAInwB,MAAM;;EAEV;AACF;AACA;AACA;EACE,SAASkxB,SAASA,CAAA,EAAU;IAAA,SAAAlgC,KAAA,GAAAvM,SAAA,CAAAC,MAAA,EAANiM,IAAI,OAAAC,KAAA,CAAAI,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAJN,IAAI,CAAAM,KAAA,IAAAxM,SAAA,CAAAwM,KAAA;IAAA;IACxB,IAAIk/B,SAAS,EAAE;MACbxX,YAAY,CAACwX,SAAS,CAAC;IACzB;IACAA,SAAS,GAAG1X,UAAU,CAAC,MAAM;MAC3BzY,MAAM,GAAG8vB,IAAI,CAACh6B,KAAK,CAAC,IAAI,EAAEnF,IAAI,CAAC;IACjC,CAAC,EAAEq/B,IAAI,CAAC;IAER,OAAOhwB,MAAM;EACf;EAEA,OAAOkxB,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,IAAIA,CAAA,EAAe;EAAA,SAAAjgC,KAAA,GAAAzM,SAAA,CAAAC,MAAA,EAAX0sC,SAAS,OAAAxgC,KAAA,CAAAM,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;IAATigC,SAAS,CAAAjgC,KAAA,IAAA1M,SAAA,CAAA0M,KAAA;EAAA;EAC/B,MAAM,CAACkgC,SAAS,EAAE,GAAGC,QAAQ,CAAC,GAAGF,SAAS;EAE1C,OAAO,SAASG,KAAKA,CAAA,EAAU;IAAA,SAAAngC,KAAA,GAAA3M,SAAA,CAAAC,MAAA,EAANiM,IAAI,OAAAC,KAAA,CAAAQ,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAJV,IAAI,CAAAU,KAAA,IAAA5M,SAAA,CAAA4M,KAAA;IAAA;IAC3B,OAAO,IAAAuC,kBAAW,EAAC09B,QAAQ,EAAE,CAACz9B,GAAG,EAAE29B,EAAE,KAAKA,EAAE,CAAC39B,GAAG,CAAC,EAAEw9B,SAAS,CAACv7B,KAAK,CAAC,IAAI,EAAEnF,IAAI,CAAC,CAAC;EACjF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS8gC,OAAOA,CAAC3B,IAAI,EAAa;EAAA,SAAAx+B,KAAA,GAAA7M,SAAA,CAAAC,MAAA,EAARgtC,MAAM,OAAA9gC,KAAA,CAAAU,KAAA,OAAAA,KAAA,WAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;IAANmgC,MAAM,CAAAngC,KAAA,QAAA9M,SAAA,CAAA8M,KAAA;EAAA;EACrC,OAAO,SAASogC,QAAQA,CAAA,EAAgB;IAAA,SAAAngC,KAAA,GAAA/M,SAAA,CAAAC,MAAA,EAAZktC,UAAU,OAAAhhC,KAAA,CAAAY,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAVmgC,UAAU,CAAAngC,KAAA,IAAAhN,SAAA,CAAAgN,KAAA;IAAA;IACpC,OAAOq+B,IAAI,CAACh6B,KAAK,CAAC,IAAI,EAAE47B,MAAM,CAACz3B,MAAM,CAAC23B,UAAU,CAAC,CAAC;EACpD,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,KAAKA,CAAC/B,IAAI,EAAE;EAC1B,MAAMgC,UAAU,GAAGhC,IAAI,CAACprC,MAAM;;EAE9B;AACF;AACA;AACA;EACE,SAASqtC,KAAKA,CAACC,SAAS,EAAE;IACxB,OAAO,SAASC,MAAMA,CAAA,EAAY;MAAA,SAAAvgC,KAAA,GAAAjN,SAAA,CAAAC,MAAA,EAARgtC,MAAM,OAAA9gC,KAAA,CAAAc,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAN+/B,MAAM,CAAA//B,KAAA,IAAAlN,SAAA,CAAAkN,KAAA;MAAA;MAC9B,MAAMugC,eAAe,GAAGF,SAAS,CAAC/3B,MAAM,CAACy3B,MAAM,CAAC;MAChD,IAAI1xB,MAAM;MAEV,IAAIkyB,eAAe,CAACxtC,MAAM,IAAIotC,UAAU,EAAE;QACxC9xB,MAAM,GAAG8vB,IAAI,CAACh6B,KAAK,CAAC,IAAI,EAAEo8B,eAAe,CAAC;MAC5C,CAAC,MAAM;QACLlyB,MAAM,GAAG+xB,KAAK,CAACG,eAAe,CAAC;MACjC;MAEA,OAAOlyB,MAAM;IACf,CAAC;EACH;EAEA,OAAO+xB,KAAK,CAAC,EAAE,CAAC;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,UAAUA,CAACrC,IAAI,EAAE;EAC/B,MAAMgC,UAAU,GAAGhC,IAAI,CAACprC,MAAM;;EAE9B;AACF;AACA;AACA;EACE,SAASqtC,KAAKA,CAACC,SAAS,EAAE;IACxB,OAAO,SAASC,MAAMA,CAAA,EAAY;MAAA,SAAArgC,KAAA,GAAAnN,SAAA,CAAAC,MAAA,EAARgtC,MAAM,OAAA9gC,KAAA,CAAAgB,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAN6/B,MAAM,CAAA7/B,KAAA,IAAApN,SAAA,CAAAoN,KAAA;MAAA;MAC9B,MAAMqgC,eAAe,GAAGF,SAAS,CAAC/3B,MAAM,CAACy3B,MAAM,CAAC3jB,OAAO,CAAC,CAAC,CAAC;MAC1D,IAAI/N,MAAM;MAEV,IAAIkyB,eAAe,CAACxtC,MAAM,IAAIotC,UAAU,EAAE;QACxC9xB,MAAM,GAAG8vB,IAAI,CAACh6B,KAAK,CAAC,IAAI,EAAEo8B,eAAe,CAAC;MAC5C,CAAC,MAAM;QACLlyB,MAAM,GAAG+xB,KAAK,CAACG,eAAe,CAAC;MACjC;MAEA,OAAOlyB,MAAM;IACf,CAAC;EACH;EAEA,OAAO+xB,KAAK,CAAC,EAAE,CAAC;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,QAAQA,CAACtC,IAAI,EAAEuC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAE;EAC1E,IAAI,IAAApyB,gBAAS,EAACoyB,IAAI,CAAC,EAAE;IACnB,OAAO7C,IAAI,CAACtuB,IAAI,CAAC6wB,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,CAAC;EAE/D,CAAC,MAAM,IAAI,IAAApyB,gBAAS,EAACmyB,IAAI,CAAC,EAAE;IAC1B,OAAO5C,IAAI,CAACtuB,IAAI,CAAC6wB,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,CAAC;EAEzD,CAAC,MAAM,IAAI,IAAAnyB,gBAAS,EAACkyB,IAAI,CAAC,EAAE;IAC1B,OAAO3C,IAAI,CAACtuB,IAAI,CAAC6wB,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,CAAC;EAEnD,CAAC,MAAM,IAAI,IAAAlyB,gBAAS,EAACiyB,IAAI,CAAC,EAAE;IAC1B,OAAO1C,IAAI,CAACtuB,IAAI,CAAC6wB,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,CAAC;EAE7C,CAAC,MAAM,IAAI,IAAAjyB,gBAAS,EAACgyB,IAAI,CAAC,EAAE;IAC1B,OAAOzC,IAAI,CAACtuB,IAAI,CAAC6wB,OAAO,EAAEC,IAAI,EAAEC,IAAI,CAAC;EAEvC,CAAC,MAAM,IAAI,IAAAhyB,gBAAS,EAAC+xB,IAAI,CAAC,EAAE;IAC1B,OAAOxC,IAAI,CAACtuB,IAAI,CAAC6wB,OAAO,EAAEC,IAAI,CAAC;EACjC;EAEA,OAAOxC,IAAI,CAACtuB,IAAI,CAAC6wB,OAAO,CAAC;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;AClSA,IAAAnsC,OAAA,GAAAlD,mBAAA;AACA,IAAA4vC,QAAA,GAAA5vC,mBAAA;AAEA,MAAM6vC,MAAM,GAAIC,UAAU,IAAK;EAC7B,MAAM9yB,MAAM,GAAG;IACbnQ,KAAK,EAAE;EACT,CAAC;EAEDmQ,MAAM,CAACqB,IAAI,GAAG,CAAC0xB,EAAE,EAAEC,MAAM,KAAK;IAC5BhzB,MAAM,CAACnQ,KAAK,GAAGijC,UAAU,CAACC,EAAE,EAAEC,MAAM,CAAC;EACvC,CAAC;EAED,OAAOhzB,MAAM;AACf,CAAC;AAED,MAAMizB,QAAQ,GAAG;EACfC,MAAM,EAAEL,MAAM,CAAC,CAACE,EAAE,EAAEC,MAAM,KAAK,QAAQ,CAAC3xB,IAAI,CAAC0xB,EAAE,CAAC,IAAI,QAAQ,CAAC1xB,IAAI,CAAC2xB,MAAM,CAAC,CAAC;EAC1EG,YAAY,EAAEN,MAAM,CAACE,EAAE,IAAI,OAAO,CAAC1xB,IAAI,CAAC0xB,EAAE,CAAC,CAAC;EAC5CK,IAAI,EAAEP,MAAM,CAACE,EAAE,IAAI,MAAM,CAAC1xB,IAAI,CAAC0xB,EAAE,CAAC,CAAC;EACnCM,UAAU,EAAER,MAAM,CAACE,EAAE,IAAI,QAAQ,CAAC1xB,IAAI,CAAC0xB,EAAE,CAAC,CAAC;EAC3CO,OAAO,EAAET,MAAM,CAACE,EAAE,IAAI,SAAS,CAAC1xB,IAAI,CAAC0xB,EAAE,CAAC,CAAC;EACzCQ,aAAa,EAAEV,MAAM,CAACE,EAAE,IAAI,OAAO,CAAC1xB,IAAI,CAAC0xB,EAAE,CAAC,CAAC;EAC7CS,MAAM,EAAEX,MAAM,CAACE,EAAE,IAAI,gEAAgE,CAAC1xB,IAAI,CAAC0xB,EAAE,CAAC,CAAC;EAC/FU,MAAM,EAAEZ,MAAM,CAAC,CAACE,EAAE,EAAEC,MAAM,KAAK,QAAQ,CAAC3xB,IAAI,CAAC0xB,EAAE,CAAC,IAAI,gBAAgB,CAAC1xB,IAAI,CAAC2xB,MAAM,CAAC;AACnF,CAAC;AAED,MAAMU,SAAS,GAAG;EAChBC,GAAG,EAAEd,MAAM,CAACe,QAAQ,IAAI,MAAM,CAACvyB,IAAI,CAACuyB,QAAQ,CAAC,CAAC;EAC9CC,GAAG,EAAEhB,MAAM,CAACe,QAAQ,IAAI,MAAM,CAACvyB,IAAI,CAACuyB,QAAQ,CAAC,CAAC;EAC9CE,KAAK,EAAEjB,MAAM,CAACe,QAAQ,IAAI,QAAQ,CAACvyB,IAAI,CAACuyB,QAAQ,CAAC,CAAC;EAClDG,GAAG,EAAElB,MAAM,CAACE,EAAE,IAAI,mBAAmB,CAAC1xB,IAAI,CAAC0xB,EAAE,CAAC;AAChD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,SAASiB,cAAcA,CAAA,EAAsE;EAAA,IAArE;IAAEC,SAAS,GAAGC,SAAS,CAACD,SAAS;IAAEjB,MAAM,GAAGkB,SAAS,CAAClB;EAAO,CAAC,GAAAvuC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAChG,IAAAwkB,kBAAU,EAACgqB,QAAQ,EAAElkC,IAAA;IAAA,IAAC;MAAEsS;IAAK,CAAC,GAAAtS,IAAA;IAAA,OAAK,KAAKsS,IAAI,CAAC4yB,SAAS,EAAEjB,MAAM,CAAC;EAAA,EAAC;AAClE;;AAEA;AACA;AACA;AACA;AACO,SAASmB,eAAeA,CAAA,EAAyC;EAAA,IAAxC;IAAEP,QAAQ,GAAGM,SAAS,CAACN;EAAS,CAAC,GAAAnvC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACpE,IAAAwkB,kBAAU,EAACyqB,SAAS,EAAEngC,KAAA;IAAA,IAAC;MAAE8N;IAAK,CAAC,GAAA9N,KAAA;IAAA,OAAK,KAAK8N,IAAI,CAACuyB,QAAQ,CAAC;EAAA,EAAC;AAC1D;AAEA,IAAI,IAAAQ,cAAK,EAAC,CAAC,EAAE;EACXJ,cAAc,CAAC,CAAC;EAChBG,eAAe,CAAC,CAAC;AACnB;;AAEA;AACA;AACA;AACO,SAASE,QAAQA,CAAA,EAAG;EACzB,OAAOpB,QAAQ,CAACC,MAAM,CAACrjC,KAAK;AAC9B;;AAEA;AACA;AACA;AACO,SAASykC,cAAcA,CAAA,EAAG;EAC/B,OAAOrB,QAAQ,CAACE,YAAY,CAACtjC,KAAK;AACpC;;AAEA;AACA;AACA;AACO,SAAS0kC,SAASA,CAAA,EAAG;EAC1B,OAAOtB,QAAQ,CAACK,OAAO,CAACzjC,KAAK;AAC/B;;AAEA;AACA;AACA;AACO,SAAS2kC,eAAeA,CAAA,EAAG;EAChC,OAAOvB,QAAQ,CAACM,aAAa,CAAC1jC,KAAK;AACrC;;AAEA;AACA;AACA;AACO,SAAS4kC,QAAQA,CAAA,EAAG;EACzB,OAAOxB,QAAQ,CAACQ,MAAM,CAAC5jC,KAAK;AAC9B;;AAEA;AACA;AACA;AACO,SAAS6kC,MAAMA,CAAA,EAAG;EACvB,OAAOzB,QAAQ,CAACG,IAAI,CAACvjC,KAAK;AAC5B;;AAEA;AACA;AACA;AACO,SAAS8kC,YAAYA,CAAA,EAAG;EAC7B,OAAO1B,QAAQ,CAACI,UAAU,CAACxjC,KAAK;AAClC;;AAEA;AACA;AACA;AACO,SAASqN,eAAeA,CAAA,EAAG;EAChC,OAAO+1B,QAAQ,CAACO,MAAM,CAAC3jC,KAAK;AAC9B;;AAEA;AACA;AACA;AACO,SAAS+kC,KAAKA,CAAA,EAAG;EACtB,OAAOlB,SAAS,CAACK,GAAG,CAAClkC,KAAK;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASsN,QAAQA,CAAA,EAAiC;EAAA,IAAhC;IAAE03B;EAAe,CAAC,GAAApwC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGyvC,SAAS;EACrD,OAAOW,cAAc,GAAG,CAAC,IAAInB,SAAS,CAACC,GAAG,CAAC9jC,KAAK;AAClD;;AAEA;AACA;AACA;AACO,SAASilC,WAAWA,CAAA,EAAG;EAC5B,OAAOpB,SAAS,CAACG,GAAG,CAAChkC,KAAK;AAC5B;;AAEA;AACA;AACA;AACO,SAASklC,OAAOA,CAAA,EAAG;EACxB,OAAOrB,SAAS,CAACC,GAAG,CAAC9jC,KAAK;AAC5B;;AAEA;AACA;AACA;AACO,SAASmlC,SAASA,CAAA,EAAG;EAC1B,OAAOtB,SAAS,CAACI,KAAK,CAACjkC,KAAK;AAC9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrJA,IAAAzJ,MAAA,GAAApD,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS2Y,UAAUA,CAACs5B,MAAM,EAAE;EACjC,IAAInuB,MAAM;EAEV,IAAIlW,KAAK,CAAC4E,OAAO,CAACy/B,MAAM,CAAC,EAAE;IACzBnuB,MAAM,GAAGmuB,MAAM,CAACvwC,MAAM,GAAG,IAAIkM,KAAK,CAACqkC,MAAM,CAACvwC,MAAM,CAAC,CAACwV,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;EAEnE,CAAC,MAAM;IACL4M,MAAM,GAAG,CAAC,CAAC;IAEXmC,UAAU,CAACgsB,MAAM,EAAE,CAACplC,KAAK,EAAEsd,GAAG,KAAK;MACjC,IAAIA,GAAG,KAAK,YAAY,EAAE;QACxB;MACF;MAEA,IAAItd,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACe,KAAK,CAAC4E,OAAO,CAAC3F,KAAK,CAAC,EAAE;QAC/DiX,MAAM,CAACqG,GAAG,CAAC,GAAGxR,UAAU,CAAC9L,KAAK,CAAC;MAEjC,CAAC,MAAM,IAAIe,KAAK,CAAC4E,OAAO,CAAC3F,KAAK,CAAC,EAAE;QAC/B,IAAIA,KAAK,CAACnL,MAAM,IAAI,OAAOmL,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAACe,KAAK,CAAC4E,OAAO,CAAC3F,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;UAC5EiX,MAAM,CAACqG,GAAG,CAAC,GAAG,CAACxR,UAAU,CAAC9L,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC,MAAM;UACLiX,MAAM,CAACqG,GAAG,CAAC,GAAG,EAAE;QAClB;MAEF,CAAC,MAAM;QACLrG,MAAM,CAACqG,GAAG,CAAC,GAAG,IAAI;MACpB;IACF,CAAC,CAAC;EACJ;EAEA,OAAOrG,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASouB,OAAOA,CAACC,KAAK,EAAEC,MAAM,EAAE;EACrCA,MAAM,CAACx/B,SAAS,CAACihB,WAAW,GAAGue,MAAM;EACrCD,KAAK,CAACv/B,SAAS,GAAG,IAAIw/B,MAAM,CAAC,CAAC;EAC9BD,KAAK,CAACv/B,SAAS,CAACihB,WAAW,GAAGse,KAAK;EAEnC,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,MAAMA,CAACC,MAAM,EAAE5J,SAAS,EAAE6J,YAAY,EAAE;EACtD,MAAMC,eAAe,GAAG5kC,KAAK,CAAC4E,OAAO,CAAC+/B,YAAY,CAAC;EAEnDtsB,UAAU,CAACyiB,SAAS,EAAE,CAAC77B,KAAK,EAAEsd,GAAG,KAAK;IACpC,IAAIqoB,eAAe,KAAK,KAAK,IAAID,YAAY,CAACvsC,QAAQ,CAACmkB,GAAG,CAAC,EAAE;MAC3DmoB,MAAM,CAACnoB,GAAG,CAAC,GAAGtd,KAAK;IACrB;EACF,CAAC,CAAC;EAEF,OAAOylC,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,UAAUA,CAACH,MAAM,EAAE5J,SAAS,EAAE;EAC5CziB,UAAU,CAACyiB,SAAS,EAAE,CAAC77B,KAAK,EAAEsd,GAAG,KAAK;IACpC,IAAIue,SAAS,CAACve,GAAG,CAAC,IAAI,OAAOue,SAAS,CAACve,GAAG,CAAC,KAAK,QAAQ,EAAE;MACxD,IAAI,CAACmoB,MAAM,CAACnoB,GAAG,CAAC,EAAE;QAChB,IAAIvc,KAAK,CAAC4E,OAAO,CAACk2B,SAAS,CAACve,GAAG,CAAC,CAAC,EAAE;UACjCmoB,MAAM,CAACnoB,GAAG,CAAC,GAAG,EAAE;QAClB,CAAC,MAAM,IAAI1N,MAAM,CAAC7J,SAAS,CAAC0tB,QAAQ,CAAC9hB,IAAI,CAACkqB,SAAS,CAACve,GAAG,CAAC,CAAC,KAAK,eAAe,EAAE;UAC7EmoB,MAAM,CAACnoB,GAAG,CAAC,GAAGue,SAAS,CAACve,GAAG,CAAC;QAC9B,CAAC,MAAM;UACLmoB,MAAM,CAACnoB,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB;MACF;MACAsoB,UAAU,CAACH,MAAM,CAACnoB,GAAG,CAAC,EAAEue,SAAS,CAACve,GAAG,CAAC,CAAC;IAEzC,CAAC,MAAM;MACLmoB,MAAM,CAACnoB,GAAG,CAAC,GAAGue,SAAS,CAACve,GAAG,CAAC;IAC9B;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASrR,SAASA,CAAC0Z,GAAG,EAAE;EAC7B,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAOkgB,IAAI,CAACC,KAAK,CAACD,IAAI,CAACrO,SAAS,CAAC7R,GAAG,CAAC,CAAC;EACxC;EAEA,OAAOA,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASogB,KAAKA,CAACX,MAAM,EAAE;EAC5B,MAAMj1B,MAAM,GAAG,CAAC,CAAC;EAEjBiJ,UAAU,CAACgsB,MAAM,EAAE,CAACplC,KAAK,EAAEsd,GAAG,KAAK;IACjCnN,MAAM,CAACmN,GAAG,CAAC,GAAGtd,KAAK;EACrB,CAAC,CAAC;EAEF,OAAOmQ,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS61B,KAAKA,CAACC,IAAI,EAAa;EACrC,IAAI,CAACA,IAAI,CAACC,MAAM,EAAE;IAChBD,IAAI,CAACC,MAAM,GAAG,EAAE;EAClB;EAAC,SAAArlC,IAAA,GAAAjM,SAAA,CAAAC,MAAA,EAH4BsxC,MAAM,OAAAplC,KAAA,CAAAF,IAAA,OAAAA,IAAA,WAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;IAANmlC,MAAM,CAAAnlC,IAAA,QAAApM,SAAA,CAAAoM,IAAA;EAAA;EAInC,IAAAqF,gBAAS,EAAC8/B,MAAM,EAAGC,SAAS,IAAK;IAC/BH,IAAI,CAACC,MAAM,CAACzhC,IAAI,CAAC2hC,SAAS,CAACC,UAAU,CAAC;IAEtCjtB,UAAU,CAACgtB,SAAS,EAAE,CAACpmC,KAAK,EAAEsd,GAAG,KAAK;MACpC,IAAI2oB,IAAI,CAAClgC,SAAS,CAACuX,GAAG,CAAC,KAAKxoB,SAAS,EAAE;QACrC,MAAM,IAAI0S,KAAK,CAAC,6BAA6B8V,GAAG,4CAA4C,CAAC;MAC/F;MACA,IAAI,OAAOtd,KAAK,KAAK,UAAU,EAAE;QAC/BimC,IAAI,CAAClgC,SAAS,CAACuX,GAAG,CAAC,GAAGtd,KAAK;MAE7B,CAAC,MAAM;QACL,MAAMsmC,MAAM,GAAG,SAASC,OAAOA,CAAC7gB,QAAQ,EAAE8gB,YAAY,EAAE;UACtD,MAAMC,YAAY,GAAG,IAAI/gB,QAAQ,EAAE;UAEnC,MAAMghB,SAAS,GAAIj3B,QAAQ,IAAK;YAC9B,IAAIU,MAAM,GAAGV,QAAQ;YAErB,IAAI1O,KAAK,CAAC4E,OAAO,CAACwK,MAAM,CAAC,IAAIxG,QAAQ,CAACwG,MAAM,CAAC,EAAE;cAC7CA,MAAM,GAAGlE,SAAS,CAACkE,MAAM,CAAC;YAC5B;YAEA,OAAOA,MAAM;UACf,CAAC;UAED,OAAO,YAAW;YAChB,IAAI,IAAI,CAACs2B,YAAY,CAAC,KAAK3xC,SAAS,EAAE;cACpC,IAAI,CAAC2xC,YAAY,CAAC,GAAGC,SAAS,CAACF,YAAY,CAAC;YAC9C;YAEA,OAAO,IAAI,CAACC,YAAY,CAAC;UAC3B,CAAC;QACH,CAAC;QACD,MAAME,MAAM,GAAG,SAASC,OAAOA,CAAClhB,QAAQ,EAAE;UACxC,MAAM+gB,YAAY,GAAG,IAAI/gB,QAAQ,EAAE;UAEnC,OAAO,UAASjW,QAAQ,EAAE;YACxB,IAAI,CAACg3B,YAAY,CAAC,GAAGh3B,QAAQ;UAC/B,CAAC;QACH,CAAC;QAEDG,MAAM,CAACi3B,cAAc,CAACZ,IAAI,CAAClgC,SAAS,EAAEuX,GAAG,EAAE;UACzCvC,GAAG,EAAEurB,MAAM,CAAChpB,GAAG,EAAEtd,KAAK,CAAC;UACvBhF,GAAG,EAAE2rC,MAAM,CAACrpB,GAAG,CAAC;UAChBwpB,YAAY,EAAE;QAChB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,OAAOb,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASj6B,aAAaA,CAAC+6B,OAAO,EAAEC,OAAO,EAAE;EAC9C,OAAOnB,IAAI,CAACrO,SAAS,CAACuP,OAAO,CAAC,KAAKlB,IAAI,CAACrO,SAAS,CAACwP,OAAO,CAAC;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASr9B,QAAQA,CAACy7B,MAAM,EAAE;EAC/B,OAAOx1B,MAAM,CAAC7J,SAAS,CAAC0tB,QAAQ,CAAC9hB,IAAI,CAACyzB,MAAM,CAAC,KAAK,iBAAiB;AACrE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS6B,YAAYA,CAAC7B,MAAM,EAAE1f,QAAQ,EAAE1lB,KAAK,EAAEijB,OAAO,EAAE;EAC7DA,OAAO,CAACjjB,KAAK,GAAGA,KAAK;EACrBijB,OAAO,CAACikB,QAAQ,GAAGjkB,OAAO,CAACikB,QAAQ,KAAK,KAAK;EAC7CjkB,OAAO,CAACkkB,UAAU,GAAGlkB,OAAO,CAACkkB,UAAU,KAAK,KAAK;EACjDlkB,OAAO,CAAC6jB,YAAY,GAAG7jB,OAAO,CAAC6jB,YAAY,KAAK,KAAK;EAErDl3B,MAAM,CAACi3B,cAAc,CAACzB,MAAM,EAAE1f,QAAQ,EAAEzC,OAAO,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS7J,UAAUA,CAACgsB,MAAM,EAAElJ,QAAQ,EAAE;EAC3C;EACA,KAAK,MAAM5e,GAAG,IAAI8nB,MAAM,EAAE;IACxB,IAAI,CAACA,MAAM,CAACvsB,cAAc,IAAKusB,MAAM,CAACvsB,cAAc,IAAIjJ,MAAM,CAAC7J,SAAS,CAAC8S,cAAc,CAAClH,IAAI,CAACyzB,MAAM,EAAE9nB,GAAG,CAAE,EAAE;MAC1G,IAAI4e,QAAQ,CAACkJ,MAAM,CAAC9nB,GAAG,CAAC,EAAEA,GAAG,EAAE8nB,MAAM,CAAC,KAAK,KAAK,EAAE;QAChD;MACF;IACF;EACF;EAEA,OAAOA,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASgC,WAAWA,CAAChC,MAAM,EAAElN,IAAI,EAAE;EACxC,MAAMmP,KAAK,GAAGnP,IAAI,CAAC9K,KAAK,CAAC,GAAG,CAAC;EAC7B,IAAIjd,MAAM,GAAGi1B,MAAM;EAEnBhsB,UAAU,CAACiuB,KAAK,EAAGC,QAAQ,IAAK;IAC9Bn3B,MAAM,GAAGA,MAAM,CAACm3B,QAAQ,CAAC;IAEzB,IAAIn3B,MAAM,KAAKrb,SAAS,EAAE;MACxBqb,MAAM,GAAGrb,SAAS;MAElB,OAAO,KAAK;IACd;EACF,CAAC,CAAC;EAEF,OAAOqb,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASo3B,WAAWA,CAACnC,MAAM,EAAElN,IAAI,EAAEl4B,KAAK,EAAE;EAC/C,MAAMqnC,KAAK,GAAGnP,IAAI,CAAC9K,KAAK,CAAC,GAAG,CAAC;EAC7B,IAAIoa,aAAa,GAAGpC,MAAM;EAE1BiC,KAAK,CAAC10B,OAAO,CAAC,CAAC80B,QAAQ,EAAExkC,KAAK,KAAK;IACjC,IAAIA,KAAK,KAAKokC,KAAK,CAACxyC,MAAM,GAAG,CAAC,EAAE;MAC9B,IAAI,CAACgkB,cAAc,CAAC2uB,aAAa,EAAEC,QAAQ,CAAC,EAAE;QAC5CD,aAAa,CAACC,QAAQ,CAAC,GAAG,CAAC,CAAC;MAC9B;MAEAD,aAAa,GAAGA,aAAa,CAACC,QAAQ,CAAC;IAEzC,CAAC,MAAM;MACLD,aAAa,CAACC,QAAQ,CAAC,GAAGznC,KAAK;IACjC;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASmX,cAAcA,CAACiuB,MAAM,EAAE;EACrC,IAAI,CAACz7B,QAAQ,CAACy7B,MAAM,CAAC,EAAE;IACrB,OAAO,CAAC;EACV;EAEA,MAAMsC,YAAY,GAAG,SAAAA,CAAS/hB,GAAG,EAAE;IACjC,IAAIxV,MAAM,GAAG,CAAC;IAEd,IAAIxG,QAAQ,CAACgc,GAAG,CAAC,EAAE;MACjBvM,UAAU,CAACuM,GAAG,EAAE,CAAC3lB,KAAK,EAAEsd,GAAG,KAAK;QAC9B,IAAIA,GAAG,KAAK,YAAY,EAAE;UACxB;QACF;QAEAnN,MAAM,IAAIu3B,YAAY,CAAC1nC,KAAK,CAAC;MAC/B,CAAC,CAAC;IACJ,CAAC,MAAM;MACLmQ,MAAM,IAAI,CAAC;IACb;IAEA,OAAOA,MAAM;EACf,CAAC;EAED,OAAOu3B,YAAY,CAACtC,MAAM,CAAC;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS5lC,wBAAwBA,CAACmoC,YAAY,EAA8B;EAAA,IAA5BC,gBAAgB,GAAAhzC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,OAAO;EAC/E,MAAMizC,eAAe,GAAG,IAAID,gBAAgB,EAAE;EAC9C,MAAME,MAAM,GAAG;IACbC,QAAQ,EAAE,KAAK;IACf,CAACF,eAAe,GAAGF,YAAY;IAC/B5nC,SAASA,CAAA,EAAG;MACV,OAAO,IAAI,CAACgoC,QAAQ;IACtB;EACF,CAAC;EAEDn4B,MAAM,CAACi3B,cAAc,CAACiB,MAAM,EAAEF,gBAAgB,EAAE;IAC9C7sB,GAAGA,CAAA,EAAG;MACJ,OAAO,IAAI,CAAC8sB,eAAe,CAAC;IAC9B,CAAC;IACD7sC,GAAGA,CAACgF,KAAK,EAAE;MACT,IAAI,CAAC+nC,QAAQ,GAAG,IAAI;MACpB,IAAI,CAACF,eAAe,CAAC,GAAG7nC,KAAK;IAC/B,CAAC;IACDmnC,UAAU,EAAE,IAAI;IAChBL,YAAY,EAAE;EAChB,CAAC,CAAC;EAEF,OAAOgB,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASjvB,cAAcA,CAACusB,MAAM,EAAE9nB,GAAG,EAAE;EAC1C,OAAO1N,MAAM,CAAC7J,SAAS,CAAC8S,cAAc,CAAClH,IAAI,CAACyzB,MAAM,EAAE9nB,GAAG,CAAC;AAC1D;;;;;;;ACzXa;AACb,QAAQ,mBAAO,CAAC,CAAqB;AACrC,iBAAiB,mBAAO,CAAC,EAA2B;AACpD,YAAY,mBAAO,CAAC,EAA6B;AACjD,WAAW,mBAAO,CAAC,EAA4B;AAC/C,kBAAkB,mBAAO,CAAC,EAAoC;AAC9D,YAAY,mBAAO,CAAC,EAAoB;AACxC,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,eAAe,mBAAO,CAAC,EAAwB;AAC/C,iBAAiB,mBAAO,CAAC,GAA0B;AACnD,0BAA0B,mBAAO,CAAC,GAAyC;AAC3E,oBAAoB,mBAAO,CAAC,EAA2C;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAW,SAAS;AACxC;AACA,yCAAyC;AACzC,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA,MAAM,8FAA8F;AACpG;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;ACxEa;AACb,kBAAkB,mBAAO,CAAC,EAAoC;AAC9D,cAAc,mBAAO,CAAC,EAAuB;AAC7C,iBAAiB,mBAAO,CAAC,EAA0B;AACnD,cAAc,mBAAO,CAAC,EAA0B;AAChD,eAAe,mBAAO,CAAC,EAAwB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0qB,qBAAqBA,CAAC54B,QAAQ,EAAE;EAC9C,OAAOihB,MAAM,CAAC2X,qBAAqB,CAAC54B,QAAQ,CAAC;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS64B,oBAAoBA,CAACzsC,EAAE,EAAE;EACvC60B,MAAM,CAAC4X,oBAAoB,CAACzsC,EAAE,CAAC;AACjC;;AAEA;AACA;AACA;AACO,SAAS0sC,gBAAgBA,CAAA,EAAG;EACjC,OAAQ,cAAc,IAAI7X,MAAM;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASkU,KAAKA,CAAA,EAAG;EACtB,OAAO,OAAOlU,MAAM,KAAK,WAAW;AACtC;AAEA,IAAI8X,kBAAkB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAAC1uC,QAAQ,EAAgB;EAAA,IAAdupB,OAAO,GAAAruB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAC1D,IAAIuzC,kBAAkB,EAAE;IACtB,OAAOA,kBAAkB;EAC3B;EAEA,IAAI,OAAOE,IAAI,KAAK,QAAQ,EAAE;IAC5BF,kBAAkB,GAAG,IAAIE,IAAI,CAACC,QAAQ,CAAC5uC,QAAQ,EAAEupB,OAAO,CAAC,CAACslB,OAAO;EAEnE,CAAC,MAAM,IAAI,OAAOC,MAAM,CAACziC,SAAS,CAAC0iC,aAAa,KAAK,UAAU,EAAE;IAC/DN,kBAAkB,GAAGA,CAACzL,CAAC,EAAEC,CAAC,KAAM,GAAGD,CAAC,EAAE,CAAE+L,aAAa,CAAC9L,CAAC,CAAC;EAE1D,CAAC,MAAM;IACLwL,kBAAkB,GAAGA,CAACzL,CAAC,EAAEC,CAAC,KAAK;MAC7B,IAAID,CAAC,KAAKC,CAAC,EAAE;QACX,OAAO,CAAC;MACV;MAEA,OAAOD,CAAC,GAAGC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IACvB,CAAC;EACH;EAEA,OAAOwL,kBAAkB;AAC3B;;;;;;;;;;;;;ACnEA,IAAAO,QAAA,GAAAv1C,mBAAA;AACA,IAAAw1C,MAAA,GAAAx1C,mBAAA;AACA,IAAAM,SAAA,GAAAN,mBAAA;AACA,IAAAiD,aAAA,GAAA/C,sBAAA,CAAAF,mBAAA;AAA0C,SAAAy1C,4BAAAC,CAAA,EAAAnM,CAAA,IAAAoM,0BAAA,CAAAD,CAAA,EAAAnM,CAAA,GAAAA,CAAA,CAAAtV,GAAA,CAAAyhB,CAAA;AAAA,SAAAC,2BAAAD,CAAA,EAAAE,CAAA,QAAAA,CAAA,CAAA1hB,GAAA,CAAAwhB,CAAA,aAAAG,SAAA;AAAA,SAAAC,kBAAAJ,CAAA,EAAAE,CAAA,EAAAG,CAAA,6BAAAL,CAAA,GAAAA,CAAA,KAAAE,CAAA,GAAAF,CAAA,CAAAxhB,GAAA,CAAA0hB,CAAA,UAAAn0C,SAAA,CAAAC,MAAA,OAAAk0C,CAAA,GAAAG,CAAA,YAAAF,SAAA;AAAA,IAAAG,oBAAA,oBAAAC,OAAA;AAE1C,MAAM37B,aAAa,CAAC;EAkDlB;AACF;AACA;AACA;AACA;EACEuZ,WAAWA,CAAC1Q,WAAW,EAAEtc,SAAS,EAAEqD,UAAS,EAAE;IAiP/C;AACF;AACA;AACA;AACA;IAJEurC,2BAAA,OAAAO,oBAAA;IAvSA;AACF;AACA;AACA;AACA;AACA;IALE,IAAAE,gBAAA,CAAAvzC,OAAA;IAOA;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA;IAOA;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA;IAOA;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA;IAOA;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA,qBAMY,KAAK;IACjB;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA;IAOA;AACF;AACA;AACA;AACA;IAJE,IAAAuzC,gBAAA,CAAAvzC,OAAA;IAaE,IAAI,CAACwzC,GAAG,GAAGhzB,WAAW;IACtB,IAAI,CAACtc,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACqD,SAAS,GAAGA,UAAS;IAC1B,IAAI,CAACtF,YAAY,GAAG,IAAIC,qBAAY,CAACse,WAAW,CAAC;IAEjD,IAAI,CAACgzB,GAAG,CAAC1wB,OAAO,CAAC,sBAAsB,EAAE2Q,KAAK,IAAI0f,iBAAA,CAAAE,oBAAA,MAAI,EAACI,uBAAsB,CAAC,CAAA53B,IAAA,CAA5B,IAAI,EAAyB4X,KAAK,CAAC,CAAC;;IAEtF;IACA,IAAI,CAACxxB,YAAY,CAACg7B,gBAAgB,CAAC,IAAI,CAACuW,GAAG,CAAC5wC,YAAY,CAAC22B,eAAe,EAAE,kBAAkB,EAAG9F,KAAK,IAAK;MACvG,IAAI,CAAC,IAAI,CAACigB,SAAS,IAAI,IAAI,CAACF,GAAG,CAAC52B,WAAW,CAAC,CAAC,EAAE;QAC7C,IAAI,CAAC+2B,UAAU,CAAC,EAAE,EAAElgB,KAAK,CAAC;MAC5B;IACF,CAAC,CAAC;IAEF,IAAI,CAAC+f,GAAG,CAACvrC,IAAI,CAACkQ,GAAG,CAACy7B,MAAM,CAAC,gBAAgB,EAAE,CAACngB,KAAK,EAAE5tB,MAAM,EAAEguC,IAAI,KAAKV,iBAAA,CAAAE,oBAAA,MAAI,EAACS,eAAc,CAAC,CAAAj4B,IAAA,CAApB,IAAI,EAAiB4X,KAAK,EAAE5tB,MAAM,EAAEguC,IAAI,CAAC,CAAC;EAChH;;EAEA;AACF;AACA;AACA;AACA;EACE/rC,eAAeA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACyR,YAAY;EAC1B;;EAEA;AACF;AACA;EACE5O,aAAaA,CAAA,EAAG;IAAA,IAAAopC,qBAAA;IACd,IAAI,IAAI,CAACx6B,YAAY,IAAI,IAAI,CAACA,YAAY,CAACy6B,SAAS,CAAC,CAAC,EAAE;MACtD,IAAI,CAACvpC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAGwpC,SAAS,IAAK;QAC5C,IAAIA,SAAS,EAAE;UACb,IAAI,CAACtpC,aAAa,CAAC,CAAC;QACtB;MACF,CAAC,CAAC;MAEF;IACF;IAEA,MAAMhC,SAAS,IAAAorC,qBAAA,GAAG,IAAI,CAACP,GAAG,CAACziC,oBAAoB,CAAC,CAAC,cAAAgjC,qBAAA,uBAA/BA,qBAAA,CAAiCprC,SAAS;IAE5D,IAAI,CAACA,SAAS,IAAIA,SAAS,CAACurC,QAAQ,CAAC,CAAC,EAAE;MACtC;IACF;IAEA,MAAM;MAAEpuC,GAAG;MAAEE;IAAI,CAAC,GAAG2C,SAAS;IAC9B,MAAMwrC,kBAAkB,GAAG,IAAI,CAACX,GAAG,CAAChuC,QAAQ,CAAC,qBAAqB,EAAEM,GAAG,EAAEE,GAAG,CAAC;IAC7E,IAAIouC,gBAAgB,GAAGtuC,GAAG;IAC1B,IAAIuuC,mBAAmB,GAAGruC,GAAG;IAE7B,IAAIiF,KAAK,CAAC4E,OAAO,CAACskC,kBAAkB,CAAC,EAAE;MACrC,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGF,kBAAkB;IAC9D;;IAEA;IACA,IAAI,CAACt6B,cAAc,GAAG,IAAI,CAAC25B,GAAG,CAACtqC,WAAW,CAACkrC,gBAAgB,EAAEC,mBAAmB,CAAC;IAEjF,IAAI,CAAC,IAAI,CAACC,cAAc,CAAC,CAAC,EAAE;MAC1B,IAAI,CAACC,iBAAiB,CAAC,CAAC;MAExB;IACF;IAEA,MAAMr5B,EAAE,GAAG,IAAI,CAACs4B,GAAG,CAACr4B,OAAO,CAACrV,GAAG,EAAEE,GAAG,EAAE,IAAI,CAAC;;IAE3C;IACA;IACA,IAAIkV,EAAE,EAAE;MACN,MAAMs5B,WAAW,GAAG,IAAI,CAAChB,GAAG,CAACtqB,aAAa,CAAC,IAAI,CAACrP,cAAc,CAAC;MAC/D,MAAMjS,IAAI,GAAG,IAAI,CAAC4rC,GAAG,CAACxpC,SAAS,CAACqqC,mBAAmB,CAAC;MACpD,MAAMI,aAAa,GACjB,IAAI,CAACjB,GAAG,CAAChtB,mBAAmB,CAAC,IAAI,CAACgtB,GAAG,CAACh3B,aAAa,CAAC43B,gBAAgB,CAAC,EAAEC,mBAAmB,CAAC;MAE7F,IAAI,CAAC96B,YAAY,GAAG,IAAAm7B,2BAAiB,EAACF,WAAW,EAAE,IAAI,CAAChB,GAAG,CAAC;MAC5D;MACA;MACA,IAAI,CAACj6B,YAAY,CAACo7B,OAAO,CAAC7uC,GAAG,EAAEE,GAAG,EAAE4B,IAAI,EAAEsT,EAAE,EAAEu5B,aAAa,EAAE,IAAI,CAAC56B,cAAc,CAAC;IACnF;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEhS,cAAcA,CAAA,EAAG;IACf,OAAO,IAAI,CAAC0R,YAAY,IAAI,IAAI,CAACA,YAAY,CAACxR,QAAQ,CAAC,CAAC;EAC1D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE4rC,UAAUA,CAACiB,eAAe,EAAEnhB,KAAK,EAA8B;IAAA,IAA5BohB,kBAAkB,GAAA/1C,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAC3D,IAAI,CAAC,IAAI,CAACw1C,cAAc,CAAC,CAAC,EAAE;MAC1B,IAAI,CAACC,iBAAiB,CAAC,CAAC;MAExB;IACF;IAEA,MAAMhtC,SAAS,GAAG,IAAI,CAACisC,GAAG,CAACziC,oBAAoB,CAAC,CAAC;IACjD,IAAI+jC,YAAY,GAAG,IAAI,CAACtB,GAAG,CAAChuC,QAAQ,CAClC,oBAAoB,EACpB+B,SAAS,CAACoB,SAAS,CAAC7C,GAAG,EACvByB,SAAS,CAACoB,SAAS,CAAC3C,GAAG,EACvB4uC,eAAe,EACfnhB,KAAK,EACLohB,kBACF,CAAC;;IAED;IACA;IACA;IACA,IAAIphB,KAAK,YAAYshB,UAAU,IAAI,OAAOD,YAAY,KAAK,SAAS,EAAE;MACpEA,YAAY,GAAG,IAAI,CAACtB,GAAG,CAACjsC,SAAS,CAACytC,aAAa,CAAC,CAAC,KAAK,CAAC,IAAIztC,SAAS,CAAC0tC,QAAQ,CAAC,CAAC;IACjF;IAEA,IAAIH,YAAY,KAAK,KAAK,EAAE;MAC1B,IAAI,CAACP,iBAAiB,CAAC,CAAC;MAExB;IACF;IAEA,IAAI,CAAC,IAAI,CAACh7B,YAAY,EAAE;MACtB,IAAI,CAACi6B,GAAG,CAAC9kB,mBAAmB,CAAC,CAAC;MAC9B,IAAI,CAAC/jB,aAAa,CAAC,CAAC;IACtB;IAEA,IAAI,IAAI,CAAC4O,YAAY,EAAE;MACrB,IAAIs7B,kBAAkB,EAAE;QACtB,IAAI,CAACt7B,YAAY,CAACs7B,kBAAkB,CAAC,CAAC;MACxC;MAEA,IAAI,CAACt7B,YAAY,CAAC27B,YAAY,CAACN,eAAe,EAAEnhB,KAAK,CAAC;IACxD;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEhpB,WAAWA,CAAC0qC,oBAAoB,EAAEC,aAAa,EAAE97B,QAAQ,EAAE;IACzD,IAAI,IAAI,CAACC,YAAY,EAAE;MACrB,IAAI,CAACA,YAAY,CAAC87B,aAAa,CAACF,oBAAoB,EAAEC,aAAa,EAAE97B,QAAQ,CAAC;IAEhF,CAAC,MAAM,IAAIA,QAAQ,EAAE;MACnBA,QAAQ,CAAC,KAAK,CAAC;IACjB;EACF;;EAEA;AACF;AACA;AACA;AACA;EACEg8B,yBAAyBA,CAACF,aAAa,EAAE;IACvC,IAAI,CAAC3qC,WAAW,CAAC,KAAK,EAAE2qC,aAAa,CAAC;EACxC;;EAEA;AACF;AACA;AACA;AACA;EACEG,kCAAkCA,CAACH,aAAa,EAAE;IAChD,IAAI,CAAC3qC,WAAW,CAAC,IAAI,EAAE2qC,aAAa,CAAC;EACvC;;EAEA;AACF;AACA;AACA;AACA;EACEb,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAACh7B,YAAY,GAAGva,SAAS;EAC/B;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEs1C,cAAcA,CAAA,EAAG;IACf,MAAM/sC,SAAS,GAAG,IAAI,CAACisC,GAAG,CAACziC,oBAAoB,CAAC,CAAC;IAEjD,IAAI,CAACxJ,SAAS,EAAE;MACd,OAAO,KAAK;IACd;IAEA,MAAMitC,WAAW,GAAG,IAAI,CAAChB,GAAG,CAACtqB,aAAa,CAAC,IAAI,CAACrP,cAAc,CAAC;IAC/D,MAAM;MAAE/T,GAAG;MAAEE;IAAI,CAAC,GAAGuB,SAAS,CAACoB,SAAS;IACxC,MAAM;MACJtD,cAAc;MACdF;IACF,CAAC,GAAG,IAAI,CAACquC,GAAG;IACZ,MAAMgC,YAAY,GAAGnwC,cAAc,CAACqf,QAAQ,CAAC,IAAI,CAAC8uB,GAAG,CAACh3B,aAAa,CAAC1W,GAAG,CAAC,CAAC,IACvEX,iBAAiB,CAACuf,QAAQ,CAAC,IAAI,CAAC8uB,GAAG,CAACjiC,gBAAgB,CAACvL,GAAG,CAAC,CAAC;IAE5D,IAAI,IAAI,CAAC6T,cAAc,CAACjE,QAAQ,IAAI,CAAC4+B,WAAW,IAAIgB,YAAY,EAAE;MAChE,OAAO,KAAK;IACd;IAEA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEC,uBAAuBA,CAAChiB,KAAK,EAAE;IAC7B,MAAMiiB,UAAU,GAAG;MAAE,IAAG,OAAO,IAAI,CAACxxC,SAAS,CAACwxC,UAAU,KAAK,UAAU,GACrE,IAAI,CAACxxC,SAAS,CAACwxC,UAAU,CAACjiB,KAAK,CAAC,GAAG,IAAI,CAACvvB,SAAS,CAACwxC,UAAU;IAAC,CAAC;IAEhE,IAAIjiB,KAAK,CAACkiB,QAAQ,EAAE;MAClBD,UAAU,CAAC5vC,GAAG,GAAG,CAAC4vC,UAAU,CAAC5vC,GAAG;MAChC4vC,UAAU,CAAC1vC,GAAG,GAAG,CAAC0vC,UAAU,CAAC1vC,GAAG;IAClC;IAEA,IAAI,IAAI,CAACwtC,GAAG,CAACjsC,SAAS,CAACsD,UAAU,CAAC,CAAC,EAAE;MACnC,IAAI,CAACtD,SAAS,CAACquC,cAAc,CAACF,UAAU,CAAC5vC,GAAG,EAAE4vC,UAAU,CAAC1vC,GAAG,CAAC;IAC/D,CAAC,MAAM;MACL,IAAI,CAACuB,SAAS,CAACsuC,cAAc,CAACH,UAAU,CAAC5vC,GAAG,EAAE4vC,UAAU,CAAC1vC,GAAG,EAAE,IAAI,CAAC;IACrE;EACF;EAuCA;AACF;AACA;EACE+oB,OAAOA,CAAA,EAAG;IACR,IAAI,CAAC2kB,SAAS,GAAG,IAAI;IACrB,IAAI,CAACzxC,YAAY,CAAC8sB,OAAO,CAAC,CAAC;EAC7B;AACF;AAAC,SAAA0kB,wBAvCyBhgB,KAAK,EAAE;EAC7B,MAAMlsB,SAAS,GAAG,IAAI,CAACisC,GAAG,CAACziC,oBAAoB,CAAC,CAAC;EAEjD,IAAI,CAAC,IAAI,CAACyiC,GAAG,CAAC52B,WAAW,CAAC,CAAC,IAAI,CAACrV,SAAS,IAAIA,SAAS,CAACoB,SAAS,CAACurC,QAAQ,CAAC,CAAC,IACvE,IAAA4B,oCAA6B,EAACriB,KAAK,CAAC,EAAE;IACxC;EACF;EAEA,MAAM;IAAEsiB;EAAQ,CAAC,GAAGtiB,KAAK;;EAEzB;EACA,MAAM2hB,aAAa,GAAG,CAAC3hB,KAAK,CAACG,OAAO,IAAIH,KAAK,CAACI,OAAO,KAAK,CAACJ,KAAK,CAACuiB,MAAM;EAEvE,IAAI,CAAC,IAAI,CAACz8B,YAAY,IAAK,IAAI,CAACA,YAAY,IAAI,CAAC,IAAI,CAACA,YAAY,CAACy6B,SAAS,CAAC,CAAE,EAAE;IAC/E,IAAI,CAAC,IAAAiC,sBAAa,EAACF,OAAO,CAAC,IAAI,CAAC,IAAAG,sBAAa,EAACH,OAAO,CAAC,IAAI,CAACX,aAAa,IAAI,CAAC,IAAI,CAACvtC,cAAc,CAAC,CAAC,EAAE;MAClG,IAAI,CAAC8rC,UAAU,CAAC,EAAE,EAAElgB,KAAK,CAAC;IAC5B;EACF;AACF;AAEA;AACF;AACA;AACA;AACA;AACA;AALE,SAAAqgB,gBAMgBrgB,KAAK,EAAE5tB,MAAM,EAAE;EAC7B,IAAIA,MAAM,CAACswC,MAAM,CAAC,CAAC,EAAE;IACnB,IAAI,CAACxC,UAAU,CAAC,IAAI,EAAElgB,KAAK,EAAE,IAAI,CAAC;EACpC;AACF;AAWF,MAAM2iB,SAAS,GAAG,IAAIC,OAAO,CAAC,CAAC;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA1+B,aAAa,CAACC,WAAW,GAAG,UAAS4I,WAAW,EAAEtc,SAAS,EAAEqD,SAAS,EAAE;EACtE,IAAIjF,aAAa,GAAG8zC,SAAS,CAACnxB,GAAG,CAACzE,WAAW,CAAC;EAE9C,IAAI,CAACle,aAAa,EAAE;IAClBA,aAAa,GAAG,IAAIqV,aAAa,CAAC6I,WAAW,EAAEtc,SAAS,EAAEqD,SAAS,CAAC;IACpE6uC,SAAS,CAAClxC,GAAG,CAACsb,WAAW,EAAEle,aAAa,CAAC;EAC3C;EAEA,OAAOA,aAAa;AACtB,CAAC;AAAC,IAAAvC,QAAA,GAAA/B,kBAAA,GAEa2Z,aAAa;;;;;;AC9W5B,oBAAoB,mBAAO,CAAC,GAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,kCAAkC,yBAAyB,SAAS,yBAAyB;;;;;;ACT7F,cAAc,qCAAiC;AAC/C,kBAAkB,mBAAO,CAAC,GAAkB;AAC5C;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB,SAAS,yBAAyB;;;;;;ACN3F;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA,GAAG,EAAE,yBAAyB,SAAS,yBAAyB;AAChE;AACA,0BAA0B,yBAAyB,SAAS,yBAAyB;;;;;;ACTrF,cAAc,qCAAiC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,yBAAyB,SAAS,yBAAyB;;;;;;;;;;;;;;;;ACXzF,IAAAlX,MAAA,GAAApD,mBAAA;AACA,IAAA+C,QAAA,GAAA/C,mBAAA;AAEO,MAAMi5C,SAAS,GAAAt4C,iBAAA,GAAG;EACvBu4C,GAAG,EAAE,EAAE;EACPC,UAAU,EAAE,EAAE;EACdC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EACfC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,IAAAhI,kBAAS,EAAC,CAAC,GAAG,GAAG,GAAG,GAAG;EACnCiI,UAAU,EAAE,IAAAjI,kBAAS,EAAC,CAAC,GAAG,GAAG,GAAG,GAAG;EACnCkI,QAAQ,EAAE,IAAAlI,kBAAS,EAAC,CAAC,GAAG,GAAG,GAAG,GAAG;EACjCmI,SAAS,EAAE,CAAC;EACZC,SAAS,EAAE,EAAE;EACbC,KAAK,EAAE,GAAG;EACVC,YAAY,EAAE,EAAE;EAChBC,aAAa,EAAE,EAAE;EACjBC,eAAe,EAAE,GAAG;EACpBC,OAAO,EAAE,EAAE;EACXC,MAAM,EAAE,EAAE;EACVC,GAAG,EAAE,EAAE;EACPC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,EAAE;EACVC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,EAAE,EAAE,GAAG;EACPC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,GAAG,EAAE,GAAG;EACRC,IAAI,EAAE,EAAE;EACRC,MAAM,EAAE,EAAE;EACVC,UAAU,EAAE,GAAG;EACfC,gBAAgB,EAAE,GAAG;EACrBC,UAAU,EAAE,GAAG;EACfC,UAAU,EAAE,GAAG;EACfC,IAAI,EAAE,CAAC;EACPC,QAAQ,EAAE,GAAG;EACbC,SAAS,EAAE,EAAE;EACbC,OAAO,EAAE,EAAE;EACXC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,GAAG;EACXC,WAAW,EAAE,GAAG;EAChBC,KAAK,EAAE,EAAE;EACTC,KAAK,EAAE,EAAE;EACTC,GAAG,EAAE,CAAC;EACNC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE,EAAE;EACLC,CAAC,EAAE;AACL,CAAC;AAED,MAAMC,aAAa,GAAG,CACpBnE,SAAS,CAACC,GAAG,EACbD,SAAS,CAACE,UAAU,EACpBF,SAAS,CAACG,UAAU,EACpBH,SAAS,CAACI,WAAW,EACrBJ,SAAS,CAACK,QAAQ,EAClBL,SAAS,CAACM,UAAU,EACpBN,SAAS,CAACO,UAAU,EACpBP,SAAS,CAACQ,QAAQ,EAClBR,SAAS,CAACS,SAAS,EACnBT,SAAS,CAACU,SAAS,EACnBV,SAAS,CAACgB,MAAM,EAChBhB,SAAS,CAACiB,GAAG,EACbjB,SAAS,CAACkB,KAAK,EACflB,SAAS,CAACmB,MAAM,EAChBnB,SAAS,CAACoB,EAAE,EACZpB,SAAS,CAACqB,EAAE,EACZrB,SAAS,CAACsB,EAAE,EACZtB,SAAS,CAACuB,EAAE,EACZvB,SAAS,CAACwB,EAAE,EACZxB,SAAS,CAACyB,EAAE,EACZzB,SAAS,CAAC0B,EAAE,EACZ1B,SAAS,CAAC2B,EAAE,EACZ3B,SAAS,CAAC4B,EAAE,EACZ5B,SAAS,CAAC6B,GAAG,EACb7B,SAAS,CAAC8B,GAAG,EACb9B,SAAS,CAAC+B,GAAG,EACb/B,SAAS,CAACgC,GAAG,EACbhC,SAAS,CAACiC,GAAG,EACbjC,SAAS,CAACkC,GAAG,EACblC,SAAS,CAACmC,GAAG,EACbnC,SAAS,CAACoC,GAAG,EACbpC,SAAS,CAACqC,GAAG,EACbrC,SAAS,CAACsC,GAAG,EACbtC,SAAS,CAACuC,IAAI,EACdvC,SAAS,CAACwC,MAAM,EAChBxC,SAAS,CAACyC,UAAU,EACpBzC,SAAS,CAAC0C,gBAAgB,EAC1B1C,SAAS,CAAC2C,UAAU,EACpB3C,SAAS,CAAC4C,UAAU,EACpB5C,SAAS,CAAC6C,IAAI,EACd7C,SAAS,CAAC8C,QAAQ,EAClB9C,SAAS,CAAC+C,SAAS,EACnB/C,SAAS,CAACgD,OAAO,EACjBhD,SAAS,CAACiD,KAAK,EACfjD,SAAS,CAACmD,WAAW,EACrBnD,SAAS,CAACoD,KAAK,EACfpD,SAAS,CAACsD,GAAG,CACd;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,SAASc,eAAeA,CAAC3E,OAAO,EAAE;EACvC,OAASA,OAAO,KAAK,EAAE;EAAK;EACvBA,OAAO,IAAI,EAAE,IAAIA,OAAO,IAAI,EAAG;EAAI;EACnCA,OAAO,IAAI,EAAE,IAAIA,OAAO,IAAI,GAAI;EAAI;EACpCA,OAAO,IAAI,GAAG,IAAIA,OAAO,IAAI,GAAI;EAAI;EACrCA,OAAO,IAAI,GAAG,IAAIA,OAAO,IAAI,GAAI;EAAI;EACtCA,OAAO,IAAI,GAAG;EAAI;EACjBA,OAAO,IAAI,EAAE,IAAIA,OAAO,IAAI,EAAG,CAAE,CAAC;AACzC;;AAEA;AACA;AACA;AACA;AACO,SAASE,aAAaA,CAACF,OAAO,EAAE;EACrC,OAAO0E,aAAa,CAACp3C,QAAQ,CAAC0yC,OAAO,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS4E,SAASA,CAAC5E,OAAO,EAAE;EACjC,MAAM6E,IAAI,GAAG,EAAE;EAEf,IAAI,IAAAxL,gBAAO,EAAC,CAAC,EAAE;IACbwL,IAAI,CAACjsC,IAAI,CAAC2nC,SAAS,CAACY,YAAY,EAAEZ,SAAS,CAACa,aAAa,EAAEb,SAAS,CAACc,eAAe,CAAC;EACvF,CAAC,MAAM;IACLwD,IAAI,CAACjsC,IAAI,CAAC2nC,SAAS,CAACe,OAAO,CAAC;EAC9B;EAEA,OAAOuD,IAAI,CAACv3C,QAAQ,CAAC0yC,OAAO,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,aAAaA,CAACH,OAAO,EAAE;EACrC,OAAO,CACLO,SAAS,CAACe,OAAO,EACjBf,SAAS,CAACY,YAAY,EACtBZ,SAAS,CAACa,aAAa,EACvBb,SAAS,CAACc,eAAe,CAC1B,CAAC/zC,QAAQ,CAAC0yC,OAAO,CAAC;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAAS8E,KAAKA,CAAC9E,OAAO,EAAE+E,QAAQ,EAAE;EACvC,MAAMF,IAAI,GAAGE,QAAQ,CAACxjB,KAAK,CAAC,GAAG,CAAC;EAChC,IAAIjd,MAAM,GAAG,KAAK;EAElB,IAAA9J,gBAAS,EAACqqC,IAAI,EAAGpzB,GAAG,IAAK;IACvB,IAAIuuB,OAAO,KAAKO,SAAS,CAAC9uB,GAAG,CAAC,EAAE;MAC9BnN,MAAM,GAAG,IAAI;MAEb,OAAO,KAAK;IACd;EACF,CAAC,CAAC;EAEF,OAAOA,MAAM;AACf;;;;;;;;;;;;;;;;ACvMA;AACA;AACA;AACA;AACA;AACO,SAAS0gC,wBAAwBA,CAACtnB,KAAK,EAAE;EAC9CA,KAAK,CAACunB,6BAA6B,GAAG,KAAK;EAC3CvnB,KAAK,CAACwnB,YAAY,GAAG,IAAI;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASnF,6BAA6BA,CAACriB,KAAK,EAAE;EACnD,OAAOA,KAAK,CAACunB,6BAA6B,KAAK,KAAK;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,YAAYA,CAACznB,KAAK,EAAE;EAClC,OAAOA,KAAK,CAAC0nB,MAAM,KAAK,CAAC;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,WAAWA,CAAC3nB,KAAK,EAAE;EACjC,OAAOA,KAAK,CAAC0nB,MAAM,KAAK,CAAC;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,YAAYA,CAAC5nB,KAAK,EAAE;EAClC,OAAOA,KAAK,YAAY6nB,UAAU;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAAC9nB,KAAK,EAAE+nB,YAAY,EAAE;EACpD,MAAMlrC,MAAM,GAAG;IACbqmB,CAAC,EAAElD,KAAK,CAACgoB,OAAO;IAChBC,CAAC,EAAEjoB,KAAK,CAACkoB;EACX,CAAC;EACD,IAAI7kC,OAAO,GAAG2c,KAAK,CAACkc,MAAM;EAE1B,IAAI,EAAE6L,YAAY,YAAYI,WAAW,CAAC,IACtC9kC,OAAO,KAAK0kC,YAAY,IAAI1kC,OAAO,CAAC+e,QAAQ,CAAC2lB,YAAY,CAAC,EAAE;IAC9D,OAAOlrC,MAAM;EACf;EAEA,OAAOwG,OAAO,KAAK0kC,YAAY,EAAE;IAC/BlrC,MAAM,CAACqmB,CAAC,IAAI7f,OAAO,CAAC6iB,UAAU;IAC9BrpB,MAAM,CAACorC,CAAC,IAAI5kC,OAAO,CAAC8iB,SAAS;IAE7B9iB,OAAO,GAAGA,OAAO,CAACmB,YAAY;EAChC;EAEA,OAAO3H,MAAM;AACf;;;;;;;;;;;;;;;;AC1EA,IAAA5S,YAAA,GAAAH,sBAAA,CAAAF,mBAAA;AACA,IAAAw+C,eAAA,GAAAt+C,sBAAA,CAAAF,mBAAA;AAJA;AACA;AACA;;AAIA,MAAMy+C,uBAAuB,GAAG,IAAIzF,OAAO,CAAC,CAAC;AAE7C,MAAM;EACJ0F,QAAQ;EACR/qB,OAAO;EACPgrB,OAAO;EACPC,QAAQ;EACRC;AACF,CAAC,GAAG,IAAAC,uBAAc,EAAC,SAAS,CAAC;;AAE7B;AACA;AACA;AAFAn+C,4BAAA,GAAAk+C,SAAA;AAAAl+C,gCAAA,GAAAi+C,QAAA;AAAAj+C,iBAAA,GAAAg+C,OAAA;AAGO,SAASO,gBAAgBA,CAAC/H,WAAW,EAAE;EAC5C,MAAM4B,SAAS,GAAG,CAAC,CAAC;EACpB,MAAMoG,KAAK,GAAGhI,WAAW;EAEzB,IAAI,CAACiI,cAAc,GAAG,YAAW;IAC/B,OAAOjI,WAAW;EACpB,CAAC;EAED,IAAI,CAAC58B,WAAW,GAAG,UAAS4I,WAAW,EAAE;IACvC,IAAI,EAAEA,WAAW,CAACxb,IAAI,IAAIoxC,SAAS,CAAC,EAAE;MACpCA,SAAS,CAAC51B,WAAW,CAACxb,IAAI,CAAC,GAAG,IAAIw3C,KAAK,CAACh8B,WAAW,CAAC;IACtD;IAEA,OAAO41B,SAAS,CAAC51B,WAAW,CAACxb,IAAI,CAAC;EACpC,CAAC;EAED5F,oBAAK,CAACC,YAAY,CAAC,CAAC,CAACiyB,GAAG,CAAC,cAAc,EAAE,YAAW;IAClD8kB,SAAS,CAAC,IAAI,CAACpxC,IAAI,CAAC,GAAG,IAAI;EAC7B,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS03C,kBAAkBA,CAACta,IAAI,EAAE5hB,WAAW,EAAE;EACpD,IAAI4I,MAAM;EAEV,IAAI,OAAOgZ,IAAI,KAAK,UAAU,EAAE;IAC9B,IAAI,CAAE0Z,uBAAuB,CAAC72B,GAAG,CAACmd,IAAI,CAAE,EAAE;MACxCua,SAAS,CAAC,IAAI,EAAEva,IAAI,CAAC;IACvB;IACAhZ,MAAM,GAAG0yB,uBAAuB,CAAC72B,GAAG,CAACmd,IAAI,CAAC;EAE5C,CAAC,MAAM,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IACnChZ,MAAM,GAAG4H,OAAO,CAACoR,IAAI,CAAC;EAExB,CAAC,MAAM;IACL,MAAM1wB,KAAK,CAAC,gEAAgE,CAAC;EAC/E;EAEA,IAAI,CAAC0X,MAAM,EAAE;IACX,MAAM1X,KAAK,CAAC,oCAAoC0wB,IAAI,GAAG,CAAC;EAC1D;EAEA,OAAOhZ,MAAM,CAACxR,WAAW,CAAC4I,WAAW,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASo8B,QAAQA,CAACxa,IAAI,EAAE;EACtB,IAAI,OAAOA,IAAI,KAAK,UAAU,EAAE;IAC9B,OAAOA,IAAI;EACb;EACA,IAAI,CAAC4Z,OAAO,CAAC5Z,IAAI,CAAC,EAAE;IAClB,MAAM1wB,KAAK,CAAC,qCAAqC0wB,IAAI,QAAQ,CAAC;EAChE;EAEA,OAAOpR,OAAO,CAACoR,IAAI,CAAC,CAACqa,cAAc,CAAC,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,SAASA,CAACva,IAAI,EAAEoS,WAAW,EAAE;EACpC,IAAIpS,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IACpCoS,WAAW,GAAGpS,IAAI;IAClBA,IAAI,GAAGoS,WAAW,CAACqI,WAAW;EAChC;EAEA,MAAMC,aAAa,GAAG,IAAIP,gBAAgB,CAAC/H,WAAW,CAAC;EAEvD,IAAI,OAAOpS,IAAI,KAAK,QAAQ,EAAE;IAC5B2Z,QAAQ,CAAC3Z,IAAI,EAAE0a,aAAa,CAAC;EAC/B;EACAhB,uBAAuB,CAAC52C,GAAG,CAACsvC,WAAW,EAAEsI,aAAa,CAAC;AACzD;;;;;;;;;;;;;;ACzGA,IAAAr8C,MAAA,GAAApD,mBAAA;AACA,IAAAkD,OAAA,GAAAlD,mBAAA;AACA,IAAAwD,OAAA,GAAAxD,mBAAA;AACA,IAAA0/C,QAAA,GAAA1/C,mBAAA;AACA,IAAAqlC,mBAAA,GAAArlC,mBAAA;AACA,IAAA6C,SAAA,GAAA7C,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM2/C,gBAAgB,GAAG,CACvB;AACA;AACF;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACE,gCAAgC;AAEhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iCAAiC;AAEjC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gCAAgC;AAEhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kCAAkC;AAElC;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,0BAA0B;AAE1B;AACF;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACE,MAAM;AAEN;AACF;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,+BAA+B;AAE/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,8BAA8B;AAE9B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gCAAgC;AAEhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,UAAU;AAEV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACE,+BAA+B;AAE/B;AACF;AACA;AACA;AACA;AACA;AACE,4BAA4B;AAE5B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,6BAA6B;AAE7B;AACF;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACE,0BAA0B;AAE1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,YAAY;AAEZ;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,WAAW;AAEX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,2BAA2B;AAE3B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACE,oCAAoC;AAEpC;AACF;AACA;AACA;AACA;AACA;AACE,uCAAuC;AAEvC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,cAAc;AAEd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,uBAAuB;AAEvB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,gBAAgB;AAEhB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,kBAAkB;AAElB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,iBAAiB;AAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACE,aAAa;AAEb;AACF;AACA;AACA;AACA;AACA;AACE,eAAe;AAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,wBAAwB;AAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,yBAAyB;AAEzB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sBAAsB;AAEtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,qBAAqB;AAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,oBAAoB;AAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,mBAAmB;AAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE,0BAA0B,CAC3B;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG,IAAAtZ,gCAAY;AACpC;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMuZ,aAAa,GAAG,IAAIt7C,GAAG,CAAC,CAC5B,CAAC,WAAW,EAAE,OAAO,CAAC,EACtB,CAAC,WAAW,EAAE,OAAO,CAAC,EACtB,CAAC,aAAa,EAAE,OAAO,CAAC,EACxB,CAAC,aAAa,EAAE,OAAO,CAAC,EACxB,CAAC,iBAAiB,EAAE,OAAO,CAAC,EAC5B,CAAC,cAAc,EAAE,OAAO,CAAC,EACzB,CAAC,WAAW,EAAE,OAAO,CAAC,CACvB,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMu7C,gBAAgB,GAAG,IAAIv7C,GAAG,CAAC,CAC/B,EAAE,CACH,CAAC;AAEF,MAAMw7C,aAAa,GAAG,IAAI/G,OAAO,CAAC,CAAC;AAEnC,MAAMj3C,KAAK,CAAC;EACV,OAAOC,YAAYA,CAAA,EAAG;IA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AC65C,UAAU,CAACtoD,UAAU,CAAC,YAAY,CAAC;IAC3D,MAAMs4D,eAAe,GAAG7pD,UAAU,CAAC/qB,MAAM;IAEzC,OAAO8H,IAAI,CAACw+B,GAAG,CAAC58B,MAAM,CAAC,IAAIkrE,eAAe;EAC5C;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE0E,mBAAmBA,CAACvyE,GAAG,EAAE;IACvB,IAAIA,GAAG,IAAI,CAAC,EAAE;MACZ,OAAO,KAAK;IACd;IAEA,MAAMiqD,aAAa,GAAG,IAAI,CAAC4T,UAAU,CAACtoD,UAAU,CAAC,eAAe,CAAC;IACjE,MAAMu4D,kBAAkB,GAAG7jB,aAAa,CAAChxD,MAAM;IAE/C,OAAO8H,IAAI,CAACw+B,GAAG,CAACv/B,GAAG,CAAC,IAAI8tE,kBAAkB;EAC5C;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE;EACAyC,uBAAuBA,CAACvwE,GAAG,EAAE;IAC3B,MAAMuhC,KAAK,GAAG,IAAI,CAAC2wB,mBAAmB,CAAC,CAAC;;IAExC;IACA;IACA,IAAIlyD,GAAG,GAAG,CAAC,IAAIuhC,KAAK,IAAI,CAAC,EAAE;MACzB,OAAO,CAAC,IAAI,CAACgxC,mBAAmB,CAACvyE,GAAG,CAAC;IACvC;IAEA,OAAOA,GAAG,GAAGuhC,KAAK;EACpB;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE;EACAivC,sBAAsBA,CAACxwE,GAAG,EAAE;IAC1B,OAAOA,GAAG,GAAG,IAAI,CAACmyD,kBAAkB,CAAC,CAAC;EACxC;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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CA;AACA;AACA;AACA;AACA,MAAMw2F,eAAe,SAAS7hB,cAAK,CAAC;EAClC;AACF;AACA;AACA;AACA;AACA;EACE9gD,WAAWA,CAAC+gD,gBAAgB,EAAE/M,YAAY,EAAExB,WAAW,EAAEC,UAAU,EAAE;IACnE,KAAK,CAACsO,gBAAgB,EAAE/M,YAAY,EAAExB,WAAW,EAAEC,UAAU,EAAE6T,kBAAS,CAAC;EAC3E;AACF;AAEA,IAAAtnC,aAAK,EAAC2jD,eAAe,EAAEF,sBAAa,CAAC;AACrC,IAAAzjD,aAAK,EAAC2jD,eAAe,EAAEjM,0BAAiB,CAAC;AAAC,IAAA7nF,QAAA,GAAA/B,kBAAA,GAE3B61F,eAAe;;;;;;;;;;;;;AC3B9B,IAAA5zF,QAAA,GAAA5C,mBAAA;AACA,IAAAkD,OAAA,GAAAlD,mBAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACe,MAAM4nE,QAAQ,CAAC;EAmB5B;AACF;AACA;EACE/zC,WAAWA,CAACjP,QAAQ,EAAE;IApBtB;AACF;AACA;AACA;AACA;AACA;IALE,IAAAsxB,gBAAA,CAAAvzC,OAAA,oBAMW,CAAC,CAAC;IAEb;AACF;AACA;AACA;AACA;AACA;AACA;IANE,IAAAuzC,gBAAA,CAAAvzC,OAAA,oBAOW8Z,MAAM,CAAC0nC,MAAM,CAAC,IAAI,CAAC0yC,WAAW,CAAC,CAAC,CAAC;IAM1C,IAAA5wE,kBAAU,EAAC,IAAI,CAAC6wE,QAAQ,EAAE,CAACjqF,KAAK,EAAEsd,G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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxFA,IAAA0C,QAAA,GAyFeA,CAAA,KAAM;EACnB,OAAO;IAEL;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImhH,+BAA+B,EAAEliH,SAAS;IAE1C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkuG,qBAAqB,EAAE,sBAAsB;IAE7C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIoV,UAAU,EAAE,IAAI;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,SAAS,EAAE,KAAK;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI7sG,iBAAiB,EAAE,IAAI;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIJ,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgF,YAAY,EAAE,IAAI;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkoG,iBAAiB,EAAE,IAAI;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI51D,QAAQ,EAAE,IAAI;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI61D,cAAc,EAAE1jH,SAAS;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2jH,WAAW,EAAE3jH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6uG,WAAW,EAAE,KAAK;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACID,WAAW,EAAE,KAAK;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgV,mBAAmB,EAAE5jH,SAAS;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkkB,IAAI,EAAE,EAAE;IAER;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,KAAK,EAAEnkB,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6jH,eAAe,EAAE7jH,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4X,SAAS,EAAE5X,SAAS;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8Q,UAAU,EAAE,IAAI;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgzG,kBAAkB,EAAE9jH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI22D,kBAAkB,EAAE32D,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIwT,OAAO,EAAExT,SAAS;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI+jH,aAAa,EAAE/jH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgkH,aAAa,EAAEhkH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2rB,SAAS,EAAE3rB,SAAS;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIikH,sBAAsB,EAAE,eAAe;IAEvC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,QAAQ,EAAE,KAAK;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,WAAW,EAAEnkH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0+G,QAAQ,EAAE,IAAI;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0F,SAAS,EAAE,IAAI;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAE,KAAK;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhW,mBAAmB,EAAEruG,SAAS;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIiuG,sBAAsB,EAAE,eAAe;IAEvC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI7Y,mBAAmB,EAAEp1F,SAAS;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIskH,aAAa,EAAE,KAAK;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhsG,IAAI,EAAEtY,SAAS;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI05F,eAAe,EAAE,IAAI;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIx3E,UAAU,EAAEliB,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIukH,UAAU,EAAE,YAAY;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAE,WAAW;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,gBAAgB,EAAEzkH,SAAS;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0kH,WAAW,EAAE1kH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIiK,sBAAsB,EAAE,KAAK;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI06G,YAAY,EAAE,IAAI;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE5kH,SAAS;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIoqB,MAAM,EAAEpqB,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6kH,kBAAkB,EAAE,IAAI;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACInuE,UAAU,EAAE;MAAE1vC,GAAG,EAAE,CAAC;MAAEF,GAAG,EAAE;IAAE,CAAC;IAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIusG,UAAU,EAAE;MACVyR,aAAa,EAAE;IACjB,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI3nG,MAAM,EAAE,IAAI;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4nG,sBAAsB,EAAE,KAAK;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,OAAO,EAAEhlH,SAAS;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIilH,gBAAgB,EAAE,CAAC;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIxyG,iBAAiB,EAAE,CAAC;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN,eAAe,EAAE,CAAC;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACID,YAAY,EAAE,CAAC;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgzG,QAAQ,EAAEllH,SAAS;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIguD,iBAAiB,EAAE,KAAK;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6J,eAAe,EAAE73D,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2gB,MAAM,EAAE3gB,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImlH,aAAa,EAAEnlH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIolH,UAAU,EAAEplH,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIqlH,oBAAoB,EAAE,WAAW;IAEjC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIniE,WAAW,EAAE,KAAK;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI91B,UAAUA,CAACpmB,GAAG,EAAE;MACd,IAAIF,GAAG;MACP,IAAIw+G,MAAM;MACV,IAAIp6G,KAAK;MAET,KAAKpE,GAAG,GAAG,CAAC,EAAEw+G,MAAM,GAAG,IAAI,CAAC58G,SAAS,CAAC,CAAC,EAAE5B,GAAG,GAAGw+G,MAAM,EAAEx+G,GAAG,EAAE,EAAE;QAC5DoE,KAAK,GAAG,IAAI,CAAC4L,aAAa,CAAChQ,GAAG,EAAEE,GAAG,CAAC;QAEpC,IAAI,IAAA0K,cAAO,EAACxG,KAAK,CAAC,KAAK,KAAK,EAAE;UAC5B,OAAO,KAAK;QACd;MACF;MAEA,OAAO,IAAI;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgiB,UAAUA,CAACpmB,GAAG,EAAE;MACd,IAAIE,GAAG;MACP,IAAIu+G,MAAM;MACV,IAAIr6G,KAAK;MACT,IAAIw2G,IAAI;MAER,KAAK16G,GAAG,GAAG,CAAC,EAAEu+G,MAAM,GAAG,IAAI,CAAC98G,SAAS,CAAC,CAAC,EAAEzB,GAAG,GAAGu+G,MAAM,EAAEv+G,GAAG,EAAE,EAAE;QAC5DkE,KAAK,GAAG,IAAI,CAAC4L,aAAa,CAAChQ,GAAG,EAAEE,GAAG,CAAC;QAEpC,IAAI,IAAA0K,cAAO,EAACxG,KAAK,CAAC,KAAK,KAAK,EAAE;UAC5B,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;YAC7Bw2G,IAAI,GAAG,IAAI,CAACx3G,WAAW,CAACpD,GAAG,EAAEE,GAAG,CAAC;YAEjC,OAAO,IAAAkQ,qBAAa,EAAC,IAAI,CAACkL,SAAS,CAAC,CAAC,CAACs/F,IAAI,CAAC94G,IAAI,CAAC,EAAEsC,KAAK,CAAC;UAC1D;UAEA,OAAO,KAAK;QACd;MACF;MAEA,OAAO,IAAI;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIk9C,KAAK,EAAEpoD,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4E,QAAQ,EAAE,OAAO;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIT,eAAe,EAAE,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4B,UAAU,EAAE/F,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIwlH,MAAM,EAAE,OAAO;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,kBAAkB,EAAEzlH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0lH,gBAAgB,EAAE1lH,SAAS;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2lH,kBAAkB,EAAE3lH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4lH,aAAa,EAAE5lH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6lH,eAAe,EAAE7lH,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4T,OAAO,EAAEmuE,QAAQ;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIjyE,OAAO,EAAEiyE,QAAQ;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIp5B,UAAU,EAAE,KAAK;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI71C,OAAO,EAAE,CAAC;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,OAAO,EAAE,CAAC;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,YAAY,EAAE,CAAC;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,YAAY,EAAE,CAAC;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIizG,kBAAkB,EAAE9lH,SAAS;IAE7B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI4vG,gBAAgB,EAAE,KAAK;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACImW,aAAa,EAAE,IAAI;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIj+D,aAAa,EAAE9nD,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgmH,UAAU,EAAEhmH,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIimH,mBAAmB,EAAE,UAAU;IAE/B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,aAAa,EAAElmH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIg3D,oBAAoB,EAAE,IAAI;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIrI,qBAAqB,EAAE,IAAI;IAE3B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIw3D,eAAe,EAAEnmH,SAAS;IAE1B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIomH,WAAW,EAAEpmH,SAAS;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIqmH,wBAAwB,EAAE,eAAe;IAEzC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI31D,eAAe,EAAE,KAAK;IAEtB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAE,KAAK;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI/5C,QAAQ,EAAE,KAAK;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0vG,qBAAqB,EAAE,UAAU;IAEjC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIr1D,aAAa,EAAE,KAAK;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,gBAAgB,EAAE,KAAK;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIlnC,QAAQ,EAAEhqB,SAAS;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8qB,UAAU,EAAE9qB,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI21D,cAAc,EAAE31D,SAAS;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI+rB,UAAU,EAAE/rB,SAAS;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIumH,MAAM,EAAE,KAAK;IAEb;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIjX,aAAa,EAAE,UAAU;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkX,aAAa,EAAExmH,SAAS;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI2W,iBAAiB,EAAE,KAAK;IAExB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,cAAc,EAAE,KAAK;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgwG,eAAe,EAAE,IAAI;IAErB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIlgH,MAAM,EAAEvG,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI0mH,SAAS,EAAE,CAAC;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,SAAS,EAAE,CAAC;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI/1D,QAAQ,EAAE,MAAM;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIg2D,MAAM,EAAE5mH,SAAS;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIyjB,cAAc,EAAEzjB,SAAS;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6mH,QAAQ,EAAE;MAAE//G,GAAG,EAAE,CAAC;MAAEE,GAAG,EAAE;IAAE,CAAC;IAE5B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIwkB,KAAK,EAAExrB,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8mH,YAAY,EAAE,IAAI;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,QAAQ,EAAE/mH,SAAS;IAEnB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIgnH,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhsG,IAAI,EAAE,MAAM;IAEZ;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIisG,iBAAiB,EAAEjnH,SAAS;IAE5B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIknH,IAAI,EAAElnH,SAAS;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8b,SAAS,EAAE9b,SAAS;IAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIu2D,6BAA6B,EAAE,MAAM;IAErC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIN,0BAA0B,EAAE,MAAM;IAElC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIkxD,WAAW,EAAE,EAAE;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI1mG,KAAK,EAAEzgB,SAAS;IAEhB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIonH,QAA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CA;AACA;EACEoiG,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAAjF,oBAAa,EAAC,IAAI,CAACp9G,UAAU,CAACw8G,kBAAkB,CAAC,CAAC,EAAE2F,uBAAuB,CAAC,CAACt2G,SAAS;EAC/F;AACF;AAACjS,kBAAA,GAAA6hH,UAAA;;;;;;;;;;;;;;;;;;;;AChID,IAAAp/G,MAAA,GAAApD,mBAAA;AACA,IAAA+D,MAAA,GAAA/D,mBAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMmpH,cAAc,CAAC;EA+BlCt1F,WAAWA,CAACy1F,YAAY,EAAE;IA9B1B;AACF;AACA;AACA;AACA;IAJE,IAAApzE,gBAAA,CAAAvzC,OAAA;IAMA;AACF;AACA;AACA;AACA;IAJE,IAAAuzC,gBAAA,CAAAvzC,OAAA,gBAKO,EAAE;IACT;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA,iBAMQ,EAAE;IACV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARE,IAAAuzC,gBAAA,CAAAvzC,OAAA,iBA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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,IAAAC,oBAAA,oBAAAziG,OAAA;AAAA,IAAA0iG,uBAAA,oBAAA1iG,OAAA;AAAA,IAAA2iG,qBAAA,oBAAA1lG,OAAA;AACO,MAAMmhG,cAAc,SAASK,gBAAU,CAAC;EAC7C,WAAW3jH,UAAUA,CAAA,EAAG;IACtB,OAAOA,UAAU;EACnB;EAEA,WAAWq4B,eAAeA,CAAA,EAAG;IAC3B,OAAOA,eAAe;EACxB;EAEA,WAAWyvF,YAAYA,CAAA,EAAG;IACxB,OAAO,IAAI;EACb;EAEA,WAAWC,gBAAgBA,CAAA,EAAG;IAC5B,OAAO,EAAE;EACX;EAEA,WAAWC,sBAAsBA,CAAA,EAAG;IAClC,OAAO,EAAE;EACX;;EAEA;AACF;AACA;AACA;AACA;AACA;;EAkEEjoH,WAAWA,CAAC1Q,WAAW,EAAE;IACvB,KAAK,CAACA,WAAW,CAAC;IA2LpB;AACF;AACA;AACA;AACA;IAJEsyB,2BAAA,OAAAkmG,qBAAA;IAAA,IAAAzlG,gBAAA,CAAAvzC,OAAA,sBA7Pa,IAAIo5I,mBAAU,CAAC,IAAI,CAAC5lG,GAAG,CAAC;IACrC;AACF;AACA;AACA;AACA;AACA;AACA;IANE,IAAAD,gBAAA,CAAAvzC,OAAA,4BAOmB,IAAIq5I,yBAAgB,CAAC,CAACvzI,GAAG,EAAE2C,MAAM,KAAK;MACvD,MAAMgf,WAAW,GAAG,IAAI,CAAC+rB,GAA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J,UAAU,EAAE,IAAI;EAChBC,UAAU,EAAE,sBAAsB;EAClCC,SAAS,EAAE;AACb,CAAC,CAAC,EACF,CAAC,QAAQ,EAAE;EACTF,UAAU,EAAE,KAAK;EACjBC,UAAU,EAAE,oBAAoB;EAChCC,SAAS,EAAE;AACb,CAAC,CAAC,CACH,CAAC;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AApEA,IAAAC,oBAAA,oBAAAxxG,OAAA;AAAA,IAAAyxG,yBAAA,oBAAAx0G,OAAA;AAqEO,MAAM4hG,kBAAkB,SAASJ,gBAAU,CAAC;EAAA5jH,YAAA;IAAA,SAAApyB,SAAA;IA2ZjD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPEg0C,2BAAA,OAAAg1G,yBAAA;IArYA;AACF;AACA;AACA;AACA;AACA;IALE,IAAAv0G,gBAAA,CAAAvzC,OAAA,+BAMsB,IAAI;IAC1B;AACF;AACA;AACA;AACA;AACA;IALE,IAAAuzC,gBAAA,CAAAvzC,OAAA,8BAMqB,IAAI;IACzB;AACF;AACA;AACA;AACA;AACA;IACEohD,0BAAA,OAAAymG,oBAAoB,EAAG,IAAI;EAAC;EAzC5B,WAAW12H,UAAUA,CAAA,EAAG;IACtB,OAAOA,UAAU;EACnB;EAEA,WAAWq4B,eAAeA,CAAA,EAAG;IAC3B,OAAOA,eAAe;EACxB;EAEA,WAAWq0F,WAAWA,CAAA,EAAG;IACvB,OAAO,CACL,sBAAsB,CACvB;EACH;EAEA,WAAW5E,YAAYA,CAAA,EAAG;IACxB,OAAO,CACL9nH,UAAU,EACV,GAAG8nH,YAAY,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AAU,GAAAnzB,kBAAA,GAAG,eAAe;AAClC,MAAMwrD,eAAe,GAAAxrD,uBAAA,GAAG,GAAG;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArFA,IAAAm4J,oBAAA,oBAAA7iH,OAAA;AAsFO,MAAMgiG,aAAa,SAASR,gBAAU,CAAC;EAAA5jH,YAAA;IAAA,SAAApyB,SAAA;IA2V5C;AACF;AACA;IAFEg0C,2BAAA,OAAAqjH,oBAAA;IAlVA;AACF;AACA;AACA;AACA;AACA;IALE,IAAA5iH,gBAAA,CAAAvzC,OAAA,qBAMY,IAAI;EAAA;EAdhB,WAAWmxB,UAAUA,CAAA,EAAG;IACtB,OAAOA,UAAU;EACnB;EAEA,WAAWq4B,eAAeA,CAAA,EAAG;IAC3B,OAAOA,eAAe;EACxB;EAUA;AACF;AACA;AACA;AACA;AACA;EACEgG,SAASA,CAAA,EAAG;IACV,OAAO,CAAC,CAAC,IAAI,CAAChc,GAAG,CAACxqC,WAAW,CAAC,CAAC,CAACmoB,UAAU,CAAC;EAC7C;;EAEA;AACF;AACA;EACEwoH,YAAYA,CAAA,EAAG;IAAA,IAAA33I,KAAA;IACb,IAAI,IAAI,CAAC43I,OAAO,EAAE;MAChB;IACF;IAEA,IAAI,CAAC33H,QAAQ,GAAG,IAAI,CAACuxB,GAAG,CAACxqC,WAAW,CAAC,CAAC,CAACmoB,UAAU,CAAC;IAClD,IAAI,CAACilI,SAAS,GAAG,IAAIC,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GAAAnzB,kBAAA,GAAG,UAAU;AAC7B,MAAMwrD,eAAe,GAAAxrD,uBAAA,GAAG,EAAE;AAC1B,MAAM09J,YAAY,GAAA19J,oBAAA,GAAG,SAAS;AAC9B,MAAM29J,kBAAkB,GAAA39J,0BAAA,GAAG,OAAO;AAClC,MAAM49J,UAAU,GAAA59J,kBAAA,GAAG,OAAO;AAC1B,MAAM69J,aAAa,GAAA79J,qBAAA,GAAG,UAAU;AACvC,MAAM6+H,eAAe,GAAG1rG,UAAU;AAClC,MAAM2qI,sBAAsB,GAAG,UAAU3qI,UAAU,EAAE;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxFA,IAAAg6F,OAAA,oBAAA90E,OAAA;AAAA,IAAA0lH,cAAA,oBAAA1lH,OAAA;AAAA,IAAA2lH,wBAAA,oBAAA3lH,OAAA;AAAA,IAAA4lH,oBAAA,oBAAA5lH,OAAA;AAAA,IAAA6lH,gBAAA,oBAAA7lH,OAAA;AAAA,IAAA8lH,uBAAA,oBAAA9lH,OAAA;AAAA,IAAA+lH,eAAA,oBAAA9oH,OAAA;AAyFO,MAAMkiG,QAAQ,SAASV,gBAAU,CAAC;EAAA5jH,YAAA;IAAA,SAAApyB,SAAA;IA0gBvC;AACF;AACA;AACA;AACA;IAJEg0C,2BAAA,OAAAspH,eAAA;IAjgBA;AACF;AACA;AACA;AACA;IAJE,IAAA7oH,gBAAA,CAAAvzC,OAAA,iBAKQ,CAAC,CAAC;IACV;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AI,CAACisC,GAAG,CAAC51B,WAAW,CAAC,CAAC;QAExC,IAAI,CAAC2oK,eAAe,CAAC,CAAC;QACtB,IAAI,CAACpqK,MAAM,CAAC,CAAC;QAEb,IAAI5U,SAAS,EAAE;UACb,IAAI,CAACisC,GAAG,CAAC/mB,WAAW,CAACllB,SAAS,CAAC;QACjC;MACF,CAAC;MACDujH,KAAK,EAAE+R;IACT,CAAC,CAAC;EACN;;EAEA;AACF;AACA;AACA;AACA;EACEQ,mBAAmBA,CAAA,EAAG;IACpB,IAAI,CAAC7pF,GAAG,CAACjrC,kBAAkB,CAAC,CAAC,CAC1BwiH,UAAU,CAAC,MAAM,CAAC,CAClBuP,sBAAsB,CAACuC,eAAe,CAAC;EAC5C;;EAEA;EACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE;EACA2pD,YAAYA,CAAC/9K,MAAM,EAAE25B,IAAI,EAAEp3B,IAAI,EAA+B;IAAA,IAA7By7K,WAAW,GAAA3nL,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG4nL,yBAAa;IAC1D,MAAMh/J,cAAc,GAAG,IAAI,CAAC8rB,GAAG,CAACjiC,gBAAgB,CAAC9I,MAAM,C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,GAAAG,CAAA,YAAAF,SAAA;AAE9B9zC,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,mBAAmB,CAAC;AAClD38C,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,kBAAkB,CAAC;AACjD38C,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,qBAAqB,CAAC;AACpD38C,oBAAK,CAACC,YAAY,CAAC,CAAC,CAAC08C,QAAQ,CAAC,oBAAoB,CAAC;AAE5C,MAAM5qB,UAAU,GAAAnzB,kBAAA,GAAG,eAAe;AAClC,MAAMwrD,eAAe,GAAAxrD,uBAAA,GAAG,GAAG;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvGA,IAAA6mE,SAAA,oBAAAxuB,OAAA;AAAA,IAAA44J,iBAAA,oBAAA54J,OAAA;AAAA,IAAA64J,oBAAA,oBAAA57J,OAAA;AAwGO,MAAMojG,aAAa,SAAS5B,gBAAU,CAAC;EAAA5jH,YAAA;IAAA,SAAApyB,SAAA;IA+O5C;AACF;AACA;AACA;AACA;AACA;AACA;IANEg0C,2BAAA,OAAAo8J,oBAAA;IAtOA;AACF;AACA;AACA;AACA;AACA;IACE9tJ,0BAAA,OAAAyjB,SAAS,EAAG,CAAC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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvGA,IAAA6mE,SAAA,oBAAAxuB,OAAA;AAAA,IAAA67J,cAAA,oBAAA77J,OAAA;AAAA,IAAA87J,iBAAA,oBAAA7+J,OAAA;AAwGO,MAAMsjG,UAAU,SAAS9B,gBAAU,CAAC;EAAA5jH,YAAA;IAAA,SAAApyB,SAAA;IA0OzC;AACF;AACA;AACA;AACA;AACA;AACA;IANEg0C,2BAAA,OAAAq/J,iBAAA;IAjOA;AACF;AACA;AACA;AACA;AACA;IACE/wJ,0BAAA,OAAAyjB,SAAS,EAAG,CAAC,CAAC;IACd;AACF;AACA;AACA;AACA;AACA;IACEzjB,0BAAA,OAAA8wJ,cAAc,EAAG,IAAI;EAAC;EArBtB,WAAW/gL,UAAUA,CAAA,EAAG;IACtB,OAAOA,UAAU;EACnB;EAEA,WAAWq4B,eAAeA,CAAA,EAAG;IAC3B,OAAOA,eAAe;EACxB;EAiBA;AACF;AACA;AACA;AACA;AACA;EACEgG,SAASA,CAAA,EAAG;IACV,OAAO,CAAC,CAAC,IAAI,CAAChc,GAAG,CAACxqC,WAAW,CAAC,CAAC,CAACmoB,UAAU,CAAC;EAC7C;;EAEA;AACF;AACA;EACEwoH,YAAYA,CAAA,EAAG;IAAA,IAAA33I,KAAA;IACb,IAAI,IAAI,CAAC43I,OAAO,EAAE;MAChB;IACF;IAEA,MAAM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","sources":["webpack://Handsontable/webpack/universalModuleDefinition","webpack://Handsontable/../node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://Handsontable/./src/base.js","webpack://Handsontable/./src/css/bootstrap.css?2760","webpack://Handsontable/./src/3rdparty/walkontable/css/walkontable.scss?764a","webpack://Handsontable/./src/css/handsontable.scss?4f02","webpack://Handsontable/./src/css/mobile.handsontable.scss?1bca","webpack://Handsontable/./src/core.js","webpack://Handsontable/../node_modules/core-js/modules/es.error.cause.js","webpack://Handsontable/../node_modules/core-js/internals/export.js","webpack://Handsontable/../node_modules/core-js/internals/global-this.js","webpack://Handsontable/../node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://Handsontable/../node_modules/core-js/internals/descriptors.js","webpack://Handsontable/../node_modules/core-js/internals/fails.js","webpack://Handsontable/../node_modules/core-js/internals/function-call.js","webpack://Handsontable/../node_modules/core-js/internals/function-bind-native.js","webpack://Handsontable/../node_modules/core-js/internals/object-property-is-enumerable.js","webpack://Handsontable/../node_modules/core-js/internals/create-property-descriptor.js","webpack://Handsontable/../node_modules/core-js/internals/to-indexed-object.js","webpack://Handsontable/../node_modules/core-js/internals/indexed-object.js","webpack://Handsontable/../node_modules/core-js/internals/function-uncurry-this.js","webpack://Handsontable/../node_modules/core-js/internals/classof-raw.js","webpack://Handsontable/../node_modules/core-js/internals/require-object-coercible.js","webpack://Handsontable/../node_modules/core-js/internals/is-null-or-undefined.js","webpack://Handsontable/../node_modules/core-js/internals/to-property-key.js","webpack://Handsontable/../node_modules/core-js/internals/to-primitive.js","webpack://Handsontable/../node_modules/core-js/internals/is-object.js","webpack://Handsontable/../node_modules/core-js/internals/is-callable.js","webpack://Handsontable/../node_modules/core-js/internals/is-symbol.js","webpack://Handsontable/../node_modules/core-js/internals/get-built-in.js","webpack://Handsontable/../node_modules/core-js/internals/object-is-prototype-of.js","webpack://Handsontable/../node_modules/core-js/internals/use-symbol-as-uid.js","webpack://Handsontable/../node_modules/core-js/internals/symbol-constructor-detection.js","webpack://Handsontable/../node_modules/core-js/internals/environment-v8-version.js","webpack://Handsontable/../node_modules/core-js/internals/environment-user-agent.js","webpack://Handsontable/../node_modules/core-js/internals/get-method.js","webpack://Handsontable/../node_modules/core-js/internals/a-callable.js","webpack://Handsontable/../node_modules/core-js/internals/try-to-string.js","webpack://Handsontable/../node_modules/core-js/internals/ordinary-to-primitive.js","webpack://Handsontable/../node_modules/core-js/internals/well-known-symbol.js","webpack://Handsontable/../node_modules/core-js/internals/shared.js","webpack://Handsontable/../node_modules/core-js/internals/shared-store.js","webpack://Handsontable/../node_modules/core-js/internals/is-pure.js","webpack://Handsontable/../node_modules/core-js/internals/define-global-property.js","webpack://Handsontable/../node_modules/core-js/internals/has-own-property.js","webpack://Handsontable/../node_modules/core-js/internals/to-object.js","webpack://Handsontable/../node_modules/core-js/internals/uid.js","webpack://Handsontable/../node_modules/core-js/internals/ie8-dom-define.js","webpack://Handsontable/../node_modules/core-js/internals/document-create-element.js","webpack://Handsontable/../node_modules/core-js/internals/create-non-enumerable-property.js","webpack://Handsontable/../node_modules/core-js/internals/object-define-property.js","webpack://Handsontable/../node_modules/core-js/internals/v8-prototype-define-bug.js","webpack://Handsontable/../node_modules/core-js/internals/an-object.js","webpack://Handsontable/../node_modules/core-js/internals/define-built-in.js","webpack://Handsontable/../node_modules/core-js/internals/make-built-in.js","webpack://Handsontable/../node_modules/core-js/internals/function-name.js","webpack://Handsontable/../node_modules/core-js/internals/inspect-source.js","webpack://Handsontable/../node_modules/core-js/internals/internal-state.js","webpack://Handsontable/../node_modules/core-js/internals/weak-map-basic-detection.js","webpack://Handsontable/../node_modules/core-js/internals/shared-key.js","webpack://Handsontable/../node_modules/core-js/internals/hidden-keys.js","webpack://Handsontable/../node_modules/core-js/internals/copy-constructor-properties.js","webpack://Handsontable/../node_modules/core-js/internals/own-keys.js","webpack://Handsontable/../node_modules/core-js/internals/object-get-own-property-names.js","webpack://Handsontable/../node_modules/core-js/internals/object-keys-internal.js","webpack://Handsontable/../node_modules/core-js/internals/array-includes.js","webpack://Handsontable/../node_modules/core-js/internals/to-absolute-index.js","webpack://Handsontable/../node_modules/core-js/internals/to-integer-or-infinity.js","webpack://Handsontable/../node_modules/core-js/internals/math-trunc.js","webpack://Handsontable/../node_modules/core-js/internals/length-of-array-like.js","webpack://Handsontable/../node_modules/core-js/internals/to-length.js","webpack://Handsontable/../node_modules/core-js/internals/enum-bug-keys.js","webpack://Handsontable/../node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://Handsontable/../node_modules/core-js/internals/is-forced.js","webpack://Handsontable/../node_modules/core-js/internals/function-apply.js","webpack://Handsontable/../node_modules/core-js/internals/wrap-error-constructor-with-cause.js","webpack://Handsontable/../node_modules/core-js/internals/object-set-prototype-of.js","webpack://Handsontable/../node_modules/core-js/internals/function-uncurry-this-accessor.js","webpack://Handsontable/../node_modules/core-js/internals/a-possible-prototype.js","webpack://Handsontable/../node_modules/core-js/internals/is-possible-prototype.js","webpack://Handsontable/../node_modules/core-js/internals/proxy-accessor.js","webpack://Handsontable/../node_modules/core-js/internals/inherit-if-required.js","webpack://Handsontable/../node_modules/core-js/internals/normalize-string-argument.js","webpack://Handsontable/../node_modules/core-js/internals/to-string.js","webpack://Handsontable/../node_modules/core-js/internals/classof.js","webpack://Handsontable/../node_modules/core-js/internals/to-string-tag-support.js","webpack://Handsontable/../node_modules/core-js/internals/install-error-cause.js","webpack://Handsontable/../node_modules/core-js/internals/error-stack-install.js","webpack://Handsontable/../node_modules/core-js/internals/error-stack-clear.js","webpack://Handsontable/../node_modules/core-js/internals/error-stack-installable.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.push.js","webpack://Handsontable/../node_modules/core-js/internals/array-set-length.js","webpack://Handsontable/../node_modules/core-js/internals/is-array.js","webpack://Handsontable/../node_modules/core-js/internals/does-not-exceed-safe-integer.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.difference.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-difference.js","webpack://Handsontable/../node_modules/core-js/internals/a-set.js","webpack://Handsontable/../node_modules/core-js/internals/set-helpers.js","webpack://Handsontable/../node_modules/core-js/internals/set-clone.js","webpack://Handsontable/../node_modules/core-js/internals/set-iterate.js","webpack://Handsontable/../node_modules/core-js/internals/iterate-simple.js","webpack://Handsontable/../node_modules/core-js/internals/set-size.js","webpack://Handsontable/../node_modules/core-js/internals/get-set-record.js","webpack://Handsontable/../node_modules/core-js/internals/get-iterator-direct.js","webpack://Handsontable/../node_modules/core-js/internals/set-method-accept-set-like.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.intersection.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-intersection.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.is-disjoint-from.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-is-disjoint-from.js","webpack://Handsontable/../node_modules/core-js/internals/iterator-close.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.is-subset-of.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-is-subset-of.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.is-superset-of.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-is-superset-of.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.symmetric-difference.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-symmetric-difference.js","webpack://Handsontable/../node_modules/core-js/modules/es.set.union.v2.js","webpack://Handsontable/../node_modules/core-js/internals/set-union.js","webpack://Handsontable/../node_modules/core-js/modules/web.immediate.js","webpack://Handsontable/../node_modules/core-js/modules/web.clear-immediate.js","webpack://Handsontable/../node_modules/core-js/internals/task.js","webpack://Handsontable/../node_modules/core-js/internals/function-bind-context.js","webpack://Handsontable/../node_modules/core-js/internals/function-uncurry-this-clause.js","webpack://Handsontable/../node_modules/core-js/internals/html.js","webpack://Handsontable/../node_modules/core-js/internals/array-slice.js","webpack://Handsontable/../node_modules/core-js/internals/validate-arguments-length.js","webpack://Handsontable/../node_modules/core-js/internals/environment-is-ios.js","webpack://Handsontable/../node_modules/core-js/internals/environment-is-node.js","webpack://Handsontable/../node_modules/core-js/internals/environment.js","webpack://Handsontable/../node_modules/core-js/modules/web.set-immediate.js","webpack://Handsontable/../node_modules/core-js/internals/schedulers-fix.js","webpack://Handsontable/./src/helpers/dom/element.js","webpack://Handsontable/./src/helpers/string.js","webpack://Handsontable/external umd {\"root\":\"DOMPurify\",\"commonjs2\":\"dompurify\",\"commonjs\":\"dompurify\",\"amd\":\"dompurify\"}","webpack://Handsontable/./src/helpers/mixed.js","webpack://Handsontable/external umd {\"root\":\"moment\",\"commonjs2\":\"moment\",\"commonjs\":\"moment\",\"amd\":\"moment\"}","webpack://Handsontable/./src/helpers/templateLiteralTag.js","webpack://Handsontable/./src/helpers/array.js","webpack://Handsontable/./src/helpers/a11y.js","webpack://Handsontable/./src/helpers/function.js","webpack://Handsontable/./src/helpers/browser.js","webpack://Handsontable/./src/helpers/object.js","webpack://Handsontable/../node_modules/core-js/modules/es.json.stringify.js","webpack://Handsontable/../node_modules/core-js/internals/get-json-replacer-function.js","webpack://Handsontable/./src/helpers/feature.js","webpack://Handsontable/./src/editorManager.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/defineProperty.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/typeof.js","webpack://Handsontable/../node_modules/@babel/runtime/helpers/toPrimitive.js","webpack://Handsontable/./src/helpers/unicode.js","webpack://Handsontable/./src/helpers/dom/event.js","webpack://Handsontable/./src/editors/registry.js","webpack://Handsontable/./src/pluginHooks.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack://Handsontable/../node_modules/core-js/internals/add-to-unscopables.js","webpack://Handsontable/../node_modules/core-js/internals/object-create.js","webpack://Handsontable/../node_modules/core-js/internals/object-define-properties.js","webpack://Handsontable/../node_modules/core-js/internals/object-keys.js","webpack://Handsontable/./src/helpers/console.js","webpack://Handsontable/./src/utils/staticRegister.js","webpack://Handsontable/./src/eventManager.js","webpack://Handsontable/./src/focusManager.js","webpack://Handsontable/./src/utils/parseTable.js","webpack://Handsontable/../node_modules/core-js/modules/es.string.replace-all.js","webpack://Handsontable/../node_modules/core-js/internals/is-regexp.js","webpack://Handsontable/../node_modules/core-js/internals/regexp-get-flags.js","webpack://Handsontable/../node_modules/core-js/internals/regexp-flags.js","webpack://Handsontable/../node_modules/core-js/internals/get-substitution.js","webpack://Handsontable/./src/plugins/registry.js","webpack://Handsontable/./src/utils/dataStructures/priorityMap.js","webpack://Handsontable/./src/helpers/number.js","webpack://Handsontable/./src/utils/dataStructures/uniqueMap.js","webpack://Handsontable/./src/utils/dataStructures/uniqueSet.js","webpack://Handsontable/./src/renderers/registry.js","webpack://Handsontable/./src/validators/registry.js","webpack://Handsontable/./src/tableView.js","webpack://Handsontable/./src/3rdparty/walkontable/src/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.at.js","webpack://Handsontable/../node_modules/core-js/modules/es.string.at-alternative.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedAllColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedAllRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/viewportColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/viewportBase.js","webpack://Handsontable/./src/3rdparty/walkontable/src/calculator/viewportRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/cell/coords.js","webpack://Handsontable/./src/3rdparty/walkontable/src/cell/range.js","webpack://Handsontable/./src/3rdparty/walkontable/src/facade/core.js","webpack://Handsontable/./src/3rdparty/walkontable/src/core/core.js","webpack://Handsontable/./src/3rdparty/walkontable/src/event.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlays.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/bottomInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table.js","webpack://Handsontable/./src/3rdparty/walkontable/src/filter/column.js","webpack://Handsontable/./src/3rdparty/walkontable/src/filter/row.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/rowHeaders.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/view.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/viewSize.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/orderView/sharedView.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/_base.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/nodesPool.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/columnHeaders.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/colGroup.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/rows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/cells.js","webpack://Handsontable/./src/3rdparty/walkontable/src/renderer/table.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/column.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/columnStretching.js","webpack://Handsontable/./src/3rdparty/walkontable/src/utils/row.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/_base.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/core/clone.js","webpack://Handsontable/./src/3rdparty/walkontable/src/core/_base.js","webpack://Handsontable/./src/3rdparty/walkontable/src/scroll.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/bottom.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/bottom.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/calculatedColumns.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/inlineStart.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/inlineStart.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/calculatedRows.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/index.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/selection.js","webpack://Handsontable/./src/mixins/localHooks.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/border/constants.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/manager.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.unscopables.flat.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/scanner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/selection/border/border.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/topInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/topInlineStartCorner.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js","webpack://Handsontable/./src/3rdparty/walkontable/src/overlay/top.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/top.js","webpack://Handsontable/./src/3rdparty/walkontable/src/settings.js","webpack://Handsontable/./src/3rdparty/walkontable/src/table/master.js","webpack://Handsontable/./src/3rdparty/walkontable/src/viewport.js","webpack://Handsontable/./src/selection/mouseEventHandler.js","webpack://Handsontable/./src/utils/rootInstance.js","webpack://Handsontable/./src/dataMap/dataSource.js","webpack://Handsontable/./src/helpers/data.js","webpack://Handsontable/./src/translations/index.js","webpack://Handsontable/./src/translations/indexMapper.js","webpack://Handsontable/./src/translations/maps/index.js","webpack://Handsontable/./src/translations/maps/hidingMap.js","webpack://Handsontable/./src/translations/maps/physicalIndexToValueMap.js","webpack://Handsontable/./src/translations/maps/indexMap.js","webpack://Handsontable/./src/translations/maps/utils/physicallyIndexed.js","webpack://Handsontable/./src/translations/maps/linkedPhysicalIndexToValueMap.js","webpack://Handsontable/./src/translations/maps/utils/indexesSequence.js","webpack://Handsontable/./src/translations/maps/utils/actionsOnIndexes.js","webpack://Handsontable/./src/translations/maps/trimmingMap.js","webpack://Handsontable/./src/translations/maps/indexesSequence.js","webpack://Handsontable/./src/translations/maps/utils/index.js","webpack://Handsontable/./src/translations/mapCollections/index.js","webpack://Handsontable/./src/translations/mapCollections/aggregatedCollection.js","webpack://Handsontable/./src/translations/mapCollections/mapCollection.js","webpack://Handsontable/./src/translations/changesObservable/observable.js","webpack://Handsontable/./src/translations/changesObservable/observer.js","webpack://Handsontable/./src/translations/changesObservable/utils.js","webpack://Handsontable/./src/i18n/registry.js","webpack://Handsontable/./src/i18n/utils.js","webpack://Handsontable/./src/i18n/phraseFormatters/index.js","webpack://Handsontable/./src/i18n/phraseFormatters/pluralize.js","webpack://Handsontable/./src/i18n/languages/en-US.js","webpack://Handsontable/./src/i18n/constants.js","webpack://Handsontable/./src/selection/index.js","webpack://Handsontable/./src/selection/selection.js","webpack://Handsontable/./src/selection/highlight/highlight.js","webpack://Handsontable/./src/selection/highlight/types/activeHeader.js","webpack://Handsontable/./src/selection/highlight/visualSelection.js","webpack://Handsontable/./src/selection/highlight/types/areaLayered.js","webpack://Handsontable/./src/selection/highlight/types/area.js","webpack://Handsontable/./src/selection/highlight/types/column.js","webpack://Handsontable/./src/selection/highlight/types/focus.js","webpack://Handsontable/./src/selection/highlight/types/customSelection.js","webpack://Handsontable/./src/selection/highlight/types/fill.js","webpack://Handsontable/./src/selection/highlight/types/header.js","webpack://Handsontable/./src/selection/highlight/types/row.js","webpack://Handsontable/./src/selection/range.js","webpack://Handsontable/./src/selection/transformation.js","webpack://Handsontable/./src/selection/utils.js","webpack://Handsontable/./src/dataMap/index.js","webpack://Handsontable/./src/dataMap/dataMap.js","webpack://Handsontable/./src/3rdparty/SheetClip/index.js","webpack://Handsontable/./src/3rdparty/SheetClip/SheetClip.js","webpack://Handsontable/./src/dataMap/metaManager/index.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/globalMeta.js","webpack://Handsontable/./src/dataMap/metaManager/utils.js","webpack://Handsontable/./src/cellTypes/registry.js","webpack://Handsontable/./src/dataMap/metaManager/metaSchema.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/tableMeta.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/columnMeta.js","webpack://Handsontable/./src/dataMap/metaManager/lazyFactoryMap.js","webpack://Handsontable/./src/dataMap/metaManager/metaLayers/cellMeta.js","webpack://Handsontable/./src/dataMap/replaceData.js","webpack://Handsontable/./src/dataMap/metaManager/mods/dynamicCellMeta.js","webpack://Handsontable/./src/dataMap/metaManager/mods/extendMetaProperties.js","webpack://Handsontable/./src/core/index.js","webpack://Handsontable/./src/core/focusCatcher/index.js","webpack://Handsontable/./src/shortcutContexts/index.js","webpack://Handsontable/./src/shortcutContexts/editor.js","webpack://Handsontable/./src/shortcutContexts/constants.js","webpack://Handsontable/./src/shortcutContexts/commands/index.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/index.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeAndSave.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeAndSaveByArrowKeys.js","webpack://Handsontable/./src/editors/baseEditor/index.js","webpack://Handsontable/./src/editors/baseEditor/baseEditor.js","webpack://Handsontable/./src/mixins/hooksRefRegisterer.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeAndSaveByEnter.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/closeWithoutSaving.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/fastOpen.js","webpack://Handsontable/./src/shortcutContexts/commands/editor/open.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/index.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/down.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/left.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/right.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toColumns.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostBottom.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostLeft.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostRight.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toMostTop.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/toRows.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/up.js","webpack://Handsontable/./src/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/index.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/down.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/inlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/inlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/left.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/right.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostBottom.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostLeft.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostRight.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostTop.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/up.js","webpack://Handsontable/./src/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js","webpack://Handsontable/./src/shortcutContexts/commands/emptySelectedCells.js","webpack://Handsontable/./src/shortcutContexts/commands/scrollToFocusedCell.js","webpack://Handsontable/./src/shortcutContexts/commands/selectAllCells.js","webpack://Handsontable/./src/shortcutContexts/commands/selectAllCellsAndHeaders.js","webpack://Handsontable/./src/shortcutContexts/commands/populateSelectedCellsData.js","webpack://Handsontable/./src/shortcutContexts/grid.js","webpack://Handsontable/./src/core/focusCatcher/focusDetector.js","webpack://Handsontable/./src/core/viewportScroll/index.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/columnHeaderScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/cornerHeaderScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/focusScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/multipleScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/noncontiguousScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/rowHeaderScroll.js","webpack://Handsontable/./src/core/viewportScroll/scrollStrategies/singleScroll.js","webpack://Handsontable/./src/shortcuts/index.js","webpack://Handsontable/./src/shortcuts/manager.js","webpack://Handsontable/./src/shortcuts/context.js","webpack://Handsontable/./src/shortcuts/utils.js","webpack://Handsontable/./src/shortcuts/recorder.js","webpack://Handsontable/./src/shortcuts/keyObserver.js","webpack://Handsontable/./src/cellTypes/textType/index.js","webpack://Handsontable/./src/cellTypes/textType/textType.js","webpack://Handsontable/./src/editors/textEditor/index.js","webpack://Handsontable/./src/editors/textEditor/textEditor.js","webpack://Handsontable/./src/utils/autoResize.js","webpack://Handsontable/./src/editors/textEditor/caretPositioner.js","webpack://Handsontable/./src/renderers/textRenderer/index.js","webpack://Handsontable/./src/renderers/textRenderer/textRenderer.js","webpack://Handsontable/./src/renderers/baseRenderer/index.js","webpack://Handsontable/./src/renderers/baseRenderer/baseRenderer.js","webpack://Handsontable/./src/registry.js","webpack://Handsontable/./src/editors/index.js","webpack://Handsontable/./src/editors/autocompleteEditor/index.js","webpack://Handsontable/./src/editors/autocompleteEditor/autocompleteEditor.js","webpack://Handsontable/./src/editors/handsontableEditor/index.js","webpack://Handsontable/./src/editors/handsontableEditor/handsontableEditor.js","webpack://Handsontable/./src/editors/checkboxEditor/index.js","webpack://Handsontable/./src/editors/checkboxEditor/checkboxEditor.js","webpack://Handsontable/./src/editors/dateEditor/index.js","webpack://Handsontable/./src/editors/dateEditor/dateEditor.js","webpack://Handsontable/external umd {\"root\":\"Pikaday\",\"commonjs2\":\"@handsontable/pikaday\",\"commonjs\":\"@handsontable/pikaday\",\"amd\":\"@handsontable/pikaday\"}","webpack://Handsontable/../node_modules/@handsontable/pikaday/css/pikaday.css","webpack://Handsontable/./src/editors/dropdownEditor/index.js","webpack://Handsontable/./src/editors/dropdownEditor/dropdownEditor.js","webpack://Handsontable/./src/editors/numericEditor/index.js","webpack://Handsontable/./src/editors/numericEditor/numericEditor.js","webpack://Handsontable/./src/editors/passwordEditor/index.js","webpack://Handsontable/./src/editors/passwordEditor/passwordEditor.js","webpack://Handsontable/./src/editors/selectEditor/index.js","webpack://Handsontable/./src/editors/selectEditor/selectEditor.js","webpack://Handsontable/./src/editors/timeEditor/index.js","webpack://Handsontable/./src/editors/timeEditor/timeEditor.js","webpack://Handsontable/./src/renderers/index.js","webpack://Handsontable/./src/renderers/autocompleteRenderer/index.js","webpack://Handsontable/./src/renderers/autocompleteRenderer/autocompleteRenderer.js","webpack://Handsontable/./src/renderers/htmlRenderer/index.js","webpack://Handsontable/./src/renderers/htmlRenderer/htmlRenderer.js","webpack://Handsontable/./src/renderers/autocompleteRenderer/autocompleteRenderer.scss?d42b","webpack://Handsontable/./src/renderers/dropdownRenderer/index.js","webpack://Handsontable/./src/renderers/dropdownRenderer/dropdownRenderer.js","webpack://Handsontable/./src/renderers/checkboxRenderer/index.js","webpack://Handsontable/./src/renderers/checkboxRenderer/checkboxRenderer.js","webpack://Handsontable/./src/renderers/checkboxRenderer/checkboxRenderer.css?7a89","webpack://Handsontable/./src/renderers/handsontableRenderer/index.js","webpack://Handsontable/./src/renderers/handsontableRenderer/handsontableRenderer.js","webpack://Handsontable/./src/renderers/numericRenderer/index.js","webpack://Handsontable/./src/renderers/numericRenderer/numericRenderer.js","webpack://Handsontable/external umd {\"root\":\"numbro\",\"commonjs2\":\"numbro\",\"commonjs\":\"numbro\",\"amd\":\"numbro\"}","webpack://Handsontable/./src/renderers/passwordRenderer/index.js","webpack://Handsontable/./src/renderers/passwordRenderer/passwordRenderer.js","webpack://Handsontable/./src/renderers/selectRenderer/index.js","webpack://Handsontable/./src/renderers/selectRenderer/selectRenderer.js","webpack://Handsontable/./src/renderers/timeRenderer/index.js","webpack://Handsontable/./src/renderers/timeRenderer/timeRenderer.js","webpack://Handsontable/./src/validators/index.js","webpack://Handsontable/./src/validators/autocompleteValidator/index.js","webpack://Handsontable/./src/validators/autocompleteValidator/autocompleteValidator.js","webpack://Handsontable/./src/validators/dateValidator/index.js","webpack://Handsontable/./src/validators/dateValidator/dateValidator.js","webpack://Handsontable/./src/helpers/date.js","webpack://Handsontable/./src/validators/dropdownValidator/index.js","webpack://Handsontable/./src/validators/dropdownValidator/dropdownValidator.js","webpack://Handsontable/./src/validators/numericValidator/index.js","webpack://Handsontable/./src/validators/numericValidator/numericValidator.js","webpack://Handsontable/./src/validators/timeValidator/index.js","webpack://Handsontable/./src/validators/timeValidator/timeValidator.js","webpack://Handsontable/./src/cellTypes/index.js","webpack://Handsontable/./src/cellTypes/autocompleteType/index.js","webpack://Handsontable/./src/cellTypes/autocompleteType/autocompleteType.js","webpack://Handsontable/./src/cellTypes/checkboxType/index.js","webpack://Handsontable/./src/cellTypes/checkboxType/checkboxType.js","webpack://Handsontable/./src/cellTypes/dateType/index.js","webpack://Handsontable/./src/cellTypes/dateType/dateType.js","webpack://Handsontable/./src/renderers/dateRenderer/index.js","webpack://Handsontable/./src/renderers/dateRenderer/dateRenderer.js","webpack://Handsontable/./src/cellTypes/dropdownType/index.js","webpack://Handsontable/./src/cellTypes/dropdownType/dropdownType.js","webpack://Handsontable/./src/cellTypes/handsontableType/index.js","webpack://Handsontable/./src/cellTypes/handsontableType/handsontableType.js","webpack://Handsontable/./src/cellTypes/numericType/index.js","webpack://Handsontable/./src/cellTypes/numericType/numericType.js","webpack://Handsontable/./src/cellTypes/passwordType/index.js","webpack://Handsontable/./src/cellTypes/passwordType/passwordType.js","webpack://Handsontable/./src/cellTypes/selectType/index.js","webpack://Handsontable/./src/cellTypes/selectType/selectType.js","webpack://Handsontable/./src/cellTypes/timeType/index.js","webpack://Handsontable/./src/cellTypes/timeType/timeType.js","webpack://Handsontable/./src/plugins/index.js","webpack://Handsontable/./src/plugins/autoColumnSize/index.js","webpack://Handsontable/./src/plugins/autoColumnSize/autoColumnSize.js","webpack://Handsontable/./src/plugins/base/index.js","webpack://Handsontable/./src/plugins/base/base.js","webpack://Handsontable/./src/utils/ghostTable.js","webpack://Handsontable/./src/utils/samplesGenerator.js","webpack://Handsontable/./src/plugins/autofill/index.js","webpack://Handsontable/./src/plugins/autofill/autofill.js","webpack://Handsontable/./src/plugins/autofill/utils.js","webpack://Handsontable/./src/plugins/autoRowSize/index.js","webpack://Handsontable/./src/plugins/autoRowSize/autoRowSize.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/index.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/maps/looseBindsMap.js","webpack://Handsontable/./src/plugins/bindRowsWithHeaders/maps/strictBindsMap.js","webpack://Handsontable/./src/plugins/collapsibleColumns/index.js","webpack://Handsontable/./src/plugins/collapsibleColumns/collapsibleColumns.js","webpack://Handsontable/./src/plugins/collapsibleColumns/collapsibleColumns.scss?7990","webpack://Handsontable/./src/plugins/columnSorting/index.js","webpack://Handsontable/./src/plugins/columnSorting/columnSorting.js","webpack://Handsontable/./src/plugins/columnSorting/columnStatesManager.js","webpack://Handsontable/./src/plugins/columnSorting/utils.js","webpack://Handsontable/./src/plugins/columnSorting/sortService/index.js","webpack://Handsontable/./src/plugins/columnSorting/sortService/registry.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/default.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/numeric.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/checkbox.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/date.js","webpack://Handsontable/./src/plugins/columnSorting/sortFunction/time.js","webpack://Handsontable/./src/plugins/columnSorting/sortService/engine.js","webpack://Handsontable/./src/plugins/columnSorting/domHelpers.js","webpack://Handsontable/./src/plugins/columnSorting/rootComparator.js","webpack://Handsontable/./src/plugins/columnSorting/columnSorting.scss?27f2","webpack://Handsontable/./src/plugins/columnSummary/index.js","webpack://Handsontable/./src/plugins/columnSummary/columnSummary.js","webpack://Handsontable/./src/plugins/columnSummary/endpoints.js","webpack://Handsontable/./src/plugins/columnSummary/utils.js","webpack://Handsontable/./src/plugins/comments/index.js","webpack://Handsontable/./src/plugins/comments/comments.js","webpack://Handsontable/./src/plugins/comments/commentEditor.js","webpack://Handsontable/./src/plugins/comments/editorResizeObserver.js","webpack://Handsontable/./src/plugins/comments/displaySwitch.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/index.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/alignment.js","webpack://Handsontable/./src/plugins/contextMenu/utils.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/separator.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/clearColumn.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/columnLeft.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/columnRight.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/readOnly.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/redo.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/removeColumn.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/removeRow.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/rowAbove.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/rowBelow.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/noItems.js","webpack://Handsontable/./src/plugins/contextMenu/predefinedItems/undo.js","webpack://Handsontable/./src/plugins/comments/contextMenuItem/addEditComment.js","webpack://Handsontable/./src/plugins/comments/contextMenuItem/removeComment.js","webpack://Handsontable/./src/plugins/comments/contextMenuItem/readOnlyComment.js","webpack://Handsontable/./src/plugins/comments/comments.scss?d91f","webpack://Handsontable/./src/plugins/contextMenu/index.js","webpack://Handsontable/./src/plugins/contextMenu/contextMenu.js","webpack://Handsontable/./src/plugins/contextMenu/commandExecutor.js","webpack://Handsontable/../node_modules/core-js/modules/es.array.unshift.js","webpack://Handsontable/../node_modules/core-js/internals/delete-property-or-throw.js","webpack://Handsontable/./src/plugins/contextMenu/itemsFactory.js","webpack://Handsontable/./src/plugins/contextMenu/menu/index.js","webpack://Handsontable/./src/plugins/contextMenu/menu/menu.js","webpack://Handsontable/./src/plugins/contextMenu/menu/positioner.js","webpack://Handsontable/./src/plugins/contextMenu/menu/cursor.js","webpack://Handsontable/./src/plugins/contextMenu/menu/navigator.js","webpack://Handsontable/./src/utils/paginator.js","webpack://Handsontable/./src/plugins/contextMenu/menu/utils.js","webpack://Handsontable/./src/plugins/contextMenu/menu/shortcuts.js","webpack://Handsontable/./src/plugins/contextMenu/menu/defaultShortcutsList.js","webpack://Handsontable/./src/plugins/contextMenu/menu/menuItemRenderer.js","webpack://Handsontable/./src/plugins/contextMenu/contextMenu.scss?2292","webpack://Handsontable/./src/plugins/copyPaste/index.js","webpack://Handsontable/./src/plugins/copyPaste/copyPaste.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copy.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js","webpack://Handsontable/./src/plugins/copyPaste/contextMenuItem/cut.js","webpack://Handsontable/./src/plugins/copyPaste/pasteEvent.js","webpack://Handsontable/./src/plugins/copyPaste/clipboardData.js","webpack://Handsontable/./src/plugins/copyPaste/copyableRanges.js","webpack://Handsontable/./src/plugins/copyPaste/copyPaste.css?fe78","webpack://Handsontable/./src/plugins/customBorders/index.js","webpack://Handsontable/./src/plugins/customBorders/customBorders.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/index.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/bottom.js","webpack://Handsontable/./src/plugins/customBorders/utils.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/left.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/noBorders.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/right.js","webpack://Handsontable/./src/plugins/customBorders/contextMenuItem/top.js","webpack://Handsontable/./src/plugins/dragToScroll/index.js","webpack://Handsontable/./src/plugins/dragToScroll/dragToScroll.js","webpack://Handsontable/./src/plugins/dropdownMenu/index.js","webpack://Handsontable/./src/plugins/dropdownMenu/dropdownMenu.js","webpack://Handsontable/./src/plugins/dropdownMenu/dropdownMenu.scss?41d0","webpack://Handsontable/./src/plugins/exportFile/index.js","webpack://Handsontable/./src/plugins/exportFile/exportFile.js","webpack://Handsontable/./src/plugins/exportFile/dataProvider.js","webpack://Handsontable/./src/plugins/exportFile/typeFactory.js","webpack://Handsontable/./src/plugins/exportFile/types/csv.js","webpack://Handsontable/./src/plugins/exportFile/types/_base.js","webpack://Handsontable/./src/plugins/filters/index.js","webpack://Handsontable/./src/plugins/filters/filters.js","webpack://Handsontable/./src/plugins/filters/component/condition.js","webpack://Handsontable/./src/plugins/filters/component/_base.js","webpack://Handsontable/./src/plugins/filters/constants.js","webpack://Handsontable/./src/plugins/filters/conditionRegisterer.js","webpack://Handsontable/./src/plugins/filters/condition/none.js","webpack://Handsontable/./src/plugins/filters/condition/empty.js","webpack://Handsontable/./src/plugins/filters/condition/notEmpty.js","webpack://Handsontable/./src/plugins/filters/condition/equal.js","webpack://Handsontable/./src/plugins/filters/condition/notEqual.js","webpack://Handsontable/./src/plugins/filters/condition/greaterThan.js","webpack://Handsontable/./src/plugins/filters/condition/greaterThanOrEqual.js","webpack://Handsontable/./src/plugins/filters/condition/lessThan.js","webpack://Handsontable/./src/plugins/filters/condition/lessThanOrEqual.js","webpack://Handsontable/./src/plugins/filters/condition/between.js","webpack://Handsontable/./src/plugins/filters/condition/date/after.js","webpack://Handsontable/./src/plugins/filters/condition/date/before.js","webpack://Handsontable/./src/plugins/filters/condition/notBetween.js","webpack://Handsontable/./src/plugins/filters/condition/beginsWith.js","webpack://Handsontable/./src/plugins/filters/condition/endsWith.js","webpack://Handsontable/./src/plugins/filters/condition/contains.js","webpack://Handsontable/./src/plugins/filters/condition/notContains.js","webpack://Handsontable/./src/plugins/filters/condition/date/tomorrow.js","webpack://Handsontable/./src/plugins/filters/condition/date/today.js","webpack://Handsontable/./src/plugins/filters/condition/date/yesterday.js","webpack://Handsontable/./src/plugins/filters/condition/byValue.js","webpack://Handsontable/./src/plugins/filters/utils.js","webpack://Handsontable/./src/plugins/filters/condition/true.js","webpack://Handsontable/./src/plugins/filters/condition/false.js","webpack://Handsontable/./src/plugins/filters/logicalOperations/conjunction.js","webpack://Handsontable/./src/plugins/filters/logicalOperationRegisterer.js","webpack://Handsontable/./src/plugins/filters/logicalOperations/disjunction.js","webpack://Handsontable/./src/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js","webpack://Handsontable/./src/plugins/filters/ui/input.js","webpack://Handsontable/./src/plugins/filters/ui/_base.js","webpack://Handsontable/./src/plugins/filters/ui/select.js","webpack://Handsontable/./src/plugins/filters/component/operators.js","webpack://Handsontable/./src/plugins/filters/ui/radioInput.js","webpack://Handsontable/./src/plugins/filters/component/value.js","webpack://Handsontable/./src/plugins/filters/ui/multipleSelect.js","webpack://Handsontable/./src/plugins/filters/ui/link.js","webpack://Handsontable/./src/plugins/filters/component/actionBar.js","webpack://Handsontable/./src/plugins/filters/conditionCollection.js","webpack://Handsontable/./src/plugins/filters/dataFilter.js","webpack://Handsontable/./src/plugins/filters/conditionUpdateObserver.js","webpack://Handsontable/./src/plugins/filters/menu/focusController.js","webpack://Handsontable/./src/plugins/filters/menu/focusNavigator.js","webpack://Handsontable/./src/plugins/filters/filters.scss?c3f1","webpack://Handsontable/./src/plugins/formulas/index.js","webpack://Handsontable/./src/plugins/formulas/formulas.js","webpack://Handsontable/./src/plugins/formulas/engine/register.js","webpack://Handsontable/./src/plugins/formulas/engine/settings.js","webpack://Handsontable/./src/plugins/formulas/utils.js","webpack://Handsontable/./src/plugins/formulas/indexSyncer/index.js","webpack://Handsontable/./src/plugins/formulas/indexSyncer/axisSyncer.js","webpack://Handsontable/./src/helpers/moves.js","webpack://Handsontable/./src/plugins/hiddenColumns/index.js","webpack://Handsontable/./src/plugins/hiddenColumns/hiddenColumns.js","webpack://Handsontable/./src/plugins/hiddenColumns/contextMenuItem/hideColumn.js","webpack://Handsontable/./src/plugins/hiddenColumns/contextMenuItem/showColumn.js","webpack://Handsontable/./src/plugins/hiddenColumns/hiddenColumns.scss?a823","webpack://Handsontable/./src/plugins/hiddenRows/index.js","webpack://Handsontable/./src/plugins/hiddenRows/hiddenRows.js","webpack://Handsontable/./src/plugins/hiddenRows/contextMenuItem/hideRow.js","webpack://Handsontable/./src/plugins/hiddenRows/contextMenuItem/showRow.js","webpack://Handsontable/./src/plugins/hiddenRows/hiddenRows.css?996c","webpack://Handsontable/./src/plugins/manualColumnFreeze/index.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/manualColumnFreeze.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js","webpack://Handsontable/./src/plugins/manualColumnFreeze/manualColumnFreeze.css?d00b","webpack://Handsontable/./src/plugins/manualColumnMove/index.js","webpack://Handsontable/./src/plugins/manualColumnMove/manualColumnMove.js","webpack://Handsontable/./src/plugins/manualColumnMove/ui/backlight.js","webpack://Handsontable/./src/plugins/manualColumnMove/ui/_base.js","webpack://Handsontable/./src/plugins/manualColumnMove/ui/guideline.js","webpack://Handsontable/./src/plugins/manualColumnMove/manualColumnMove.css?1dcc","webpack://Handsontable/./src/plugins/manualColumnResize/index.js","webpack://Handsontable/./src/plugins/manualColumnResize/manualColumnResize.js","webpack://Handsontable/./src/plugins/manualRowMove/index.js","webpack://Handsontable/./src/plugins/manualRowMove/manualRowMove.js","webpack://Handsontable/./src/plugins/manualRowMove/ui/backlight.js","webpack://Handsontable/./src/plugins/manualRowMove/ui/_base.js","webpack://Handsontable/./src/plugins/manualRowMove/ui/guideline.js","webpack://Handsontable/./src/plugins/manualRowMove/manualRowMove.css?2792","webpack://Handsontable/./src/plugins/manualRowResize/index.js","webpack://Handsontable/./src/plugins/manualRowResize/manualRowResize.js","webpack://Handsontable/./src/plugins/mergeCells/index.js","webpack://Handsontable/./src/plugins/mergeCells/mergeCells.js","webpack://Handsontable/./src/plugins/mergeCells/cellsCollection.js","webpack://Handsontable/./src/plugins/mergeCells/cellCoords.js","webpack://Handsontable/./src/plugins/mergeCells/calculations/autofill.js","webpack://Handsontable/./src/plugins/mergeCells/calculations/selection.js","webpack://Handsontable/./src/plugins/mergeCells/contextMenuItem/toggleMerge.js","webpack://Handsontable/./src/plugins/mergeCells/mergeCells.css?f414","webpack://Handsontable/./src/plugins/mergeCells/focusOrder.js","webpack://Handsontable/./src/utils/dataStructures/linkedList.js","webpack://Handsontable/./src/plugins/mergeCells/renderer.js","webpack://Handsontable/./src/plugins/multiColumnSorting/index.js","webpack://Handsontable/./src/plugins/multiColumnSorting/multiColumnSorting.js","webpack://Handsontable/./src/plugins/multiColumnSorting/rootComparator.js","webpack://Handsontable/./src/plugins/multiColumnSorting/utils.js","webpack://Handsontable/./src/plugins/multiColumnSorting/domHelpers.js","webpack://Handsontable/./src/plugins/multiColumnSorting/multiColumnSorting.scss?c159","webpack://Handsontable/./src/plugins/multipleSelectionHandles/index.js","webpack://Handsontable/./src/plugins/multipleSelectionHandles/multipleSelectionHandles.js","webpack://Handsontable/./src/plugins/nestedHeaders/index.js","webpack://Handsontable/./src/plugins/nestedHeaders/nestedHeaders.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/index.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/sourceSettings.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/settingsNormalizer.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/utils.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/headersTree.js","webpack://Handsontable/./src/utils/dataStructures/tree.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/index.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/expand.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/utils/tree.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/hideColumn.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/nodeModifiers/showColumn.js","webpack://Handsontable/./src/plugins/nestedHeaders/stateManager/matrixGenerator.js","webpack://Handsontable/./src/plugins/nestedHeaders/utils/ghostTable.js","webpack://Handsontable/./src/plugins/nestedHeaders/nestedHeaders.css?b05f","webpack://Handsontable/./src/plugins/nestedRows/index.js","webpack://Handsontable/./src/plugins/nestedRows/nestedRows.js","webpack://Handsontable/./src/plugins/nestedRows/data/dataManager.js","webpack://Handsontable/./src/plugins/nestedRows/ui/collapsing.js","webpack://Handsontable/./src/plugins/nestedRows/ui/_base.js","webpack://Handsontable/./src/plugins/nestedRows/ui/headers.js","webpack://Handsontable/./src/plugins/nestedRows/ui/contextMenu.js","webpack://Handsontable/./src/plugins/nestedRows/utils/rowMoveController.js","webpack://Handsontable/./src/plugins/nestedRows/nestedRows.scss?c6f6","webpack://Handsontable/./src/plugins/persistentState/index.js","webpack://Handsontable/./src/plugins/persistentState/persistentState.js","webpack://Handsontable/./src/plugins/persistentState/storage.js","webpack://Handsontable/./src/plugins/search/index.js","webpack://Handsontable/./src/plugins/search/search.js","webpack://Handsontable/./src/plugins/touchScroll/index.js","webpack://Handsontable/./src/plugins/touchScroll/touchScroll.js","webpack://Handsontable/./src/plugins/trimRows/index.js","webpack://Handsontable/./src/plugins/trimRows/trimRows.js","webpack://Handsontable/./src/plugins/undoRedo/index.js","webpack://Handsontable/./src/plugins/undoRedo/undoRedo.js","webpack://Handsontable/../node_modules/core-js/modules/es.object.from-entries.js","webpack://Handsontable/../node_modules/core-js/internals/iterate.js","webpack://Handsontable/../node_modules/core-js/internals/is-array-iterator-method.js","webpack://Handsontable/../node_modules/core-js/internals/iterators.js","webpack://Handsontable/../node_modules/core-js/internals/get-iterator.js","webpack://Handsontable/../node_modules/core-js/internals/get-iterator-method.js","webpack://Handsontable/../node_modules/core-js/internals/create-property.js","webpack://Handsontable/./src/helpers/wrappers/jquery.js","webpack://Handsontable/webpack/bootstrap","webpack://Handsontable/webpack/runtime/make namespace object","webpack://Handsontable/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"dompurify\"), require(\"@handsontable/pikaday\"), require(\"moment\"), require(\"numbro\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Handsontable\", [\"dompurify\", \"@handsontable/pikaday\", \"moment\", \"numbro\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Handsontable\"] = factory(require(\"dompurify\"), require(\"@handsontable/pikaday\"), require(\"moment\"), require(\"numbro\"));\n\telse\n\t\troot[\"Handsontable\"] = factory(root[\"DOMPurify\"], root[\"Pikaday\"], root[\"moment\"], root[\"numbro\"]);\n})(typeof self !== 'undefined' ? self : this, (__WEBPACK_EXTERNAL_MODULE__133__, __WEBPACK_EXTERNAL_MODULE__402__, __WEBPACK_EXTERNAL_MODULE__135__, __WEBPACK_EXTERNAL_MODULE__429__) => {\nreturn ","function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import './css/bootstrap.css';\nimport './3rdparty/walkontable/css/walkontable.scss';\nimport './css/handsontable.scss';\nimport './css/mobile.handsontable.scss';\n\nimport Core from './core';\nimport { rootInstanceSymbol } from './utils/rootInstance';\nimport { metaSchemaFactory } from './dataMap';\nimport Hooks from './pluginHooks';\n\n// FIXME: Bug in eslint-plugin-import: https://github.com/benmosher/eslint-plugin-import/issues/1883\n/* eslint-disable import/named */\nimport {\n  dictionaryKeys,\n  getTranslatedPhrase,\n  registerLanguageDictionary,\n  getLanguagesDictionaries,\n  getLanguageDictionary\n} from './i18n/registry';\n/* eslint-enable import/named */\nimport { registerCellType } from './cellTypes/registry';\nimport { TextCellType } from './cellTypes/textType';\nimport { BaseEditor } from './editors/baseEditor';\nimport { CellCoords, CellRange } from './3rdparty/walkontable/src';\n\n// register default mandatory cell type for the Base package\nregisterCellType(TextCellType);\n\n// export the `BaseEditor` class to the Handsontable global namespace\nHandsontable.editors = {\n  BaseEditor\n};\n\n/**\n * @param {HTMLElement} rootElement The element to which the Handsontable instance is injected.\n * @param {object} userSettings The user defined options.\n * @returns {Core}\n */\nfunction Handsontable(rootElement, userSettings) {\n  const instance = new Core(rootElement, userSettings || {}, rootInstanceSymbol);\n\n  instance.init();\n\n  return instance;\n}\n\nHandsontable.Core = function(rootElement, userSettings = {}) {\n  return new Core(rootElement, userSettings, rootInstanceSymbol);\n};\n\nHandsontable.DefaultSettings = metaSchemaFactory();\nHandsontable.hooks = Hooks.getSingleton();\nHandsontable.CellCoords = CellCoords;\nHandsontable.CellRange = CellRange;\nHandsontable.packageName = 'handsontable';\nHandsontable.buildDate = process.env.HOT_BUILD_DATE;\nHandsontable.version = process.env.HOT_VERSION;\n\nHandsontable.languages = {\n  dictionaryKeys,\n  getLanguageDictionary,\n  getLanguagesDictionaries,\n  registerLanguageDictionary,\n  getTranslatedPhrase,\n};\n\nexport {\n  CellCoords,\n  CellRange,\n};\nexport default Handsontable;\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","import { addClass, empty, observeVisibilityChangeOnce, removeClass } from './helpers/dom/element';\nimport { isFunction } from './helpers/function';\nimport { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty } from './helpers/mixed';\nimport { isMobileBrowser, isIpadOS } from './helpers/browser';\nimport EditorManager from './editorManager';\nimport EventManager from './eventManager';\nimport {\n  deepClone,\n  duckSchema,\n  isObjectEqual,\n  isObject,\n  deepObjectSize,\n  hasOwnProperty,\n  createObjectPropListener,\n  objectEach\n} from './helpers/object';\nimport { FocusManager } from './focusManager';\nimport { arrayMap, arrayEach, arrayReduce, getDifferenceOfArrays, stringToArray, pivot } from './helpers/array';\nimport { instanceToHTML } from './utils/parseTable';\nimport { getPlugin, getPluginsNames } from './plugins/registry';\nimport { getRenderer } from './renderers/registry';\nimport { getEditor } from './editors/registry';\nimport { getValidator } from './validators/registry';\nimport { randomString, toUpperCaseFirst } from './helpers/string';\nimport { rangeEach, rangeEachReverse, isNumericLike } from './helpers/number';\nimport TableView from './tableView';\nimport DataSource from './dataMap/dataSource';\nimport { spreadsheetColumnLabel } from './helpers/data';\nimport { IndexMapper } from './translations';\nimport { registerAsRootInstance, hasValidParameter, isRootInstance } from './utils/rootInstance';\nimport { DEFAULT_COLUMN_WIDTH } from './3rdparty/walkontable/src';\nimport Hooks from './pluginHooks';\nimport { hasLanguageDictionary, getValidLanguageCode, getTranslatedPhrase } from './i18n/registry';\nimport { warnUserAboutLanguageRegistration, normalizeLanguageCode } from './i18n/utils';\nimport { Selection } from './selection';\nimport { MetaManager, DynamicCellMetaMod, ExtendMetaPropertiesMod, replaceData } from './dataMap';\nimport {\n  installFocusCatcher,\n  createViewportScroller,\n} from './core/index';\nimport { createUniqueMap } from './utils/dataStructures/uniqueMap';\nimport { createShortcutManager } from './shortcuts';\nimport { registerAllShortcutContexts } from './shortcutContexts';\n\nlet activeGuid = null;\n\n/**\n * Keeps the collection of the all Handsontable instances created on the same page. The\n * list is then used to trigger the \"afterUnlisten\" hook when the \"listen()\" method was\n * called on another instance.\n *\n * @type {Map<string, Core>}\n */\nconst foreignHotInstances = new Map();\n\n/**\n * A set of deprecated feature names.\n *\n * @type {Set<string>}\n */\n// eslint-disable-next-line no-unused-vars\nconst deprecationWarns = new Set();\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * Handsontable constructor.\n *\n * @core\n * @class Core\n * @description\n *\n * The `Handsontable` class (known as the `Core`) lets you modify the grid's behavior by using Handsontable's public API methods.\n *\n * ::: only-for react\n * To use these methods, associate a Handsontable instance with your instance\n * of the [`HotTable` component](@/guides/getting-started/installation/installation.md#_4-use-the-hottable-component),\n * by using React's `ref` feature (read more on the [Instance methods](@/guides/getting-started/react-methods/react-methods.md) page).\n * :::\n *\n * ## How to call a method\n *\n * ::: only-for javascript\n * ```js\n * // create a Handsontable instance\n * const hot = new Handsontable(document.getElementById('example'), options);\n *\n * // call a method\n * hot.setDataAtCell(0, 0, 'new value');\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * import { useRef } from 'react';\n *\n * const hotTableComponent = useRef(null);\n *\n * <HotTable\n *   // associate your `HotTable` component with a Handsontable instance\n *   ref={hotTableComponent}\n *   settings={options}\n * />\n *\n * // access the Handsontable instance, under the `.current.hotInstance` property\n * // call a method\n * hotTableComponent.current.hotInstance.setDataAtCell(0, 0, 'new value');\n * ```\n * :::\n *\n * @param {HTMLElement} rootElement The element to which the Handsontable instance is injected.\n * @param {object} userSettings The user defined options.\n * @param {boolean} [rootInstanceSymbol=false] Indicates if the instance is root of all later instances created.\n */\nexport default function Core(rootElement, userSettings, rootInstanceSymbol = false) {\n  let instance = this;\n\n  const eventManager = new EventManager(instance);\n  let datamap;\n  let dataSource;\n  let grid;\n  let editorManager;\n  let focusManager;\n  let viewportScroller;\n  let firstRun = true;\n\n  if (hasValidParameter(rootInstanceSymbol)) {\n    registerAsRootInstance(this);\n  }\n\n  // TODO: check if references to DOM elements should be move to UI layer (Walkontable)\n  /**\n   * Reference to the container element.\n   *\n   * @private\n   * @type {HTMLElement}\n   */\n  this.rootElement = rootElement;\n  /**\n   * The nearest document over container.\n   *\n   * @private\n   * @type {Document}\n   */\n  this.rootDocument = rootElement.ownerDocument;\n  /**\n   * Window object over container's document.\n   *\n   * @private\n   * @type {Window}\n   */\n  this.rootWindow = this.rootDocument.defaultView;\n  /**\n   * A boolean to tell if the Handsontable has been fully destroyed. This is set to `true`\n   * after `afterDestroy` hook is called.\n   *\n   * @memberof Core#\n   * @member isDestroyed\n   * @type {boolean}\n   */\n  this.isDestroyed = false;\n  /**\n   * The counter determines how many times the render suspending was called. It allows\n   * tracking the nested suspending calls. For each render suspend resuming call the\n   * counter is decremented. The value equal to 0 means the render suspending feature\n   * is disabled.\n   *\n   * @private\n   * @type {number}\n   */\n  this.renderSuspendedCounter = 0;\n  /**\n   * The counter determines how many times the execution suspending was called. It allows\n   * tracking the nested suspending calls. For each execution suspend resuming call the\n   * counter is decremented. The value equal to 0 means the execution suspending feature\n   * is disabled.\n   *\n   * @private\n   * @type {number}\n   */\n  this.executionSuspendedCounter = 0;\n\n  const layoutDirection = userSettings?.layoutDirection ?? 'inherit';\n  const rootElementDirection = ['rtl', 'ltr'].includes(layoutDirection) ?\n    layoutDirection : this.rootWindow.getComputedStyle(this.rootElement).direction;\n\n  this.rootElement.setAttribute('dir', rootElementDirection);\n\n  /**\n   * Checks if the grid is rendered using the right-to-left layout direction.\n   *\n   * @since 12.0.0\n   * @memberof Core#\n   * @function isRtl\n   * @returns {boolean} True if RTL.\n   */\n  this.isRtl = function() {\n    return rootElementDirection === 'rtl';\n  };\n\n  /**\n   * Checks if the grid is rendered using the left-to-right layout direction.\n   *\n   * @since 12.0.0\n   * @memberof Core#\n   * @function isLtr\n   * @returns {boolean} True if LTR.\n   */\n  this.isLtr = function() {\n    return !instance.isRtl();\n  };\n\n  /**\n   * Returns 1 for LTR; -1 for RTL. Useful for calculations.\n   *\n   * @since 12.0.0\n   * @memberof Core#\n   * @function getDirectionFactor\n   * @returns {number} Returns 1 for LTR; -1 for RTL.\n   */\n  this.getDirectionFactor = function() {\n    return instance.isLtr() ? 1 : -1;\n  };\n\n  userSettings.language = getValidLanguageCode(userSettings.language);\n\n  const metaManager = new MetaManager(instance, userSettings, [\n    DynamicCellMetaMod,\n    ExtendMetaPropertiesMod,\n  ]);\n  const tableMeta = metaManager.getTableMeta();\n  const globalMeta = metaManager.getGlobalMeta();\n  const pluginsRegistry = createUniqueMap();\n\n  this.container = this.rootDocument.createElement('div');\n  this.renderCall = false;\n\n  rootElement.insertBefore(this.container, rootElement.firstChild);\n\n  if (isRootInstance(this)) {\n    _injectProductInfo(userSettings.licenseKey, rootElement);\n  }\n\n  this.guid = `ht_${randomString()}`; // this is the namespace for global events\n\n  foreignHotInstances.set(this.guid, this);\n\n  /**\n   * Instance of index mapper which is responsible for managing the column indexes.\n   *\n   * @memberof Core#\n   * @member columnIndexMapper\n   * @type {IndexMapper}\n   */\n  this.columnIndexMapper = new IndexMapper();\n  /**\n   * Instance of index mapper which is responsible for managing the row indexes.\n   *\n   * @memberof Core#\n   * @member rowIndexMapper\n   * @type {IndexMapper}\n   */\n  this.rowIndexMapper = new IndexMapper();\n\n  this.columnIndexMapper.addLocalHook('indexesSequenceChange', (source) => {\n    instance.runHooks('afterColumnSequenceChange', source);\n  });\n\n  this.rowIndexMapper.addLocalHook('indexesSequenceChange', (source) => {\n    instance.runHooks('afterRowSequenceChange', source);\n  });\n\n  dataSource = new DataSource(instance);\n\n  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {\n    this.rootElement.id = this.guid; // if root element does not have an id, assign a random id\n  }\n\n  const visualToRenderableCoords = (coords) => {\n    const { row: visualRow, col: visualColumn } = coords;\n\n    return instance._createCellCoords(\n      // We just store indexes for rows and columns without headers.\n      visualRow >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(visualRow) : visualRow,\n      visualColumn >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumn) : visualColumn\n    );\n  };\n\n  const renderableToVisualCoords = (coords) => {\n    const { row: renderableRow, col: renderableColumn } = coords;\n\n    return instance._createCellCoords(\n      // We just store indexes for rows and columns without headers.\n      renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow,\n      renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len\n    );\n  };\n\n  const findFirstNonHiddenRenderableRow = (visualRowFrom, visualRowTo) => {\n    const dir = visualRowTo > visualRowFrom ? 1 : -1;\n    const minIndex = Math.min(visualRowFrom, visualRowTo);\n    const maxIndex = Math.max(visualRowFrom, visualRowTo);\n    const rowIndex = instance.rowIndexMapper.getNearestNotHiddenIndex(visualRowFrom, dir);\n\n    if (rowIndex === null || dir === 1 && rowIndex > maxIndex || dir === -1 && rowIndex < minIndex) {\n      return null;\n    }\n\n    return rowIndex >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(rowIndex) : rowIndex;\n  };\n\n  const findFirstNonHiddenRenderableColumn = (visualColumnFrom, visualColumnTo) => {\n    const dir = visualColumnTo > visualColumnFrom ? 1 : -1;\n    const minIndex = Math.min(visualColumnFrom, visualColumnTo);\n    const maxIndex = Math.max(visualColumnFrom, visualColumnTo);\n    const columnIndex = instance.columnIndexMapper.getNearestNotHiddenIndex(visualColumnFrom, dir);\n\n    if (columnIndex === null || dir === 1 && columnIndex > maxIndex || dir === -1 && columnIndex < minIndex) {\n      return null;\n    }\n\n    return columnIndex >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(columnIndex) : columnIndex;\n  };\n\n  let selection = new Selection(tableMeta, {\n    rowIndexMapper: instance.rowIndexMapper,\n    columnIndexMapper: instance.columnIndexMapper,\n    countCols: () => instance.countCols(),\n    countRows: () => instance.countRows(),\n    propToCol: prop => datamap.propToCol(prop),\n    isEditorOpened: () => (instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false),\n    countRenderableColumns: () => this.view.countRenderableColumns(),\n    countRenderableRows: () => this.view.countRenderableRows(),\n    countRowHeaders: () => this.countRowHeaders(),\n    countColHeaders: () => this.countColHeaders(),\n    countRenderableRowsInRange: (...args) => this.view.countRenderableRowsInRange(...args),\n    countRenderableColumnsInRange: (...args) => this.view.countRenderableColumnsInRange(...args),\n    getShortcutManager: () => instance.getShortcutManager(),\n    createCellCoords: (row, column) => instance._createCellCoords(row, column),\n    createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),\n    visualToRenderableCoords,\n    renderableToVisualCoords,\n    findFirstNonHiddenRenderableRow,\n    findFirstNonHiddenRenderableColumn,\n    isDisabledCellSelection: (visualRow, visualColumn) => {\n      if (visualRow < 0 || visualColumn < 0) {\n        return instance.getSettings().disableVisualSelection;\n      }\n\n      return instance.getCellMeta(visualRow, visualColumn).disableVisualSelection;\n    }\n  });\n\n  this.selection = selection;\n\n  const onIndexMapperCacheUpdate = ({ hiddenIndexesChanged }) => {\n    if (hiddenIndexesChanged) {\n      this.selection.commit();\n    }\n  };\n\n  this.columnIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);\n  this.rowIndexMapper.addLocalHook('cacheUpdated', onIndexMapperCacheUpdate);\n\n  this.selection.addLocalHook('afterSetRangeEnd', (cellCoords, isLastSelectionLayer) => {\n    const preventScrolling = createObjectPropListener(false);\n    const selectionRange = this.selection.getSelectedRange();\n    const { from, to } = selectionRange.current();\n    const selectionLayerLevel = selectionRange.size() - 1;\n\n    this.runHooks('afterSelection',\n      from.row,\n      from.col,\n      to.row,\n      to.col,\n      preventScrolling,\n      selectionLayerLevel\n    );\n    this.runHooks('afterSelectionByProp',\n      from.row,\n      instance.colToProp(from.col),\n      to.row,\n      instance.colToProp(to.col),\n      preventScrolling,\n      selectionLayerLevel\n    );\n\n    if (\n      isLastSelectionLayer &&\n      (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value)\n    ) {\n      viewportScroller.scrollTo(cellCoords);\n    }\n\n    const isSelectedByRowHeader = selection.isSelectedByRowHeader();\n    const isSelectedByColumnHeader = selection.isSelectedByColumnHeader();\n\n    // @TODO: These CSS classes are no longer needed anymore. They are used only as a indicator of the selected\n    // rows/columns in the MergedCells plugin (via border.js#L520 in the walkontable module). After fixing\n    // the Border class this should be removed.\n    if (isSelectedByRowHeader && isSelectedByColumnHeader) {\n      addClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n    } else if (isSelectedByRowHeader) {\n      removeClass(this.rootElement, 'ht__selection--columns');\n      addClass(this.rootElement, 'ht__selection--rows');\n\n    } else if (isSelectedByColumnHeader) {\n      removeClass(this.rootElement, 'ht__selection--rows');\n      addClass(this.rootElement, 'ht__selection--columns');\n\n    } else {\n      removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n    }\n\n    if (selection.getSelectionSource() !== 'shift') {\n      editorManager.closeEditor(null);\n    }\n\n    instance.view.render();\n    editorManager.prepareEditor();\n  });\n\n  this.selection.addLocalHook('beforeSetFocus', (cellCoords) => {\n    this.runHooks('beforeSelectionFocusSet', cellCoords.row, cellCoords.col);\n  });\n\n  this.selection.addLocalHook('afterSetFocus', (cellCoords) => {\n    const preventScrolling = createObjectPropListener(false);\n\n    this.runHooks('afterSelectionFocusSet', cellCoords.row, cellCoords.col, preventScrolling);\n\n    if (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value) {\n      viewportScroller.scrollTo(cellCoords);\n    }\n\n    editorManager.closeEditor();\n    instance.view.render();\n    editorManager.prepareEditor();\n  });\n\n  this.selection.addLocalHook('afterSelectionFinished', (cellRanges) => {\n    const selectionLayerLevel = cellRanges.length - 1;\n    const { from, to } = cellRanges[selectionLayerLevel];\n\n    this.runHooks('afterSelectionEnd',\n      from.row, from.col, to.row, to.col, selectionLayerLevel);\n    this.runHooks('afterSelectionEndByProp',\n      from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);\n  });\n\n  this.selection.addLocalHook('afterIsMultipleSelection', (isMultiple) => {\n    const changedIsMultiple = this.runHooks('afterIsMultipleSelection', isMultiple.value);\n\n    if (isMultiple.value) {\n      isMultiple.value = changedIsMultiple;\n    }\n  });\n\n  this.selection.addLocalHook('afterDeselect', () => {\n    editorManager.closeEditor();\n    instance.view.render();\n\n    removeClass(this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n    this.runHooks('afterDeselect');\n  });\n\n  this.selection\n    .addLocalHook('beforeHighlightSet', () => this.runHooks('beforeSelectionHighlightSet'))\n    .addLocalHook('beforeSetRangeStart', (...args) => this.runHooks('beforeSetRangeStart', ...args))\n    .addLocalHook('beforeSetRangeStartOnly', (...args) => this.runHooks('beforeSetRangeStartOnly', ...args))\n    .addLocalHook('beforeSetRangeEnd', (...args) => this.runHooks('beforeSetRangeEnd', ...args))\n    .addLocalHook('beforeSelectColumns', (...args) => this.runHooks('beforeSelectColumns', ...args))\n    .addLocalHook('afterSelectColumns', (...args) => this.runHooks('afterSelectColumns', ...args))\n    .addLocalHook('beforeSelectRows', (...args) => this.runHooks('beforeSelectRows', ...args))\n    .addLocalHook('afterSelectRows', (...args) => this.runHooks('afterSelectRows', ...args))\n    .addLocalHook('beforeModifyTransformStart', (...args) => this.runHooks('modifyTransformStart', ...args))\n    .addLocalHook('afterModifyTransformStart', (...args) => this.runHooks('afterModifyTransformStart', ...args))\n    .addLocalHook('beforeModifyTransformFocus', (...args) => this.runHooks('modifyTransformFocus', ...args))\n    .addLocalHook('afterModifyTransformFocus', (...args) => this.runHooks('afterModifyTransformFocus', ...args))\n    .addLocalHook('beforeModifyTransformEnd', (...args) => this.runHooks('modifyTransformEnd', ...args))\n    .addLocalHook('afterModifyTransformEnd', (...args) => this.runHooks('afterModifyTransformEnd', ...args))\n    .addLocalHook('beforeRowWrap', (...args) => this.runHooks('beforeRowWrap', ...args))\n    .addLocalHook('beforeColumnWrap', (...args) => this.runHooks('beforeColumnWrap', ...args))\n    .addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto'))\n    .addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));\n\n  grid = {\n    /**\n     * Inserts or removes rows and columns.\n     *\n     * @private\n     * @param {string} action Possible values: \"insert_row_above\", \"insert_row_below\", \"insert_col_start\", \"insert_col_end\",\n     *                        \"remove_row\", \"remove_col\".\n     * @param {number|Array} index Row or column visual index which from the alter action will be triggered.\n     *                             Alter actions such as \"remove_row\" and \"remove_col\" support array indexes in the\n     *                             format `[[index, amount], [index, amount]...]` this can be used to remove\n     *                             non-consecutive columns or rows in one call.\n     * @param {number} [amount=1] Amount of rows or columns to remove.\n     * @param {string} [source] Optional. Source of hook runner.\n     * @param {boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows.\n     */\n    alter(action, index, amount = 1, source, keepEmptyRows) {\n      const normalizeIndexesGroup = (indexes) => {\n        if (indexes.length === 0) {\n          return [];\n        }\n\n        const sortedIndexes = [...indexes];\n\n        // Sort the indexes in ascending order.\n        sortedIndexes.sort(([indexA], [indexB]) => {\n          if (indexA === indexB) {\n            return 0;\n          }\n\n          return indexA > indexB ? 1 : -1;\n        });\n\n        // Normalize the {index, amount} groups into bigger groups.\n        const normalizedIndexes = arrayReduce(sortedIndexes, (acc, [groupIndex, groupAmount]) => {\n          const previousItem = acc[acc.length - 1];\n          const [prevIndex, prevAmount] = previousItem;\n          const prevLastIndex = prevIndex + prevAmount;\n\n          if (groupIndex <= prevLastIndex) {\n            const amountToAdd = Math.max(groupAmount - (prevLastIndex - groupIndex), 0);\n\n            previousItem[1] += amountToAdd;\n          } else {\n            acc.push([groupIndex, groupAmount]);\n          }\n\n          return acc;\n        }, [sortedIndexes[0]]);\n\n        return normalizedIndexes;\n      };\n\n      /* eslint-disable no-case-declarations */\n      switch (action) {\n        case 'insert_row_below':\n        case 'insert_row_above':\n          const numberOfSourceRows = instance.countSourceRows();\n\n          if (tableMeta.maxRows === numberOfSourceRows) {\n            return;\n          }\n\n          // `above` is the default behavior for creating new rows\n          const insertRowMode = action === 'insert_row_below' ? 'below' : 'above';\n\n          // Calling the `insert_row_above` action adds a new row at the beginning of the data set.\n          // eslint-disable-next-line no-param-reassign\n          index = index ?? (insertRowMode === 'below' ? numberOfSourceRows : 0);\n\n          const {\n            delta: rowDelta,\n            startPhysicalIndex: startRowPhysicalIndex,\n          } = datamap.createRow(index, amount, { source, mode: insertRowMode });\n\n          selection.shiftRows(instance.toVisualRow(startRowPhysicalIndex), rowDelta);\n          break;\n\n        case 'insert_col_start':\n        case 'insert_col_end':\n          // \"start\" is a default behavior for creating new columns\n          const insertColumnMode = action === 'insert_col_end' ? 'end' : 'start';\n\n          // Calling the `insert_col_start` action adds a new column to the left of the data set.\n          // eslint-disable-next-line no-param-reassign\n          index = index ?? (insertColumnMode === 'end' ? instance.countSourceCols() : 0);\n\n          const {\n            delta: colDelta,\n            startPhysicalIndex: startColumnPhysicalIndex,\n          } = datamap.createCol(index, amount, { source, mode: insertColumnMode });\n\n          if (colDelta) {\n            if (Array.isArray(tableMeta.colHeaders)) {\n              const spliceArray = [instance.toVisualColumn(startColumnPhysicalIndex), 0];\n\n              spliceArray.length += colDelta; // inserts empty (undefined) elements at the end of an array\n              Array.prototype.splice.apply(tableMeta.colHeaders, spliceArray); // inserts empty (undefined) elements into the colHeader array\n            }\n\n            selection.shiftColumns(instance.toVisualColumn(startColumnPhysicalIndex), colDelta);\n          }\n          break;\n\n        case 'remove_row':\n\n          const removeRow = (indexes) => {\n            let offset = 0;\n\n            // Normalize the {index, amount} groups into bigger groups.\n            arrayEach(indexes, ([groupIndex, groupAmount]) => {\n              const calcIndex = isEmpty(groupIndex) ? instance.countRows() - 1 : Math.max(groupIndex - offset, 0);\n\n              // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              }\n\n              // TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeRow breaks the removing functionality.\n              const wasRemoved = datamap.removeRow(groupIndex, groupAmount, source);\n\n              if (!wasRemoved) {\n                return;\n              }\n\n              if (selection.isSelected()) {\n                const { row } = instance.getSelectedRangeLast().highlight;\n\n                if (row >= groupIndex && row <= groupIndex + groupAmount - 1) {\n                  editorManager.closeEditor(true);\n                }\n              }\n\n              const totalRows = instance.countRows();\n\n              if (totalRows === 0) {\n                selection.deselect();\n\n              } else if (source === 'ContextMenu.removeRow') {\n                selection.refresh();\n\n              } else {\n                selection.shiftRows(groupIndex, -groupAmount);\n              }\n\n              const fixedRowsTop = tableMeta.fixedRowsTop;\n\n              if (fixedRowsTop >= calcIndex + 1) {\n                tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);\n              }\n\n              const fixedRowsBottom = tableMeta.fixedRowsBottom;\n\n              if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {\n                tableMeta.fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeRow(normalizeIndexesGroup(index));\n          } else {\n            removeRow([[index, amount]]);\n          }\n          break;\n\n        case 'remove_col':\n\n          const removeCol = (indexes) => {\n            let offset = 0;\n\n            // Normalize the {index, amount} groups into bigger groups.\n            arrayEach(indexes, ([groupIndex, groupAmount]) => {\n              const calcIndex = isEmpty(groupIndex) ? instance.countCols() - 1 : Math.max(groupIndex - offset, 0);\n              let physicalColumnIndex = instance.toPhysicalColumn(calcIndex);\n\n              // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              }\n\n              // TODO: for datamap.removeCol index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeCol breaks the removing functionality.\n              const wasRemoved = datamap.removeCol(groupIndex, groupAmount, source);\n\n              if (!wasRemoved) {\n                return;\n              }\n\n              if (selection.isSelected()) {\n                const { col } = instance.getSelectedRangeLast().highlight;\n\n                if (col >= groupIndex && col <= groupIndex + groupAmount - 1) {\n                  editorManager.closeEditor(true);\n                }\n              }\n\n              const totalColumns = instance.countCols();\n\n              if (totalColumns === 0) {\n                selection.deselect();\n\n              } else if (source === 'ContextMenu.removeColumn') {\n                selection.refresh();\n\n              } else {\n                selection.shiftColumns(groupIndex, -groupAmount);\n              }\n\n              const fixedColumnsStart = tableMeta.fixedColumnsStart;\n\n              if (fixedColumnsStart >= calcIndex + 1) {\n                tableMeta.fixedColumnsStart -= Math.min(groupAmount, fixedColumnsStart - calcIndex);\n              }\n\n              if (Array.isArray(tableMeta.colHeaders)) {\n                if (typeof physicalColumnIndex === 'undefined') {\n                  physicalColumnIndex = -1;\n                }\n                tableMeta.colHeaders.splice(physicalColumnIndex, groupAmount);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeCol(normalizeIndexesGroup(index));\n          } else {\n            removeCol([[index, amount]]);\n          }\n          break;\n        default:\n          throw new Error(`There is no such action \"${action}\"`);\n      }\n\n      instance.view.render();\n\n      if (!keepEmptyRows) {\n        grid.adjustRowsAndCols(); // makes sure that we did not add rows that will be removed in next refresh\n      }\n    },\n\n    /**\n     * Makes sure there are empty rows at the bottom of the table.\n     *\n     * @private\n     */\n    adjustRowsAndCols() {\n      const minRows = tableMeta.minRows;\n      const minSpareRows = tableMeta.minSpareRows;\n      const minCols = tableMeta.minCols;\n      const minSpareCols = tableMeta.minSpareCols;\n\n      if (minRows) {\n        // should I add empty rows to data source to meet minRows?\n        const nrOfRows = instance.countRows();\n\n        if (nrOfRows < minRows) {\n          // The synchronization with cell meta is not desired here. For `minRows` option,\n          // we don't want to touch/shift cell meta objects.\n          datamap.createRow(nrOfRows, minRows - nrOfRows, { source: 'auto' });\n        }\n      }\n      if (minSpareRows) {\n        const emptyRows = instance.countEmptyRows(true);\n\n        // should I add empty rows to meet minSpareRows?\n        if (emptyRows < minSpareRows) {\n          const emptyRowsMissing = minSpareRows - emptyRows;\n          const rowsToCreate = Math.min(emptyRowsMissing, tableMeta.maxRows - instance.countSourceRows());\n\n          // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n          datamap.createRow(instance.countRows(), rowsToCreate, { source: 'auto' });\n        }\n      }\n      {\n        let emptyCols;\n\n        // count currently empty cols\n        if (minCols || minSpareCols) {\n          emptyCols = instance.countEmptyCols(true);\n        }\n\n        let nrOfColumns = instance.countCols();\n\n        // should I add empty cols to meet minCols?\n        if (minCols && !tableMeta.columns && nrOfColumns < minCols) {\n          // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n          const colsToCreate = minCols - nrOfColumns;\n\n          emptyCols += colsToCreate;\n\n          datamap.createCol(nrOfColumns, colsToCreate, { source: 'auto' });\n        }\n        // should I add empty cols to meet minSpareCols?\n        if (minSpareCols && !tableMeta.columns && instance.dataType === 'array' &&\n          emptyCols < minSpareCols) {\n          nrOfColumns = instance.countCols();\n          const emptyColsMissing = minSpareCols - emptyCols;\n          const colsToCreate = Math.min(emptyColsMissing, tableMeta.maxCols - nrOfColumns);\n\n          // The synchronization with cell meta is not desired here. For `minSpareRows` option,\n          // we don't want to touch/shift cell meta objects.\n          datamap.createCol(nrOfColumns, colsToCreate, { source: 'auto' });\n        }\n      }\n\n      if (instance.view) {\n        instance.view.adjustElementsSize();\n      }\n    },\n\n    /**\n     * Populate the data from the provided 2d array from the given cell coordinates.\n     *\n     * @private\n     * @param {object} start Start selection position. Visual indexes.\n     * @param {Array} input 2d data array.\n     * @param {object} [end] End selection position (only for drag-down mode). Visual indexes.\n     * @param {string} [source=\"populateFromArray\"] Source information string.\n     * @param {string} [method=\"overwrite\"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`.\n     * @returns {object|undefined} Ending td in pasted area (only if any cell was changed).\n     */\n    populateFromArray(start, input, end, source, method) {\n      let r;\n      let rlen;\n      let c;\n      let clen;\n      const setData = [];\n      const current = {};\n      const newDataByColumns = [];\n      const startRow = start.row;\n      const startColumn = start.col;\n\n      rlen = input.length;\n\n      if (rlen === 0) {\n        return false;\n      }\n\n      let columnsPopulationEnd = 0;\n      let rowsPopulationEnd = 0;\n\n      if (isObject(end)) {\n        columnsPopulationEnd = end.col - startColumn + 1;\n        rowsPopulationEnd = end.row - startRow + 1;\n      }\n\n      // insert data with specified pasteMode method\n      switch (method) {\n        case 'shift_down':\n          // translate data from a list of rows to a list of columns\n          const populatedDataByColumns = pivot(input);\n          const numberOfDataColumns = populatedDataByColumns.length;\n          // method's argument can extend the range of data population (data would be repeated)\n          const numberOfColumnsToPopulate = Math.max(numberOfDataColumns, columnsPopulationEnd);\n          const pushedDownDataByRows = instance.getData().slice(startRow);\n\n          // translate data from a list of rows to a list of columns\n          const pushedDownDataByColumns = pivot(pushedDownDataByRows)\n            .slice(startColumn, startColumn + numberOfColumnsToPopulate);\n\n          for (c = 0; c < numberOfColumnsToPopulate; c += 1) {\n            if (c < numberOfDataColumns) {\n              for (r = 0, rlen = populatedDataByColumns[c].length; r < rowsPopulationEnd - rlen; r += 1) {\n                // repeating data for rows\n                populatedDataByColumns[c].push(populatedDataByColumns[c][r % rlen]);\n              }\n\n              if (c < pushedDownDataByColumns.length) {\n                newDataByColumns.push(populatedDataByColumns[c].concat(pushedDownDataByColumns[c]));\n\n              } else {\n                // if before data population, there was no data in the column\n                // we fill the required rows' newly-created cells with `null` values\n                newDataByColumns.push(populatedDataByColumns[c].concat(\n                  new Array(pushedDownDataByRows.length).fill(null)));\n              }\n\n            } else {\n              // Repeating data for columns.\n              newDataByColumns.push(populatedDataByColumns[c % numberOfDataColumns].concat(pushedDownDataByColumns[c]));\n            }\n          }\n\n          instance.populateFromArray(startRow, startColumn, pivot(newDataByColumns));\n\n          break;\n\n        case 'shift_right':\n          const numberOfDataRows = input.length;\n          // method's argument can extend the range of data population (data would be repeated)\n          const numberOfRowsToPopulate = Math.max(numberOfDataRows, rowsPopulationEnd);\n          const pushedRightDataByRows = instance.getData().slice(startRow).map(rowData => rowData.slice(startColumn));\n\n          for (r = 0; r < numberOfRowsToPopulate; r += 1) {\n            if (r < numberOfDataRows) {\n              for (c = 0, clen = input[r].length; c < columnsPopulationEnd - clen; c += 1) {\n                // repeating data for rows\n                input[r].push(input[r][c % clen]);\n              }\n\n              if (r < pushedRightDataByRows.length) {\n                for (let i = 0; i < pushedRightDataByRows[r].length; i += 1) {\n                  input[r].push(pushedRightDataByRows[r][i]);\n                }\n\n              } else {\n                // if before data population, there was no data in the row\n                // we fill the required columns' newly-created cells with `null` values\n                input[r].push(...new Array(pushedRightDataByRows[0].length).fill(null));\n              }\n\n            } else {\n              // Repeating data for columns.\n              input.push(input[r % rlen].slice(0, numberOfRowsToPopulate).concat(pushedRightDataByRows[r]));\n            }\n          }\n\n          instance.populateFromArray(startRow, startColumn, input);\n\n          break;\n\n        case 'overwrite':\n        default:\n          // overwrite and other not specified options\n          current.row = start.row;\n          current.col = start.col;\n\n          let skippedRow = 0;\n          let skippedColumn = 0;\n          let pushData = true;\n          let cellMeta;\n\n          const getInputValue = function getInputValue(row, col = null) {\n            const rowValue = input[row % input.length];\n\n            if (col !== null) {\n              return rowValue[col % rowValue.length];\n            }\n\n            return rowValue;\n          };\n          const rowInputLength = input.length;\n          const rowSelectionLength = end ? end.row - start.row + 1 : 0;\n\n          if (end) {\n            rlen = rowSelectionLength;\n          } else {\n            rlen = Math.max(rowInputLength, rowSelectionLength);\n          }\n          for (r = 0; r < rlen; r++) {\n            if ((end && current.row > end.row && rowSelectionLength > rowInputLength) ||\n                (!tableMeta.allowInsertRow && current.row > instance.countRows() - 1) ||\n                (current.row >= tableMeta.maxRows)) {\n              break;\n            }\n            const visualRow = r - skippedRow;\n            const colInputLength = getInputValue(visualRow).length;\n            const colSelectionLength = end ? end.col - start.col + 1 : 0;\n\n            if (end) {\n              clen = colSelectionLength;\n            } else {\n              clen = Math.max(colInputLength, colSelectionLength);\n            }\n            current.col = start.col;\n            cellMeta = instance.getCellMeta(current.row, current.col);\n\n            if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipRowOnPaste) {\n              skippedRow += 1;\n              current.row += 1;\n              rlen += 1;\n              /* eslint-disable no-continue */\n              continue;\n            }\n            skippedColumn = 0;\n\n            for (c = 0; c < clen; c++) {\n              if ((end && current.col > end.col && colSelectionLength > colInputLength) ||\n                  (!tableMeta.allowInsertColumn && current.col > instance.countCols() - 1) ||\n                  (current.col >= tableMeta.maxCols)) {\n                break;\n              }\n              cellMeta = instance.getCellMeta(current.row, current.col);\n\n              if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipColumnOnPaste) {\n                skippedColumn += 1;\n                current.col += 1;\n                clen += 1;\n                continue;\n              }\n\n              if (cellMeta.readOnly && source !== 'UndoRedo.undo') {\n                current.col += 1;\n                /* eslint-disable no-continue */\n                continue;\n              }\n\n              const visualColumn = c - skippedColumn;\n              let value = getInputValue(visualRow, visualColumn);\n              let orgValue = instance.getDataAtCell(current.row, current.col);\n\n              if (value !== null && typeof value === 'object') {\n                // when 'value' is array and 'orgValue' is null, set 'orgValue' to\n                // an empty array so that the null value can be compared to 'value'\n                // as an empty value for the array context\n                if (Array.isArray(value) && orgValue === null) orgValue = [];\n\n                if (orgValue === null || typeof orgValue !== 'object') {\n                  pushData = false;\n\n                } else {\n                  const orgValueSchema = duckSchema(Array.isArray(orgValue) ? orgValue : (orgValue[0] || orgValue));\n                  const valueSchema = duckSchema(Array.isArray(value) ? value : (value[0] || value));\n\n                  // Allow overwriting values with the same object-based schema or any array-based schema.\n                  if (\n                    isObjectEqual(orgValueSchema, valueSchema) ||\n                    (Array.isArray(orgValueSchema) && Array.isArray(valueSchema))\n                  ) {\n                    value = deepClone(value);\n\n                  } else {\n                    pushData = false;\n                  }\n                }\n\n              } else if (orgValue !== null && typeof orgValue === 'object') {\n                pushData = false;\n              }\n              if (pushData) {\n                setData.push([current.row, current.col, value]);\n              }\n              pushData = true;\n              current.col += 1;\n            }\n            current.row += 1;\n          }\n          instance.setDataAtCell(setData, null, null, source || 'populateFromArray');\n          break;\n      }\n    },\n  };\n\n  /**\n   * Internal function to set `language` key of settings.\n   *\n   * @private\n   * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n   * @fires Hooks#afterLanguageChange\n   */\n  function setLanguage(languageCode) {\n    const normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n    if (hasLanguageDictionary(normalizedLanguageCode)) {\n      instance.runHooks('beforeLanguageChange', normalizedLanguageCode);\n\n      globalMeta.language = normalizedLanguageCode;\n\n      instance.runHooks('afterLanguageChange', normalizedLanguageCode);\n\n    } else {\n      warnUserAboutLanguageRegistration(languageCode);\n    }\n  }\n\n  /**\n   * Internal function to set `className` or `tableClassName`, depending on the key from the settings object.\n   *\n   * @private\n   * @param {string} className `className` or `tableClassName` from the key in the settings object.\n   * @param {string|string[]} classSettings String or array of strings. Contains class name(s) from settings object.\n   */\n  function setClassName(className, classSettings) {\n    const element = className === 'className' ? instance.rootElement : instance.table;\n\n    if (firstRun) {\n      addClass(element, classSettings);\n\n    } else {\n      let globalMetaSettingsArray = [];\n      let settingsArray = [];\n\n      if (globalMeta[className]) {\n        globalMetaSettingsArray = Array.isArray(globalMeta[className]) ?\n          globalMeta[className] : stringToArray(globalMeta[className]);\n      }\n\n      if (classSettings) {\n        settingsArray = Array.isArray(classSettings) ? classSettings : stringToArray(classSettings);\n      }\n\n      const classNameToRemove = getDifferenceOfArrays(globalMetaSettingsArray, settingsArray);\n      const classNameToAdd = getDifferenceOfArrays(settingsArray, globalMetaSettingsArray);\n\n      if (classNameToRemove.length) {\n        removeClass(element, classNameToRemove);\n      }\n\n      if (classNameToAdd.length) {\n        addClass(element, classNameToAdd);\n      }\n    }\n\n    globalMeta[className] = classSettings;\n  }\n\n  this.init = function() {\n    dataSource.setData(tableMeta.data);\n    instance.runHooks('beforeInit');\n\n    if (isMobileBrowser() || isIpadOS()) {\n      addClass(instance.rootElement, 'mobile');\n    }\n\n    this.updateSettings(tableMeta, true);\n\n    this.view = new TableView(this);\n\n    editorManager = EditorManager.getInstance(instance, tableMeta, selection);\n    viewportScroller = createViewportScroller(instance);\n    focusManager = new FocusManager(instance);\n\n    if (isRootInstance(this)) {\n      installFocusCatcher(instance);\n    }\n\n    instance.runHooks('init');\n\n    this.forceFullRender = true; // used when data was changed\n    this.view.render();\n\n    // Run the logic only if it's the table's initialization and the root element is not visible.\n    if (!!firstRun && instance.rootElement.offsetParent === null) {\n      observeVisibilityChangeOnce(instance.rootElement, () => {\n        // Update the spreader size cache before rendering.\n        instance.view._wt.wtOverlays.updateLastSpreaderSize();\n        instance.render();\n        instance.view.adjustElementsSize();\n      });\n    }\n\n    if (typeof firstRun === 'object') {\n      instance.runHooks('afterChange', firstRun[0], firstRun[1]);\n\n      firstRun = false;\n    }\n\n    instance.runHooks('afterInit');\n  };\n\n  /**\n   * @ignore\n   * @returns {object}\n   */\n  function ValidatorsQueue() { // moved this one level up so it can be used in any function here. Probably this should be moved to a separate file\n    let resolved = false;\n\n    return {\n      validatorsInQueue: 0,\n      valid: true,\n      addValidatorToQueue() {\n        this.validatorsInQueue += 1;\n        resolved = false;\n      },\n      removeValidatorFormQueue() {\n        this.validatorsInQueue = this.validatorsInQueue - 1 < 0 ? 0 : this.validatorsInQueue - 1;\n        this.checkIfQueueIsEmpty();\n      },\n      onQueueEmpty() { },\n      checkIfQueueIsEmpty() {\n        if (this.validatorsInQueue === 0 && resolved === false) {\n          resolved = true;\n          this.onQueueEmpty(this.valid);\n        }\n      }\n    };\n  }\n\n  /**\n   * Get parsed number from numeric string.\n   *\n   * @private\n   * @param {string} numericData Float (separated by a dot or a comma) or integer.\n   * @returns {number} Number if we get data in parsable format, not changed value otherwise.\n   */\n  function getParsedNumber(numericData) {\n    // Unifying \"float like\" string. Change from value with comma determiner to value with dot determiner,\n    // for example from `450,65` to `450.65`.\n    const unifiedNumericData = numericData.replace(',', '.');\n\n    if (isNaN(parseFloat(unifiedNumericData)) === false) {\n      return parseFloat(unifiedNumericData);\n    }\n\n    return numericData;\n  }\n\n  /**\n   * @ignore\n   * @param {Array} changes The 2D array containing information about each of the edited cells.\n   * @param {string} source The string that identifies source of validation.\n   * @param {Function} callback The callback function fot async validation.\n   */\n  function validateChanges(changes, source, callback) {\n    if (!changes.length) {\n      callback();\n\n      return;\n    }\n\n    const activeEditor = instance.getActiveEditor();\n    const waitingForValidator = new ValidatorsQueue();\n    let shouldBeCanceled = true;\n\n    waitingForValidator.onQueueEmpty = () => {\n      if (activeEditor && shouldBeCanceled) {\n        activeEditor.cancelChanges();\n      }\n\n      callback(); // called when async validators are resolved and beforeChange was not async\n    };\n\n    for (let i = changes.length - 1; i >= 0; i--) {\n      const [row, prop, , newValue] = changes[i];\n      const visualCol = datamap.propToCol(prop);\n      let cellProperties;\n\n      if (Number.isInteger(visualCol)) {\n        cellProperties = instance.getCellMeta(row, visualCol);\n\n      } else {\n        // If there's no requested visual column, we can use the table meta as the cell properties when retrieving\n        // the cell validator.\n        cellProperties = { ...Object.getPrototypeOf(tableMeta), ...tableMeta };\n      }\n\n      if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericLike(newValue)) {\n        changes[i][3] = getParsedNumber(newValue);\n      }\n\n      /* eslint-disable no-loop-func */\n      if (instance.getCellValidator(cellProperties)) {\n        waitingForValidator.addValidatorToQueue();\n        instance.validateCell(changes[i][3], cellProperties, (function(index, cellPropertiesReference) {\n          return function(result) {\n            if (typeof result !== 'boolean') {\n              throw new Error('Validation error: result is not boolean');\n            }\n\n            if (result === false && cellPropertiesReference.allowInvalid === false) {\n              shouldBeCanceled = false;\n              changes.splice(index, 1); // cancel the change\n              cellPropertiesReference.valid = true; // we cancelled the change, so cell value is still valid\n            }\n            waitingForValidator.removeValidatorFormQueue();\n          };\n        }(i, cellProperties)), source);\n      }\n    }\n    waitingForValidator.checkIfQueueIsEmpty();\n  }\n\n  /**\n   * Internal function to apply changes. Called after validateChanges.\n   *\n   * @private\n   * @param {Array} changes Array in form of [row, prop, oldValue, newValue].\n   * @param {string} source String that identifies how this change will be described in changes array (useful in onChange callback).\n   * @fires Hooks#beforeChangeRender\n   * @fires Hooks#afterChange\n   */\n  function applyChanges(changes, source) {\n    for (let i = changes.length - 1; i >= 0; i--) {\n      let skipThisChange = false;\n\n      if (changes[i] === null) {\n        changes.splice(i, 1);\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if ((changes[i][2] === null || changes[i][2] === undefined)\n        && (changes[i][3] === null || changes[i][3] === undefined)) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if (tableMeta.allowInsertRow) {\n        while (changes[i][0] > instance.countRows() - 1) {\n          const {\n            delta: numberOfCreatedRows\n          } = datamap.createRow(undefined, undefined, { source });\n\n          if (numberOfCreatedRows === 0) {\n            skipThisChange = true;\n            break;\n          }\n        }\n      }\n\n      if (instance.dataType === 'array' && (!tableMeta.columns || tableMeta.columns.length === 0) &&\n          tableMeta.allowInsertColumn) {\n        while (datamap.propToCol(changes[i][1]) > instance.countCols() - 1) {\n          const {\n            delta: numberOfCreatedColumns\n          } = datamap.createCol(undefined, undefined, { source });\n\n          if (numberOfCreatedColumns === 0) {\n            skipThisChange = true;\n            break;\n          }\n        }\n      }\n\n      if (skipThisChange) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      datamap.set(changes[i][0], changes[i][1], changes[i][3]);\n    }\n\n    const hasChanges = changes.length > 0;\n\n    instance.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered\n\n    if (hasChanges) {\n      grid.adjustRowsAndCols();\n      instance.runHooks('beforeChangeRender', changes, source);\n      editorManager.closeEditor();\n      instance.view.render();\n      editorManager.prepareEditor();\n      instance.view.adjustElementsSize();\n      instance.runHooks('afterChange', changes, source || 'edit');\n\n      const activeEditor = instance.getActiveEditor();\n\n      if (activeEditor && isDefined(activeEditor.refreshValue)) {\n        activeEditor.refreshValue();\n      }\n\n    } else {\n      instance.view.render();\n    }\n  }\n\n  /**\n   * Creates and returns the CellCoords object.\n   *\n   * @private\n   * @memberof Core#\n   * @function _createCellCoords\n   * @param {number} row The row index.\n   * @param {number} column The column index.\n   * @returns {CellCoords}\n   */\n  this._createCellCoords = function(row, column) {\n    return instance.view._wt.createCellCoords(row, column);\n  };\n\n  /**\n   * Creates and returns the CellRange object.\n   *\n   * @private\n   * @memberof Core#\n   * @function _createCellRange\n   * @param {CellCoords} highlight Defines the border around a cell where selection was started and to edit the cell\n   *                               when you press Enter. The highlight cannot point to headers (negative values).\n   * @param {CellCoords} from Initial coordinates.\n   * @param {CellCoords} to Final coordinates.\n   * @returns {CellRange}\n   */\n  this._createCellRange = function(highlight, from, to) {\n    return instance.view._wt.createCellRange(highlight, from, to);\n  };\n\n  /**\n   * Validate a single cell.\n   *\n   * @memberof Core#\n   * @function validateCell\n   * @param {string|number} value The value to validate.\n   * @param {object} cellProperties The cell meta which corresponds with the value.\n   * @param {Function} callback The callback function.\n   * @param {string} source The string that identifies source of the validation.\n   */\n  this.validateCell = function(value, cellProperties, callback, source) {\n    let validator = instance.getCellValidator(cellProperties);\n\n    // the `canBeValidated = false` argument suggests, that the cell passes validation by default.\n    /**\n     * @private\n     * @function done\n     * @param {boolean} valid Indicates if the validation was successful.\n     * @param {boolean} [canBeValidated=true] Flag which controls the validation process.\n     */\n    function done(valid, canBeValidated = true) {\n      // Fixes GH#3903\n      if (!canBeValidated || cellProperties.hidden === true) {\n        callback(valid);\n\n        return;\n      }\n\n      const col = cellProperties.visualCol;\n      const row = cellProperties.visualRow;\n      const td = instance.getCell(row, col, true);\n\n      if (td && td.nodeName !== 'TH') {\n        const renderableRow = instance.rowIndexMapper.getRenderableFromVisualIndex(row);\n        const renderableColumn = instance.columnIndexMapper.getRenderableFromVisualIndex(col);\n\n        instance.view._wt.getSetting('cellRenderer', renderableRow, renderableColumn, td);\n      }\n\n      callback(valid);\n    }\n\n    if (isRegExp(validator)) {\n      validator = (function(expression) {\n        return function(cellValue, validatorCallback) {\n          validatorCallback(expression.test(cellValue));\n        };\n      }(validator));\n    }\n\n    if (isFunction(validator)) {\n      // eslint-disable-next-line no-param-reassign\n      value = instance.runHooks('beforeValidate', value, cellProperties.visualRow, cellProperties.prop, source);\n\n      // To provide consistent behaviour, validation should be always asynchronous\n      instance._registerImmediate(() => {\n        validator.call(cellProperties, value, (valid) => {\n          if (!instance) {\n            return;\n          }\n          // eslint-disable-next-line no-param-reassign\n          valid = instance\n            .runHooks('afterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n          cellProperties.valid = valid;\n\n          done(valid);\n          instance.runHooks('postAfterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n        });\n      });\n\n    } else {\n      // resolve callback even if validator function was not found\n      instance._registerImmediate(() => {\n        cellProperties.valid = true;\n        done(cellProperties.valid, false);\n      });\n    }\n  };\n\n  /**\n   * @ignore\n   * @param {number} row The visual row index.\n   * @param {string|number} propOrCol The visual prop or column index.\n   * @param {*} value The cell value.\n   * @returns {Array}\n   */\n  function setDataInputToArray(row, propOrCol, value) {\n    if (Array.isArray(row)) { // it's an array of changes\n      return row;\n    }\n\n    return [[row, propOrCol, value]];\n  }\n\n  /**\n   * Process changes prepared for applying to the dataset (unifying list of changes, closing an editor - when needed,\n   * calling a hook).\n   *\n   * @private\n   * @param {Array} changes Array of changes in format `[[row, col, value],...]`.\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   * @returns {Array} List of changes finally applied to the dataset.\n   */\n  function processChanges(changes, source) {\n    const activeEditor = instance.getActiveEditor();\n    const beforeChangeResult = instance.runHooks('beforeChange', changes, source || 'edit');\n    // The `beforeChange` hook could add a `null` for purpose of cancelling some dataset's change.\n    const filteredChanges = changes.filter(change => change !== null);\n\n    if (beforeChangeResult === false || filteredChanges.length === 0) {\n      if (activeEditor) {\n        activeEditor.cancelChanges();\n      }\n\n      return [];\n    }\n\n    return filteredChanges;\n  }\n\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, col, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtCell\n   * @param {number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.\n   * @param {number} [column] Visual column index.\n   * @param {string} [value] New value.\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   */\n  this.setDataAtCell = function(row, column, value, source) {\n    const input = setDataInputToArray(row, column, value);\n    const changes = [];\n    let changeSource = source;\n    let i;\n    let ilen;\n    let prop;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      if (typeof input[i] !== 'object') {\n        throw new Error('Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter');\n      }\n      if (typeof input[i][1] !== 'number') {\n        throw new Error('Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`'); // eslint-disable-line max-len\n      }\n\n      if (input[i][1] >= this.countCols()) {\n        prop = input[i][1];\n\n      } else {\n        prop = datamap.colToProp(input[i][1]);\n      }\n\n      changes.push([\n        input[i][0],\n        prop,\n        dataSource.getAtCell(this.toPhysicalRow(input[i][0]), input[i][1]),\n        input[i][2],\n      ]);\n    }\n\n    if (!changeSource && typeof row === 'object') {\n      changeSource = column;\n    }\n\n    const processedChanges = processChanges(changes, source);\n\n    instance.runHooks('afterSetDataAtCell', processedChanges, changeSource);\n\n    validateChanges(processedChanges, changeSource, () => {\n      applyChanges(processedChanges, changeSource);\n    });\n  };\n\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, prop, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtRowProp\n   * @param {number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.\n   * @param {string} prop Property name or the source string (e.g. `'first.name'` or `'0'`).\n   * @param {string} value Value to be set.\n   * @param {string} [source] String that identifies how this change will be described in changes array (useful in onChange callback).\n   */\n  this.setDataAtRowProp = function(row, prop, value, source) {\n    const input = setDataInputToArray(row, prop, value);\n    const changes = [];\n    let changeSource = source;\n    let i;\n    let ilen;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      changes.push([\n        input[i][0],\n        input[i][1],\n        dataSource.getAtCell(this.toPhysicalRow(input[i][0]), input[i][1]),\n        input[i][2],\n      ]);\n    }\n\n    // TODO: I don't think `prop` should be used as `changeSource` here, but removing it would be a breaking change.\n    // We should remove it with the next major release.\n    if (!changeSource && typeof row === 'object') {\n      changeSource = prop;\n    }\n\n    const processedChanges = processChanges(changes, source);\n\n    instance.runHooks('afterSetDataAtRowProp', processedChanges, changeSource);\n\n    validateChanges(processedChanges, changeSource, () => {\n      applyChanges(processedChanges, changeSource);\n    });\n  };\n\n  /**\n   * Listen to the keyboard input on document body. This allows Handsontable to capture keyboard events and respond\n   * in the right way.\n   *\n   * @memberof Core#\n   * @function listen\n   * @fires Hooks#afterListen\n   */\n  this.listen = function() {\n    if (instance && !instance.isListening()) {\n      foreignHotInstances.forEach((foreignHot) => {\n        if (instance !== foreignHot) {\n          foreignHot.unlisten();\n        }\n      });\n\n      activeGuid = instance.guid;\n      instance.runHooks('afterListen');\n    }\n  };\n\n  /**\n   * Stop listening to keyboard input on the document body. Calling this method makes the Handsontable inactive for\n   * any keyboard events.\n   *\n   * @memberof Core#\n   * @function unlisten\n   */\n  this.unlisten = function() {\n    if (this.isListening()) {\n      activeGuid = null;\n      instance.runHooks('afterUnlisten');\n    }\n  };\n\n  /**\n   * Returns `true` if the current Handsontable instance is listening to keyboard input on document body.\n   *\n   * @memberof Core#\n   * @function isListening\n   * @returns {boolean} `true` if the instance is listening, `false` otherwise.\n   */\n  this.isListening = function() {\n    return activeGuid === instance.guid;\n  };\n\n  /**\n   * Destroys the current editor, render the table and prepares the editor of the newly selected cell.\n   *\n   * @memberof Core#\n   * @function destroyEditor\n   * @param {boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.\n   * @param {boolean} [prepareEditorIfNeeded=true] If `true` the editor under the selected cell will be prepared to open.\n   */\n  this.destroyEditor = function(revertOriginal = false, prepareEditorIfNeeded = true) {\n    editorManager.closeEditor(revertOriginal);\n    instance.view.render();\n\n    if (prepareEditorIfNeeded && selection.isSelected()) {\n      editorManager.prepareEditor();\n    }\n  };\n\n  /**\n   * Populates cells at position with 2D input array (e.g. `[[1, 2], [3, 4]]`). Use `endRow`, `endCol` when you\n   * want to cut input when a certain row is reached.\n   *\n   * The `populateFromArray()` method can't change [`readOnly`](@/api/options.md#readonly) cells.\n   *\n   * Optional `method` argument has the same effect as pasteMode option (see {@link Options#pasteMode}).\n   *\n   * @memberof Core#\n   * @function populateFromArray\n   * @param {number} row Start visual row index.\n   * @param {number} column Start visual column index.\n   * @param {Array} input 2d array.\n   * @param {number} [endRow] End visual row index (use when you want to cut input when certain row is reached).\n   * @param {number} [endCol] End visual column index (use when you want to cut input when certain column is reached).\n   * @param {string} [source=populateFromArray] Used to identify this call in the resulting events (beforeChange, afterChange).\n   * @param {string} [method=overwrite] Populate method, possible values: `'shift_down'`, `'shift_right'`, `'overwrite'`.\n   * @returns {object|undefined} Ending td in pasted area (only if any cell was changed).\n   */\n  this.populateFromArray = function(row, column, input, endRow, endCol, source, method) {\n    if (!(typeof input === 'object' && typeof input[0] === 'object')) {\n      throw new Error('populateFromArray parameter `input` must be an array of arrays'); // API changed in 0.9-beta2, let's check if you use it correctly\n    }\n\n    const c = typeof endRow === 'number' ? instance._createCellCoords(endRow, endCol) : null;\n\n    return grid.populateFromArray(instance._createCellCoords(row, column), input, c, source, method);\n  };\n\n  /**\n   * Adds/removes data from the column. This method works the same as Array.splice for arrays.\n   *\n   * @memberof Core#\n   * @function spliceCol\n   * @param {number} column Index of the column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   * @returns {Array} Returns removed portion of columns.\n   */\n  this.spliceCol = function(column, index, amount, ...elements) {\n    return datamap.spliceCol(column, index, amount, ...elements);\n  };\n\n  /**\n   * Adds/removes data from the row. This method works the same as Array.splice for arrays.\n   *\n   * @memberof Core#\n   * @function spliceRow\n   * @param {number} row Index of column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   * @returns {Array} Returns removed portion of rows.\n   */\n  this.spliceRow = function(row, index, amount, ...elements) {\n    return datamap.spliceRow(row, index, amount, ...elements);\n  };\n\n  /**\n   * Returns indexes of the currently selected cells as an array of arrays `[[startRow, startCol, endRow, endCol],...]`.\n   *\n   * Start row and start column are the coordinates of the active cell (where the selection was started).\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedLast` method.\n   *\n   * @memberof Core#\n   * @function getSelected\n   * @returns {Array[]|undefined} An array of arrays of the selection's coordinates.\n   */\n  this.getSelected = function() { // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return arrayMap(selection.getSelectedRange(), ({ from, to }) => [from.row, from.col, to.row, to.col]);\n    }\n  };\n\n  /**\n   * Returns the last coordinates applied to the table as a an array `[startRow, startCol, endRow, endCol]`.\n   *\n   * @since 0.36.0\n   * @memberof Core#\n   * @function getSelectedLast\n   * @returns {Array|undefined} An array of the selection's coordinates.\n   */\n  this.getSelectedLast = function() {\n    const selected = this.getSelected();\n    let result;\n\n    if (selected && selected.length > 0) {\n      result = selected[selected.length - 1];\n    }\n\n    return result;\n  };\n\n  /**\n   * Returns the current selection as an array of CellRange objects.\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedRangeLast` method.\n   *\n   * @memberof Core#\n   * @function getSelectedRange\n   * @returns {CellRange[]|undefined} Selected range object or undefined if there is no selection.\n   */\n  this.getSelectedRange = function() { // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return Array.from(selection.getSelectedRange());\n    }\n  };\n\n  /**\n   * Returns the last coordinates applied to the table as a CellRange object.\n   *\n   * @memberof Core#\n   * @function getSelectedRangeLast\n   * @since 0.36.0\n   * @returns {CellRange|undefined} Selected range object or undefined` if there is no selection.\n   */\n  this.getSelectedRangeLast = function() {\n    const selectedRange = this.getSelectedRange();\n    let result;\n\n    if (selectedRange && selectedRange.length > 0) {\n      result = selectedRange[selectedRange.length - 1];\n    }\n\n    return result;\n  };\n\n  /**\n   * Erases content from cells that have been selected in the table.\n   *\n   * @memberof Core#\n   * @function emptySelectedCells\n   * @param {string} [source] String that identifies how this change will be described in the changes array (useful in afterChange or beforeChange callback). Set to 'edit' if left empty.\n   * @since 0.36.0\n   */\n  this.emptySelectedCells = function(source) {\n    if (!selection.isSelected() || this.countRows() === 0 || this.countCols() === 0) {\n      return;\n    }\n\n    const changes = [];\n\n    arrayEach(selection.getSelectedRange(), (cellRange) => {\n      if (cellRange.isSingleHeader()) {\n        return;\n      }\n\n      const topStart = cellRange.getTopStartCorner();\n      const bottomEnd = cellRange.getBottomEndCorner();\n\n      rangeEach(topStart.row, bottomEnd.row, (row) => {\n        rangeEach(topStart.col, bottomEnd.col, (column) => {\n          if (!this.getCellMeta(row, column).readOnly) {\n            changes.push([row, column, null]);\n          }\n        });\n      });\n    });\n\n    if (changes.length > 0) {\n      this.setDataAtCell(changes, source);\n    }\n  };\n\n  /**\n   * Checks if the table rendering process was suspended. See explanation in {@link Core#suspendRender}.\n   *\n   * @memberof Core#\n   * @function isRenderSuspended\n   * @since 8.3.0\n   * @returns {boolean}\n   */\n  this.isRenderSuspended = function() {\n    return this.renderSuspendedCounter > 0;\n  };\n\n  /**\n   * Suspends the rendering process. It's helpful to wrap the table render\n   * cycles triggered by API calls or UI actions (or both) and call the \"render\"\n   * once in the end. As a result, it improves the performance of wrapped operations.\n   * When the table is in the suspend state, most operations will have no visual\n   * effect until the rendering state is resumed. Resuming the state automatically\n   * invokes the table rendering. To make sure that after executing all operations,\n   * the table will be rendered, it's highly recommended to use the {@link Core#batchRender}\n   * method or {@link Core#batch}, which additionally aggregates the logic execution\n   * that happens behind the table.\n   *\n   * The method is intended to be used by advanced users. Suspending the rendering\n   * process could cause visual glitches when wrongly implemented.\n   *\n   * Every [`suspendRender()`](@/api/core.md#suspendrender) call needs to correspond with one [`resumeRender()`](@/api/core.md#resumerender) call.\n   * For example, if you call [`suspendRender()`](@/api/core.md#suspendrender) 5 times, you need to call [`resumeRender()`](@/api/core.md#resumerender) 5 times as well.\n   *\n   * @memberof Core#\n   * @function suspendRender\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendRender();\n   * hot.alter('insert_row_above', 5, 45);\n   * hot.alter('insert_col_start', 10, 40);\n   * hot.setDataAtCell(1, 1, 'John');\n   * hot.setDataAtCell(2, 2, 'Mark');\n   * hot.setDataAtCell(3, 3, 'Ann');\n   * hot.setDataAtCell(4, 4, 'Sophia');\n   * hot.setDataAtCell(5, 5, 'Mia');\n   * hot.selectCell(0, 0);\n   * hot.resumeRender(); // It re-renders the table internally\n   * ```\n   */\n  this.suspendRender = function() {\n    this.renderSuspendedCounter += 1;\n  };\n\n  /**\n   * Resumes the rendering process. In combination with the {@link Core#suspendRender}\n   * method it allows aggregating the table render cycles triggered by API calls or UI\n   * actions (or both) and calls the \"render\" once in the end. When the table is in\n   * the suspend state, most operations will have no visual effect until the rendering\n   * state is resumed. Resuming the state automatically invokes the table rendering.\n   *\n   * The method is intended to be used by advanced users. Suspending the rendering\n   * process could cause visual glitches when wrongly implemented.\n   *\n   * Every [`suspendRender()`](@/api/core.md#suspendrender) call needs to correspond with one [`resumeRender()`](@/api/core.md#resumerender) call.\n   * For example, if you call [`suspendRender()`](@/api/core.md#suspendrender) 5 times, you need to call [`resumeRender()`](@/api/core.md#resumerender) 5 times as well.\n   *\n   * @memberof Core#\n   * @function resumeRender\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendRender();\n   * hot.alter('insert_row_above', 5, 45);\n   * hot.alter('insert_col_start', 10, 40);\n   * hot.setDataAtCell(1, 1, 'John');\n   * hot.setDataAtCell(2, 2, 'Mark');\n   * hot.setDataAtCell(3, 3, 'Ann');\n   * hot.setDataAtCell(4, 4, 'Sophia');\n   * hot.setDataAtCell(5, 5, 'Mia');\n   * hot.selectCell(0, 0);\n   * hot.resumeRender(); // It re-renders the table internally\n   * ```\n   */\n  this.resumeRender = function() {\n    const nextValue = this.renderSuspendedCounter - 1;\n\n    this.renderSuspendedCounter = Math.max(nextValue, 0);\n\n    if (!this.isRenderSuspended() && nextValue === this.renderSuspendedCounter) {\n      if (this.renderCall) {\n        this.render();\n      } else {\n        instance.view.render();\n      }\n    }\n  };\n\n  /**\n   * Rerender the table. Calling this method starts the process of recalculating, redrawing and applying the changes\n   * to the DOM. While rendering the table all cell renderers are recalled.\n   *\n   * Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most\n   * optimal moments in its lifecycle.\n   *\n   * @memberof Core#\n   * @function render\n   */\n  this.render = function() {\n    if (this.view) {\n      this.renderCall = true;\n      this.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered\n\n      if (!this.isRenderSuspended()) {\n        instance.view.render();\n      }\n    }\n  };\n\n  /**\n   * The method aggregates multi-line API calls into a callback and postpones the\n   * table rendering process. After the execution of the operations, the table is\n   * rendered once. As a result, it improves the performance of wrapped operations.\n   * Without batching, a similar case could trigger multiple table render calls.\n   *\n   * @memberof Core#\n   * @function batchRender\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batchRender(() => {\n   *   hot.alter('insert_row_above', 5, 45);\n   *   hot.alter('insert_col_start', 10, 40);\n   *   hot.setDataAtCell(1, 1, 'John');\n   *   hot.setDataAtCell(2, 2, 'Mark');\n   *   hot.setDataAtCell(3, 3, 'Ann');\n   *   hot.setDataAtCell(4, 4, 'Sophia');\n   *   hot.setDataAtCell(5, 5, 'Mia');\n   *   hot.selectCell(0, 0);\n   *   // The table will be rendered once after executing the callback\n   * });\n   * ```\n   */\n  this.batchRender = function(wrappedOperations) {\n    this.suspendRender();\n\n    const result = wrappedOperations();\n\n    this.resumeRender();\n\n    return result;\n  };\n\n  /**\n   * Checks if the table indexes recalculation process was suspended. See explanation\n   * in {@link Core#suspendExecution}.\n   *\n   * @memberof Core#\n   * @function isExecutionSuspended\n   * @since 8.3.0\n   * @returns {boolean}\n   */\n  this.isExecutionSuspended = function() {\n    return this.executionSuspendedCounter > 0;\n  };\n\n  /**\n   * Suspends the execution process. It's helpful to wrap the table logic changes\n   * such as index changes into one call after which the cache is updated. As a result,\n   * it improves the performance of wrapped operations.\n   *\n   * The method is intended to be used by advanced users. Suspending the execution\n   * process could cause visual glitches caused by not updated the internal table cache.\n   *\n   * @memberof Core#\n   * @function suspendExecution\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendExecution();\n   * const filters = hot.getPlugin('filters');\n   *\n   * filters.addCondition(2, 'contains', ['3']);\n   * filters.filter();\n   * hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   * hot.resumeExecution(); // It updates the cache internally\n   * ```\n   */\n  this.suspendExecution = function() {\n    this.executionSuspendedCounter += 1;\n    this.columnIndexMapper.suspendOperations();\n    this.rowIndexMapper.suspendOperations();\n  };\n\n  /**\n   * Resumes the execution process. In combination with the {@link Core#suspendExecution}\n   * method it allows aggregating the table logic changes after which the cache is\n   * updated. Resuming the state automatically invokes the table cache updating process.\n   *\n   * The method is intended to be used by advanced users. Suspending the execution\n   * process could cause visual glitches caused by not updated the internal table cache.\n   *\n   * @memberof Core#\n   * @function resumeExecution\n   * @param {boolean} [forceFlushChanges=false] If `true`, the table internal data cache\n   * is recalculated after the execution of the batched operations. For nested\n   * {@link Core#batchExecution} calls, it can be desire to recalculate the table\n   * after each batch.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.suspendExecution();\n   * const filters = hot.getPlugin('filters');\n   *\n   * filters.addCondition(2, 'contains', ['3']);\n   * filters.filter();\n   * hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   * hot.resumeExecution(); // It updates the cache internally\n   * ```\n   */\n  this.resumeExecution = function(forceFlushChanges = false) {\n    const nextValue = this.executionSuspendedCounter - 1;\n\n    this.executionSuspendedCounter = Math.max(nextValue, 0);\n\n    if ((!this.isExecutionSuspended() && nextValue === this.executionSuspendedCounter) || forceFlushChanges) {\n      this.columnIndexMapper.resumeOperations();\n      this.rowIndexMapper.resumeOperations();\n    }\n  };\n\n  /**\n   * The method aggregates multi-line API calls into a callback and postpones the\n   * table execution process. After the execution of the operations, the internal table\n   * cache is recalculated once. As a result, it improves the performance of wrapped\n   * operations. Without batching, a similar case could trigger multiple table cache rebuilds.\n   *\n   * @memberof Core#\n   * @function batchExecution\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @param {boolean} [forceFlushChanges=false] If `true`, the table internal data cache\n   * is recalculated after the execution of the batched operations. For nested calls,\n   * it can be a desire to recalculate the table after each batch.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batchExecution(() => {\n   *   const filters = hot.getPlugin('filters');\n   *\n   *   filters.addCondition(2, 'contains', ['3']);\n   *   filters.filter();\n   *   hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   *   // The table cache will be recalculated once after executing the callback\n   * });\n   * ```\n   */\n  this.batchExecution = function(wrappedOperations, forceFlushChanges = false) {\n    this.suspendExecution();\n\n    const result = wrappedOperations();\n\n    this.resumeExecution(forceFlushChanges);\n\n    return result;\n  };\n\n  /**\n   * It batches the rendering process and index recalculations. The method aggregates\n   * multi-line API calls into a callback and postpones the table rendering process\n   * as well aggregates the table logic changes such as index changes into one call\n   * after which the cache is updated. After the execution of the operations, the\n   * table is rendered, and the cache is updated once. As a result, it improves the\n   * performance of wrapped operations.\n   *\n   * @memberof Core#\n   * @function batch\n   * @param {Function} wrappedOperations Batched operations wrapped in a function.\n   * @returns {*} Returns result from the wrappedOperations callback.\n   * @since 8.3.0\n   * @example\n   * ```js\n   * hot.batch(() => {\n   *   hot.alter('insert_row_above', 5, 45);\n   *   hot.alter('insert_col_start', 10, 40);\n   *   hot.setDataAtCell(1, 1, 'x');\n   *   hot.setDataAtCell(2, 2, 'c');\n   *   hot.setDataAtCell(3, 3, 'v');\n   *   hot.setDataAtCell(4, 4, 'b');\n   *   hot.setDataAtCell(5, 5, 'n');\n   *   hot.selectCell(0, 0);\n   *\n   *   const filters = hot.getPlugin('filters');\n   *\n   *   filters.addCondition(2, 'contains', ['3']);\n   *   filters.filter();\n   *   hot.getPlugin('columnSorting').sort({ column: 1, sortOrder: 'desc' });\n   *   // The table will be re-rendered and cache will be recalculated once after executing the callback\n   * });\n   * ```\n   */\n  this.batch = function(wrappedOperations) {\n    this.suspendRender();\n    this.suspendExecution();\n\n    const result = wrappedOperations();\n\n    this.resumeExecution();\n    this.resumeRender();\n\n    return result;\n  };\n\n  /**\n   * Updates dimensions of the table. The method compares previous dimensions with the current ones and updates accordingly.\n   *\n   * @memberof Core#\n   * @function refreshDimensions\n   * @fires Hooks#beforeRefreshDimensions\n   * @fires Hooks#afterRefreshDimensions\n   */\n  this.refreshDimensions = function() {\n    if (!instance.view) {\n      return;\n    }\n\n    const { width: lastWidth, height: lastHeight } = instance.view.getLastSize();\n    const { width, height } = instance.rootElement.getBoundingClientRect();\n    const isSizeChanged = width !== lastWidth || height !== lastHeight;\n    const isResizeBlocked = instance.runHooks(\n      'beforeRefreshDimensions',\n      { width: lastWidth, height: lastHeight },\n      { width, height },\n      isSizeChanged\n    ) === false;\n\n    if (isResizeBlocked) {\n      return;\n    }\n\n    if (isSizeChanged || instance.view._wt.wtOverlays.scrollableElement === instance.rootWindow) {\n      instance.view.setLastSize(width, height);\n      instance.render();\n    }\n\n    instance.runHooks(\n      'afterRefreshDimensions',\n      { width: lastWidth, height: lastHeight },\n      { width, height },\n      isSizeChanged\n    );\n  };\n\n  /**\n   * The `updateData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.\n   *\n   * The `updateData()` method:\n   * - Keeps cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)\n   * - Keeps rows' states (e.g. row order)\n   * - Keeps columns' states (e.g. column order)\n   *\n   * To replace Handsontable's [`data`](@/api/options.md#data) and reset states, use the [`loadData()`](#loaddata) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @memberof Core#\n   * @function updateData\n   * @since 11.1.0\n   * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {string} [source] The source of the `updateData()` call\n   * @fires Hooks#beforeUpdateData\n   * @fires Hooks#afterUpdateData\n   * @fires Hooks#afterChange\n   */\n  this.updateData = function(data, source) {\n    replaceData(\n      data,\n      (newDataMap) => {\n        datamap = newDataMap;\n      },\n      (newDataMap) => {\n        datamap = newDataMap;\n\n        instance.columnIndexMapper.fitToLength(this.getInitialColumnCount());\n        instance.rowIndexMapper.fitToLength(this.countSourceRows());\n\n        grid.adjustRowsAndCols();\n        selection.refresh();\n      }, {\n        hotInstance: instance,\n        dataMap: datamap,\n        dataSource,\n        internalSource: 'updateData',\n        source,\n        metaManager,\n        firstRun\n      });\n  };\n\n  /**\n   * The `loadData()` method replaces Handsontable's [`data`](@/api/options.md#data) with a new dataset.\n   *\n   * Additionally, the `loadData()` method:\n   * - Resets cells' states (e.g. cells' [formatting](@/guides/cell-features/formatting-cells/formatting-cells.md) and cells' [`readOnly`](@/api/options.md#readonly) states)\n   * - Resets rows' states (e.g. row order)\n   * - Resets columns' states (e.g. column order)\n   *\n   * To replace Handsontable's [`data`](@/api/options.md#data) without resetting states, use the [`updateData()`](#updatedata) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @memberof Core#\n   * @function loadData\n   * @param {Array} data An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {string} [source] The source of the `loadData()` call\n   * @fires Hooks#beforeLoadData\n   * @fires Hooks#afterLoadData\n   * @fires Hooks#afterChange\n   */\n  this.loadData = function(data, source) {\n    replaceData(\n      data,\n      (newDataMap) => {\n        datamap = newDataMap;\n      },\n      () => {\n        metaManager.clearCellsCache();\n        instance.initIndexMappers();\n        grid.adjustRowsAndCols();\n        selection.refresh();\n\n        if (firstRun) {\n          firstRun = [null, 'loadData'];\n        }\n      }, {\n        hotInstance: instance,\n        dataMap: datamap,\n        dataSource,\n        internalSource: 'loadData',\n        source,\n        metaManager,\n        firstRun\n      });\n  };\n\n  /**\n   * Gets the initial column count, calculated based on the `columns` setting.\n   *\n   * @private\n   * @returns {number} The calculated number of columns.\n   */\n  this.getInitialColumnCount = function() {\n    const columnsSettings = tableMeta.columns;\n    let finalNrOfColumns = 0;\n\n    // We will check number of columns when the `columns` property was defined as an array. Columns option may\n    // narrow down or expand displayed dataset in that case.\n    if (Array.isArray(columnsSettings)) {\n      finalNrOfColumns = columnsSettings.length;\n\n    } else if (isFunction(columnsSettings)) {\n      if (instance.dataType === 'array') {\n        const nrOfSourceColumns = this.countSourceCols();\n\n        for (let columnIndex = 0; columnIndex < nrOfSourceColumns; columnIndex += 1) {\n          if (columnsSettings(columnIndex)) {\n            finalNrOfColumns += 1;\n          }\n        }\n\n        // Extended dataset by the `columns` property? Moved code right from the refactored `countCols` method.\n      } else if (instance.dataType === 'object' || instance.dataType === 'function') {\n        finalNrOfColumns = datamap.colToPropCache.length;\n      }\n\n      // In some cases we need to check columns length from the schema, i.e. `data` may be empty.\n    } else if (isDefined(tableMeta.dataSchema)) {\n      const schema = datamap.getSchema();\n\n      // Schema may be defined as an array of objects. Each object will define column.\n      finalNrOfColumns = Array.isArray(schema) ? schema.length : deepObjectSize(schema);\n\n    } else {\n      // We init index mappers by length of source data to provide indexes also for skipped indexes.\n      finalNrOfColumns = this.countSourceCols();\n    }\n\n    return finalNrOfColumns;\n  };\n\n  /**\n   * Init index mapper which manage indexes assigned to the data.\n   *\n   * @private\n   */\n  this.initIndexMappers = function() {\n    this.columnIndexMapper.initToLength(this.getInitialColumnCount());\n    this.rowIndexMapper.initToLength(this.countSourceRows());\n  };\n\n  /**\n   * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method,\n   * unless some modifications have been applied (i.e. Sequence of rows/columns was changed, some row/column was skipped).\n   * If that's the case - use the {@link Core#getSourceData} method.).\n   *\n   * Optionally you can provide cell range by defining `row`, `column`, `row2`, `column2` to get only a fragment of table data.\n   *\n   * @memberof Core#\n   * @function getData\n   * @param {number} [row] From visual row index.\n   * @param {number} [column] From visual column index.\n   * @param {number} [row2] To visual row index.\n   * @param {number} [column2] To visual column index.\n   * @returns {Array[]} Array with the data.\n   * @example\n   * ```js\n   * // Get all data (in order how it is rendered in the table).\n   * hot.getData();\n   * // Get data fragment (from top-left 0, 0 to bottom-right 3, 3).\n   * hot.getData(3, 3);\n   * // Get data fragment (from top-left 2, 1 to bottom-right 3, 3).\n   * hot.getData(2, 1, 3, 3);\n   * ```\n   */\n  this.getData = function(row, column, row2, column2) {\n    if (isUndefined(row)) {\n      return datamap.getAll();\n    }\n\n    return datamap.getRange(instance._createCellCoords(row, column),\n      instance._createCellCoords(row2, column2), datamap.DESTINATION_RENDERER);\n  };\n\n  /**\n   * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new\n   * line character.\n   *\n   * @memberof Core#\n   * @function getCopyableText\n   * @param {number} startRow From visual row index.\n   * @param {number} startCol From visual column index.\n   * @param {number} endRow To visual row index.\n   * @param {number} endCol To visual column index.\n   * @returns {string}\n   */\n  this.getCopyableText = function(startRow, startCol, endRow, endCol) {\n    return datamap.getCopyableText(instance._createCellCoords(startRow, startCol),\n      instance._createCellCoords(endRow, endCol));\n  };\n\n  /**\n   * Returns the data's copyable value at specified `row` and `column` index.\n   *\n   * @memberof Core#\n   * @function getCopyableData\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {string}\n   */\n  this.getCopyableData = function(row, column) {\n    return datamap.getCopyable(row, datamap.colToProp(column));\n  };\n\n  /**\n   * Returns schema provided by constructor settings. If it doesn't exist then it returns the schema based on the data\n   * structure in the first row.\n   *\n   * @memberof Core#\n   * @function getSchema\n   * @returns {object} Schema object.\n   */\n  this.getSchema = function() {\n    return datamap.getSchema();\n  };\n\n  /**\n   * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the changed\n   * settings, declared the same way as in the initial settings object.\n   *\n   * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset\n   * the settings made post-initialization. (for example - ignore changes made using the columnResize feature).\n   *\n   * Since 8.0.0 passing `columns` or `data` inside `settings` objects will result in resetting states corresponding to rows and columns\n   * (for example, row/column sequence, column width, row height, frozen columns etc.).\n   *\n   * Since 12.0.0 passing `data` inside `settings` objects no longer results in resetting states corresponding to rows and columns\n   * (for example, row/column sequence, column width, row height, frozen columns etc.).\n   *\n   * @memberof Core#\n   * @function updateSettings\n   * @param {object} settings A settings object (see {@link Options}). Only provide the settings that are changed, not the whole settings object that was used for initialization.\n   * @param {boolean} [init=false] Internally used for in initialization mode.\n   * @example\n   * ```js\n   * hot.updateSettings({\n   *    contextMenu: true,\n   *    colHeaders: true,\n   *    fixedRowsTop: 2\n   * });\n   * ```\n   * @fires Hooks#afterCellMetaReset\n   * @fires Hooks#afterUpdateSettings\n   */\n  this.updateSettings = function(settings, init = false) {\n    const dataUpdateFunction = (firstRun ? instance.loadData : instance.updateData).bind(this);\n    let columnsAsFunc = false;\n    let i;\n    let j;\n\n    if (isDefined(settings.rows)) {\n      throw new Error('The \"rows\" setting is no longer supported. Do you mean startRows, minRows or maxRows?');\n    }\n    if (isDefined(settings.cols)) {\n      throw new Error('The \"cols\" setting is no longer supported. Do you mean startCols, minCols or maxCols?');\n    }\n    if (isDefined(settings.ganttChart)) {\n      throw new Error('Since 8.0.0 the \"ganttChart\" setting is no longer supported.');\n    }\n\n    // eslint-disable-next-line no-restricted-syntax\n    for (i in settings) {\n      if (i === 'data') {\n        // Do nothing. loadData will be triggered later\n      } else if (i === 'language') {\n        setLanguage(settings.language);\n\n      } else if (i === 'className') {\n        setClassName('className', settings.className);\n\n      } else if (i === 'tableClassName' && instance.table) {\n        setClassName('tableClassName', settings.tableClassName);\n\n        instance.view._wt.wtOverlays.syncOverlayTableClassNames();\n\n      } else if (Hooks.getSingleton().isRegistered(i) || Hooks.getSingleton().isDeprecated(i)) {\n\n        if (isFunction(settings[i]) || Array.isArray(settings[i])) {\n          settings[i].initialHook = true;\n          instance.addHook(i, settings[i]);\n        }\n\n      } else if (!init && hasOwnProperty(settings, i)) { // Update settings\n        globalMeta[i] = settings[i];\n      }\n    }\n\n    // Load data or create data map\n    if (settings.data === undefined && tableMeta.data === undefined) {\n      dataUpdateFunction(null, 'updateSettings'); // data source created just now\n\n    } else if (settings.data !== undefined) {\n      dataUpdateFunction(settings.data, 'updateSettings'); // data source given as option\n\n    } else if (settings.columns !== undefined) {\n      datamap.createMap();\n\n      // The `column` property has changed - dataset may be expanded or narrowed down. The `loadData` do the same.\n      instance.initIndexMappers();\n    }\n\n    const clen = instance.countCols();\n    const columnSetting = tableMeta.columns;\n\n    // Init columns constructors configuration\n    if (columnSetting && isFunction(columnSetting)) {\n      columnsAsFunc = true;\n    }\n\n    // Clear cell meta cache\n    if (settings.cell !== undefined || settings.cells !== undefined || settings.columns !== undefined) {\n      metaManager.clearCache();\n    }\n\n    if (clen > 0) {\n      for (i = 0, j = 0; i < clen; i++) {\n        // Use settings provided by user\n        if (columnSetting) {\n          const column = columnsAsFunc ? columnSetting(i) : columnSetting[j];\n\n          if (column) {\n            metaManager.updateColumnMeta(j, column);\n          }\n        }\n\n        j += 1;\n      }\n    }\n\n    if (isDefined(settings.cell)) {\n      objectEach(settings.cell, (cell) => {\n        instance.setCellMetaObject(cell.row, cell.col, cell);\n      });\n    }\n\n    instance.runHooks('afterCellMetaReset');\n\n    let currentHeight = instance.rootElement.style.height;\n\n    if (currentHeight !== '') {\n      currentHeight = parseInt(instance.rootElement.style.height, 10);\n    }\n\n    let height = settings.height;\n\n    if (isFunction(height)) {\n      height = height();\n    }\n\n    if (init) {\n      const initialStyle = instance.rootElement.getAttribute('style');\n\n      if (initialStyle) {\n        instance.rootElement.setAttribute('data-initialstyle', instance.rootElement.getAttribute('style'));\n      }\n    }\n\n    if (height === null) {\n      const initialStyle = instance.rootElement.getAttribute('data-initialstyle');\n\n      if (initialStyle && (initialStyle.indexOf('height') > -1 || initialStyle.indexOf('overflow') > -1)) {\n        instance.rootElement.setAttribute('style', initialStyle);\n\n      } else {\n        instance.rootElement.style.height = '';\n        instance.rootElement.style.overflow = '';\n      }\n\n    } else if (height !== undefined) {\n      instance.rootElement.style.height = isNaN(height) ? `${height}` : `${height}px`;\n      instance.rootElement.style.overflow = 'hidden';\n    }\n\n    if (typeof settings.width !== 'undefined') {\n      let width = settings.width;\n\n      if (isFunction(width)) {\n        width = width();\n      }\n\n      instance.rootElement.style.width = isNaN(width) ? `${width}` : `${width}px`;\n    }\n\n    if (!init) {\n      if (instance.view) {\n        instance.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n        instance.view._wt.exportSettingsAsClassNames();\n      }\n\n      instance.runHooks('afterUpdateSettings', settings);\n    }\n\n    grid.adjustRowsAndCols();\n\n    if (instance.view && !firstRun) {\n      instance.forceFullRender = true; // used when data was changed\n      instance.view.render();\n      instance.view._wt.wtOverlays.adjustElementsSize();\n    }\n\n    if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) &&\n        currentHeight !== height) {\n      instance.view._wt.wtOverlays.updateMainScrollableElements();\n    }\n  };\n\n  /**\n   * Gets the value of the currently focused cell.\n   *\n   * For column headers and row headers, returns `null`.\n   *\n   * @memberof Core#\n   * @function getValue\n   * @returns {*} The value of the focused cell.\n   */\n  this.getValue = function() {\n    const sel = instance.getSelectedLast();\n\n    if (tableMeta.getValue) {\n      if (isFunction(tableMeta.getValue)) {\n        return tableMeta.getValue.call(instance);\n      } else if (sel) {\n        return instance.getData()[sel[0][0]][tableMeta.getValue];\n      }\n    } else if (sel) {\n      return instance.getDataAtCell(sel[0], sel[1]);\n    }\n  };\n\n  /**\n   * Returns the object settings.\n   *\n   * @memberof Core#\n   * @function getSettings\n   * @returns {TableMeta} Object containing the current table settings.\n   */\n  this.getSettings = function() {\n    return tableMeta;\n  };\n\n  /**\n   * Clears the data from the table (the table settings remain intact).\n   *\n   * @memberof Core#\n   * @function clear\n   */\n  this.clear = function() {\n    this.selectAll();\n    this.emptySelectedCells();\n  };\n\n  /**\n   * The `alter()` method lets you alter the grid's structure\n   * by adding or removing rows and columns at specified positions.\n   *\n   * ::: tip\n   * If you use an array of objects in your [`data`](@/api/options.md#data), the column-related actions won't work.\n   * :::\n   *\n   * ```js\n   * // above row 10 (by visual index), insert 1 new row\n   * hot.alter('insert_row_above', 10);\n   * ```\n   *\n   *  | Action               | With `index` | Without `index` |\n   *  | -------------------- | ------------ | --------------- |\n   *  | `'insert_row_above'` | Inserts rows above the `index` row. | Inserts rows above the first row. |\n   *  | `'insert_row_below'` | Inserts rows below the `index` row. | Inserts rows below the last row. |\n   *  | `'remove_row'`       | Removes rows, starting from the `index` row. | Removes rows, starting from the last row. |\n   *  | `'insert_col_start'` | Inserts columns before the `index` column. | Inserts columns before the first column. |\n   *  | `'insert_col_end'`   | Inserts columns after the `index` column. | Inserts columns after the last column. |\n   *  | `'remove_col'`       | Removes columns, starting from the `index` column. | Removes columns, starting from the last column. |\n   *\n   * Additional information about `'insert_col_start'` and `'insert_col_end'`:\n   * - Their behavior depends on your [`layoutDirection`](@/api/options.md#layoutdirection).\n   * - If the provided `index` is higher than the actual number of columns, Handsontable doesn't generate\n   * the columns missing in between. Instead, the new columns are inserted next to the last column.\n   *\n   * @memberof Core#\n   * @function alter\n   * @param {string} action Available operations:\n   * <ul>\n   *    <li> `'insert_row_above'` </li>\n   *    <li> `'insert_row_below'` </li>\n   *    <li> `'remove_row'` </li> </li>\n   *    <li> `'insert_col_start'` </li>\n   *    <li> `'insert_col_end'` </li>\n   *    <li> `'remove_col'` </li>\n   * </ul>\n   * @param {number|number[]} [index] A visual index of the row/column before or after which the new row/column will be\n   *                                inserted or removed. Can also be an array of arrays, in format `[[index, amount],...]`.\n   * @param {number} [amount] The amount of rows or columns to be inserted or removed (default: `1`).\n   * @param {string} [source] Source indicator.\n   * @param {boolean} [keepEmptyRows] If set to `true`: prevents removing empty rows.\n   * @example\n   * ```js\n   * // above row 10 (by visual index), insert 1 new row\n   * hot.alter('insert_row_above', 10);\n   *\n   * // below row 10 (by visual index), insert 3 new rows\n   * hot.alter('insert_row_below', 10, 3);\n   *\n   * // in the LTR layout direction: to the left of column 10 (by visual index), insert 3 new columns\n   * // in the RTL layout direction: to the right of column 10 (by visual index), insert 3 new columns\n   * hot.alter('insert_col_start', 10, 3);\n   *\n   * // in the LTR layout direction: to the right of column 10 (by visual index), insert 1 new column\n   * // in the RTL layout direction: to the left of column 10 (by visual index), insert 1 new column\n   * hot.alter('insert_col_end', 10);\n   *\n   * // remove 2 rows, starting from row 10 (by visual index)\n   * hot.alter('remove_row', 10, 2);\n   *\n   * // remove 3 rows, starting from row 1 (by visual index)\n   * // remove 2 rows, starting from row 5 (by visual index)\n   * hot.alter('remove_row', [[1, 3], [5, 2]]);\n   * ```\n   */\n  this.alter = function(action, index, amount, source, keepEmptyRows) {\n    grid.alter(action, index, amount, source, keepEmptyRows);\n  };\n\n  /**\n   * Returns a TD element for the given `row` and `column` arguments, if it is rendered on screen.\n   * Returns `null` if the TD is not rendered on screen (probably because that part of the table is not visible).\n   *\n   * @memberof Core#\n   * @function getCell\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {boolean} [topmost=false] If set to `true`, it returns the TD element from the topmost overlay. For example,\n   * if the wanted cell is in the range of fixed rows, it will return a TD element from the `top` overlay.\n   * @returns {HTMLTableCellElement|null} The cell's TD element.\n   */\n  this.getCell = function(row, column, topmost = false) {\n    let renderableColumnIndex = column; // Handling also column headers.\n    let renderableRowIndex = row; // Handling also row headers.\n\n    if (column >= 0) {\n      if (this.columnIndexMapper.isHidden(this.toPhysicalColumn(column))) {\n        return null;\n      }\n\n      renderableColumnIndex = this.columnIndexMapper.getRenderableFromVisualIndex(column);\n    }\n\n    if (row >= 0) {\n      if (this.rowIndexMapper.isHidden(this.toPhysicalRow(row))) {\n        return null;\n      }\n\n      renderableRowIndex = this.rowIndexMapper.getRenderableFromVisualIndex(row);\n    }\n\n    if (\n      renderableRowIndex === null ||\n      renderableColumnIndex === null ||\n      renderableRowIndex === undefined ||\n      renderableColumnIndex === undefined\n    ) {\n      return null;\n    }\n\n    return instance.view\n      .getCellAtCoords(instance._createCellCoords(renderableRowIndex, renderableColumnIndex), topmost);\n  };\n\n  /**\n   * Returns the coordinates of the cell, provided as a HTML table cell element.\n   *\n   * @memberof Core#\n   * @function getCoords\n   * @param {HTMLTableCellElement} element The HTML Element representing the cell.\n   * @returns {CellCoords|null} Visual coordinates object.\n   * @example\n   * ```js\n   * hot.getCoords(hot.getCell(1, 1));\n   * // it returns CellCoords object instance with props row: 1 and col: 1.\n   * ```\n   */\n  this.getCoords = function(element) {\n    const renderableCoords = this.view._wt.wtTable.getCoords(element);\n\n    if (renderableCoords === null) {\n      return null;\n    }\n\n    const { row: renderableRow, col: renderableColumn } = renderableCoords;\n\n    let visualRow = renderableRow;\n    let visualColumn = renderableColumn;\n\n    if (renderableRow >= 0) {\n      visualRow = this.rowIndexMapper.getVisualFromRenderableIndex(renderableRow);\n    }\n\n    if (renderableColumn >= 0) {\n      visualColumn = this.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn);\n    }\n\n    return instance._createCellCoords(visualRow, visualColumn);\n  };\n\n  /**\n   * Returns the property name that corresponds with the given column index.\n   * If the data source is an array of arrays, it returns the columns index.\n   *\n   * @memberof Core#\n   * @function colToProp\n   * @param {number} column Visual column index.\n   * @returns {string|number} Column property or physical column index.\n   */\n  this.colToProp = function(column) {\n    return datamap.colToProp(column);\n  };\n\n  /**\n   * Returns column index that corresponds with the given property.\n   *\n   * @memberof Core#\n   * @function propToCol\n   * @param {string|number} prop Property name or physical column index.\n   * @returns {number} Visual column index.\n   */\n  this.propToCol = function(prop) {\n    return datamap.propToCol(prop);\n  };\n\n  /**\n   * Translate physical row index into visual.\n   *\n   * This method is useful when you want to retrieve visual row index which can be reordered, moved or trimmed\n   * based on a physical index.\n   *\n   * @memberof Core#\n   * @function toVisualRow\n   * @param {number} row Physical row index.\n   * @returns {number} Returns visual row index.\n   */\n  this.toVisualRow = row => this.rowIndexMapper.getVisualFromPhysicalIndex(row);\n\n  /**\n   * Translate physical column index into visual.\n   *\n   * This method is useful when you want to retrieve visual column index which can be reordered, moved or trimmed\n   * based on a physical index.\n   *\n   * @memberof Core#\n   * @function toVisualColumn\n   * @param {number} column Physical column index.\n   * @returns {number} Returns visual column index.\n   */\n  this.toVisualColumn = column => this.columnIndexMapper.getVisualFromPhysicalIndex(column);\n\n  /**\n   * Translate visual row index into physical.\n   *\n   * This method is useful when you want to retrieve physical row index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalRow\n   * @param {number} row Visual row index.\n   * @returns {number} Returns physical row index.\n   */\n  this.toPhysicalRow = row => this.rowIndexMapper.getPhysicalFromVisualIndex(row);\n\n  /**\n   * Translate visual column index into physical.\n   *\n   * This method is useful when you want to retrieve physical column index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalColumn\n   * @param {number} column Visual column index.\n   * @returns {number} Returns physical column index.\n   */\n  this.toPhysicalColumn = column => this.columnIndexMapper.getPhysicalFromVisualIndex(column);\n\n  /**\n   * @description\n   * Returns the cell value at `row`, `column`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCell\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {*} Data at cell.\n   */\n  this.getDataAtCell = function(row, column) {\n    return datamap.get(row, datamap.colToProp(column));\n  };\n\n  /**\n   * Returns value at visual `row` and `prop` indexes.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRowProp\n   * @param {number} row Visual row index.\n   * @param {string} prop Property name.\n   * @returns {*} Cell value.\n   */\n  this.getDataAtRowProp = function(row, prop) {\n    return datamap.get(row, prop);\n  };\n\n  /**\n   * @description\n   * Returns array of column values from the data source.\n   *\n   * __Note__: If columns were reordered or sorted, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCol\n   * @param {number} column Visual column index.\n   * @returns {Array} Array of cell values.\n   */\n  this.getDataAtCol = function(column) {\n    const columnData = [];\n    const dataByRows = datamap.getRange(\n      instance._createCellCoords(0, column),\n      instance._createCellCoords(tableMeta.data.length - 1, column),\n      datamap.DESTINATION_RENDERER\n    );\n\n    for (let i = 0; i < dataByRows.length; i += 1) {\n      for (let j = 0; j < dataByRows[i].length; j += 1) {\n        columnData.push(dataByRows[i][j]);\n      }\n    }\n\n    return columnData;\n  };\n\n  /**\n   * Given the object property name (e.g. `'first.name'` or `'0'`), returns an array of column's values from the table data.\n   * You can also provide a column index as the first argument.\n   *\n   * @memberof Core#\n   * @function getDataAtProp\n   * @param {string|number} prop Property name or physical column index.\n   * @returns {Array} Array of cell values.\n   */\n  // TODO: Getting data from `datamap` should work on visual indexes.\n  this.getDataAtProp = function(prop) {\n    const columnData = [];\n    const dataByRows = datamap.getRange(\n      instance._createCellCoords(0, datamap.propToCol(prop)),\n      instance._createCellCoords(tableMeta.data.length - 1, datamap.propToCol(prop)),\n      datamap.DESTINATION_RENDERER);\n\n    for (let i = 0; i < dataByRows.length; i += 1) {\n      for (let j = 0; j < dataByRows[i].length; j += 1) {\n        columnData.push(dataByRows[i][j]);\n      }\n    }\n\n    return columnData;\n  };\n\n  /**\n   * Returns a clone of the source data object.\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * __Note__: This method may return incorrect values for cells that contain\n   * [formulas](@/guides/formulas/formula-calculation/formula-calculation.md). This is because `getSourceData()`\n   * operates on source data ([physical indexes](@/api/indexMapper.md)),\n   * whereas formulas operate on visual data (visual indexes).\n   *\n   * @memberof Core#\n   * @function getSourceData\n   * @param {number} [row] From physical row index.\n   * @param {number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {number} [row2] To physical row index.\n   * @param {number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array[]|object[]} The table data.\n   */\n  this.getSourceData = function(row, column, row2, column2) {\n    let data;\n\n    if (row === undefined) {\n      data = dataSource.getData();\n    } else {\n      data = dataSource\n        .getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2));\n    }\n\n    return data;\n  };\n\n  /**\n   * Returns the source data object as an arrays of arrays format even when source data was provided in another format.\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataArray\n   * @param {number} [row] From physical row index.\n   * @param {number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {number} [row2] To physical row index.\n   * @param {number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array} An array of arrays.\n   */\n  this.getSourceDataArray = function(row, column, row2, column2) {\n    let data;\n\n    if (row === undefined) {\n      data = dataSource.getData(true);\n    } else {\n      data = dataSource\n        .getByRange(instance._createCellCoords(row, column), instance._createCellCoords(row2, column2), true);\n    }\n\n    return data;\n  };\n\n  /**\n   * Returns an array of column values from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCol\n   * @param {number} column Visual column index.\n   * @returns {Array} Array of the column's cell values.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n  this.getSourceDataAtCol = function(column) {\n    return dataSource.getAtColumn(column);\n  };\n\n  /* eslint-disable jsdoc/require-param */\n  /**\n   * Set the provided value in the source data set at the provided coordinates.\n   *\n   * @memberof Core#\n   * @function setSourceDataAtCell\n   * @param {number|Array} row Physical row index or array of changes in format `[[row, prop, value], ...]`.\n   * @param {number|string} column Physical column index / prop name.\n   * @param {*} value The value to be set at the provided coordinates.\n   * @param {string} [source] Source of the change as a string.\n   */\n  /* eslint-enable jsdoc/require-param */\n  this.setSourceDataAtCell = function(row, column, value, source) {\n    const input = setDataInputToArray(row, column, value);\n    const isThereAnySetSourceListener = this.hasHook('afterSetSourceDataAtCell');\n    const changesForHook = [];\n\n    if (isThereAnySetSourceListener) {\n      arrayEach(input, ([changeRow, changeProp, changeValue]) => {\n        changesForHook.push([\n          changeRow,\n          changeProp,\n          dataSource.getAtCell(changeRow, changeProp), // The previous value.\n          changeValue,\n        ]);\n      });\n    }\n\n    arrayEach(input, ([changeRow, changeProp, changeValue]) => {\n      dataSource.setAtCell(changeRow, changeProp, changeValue);\n    });\n\n    if (isThereAnySetSourceListener) {\n      this.runHooks('afterSetSourceDataAtCell', changesForHook, source);\n    }\n\n    this.render();\n\n    const activeEditor = instance.getActiveEditor();\n\n    if (activeEditor && isDefined(activeEditor.refreshValue)) {\n      activeEditor.refreshValue();\n    }\n  };\n\n  /**\n   * Returns a single row of the data (array or object, depending on what data format you use).\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtRow\n   * @param {number} row Physical row index.\n   * @returns {Array|object} Single row of data.\n   */\n  this.getSourceDataAtRow = function(row) {\n    return dataSource.getAtRow(row);\n  };\n\n  /**\n   * Returns a single value from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCell\n   * @param {number} row Physical row index.\n   * @param {number} column Visual column index.\n   * @returns {*} Cell data.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n  this.getSourceDataAtCell = function(row, column) {\n    return dataSource.getAtCell(row, column);\n  };\n\n  /**\n   * @description\n   * Returns a single row of the data.\n   *\n   * __Note__: If rows were reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRow\n   * @param {number} row Visual row index.\n   * @returns {Array} Array of row's cell data.\n   */\n  this.getDataAtRow = function(row) {\n    const data = datamap.getRange(\n      instance._createCellCoords(row, 0),\n      instance._createCellCoords(row, this.countCols() - 1),\n      datamap.DESTINATION_RENDERER\n    );\n\n    return data[0] || [];\n  };\n\n  /**\n   * @description\n   * Returns a data type defined in the Handsontable settings under the `type` key ({@link Options#type}).\n   * If there are cells with different types in the selected range, it returns `'mixed'`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataType\n   * @param {number} rowFrom From visual row index.\n   * @param {number} columnFrom From visual column index.\n   * @param {number} rowTo To visual row index.\n   * @param {number} columnTo To visual column index.\n   * @returns {string} Cell type (e.q: `'mixed'`, `'text'`, `'numeric'`, `'autocomplete'`).\n   */\n  this.getDataType = function(rowFrom, columnFrom, rowTo, columnTo) {\n    const coords = rowFrom === undefined ?\n      [0, 0, this.countRows(), this.countCols()] : [rowFrom, columnFrom, rowTo, columnTo];\n    const [rowStart, columnStart] = coords;\n    let [,, rowEnd, columnEnd] = coords;\n    let previousType = null;\n    let currentType = null;\n\n    if (rowEnd === undefined) {\n      rowEnd = rowStart;\n    }\n    if (columnEnd === undefined) {\n      columnEnd = columnStart;\n    }\n    let type = 'mixed';\n\n    rangeEach(Math.max(Math.min(rowStart, rowEnd), 0), Math.max(rowStart, rowEnd), (row) => {\n      let isTypeEqual = true;\n\n      rangeEach(Math.max(Math.min(columnStart, columnEnd), 0), Math.max(columnStart, columnEnd), (column) => {\n        const cellType = this.getCellMeta(row, column);\n\n        currentType = cellType.type;\n\n        if (previousType) {\n          isTypeEqual = previousType === currentType;\n        } else {\n          previousType = currentType;\n        }\n\n        return isTypeEqual;\n      });\n      type = isTypeEqual ? currentType : 'mixed';\n\n      return isTypeEqual;\n    });\n\n    return type;\n  };\n\n  /**\n   * Remove a property defined by the `key` argument from the cell meta object for the provided `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function removeCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key Property name.\n   * @fires Hooks#beforeRemoveCellMeta\n   * @fires Hooks#afterRemoveCellMeta\n   */\n  this.removeCellMeta = function(row, column, key) {\n    const [physicalRow, physicalColumn] = [this.toPhysicalRow(row), this.toPhysicalColumn(column)];\n    let cachedValue = metaManager.getCellMetaKeyValue(physicalRow, physicalColumn, key);\n\n    const hookResult = instance.runHooks('beforeRemoveCellMeta', row, column, key, cachedValue);\n\n    if (hookResult !== false) {\n      metaManager.removeCellMeta(physicalRow, physicalColumn, key);\n\n      instance.runHooks('afterRemoveCellMeta', row, column, key, cachedValue);\n    }\n\n    cachedValue = null;\n  };\n\n  /**\n   * Removes or adds one or more rows of the cell meta objects to the cell meta collections.\n   *\n   * @since 0.30.0\n   * @memberof Core#\n   * @function spliceCellsMeta\n   * @param {number} visualIndex A visual index that specifies at what position to add/remove items.\n   * @param {number} [deleteAmount=0] The number of items to be removed. If set to 0, no cell meta objects will be removed.\n   * @param {...object} [cellMetaRows] The new cell meta row objects to be added to the cell meta collection.\n   */\n  this.spliceCellsMeta = function(visualIndex, deleteAmount = 0, ...cellMetaRows) {\n    if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {\n      throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');\n    }\n\n    if (deleteAmount > 0) {\n      metaManager.removeRow(this.toPhysicalRow(visualIndex), deleteAmount);\n    }\n\n    if (cellMetaRows.length > 0) {\n      arrayEach(cellMetaRows.reverse(), (cellMetaRow) => {\n        metaManager.createRow(this.toPhysicalRow(visualIndex));\n\n        arrayEach(cellMetaRow, (cellMeta, columnIndex) => this.setCellMetaObject(visualIndex, columnIndex, cellMeta));\n      });\n    }\n\n    instance.render();\n  };\n\n  /**\n   * Set cell meta data object defined by `prop` to the corresponding params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMetaObject\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} prop Meta object.\n   */\n  this.setCellMetaObject = function(row, column, prop) {\n    if (typeof prop === 'object') {\n      objectEach(prop, (value, key) => {\n        this.setCellMeta(row, column, key, value);\n      });\n    }\n  };\n\n  /**\n   * Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key Property name.\n   * @param {string} value Property value.\n   * @fires Hooks#beforeSetCellMeta\n   * @fires Hooks#afterSetCellMeta\n   */\n  this.setCellMeta = function(row, column, key, value) {\n    const allowSetCellMeta = instance.runHooks('beforeSetCellMeta', row, column, key, value);\n\n    if (allowSetCellMeta === false) {\n      return;\n    }\n\n    let physicalRow = row;\n    let physicalColumn = column;\n\n    if (row < this.countRows()) {\n      physicalRow = this.toPhysicalRow(row);\n    }\n\n    if (column < this.countCols()) {\n      physicalColumn = this.toPhysicalColumn(column);\n    }\n\n    metaManager.setCellMeta(physicalRow, physicalColumn, key, value);\n\n    instance.runHooks('afterSetCellMeta', row, column, key, value);\n  };\n\n  /**\n   * Get all the cells meta settings at least once generated in the table (in order of cell initialization).\n   *\n   * @memberof Core#\n   * @function getCellsMeta\n   * @returns {Array} Returns an array of ColumnSettings object instances.\n   */\n  this.getCellsMeta = function() {\n    return metaManager.getCellsMeta();\n  };\n\n  /**\n   * Returns the cell properties object for the given `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function getCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {object} The cell properties object.\n   * @fires Hooks#beforeGetCellMeta\n   * @fires Hooks#afterGetCellMeta\n   */\n  this.getCellMeta = function(row, column) {\n    let physicalRow = this.toPhysicalRow(row);\n    let physicalColumn = this.toPhysicalColumn(column);\n\n    if (physicalRow === null) {\n      physicalRow = row;\n    }\n\n    if (physicalColumn === null) {\n      physicalColumn = column;\n    }\n\n    return metaManager.getCellMeta(physicalRow, physicalColumn, {\n      visualRow: row,\n      visualColumn: column,\n    });\n  };\n\n  /**\n   * Returns the meta information for the provided column.\n   *\n   * @since 14.5.0\n   * @memberof Core#\n   * @function getColumnMeta\n   * @param {number} column Visual column index.\n   * @returns {object}\n   */\n  this.getColumnMeta = function(column) {\n    return metaManager.getColumnMeta(this.toPhysicalColumn(column));\n  };\n\n  /**\n   * Returns an array of cell meta objects for specified physical row index.\n   *\n   * @memberof Core#\n   * @function getCellMetaAtRow\n   * @param {number} row Physical row index.\n   * @returns {Array}\n   */\n  this.getCellMetaAtRow = function(row) {\n    return metaManager.getCellsMetaAtRow(row);\n  };\n\n  /**\n   * Checks if your [data format](@/guides/getting-started/binding-to-data/binding-to-data.md#compatible-data-types)\n   * and [configuration options](@/guides/getting-started/configuration-options/configuration-options.md)\n   * allow for changing the number of columns.\n   *\n   * Returns `false` when your data is an array of objects,\n   * or when you use the [`columns`](@/api/options.md#columns) option.\n   * Otherwise, returns `true`.\n   *\n   * @memberof Core#\n   * @function isColumnModificationAllowed\n   * @returns {boolean}\n   */\n  this.isColumnModificationAllowed = function() {\n    return !(instance.dataType === 'object' || tableMeta.columns);\n  };\n\n  /**\n   * Returns the cell renderer function by given `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellRenderer\n   * @param {number|object} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function} Returns the renderer function.\n   * @example\n   * ```js\n   * // Get cell renderer using `row` and `column` coordinates.\n   * hot.getCellRenderer(1, 1);\n   * // Get cell renderer using cell meta object.\n   * hot.getCellRenderer(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellRenderer = function(rowOrMeta, column) {\n    const cellRenderer = typeof rowOrMeta === 'number' ?\n      instance.getCellMeta(rowOrMeta, column).renderer : rowOrMeta.renderer;\n\n    if (typeof cellRenderer === 'string') {\n      return getRenderer(cellRenderer);\n    }\n\n    return isUndefined(cellRenderer) ? getRenderer('text') : cellRenderer;\n  };\n\n  /**\n   * Returns the cell editor class by the provided `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellEditor\n   * @param {number} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function|boolean} Returns the editor class or `false` is cell editor is disabled.\n   * @example\n   * ```js\n   * // Get cell editor class using `row` and `column` coordinates.\n   * hot.getCellEditor(1, 1);\n   * // Get cell editor class using cell meta object.\n   * hot.getCellEditor(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellEditor = function(rowOrMeta, column) {\n    const cellEditor = typeof rowOrMeta === 'number' ?\n      instance.getCellMeta(rowOrMeta, column).editor : rowOrMeta.editor;\n\n    if (typeof cellEditor === 'string') {\n      return getEditor(cellEditor);\n    }\n\n    return isUndefined(cellEditor) ? getEditor('text') : cellEditor;\n  };\n\n  /**\n   * Returns the cell validator by `row` and `column`.\n   *\n   * @memberof Core#\n   * @function getCellValidator\n   * @param {number|object} rowOrMeta Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {number} column Visual column index.\n   * @returns {Function|RegExp|undefined} The validator function.\n   * @example\n   * ```js\n   * // Get cell validator using `row` and `column` coordinates.\n   * hot.getCellValidator(1, 1);\n   * // Get cell validator using cell meta object.\n   * hot.getCellValidator(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellValidator = function(rowOrMeta, column) {\n    const cellValidator = typeof rowOrMeta === 'number' ?\n      instance.getCellMeta(rowOrMeta, column).validator : rowOrMeta.validator;\n\n    if (typeof cellValidator === 'string') {\n      return getValidator(cellValidator);\n    }\n\n    return cellValidator;\n  };\n\n  /**\n   * Validates every cell in the data set,\n   * using a [validator function](@/guides/cell-functions/cell-validator/cell-validator.md) configured for each cell.\n   *\n   * Doesn't validate cells that are currently [trimmed](@/guides/rows/row-trimming/row-trimming.md),\n   * [hidden](@/guides/rows/row-hiding/row-hiding.md), or [filtered](@/guides/columns/column-filter/column-filter.md),\n   * as such cells are not included in the data set until you bring them back again.\n   *\n   * After the validation, the `callback` function is fired, with the `valid` argument set to:\n   * - `true` for valid cells\n   * - `false` for invalid cells\n   *\n   * @memberof Core#\n   * @function validateCells\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateCells((valid) => {\n   *   if (valid) {\n   *     // ... code for validated cells\n   *   }\n   * })\n   * ```\n   */\n  this.validateCells = function(callback) {\n    this._validateCells(callback);\n  };\n\n  /**\n   * Validates rows using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateRows\n   * @param {Array} [rows] Array of validation target visual row indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateRows([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated rows\n   *   }\n   * })\n   * ```\n   */\n  this.validateRows = function(rows, callback) {\n    if (!Array.isArray(rows)) {\n      throw new Error('validateRows parameter `rows` must be an array');\n    }\n    this._validateCells(callback, rows);\n  };\n\n  /**\n   * Validates columns using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateColumns\n   * @param {Array} [columns] Array of validation target visual columns indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateColumns([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated columns\n   *   }\n   * })\n   * ```\n   */\n  this.validateColumns = function(columns, callback) {\n    if (!Array.isArray(columns)) {\n      throw new Error('validateColumns parameter `columns` must be an array');\n    }\n    this._validateCells(callback, undefined, columns);\n  };\n\n  /**\n   * Validates all cells using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n   *\n   * Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _validateCells\n   * @param {Function} [callback] The callback function.\n   * @param {Array} [rows] An array of validation target visual row indexes.\n   * @param {Array} [columns] An array of validation target visual column indexes.\n   */\n  this._validateCells = function(callback, rows, columns) {\n    const waitingForValidator = new ValidatorsQueue();\n\n    if (callback) {\n      waitingForValidator.onQueueEmpty = callback;\n    }\n\n    let i = instance.countRows() - 1;\n\n    while (i >= 0) {\n      if (rows !== undefined && rows.indexOf(i) === -1) {\n        i -= 1;\n        continue;\n      }\n      let j = instance.countCols() - 1;\n\n      while (j >= 0) {\n        if (columns !== undefined && columns.indexOf(j) === -1) {\n          j -= 1;\n          continue;\n        }\n        waitingForValidator.addValidatorToQueue();\n\n        instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), (result) => {\n          if (typeof result !== 'boolean') {\n            throw new Error('Validation error: result is not boolean');\n          }\n          if (result === false) {\n            waitingForValidator.valid = false;\n          }\n          waitingForValidator.removeValidatorFormQueue();\n        }, 'validateCells');\n        j -= 1;\n      }\n      i -= 1;\n    }\n\n    waitingForValidator.checkIfQueueIsEmpty();\n  };\n\n  /**\n   * Returns an array of row headers' values (if they are enabled). If param `row` was given, it returns the header of the given row as a string.\n   *\n   * @memberof Core#\n   * @function getRowHeader\n   * @param {number} [row] Visual row index.\n   * @fires Hooks#modifyRowHeader\n   * @returns {Array|string|number} Array of header values / single header value.\n   */\n  this.getRowHeader = function(row) {\n    let rowHeader = tableMeta.rowHeaders;\n    let physicalRow = row;\n\n    if (physicalRow !== undefined) {\n      physicalRow = instance.runHooks('modifyRowHeader', physicalRow);\n    }\n\n    if (physicalRow === undefined) {\n      rowHeader = [];\n      rangeEach(instance.countRows() - 1, (i) => {\n        rowHeader.push(instance.getRowHeader(i));\n      });\n\n    } else if (Array.isArray(rowHeader) && rowHeader[physicalRow] !== undefined) {\n      rowHeader = rowHeader[physicalRow];\n\n    } else if (isFunction(rowHeader)) {\n      rowHeader = rowHeader(physicalRow);\n\n    } else if (rowHeader && typeof rowHeader !== 'string' && typeof rowHeader !== 'number') {\n      rowHeader = physicalRow + 1;\n    }\n\n    return rowHeader;\n  };\n\n  /**\n   * Returns information about if this table is configured to display row headers.\n   *\n   * @memberof Core#\n   * @function hasRowHeaders\n   * @returns {boolean} `true` if the instance has the row headers enabled, `false` otherwise.\n   */\n  this.hasRowHeaders = function() {\n    return !!tableMeta.rowHeaders;\n  };\n\n  /**\n   * Returns information about if this table is configured to display column headers.\n   *\n   * @memberof Core#\n   * @function hasColHeaders\n   * @returns {boolean} `true` if the instance has the column headers enabled, `false` otherwise.\n   */\n  this.hasColHeaders = function() {\n    if (tableMeta.colHeaders !== undefined && tableMeta.colHeaders !== null) { // Polymer has empty value = null\n      return !!tableMeta.colHeaders;\n    }\n    for (let i = 0, ilen = instance.countCols(); i < ilen; i++) {\n      if (instance.getColHeader(i)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  /**\n   * Gets the values of column headers (if column headers are [enabled](@/api/options.md#colheaders)).\n   *\n   * To get an array with the values of all\n   * [bottom-most](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers) column headers,\n   * call `getColHeader()` with no arguments.\n   *\n   * To get the value of the bottom-most header of a specific column, use the `column` parameter.\n   *\n   * To get the value of a [specific-level](@/guides/columns/column-groups/column-groups.md) header\n   * of a specific column, use the `column` and `headerLevel` parameters.\n   *\n   * Read more:\n   * - [Guides: Column groups](@/guides/columns/column-groups/column-groups.md)\n   * - [Options: `colHeaders`](@/api/options.md#colheaders)\n   * - [Guides: Copy with headers](@/guides/cell-features/clipboard/clipboard.md#copy-with-headers)\n   *\n   * ```js\n   * // get the contents of all bottom-most column headers\n   * hot.getColHeader();\n   *\n   * // get the contents of the bottom-most header of a specific column\n   * hot.getColHeader(5);\n   *\n   * // get the contents of a specific column header at a specific level\n   * hot.getColHeader(5, -2);\n   * ```\n   *\n   * @memberof Core#\n   * @function getColHeader\n   * @param {number} [column] A visual column index.\n   * @param {number} [headerLevel=-1] (Since 12.3.0) Header level index. Accepts positive (0 to n)\n   *                                  and negative (-1 to -n) values. For positive values, 0 points to the\n   *                                  topmost header. For negative values, -1 points to the bottom-most\n   *                                  header (the header closest to the cells).\n   * @fires Hooks#modifyColHeader\n   * @fires Hooks#modifyColumnHeaderValue\n   * @returns {Array|string|number} Column header values.\n   */\n  this.getColHeader = function(column, headerLevel = -1) {\n    const columnIndex = instance.runHooks('modifyColHeader', column);\n\n    if (columnIndex === undefined) {\n      const out = [];\n      const ilen = instance.countCols();\n\n      for (let i = 0; i < ilen; i++) {\n        out.push(instance.getColHeader(i));\n      }\n\n      return out;\n    }\n\n    let result = tableMeta.colHeaders;\n\n    const translateVisualIndexToColumns = function(visualColumnIndex) {\n      const arr = [];\n      const columnsLen = instance.countCols();\n      let index = 0;\n\n      for (; index < columnsLen; index++) {\n        if (isFunction(tableMeta.columns) && tableMeta.columns(index)) {\n          arr.push(index);\n        }\n      }\n\n      return arr[visualColumnIndex];\n    };\n\n    const physicalColumn = instance.toPhysicalColumn(columnIndex);\n    const prop = translateVisualIndexToColumns(physicalColumn);\n\n    if (tableMeta.colHeaders === false) {\n      result = null;\n\n    } else if (tableMeta.columns && isFunction(tableMeta.columns) && tableMeta.columns(prop) &&\n               tableMeta.columns(prop).title) {\n      result = tableMeta.columns(prop).title;\n\n    } else if (tableMeta.columns && tableMeta.columns[physicalColumn] &&\n               tableMeta.columns[physicalColumn].title) {\n      result = tableMeta.columns[physicalColumn].title;\n\n    } else if (Array.isArray(tableMeta.colHeaders) && tableMeta.colHeaders[physicalColumn] !== undefined) {\n      result = tableMeta.colHeaders[physicalColumn];\n\n    } else if (isFunction(tableMeta.colHeaders)) {\n      result = tableMeta.colHeaders(physicalColumn);\n\n    } else if (tableMeta.colHeaders && typeof tableMeta.colHeaders !== 'string' &&\n               typeof tableMeta.colHeaders !== 'number') {\n      result = spreadsheetColumnLabel(columnIndex); // see #1458\n    }\n\n    result = instance.runHooks('modifyColumnHeaderValue', result, column, headerLevel);\n\n    return result;\n  };\n\n  /**\n   * Return column width from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getColWidthFromSettings\n   * @param {number} col Visual col index.\n   * @returns {number}\n   */\n  this._getColWidthFromSettings = function(col) {\n    let width;\n\n    // We currently don't support cell meta objects for headers (negative values)\n    if (col >= 0) {\n      const cellProperties = instance.getCellMeta(0, col);\n\n      width = cellProperties.width;\n    }\n\n    if (width === undefined || width === tableMeta.width) {\n      width = tableMeta.colWidths;\n    }\n\n    if (width !== undefined && width !== null) {\n      switch (typeof width) {\n        case 'object': // array\n          width = width[col];\n          break;\n\n        case 'function':\n          width = width(col);\n          break;\n        default:\n          break;\n      }\n      if (typeof width === 'string') {\n        width = parseInt(width, 10);\n      }\n    }\n\n    return width;\n  };\n\n  /**\n   * Returns the width of the requested column.\n   *\n   * @memberof Core#\n   * @function getColWidth\n   * @param {number} column Visual column index.\n   * @returns {number} Column width.\n   * @fires Hooks#modifyColWidth\n   */\n  this.getColWidth = function(column) {\n    let width = instance._getColWidthFromSettings(column);\n\n    width = instance.runHooks('modifyColWidth', width, column);\n\n    if (width === undefined) {\n      width = DEFAULT_COLUMN_WIDTH;\n    }\n\n    return width;\n  };\n\n  /**\n   * Return row height from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getRowHeightFromSettings\n   * @param {number} row Visual row index.\n   * @returns {number}\n   */\n  this._getRowHeightFromSettings = function(row) {\n    let height = tableMeta.rowHeights;\n\n    if (height !== undefined && height !== null) {\n      switch (typeof height) {\n        case 'object': // array\n          height = height[row];\n          break;\n\n        case 'function':\n          height = height(row);\n          break;\n        default:\n          break;\n      }\n      if (typeof height === 'string') {\n        height = parseInt(height, 10);\n      }\n    }\n\n    return height;\n  };\n\n  /**\n   * Returns a row's height, as recognized by Handsontable.\n   *\n   * Depending on your configuration, the method returns (in order of priority):\n   *   1. The row height set by the [`ManualRowResize`](@/api/manualRowResize.md) plugin\n   *     (if the plugin is enabled).\n   *   2. The row height set by the [`rowHeights`](@/api/options.md#rowheights) configuration option\n   *     (if the option is set).\n   *   3. The row height as measured in the DOM by the [`AutoRowSize`](@/api/autoRowSize.md) plugin\n   *     (if the plugin is enabled).\n   *   4. `undefined`, if neither [`ManualRowResize`](@/api/manualRowResize.md),\n   *     nor [`rowHeights`](@/api/options.md#rowheights),\n   *     nor [`AutoRowSize`](@/api/autoRowSize.md) is used.\n   *\n   * The height returned includes 1 px of the row's bottom border.\n   *\n   * Mind that this method is different from the\n   * [`getRowHeight()`](@/api/autoRowSize.md#getrowheight) method\n   * of the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n   *\n   * @memberof Core#\n   * @function getRowHeight\n   * @param {number} row A visual row index.\n   * @returns {number|undefined} The height of the specified row, in pixels.\n   * @fires Hooks#modifyRowHeight\n   */\n  this.getRowHeight = function(row) {\n    let height = instance._getRowHeightFromSettings(row);\n\n    height = instance.runHooks('modifyRowHeight', height, row);\n\n    return height;\n  };\n\n  /**\n   * Returns the total number of rows in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceRows\n   * @returns {number} Total number of rows.\n   */\n  this.countSourceRows = function() {\n    return dataSource.countRows();\n  };\n\n  /**\n   * Returns the total number of columns in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceCols\n   * @returns {number} Total number of columns.\n   */\n  this.countSourceCols = function() {\n    return dataSource.countFirstRowKeys();\n  };\n\n  /**\n   * Returns the total number of visual rows in the table.\n   *\n   * @memberof Core#\n   * @function countRows\n   * @returns {number} Total number of rows.\n   */\n  this.countRows = function() {\n    return datamap.getLength();\n  };\n\n  /**\n   * Returns the total number of visible columns in the table.\n   *\n   * @memberof Core#\n   * @function countCols\n   * @returns {number} Total number of columns.\n   */\n  this.countCols = function() {\n    const maxCols = tableMeta.maxCols;\n    const dataLen = this.columnIndexMapper.getNotTrimmedIndexesLength();\n\n    return Math.min(maxCols, dataLen);\n  };\n\n  /**\n   * Returns the number of rendered rows including rows that are partially or fully rendered\n   * outside the table viewport.\n   *\n   * @memberof Core#\n   * @function countRenderedRows\n   * @returns {number} Returns -1 if table is not visible.\n   */\n  this.countRenderedRows = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedRowsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered rows that are only visible in the table viewport.\n   * The rows that are partially visible are not counted.\n   *\n   * @memberof Core#\n   * @function countVisibleRows\n   * @returns {number} Number of visible rows or -1.\n   */\n  this.countVisibleRows = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleRowsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered rows including columns that are partially or fully rendered\n   * outside the table viewport.\n   *\n   * @memberof Core#\n   * @function countRenderedCols\n   * @returns {number} Returns -1 if table is not visible.\n   */\n  this.countRenderedCols = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getRenderedColumnsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered columns that are only visible in the table viewport.\n   * The columns that are partially visible are not counted.\n   *\n   * @memberof Core#\n   * @function countVisibleCols\n   * @returns {number} Number of visible columns or -1.\n   */\n  this.countVisibleCols = function() {\n    return instance.view._wt.drawn ? instance.view._wt.wtTable.getVisibleColumnsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered row headers.\n   *\n   * @since 14.0.0\n   * @memberof Core#\n   * @function countRowHeaders\n   * @returns {number} Number of row headers.\n   */\n  this.countRowHeaders = function() {\n    return this.view.getRowHeadersCount();\n  };\n\n  /**\n   * Returns the number of rendered column headers.\n   *\n   * @since 14.0.0\n   * @memberof Core#\n   * @function countColHeaders\n   * @returns {number} Number of column headers.\n   */\n  this.countColHeaders = function() {\n    return this.view.getColumnHeadersCount();\n  };\n\n  /**\n   * Returns the number of empty rows. If the optional ending parameter is `true`, returns the\n   * number of empty rows at the bottom of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyRows\n   * @param {boolean} [ending=false] If `true`, will only count empty rows at the end of the data source.\n   * @returns {number} Count empty rows.\n   */\n  this.countEmptyRows = function(ending = false) {\n    let emptyRows = 0;\n\n    rangeEachReverse(instance.countRows() - 1, (visualIndex) => {\n      if (instance.isEmptyRow(visualIndex)) {\n        emptyRows += 1;\n\n      } else if (ending === true) {\n        return false;\n      }\n    });\n\n    return emptyRows;\n  };\n\n  /**\n   * Returns the number of empty columns. If the optional ending parameter is `true`, returns the number of empty\n   * columns at right hand edge of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyCols\n   * @param {boolean} [ending=false] If `true`, will only count empty columns at the end of the data source row.\n   * @returns {number} Count empty cols.\n   */\n  this.countEmptyCols = function(ending = false) {\n    let emptyColumns = 0;\n\n    rangeEachReverse(instance.countCols() - 1, (visualIndex) => {\n      if (instance.isEmptyCol(visualIndex)) {\n        emptyColumns += 1;\n\n      } else if (ending === true) {\n        return false;\n      }\n    });\n\n    return emptyColumns;\n  };\n\n  /**\n   * Check if all cells in the row declared by the `row` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyRow\n   * @param {number} row Visual row index.\n   * @returns {boolean} `true` if the row at the given `row` is empty, `false` otherwise.\n   */\n  this.isEmptyRow = function(row) {\n    return tableMeta.isEmptyRow.call(instance, row);\n  };\n\n  /**\n   * Check if all cells in the the column declared by the `column` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyCol\n   * @param {number} column Column index.\n   * @returns {boolean} `true` if the column at the given `col` is empty, `false` otherwise.\n   */\n  this.isEmptyCol = function(column) {\n    return tableMeta.isEmptyCol.call(instance, column);\n  };\n\n  /**\n   * Select a single cell, or a single range of adjacent cells.\n   *\n   * To select a cell, pass its visual row and column indexes, for example: `selectCell(2, 4)`.\n   *\n   * To select a range, pass the visual indexes of the first and last cell in the range, for example: `selectCell(2, 4, 3, 5)`.\n   *\n   * If your columns have properties, you can pass those properties' values instead of column indexes, for example: `selectCell(2, 'first_name')`.\n   *\n   * By default, `selectCell()` also:\n   *  - Scrolls the viewport to the newly-selected cells.\n   *  - Switches the keyboard focus to Handsontable (by calling Handsontable's [`listen()`](#listen) method).\n   *\n   * @example\n   * ```js\n   * // select a single cell\n   * hot.selectCell(2, 4);\n   *\n   * // select a range of cells\n   * hot.selectCell(2, 4, 3, 5);\n   *\n   * // select a single cell, using a column property\n   * hot.selectCell(2, 'first_name');\n   *\n   * // select a range of cells, using column properties\n   * hot.selectCell(2, 'first_name', 3, 'last_name');\n   *\n   * // select a range of cells, without scrolling to them\n   * hot.selectCell(2, 4, 3, 5, false);\n   *\n   * // select a range of cells, without switching the keyboard focus to Handsontable\n   * hot.selectCell(2, 4, 3, 5, null, false);\n   * ```\n   *\n   * @memberof Core#\n   * @function selectCell\n   * @param {number} row A visual row index.\n   * @param {number|string} column A visual column index (`number`), or a column property's value (`string`).\n   * @param {number} [endRow] If selecting a range: the visual row index of the last cell in the range.\n   * @param {number|string} [endColumn] If selecting a range: the visual column index (or a column property's value) of the last cell in the range.\n   * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.\n   * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the previous keyboard focus.\n   * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.\n   */\n  this.selectCell = function(row, column, endRow, endColumn, scrollToCell = true, changeListener = true) {\n    if (isUndefined(row) || isUndefined(column)) {\n      return false;\n    }\n\n    return this.selectCells([[row, column, endRow, endColumn]], scrollToCell, changeListener);\n  };\n\n  /**\n   * Select multiple cells or ranges of cells, adjacent or non-adjacent.\n   *\n   * You can pass one of the below:\n   * - An array of arrays (which matches the output of Handsontable's [`getSelected()`](#getselected) method).\n   * - An array of [`CellRange`](@/api/cellRange.md) objects (which matches the output of Handsontable's [`getSelectedRange()`](#getselectedrange) method).\n   *\n   * To select multiple cells, pass the visual row and column indexes of each cell, for example: `hot.selectCells([[1, 1], [5, 5]])`.\n   *\n   * To select multiple ranges, pass the visual indexes of the first and last cell in each range, for example: `hot.selectCells([[1, 1, 2, 2], [6, 2, 0, 2]])`.\n   *\n   * If your columns have properties, you can pass those properties' values instead of column indexes, for example: `hot.selectCells([[1, 'first_name'], [5, 'last_name']])`.\n   *\n   * By default, `selectCell()` also:\n   *  - Scrolls the viewport to the newly-selected cells.\n   *  - Switches the keyboard focus to Handsontable (by calling Handsontable's [`listen()`](#listen) method).\n   *\n   * @example\n   * ```js\n   * // select non-adjacent cells\n   * hot.selectCells([[1, 1], [5, 5], [10, 10]]);\n   *\n   * // select non-adjacent ranges of cells\n   * hot.selectCells([[1, 1, 2, 2], [10, 10, 20, 20]]);\n   *\n   * // select cells and ranges of cells\n   * hot.selectCells([[1, 1, 2, 2], [3, 3], [6, 2, 0, 2]]);\n   *\n   * // select cells, using column properties\n   * hot.selectCells([[1, 'id', 2, 'first_name'], [3, 'full_name'], [6, 'last_name', 0, 'first_name']]);\n   *\n   * // select multiple ranges, using an array of `CellRange` objects\n   * const selected = hot.getSelectedRange();\n   *\n   * selected[0].from.row = 0;\n   * selected[0].from.col = 0;\n   * selected[0].to.row = 5;\n   * selected[0].to.col = 5;\n   *\n   * selected[1].from.row = 10;\n   * selected[1].from.col = 10;\n   * selected[1].to.row = 20;\n   * selected[1].to.col = 20;\n   *\n   * hot.selectCells(selected);\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectCells\n   * @param {Array[]|CellRange[]} coords Visual coordinates,\n   * passed either as an array of arrays (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)\n   * or as an array of [`CellRange`](@/api/cellRange.md) objects.\n   * @param {boolean} [scrollToCell=true] `true`: scroll the viewport to the newly-selected cells. `false`: keep the previous viewport.\n   * @param {boolean} [changeListener=true] `true`: switch the keyboard focus to Handsontable. `false`: keep the previous keyboard focus.\n   * @returns {boolean} `true`: the selection was successful, `false`: the selection failed.\n   */\n  this.selectCells = function(coords = [[]], scrollToCell = true, changeListener = true) {\n    if (scrollToCell === false) {\n      viewportScroller.suspend();\n    }\n\n    const wasSelected = selection.selectCells(coords);\n\n    if (wasSelected && changeListener) {\n      instance.listen();\n    }\n    viewportScroller.resume();\n\n    return wasSelected;\n  };\n\n  /**\n   * Select column specified by `startColumn` visual index, column property or a range of columns finishing at `endColumn`.\n   *\n   * @example\n   * ```js\n   * // Select column using visual index.\n   * hot.selectColumns(1);\n   * // Select column using column property.\n   * hot.selectColumns('id');\n   * // Select range of columns using visual indexes.\n   * hot.selectColumns(1, 4);\n   * // Select range of columns using visual indexes and mark the first header as highlighted.\n   * hot.selectColumns(1, 2, -1);\n   * // Select range of columns using visual indexes and mark the second cell as highlighted.\n   * hot.selectColumns(2, 1, 1);\n   * // Select range of columns using visual indexes and move the focus position somewhere in the middle of the range.\n   * hot.selectColumns(2, 5, { row: 2, col: 3 });\n   * // Select range of columns using column properties.\n   * hot.selectColumns('id', 'last_name');\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectColumns\n   * @param {number} startColumn The visual column index from which the selection starts.\n   * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`\n   * is not defined the column defined by `startColumn` will be selected.\n   * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position horizontally.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectColumns = function(startColumn, endColumn = startColumn, focusPosition) {\n    return selection.selectColumns(startColumn, endColumn, focusPosition);\n  };\n\n  /**\n   * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n   *\n   * @example\n   * ```js\n   * // Select row using visual index.\n   * hot.selectRows(1);\n   * // select a range of rows, using visual indexes.\n   * hot.selectRows(1, 4);\n   * // select a range of rows, using visual indexes, and mark the header as highlighted.\n   * hot.selectRows(1, 2, -1);\n   * // Select range of rows using visual indexes and mark the second cell as highlighted.\n   * hot.selectRows(2, 1, 1);\n   * // Select range of rows using visual indexes and move the focus position somewhere in the middle of the range.\n   * hot.selectRows(2, 5, { row: 2, col: 3 });\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectRows\n   * @param {number} startRow The visual row index from which the selection starts.\n   * @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`\n   * is not defined the row defined by `startRow` will be selected.\n   * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position vertically.\n   * @returns {boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectRows = function(startRow, endRow = startRow, focusPosition) {\n    return selection.selectRows(startRow, endRow, focusPosition);\n  };\n\n  /**\n   * Deselects the current cell selection on the table.\n   *\n   * @memberof Core#\n   * @function deselectCell\n   */\n  this.deselectCell = function() {\n    selection.deselect();\n  };\n\n  /**\n   * Select all cells in the table excluding headers and corner elements.\n   *\n   * The previous selection is overwritten.\n   *\n   * ```js\n   * // Select all cells in the table along with row headers, including all headers and the corner cell.\n   * // Doesn't select column headers and corner elements.\n   * hot.selectAll();\n   *\n   * // Select all cells in the table, including row headers but excluding the corner cell and column headers.\n   * hot.selectAll(true, false);\n   *\n   * // Select all cells in the table, including all headers and the corner cell, but move the focus.\n   * // highlight to position 2, 1\n   * hot.selectAll(-2, -1, {\n   *    focusPosition: { row: 2, col: 1 }\n   * });\n   *\n   * // Select all cells in the table, without headers and corner elements.\n   * hot.selectAll(false);\n   * ```\n   *\n   * @since 0.38.2\n   * @memberof Core#\n   * @function selectAll\n   * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,\n   * `false` otherwise.\n   * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column\n   * headers, `false` otherwise.\n   *\n   * @param {object} [options] Additional object with options. Since 14.0.0\n   * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header\n   * focus position. The value takes an object with a `row` and `col` properties from -N to N, where\n   * negative values point to the headers and positive values point to the cell range. If `false`, the focus\n   * position won't be changed. Example:\n   * ```js\n   * hot.selectAll(0, 0, {\n   * focusPosition: { row: 0, col: 1 },\n   * disableHeadersHighlight: true\n   * })\n   * ```\n   *\n   * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when\n   * the logical coordinates points on them.\n   */\n  this.selectAll = function(includeRowHeaders = true, includeColumnHeaders = includeRowHeaders, options) {\n    viewportScroller.skipNextScrollCycle();\n    selection.selectAll(includeRowHeaders, includeColumnHeaders, options);\n  };\n\n  const getIndexToScroll = (indexMapper, visualIndex) => {\n    // Looking for a visual index on the right and then (when not found) on the left.\n    return indexMapper.getNearestNotHiddenIndex(visualIndex, 1, true);\n  };\n\n  /**\n   * Scroll viewport to coordinates specified by the `row` and/or `col` object properties.\n   *\n   * ```js\n   * // scroll the viewport to the visual row index (leave the horizontal scroll untouched)\n   * hot.scrollViewportTo({ row: 50 });\n   *\n   * // scroll the viewport to the passed coordinates so that the cell at 50, 50 will be snapped to\n   * // the bottom-end table's edge.\n   * hot.scrollViewportTo({\n   *   row: 50,\n   *   col: 50,\n   *   verticalSnap: 'bottom',\n   *   horizontalSnap: 'end',\n   * });\n   * ```\n   *\n   * @memberof Core#\n   * @function scrollViewportTo\n   * @param {object} options A dictionary containing the following parameters:\n   * @param {number} [options.row] Specifies the number of visual rows along the Y axis to scroll the viewport.\n   * @param {number} [options.col] Specifies the number of visual columns along the X axis to scroll the viewport.\n   * @param {'top' | 'bottom'} [options.verticalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.\n   * This option is a string which must take one of the following values:\n   * - `top`: The viewport will be scrolled to a row in such a way that it will be positioned on the top of the viewport;\n   * - `bottom`: The viewport will be scrolled to a row in such a way that it will be positioned on the bottom of the viewport;\n   * - If the property is not defined the vertical auto-snapping is enabled. Depending on where the viewport is scrolled from, a row will\n   * be positioned at the top or bottom of the viewport.\n   * @param {'start' | 'end'} [options.horizontalSnap] Determines to which edge of the table the viewport will be scrolled based on the passed coordinates.\n   * This option is a string which must take one of the following values:\n   * - `start`: The viewport will be scrolled to a column in such a way that it will be positioned on the start (left edge or right, if the layout direction is set to `rtl`) of the viewport;\n   * - `end`: The viewport will be scrolled to a column in such a way that it will be positioned on the end (right edge or left, if the layout direction is set to `rtl`) of the viewport;\n   * - If the property is not defined the horizontal auto-snapping is enabled. Depending on where the viewport is scrolled from, a column will\n   * be positioned at the start or end of the viewport.\n   * @param {boolean} [options.considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which\n   * may be rendered when they are in the viewport (we don't consider hidden indexes as they aren't rendered).\n   * @returns {boolean} `true` if viewport was scrolled, `false` otherwise.\n   */\n  this.scrollViewportTo = function(options) {\n    // Support for backward compatibility arguments: (row, col, snapToBottom, snapToRight, considerHiddenIndexes)\n    if (typeof options === 'number') {\n      /* eslint-disable prefer-rest-params */\n      options = {\n        row: arguments[0],\n        col: arguments[1],\n        verticalSnap: arguments[2] ? 'bottom' : 'top',\n        horizontalSnap: arguments[3] ? 'end' : 'start',\n        considerHiddenIndexes: arguments[4] ?? true,\n      };\n      /* eslint-enable prefer-rest-params */\n    }\n\n    const {\n      row,\n      col,\n      verticalSnap,\n      horizontalSnap,\n      considerHiddenIndexes\n    } = options ?? {};\n\n    let snapToTop;\n    let snapToBottom;\n    let snapToInlineStart;\n    let snapToInlineEnd;\n\n    if (verticalSnap !== undefined) {\n      snapToTop = verticalSnap === 'top';\n      snapToBottom = !snapToTop;\n    }\n\n    if (horizontalSnap !== undefined) {\n      snapToInlineStart = horizontalSnap === 'start';\n      snapToInlineEnd = !snapToInlineStart;\n    }\n\n    let renderableRow = row;\n    let renderableColumn = col;\n\n    if (considerHiddenIndexes === undefined || considerHiddenIndexes) {\n      const isValidRowGrid = Number.isInteger(row) && row >= 0;\n      const isValidColumnGrid = Number.isInteger(col) && col >= 0;\n\n      const visualRowToScroll = isValidRowGrid ? getIndexToScroll(this.rowIndexMapper, row) : undefined;\n      const visualColumnToScroll = isValidColumnGrid ? getIndexToScroll(this.columnIndexMapper, col) : undefined;\n\n      if (visualRowToScroll === null || visualColumnToScroll === null) {\n        return false;\n      }\n\n      renderableRow = isValidRowGrid ?\n        instance.rowIndexMapper.getRenderableFromVisualIndex(visualRowToScroll) : row;\n      renderableColumn = isValidColumnGrid ?\n        instance.columnIndexMapper.getRenderableFromVisualIndex(visualColumnToScroll) : col;\n    }\n\n    const isRowInteger = Number.isInteger(renderableRow);\n    const isColumnInteger = Number.isInteger(renderableColumn);\n\n    if (isRowInteger && renderableRow >= 0 && isColumnInteger && renderableColumn >= 0) {\n      return instance.view.scrollViewport(\n        instance._createCellCoords(renderableRow, renderableColumn),\n        snapToTop,\n        snapToInlineEnd,\n        snapToBottom,\n        snapToInlineStart\n      );\n    }\n\n    if (isRowInteger && renderableRow >= 0 && (isColumnInteger && renderableColumn < 0 || !isColumnInteger)) {\n      return instance.view.scrollViewportVertically(renderableRow, snapToTop, snapToBottom);\n    }\n\n    if (isColumnInteger && renderableColumn >= 0 && (isRowInteger && renderableRow < 0 || !isRowInteger)) {\n      return instance.view.scrollViewportHorizontally(renderableColumn, snapToInlineEnd, snapToInlineStart);\n    }\n\n    return false;\n  };\n\n  /**\n   * Scrolls the viewport to coordinates specified by the currently focused cell.\n   *\n   * @since 14.0.0\n   * @memberof Core#\n   * @fires Hooks#afterScroll\n   * @function scrollToFocusedCell\n   * @param {Function} callback The callback function to call after the viewport is scrolled.\n   */\n  this.scrollToFocusedCell = function(callback = () => {}) {\n    if (!this.selection.isSelected()) {\n      return;\n    }\n\n    this.addHookOnce('afterScroll', callback);\n\n    const { highlight } = this.getSelectedRangeLast();\n    const isScrolled = this.scrollViewportTo(highlight.toObject());\n\n    if (isScrolled) {\n      this.view.render();\n    } else {\n      this.removeHook('afterScroll', callback);\n      this._registerImmediate(() => callback());\n    }\n  };\n\n  /**\n   * Removes the table from the DOM and destroys the instance of the Handsontable.\n   *\n   * @memberof Core#\n   * @function destroy\n   * @fires Hooks#afterDestroy\n   */\n  this.destroy = function() {\n    instance._clearTimeouts();\n    instance._clearImmediates();\n\n    if (instance.view) { // in case HT is destroyed before initialization has finished\n      instance.view.destroy();\n    }\n    if (dataSource) {\n      dataSource.destroy();\n    }\n    dataSource = null;\n\n    this.getShortcutManager().destroy();\n    metaManager.clearCache();\n    foreignHotInstances.delete(this.guid);\n\n    if (isRootInstance(instance)) {\n      const licenseInfo = this.rootDocument.querySelector('.hot-display-license-info');\n\n      if (licenseInfo) {\n        licenseInfo.parentNode.removeChild(licenseInfo);\n      }\n    }\n    empty(instance.rootElement);\n    eventManager.destroy();\n\n    if (editorManager) {\n      editorManager.destroy();\n    }\n\n    // The plugin's `destroy` method is called as a consequence and it should handle\n    // unregistration of plugin's maps. Some unregistered maps reset the cache.\n    instance.batchExecution(() => {\n      instance.rowIndexMapper.unregisterAll();\n      instance.columnIndexMapper.unregisterAll();\n\n      pluginsRegistry\n        .getItems()\n        .forEach(([, plugin]) => {\n          plugin.destroy();\n        });\n      pluginsRegistry.clear();\n      instance.runHooks('afterDestroy');\n    }, true);\n\n    Hooks.getSingleton().destroy(instance);\n\n    objectEach(instance, (property, key, obj) => {\n      // replace instance methods with post mortem\n      if (isFunction(property)) {\n        obj[key] = postMortem(key);\n\n      } else if (key !== 'guid') {\n        // replace instance properties with null (restores memory)\n        // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n        obj[key] = null;\n      }\n    });\n\n    instance.isDestroyed = true;\n\n    // replace private properties with null (restores memory)\n    // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n    if (datamap) {\n      datamap.destroy();\n    }\n\n    datamap = null;\n    grid = null;\n    selection = null;\n    editorManager = null;\n    instance = null;\n  };\n\n  /**\n   * Replacement for all methods after the Handsontable was destroyed.\n   *\n   * @private\n   * @param {string} method The method name.\n   * @returns {Function}\n   */\n  function postMortem(method) {\n    return () => {\n      throw new Error(`The \"${method}\" method cannot be called because this Handsontable instance has been destroyed`);\n    };\n  }\n\n  /**\n   * Returns the active editor class instance.\n   *\n   * @memberof Core#\n   * @function getActiveEditor\n   * @returns {BaseEditor} The active editor instance.\n   */\n  this.getActiveEditor = function() {\n    return editorManager.getActiveEditor();\n  };\n\n  /**\n   * Returns the first rendered row in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstRenderedVisibleRow\n   * @returns {number | null}\n   */\n  this.getFirstRenderedVisibleRow = function() {\n    return instance.view.getFirstRenderedVisibleRow();\n  };\n\n  /**\n   * Returns the last rendered row in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastRenderedVisibleRow\n   * @returns {number | null}\n   */\n  this.getLastRenderedVisibleRow = function() {\n    return instance.view.getLastRenderedVisibleRow();\n  };\n\n  /**\n   * Returns the first rendered column in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstRenderedVisibleColumn\n   * @returns {number | null}\n   */\n  this.getFirstRenderedVisibleColumn = function() {\n    return instance.view.getFirstRenderedVisibleColumn();\n  };\n\n  /**\n   * Returns the last rendered column in the DOM (usually, it is not visible in the table's viewport).\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastRenderedVisibleColumn\n   * @returns {number | null}\n   */\n  this.getLastRenderedVisibleColumn = function() {\n    return instance.view.getLastRenderedVisibleColumn();\n  };\n\n  /**\n   * Returns the first fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstFullyVisibleRow\n   * @returns {number | null}\n   */\n  this.getFirstFullyVisibleRow = function() {\n    return instance.view.getFirstFullyVisibleRow();\n  };\n\n  /**\n   * Returns the last fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastFullyVisibleRow\n   * @returns {number | null}\n   */\n  this.getLastFullyVisibleRow = function() {\n    return instance.view.getLastFullyVisibleRow();\n  };\n\n  /**\n   * Returns the first fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstFullyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getFirstFullyVisibleColumn = function() {\n    return instance.view.getFirstFullyVisibleColumn();\n  };\n\n  /**\n   * Returns the last fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastFullyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getLastFullyVisibleColumn = function() {\n    return instance.view.getLastFullyVisibleColumn();\n  };\n\n  /**\n   * Returns the first partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstPartiallyVisibleRow\n   * @returns {number | null}\n   */\n  this.getFirstPartiallyVisibleRow = function() {\n    return instance.view.getFirstPartiallyVisibleRow();\n  };\n\n  /**\n   * Returns the last partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastPartiallyVisibleRow\n   * @returns {number | null}\n   */\n  this.getLastPartiallyVisibleRow = function() {\n    return instance.view.getLastPartiallyVisibleRow();\n  };\n\n  /**\n   * Returns the first partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getFirstPartiallyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getFirstPartiallyVisibleColumn = function() {\n    return instance.view.getFirstPartiallyVisibleColumn();\n  };\n\n  /**\n   * Returns the last partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the main table that is not overlapped by overlay.\n   *\n   * @since 14.6.0\n   * @memberof Core#\n   * @function getLastPartiallyVisibleColumn\n   * @returns {number | null}\n   */\n  this.getLastPartiallyVisibleColumn = function() {\n    return instance.view.getLastPartiallyVisibleColumn();\n  };\n\n  /**\n   * Returns plugin instance by provided its name.\n   *\n   * @memberof Core#\n   * @function getPlugin\n   * @param {string} pluginName The plugin name.\n   * @returns {BasePlugin|undefined} The plugin instance or undefined if there is no plugin.\n   */\n  this.getPlugin = function(pluginName) {\n    const unifiedPluginName = toUpperCaseFirst(pluginName);\n\n    // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n    if (unifiedPluginName === 'UndoRedo') {\n      return this.undoRedo;\n    }\n\n    return pluginsRegistry.getItem(unifiedPluginName);\n  };\n\n  /**\n   * Returns name of the passed plugin.\n   *\n   * @private\n   * @memberof Core#\n   * @param {BasePlugin} plugin The plugin instance.\n   * @returns {string}\n   */\n  this.getPluginName = function(plugin) {\n    // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n    if (plugin === this.undoRedo) {\n      return this.undoRedo.constructor.PLUGIN_KEY;\n    }\n\n    return pluginsRegistry.getId(plugin);\n  };\n\n  /**\n   * Returns the Handsontable instance.\n   *\n   * @memberof Core#\n   * @function getInstance\n   * @returns {Handsontable} The Handsontable instance.\n   */\n  this.getInstance = function() {\n    return instance;\n  };\n\n  /**\n   * Adds listener to the specified hook name (only for this Handsontable instance).\n   *\n   * @memberof Core#\n   * @function addHook\n   * @see Hooks#add\n   * @param {string} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   * @example\n   * ```js\n   * hot.addHook('beforeInit', myCallback);\n   * ```\n   */\n  this.addHook = function(key, callback, orderIndex) {\n    Hooks.getSingleton().add(key, callback, instance, orderIndex);\n  };\n\n  /**\n   * Check if for a specified hook name there are added listeners (only for this Handsontable instance). All available\n   * hooks you will find {@link Hooks}.\n   *\n   * @memberof Core#\n   * @function hasHook\n   * @see Hooks#has\n   * @param {string} key Hook name.\n   * @returns {boolean}\n   *\n   * @example\n   * ```js\n   * const hasBeforeInitListeners = hot.hasHook('beforeInit');\n   * ```\n   */\n  this.hasHook = function(key) {\n    return Hooks.getSingleton().has(key, instance) || Hooks.getSingleton().has(key);\n  };\n\n  /**\n   * Adds listener to specified hook name (only for this Handsontable instance). After the listener is triggered,\n   * it will be automatically removed.\n   *\n   * @memberof Core#\n   * @function addHookOnce\n   * @see Hooks#once\n   * @param {string} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   * @example\n   * ```js\n   * hot.addHookOnce('beforeInit', myCallback);\n   * ```\n   */\n  this.addHookOnce = function(key, callback, orderIndex) {\n    Hooks.getSingleton().once(key, callback, instance, orderIndex);\n  };\n\n  /**\n   * Removes the hook listener previously registered with {@link Core#addHook}.\n   *\n   * @memberof Core#\n   * @function removeHook\n   * @see Hooks#remove\n   * @param {string} key Hook name.\n   * @param {Function} callback Reference to the function which has been registered using {@link Core#addHook}.\n   *\n   * @example\n   * ```js\n   * hot.removeHook('beforeInit', myCallback);\n   * ```\n   */\n  this.removeHook = function(key, callback) {\n    Hooks.getSingleton().remove(key, callback, instance);\n  };\n\n  /**\n   * Run the callbacks for the hook provided in the `key` argument using the parameters given in the other arguments.\n   *\n   * @memberof Core#\n   * @function runHooks\n   * @see Hooks#run\n   * @param {string} key Hook name.\n   * @param {*} [p1] Argument passed to the callback.\n   * @param {*} [p2] Argument passed to the callback.\n   * @param {*} [p3] Argument passed to the callback.\n   * @param {*} [p4] Argument passed to the callback.\n   * @param {*} [p5] Argument passed to the callback.\n   * @param {*} [p6] Argument passed to the callback.\n   * @returns {*}\n   *\n   * @example\n   * ```js\n   * // Run built-in hook\n   * hot.runHooks('beforeInit');\n   * // Run custom hook\n   * hot.runHooks('customAction', 10, 'foo');\n   * ```\n   */\n  this.runHooks = function(key, p1, p2, p3, p4, p5, p6) {\n    return Hooks.getSingleton().run(instance, key, p1, p2, p3, p4, p5, p6);\n  };\n\n  /**\n   * Get language phrase for specified dictionary key.\n   *\n   * @memberof Core#\n   * @function getTranslatedPhrase\n   * @since 0.35.0\n   * @param {string} dictionaryKey Constant which is dictionary key.\n   * @param {*} extraArguments Arguments which will be handled by formatters.\n   * @returns {string}\n   */\n  this.getTranslatedPhrase = function(dictionaryKey, extraArguments) {\n    return getTranslatedPhrase(tableMeta.language, dictionaryKey, extraArguments);\n  };\n\n  /**\n   * Converts instance into outerHTML of HTMLTableElement.\n   *\n   * @memberof Core#\n   * @function toHTML\n   * @since 7.1.0\n   * @returns {string}\n   */\n  this.toHTML = () => instanceToHTML(this);\n\n  /**\n   * Converts instance into HTMLTableElement.\n   *\n   * @memberof Core#\n   * @function toTableElement\n   * @since 7.1.0\n   * @returns {HTMLTableElement}\n   */\n  this.toTableElement = () => {\n    const tempElement = this.rootDocument.createElement('div');\n\n    tempElement.insertAdjacentHTML('afterbegin', instanceToHTML(this));\n\n    return tempElement.firstElementChild;\n  };\n\n  this.timeouts = [];\n\n  /**\n   * Sets timeout. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {number|Function} handle Handler returned from setTimeout or function to execute (it will be automatically wraped\n   *                                 by setTimeout function).\n   * @param {number} [delay=0] If first argument is passed as a function this argument set delay of the execution of that function.\n   * @private\n   */\n  this._registerTimeout = function(handle, delay = 0) {\n    let handleFunc = handle;\n\n    if (typeof handleFunc === 'function') {\n      handleFunc = setTimeout(handleFunc, delay);\n    }\n\n    this.timeouts.push(handleFunc);\n  };\n\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n  this._clearTimeouts = function() {\n    arrayEach(this.timeouts, (handler) => {\n      clearTimeout(handler);\n    });\n  };\n\n  this.immediates = [];\n\n  /**\n   * Execute function execution to the next event loop cycle. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {Function} callback Function to be delayed in execution.\n   * @private\n   */\n  this._registerImmediate = function(callback) {\n    this.immediates.push(setImmediate(callback));\n  };\n\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n  this._clearImmediates = function() {\n    arrayEach(this.immediates, (handler) => {\n      clearImmediate(handler);\n    });\n  };\n\n  /**\n   * Gets the instance of the EditorManager.\n   *\n   * @private\n   * @returns {EditorManager}\n   */\n  this._getEditorManager = function() {\n    return editorManager;\n  };\n\n  /**\n   * Check if currently it is RTL direction.\n   *\n   * @private\n   * @memberof Core#\n   * @function isRtl\n   * @returns {boolean} True if RTL.\n   */\n  this.isRtl = function() {\n    return instance.rootWindow.getComputedStyle(instance.rootElement).direction === 'rtl';\n  };\n\n  /**\n   * Check if currently it is LTR direction.\n   *\n   * @private\n   * @memberof Core#\n   * @function isLtr\n   * @returns {boolean} True if LTR.\n   */\n  this.isLtr = function() {\n    return !instance.isRtl();\n  };\n\n  /**\n   * Returns 1 for LTR; -1 for RTL. Useful for calculations.\n   *\n   * @private\n   * @memberof Core#\n   * @function getDirectionFactor\n   * @returns {number} Returns 1 for LTR; -1 for RTL.\n   */\n  this.getDirectionFactor = function() {\n    return instance.isLtr() ? 1 : -1;\n  };\n\n  const shortcutManager = createShortcutManager({\n    handleEvent() {\n      return instance.isListening();\n    },\n    beforeKeyDown: (event) => {\n      return this.runHooks('beforeKeyDown', event);\n    },\n    afterKeyDown: (event) => {\n      if (this.isDestroyed) { // Handsontable could be destroyed after performing action (executing a callback).\n        return;\n      }\n\n      instance.runHooks('afterDocumentKeyDown', event);\n    },\n    ownerWindow: this.rootWindow,\n  });\n\n  this.addHook('beforeOnCellMouseDown', (event) => {\n    // Releasing keys as some browser/system shortcuts break events sequence (thus the `keyup` event isn't triggered).\n    if (event.ctrlKey === false && event.metaKey === false) {\n      shortcutManager.releasePressedKeys();\n    }\n  });\n\n  /**\n   * Returns instance of a manager responsible for handling shortcuts stored in some contexts. It run actions after\n   * pressing key combination in active Handsontable instance.\n   *\n   * @memberof Core#\n   * @since 12.0.0\n   * @function getShortcutManager\n   * @returns {ShortcutManager} Instance of {@link ShortcutManager}\n   */\n  this.getShortcutManager = function() {\n    return shortcutManager;\n  };\n\n  /**\n   * Return the Focus Manager responsible for managing the browser's focus in the table.\n   *\n   * @memberof Core#\n   * @since 14.0.0\n   * @function getFocusManager\n   * @returns {FocusManager}\n   */\n  this.getFocusManager = function() {\n    return focusManager;\n  };\n\n  getPluginsNames().forEach((pluginName) => {\n    const PluginClass = getPlugin(pluginName);\n\n    pluginsRegistry.addItem(pluginName, new PluginClass(this));\n  });\n\n  registerAllShortcutContexts(instance);\n\n  shortcutManager.setActiveContextName('grid');\n\n  Hooks.getSingleton().run(instance, 'construct');\n}\n","'use strict';\n/* eslint-disable no-unused-vars -- required for functions `.length` */\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar wrapErrorConstructorWithCause = require('../internals/wrap-error-constructor-with-cause');\n\nvar WEB_ASSEMBLY = 'WebAssembly';\nvar WebAssembly = globalThis[WEB_ASSEMBLY];\n\n// eslint-disable-next-line es/no-error-cause -- feature detection\nvar FORCED = new Error('e', { cause: 7 }).cause !== 7;\n\nvar exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {\n  var O = {};\n  O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);\n  $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);\n};\n\nvar exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {\n  if (WebAssembly && WebAssembly[ERROR_NAME]) {\n    var O = {};\n    O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);\n    $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);\n  }\n};\n\n// https://tc39.es/ecma262/#sec-nativeerror\nexportGlobalErrorCauseWrapper('Error', function (init) {\n  return function Error(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('EvalError', function (init) {\n  return function EvalError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('RangeError', function (init) {\n  return function RangeError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('ReferenceError', function (init) {\n  return function ReferenceError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('SyntaxError', function (init) {\n  return function SyntaxError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('TypeError', function (init) {\n  return function TypeError(message) { return apply(init, this, arguments); };\n});\nexportGlobalErrorCauseWrapper('URIError', function (init) {\n  return function URIError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('CompileError', function (init) {\n  return function CompileError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('LinkError', function (init) {\n  return function LinkError(message) { return apply(init, this, arguments); };\n});\nexportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {\n  return function RuntimeError(message) { return apply(init, this, arguments); };\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target         - name of the target object\n  options.global         - target is the global object\n  options.stat           - export as static methods of target\n  options.proto          - export as prototype methods of target\n  options.real           - real prototype method for the `pure` version\n  options.forced         - export even if the native feature is available\n  options.bind           - bind methods to the target, required for the `pure` version\n  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe         - use the simple assignment of property instead of delete + defineProperty\n  options.sham           - add a flag to not completely full polyfills\n  options.enumerable     - export as enumerable property\n  options.dontCallGetSet - prevent calling a getter on target\n  options.name           - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = globalThis;\n  } else if (STATIC) {\n    target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n  } else {\n    target = globalThis[TARGET] && globalThis[TARGET].prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.dontCallGetSet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty == typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    defineBuiltIn(target, key, sourceProperty, options);\n  }\n};\n","'use strict';\nvar check = function (it) {\n  return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  // eslint-disable-next-line es/no-global-this -- safe\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  // eslint-disable-next-line no-restricted-globals -- safe\n  check(typeof self == 'object' && self) ||\n  check(typeof global == 'object' && global) ||\n  check(typeof this == 'object' && this) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPropertyKey(P);\n  if (IE8_DOM_DEFINE) try {\n    return $getOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n  return call.apply(call, arguments);\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n  // eslint-disable-next-line es/no-function-prototype-bind -- safe\n  var test = (function () { /* empty */ }).bind();\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n  return function () {\n    return call.apply(fn, arguments);\n  };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n  return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n  return it === null || it === undefined;\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n  var key = toPrimitive(argument, 'string');\n  return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n  if (!isObject(input) || isSymbol(input)) return input;\n  var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n  var result;\n  if (exoticToPrim) {\n    if (pref === undefined) pref = 'default';\n    result = call(exoticToPrim, input, pref);\n    if (!isObject(result) || isSymbol(result)) return result;\n    throw new $TypeError(\"Can't convert object to primitive value\");\n  }\n  if (pref === undefined) pref = 'number';\n  return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n  return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n  return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n  return typeof argument == 'function';\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  var $Symbol = getBuiltIn('Symbol');\n  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n  return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  var symbol = Symbol('symbol detection');\n  // Chrome 38 Symbol has incorrect toString conversion\n  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n  // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n  // of course, fail.\n  return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n    !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n  // but their correct versions are not interesting for us\n  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = +match[1];\n  }\n}\n\nmodule.exports = version;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n  var func = V[P];\n  return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n  if (isCallable(argument)) return argument;\n  throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n  try {\n    return $String(argument);\n  } catch (error) {\n    return 'Object';\n  }\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n  var fn, val;\n  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n  throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!hasOwn(WellKnownSymbolsStore, name)) {\n    WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n      ? Symbol[name]\n      : createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n  return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n  version: '3.38.1',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)',\n  license: 'https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE',\n  source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n  try {\n    defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n  } catch (error) {\n    globalThis[key] = value;\n  } return value;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n  return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a !== 7;\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n    var current = $getOwnPropertyDescriptor(O, P);\n    if (current && current[WRITABLE]) {\n      O[P] = Attributes.value;\n      Attributes = {\n        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n        writable: false\n      };\n    }\n  } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPropertyKey(P);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return $defineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n  // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n  return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n    value: 42,\n    writable: false\n  }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n  if (isObject(argument)) return argument;\n  throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n  if (!options) options = {};\n  var simple = options.enumerable;\n  var name = options.name !== undefined ? options.name : key;\n  if (isCallable(value)) makeBuiltIn(value, name, options);\n  if (options.global) {\n    if (simple) O[key] = value;\n    else defineGlobalProperty(key, value);\n  } else {\n    try {\n      if (!options.unsafe) delete O[key];\n      else if (O[key]) simple = true;\n    } catch (error) { /* empty */ }\n    if (simple) O[key] = value;\n    else definePropertyModule.f(O, key, {\n      value: value,\n      enumerable: false,\n      configurable: !options.nonConfigurable,\n      writable: !options.nonWritable\n    });\n  } return O;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n  if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n    name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n  }\n  if (options && options.getter) name = 'get ' + name;\n  if (options && options.setter) name = 'set ' + name;\n  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n    else value.name = name;\n  }\n  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n    defineProperty(value, 'length', { value: options.arity });\n  }\n  try {\n    if (options && hasOwn(options, 'constructor') && options.constructor) {\n      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n    } else if (value.prototype) value.prototype = undefined;\n  } catch (error) { /* empty */ }\n  var state = enforceInternalState(value);\n  if (!hasOwn(state, 'source')) {\n    state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n  } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n  return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n  EXISTS: EXISTS,\n  PROPER: PROPER,\n  CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n  store.inspectSource = function (it) {\n    return functionToString(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n  var store = shared.state || (shared.state = new WeakMap());\n  /* eslint-disable no-self-assign -- prototype methods protection */\n  store.get = store.get;\n  store.has = store.has;\n  store.set = store.set;\n  /* eslint-enable no-self-assign -- prototype methods protection */\n  set = function (it, metadata) {\n    if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    store.set(it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return store.get(it) || {};\n  };\n  has = function (it) {\n    return store.has(it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return hasOwn(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return hasOwn(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n      defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n    }\n  }\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (hasOwn(O, key = names[i++])) {\n    ~indexOf(result, key) || push(result, key);\n  }\n  return result;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = lengthOfArrayLike(O);\n    if (length === 0) return !IS_INCLUDES && -1;\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el !== el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value !== value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toIntegerOrInfinity(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n  var number = +argument;\n  // eslint-disable-next-line no-self-compare -- NaN check\n  return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n  var n = +x;\n  return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n  return toLength(obj.length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  var len = toIntegerOrInfinity(argument);\n  return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value === POLYFILL ? true\n    : value === NATIVE ? false\n    : isCallable(detection) ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n  return call.apply(apply, arguments);\n});\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar installErrorCause = require('../internals/install-error-cause');\nvar installErrorStack = require('../internals/error-stack-install');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\n\nmodule.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {\n  var STACK_TRACE_LIMIT = 'stackTraceLimit';\n  var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;\n  var path = FULL_NAME.split('.');\n  var ERROR_NAME = path[path.length - 1];\n  var OriginalError = getBuiltIn.apply(null, path);\n\n  if (!OriginalError) return;\n\n  var OriginalErrorPrototype = OriginalError.prototype;\n\n  // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006\n  if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;\n\n  if (!FORCED) return OriginalError;\n\n  var BaseError = getBuiltIn('Error');\n\n  var WrappedError = wrapper(function (a, b) {\n    var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);\n    var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();\n    if (message !== undefined) createNonEnumerableProperty(result, 'message', message);\n    installErrorStack(result, WrappedError, result.stack, 2);\n    if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);\n    if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);\n    return result;\n  });\n\n  WrappedError.prototype = OriginalErrorPrototype;\n\n  if (ERROR_NAME !== 'Error') {\n    if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);\n    else copyConstructorProperties(WrappedError, BaseError, { name: true });\n  } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {\n    proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);\n    proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace');\n  }\n\n  copyConstructorProperties(WrappedError, OriginalError);\n\n  if (!IS_PURE) try {\n    // Safari 13- bug: WebAssembly errors does not have a proper `.name`\n    if (OriginalErrorPrototype.name !== ERROR_NAME) {\n      createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);\n    }\n    OriginalErrorPrototype.constructor = WrappedError;\n  } catch (error) { /* empty */ }\n\n  return WrappedError;\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n    setter(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    requireObjectCoercible(O);\n    aPossiblePrototype(proto);\n    if (!isObject(O)) return O;\n    if (CORRECT_SETTER) setter(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n  try {\n    // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n    return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n  } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n  if (isPossiblePrototype(argument)) return argument;\n  throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n  return isObject(argument) || argument === null;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n  key in Target || defineProperty(Target, key, {\n    configurable: true,\n    get: function () { return Source[key]; },\n    set: function (it) { Source[key] = it; }\n  });\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    isCallable(NewTarget = dummy.constructor) &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n","'use strict';\nvar toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n  if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n  return $String(argument);\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n  if (isObject(options) && 'cause' in options) {\n    createNonEnumerableProperty(O, 'cause', options.cause);\n  }\n};\n","'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\n// non-standard V8\nvar captureStackTrace = Error.captureStackTrace;\n\nmodule.exports = function (error, C, stack, dropEntries) {\n  if (ERROR_STACK_INSTALLABLE) {\n    if (captureStackTrace) captureStackTrace(error, C);\n    else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries));\n  }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n  if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n  } return stack;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n  var error = new Error('a');\n  if (!('stack' in error)) return true;\n  // eslint-disable-next-line es/no-object-defineproperty -- safe\n  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n  return error.stack !== 7;\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n  return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 <= 121 and Safari <= 15.4; FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).push();\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  push: function push(item) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var argCount = arguments.length;\n    doesNotExceedSafeInteger(len + argCount);\n    for (var i = 0; i < argCount; i++) {\n      O[len] = arguments[i];\n      len++;\n    }\n    setArrayLength(O, len);\n    return len;\n  }\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n  // makes no sense without proper strict mode support\n  if (this !== undefined) return true;\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).length = 1;\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n  if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n    throw new $TypeError('Cannot set read only .length');\n  } return O.length = length;\n} : function (O, length) {\n  return O.length = length;\n};\n","'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n  return classof(argument) === 'Array';\n};\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n  return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar difference = require('../internals/set-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('difference') }, {\n  difference: difference\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function difference(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = clone(O);\n  if (size(O) <= otherRec.size) iterateSet(O, function (e) {\n    if (otherRec.includes(e)) remove(result, e);\n  });\n  else iterateSimple(otherRec.getIterator(), function (e) {\n    if (has(O, e)) remove(result, e);\n  });\n  return result;\n};\n","'use strict';\nvar has = require('../internals/set-helpers').has;\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n  has(it);\n  return it;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n  // eslint-disable-next-line es/no-set -- safe\n  Set: Set,\n  add: uncurryThis(SetPrototype.add),\n  has: uncurryThis(SetPrototype.has),\n  remove: uncurryThis(SetPrototype['delete']),\n  proto: SetPrototype\n};\n","'use strict';\nvar SetHelpers = require('../internals/set-helpers');\nvar iterate = require('../internals/set-iterate');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n  var result = new Set();\n  iterate(set, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar iterateSimple = require('../internals/iterate-simple');\nvar SetHelpers = require('../internals/set-helpers');\n\nvar Set = SetHelpers.Set;\nvar SetPrototype = SetHelpers.proto;\nvar forEach = uncurryThis(SetPrototype.forEach);\nvar keys = uncurryThis(SetPrototype.keys);\nvar next = keys(new Set()).next;\n\nmodule.exports = function (set, fn, interruptible) {\n  return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n","'use strict';\nvar call = require('../internals/function-call');\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n  var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n  var next = record.next;\n  var step, result;\n  while (!(step = call(next, iterator)).done) {\n    result = fn(step.value);\n    if (result !== undefined) return result;\n  }\n};\n","'use strict';\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar SetHelpers = require('../internals/set-helpers');\n\nmodule.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n  return set.size;\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar call = require('../internals/function-call');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n  this.set = set;\n  this.size = max(intSize, 0);\n  this.has = aCallable(set.has);\n  this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n  getIterator: function () {\n    return getIteratorDirect(anObject(call(this.keys, this.set)));\n  },\n  includes: function (it) {\n    return call(this.has, this.set, it);\n  }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n  anObject(obj);\n  var numSize = +obj.size;\n  // NOTE: If size is undefined, then numSize will be NaN\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n  var intSize = toIntegerOrInfinity(numSize);\n  if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n  return new SetRecord(obj, intSize);\n};\n","'use strict';\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect\nmodule.exports = function (obj) {\n  return {\n    iterator: obj,\n    next: obj.next,\n    done: false\n  };\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nvar createSetLike = function (size) {\n  return {\n    size: size,\n    has: function () {\n      return false;\n    },\n    keys: function () {\n      return {\n        next: function () {\n          return { done: true };\n        }\n      };\n    }\n  };\n};\n\nmodule.exports = function (name) {\n  var Set = getBuiltIn('Set');\n  try {\n    new Set()[name](createSetLike(0));\n    try {\n      // late spec change, early WebKit ~ Safari 17.0 beta implementation does not pass it\n      // https://github.com/tc39/proposal-set-methods/pull/88\n      new Set()[name](createSetLike(-1));\n      return false;\n    } catch (error2) {\n      return true;\n    }\n  } catch (error) {\n    return false;\n  }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar intersection = require('../internals/set-intersection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () {\n  // eslint-disable-next-line es/no-array-from, es/no-set -- testing\n  return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n  intersection: intersection\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function intersection(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  var result = new Set();\n\n  if (size(O) > otherRec.size) {\n    iterateSimple(otherRec.getIterator(), function (e) {\n      if (has(O, e)) add(result, e);\n    });\n  } else {\n    iterateSet(O, function (e) {\n      if (otherRec.includes(e)) add(result, e);\n    });\n  }\n\n  return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isDisjointFrom = require('../internals/set-is-disjoint-from');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isDisjointFrom` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isDisjointFrom') }, {\n  isDisjointFrom: isDisjointFrom\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom\nmodule.exports = function isDisjointFrom(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n    if (otherRec.includes(e)) return false;\n  }, true) !== false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n  var innerResult, innerError;\n  anObject(iterator);\n  try {\n    innerResult = getMethod(iterator, 'return');\n    if (!innerResult) {\n      if (kind === 'throw') throw value;\n      return value;\n    }\n    innerResult = call(innerResult, iterator);\n  } catch (error) {\n    innerError = true;\n    innerResult = error;\n  }\n  if (kind === 'throw') throw value;\n  if (innerError) throw innerResult;\n  anObject(innerResult);\n  return value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isSubsetOf = require('../internals/set-is-subset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSubsetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSubsetOf') }, {\n  isSubsetOf: isSubsetOf\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar size = require('../internals/set-size');\nvar iterate = require('../internals/set-iterate');\nvar getSetRecord = require('../internals/get-set-record');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf\nmodule.exports = function isSubsetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) > otherRec.size) return false;\n  return iterate(O, function (e) {\n    if (!otherRec.includes(e)) return false;\n  }, true) !== false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isSupersetOf = require('../internals/set-is-superset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSupersetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSupersetOf') }, {\n  isSupersetOf: isSupersetOf\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf\nmodule.exports = function isSupersetOf(other) {\n  var O = aSet(this);\n  var otherRec = getSetRecord(other);\n  if (size(O) < otherRec.size) return false;\n  var iterator = otherRec.getIterator();\n  return iterateSimple(iterator, function (e) {\n    if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n  }) !== false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar symmetricDifference = require('../internals/set-symmetric-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('symmetricDifference') }, {\n  symmetricDifference: symmetricDifference\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function symmetricDifference(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (e) {\n    if (has(O, e)) remove(result, e);\n    else add(result, e);\n  });\n  return result;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar union = require('../internals/set-union');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('union') }, {\n  union: union\n});\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar add = require('../internals/set-helpers').add;\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function union(other) {\n  var O = aSet(this);\n  var keysIter = getSetRecord(other).getIterator();\n  var result = clone(O);\n  iterateSimple(keysIter, function (it) {\n    add(result, it);\n  });\n  return result;\n};\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/web.clear-immediate');\nrequire('../modules/web.set-immediate');\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar clearImmediate = require('../internals/task').clear;\n\n// `clearImmediate` method\n// http://w3c.github.io/setImmediate/#si-clearImmediate\n$({ global: true, bind: true, enumerable: true, forced: globalThis.clearImmediate !== clearImmediate }, {\n  clearImmediate: clearImmediate\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/environment-is-ios');\nvar IS_NODE = require('../internals/environment-is-node');\n\nvar set = globalThis.setImmediate;\nvar clear = globalThis.clearImmediate;\nvar process = globalThis.process;\nvar Dispatch = globalThis.Dispatch;\nvar Function = globalThis.Function;\nvar MessageChannel = globalThis.MessageChannel;\nvar String = globalThis.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar $location, defer, channel, port;\n\nfails(function () {\n  // Deno throws a ReferenceError on `location` access without `--location` flag\n  $location = globalThis.location;\n});\n\nvar run = function (id) {\n  if (hasOwn(queue, id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\n\nvar runner = function (id) {\n  return function () {\n    run(id);\n  };\n};\n\nvar eventListener = function (event) {\n  run(event.data);\n};\n\nvar globalPostMessageDefer = function (id) {\n  // old engines have not location.origin\n  globalThis.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n  set = function setImmediate(handler) {\n    validateArgumentsLength(arguments.length, 1);\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var args = arraySlice(arguments, 1);\n    queue[++counter] = function () {\n      apply(fn, undefined, args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clear = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (IS_NODE) {\n    defer = function (id) {\n      process.nextTick(runner(id));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(runner(id));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  // except iOS - https://github.com/zloirock/core-js/issues/624\n  } else if (MessageChannel && !IS_IOS) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = eventListener;\n    defer = bind(port.postMessage, port);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (\n    globalThis.addEventListener &&\n    isCallable(globalThis.postMessage) &&\n    !globalThis.importScripts &&\n    $location && $location.protocol !== 'file:' &&\n    !fails(globalPostMessageDefer)\n  ) {\n    defer = globalPostMessageDefer;\n    globalThis.addEventListener('message', eventListener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in createElement('script')) {\n    defer = function (id) {\n      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(runner(id), 0);\n    };\n  }\n}\n\nmodule.exports = {\n  set: set,\n  clear: clear\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n  aCallable(fn);\n  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n  // Nashorn bug:\n  //   https://github.com/zloirock/core-js/issues/1128\n  //   https://github.com/zloirock/core-js/issues/1130\n  if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n  if (passed < required) throw new $TypeError('Not enough arguments');\n  return passed;\n};\n","'use strict';\nvar userAgent = require('../internals/environment-user-agent');\n\n// eslint-disable-next-line redos/no-vulnerable -- safe\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","'use strict';\nvar ENVIRONMENT = require('../internals/environment');\n\nmodule.exports = ENVIRONMENT === 'NODE';\n","'use strict';\n/* global Bun, Deno -- detection */\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\nvar classof = require('../internals/classof-raw');\n\nvar userAgentStartsWith = function (string) {\n  return userAgent.slice(0, string.length) === string;\n};\n\nmodule.exports = (function () {\n  if (userAgentStartsWith('Bun/')) return 'BUN';\n  if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';\n  if (userAgentStartsWith('Deno/')) return 'DENO';\n  if (userAgentStartsWith('Node.js/')) return 'NODE';\n  if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';\n  if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';\n  if (classof(globalThis.process) === 'process') return 'NODE';\n  if (globalThis.window && globalThis.document) return 'BROWSER';\n  return 'REST';\n})();\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar setTask = require('../internals/task').set;\nvar schedulersFix = require('../internals/schedulers-fix');\n\n// https://github.com/oven-sh/bun/issues/1633\nvar setImmediate = globalThis.setImmediate ? schedulersFix(setTask, false) : setTask;\n\n// `setImmediate` method\n// http://w3c.github.io/setImmediate/#si-setImmediate\n$({ global: true, bind: true, enumerable: true, forced: globalThis.setImmediate !== setImmediate }, {\n  setImmediate: setImmediate\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar ENVIRONMENT = require('../internals/environment');\nvar USER_AGENT = require('../internals/environment-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar Function = globalThis.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENVIRONMENT === 'BUN' && (function () {\n  var version = globalThis.Bun.version.split('.');\n  return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');\n})();\n\n// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n// https://github.com/oven-sh/bun/issues/1633\nmodule.exports = function (scheduler, hasTimeArg) {\n  var firstParamIndex = hasTimeArg ? 2 : 1;\n  return WRAP ? function (handler, timeout /* , ...arguments */) {\n    var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;\n    var fn = isCallable(handler) ? handler : Function(handler);\n    var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n    var callback = boundArgs ? function () {\n      apply(fn, this, params);\n    } : fn;\n    return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n  } : scheduler;\n};\n","import { sanitize } from '../string';\nimport { A11Y_HIDDEN } from '../a11y';\n\n/**\n * Get the parent of the specified node in the DOM tree.\n *\n * @param {HTMLElement} element Element from which traversing is started.\n * @param {number} [level=0] Traversing deep level.\n * @returns {HTMLElement|null}\n */\nexport function getParent(element, level = 0) {\n  let iteration = -1;\n  let parent = null;\n  let elementToCheck = element;\n\n  while (elementToCheck !== null) {\n    if (iteration === level) {\n      parent = elementToCheck;\n      break;\n    }\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n\n    } else {\n      iteration += 1;\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return parent;\n}\n\n/**\n * Check if the provided element is a child of the provided Handsontable container.\n *\n * @param {HTMLElement} element Element to be analyzed.\n * @param {HTMLElement} thisHotContainer The Handsontable container.\n * @returns {boolean}\n */\nexport function isThisHotChild(element, thisHotContainer) {\n  const closestHandsontableContainer = element.closest('.handsontable');\n\n  return !!closestHandsontableContainer &&\n    (\n      closestHandsontableContainer.parentNode === thisHotContainer ||\n      closestHandsontableContainer === thisHotContainer\n    );\n}\n\n/**\n * Gets `frameElement` of the specified frame. Returns null if it is a top frame or if script has no access to read property.\n *\n * @param {Window} frame Frame from which should be get frameElement in safe way.\n * @returns {HTMLIFrameElement|null}\n */\nexport function getFrameElement(frame) {\n  return Object.getPrototypeOf(frame.parent) && frame.frameElement;\n}\n\n/**\n * Gets parent frame of the specified frame. Returns null if it is a top frame or if script has no access to read property.\n *\n * @param {Window} frame Frame from which should get frameElement in a safe way.\n * @returns {Window|null}\n */\nexport function getParentWindow(frame) {\n  return getFrameElement(frame) && frame.parent;\n}\n\n/**\n * Checks if script has access to read from parent frame of specified frame.\n *\n * @param {Window} frame Frame from which should get frameElement in a safe way.\n * @returns {boolean}\n */\nexport function hasAccessToParentWindow(frame) {\n  return !!Object.getPrototypeOf(frame.parent);\n}\n\n/**\n * Goes up the DOM tree (including given element) until it finds an parent element that matches the nodes or nodes name.\n * This method goes up through web components.\n *\n * @param {Node} element Element from which traversing is started.\n * @param {Array<string|Node>} [nodes] Array of elements or Array of elements name (in uppercase form).\n * @param {Node} [until] The element until the traversing ends.\n * @returns {Node|null}\n */\nexport function closest(element, nodes = [], until) {\n  const { ELEMENT_NODE, DOCUMENT_FRAGMENT_NODE } = Node;\n  let elementToCheck = element;\n\n  while (elementToCheck !== null && elementToCheck !== undefined && elementToCheck !== until) {\n    const { nodeType, nodeName } = elementToCheck;\n\n    if (nodeType === ELEMENT_NODE && (nodes.includes(nodeName) || nodes.includes(elementToCheck))) {\n      return elementToCheck;\n    }\n\n    const { host } = elementToCheck;\n\n    if (host && nodeType === DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = host;\n\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Goes \"down\" the DOM tree (including given element) until it finds an element that matches the nodes or nodes name.\n *\n * @param {HTMLElement} element Element from which traversing is started.\n * @param {Array} nodes Array of elements or Array of elements name.\n * @param {HTMLElement} [until] The list of elements until the traversing ends.\n * @returns {HTMLElement|null}\n */\nexport function closestDown(element, nodes, until) {\n  const matched = [];\n  let elementToCheck = element;\n\n  while (elementToCheck) {\n    elementToCheck = closest(elementToCheck, nodes, until);\n\n    if (!elementToCheck || (until && !until.contains(elementToCheck))) {\n      break;\n    }\n    matched.push(elementToCheck);\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n  const length = matched.length;\n\n  return length ? matched[length - 1] : null;\n}\n\n/**\n * Goes up the DOM tree and checks if element is child of another element.\n *\n * @param {HTMLElement} child Child element An element to check.\n * @param {object|string} parent Parent element OR selector of the parent element.\n *                               If string provided, function returns `true` for the first occurrence of element with that class.\n * @returns {boolean}\n */\nexport function isChildOf(child, parent) {\n  let node = child.parentNode;\n  let queriedParents = [];\n\n  if (typeof parent === 'string') {\n    if (child.defaultView) {\n      queriedParents = Array.prototype.slice.call(child.querySelectorAll(parent), 0);\n    } else {\n      queriedParents = Array.prototype.slice.call(child.ownerDocument.querySelectorAll(parent), 0);\n    }\n  } else {\n    queriedParents.push(parent);\n  }\n\n  while (node !== null) {\n    if (queriedParents.indexOf(node) > -1) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n\n  return false;\n}\n\n/**\n * Counts index of element within its parent.\n * WARNING: for performance reasons, assumes there are only element nodes (no text nodes). This is true\n * for Walkotnable, otherwise would need to check for nodeType or use previousElementSibling.\n *\n * @see http://jsperf.com/sibling-index/10\n * @param {Element} element The element to check.\n * @returns {number}\n */\nexport function index(element) {\n  let i = 0;\n  let elementToCheck = element;\n\n  if (elementToCheck.previousSibling) {\n    /* eslint-disable no-cond-assign */\n    while (elementToCheck = elementToCheck.previousSibling) {\n      i += 1;\n    }\n  }\n\n  return i;\n}\n\n/**\n * Check if the provided overlay contains the provided element.\n *\n * @param {string} overlayType The type of the overlay.\n * @param {HTMLElement} element An element to check.\n * @param {HTMLElement} root The root element.\n * @returns {boolean}\n */\nexport function overlayContainsElement(overlayType, element, root) {\n  const overlayElement = root.parentElement.querySelector(`.ht_clone_${overlayType}`);\n\n  return overlayElement ? overlayElement.contains(element) : null;\n}\n\n/**\n * @param {string[]} classNames The element \"class\" attribute string.\n * @returns {string[]}\n */\nfunction filterEmptyClassNames(classNames) {\n  if (!classNames || !classNames.length) {\n    return [];\n  }\n\n  return classNames.filter(x => !!x);\n}\n\n/**\n * Filter out the RegExp entries from an array.\n *\n * @param {(string|RegExp)[]} list Array of either strings, Regexes or a mix of both.\n * @param {boolean} [returnBoth] If `true`, both the array without regexes and an array of regexes will be returned.\n * @returns {string[]|{regexFree: string[], regexes: RegExp[]}}\n */\nfunction filterRegexes(list, returnBoth) {\n  if (!list || !list.length) {\n    return returnBoth ? { regexFree: [], regexes: [] } : [];\n  }\n\n  const regexes = [];\n  const regexFree = [];\n\n  regexFree.push(...list.filter((entry) => {\n    const isRegex = entry instanceof RegExp;\n\n    if (isRegex && returnBoth) {\n      regexes.push(entry);\n    }\n\n    return !isRegex;\n  }));\n\n  return returnBoth ? {\n    regexFree,\n    regexes\n  } : regexFree;\n}\n\n/**\n * Checks if element has class name.\n *\n * @param {HTMLElement} element An element to check.\n * @param {string} className Class name to check.\n * @returns {boolean}\n */\nexport function hasClass(element, className) {\n  if (element.classList === undefined || typeof className !== 'string' || className === '') {\n    return false;\n  }\n\n  return element.classList.contains(className);\n}\n\n/**\n * Add class name to an element.\n *\n * @param {HTMLElement} element An element to process.\n * @param {string|Array} className Class name as string or array of strings.\n */\nexport function addClass(element, className) {\n  if (typeof className === 'string') {\n    className = className.split(' ');\n  }\n\n  className = filterEmptyClassNames(className);\n\n  if (className.length > 0) {\n    element.classList.add(...className);\n  }\n}\n\n/**\n * Remove class name from an element.\n *\n * @param {HTMLElement} element An element to process.\n * @param {string|Array<string|RegExp>} className Class name as string or array of strings.\n */\nexport function removeClass(element, className) {\n  if (typeof className === 'string') {\n    className = className.split(' ');\n\n  } else if (className instanceof RegExp) {\n    className = [className];\n  }\n\n  let {\n    regexFree: stringClasses,\n    // eslint-disable-next-line prefer-const\n    regexes: regexClasses\n  } = filterRegexes(className, true);\n\n  stringClasses = filterEmptyClassNames(stringClasses);\n\n  if (stringClasses.length > 0) {\n    element.classList.remove(...stringClasses);\n  }\n\n  regexClasses.forEach((regexClassName) => {\n    element.classList.forEach((currentClassName) => {\n      if (regexClassName.test(currentClassName)) {\n        element.classList.remove(currentClassName);\n      }\n    });\n  });\n}\n\n/**\n * Set a single attribute or multiple attributes at once.\n *\n * @param {HTMLElement} domElement The HTML element to be modified.\n * @param {Array[]|string} attributes If setting multiple attributes at once, `attributes` holds an array containing the\n * attributes to be added. Each element of the array should be an array in a form of `[attributeName,\n * attributeValue]`. If setting a single attribute, `attributes` holds the name of the attribute.\n * @param {string|number|undefined} [attributeValue] If setting a single attribute, `attributeValue` holds the attribute\n * value.\n */\nexport function setAttribute(domElement, attributes = [], attributeValue) {\n  if (!Array.isArray(attributes)) {\n    attributes = [[attributes, attributeValue]];\n  }\n\n  attributes.forEach((attributeInfo) => {\n    if (Array.isArray(attributeInfo) && attributeInfo[0] !== '') {\n      domElement.setAttribute(...attributeInfo);\n    }\n  });\n}\n\n/**\n * Remove a single attribute or multiple attributes from the provided element at once.\n *\n * @param {HTMLElement} domElement The HTML element to be processed.\n * @param {Array<string|RegExp>|string} attributesToRemove If removing multiple attributes, `attributesToRemove`\n * holds an array of attribute names to be removed from the provided element. If removing a single attribute, it\n * holds the attribute name.\n */\nexport function removeAttribute(domElement, attributesToRemove = []) {\n  if (typeof attributesToRemove === 'string') {\n    attributesToRemove = attributesToRemove.split(' ');\n\n  } else if (attributesToRemove instanceof RegExp) {\n    attributesToRemove = [attributesToRemove];\n  }\n\n  const {\n    regexFree: stringAttributes,\n    regexes: regexAttributes\n  } = filterRegexes(attributesToRemove, true);\n\n  stringAttributes.forEach((attributeNameToRemove) => {\n    if (attributeNameToRemove !== '') {\n      domElement.removeAttribute(attributeNameToRemove);\n    }\n  });\n\n  regexAttributes.forEach((attributeRegex) => {\n    domElement.getAttributeNames().forEach((attributeName) => {\n      if (attributeRegex.test(attributeName)) {\n        domElement.removeAttribute(attributeName);\n      }\n    });\n  });\n}\n\n/**\n * @param {HTMLElement} element An element from the text is removed.\n */\nexport function removeTextNodes(element) {\n  if (element.nodeType === 3) {\n    element.parentNode.removeChild(element); // bye text nodes!\n\n  } else if (['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR'].indexOf(element.nodeName) > -1) {\n    const childs = element.childNodes;\n\n    for (let i = childs.length - 1; i >= 0; i--) {\n      removeTextNodes(childs[i]);\n    }\n  }\n}\n\n/**\n * Remove children function\n * WARNING - this doesn't unload events and data attached by jQuery\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method.\n *\n * @param {HTMLElement} element An element to clear.\n */\nexport function empty(element) {\n  let child;\n\n  /* eslint-disable no-cond-assign */\n  while (child = element.lastChild) {\n    element.removeChild(child);\n  }\n}\n\nexport const HTML_CHARACTERS = /(<(.*)>|&(.*);)/;\n\n/**\n * Insert content into element trying to avoid innerHTML method.\n *\n * @param {HTMLElement} element An element to write into.\n * @param {string} content The text to write.\n * @param {boolean} [sanitizeContent=true] If `true`, the content will be sanitized before writing to the element.\n */\nexport function fastInnerHTML(element, content, sanitizeContent = true) {\n  if (HTML_CHARACTERS.test(content)) {\n    element.innerHTML = sanitizeContent ? sanitize(content) : content;\n  } else {\n    fastInnerText(element, content);\n  }\n}\n\n/**\n * Insert text content into element.\n *\n * @param {HTMLElement} element An element to write into.\n * @param {string} content The text to write.\n */\nexport function fastInnerText(element, content) {\n  const child = element.firstChild;\n\n  if (child && child.nodeType === 3 && child.nextSibling === null) {\n    // fast lane - replace existing text node\n    child.textContent = content;\n\n  } else {\n    // slow lane - empty element and insert a text node\n    empty(element);\n    element.appendChild(element.ownerDocument.createTextNode(content));\n  }\n}\n\n/**\n * Returns true if element is attached to the DOM and visible, false otherwise.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\nexport function isVisible(element) {\n  const documentElement = element.ownerDocument.documentElement;\n  let next = element;\n\n  while (next !== documentElement) { // until <html> reached\n    if (next === null) { // parent detached from DOM\n      return false;\n\n    } else if (next.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      if (next.host) { // this is Web Components Shadow DOM\n        // see: http://w3c.github.io/webcomponents/spec/shadow/#encapsulation\n        // according to spec, should be if (next.ownerDocument !== window.document), but that doesn't work yet\n        if (next.host.impl) { // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features disabled\n          return isVisible(next.host.impl);\n\n        } else if (next.host) { // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features enabled\n          return isVisible(next.host);\n        }\n        throw new Error('Lost in Web Components world');\n\n      } else {\n        return false; // this is a node detached from document in IE8\n      }\n\n    } else if (getComputedStyle(next).display === 'none') {\n      return false;\n    }\n\n    next = next.parentNode;\n  }\n\n  return true;\n}\n\n/**\n * Returns elements top and left offset relative to the document. Function is not compatible with jQuery offset.\n *\n * @param {HTMLElement} element An element to get the offset position from.\n * @returns {object} Returns object with `top` and `left` props.\n */\nexport function offset(element) {\n  const rootDocument = element.ownerDocument;\n  const rootWindow = rootDocument.defaultView;\n  const documentElement = rootDocument.documentElement;\n  let elementToCheck = element;\n  let offsetLeft;\n  let offsetTop;\n  let lastElem;\n\n  offsetLeft = elementToCheck.offsetLeft;\n  offsetTop = elementToCheck.offsetTop;\n  lastElem = elementToCheck;\n\n  /* eslint-disable no-cond-assign */\n  while (elementToCheck = elementToCheck.offsetParent) {\n    // from my observation, document.body always has scrollLeft/scrollTop == 0\n    if (elementToCheck === rootDocument.body) {\n      break;\n    }\n    // If the element is inside an SVG context, the `offsetParent` can be\n    // a <foreignObject> that does not have properties `offsetLeft` and `offsetTop` defined.\n    if (!('offsetLeft' in elementToCheck)) {\n      break;\n    }\n    offsetLeft += elementToCheck.offsetLeft;\n    offsetTop += elementToCheck.offsetTop;\n    lastElem = elementToCheck;\n  }\n\n  // slow - http://jsperf.com/offset-vs-getboundingclientrect/6\n  if (lastElem && lastElem.style.position === 'fixed') {\n    // if(lastElem !== document.body) { //faster but does gives false positive in Firefox\n    offsetLeft += rootWindow.pageXOffset || documentElement.scrollLeft;\n    offsetTop += rootWindow.pageYOffset || documentElement.scrollTop;\n  }\n\n  return {\n    left: offsetLeft,\n    top: offsetTop\n  };\n}\n\n/**\n * Returns the document's scrollTop property.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getWindowScrollTop(rootWindow = window) {\n  return rootWindow.scrollY;\n}\n\n/**\n * Returns the document's scrollLeft property.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getWindowScrollLeft(rootWindow = window) {\n  return rootWindow.scrollX;\n}\n\n/**\n * Returns the provided element's scrollTop property.\n *\n * @param {HTMLElement} element An element to get the scroll top position from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getScrollTop(element, rootWindow = window) {\n  if (element === rootWindow) {\n    return getWindowScrollTop(rootWindow);\n  }\n\n  return element.scrollTop;\n}\n\n/**\n * Returns the provided element's scrollLeft property.\n *\n * @param {HTMLElement} element An element to get the scroll left position from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getScrollLeft(element, rootWindow = window) {\n  if (element === rootWindow) {\n    return getWindowScrollLeft(rootWindow);\n  }\n\n  return element.scrollLeft;\n}\n\n/**\n * Returns a DOM element responsible for scrolling of the provided element.\n *\n * @param {HTMLElement} element An element to get the scrollable element from.\n * @returns {HTMLElement} Element's scrollable parent.\n */\nexport function getScrollableElement(element) {\n  let rootDocument = element.ownerDocument;\n  let rootWindow = rootDocument ? rootDocument.defaultView : undefined;\n\n  if (!rootDocument) {\n    rootDocument = element.document ? element.document : element;\n    rootWindow = rootDocument.defaultView;\n  }\n\n  const props = ['auto', 'scroll'];\n  let el = element.parentNode;\n\n  while (el && el.style && rootDocument.body !== el) {\n    let { overflow, overflowX, overflowY } = el.style;\n\n    if ([overflow, overflowX, overflowY].includes('scroll')) {\n      return el;\n\n    } else {\n      ({ overflow, overflowX, overflowY } = rootWindow.getComputedStyle(el));\n\n      if (props.includes(overflow) || props.includes(overflowX) || props.includes(overflowY)) {\n        return el;\n      }\n    }\n\n    // The '+ 1' after the scrollHeight/scrollWidth is to prevent problems with zoomed out Chrome.\n    if (el.clientHeight <= el.scrollHeight + 1 && (props.includes(overflowY) || props.includes(overflow))) {\n      return el;\n    }\n    if (el.clientWidth <= el.scrollWidth + 1 && (props.includes(overflowX) || props.includes(overflow))) {\n      return el;\n    }\n\n    el = el.parentNode;\n  }\n\n  return rootWindow;\n}\n\n/**\n * Get the maximum available `scrollTop` value for the provided element.\n *\n * @param {HTMLElement} element The element to get the maximum scroll top value from.\n * @returns {number} The maximum scroll top value.\n */\nexport function getMaximumScrollTop(element) {\n  return element.scrollHeight - element.clientHeight;\n}\n\n/**\n * Get the maximum available `scrollLeft` value for the provided element.\n *\n * @param {HTMLElement} element The element to get the maximum scroll left value from.\n * @returns {number} The maximum scroll left value.\n */\nexport function getMaximumScrollLeft(element) {\n  return element.scrollWidth - element.clientWidth;\n}\n\n/**\n * Returns a DOM element responsible for trimming the provided element.\n *\n * @param {HTMLElement} base Base element.\n * @returns {HTMLElement} Base element's trimming parent.\n */\nexport function getTrimmingContainer(base) {\n  const rootDocument = base.ownerDocument;\n  const rootWindow = rootDocument.defaultView;\n\n  let el = base.parentNode;\n\n  while (el && el.style && rootDocument.body !== el) {\n    if (el.style.overflow !== 'visible' && el.style.overflow !== '') {\n      return el;\n    }\n\n    const computedStyle = getComputedStyle(el, rootWindow);\n    const allowedProperties = ['scroll', 'hidden', 'auto'];\n    const property = computedStyle.getPropertyValue('overflow');\n    const propertyY = computedStyle.getPropertyValue('overflow-y');\n    const propertyX = computedStyle.getPropertyValue('overflow-x');\n\n    if (allowedProperties.includes(property) ||\n        allowedProperties.includes(propertyY) ||\n        allowedProperties.includes(propertyX)) {\n      return el;\n    }\n\n    el = el.parentNode;\n  }\n\n  return rootWindow;\n}\n\n/**\n * Returns a style property for the provided element. (Be it an inline or external style).\n *\n * @param {HTMLElement} element An element to get the style from.\n * @param {string} prop Wanted property.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {string|undefined} Element's style property.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getStyle(element, prop, rootWindow = window) {\n  if (!element) {\n    return;\n\n  } else if (element === rootWindow) {\n    if (prop === 'width') {\n      return `${rootWindow.innerWidth}px`;\n\n    } else if (prop === 'height') {\n      return `${rootWindow.innerHeight}px`;\n    }\n\n    return;\n  }\n\n  const styleProp = element.style[prop];\n\n  if (styleProp !== '' && styleProp !== undefined) {\n    return styleProp;\n  }\n\n  const computedStyle = getComputedStyle(element, rootWindow);\n\n  if (computedStyle[prop] !== '' && computedStyle[prop] !== undefined) {\n    return computedStyle[prop];\n  }\n}\n\n/**\n * Verifies if element fit to provided CSSRule.\n *\n * @param {Element} element Element to verify with selector text.\n * @param {CSSRule} rule Selector text from CSSRule.\n * @returns {boolean}\n */\nexport function matchesCSSRules(element, rule) {\n  const { selectorText } = rule;\n  let result = false;\n\n  if (rule.type === CSSRule.STYLE_RULE && selectorText) {\n    if (element.msMatchesSelector) {\n      result = element.msMatchesSelector(selectorText);\n\n    } else if (element.matches) {\n      result = element.matches(selectorText);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Returns a computed style object for the provided element. (Needed if style is declared in external stylesheet).\n *\n * @param {HTMLElement} element An element to get style from.\n * @param {Window} [rootWindow] The document window owner.\n * @returns {IEElementStyle|CssStyle} Elements computed style object.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getComputedStyle(element, rootWindow = window) {\n  return element.currentStyle || rootWindow.getComputedStyle(element);\n}\n\n/**\n * Returns the element's outer width.\n *\n * @param {HTMLElement} element An element to get the width from.\n * @returns {number} Element's outer width.\n */\nexport function outerWidth(element) {\n  return element.offsetWidth;\n}\n\n/**\n * Returns the element's outer height.\n *\n * @param {HTMLElement} element An element to get the height from.\n * @returns {number} Element's outer height.\n */\nexport function outerHeight(element) {\n  return element.offsetHeight;\n}\n\n/**\n * Returns the element's inner height.\n *\n * @param {HTMLElement} element An element to get the height from.\n * @returns {number} Element's inner height.\n */\nexport function innerHeight(element) {\n  return element.clientHeight || element.innerHeight;\n}\n\n/**\n * Returns the element's inner width.\n *\n * @param {HTMLElement} element An element to get the width from.\n * @returns {number} Element's inner width.\n */\nexport function innerWidth(element) {\n  return element.clientWidth || element.innerWidth;\n}\n\n/**\n * @param {HTMLElement} element An element to which the event is added.\n * @param {string} event The event name.\n * @param {Function} callback The callback to add.\n */\nexport function addEvent(element, event, callback) {\n  element.addEventListener(event, callback, false);\n}\n\n/**\n * @param {HTMLElement} element An element from which the event is removed.\n * @param {string} event The event name.\n * @param {Function} callback The function reference to remove.\n */\nexport function removeEvent(element, event, callback) {\n  element.removeEventListener(event, callback, false);\n}\n\n/**\n * Returns caret position in text input.\n *\n * @author https://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea\n * @param {HTMLElement} el An element to check.\n * @returns {number}\n */\nexport function getCaretPosition(el) {\n  if (el.selectionStart) {\n    return el.selectionStart;\n  }\n\n  return 0;\n}\n\n/**\n * Returns end of the selection in text input.\n *\n * @param {HTMLElement} el An element to check.\n * @returns {number}\n */\nexport function getSelectionEndPosition(el) {\n  if (el.selectionEnd) {\n    return el.selectionEnd;\n  }\n\n  return 0;\n}\n\n/**\n * Returns text under selection.\n *\n * @param {Window} [rootWindow] The document window owner.\n * @returns {string}\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getSelectionText(rootWindow = window) {\n  const rootDocument = rootWindow.document;\n  let text = '';\n\n  if (rootWindow.getSelection) {\n    text = rootWindow.getSelection().toString();\n\n  } else if (rootDocument.selection && rootDocument.selection.type !== 'Control') {\n    text = rootDocument.selection.createRange().text;\n  }\n\n  return text;\n}\n\n/**\n * Cross-platform helper to clear text selection.\n *\n * @param {Window} [rootWindow] The document window owner.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function clearTextSelection(rootWindow = window) {\n  // http://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript\n  if (rootWindow.getSelection) {\n    if (rootWindow.getSelection().empty) { // Chrome\n      rootWindow.getSelection().empty();\n    } else if (rootWindow.getSelection().removeAllRanges) { // Firefox\n      rootWindow.getSelection().removeAllRanges();\n    }\n  }\n}\n\n/**\n * Sets caret position in text input.\n *\n * @author http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/\n * @param {Element} element An element to process.\n * @param {number} pos The selection start position.\n * @param {number} endPos The selection end position.\n */\nexport function setCaretPosition(element, pos, endPos) {\n  if (endPos === undefined) {\n    endPos = pos;\n  }\n  if (element.setSelectionRange) {\n    element.focus();\n\n    try {\n      element.setSelectionRange(pos, endPos);\n    } catch (err) {\n      const elementParent = element.parentNode;\n      const parentDisplayValue = elementParent.style.display;\n\n      elementParent.style.display = 'block';\n      element.setSelectionRange(pos, endPos);\n      elementParent.style.display = parentDisplayValue;\n    }\n  }\n}\n\nlet cachedScrollbarWidth;\n\n/**\n * Helper to calculate scrollbar width.\n * Source: https://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes.\n *\n * @private\n * @param {Document} rootDocument The onwer of the document.\n * @returns {number}\n */\n// eslint-disable-next-line no-restricted-globals\nfunction walkontableCalculateScrollbarWidth(rootDocument = document) {\n  const inner = rootDocument.createElement('div');\n\n  inner.style.height = '200px';\n  inner.style.width = '100%';\n\n  const outer = rootDocument.createElement('div');\n\n  outer.style.boxSizing = 'content-box';\n  outer.style.height = '150px';\n  outer.style.left = '0px';\n  outer.style.overflow = 'hidden';\n  outer.style.position = 'absolute';\n  outer.style.top = '0px';\n  outer.style.width = '200px';\n  outer.style.visibility = 'hidden';\n  outer.appendChild(inner);\n\n  (rootDocument.body || rootDocument.documentElement).appendChild(outer);\n  const w1 = inner.offsetWidth;\n\n  outer.style.overflow = 'scroll';\n  let w2 = inner.offsetWidth;\n\n  if (w1 === w2) {\n    w2 = outer.clientWidth;\n  }\n  (rootDocument.body || rootDocument.documentElement).removeChild(outer);\n\n  return (w1 - w2);\n}\n\n/**\n * Returns the computed width of the native browser scroll bar.\n *\n * @param {Document} [rootDocument] The owner of the document.\n * @returns {number} Width.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function getScrollbarWidth(rootDocument = document) {\n  if (cachedScrollbarWidth === undefined) {\n    cachedScrollbarWidth = walkontableCalculateScrollbarWidth(rootDocument);\n  }\n\n  return cachedScrollbarWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\nexport function hasVerticalScrollbar(element) {\n  return element.offsetWidth !== element.clientWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element An element to check.\n * @returns {boolean}\n */\nexport function hasHorizontalScrollbar(element) {\n  return element.offsetHeight !== element.clientHeight;\n}\n\n/**\n * Sets overlay position depending on it's type and used browser.\n *\n * @param {HTMLElement} overlayElem An element to process.\n * @param {number|string} left The left position of the overlay.\n * @param {number|string} top The top position of the overlay.\n */\nexport function setOverlayPosition(overlayElem, left, top) {\n  overlayElem.style.transform = `translate3d(${left},${top},0)`;\n}\n\n/**\n * @param {HTMLElement} element An element to process.\n * @returns {number|Array}\n */\nexport function getCssTransform(element) {\n  let transform;\n\n  if (element.style.transform && (transform = element.style.transform) !== '') {\n    return ['transform', transform];\n  }\n\n  return -1;\n}\n\n/**\n * @param {HTMLElement} element An element to process.\n */\nexport function resetCssTransform(element) {\n  if (element.style.transform && element.style.transform !== '') {\n    element.style.transform = '';\n  }\n}\n\n/**\n * Determines if the given DOM element is an input field.\n * Notice: By 'input' we mean input, textarea and select nodes.\n *\n * @param {HTMLElement} element - DOM element.\n * @returns {boolean}\n */\nexport function isInput(element) {\n  const inputs = ['INPUT', 'SELECT', 'TEXTAREA'];\n\n  return element && (inputs.indexOf(element.nodeName) > -1 || element.contentEditable === 'true');\n}\n\n/**\n * Determines if the given DOM element is an input field placed OUTSIDE of HOT.\n * Notice: By 'input' we mean input, textarea and select nodes which have defined 'data-hot-input' attribute.\n *\n * @param {HTMLElement} element - DOM element.\n * @returns {boolean}\n */\nexport function isOutsideInput(element) {\n  return isInput(element) && element.hasAttribute('data-hot-input') === false;\n}\n\n/**\n * Check if the given DOM element can be focused (by using \"select\" method).\n *\n * @param {HTMLElement} element - DOM element.\n */\nexport function selectElementIfAllowed(element) {\n  const activeElement = element.ownerDocument.activeElement;\n\n  if (!isOutsideInput(activeElement)) {\n    element.select();\n  }\n}\n\n/**\n * Check if the provided element is detached from DOM.\n *\n * @param {HTMLElement} element HTML element to be checked.\n * @returns {boolean} `true` if the element is detached, `false` otherwise.\n */\nexport function isDetached(element) {\n  return !element.parentNode;\n}\n\n/**\n * Set up an observer to recognize when the provided element first becomes visible and trigger a callback when it\n * happens.\n *\n * @param {HTMLElement} elementToBeObserved Element to be observed.\n * @param {Function} callback The callback function.\n */\nexport function observeVisibilityChangeOnce(elementToBeObserved, callback) {\n  const visibilityObserver = new IntersectionObserver((entries, observer) => {\n    entries.forEach((entry) => {\n      if (entry.isIntersecting && elementToBeObserved.offsetParent !== null) {\n        callback();\n        observer.unobserve(elementToBeObserved);\n      }\n    });\n  }, {\n    root: elementToBeObserved.ownerDocument.body\n  });\n\n  visibilityObserver.observe(elementToBeObserved);\n}\n\n/**\n * Add a `contenteditable` attribute, select the contents and optionally add the `invisibleSelection`\n * class to the provided element.\n *\n * @param {HTMLElement} element Element to be processed.\n * @param {boolean} [invisibleSelection=true] `true` if the class should be added to the element.\n * @param {boolean} [ariaHidden=true] `true` if the `aria-hidden` attribute should be added to the processed element.\n */\nexport function makeElementContentEditableAndSelectItsContent(element, invisibleSelection = true, ariaHidden = true) {\n  const ownerDocument = element.ownerDocument;\n  const range = ownerDocument.createRange();\n  const sel = ownerDocument.defaultView.getSelection();\n\n  setAttribute(element, 'contenteditable', true);\n\n  if (ariaHidden) {\n    setAttribute(element, ...A11Y_HIDDEN());\n  }\n\n  if (invisibleSelection) {\n    addClass(element, 'invisibleSelection');\n  }\n\n  range.selectNodeContents(element);\n\n  sel.removeAllRanges();\n\n  sel.addRange(range);\n}\n\n/**\n * Remove the `contenteditable` attribute, deselect the contents and optionally remove the `invisibleSelection`\n * class from the provided element.\n *\n * @param {HTMLElement} selectedElement The element to be deselected.\n * @param {boolean} [removeInvisibleSelectionClass=true] `true` if the class should be removed from the element.\n */\nexport function removeContentEditableFromElementAndDeselect(selectedElement, removeInvisibleSelectionClass = true) {\n  const sel = selectedElement.ownerDocument.defaultView.getSelection();\n\n  if (selectedElement.hasAttribute('aria-hidden')) {\n    selectedElement.removeAttribute('aria-hidden');\n  }\n\n  sel.removeAllRanges();\n\n  if (removeInvisibleSelectionClass) {\n    removeClass(selectedElement, 'invisibleSelection');\n  }\n\n  selectedElement.removeAttribute('contenteditable');\n}\n\n/**\n * Run the provided callback while the provided element is selected and modified to have the `contenteditable`\n * attribute added. Optionally, the selection can be configured to be invisible.\n *\n * @param {HTMLElement} element Element to be selected.\n * @param {Function} callback Callback to be called.\n * @param {boolean} [invisibleSelection=true] `true` if the selection should be invisible.\n */\nexport function runWithSelectedContendEditableElement(element, callback, invisibleSelection = true) {\n  makeElementContentEditableAndSelectItsContent(element, invisibleSelection);\n\n  callback();\n\n  removeContentEditableFromElementAndDeselect(element, invisibleSelection);\n}\n","import DOMPurify from 'dompurify';\nimport { stringify } from './mixed';\n\n/**\n * Convert string to upper case first letter.\n *\n * @param {string} string String to convert.\n * @returns {string}\n */\nexport function toUpperCaseFirst(string) {\n  return string[0].toUpperCase() + string.substr(1);\n}\n\n/**\n * Compare strings case insensitively.\n *\n * @param {...string} strings Strings to compare.\n * @returns {boolean}\n */\nexport function equalsIgnoreCase(...strings) {\n  const unique = [];\n  let length = strings.length;\n\n  while (length) {\n    length -= 1;\n    const string = stringify(strings[length]).toLowerCase();\n\n    if (unique.indexOf(string) === -1) {\n      unique.push(string);\n    }\n  }\n\n  return unique.length === 1;\n}\n\n/**\n * Generates a random hex string. Used as namespace for Handsontable instance events.\n *\n * @returns {string} Returns 16-long character random string (eq. `'92b1bfc74ec4'`).\n */\nexport function randomString() {\n  /**\n   * @returns {string}\n   */\n  function s4() {\n    return Math.floor((1 + Math.random()) * 0x10000)\n      .toString(16)\n      .substring(1);\n  }\n\n  return s4() + s4() + s4() + s4();\n}\n\n/**\n * Checks if value is valid percent.\n *\n * @param {string} value The value to check.\n * @returns {boolean}\n */\nexport function isPercentValue(value) {\n  return /^([0-9][0-9]?%$)|(^100%$)/.test(value);\n}\n\n/**\n * Substitute strings placed beetwen square brackets into value defined in `variables` object. String names defined in\n * square brackets must be the same as property name of `variables` object.\n *\n * @param {string} template Template string.\n * @param {object} variables Object which contains all available values which can be injected into template.\n * @returns {string}\n */\nexport function substitute(template, variables = {}) {\n  return (`${template}`).replace(/(?:\\\\)?\\[([^[\\]]+)]/g, (match, name) => {\n    if (match.charAt(0) === '\\\\') {\n      return match.substr(1, match.length - 1);\n    }\n\n    return variables[name] === undefined ? '' : variables[name];\n  });\n}\n\n/**\n * Strip any HTML tag from the string.\n *\n * @param {string} string String to cut HTML from.\n * @returns {string}\n */\nexport function stripTags(string) {\n  return sanitize(`${string}`, { ALLOWED_TAGS: [] });\n}\n\n/**\n * Sanitizes string from potential security vulnerabilities.\n *\n * @param {string} string String to sanitize.\n * @param {object} [options] DOMPurify's configuration object.\n * @returns {string}\n */\nexport function sanitize(string, options) {\n  return DOMPurify.sanitize(string, options);\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__133__;","import moment from 'moment';\nimport { toSingleLine } from './templateLiteralTag';\n\n/**\n * Converts any value to string.\n *\n * @param {*} value The value to stringify.\n * @returns {string}\n */\nexport function stringify(value) {\n  let result;\n\n  switch (typeof value) {\n    case 'string':\n    case 'number':\n      result = `${value}`;\n      break;\n\n    case 'object':\n      result = value === null ? '' : value.toString();\n      break;\n    case 'undefined':\n      result = '';\n      break;\n    default:\n      result = value.toString();\n      break;\n  }\n\n  return result;\n}\n\n/**\n * Checks if given variable is defined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isDefined(variable) {\n  return typeof variable !== 'undefined';\n}\n\n/**\n * Checks if given variable is undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isUndefined(variable) {\n  return typeof variable === 'undefined';\n}\n\n/**\n * Check if given variable is null, empty string or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isEmpty(variable) {\n  return variable === null || variable === '' || isUndefined(variable);\n}\n\n/**\n * Check if given variable is a regular expression.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isRegExp(variable) {\n  return Object.prototype.toString.call(variable) === '[object RegExp]';\n}\n\n/* eslint-disable */\nconst _m = '\\x6C\\x65\\x6E\\x67\\x74\\x68';\nconst _hd = (v) => parseInt(v, 16);\nconst _pi = (v) => parseInt(v, 10);\nconst _ss = (v, s, l) => v['\\x73\\x75\\x62\\x73\\x74\\x72'](s, l);\nconst _cp = (v) => v['\\x63\\x6F\\x64\\x65\\x50\\x6F\\x69\\x6E\\x74\\x41\\x74'](0) - 65;\nconst _norm = (v) => `${v}`.replace(/\\-/g, '');\nconst _extractTime = (v) => _hd(_ss(_norm(v), _hd('12'), _cp('\\x46'))) / (_hd(_ss(_norm(v), _cp('\\x42'), ~~![][_m])) || 9);\nconst _ignored = () => typeof location !== 'undefined' && /^([a-z0-9\\-]+\\.)?\\x68\\x61\\x6E\\x64\\x73\\x6F\\x6E\\x74\\x61\\x62\\x6C\\x65\\x2E\\x63\\x6F\\x6D$/i.test(location.host);\nlet _notified = false;\n\nconst consoleMessages = {\n  invalid: () => toSingleLine`\n    The license key for Handsontable is invalid.\\x20\n    If you need any help, contact us at support@handsontable.com.`,\n  expired: ({ keyValidityDate, hotVersion }) => toSingleLine`\n    The license key for Handsontable expired on ${keyValidityDate}, and is not valid for the installed\\x20\n    version ${hotVersion}. Renew your license key at handsontable.com or downgrade to a version released prior\\x20\n    to ${keyValidityDate}. If you need any help, contact us at sales@handsontable.com.`,\n  missing: () => toSingleLine`\n    The license key for Handsontable is missing. Use your purchased key to activate the product.\\x20\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by\\x20\n    passing the key: 'non-commercial-and-evaluation'. If you need any help, contact\\x20\n    us at support@handsontable.com.`,\n  non_commercial: () => '',\n};\nconst domMessages = {\n  invalid: () => toSingleLine`\n    The license key for Handsontable is invalid.\\x20\n    <a href=\"https://handsontable.com/docs/tutorial-license-key.html\" target=\"_blank\">Read more</a> on how to\\x20\n    install it properly or contact us at <a href=\"mailto:support@handsontable.com\">support@handsontable.com</a>.`,\n  expired: ({ keyValidityDate, hotVersion }) => toSingleLine`\n    The license key for Handsontable expired on ${keyValidityDate}, and is not valid for the installed\\x20\n    version ${hotVersion}. <a href=\"https://handsontable.com/pricing\" target=\"_blank\">Renew</a> your\\x20\n    license key or downgrade to a version released prior to ${keyValidityDate}. If you need any\\x20\n    help, contact us at <a href=\"mailto:sales@handsontable.com\">sales@handsontable.com</a>.`,\n  missing: () => toSingleLine`\n    The license key for Handsontable is missing. Use your purchased key to activate the product.\\x20\n    Alternatively, you can activate Handsontable to use for non-commercial purposes by\\x20\n    passing the key: 'non-commercial-and-evaluation'.\\x20\n    <a href=\"https://handsontable.com/docs/tutorial-license-key.html\" target=\"_blank\">Read more</a> about it in\\x20\n    the documentation or contact us at <a href=\"mailto:support@handsontable.com\">support@handsontable.com</a>.`,\n  non_commercial: () => '',\n};\n\nexport function _injectProductInfo(key, element) {\n  const hasValidType = !isEmpty(key);\n  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';\n  const hotVersion = process.env.HOT_VERSION;\n  let keyValidityDate;\n  let consoleMessageState = 'invalid';\n  let domMessageState = 'invalid';\n\n  key = _norm(key || '');\n\n  const schemaValidity = _checkKeySchema(key);\n\n  if (hasValidType || isNonCommercial || schemaValidity) {\n    if (schemaValidity) {\n      const releaseDate = moment(process.env.HOT_RELEASE_DATE, 'DD/MM/YYYY');\n      const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);\n      const keyValidityDays = _extractTime(key);\n\n      keyValidityDate = moment((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');\n\n      if (releaseDays > keyValidityDays) {\n        consoleMessageState = 'expired';\n        domMessageState = 'expired';\n      } else {\n        consoleMessageState = 'valid';\n        domMessageState = 'valid';\n      }\n\n    } else if (isNonCommercial) {\n      consoleMessageState = 'non_commercial';\n      domMessageState = 'valid';\n\n    } else {\n      consoleMessageState = 'invalid';\n      domMessageState = 'invalid';\n    }\n\n  } else {\n    consoleMessageState = 'missing';\n    domMessageState = 'missing';\n  }\n\n  if (_ignored()) {\n    consoleMessageState = 'valid';\n    domMessageState = 'valid';\n  }\n\n  if (!_notified && consoleMessageState !== 'valid') {\n    const message = consoleMessages[consoleMessageState]({\n      keyValidityDate,\n      hotVersion,\n    });\n\n    if (message) {\n      console[consoleMessageState === 'non_commercial' ? 'info' : 'warn'](consoleMessages[consoleMessageState]({\n        keyValidityDate,\n        hotVersion,\n      }));\n    }\n    _notified = true;\n  }\n\n  if (domMessageState !== 'valid' && element.parentNode) {\n    const message = domMessages[domMessageState]({\n      keyValidityDate,\n      hotVersion,\n    });\n\n    if (message) {\n      const messageNode = document.createElement('div');\n\n      messageNode.className = 'hot-display-license-info';\n      messageNode.innerHTML = domMessages[domMessageState]({\n        keyValidityDate,\n        hotVersion,\n      });\n      element.parentNode.insertBefore(messageNode, element.nextSibling);\n    }\n  }\n}\n\nfunction _checkKeySchema(v) {\n  let z = [][_m];\n  let p = z;\n\n  if (v[_m] !== _cp('\\x5A')) {\n    return false;\n  }\n\n  for (let c = '', i = '\\x42\\x3C\\x48\\x34\\x50\\x2B'.split(''), j = _cp(i.shift()); j; j = _cp(i.shift() || 'A')) {\n    --j<''[_m]?p=p|(_pi(`${_pi(_hd(c)+(_hd(_ss(v,Math.abs(j),2))+[]).padStart(2,'0'))}`)%97||2)>>1:c=_ss(v,j,!j?6:i[_m]===1?9:8);\n  }\n\n  return p === z;\n}\n/* eslint-enable */\n","module.exports = __WEBPACK_EXTERNAL_MODULE__135__;","import { arrayReduce } from '../helpers/array';\n\n/**\n * Tags a multiline string and return new one without line break characters and following spaces.\n *\n * @param {Array} strings Parts of the entire string without expressions.\n * @param {...string} expressions Expressions converted to strings, which are added to the entire string.\n * @returns {string}\n */\nexport function toSingleLine(strings, ...expressions) {\n  const result = arrayReduce(strings, (previousValue, currentValue, index) => {\n\n    const valueWithoutWhiteSpaces = currentValue.replace(/\\r?\\n\\s*/g, '');\n    const expressionForIndex = expressions[index] ? expressions[index] : '';\n\n    return previousValue + valueWithoutWhiteSpaces + expressionForIndex;\n  }, '');\n\n  return result.trim();\n}\n","/**\n * @param {Array} arr An array to process.\n */\nexport function to2dArray(arr) {\n  const ilen = arr.length;\n  let i = 0;\n\n  while (i < ilen) {\n    arr[i] = [arr[i]];\n    i += 1;\n  }\n}\n\n/**\n * @param {Array} arr An array to extend.\n * @param {Array} extension The data to extend from.\n */\nexport function extendArray(arr, extension) {\n  const ilen = extension.length;\n  let i = 0;\n\n  while (i < ilen) {\n    arr.push(extension[i]);\n    i += 1;\n  }\n}\n\n/**\n * @param {Array} arr An array to pivot.\n * @returns {Array}\n */\nexport function pivot(arr) {\n  const pivotedArr = [];\n\n  if (!arr || arr.length === 0 || !arr[0] || arr[0].length === 0) {\n    return pivotedArr;\n  }\n\n  const rowCount = arr.length;\n  const colCount = arr[0].length;\n\n  for (let i = 0; i < rowCount; i++) {\n    for (let j = 0; j < colCount; j++) {\n      if (!pivotedArr[j]) {\n        pivotedArr[j] = [];\n      }\n\n      pivotedArr[j][i] = arr[i][j];\n    }\n  }\n\n  return pivotedArr;\n}\n\n/**\n * A specialized version of `.reduce` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initFromArray] Specify using the first element of `array` as the initial value.\n * @returns {*} Returns the accumulated value.\n */\nexport function arrayReduce(array, iteratee, accumulator, initFromArray) {\n  let index = -1;\n  let iterable = array;\n  let result = accumulator;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n  const length = iterable.length;\n\n  if (initFromArray && length) {\n    index += 1;\n    result = iterable[index];\n  }\n\n  index += 1;\n\n  while (index < length) {\n    result = iteratee(result, iterable[index], index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.filter` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nexport function arrayFilter(array, predicate) {\n  let index = 0;\n  let iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  const length = iterable.length;\n  const result = [];\n  let resIndex = -1;\n\n  while (index < length) {\n    const value = iterable[index];\n\n    if (predicate(value, index, iterable)) {\n      resIndex += 1;\n      result[resIndex] = value;\n    }\n\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.map` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nexport function arrayMap(array, iteratee) {\n  let index = 0;\n  let iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  const length = iterable.length;\n  const result = [];\n  let resIndex = -1;\n\n  while (index < length) {\n    const value = iterable[index];\n\n    resIndex += 1;\n    result[resIndex] = iteratee(value, index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}.\n *\n * @param {Array|*} array The array to iterate over or an any element with implemented iterator protocol.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nexport function arrayEach(array, iteratee) {\n  let index = 0;\n  let iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  const length = iterable.length;\n\n  while (index < length) {\n    if (iteratee(iterable[index], index, iterable) === false) {\n      break;\n    }\n\n    index += 1;\n  }\n\n  return array;\n}\n\n/**\n * Calculate sum value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns calculated sum value.\n */\nexport function arraySum(array) {\n  return arrayReduce(array, (a, b) => (a + b), 0);\n}\n\n/**\n * Returns the highest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns the highest value from an array.\n */\nexport function arrayMax(array) {\n  return arrayReduce(array, (a, b) => (a > b ? a : b), Array.isArray(array) ? array[0] : undefined);\n}\n\n/**\n * Returns the lowest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns the lowest value from an array.\n */\nexport function arrayMin(array) {\n  return arrayReduce(array, (a, b) => (a < b ? a : b), Array.isArray(array) ? array[0] : undefined);\n}\n\n/**\n * Calculate average value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {number} Returns calculated average value.\n */\nexport function arrayAvg(array) {\n  if (!array.length) {\n    return 0;\n  }\n\n  return arraySum(array) / array.length;\n}\n\n/**\n * Flatten multidimensional array.\n *\n * @param {Array} array Array of Arrays.\n * @returns {Array}\n */\nexport function arrayFlatten(array) {\n  return arrayReduce(array, (initial, value) => initial.concat(Array.isArray(value) ? arrayFlatten(value) : value), []);\n}\n\n/**\n * Unique values in the array.\n *\n * @param {Array} array The array to process.\n * @returns {Array}\n */\nexport function arrayUnique(array) {\n  const unique = [];\n\n  arrayEach(array, (value) => {\n    if (unique.indexOf(value) === -1) {\n      unique.push(value);\n    }\n  });\n\n  return unique;\n}\n\n/**\n * Differences from two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns the difference between arrays.\n */\nexport function getDifferenceOfArrays(...arrays) {\n  const [first, ...rest] = [...arrays];\n  let filteredFirstArray = first;\n\n  arrayEach(rest, (array) => {\n    filteredFirstArray = filteredFirstArray.filter(value => !array.includes(value));\n  });\n\n  return filteredFirstArray;\n}\n\n/**\n * Intersection of two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns elements that exists in every array.\n */\nexport function getIntersectionOfArrays(...arrays) {\n  const [first, ...rest] = [...arrays];\n  let filteredFirstArray = first;\n\n  arrayEach(rest, (array) => {\n    filteredFirstArray = filteredFirstArray.filter(value => array.includes(value));\n  });\n\n  return filteredFirstArray;\n}\n\n/**\n * Union of two or more arrays.\n *\n * @param {...Array} arrays Array of strings or array of numbers.\n * @returns {Array} Returns the elements that exist in any of the arrays, without duplicates.\n */\nexport function getUnionOfArrays(...arrays) {\n  const [first, ...rest] = [...arrays];\n  const set = new Set(first);\n\n  arrayEach(rest, (array) => {\n    arrayEach(array, (value) => {\n      if (!set.has(value)) {\n        set.add(value);\n      }\n    });\n  });\n\n  return Array.from(set);\n}\n\n/**\n * Convert a separated strings to an array of strings.\n *\n * @param {string} value A string of class name(s).\n * @param {string|RegExp} delimiter The pattern describing where each split should occur.\n * @returns {string[]} Returns array of string or empty array.\n */\nexport function stringToArray(value, delimiter = ' ') {\n  return value.split(delimiter);\n}\n","export const A11Y_TABINDEX = val => ['tabindex', val];\nexport const A11Y_TREEGRID = () => ['role', 'treegrid'];\nexport const A11Y_PRESENTATION = () => ['role', 'presentation'];\nexport const A11Y_GRIDCELL = () => ['role', 'gridcell'];\nexport const A11Y_ROWHEADER = () => ['role', 'rowheader'];\nexport const A11Y_ROWGROUP = () => ['role', 'rowgroup'];\nexport const A11Y_COLUMNHEADER = () => ['role', 'columnheader'];\nexport const A11Y_ROW = () => ['role', 'row'];\nexport const A11Y_MENU = () => ['role', 'menu'];\nexport const A11Y_MENU_ITEM = () => ['role', 'menuitem'];\nexport const A11Y_MENU_ITEM_CHECKBOX = () => ['role', 'menuitemcheckbox'];\nexport const A11Y_COMBOBOX = () => ['role', 'combobox'];\nexport const A11Y_LISTBOX = () => ['role', 'listbox'];\nexport const A11Y_OPTION = () => ['role', 'option'];\nexport const A11Y_CHECKBOX = () => ['role', 'checkbox'];\nexport const A11Y_SCOPE_COL = () => ['scope', 'col'];\nexport const A11Y_SCOPE_ROW = () => ['scope', 'row'];\nexport const A11Y_TEXT = () => ['type', 'text'];\nexport const A11Y_LABEL = val => ['aria-label', val];\nexport const A11Y_HIDDEN = () => ['aria-hidden', 'true'];\nexport const A11Y_DISABLED = () => ['aria-disabled', 'true'];\nexport const A11Y_MULTISELECTABLE = () => ['aria-multiselectable', 'true'];\nexport const A11Y_HASPOPUP = val => ['aria-haspopup', val];\nexport const A11Y_ROWCOUNT = val => ['aria-rowcount', val];\nexport const A11Y_COLCOUNT = val => ['aria-colcount', val];\nexport const A11Y_ROWINDEX = val => ['aria-rowindex', val];\nexport const A11Y_COLINDEX = val => ['aria-colindex', val];\nexport const A11Y_EXPANDED = val => ['aria-expanded', val];\nexport const A11Y_SORT = val => ['aria-sort', val];\nexport const A11Y_READONLY = () => ['aria-readonly', 'true'];\nexport const A11Y_INVALID = () => ['aria-invalid', 'true'];\nexport const A11Y_CHECKED = val => ['aria-checked', val];\nexport const A11Y_SELECTED = () => ['aria-selected', 'true'];\nexport const A11Y_AUTOCOMPLETE = () => ['aria-autocomplete', 'list'];\nexport const A11Y_CONTROLS = val => ['aria-controls', val];\nexport const A11Y_ACTIVEDESCENDANT = val => ['aria-activedescendant', val];\nexport const A11Y_LIVE = val => ['aria-live', val];\nexport const A11Y_RELEVANT = val => ['aria-relevant', val];\nexport const A11Y_SETSIZE = val => ['aria-setsize', val];\nexport const A11Y_POSINSET = val => ['aria-posinset', val];\n","import { arrayReduce } from './array';\nimport { isDefined } from './mixed';\n\n/**\n * Checks if given variable is function.\n *\n * @param {*} func Variable to check.\n * @returns {boolean}\n */\nexport function isFunction(func) {\n  return typeof func === 'function';\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over time (`wait`).\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in miliseconds.\n * @returns {Function}\n */\nexport function throttle(func, wait = 200) {\n  let lastCalled = 0;\n  const result = {\n    lastCallThrottled: true\n  };\n  let lastTimer = null;\n\n  /**\n   * @param {...*} args The list of arguments passed during the function invocation.\n   * @returns {object}\n   */\n  function _throttle(...args) {\n    const stamp = Date.now();\n    let needCall = false;\n\n    result.lastCallThrottled = true;\n\n    if (!lastCalled) {\n      lastCalled = stamp;\n      needCall = true;\n    }\n    const remaining = wait - (stamp - lastCalled);\n\n    if (needCall) {\n      result.lastCallThrottled = false;\n      func.apply(this, args);\n    } else {\n      if (lastTimer) {\n        clearTimeout(lastTimer);\n      }\n      lastTimer = setTimeout(() => {\n        result.lastCallThrottled = false;\n        func.apply(this, args);\n        lastCalled = 0;\n        lastTimer = undefined;\n      }, remaining);\n    }\n\n    return result;\n  }\n\n  return _throttle;\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over\n * time (`wait`) after specified hits.\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in miliseconds.\n * @param {number} hits Number of hits after throttling will be applied.\n * @returns {Function}\n */\nexport function throttleAfterHits(func, wait = 200, hits = 10) {\n  const funcThrottle = throttle(func, wait);\n  let remainHits = hits;\n\n  /**\n   *\n   */\n  function _clearHits() {\n    remainHits = hits;\n  }\n  /**\n   * @param {*} args The list of arguments passed during the function invocation.\n   * @returns {*}\n   */\n  function _throttleAfterHits(...args) {\n    if (remainHits) {\n      remainHits -= 1;\n\n      return func.apply(this, args);\n    }\n\n    return funcThrottle.apply(this, args);\n  }\n  _throttleAfterHits.clearHits = _clearHits;\n\n  return _throttleAfterHits;\n}\n\n/**\n * Creates debounce function that enforces a function (`func`) not be called again until a certain amount of time (`wait`)\n * has passed without it being called.\n *\n * @param {Function} func Function to invoke.\n * @param {number} wait Delay in milliseconds.\n * @returns {Function}\n */\nexport function debounce(func, wait = 200) {\n  let lastTimer = null;\n  let result;\n\n  /**\n   * @param {*} args The list of arguments passed during the function invocation.\n   * @returns {*}\n   */\n  function _debounce(...args) {\n    if (lastTimer) {\n      clearTimeout(lastTimer);\n    }\n    lastTimer = setTimeout(() => {\n      result = func.apply(this, args);\n    }, wait);\n\n    return result;\n  }\n\n  return _debounce;\n}\n\n/**\n * Creates the function that returns the result of calling the given functions. Result of the first function is passed to\n * the second as an argument and so on. Only first function in the chain can handle multiple arguments.\n *\n * @param {Function} functions Functions to compose.\n * @returns {Function}\n */\nexport function pipe(...functions) {\n  const [firstFunc, ...restFunc] = functions;\n\n  return function _pipe(...args) {\n    return arrayReduce(restFunc, (acc, fn) => fn(acc), firstFunc.apply(this, args));\n  };\n}\n\n/**\n * Creates the function that returns the function with cached arguments.\n *\n * @param {Function} func Function to partialization.\n * @param {Array} params Function arguments to cache.\n * @returns {Function}\n */\nexport function partial(func, ...params) {\n  return function _partial(...restParams) {\n    return func.apply(this, params.concat(restParams));\n  };\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the left to the right.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('foo')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'Some test with foo...');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nexport function curry(func) {\n  const argsLength = func.length;\n\n  /**\n   * @param {*} argsSoFar The list of arguments passed during the function invocation.\n   * @returns {Function}\n   */\n  function given(argsSoFar) {\n    return function _curry(...params) {\n      const passedArgsSoFar = argsSoFar.concat(params);\n      let result;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the right to the left.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('Some test with foo...')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'foo');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nexport function curryRight(func) {\n  const argsLength = func.length;\n\n  /**\n   * @param {*} argsSoFar The list of arguments passed during the function invocation.\n   * @returns {Function}\n   */\n  function given(argsSoFar) {\n    return function _curry(...params) {\n      const passedArgsSoFar = argsSoFar.concat(params.reverse());\n      let result;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n\n/**\n * Calls a function in the quickest way available.\n *\n * In contrast to the `apply()` method that passes arguments as an array,\n * the `call()` method passes arguments directly, to avoid garbage collection costs.\n *\n * @param {Function} func The function to call.\n * @param {*} context The value to use as `this` when calling the `func` function.\n * @param {*} [arg1] An argument passed to the `func` function.\n * @param {*} [arg2] An argument passed to `func` function.\n * @param {*} [arg3] An argument passed to `func` function.\n * @param {*} [arg4] An argument passed to `func` function.\n * @param {*} [arg5] An argument passed to `func` function.\n * @param {*} [arg6] An argument passed to `func` function.\n * @returns {*}\n */\nexport function fastCall(func, context, arg1, arg2, arg3, arg4, arg5, arg6) {\n  if (isDefined(arg6)) {\n    return func.call(context, arg1, arg2, arg3, arg4, arg5, arg6);\n\n  } else if (isDefined(arg5)) {\n    return func.call(context, arg1, arg2, arg3, arg4, arg5);\n\n  } else if (isDefined(arg4)) {\n    return func.call(context, arg1, arg2, arg3, arg4);\n\n  } else if (isDefined(arg3)) {\n    return func.call(context, arg1, arg2, arg3);\n\n  } else if (isDefined(arg2)) {\n    return func.call(context, arg1, arg2);\n\n  } else if (isDefined(arg1)) {\n    return func.call(context, arg1);\n  }\n\n  return func.call(context);\n}\n","import { objectEach } from './object';\nimport { isCSR } from './feature';\n\nconst tester = (testerFunc) => {\n  const result = {\n    value: false,\n  };\n\n  result.test = (ua, vendor) => {\n    result.value = testerFunc(ua, vendor);\n  };\n\n  return result;\n};\n\nconst browsers = {\n  chrome: tester((ua, vendor) => /Chrome/.test(ua) && /Google/.test(vendor)),\n  chromeWebKit: tester(ua => /CriOS/.test(ua)),\n  edge: tester(ua => /Edge/.test(ua)),\n  edgeWebKit: tester(ua => /EdgiOS/.test(ua)),\n  firefox: tester(ua => /Firefox/.test(ua)),\n  firefoxWebKit: tester(ua => /FxiOS/.test(ua)),\n  mobile: tester(ua => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua)),\n  safari: tester((ua, vendor) => /Safari/.test(ua) && /Apple Computer/.test(vendor)),\n};\n\nconst platforms = {\n  mac: tester(platform => /^Mac/.test(platform)),\n  win: tester(platform => /^Win/.test(platform)),\n  linux: tester(platform => /^Linux/.test(platform)),\n  ios: tester(ua => /iPhone|iPad|iPod/i.test(ua))\n};\n\n/**\n * @param {object} [metaObject] The browser identity collection.\n * @param {object} [metaObject.userAgent] The user agent reported by browser.\n * @param {object} [metaObject.vendor] The vendor name reported by browser.\n */\nexport function setBrowserMeta({ userAgent = navigator.userAgent, vendor = navigator.vendor } = {}) {\n  objectEach(browsers, ({ test }) => void test(userAgent, vendor));\n}\n\n/**\n * @param {object} [metaObject] The platform identity collection.\n * @param {object} [metaObject.platform] The platform ID.\n */\nexport function setPlatformMeta({ platform = navigator.platform } = {}) {\n  objectEach(platforms, ({ test }) => void test(platform));\n}\n\nif (isCSR()) {\n  setBrowserMeta();\n  setPlatformMeta();\n}\n\n/**\n * @returns {boolean}\n */\nexport function isChrome() {\n  return browsers.chrome.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isChromeWebKit() {\n  return browsers.chromeWebKit.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isFirefox() {\n  return browsers.firefox.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isFirefoxWebKit() {\n  return browsers.firefoxWebKit.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isSafari() {\n  return browsers.safari.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isEdge() {\n  return browsers.edge.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isEdgeWebKit() {\n  return browsers.edgeWebKit.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isMobileBrowser() {\n  return browsers.mobile.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isIOS() {\n  return platforms.ios.value;\n}\n\n/**\n * A hacky way to recognize the iPad. Since iOS 13, the iPad on Safari mimics macOS behavior and user agent.\n *\n * @see {@https://stackoverflow.com/a/57838385}\n * @param {object} [metaObject] The browser identity collection.\n * @param {number} [metaObject.maxTouchPoints] The maximum number of simultanous touch points.\n * @returns {boolean}\n */\nexport function isIpadOS({ maxTouchPoints } = navigator) {\n  return maxTouchPoints > 2 && platforms.mac.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isWindowsOS() {\n  return platforms.win.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isMacOS() {\n  return platforms.mac.value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function isLinuxOS() {\n  return platforms.linux.value;\n}\n","import { arrayEach } from './array';\n\n/**\n * Generate schema for passed object.\n *\n * @param {Array|object} object An object to analyze.\n * @returns {Array|object}\n */\nexport function duckSchema(object) {\n  let schema;\n\n  if (Array.isArray(object)) {\n    schema = object.length ? new Array(object.length).fill(null) : [];\n\n  } else {\n    schema = {};\n\n    objectEach(object, (value, key) => {\n      if (key === '__children') {\n        return;\n      }\n\n      if (value && typeof value === 'object' && !Array.isArray(value)) {\n        schema[key] = duckSchema(value);\n\n      } else if (Array.isArray(value)) {\n        if (value.length && typeof value[0] === 'object' && !Array.isArray(value[0])) {\n          schema[key] = [duckSchema(value[0])];\n        } else {\n          schema[key] = [];\n        }\n\n      } else {\n        schema[key] = null;\n      }\n    });\n  }\n\n  return schema;\n}\n\n/**\n * Inherit without without calling parent constructor, and setting `Child.prototype.constructor` to `Child` instead of `Parent`.\n * Creates temporary dummy function to call it as constructor.\n * Described in ticket: https://github.com/handsontable/handsontable/pull/516.\n *\n * @param {object} Child The child class.\n * @param {object} Parent The parent class.\n * @returns {object}\n */\nexport function inherit(Child, Parent) {\n  Parent.prototype.constructor = Parent;\n  Child.prototype = new Parent();\n  Child.prototype.constructor = Child;\n\n  return Child;\n}\n\n/**\n * Perform shallow extend of a target object with extension's own properties.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n * @param {string[]} [writableKeys] An array of keys that are writable to target object.\n * @returns {object}\n */\nexport function extend(target, extension, writableKeys) {\n  const hasWritableKeys = Array.isArray(writableKeys);\n\n  objectEach(extension, (value, key) => {\n    if (hasWritableKeys === false || writableKeys.includes(key)) {\n      target[key] = value;\n    }\n  });\n\n  return target;\n}\n\n/**\n * Perform deep extend of a target object with extension's own properties.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n */\nexport function deepExtend(target, extension) {\n  objectEach(extension, (value, key) => {\n    if (extension[key] && typeof extension[key] === 'object') {\n      if (!target[key]) {\n        if (Array.isArray(extension[key])) {\n          target[key] = [];\n        } else if (Object.prototype.toString.call(extension[key]) === '[object Date]') {\n          target[key] = extension[key];\n        } else {\n          target[key] = {};\n        }\n      }\n      deepExtend(target[key], extension[key]);\n\n    } else {\n      target[key] = extension[key];\n    }\n  });\n}\n\n/**\n * Perform deep clone of an object.\n * WARNING! Only clones JSON properties. Will cause error when `obj` contains a function, Date, etc.\n *\n * @param {object} obj An object that will be cloned.\n * @returns {object}\n */\nexport function deepClone(obj) {\n  if (typeof obj === 'object') {\n    return JSON.parse(JSON.stringify(obj));\n  }\n\n  return obj;\n}\n\n/**\n * Shallow clone object.\n *\n * @param {object} object An object to clone.\n * @returns {object}\n */\nexport function clone(object) {\n  const result = {};\n\n  objectEach(object, (value, key) => {\n    result[key] = value;\n  });\n\n  return result;\n}\n\n/**\n * Extend the Base object (usually prototype) of the functionality the `mixins` objects.\n *\n * @param {object} Base Base object which will be extended.\n * @param {object} mixins The object of the functionality will be \"copied\".\n * @returns {object}\n */\nexport function mixin(Base, ...mixins) {\n  if (!Base.MIXINS) {\n    Base.MIXINS = [];\n  }\n  arrayEach(mixins, (mixinItem) => {\n    Base.MIXINS.push(mixinItem.MIXIN_NAME);\n\n    objectEach(mixinItem, (value, key) => {\n      if (Base.prototype[key] !== undefined) {\n        throw new Error(`Mixin conflict. Property '${key}' already exist and cannot be overwritten.`);\n      }\n      if (typeof value === 'function') {\n        Base.prototype[key] = value;\n\n      } else {\n        const getter = function _getter(property, initialValue) {\n          const propertyName = `_${property}`;\n\n          const initValue = (newValue) => {\n            let result = newValue;\n\n            if (Array.isArray(result) || isObject(result)) {\n              result = deepClone(result);\n            }\n\n            return result;\n          };\n\n          return function() {\n            if (this[propertyName] === undefined) {\n              this[propertyName] = initValue(initialValue);\n            }\n\n            return this[propertyName];\n          };\n        };\n        const setter = function _setter(property) {\n          const propertyName = `_${property}`;\n\n          return function(newValue) {\n            this[propertyName] = newValue;\n          };\n        };\n\n        Object.defineProperty(Base.prototype, key, {\n          get: getter(key, value),\n          set: setter(key),\n          configurable: true,\n        });\n      }\n    });\n  });\n\n  return Base;\n}\n\n/**\n * Checks if two objects or arrays are (deep) equal.\n *\n * @param {object|Array} object1 The first object to compare.\n * @param {object|Array} object2 The second object to compare.\n * @returns {boolean}\n */\nexport function isObjectEqual(object1, object2) {\n  return JSON.stringify(object1) === JSON.stringify(object2);\n}\n\n/**\n * Determines whether given object is a plain Object.\n * Note: String and Array are not plain Objects.\n *\n * @param {*} object An object to check.\n * @returns {boolean}\n */\nexport function isObject(object) {\n  return Object.prototype.toString.call(object) === '[object Object]';\n}\n\n/**\n * @param {object} object The object on which to define the property.\n * @param {string} property The name of the property to be defined or modified.\n * @param {*} value The value associated with the property.\n * @param {object} options The descriptor for the property being defined or modified.\n */\nexport function defineGetter(object, property, value, options) {\n  options.value = value;\n  options.writable = options.writable !== false;\n  options.enumerable = options.enumerable !== false;\n  options.configurable = options.configurable !== false;\n\n  Object.defineProperty(object, property, options);\n}\n\n/**\n * A specialized version of `.forEach` for objects.\n *\n * @param {object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {object} Returns `object`.\n */\nexport function objectEach(object, iteratee) {\n  // eslint-disable-next-line no-restricted-syntax\n  for (const key in object) {\n    if (!object.hasOwnProperty || (object.hasOwnProperty && Object.prototype.hasOwnProperty.call(object, key))) {\n      if (iteratee(object[key], key, object) === false) {\n        break;\n      }\n    }\n  }\n\n  return object;\n}\n\n/**\n * Get object property by its name. Access to sub properties can be achieved by dot notation (e.q. `'foo.bar.baz'`).\n *\n * @param {object} object Object which value will be exported.\n * @param {string} name Object property name.\n * @returns {*}\n */\nexport function getProperty(object, name) {\n  const names = name.split('.');\n  let result = object;\n\n  objectEach(names, (nameItem) => {\n    result = result[nameItem];\n\n    if (result === undefined) {\n      result = undefined;\n\n      return false;\n    }\n  });\n\n  return result;\n}\n\n/**\n * Set a property value on the provided object. Works on nested object prop names as well (e.g. `first.name`).\n *\n * @param {object} object Object to work on.\n * @param {string} name Prop name.\n * @param {*} value Value to be assigned at the provided property.\n */\nexport function setProperty(object, name, value) {\n  const names = name.split('.');\n  let workingObject = object;\n\n  names.forEach((propName, index) => {\n    if (index !== names.length - 1) {\n      if (!hasOwnProperty(workingObject, propName)) {\n        workingObject[propName] = {};\n      }\n\n      workingObject = workingObject[propName];\n\n    } else {\n      workingObject[propName] = value;\n    }\n  });\n}\n\n/**\n * Return object length (recursively).\n *\n * @param {*} object Object for which we want get length.\n * @returns {number}\n */\nexport function deepObjectSize(object) {\n  if (!isObject(object)) {\n    return 0;\n  }\n\n  const recursObjLen = function(obj) {\n    let result = 0;\n\n    if (isObject(obj)) {\n      objectEach(obj, (value, key) => {\n        if (key === '__children') {\n          return;\n        }\n\n        result += recursObjLen(value);\n      });\n    } else {\n      result += 1;\n    }\n\n    return result;\n  };\n\n  return recursObjLen(object);\n}\n\n/**\n * Create object with property where its value change will be observed.\n *\n * @param {*} [defaultValue=undefined] Default value.\n * @param {string} [propertyToListen='value'] Property to listen.\n * @returns {object}\n */\nexport function createObjectPropListener(defaultValue, propertyToListen = 'value') {\n  const privateProperty = `_${propertyToListen}`;\n  const holder = {\n    _touched: false,\n    [privateProperty]: defaultValue,\n    isTouched() {\n      return this._touched;\n    }\n  };\n\n  Object.defineProperty(holder, propertyToListen, {\n    get() {\n      return this[privateProperty];\n    },\n    set(value) {\n      this._touched = true;\n      this[privateProperty] = value;\n    },\n    enumerable: true,\n    configurable: true\n  });\n\n  return holder;\n}\n\n/**\n * Check if at specified `key` there is any value for `object`.\n *\n * @param {object} object Object to search value at specific key.\n * @param {string} key String key to check.\n * @returns {boolean}\n */\nexport function hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.0.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n  var symbol = getBuiltIn('Symbol')('stringify detection');\n  // MS Edge converts symbol values to JSON as {}\n  return $stringify([symbol]) !== '[null]'\n    // WebKit converts symbol values to JSON as null\n    || $stringify({ a: symbol }) !== '{}'\n    // V8 throws on boxed symbols\n    || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n  return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n    || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n  var args = arraySlice(arguments);\n  var $replacer = getReplacerFunction(replacer);\n  if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n  args[1] = function (key, value) {\n    // some old implementations (like WebKit) could pass numbers as keys\n    if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n    if (!isSymbol(value)) return value;\n  };\n  return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n  var prev = charAt(string, offset - 1);\n  var next = charAt(string, offset + 1);\n  if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n    return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n  } return match;\n};\n\nif ($stringify) {\n  // `JSON.stringify` method\n  // https://tc39.es/ecma262/#sec-json.stringify\n  $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n    // eslint-disable-next-line no-unused-vars -- required for `.length`\n    stringify: function stringify(it, replacer, space) {\n      var args = arraySlice(arguments);\n      var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n      return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n    }\n  });\n}\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n  if (isCallable(replacer)) return replacer;\n  if (!isArray(replacer)) return;\n  var rawLength = replacer.length;\n  var keys = [];\n  for (var i = 0; i < rawLength; i++) {\n    var element = replacer[i];\n    if (typeof element == 'string') push(keys, element);\n    else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n  }\n  var keysLength = keys.length;\n  var root = true;\n  return function (key, value) {\n    if (root) {\n      root = false;\n      return value;\n    }\n    if (isArray(this)) return value;\n    for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n  };\n};\n","/* eslint-disable no-restricted-globals */\n/**\n * Polyfill for requestAnimationFrame.\n *\n * @param {Function} callback The function to call when it's time.\n * @returns {number}\n */\nexport function requestAnimationFrame(callback) {\n  return window.requestAnimationFrame(callback);\n}\n\n/**\n * Polyfill for cancelAnimationFrame.\n *\n * @param {number} id The request Id, generated by `requestAnimationFrame`.\n */\nexport function cancelAnimationFrame(id) {\n  window.cancelAnimationFrame(id);\n}\n\n/**\n * @returns {boolean}\n */\nexport function isTouchSupported() {\n  return ('ontouchstart' in window);\n}\n\n/**\n * Checks if the environment that the code runs in is a browser.\n *\n * @returns {boolean}\n */\nexport function isCSR() {\n  return typeof window !== 'undefined';\n}\n\nlet comparisonFunction;\n\n/**\n * Get string comparison function for sorting purposes. It supports multilingual string comparison base on Internationalization API.\n *\n * @param {string} [language] The language code used for phrases sorting.\n * @param {object} [options] Additional options for sort comparator.\n * @returns {*}\n */\nexport function getComparisonFunction(language, options = {}) {\n  if (comparisonFunction) {\n    return comparisonFunction;\n  }\n\n  if (typeof Intl === 'object') {\n    comparisonFunction = new Intl.Collator(language, options).compare;\n\n  } else if (typeof String.prototype.localeCompare === 'function') {\n    comparisonFunction = (a, b) => (`${a}`).localeCompare(b);\n\n  } else {\n    comparisonFunction = (a, b) => {\n      if (a === b) {\n        return 0;\n      }\n\n      return a > b ? -1 : 1;\n    };\n  }\n\n  return comparisonFunction;\n}\n","import { isFunctionKey, isCtrlMetaKey } from './helpers/unicode';\nimport { isImmediatePropagationStopped } from './helpers/dom/event';\nimport { getEditorInstance } from './editors/registry';\nimport EventManager from './eventManager';\n\nclass EditorManager {\n  /**\n   * Instance of {@link Handsontable}.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Reference to an instance's private GridSettings object.\n   *\n   * @private\n   * @type {GridSettings}\n   */\n  tableMeta;\n  /**\n   * Instance of {@link Selection}.\n   *\n   * @private\n   * @type {Selection}\n   */\n  selection;\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @private\n   * @type {EventManager}\n   */\n  eventManager;\n  /**\n   * Determines if EditorManager is destroyed.\n   *\n   * @private\n   * @type {boolean}\n   */\n  destroyed = false;\n  /**\n   * A reference to an instance of the activeEditor.\n   *\n   * @private\n   * @type {BaseEditor}\n   */\n  activeEditor;\n  /**\n   * Keeps a reference to the cell's properties object.\n   *\n   * @type {object}\n   */\n  cellProperties;\n\n  /**\n   * @param {Core} hotInstance The Handsontable instance.\n   * @param {TableMeta} tableMeta The table meta instance.\n   * @param {Selection} selection The selection instance.\n   */\n  constructor(hotInstance, tableMeta, selection) {\n    this.hot = hotInstance;\n    this.tableMeta = tableMeta;\n    this.selection = selection;\n    this.eventManager = new EventManager(hotInstance);\n\n    this.hot.addHook('afterDocumentKeyDown', event => this.#onAfterDocumentKeyDown(event));\n\n    // Open editor when text composition is started (IME editor)\n    this.eventManager.addEventListener(this.hot.rootDocument.documentElement, 'compositionstart', (event) => {\n      if (!this.destroyed && this.hot.isListening()) {\n        this.openEditor('', event);\n      }\n    });\n\n    this.hot.view._wt.update('onCellDblClick', (event, coords, elem) => this.#onCellDblClick(event, coords, elem));\n  }\n\n  /**\n   * Get active editor.\n   *\n   * @returns {BaseEditor}\n   */\n  getActiveEditor() {\n    return this.activeEditor;\n  }\n\n  /**\n   * Prepare text input to be displayed at given grid cell.\n   */\n  prepareEditor() {\n    if (this.activeEditor && this.activeEditor.isWaiting()) {\n      this.closeEditor(false, false, (dataSaved) => {\n        if (dataSaved) {\n          this.prepareEditor();\n        }\n      });\n\n      return;\n    }\n\n    const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n    if (!highlight || highlight.isHeader()) {\n      return;\n    }\n\n    const { row, col } = highlight;\n    const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', row, col);\n    let visualRowToCheck = row;\n    let visualColumnToCheck = col;\n\n    if (Array.isArray(modifiedCellCoords)) {\n      [visualRowToCheck, visualColumnToCheck] = modifiedCellCoords;\n    }\n\n    // Getting values using the modified coordinates.\n    this.cellProperties = this.hot.getCellMeta(visualRowToCheck, visualColumnToCheck);\n\n    if (!this.isCellEditable()) {\n      this.clearActiveEditor();\n\n      return;\n    }\n\n    const td = this.hot.getCell(row, col, true);\n\n    // Skip the preparation when the cell is not rendered in the DOM. The cell is scrolled out of\n    // the table's viewport.\n    if (td) {\n      const editorClass = this.hot.getCellEditor(this.cellProperties);\n      const prop = this.hot.colToProp(visualColumnToCheck);\n      const originalValue =\n        this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(visualRowToCheck), visualColumnToCheck);\n\n      this.activeEditor = getEditorInstance(editorClass, this.hot);\n      // Using not modified coordinates, as we need to get the table element using selection coordinates.\n      // There is an extra translation in the editor for saving value.\n      this.activeEditor.prepare(row, col, prop, td, originalValue, this.cellProperties);\n    }\n  }\n\n  /**\n   * Check is editor is opened/showed.\n   *\n   * @returns {boolean}\n   */\n  isEditorOpened() {\n    return this.activeEditor && this.activeEditor.isOpened();\n  }\n\n  /**\n   * Open editor with initial value.\n   *\n   * @param {null|string} newInitialValue New value from which editor will start if handled property it's not the `null`.\n   * @param {Event} event The event object.\n   * @param {boolean} [enableFullEditMode=false] When true, an editor works in full editing mode. Mode disallows closing an editor\n   *                                             when arrow keys are pressed.\n   */\n  openEditor(newInitialValue, event, enableFullEditMode = false) {\n    if (!this.isCellEditable()) {\n      this.clearActiveEditor();\n\n      return;\n    }\n\n    const selection = this.hot.getSelectedRangeLast();\n    let allowOpening = this.hot.runHooks(\n      'beforeBeginEditing',\n      selection.highlight.row,\n      selection.highlight.col,\n      newInitialValue,\n      event,\n      enableFullEditMode,\n    );\n\n    // If the above hook does not return boolean apply default behavior which disallows opening\n    // an editor after double mouse click for non-contiguous selection (while pressing Ctrl/Cmd) and\n    // for multiple selected cells (while pressing SHIFT).\n    if (event instanceof MouseEvent && typeof allowOpening !== 'boolean') {\n      allowOpening = this.hot.selection.getLayerLevel() === 0 && selection.isSingle();\n    }\n\n    if (allowOpening === false) {\n      this.clearActiveEditor();\n\n      return;\n    }\n\n    if (!this.activeEditor) {\n      this.hot.scrollToFocusedCell();\n      this.prepareEditor();\n    }\n\n    if (this.activeEditor) {\n      if (enableFullEditMode) {\n        this.activeEditor.enableFullEditMode();\n      }\n\n      this.activeEditor.beginEditing(newInitialValue, event);\n    }\n  }\n\n  /**\n   * Close editor, finish editing cell.\n   *\n   * @param {boolean} restoreOriginalValue If `true`, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} isCtrlPressed If `true`, then editor will save value to each cell in the last selected range.\n   * @param {Function} callback The callback function, fired after editor closing.\n   */\n  closeEditor(restoreOriginalValue, isCtrlPressed, callback) {\n    if (this.activeEditor) {\n      this.activeEditor.finishEditing(restoreOriginalValue, isCtrlPressed, callback);\n\n    } else if (callback) {\n      callback(false);\n    }\n  }\n\n  /**\n   * Close editor and save changes.\n   *\n   * @param {boolean} isCtrlPressed If `true`, then editor will save value to each cell in the last selected range.\n   */\n  closeEditorAndSaveChanges(isCtrlPressed) {\n    this.closeEditor(false, isCtrlPressed);\n  }\n\n  /**\n   * Close editor and restore original value.\n   *\n   * @param {boolean} isCtrlPressed Indication of whether the CTRL button is pressed.\n   */\n  closeEditorAndRestoreOriginalValue(isCtrlPressed) {\n    this.closeEditor(true, isCtrlPressed);\n  }\n\n  /**\n   * Clears reference to an instance of the active editor.\n   *\n   * @private\n   */\n  clearActiveEditor() {\n    this.activeEditor = undefined;\n  }\n\n  /**\n   * Checks if the currently selected cell (pointed by selection highlight coords) is editable.\n   * Editable cell is when:\n   *   - the cell has defined an editor type;\n   *   - the cell is not marked as read-only;\n   *   - the cell is not hidden.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isCellEditable() {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection) {\n      return false;\n    }\n\n    const editorClass = this.hot.getCellEditor(this.cellProperties);\n    const { row, col } = selection.highlight;\n    const {\n      rowIndexMapper,\n      columnIndexMapper\n    } = this.hot;\n    const isCellHidden = rowIndexMapper.isHidden(this.hot.toPhysicalRow(row)) ||\n      columnIndexMapper.isHidden(this.hot.toPhysicalColumn(col));\n\n    if (this.cellProperties.readOnly || !editorClass || isCellHidden) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Controls selection's behavior after clicking `Enter`.\n   *\n   * @private\n   * @param {KeyboardEvent} event The keyboard event object.\n   */\n  moveSelectionAfterEnter(event) {\n    const enterMoves = { ...typeof this.tableMeta.enterMoves === 'function' ?\n      this.tableMeta.enterMoves(event) : this.tableMeta.enterMoves };\n\n    if (event.shiftKey) {\n      enterMoves.row = -enterMoves.row;\n      enterMoves.col = -enterMoves.col;\n    }\n\n    if (this.hot.selection.isMultiple()) {\n      this.selection.transformFocus(enterMoves.row, enterMoves.col);\n    } else {\n      this.selection.transformStart(enterMoves.row, enterMoves.col, true);\n    }\n  }\n\n  /**\n   * OnAfterDocumentKeyDown callback.\n   *\n   * @param {KeyboardEvent} event The keyboard event object.\n   */\n  #onAfterDocumentKeyDown(event) {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!this.hot.isListening() || !selection || selection.highlight.isHeader() ||\n        isImmediatePropagationStopped(event)) {\n      return;\n    }\n\n    const { keyCode } = event;\n\n    // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n    const isCtrlPressed = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n    if (!this.activeEditor || (this.activeEditor && !this.activeEditor.isWaiting())) {\n      if (!isFunctionKey(keyCode) && !isCtrlMetaKey(keyCode) && !isCtrlPressed && !this.isEditorOpened()) {\n        this.openEditor('', event);\n      }\n    }\n  }\n\n  /**\n   * OnCellDblClick callback.\n   *\n   * @param {MouseEvent} event The mouse event object.\n   * @param {object} coords The cell coordinates.\n   */\n  #onCellDblClick(event, coords) {\n    if (coords.isCell()) {\n      this.openEditor(null, event, true);\n    }\n  }\n\n  /**\n   * Destroy the instance.\n   */\n  destroy() {\n    this.destroyed = true;\n    this.eventManager.destroy();\n  }\n}\n\nconst instances = new WeakMap();\n\n/**\n * @param {Core} hotInstance The Handsontable instance.\n * @param {TableMeta} tableMeta The table meta class instance.\n * @param {Selection} selection The selection instance.\n * @returns {EditorManager}\n */\nEditorManager.getInstance = function(hotInstance, tableMeta, selection) {\n  let editorManager = instances.get(hotInstance);\n\n  if (!editorManager) {\n    editorManager = new EditorManager(hotInstance, tableMeta, selection);\n    instances.set(hotInstance, editorManager);\n  }\n\n  return editorManager;\n};\n\nexport default EditorManager;\n","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { arrayEach } from './array';\nimport { isMacOS, isFirefox } from './browser';\n\nexport const KEY_CODES = {\n  ALT: 18,\n  ARROW_DOWN: 40,\n  ARROW_LEFT: 37,\n  ARROW_RIGHT: 39,\n  ARROW_UP: 38,\n  AUDIO_DOWN: isFirefox() ? 182 : 174,\n  AUDIO_MUTE: isFirefox() ? 181 : 173,\n  AUDIO_UP: isFirefox() ? 183 : 175,\n  BACKSPACE: 8,\n  CAPS_LOCK: 20,\n  COMMA: 188,\n  COMMAND_LEFT: 91,\n  COMMAND_RIGHT: 93,\n  COMMAND_FIREFOX: 224,\n  CONTROL: 17,\n  DELETE: 46,\n  END: 35,\n  ENTER: 13,\n  ESCAPE: 27,\n  F1: 112,\n  F2: 113,\n  F3: 114,\n  F4: 115,\n  F5: 116,\n  F6: 117,\n  F7: 118,\n  F8: 119,\n  F9: 120,\n  F10: 121,\n  F11: 122,\n  F12: 123,\n  F13: 124,\n  F14: 125,\n  F15: 126,\n  F16: 127,\n  F17: 128,\n  F18: 129,\n  F19: 130,\n  HOME: 36,\n  INSERT: 45,\n  MEDIA_NEXT: 176,\n  MEDIA_PLAY_PAUSE: 179,\n  MEDIA_PREV: 177,\n  MEDIA_STOP: 178,\n  NULL: 0,\n  NUM_LOCK: 144,\n  PAGE_DOWN: 34,\n  PAGE_UP: 33,\n  PAUSE: 19,\n  PERIOD: 190,\n  SCROLL_LOCK: 145,\n  SHIFT: 16,\n  SPACE: 32,\n  TAB: 9,\n  A: 65,\n  C: 67,\n  D: 68,\n  F: 70,\n  L: 76,\n  O: 79,\n  P: 80,\n  S: 83,\n  V: 86,\n  X: 88,\n  Y: 89,\n  Z: 90,\n};\n\nconst FUNCTION_KEYS = [\n  KEY_CODES.ALT,\n  KEY_CODES.ARROW_DOWN,\n  KEY_CODES.ARROW_LEFT,\n  KEY_CODES.ARROW_RIGHT,\n  KEY_CODES.ARROW_UP,\n  KEY_CODES.AUDIO_DOWN,\n  KEY_CODES.AUDIO_MUTE,\n  KEY_CODES.AUDIO_UP,\n  KEY_CODES.BACKSPACE,\n  KEY_CODES.CAPS_LOCK,\n  KEY_CODES.DELETE,\n  KEY_CODES.END,\n  KEY_CODES.ENTER,\n  KEY_CODES.ESCAPE,\n  KEY_CODES.F1,\n  KEY_CODES.F2,\n  KEY_CODES.F3,\n  KEY_CODES.F4,\n  KEY_CODES.F5,\n  KEY_CODES.F6,\n  KEY_CODES.F7,\n  KEY_CODES.F8,\n  KEY_CODES.F9,\n  KEY_CODES.F10,\n  KEY_CODES.F11,\n  KEY_CODES.F12,\n  KEY_CODES.F13,\n  KEY_CODES.F14,\n  KEY_CODES.F15,\n  KEY_CODES.F16,\n  KEY_CODES.F17,\n  KEY_CODES.F18,\n  KEY_CODES.F19,\n  KEY_CODES.HOME,\n  KEY_CODES.INSERT,\n  KEY_CODES.MEDIA_NEXT,\n  KEY_CODES.MEDIA_PLAY_PAUSE,\n  KEY_CODES.MEDIA_PREV,\n  KEY_CODES.MEDIA_STOP,\n  KEY_CODES.NULL,\n  KEY_CODES.NUM_LOCK,\n  KEY_CODES.PAGE_DOWN,\n  KEY_CODES.PAGE_UP,\n  KEY_CODES.PAUSE,\n  KEY_CODES.SCROLL_LOCK,\n  KEY_CODES.SHIFT,\n  KEY_CODES.TAB,\n];\n\n/**\n * Returns true if keyCode represents a printable character.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isPrintableChar(keyCode) {\n  return ((keyCode === 32) || // space\n      (keyCode >= 48 && keyCode <= 57) || // 0-9\n      (keyCode >= 96 && keyCode <= 111) || // numpad\n      (keyCode >= 186 && keyCode <= 192) || // ;=,-./`\n      (keyCode >= 219 && keyCode <= 222) || // []{}\\|\"'\n      keyCode >= 226 || // special chars (229 for Asian chars)\n      (keyCode >= 65 && keyCode <= 90)); // a-z\n}\n\n/**\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isFunctionKey(keyCode) {\n  return FUNCTION_KEYS.includes(keyCode);\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. Depends on what OS the code runs it check key code based on\n * different meta key codes.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isCtrlKey(keyCode) {\n  const keys = [];\n\n  if (isMacOS()) {\n    keys.push(KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX);\n  } else {\n    keys.push(KEY_CODES.CONTROL);\n  }\n\n  return keys.includes(keyCode);\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. This helper checks if the key code matches to meta keys\n * regardless of the OS on which it is running.\n *\n * @param {number} keyCode The keyboard key code.\n * @returns {boolean}\n */\nexport function isCtrlMetaKey(keyCode) {\n  return [\n    KEY_CODES.CONTROL,\n    KEY_CODES.COMMAND_LEFT,\n    KEY_CODES.COMMAND_RIGHT,\n    KEY_CODES.COMMAND_FIREFOX\n  ].includes(keyCode);\n}\n\n/**\n * @param {number} keyCode The keyboard key code.\n * @param {string} baseCode The list of the key codes to compare with.\n * @returns {boolean}\n */\nexport function isKey(keyCode, baseCode) {\n  const keys = baseCode.split('|');\n  let result = false;\n\n  arrayEach(keys, (key) => {\n    if (keyCode === KEY_CODES[key]) {\n      result = true;\n\n      return false;\n    }\n  });\n\n  return result;\n}\n","/**\n * Prevent other listeners of the same event from being called.\n *\n * @param {Event} event The mouse event object.\n */\nexport function stopImmediatePropagation(event) {\n  event.isImmediatePropagationEnabled = false;\n  event.cancelBubble = true;\n}\n\n/**\n * Check if event was stopped by `stopImmediatePropagation`.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\nexport function isImmediatePropagationStopped(event) {\n  return event.isImmediatePropagationEnabled === false;\n}\n\n/**\n * Check if provided event was triggered by clicking the right mouse button.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\nexport function isRightClick(event) {\n  return event.button === 2;\n}\n\n/**\n * Check if provided event was triggered by clicking the left mouse button.\n *\n * @param {Event} event The mouse event object.\n * @returns {boolean}\n */\nexport function isLeftClick(event) {\n  return event.button === 0;\n}\n\n/**\n * Check if the provided event is a touch event.\n *\n * @param {Event} event The event object.\n * @returns {boolean}\n */\nexport function isTouchEvent(event) {\n  return event instanceof TouchEvent;\n}\n\n/**\n * Calculates the event offset until reaching the element defined by `relativeElement` argument.\n *\n * @param {Event} event The mouse event object.\n * @param {HTMLElement|undefined} [untilElement] The element to which the offset will be calculated.\n * @returns {{ x: number, y: number }}\n */\nexport function offsetRelativeTo(event, untilElement) {\n  const offset = {\n    x: event.offsetX,\n    y: event.offsetY,\n  };\n  let element = event.target;\n\n  if (!(untilElement instanceof HTMLElement) ||\n      element !== untilElement && element.contains(untilElement)) {\n    return offset;\n  }\n\n  while (element !== untilElement) {\n    offset.x += element.offsetLeft;\n    offset.y += element.offsetTop;\n\n    element = element.offsetParent;\n  }\n\n  return offset;\n}\n","/**\n * Utility to register editors and common namespace for keeping reference to all editor classes.\n */\nimport Hooks from '../pluginHooks';\nimport staticRegister from '../utils/staticRegister';\n\nconst registeredEditorClasses = new WeakMap();\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('editors');\n\n/**\n * @param {BaseEditor} editorClass The editor constructor.\n */\nexport function RegisteredEditor(editorClass) {\n  const instances = {};\n  const Clazz = editorClass;\n\n  this.getConstructor = function() {\n    return editorClass;\n  };\n\n  this.getInstance = function(hotInstance) {\n    if (!(hotInstance.guid in instances)) {\n      instances[hotInstance.guid] = new Clazz(hotInstance);\n    }\n\n    return instances[hotInstance.guid];\n  };\n\n  Hooks.getSingleton().add('afterDestroy', function() {\n    instances[this.guid] = null;\n  });\n}\n\n/**\n * Returns instance (singleton) of editor class.\n *\n * @param {string} name Name of an editor under which it has been stored.\n * @param {object} hotInstance Instance of Handsontable.\n * @returns {Function} Returns instance of editor.\n */\nexport function _getEditorInstance(name, hotInstance) {\n  let editor;\n\n  if (typeof name === 'function') {\n    if (!(registeredEditorClasses.get(name))) {\n      _register(null, name);\n    }\n    editor = registeredEditorClasses.get(name);\n\n  } else if (typeof name === 'string') {\n    editor = getItem(name);\n\n  } else {\n    throw Error('Only strings and functions can be passed as \"editor\" parameter');\n  }\n\n  if (!editor) {\n    throw Error(`No editor registered under name \"${name}\"`);\n  }\n\n  return editor.getInstance(hotInstance);\n}\n\n/**\n * Retrieve editor class.\n *\n * @param {string} name Editor identification.\n * @returns {Function} Returns editor class.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error(`No registered editor found under \"${name}\" name`);\n  }\n\n  return getItem(name).getConstructor();\n}\n\n/**\n * Register editor class under specified name.\n *\n * @param {string} name Editor identification.\n * @param {Function} editorClass Editor class.\n */\nfunction _register(name, editorClass) {\n  if (name && typeof name !== 'string') {\n    editorClass = name;\n    name = editorClass.EDITOR_TYPE;\n  }\n\n  const editorWrapper = new RegisteredEditor(editorClass);\n\n  if (typeof name === 'string') {\n    register(name, editorWrapper);\n  }\n  registeredEditorClasses.set(editorClass, editorWrapper);\n}\n\nexport {\n  _register as registerEditor,\n  _getItem as getEditor,\n  _getEditorInstance as getEditorInstance,\n  hasItem as hasEditor,\n  getNames as getRegisteredEditorNames,\n  getValues as getRegisteredEditors,\n};\n","import { arrayEach } from './helpers/array';\nimport { objectEach } from './helpers/object';\nimport { substitute } from './helpers/string';\nimport { warn } from './helpers/console';\nimport { toSingleLine } from './helpers/templateLiteralTag';\nimport { fastCall } from './helpers/function';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n *\n * ::: only-for javascript\n * Handsontable events are the common interface that function in 2 ways: as __callbacks__ and as __hooks__.\n * :::\n *\n * ::: only-for react\n * This page lists all the **Handsontable hooks** – callbacks that let you react before or after an action occurs.\n *\n * Read more on the [Events and hooks](@/guides/getting-started/events-and-hooks/events-and-hooks.md) page.\n * :::\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * // using events as callbacks\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   afterChange: function(changes, source) {\n *     $.ajax({\n *       url: \"save.php',\n *       data: change\n *     });\n *   }\n * });\n * ...\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   afterChange={(changes, source) => {\n *     fetch('save.php', {\n *       method: 'POST',\n *       headers: {\n *         'Accept': 'application/json',\n *         'Content-Type': 'application/json'\n *       },\n *       body: JSON.stringify(changes)\n *     });\n *   }}\n * />\n * :::\n *\n * ::: only-for javascript\n * ```js\n * // using events as plugin hooks\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   myPlugin: true\n * });\n *\n * const hot2 = new Handsontable(document.getElementById('example2'), {\n *   myPlugin: false\n * });\n *\n * // global hook\n * Handsontable.hooks.add('afterChange', function() {\n *   // Fired twice - for hot1 and hot2\n *   if (this.getSettings().myPlugin) {\n *     // function body - will only run for hot1\n *   }\n * });\n *\n * // local hook (has same effect as a callback)\n * hot2.addHook('afterChange', function() {\n *   // function body - will only run in #example2\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef1 = useRef(null);\n * const hotRef2 = useRef(null);\n *\n * // Using events as plugin hooks:\n * ...\n *\n * <HotTable\n *   ref={hotRef1}\n *   myPlugin={true}\n * });\n *\n * <HotTable\n *   ref={hotRef2}\n *   myPlugin={false}\n * });\n *\n * ...\n *\n * const hot2 = hotRef2.current.hotInstance;\n * // local hook (has same effect as a callback)\n * hot2.addHook('afterChange', function() {\n *   // function body - will only run in #example2\n * });\n *\n * // global hook\n * Handsontable.hooks.add('afterChange', function() {\n *   // Fired twice - for hot1 and hot2\n *   if (this.getSettings().myPlugin) {\n *     // function body - will only run for first instance\n *   }\n * });\n * :::\n * ...\n */\n\n// @TODO: Move plugin description hooks to plugin?\nconst REGISTERED_HOOKS = [\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Fired after resetting a cell's meta. This happens when the {@link Core#updateSettings} method is called.\n   *\n   * @event Hooks#afterCellMetaReset\n   */\n  'afterCellMetaReset',\n\n  /**\n   * Fired after one or more cells has been changed. The changes are triggered in any situation when the\n   * value is entered using an editor or changed using API (e.q [`setDataAtCell`](@/api/core.md#setdataatcell) method).\n   *\n   * __Note:__ For performance reasons, the `changes` array is null for `\"loadData\"` source.\n   *\n   * @event Hooks#afterChange\n   * @param {Array[]} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`. `row` is a visual row index.\n   * @param {string} [source] String that identifies source of hook call ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   afterChange: (changes) => {\n   *     changes?.forEach(([row, prop, oldValue, newValue]) => {\n   *       // Some logic...\n   *     });\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterChange={(changes, source) => {\n   *     changes?.forEach(([row, prop, oldValue, newValue]) => {\n   *       // Some logic...\n   *     });\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterChange',\n\n  /**\n   * Fired each time user opens {@link ContextMenu} and after setting up the Context Menu's default options. These options are a collection\n   * which user can select by setting an array of keys or an array of objects in {@link Options#contextMenu} option.\n   *\n   * @event Hooks#afterContextMenuDefaultOptions\n   * @param {Array} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n   */\n  'afterContextMenuDefaultOptions',\n\n  /**\n   * Fired each time user opens {@link ContextMenu} plugin before setting up the Context Menu's items but after filtering these options by\n   * user ([`contextMenu`](@/api/options.md#contextmenu) option). This hook can by helpful to determine if user use specified menu item or to set up\n   * one of the menu item to by always visible.\n   *\n   * @event Hooks#beforeContextMenuSetItems\n   * @param {object[]} menuItems An array of objects containing information about to generated Context Menu items.\n   */\n  'beforeContextMenuSetItems',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin after setting up the Dropdown Menu's default options. These options are a\n   * collection which user can select by setting an array of keys or an array of objects in {@link Options#dropdownMenu}\n   * option.\n   *\n   * @event Hooks#afterDropdownMenuDefaultOptions\n   * @param {object[]} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n   */\n  'afterDropdownMenuDefaultOptions',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin before setting up the Dropdown Menu's items but after filtering these options\n   * by user ([`dropdownMenu`](@/api/options.md#dropdownmenu) option). This hook can by helpful to determine if user use specified menu item or to set\n   * up one of the menu item to by always visible.\n   *\n   * @event Hooks#beforeDropdownMenuSetItems\n   * @param {object[]} menuItems An array of objects containing information about to generated Dropdown Menu items.\n   */\n  'beforeDropdownMenuSetItems',\n\n  /**\n   * Fired by {@link ContextMenu} plugin after hiding the Context Menu. This hook is fired when {@link Options#contextMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterContextMenuHide\n   * @param {object} context The Context Menu plugin instance.\n   */\n  'afterContextMenuHide',\n\n  /**\n   * Fired by {@link ContextMenu} plugin before opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n   * option is enabled.\n   *\n   * @event Hooks#beforeContextMenuShow\n   * @param {object} context The Context Menu instance.\n   */\n  'beforeContextMenuShow',\n\n  /**\n   * Fired by {@link ContextMenu} plugin after opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterContextMenuShow\n   * @param {object} context The Context Menu plugin instance.\n   */\n  'afterContextMenuShow',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after reaching the copy limit while copying data. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#afterCopyLimit\n   * @param {number} selectedRows Count of selected copyable rows.\n   * @param {number} selectedColumns Count of selected copyable columns.\n   * @param {number} copyRowsLimit Current copy rows limit.\n   * @param {number} copyColumnsLimit Current copy columns limit.\n   */\n  'afterCopyLimit',\n\n  /**\n   * Fired before created a new column.\n   *\n   * @event Hooks#beforeCreateCol\n   * @param {number} index Represents the visual index of first newly created column in the data source array.\n   * @param {number} amount Number of newly created columns in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*} If `false` then creating columns is cancelled.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // Return `false` to cancel column inserting.\n   * new Handsontable(element, {\n   *   beforeCreateCol: function(data, coords) {\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // Return `false` to cancel column inserting.\n   * <HotTable\n   *   beforeCreateCol={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeCreateCol',\n\n  /**\n   * Fired after the order of columns has changed.\n   * This hook is fired by changing column indexes of any type supported by the {@link IndexMapper}.\n   *\n   * @event Hooks#afterColumnSequenceChange\n   * @param {'init'|'remove'|'insert'|'move'|'update'} [source] A string that indicates what caused the change to the order of columns.\n   */\n  'afterColumnSequenceChange',\n\n  /**\n   * Fired after created a new column.\n   *\n   * @event Hooks#afterCreateCol\n   * @param {number} index Represents the visual index of first newly created column in the data source.\n   * @param {number} amount Number of newly created columns in the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterCreateCol',\n\n  /**\n   * Fired before created a new row.\n   *\n   * @event Hooks#beforeCreateRow\n   * @param {number} index Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeCreateRow',\n\n  /**\n   * Fired after created a new row.\n   *\n   * @event Hooks#afterCreateRow\n   * @param {number} index Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterCreateRow',\n\n  /**\n   * Fired after all selected cells are deselected.\n   *\n   * @event Hooks#afterDeselect\n   */\n  'afterDeselect',\n\n  /**\n   * Fired after destroying the Handsontable instance.\n   *\n   * @event Hooks#afterDestroy\n   */\n  'afterDestroy',\n\n  /**\n   * Hook fired after `keydown` event is handled.\n   *\n   * @event Hooks#afterDocumentKeyDown\n   * @param {Event} event A native `keydown` event object.\n   */\n  'afterDocumentKeyDown',\n\n  /**\n   * Fired inside the Walkontable's selection `draw` method. Can be used to add additional class names to cells, depending on the current selection.\n   *\n   * @event Hooks#afterDrawSelection\n   * @param {number} currentRow Row index of the currently processed cell.\n   * @param {number} currentColumn Column index of the currently cell.\n   * @param {number[]} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n   * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n   * @since 0.38.1\n   * @returns {string|undefined} Can return a `String`, which will act as an additional `className` to be added to the currently processed cell.\n   */\n  'afterDrawSelection',\n\n  /**\n   * Fired inside the Walkontable's `refreshSelections` method. Can be used to remove additional class names from all cells in the table.\n   *\n   * @event Hooks#beforeRemoveCellClassNames\n   * @since 0.38.1\n   * @returns {string[]|undefined} Can return an `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n   */\n  'beforeRemoveCellClassNames',\n\n  /**\n   * Fired after getting the cell settings.\n   *\n   * @event Hooks#afterGetCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell properties.\n   */\n  'afterGetCellMeta',\n\n  /**\n   * Fired after retrieving information about a column header and appending it to the table header.\n   *\n   * @event Hooks#afterGetColHeader\n   * @param {number} column Visual column index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   * @param {number} [headerLevel=0] (Since 12.2.0) Header level index. Accepts positive (0 to n)\n   *                                 and negative (-1 to -n) values. For positive values, 0 points to the\n   *                                 topmost header. For negative values, -1 points to the bottom-most\n   *                                 header (the header closest to the cells).\n   */\n  'afterGetColHeader',\n\n  /**\n   * Fired after retrieving information about a row header and appending it to the table header.\n   *\n   * @event Hooks#afterGetRowHeader\n   * @param {number} row Visual row index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   */\n  'afterGetRowHeader',\n\n  /**\n   * Fired after the Handsontable instance is initiated.\n   *\n   * @event Hooks#afterInit\n   */\n  'afterInit',\n\n  /**\n   * Fired after Handsontable's [`data`](@/api/options.md#data)\n   * gets modified by the [`loadData()`](@/api/core.md#loaddata) method\n   * or the [`updateSettings()`](@/api/core.md#updatesettings) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#afterLoadData\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   */\n  'afterLoadData',\n\n  /**\n   * Fired after the [`updateData()`](@/api/core.md#updatedata) method\n   * modifies Handsontable's [`data`](@/api/options.md#data).\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#afterUpdateData\n   * @since 11.1.0\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   */\n  'afterUpdateData',\n\n  /**\n   * Fired after a scroll event, which is identified as a momentum scroll (e.g. on an iPad).\n   *\n   * @event Hooks#afterMomentumScroll\n   */\n  'afterMomentumScroll',\n\n  /**\n   * Fired after a `mousedown` event is triggered on the cell corner (the drag handle).\n   *\n   * @event Hooks#afterOnCellCornerMouseDown\n   * @param {Event} event `mousedown` event object.\n   */\n  'afterOnCellCornerMouseDown',\n\n  /**\n   * Fired after a `dblclick` event is triggered on the cell corner (the drag handle).\n   *\n   * @event Hooks#afterOnCellCornerDblClick\n   * @param {Event} event `dblclick` event object.\n   */\n  'afterOnCellCornerDblClick',\n\n  /**\n   * Fired after clicking on a cell or row/column header. In case the row/column header was clicked, the coordinate\n   * indexes are negative.\n   *\n   * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseDown` called\n   * with coordinates `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellMouseDown\n   * @param {Event} event `mousedown` event object.\n   * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseDown',\n\n  /**\n   * Fired after clicking on a cell or row/column header. In case the row/column header was clicked, the coordinate\n   * indexes are negative.\n   *\n   * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseUp` called\n   * with coordinates `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellMouseUp\n   * @param {Event} event `mouseup` event object.\n   * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseUp',\n\n  /**\n   * Fired after clicking right mouse button on a cell or row/column header.\n   *\n   * For example clicking on the row header of cell (0, 0) results with `afterOnCellContextMenu` called\n   * with coordinates `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellContextMenu\n   * @since 4.1.0\n   * @param {Event} event `contextmenu` event object.\n   * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellContextMenu',\n\n  /**\n   * Fired after hovering a cell or row/column header with the mouse cursor. In case the row/column header was\n   * hovered, the index is negative.\n   *\n   * For example, hovering over the row header of cell (0, 0) results with `afterOnCellMouseOver` called\n   * with coords `{row: 0, col: -1}`.\n   *\n   * @event Hooks#afterOnCellMouseOver\n   * @param {Event} event `mouseover` event object.\n   * @param {CellCoords} coords Hovered cell's visual coordinate object.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseOver',\n\n  /**\n   * Fired after leaving a cell or row/column header with the mouse cursor.\n   *\n   * @event Hooks#afterOnCellMouseOut\n   * @param {Event} event `mouseout` event object.\n   * @param {CellCoords} coords Leaved cell's visual coordinate object.\n   * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n   */\n  'afterOnCellMouseOut',\n\n  /**\n   * Fired after one or more columns are removed.\n   *\n   * @event Hooks#afterRemoveCol\n   * @param {number} index Visual index of starter column.\n   * @param {number} amount An amount of removed columns.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterRemoveCol',\n\n  /**\n   * Fired after one or more rows are removed.\n   *\n   * @event Hooks#afterRemoveRow\n   * @param {number} index Visual index of starter row.\n   * @param {number} amount An amount of removed rows.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterRemoveRow',\n\n  /**\n   * Fired before starting rendering the cell.\n   *\n   * @event Hooks#beforeRenderer\n   * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n   * @param {*} value Value of the rendered cell.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  'beforeRenderer',\n\n  /**\n   * Fired after finishing rendering the cell (after the renderer finishes).\n   *\n   * @event Hooks#afterRenderer\n   * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n   * @param {*} value Value of the rendered cell.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  'afterRenderer',\n\n  /**\n   * Fired after the order of rows has changed.\n   * This hook is fired by changing row indexes of any type supported by the {@link IndexMapper}.\n   *\n   * @event Hooks#afterRowSequenceChange\n   * @param {'init'|'remove'|'insert'|'move'|'update'} [source] A string that indicates what caused the change to the order of rows.\n   */\n  'afterRowSequenceChange',\n\n  /**\n   * Fired before the vertical viewport scroll. Triggered by the [`scrollViewportTo()`](@/api/core.md#scrollviewportto)\n   * method or table internals.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeViewportScrollVertically\n   * @param {number} visualRow Visual row index.\n   * @returns {number | boolean} Returns modified row index (or the same as passed in the method argument) to which\n   * the viewport will be scrolled. If the returned value is `false`, the scrolling will be canceled.\n   */\n  'beforeViewportScrollVertically',\n\n  /**\n   * Fired before the horizontal viewport scroll. Triggered by the [`scrollViewportTo()`](@/api/core.md#scrollviewportto)\n   * method or table internals.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeViewportScrollHorizontally\n   * @param {number} visualColumn Visual column index.\n   * @returns {number | boolean} Returns modified column index (or the same as passed in the method argument) to which\n   * the viewport will be scrolled. If the returned value is `false`, the scrolling will be canceled.\n   */\n  'beforeViewportScrollHorizontally',\n\n  /**\n   * Fired before the vertical or horizontal viewport scroll. Triggered by the [`scrollViewportTo()`](@/api/core.md#scrollviewportto)\n   * method or table internals.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeViewportScroll\n   */\n  'beforeViewportScroll',\n\n  /**\n   * Fired after the horizontal scroll event.\n   *\n   * @event Hooks#afterScrollHorizontally\n   */\n  'afterScrollHorizontally',\n\n  /**\n   * Fired after the vertical scroll event.\n   *\n   * @event Hooks#afterScrollVertically\n   */\n  'afterScrollVertically',\n\n  /**\n   * Fired after the vertical or horizontal scroll event.\n   *\n   * @since 14.0.0\n   * @event Hooks#afterScroll\n   */\n  'afterScroll',\n\n  /**\n   * Fired after one or more cells are selected (e.g. during mouse move).\n   *\n   * @event Hooks#afterSelection\n   * @param {number} row Selection start visual row index.\n   * @param {number} column Selection start visual column index.\n   * @param {number} row2 Selection end visual row index.\n   * @param {number} column2 Selection end visual column index.\n   * @param {object} preventScrolling A reference to the observable object with the `value` property.\n   *                                  Property `preventScrolling.value` expects a boolean value that\n   *                                  Handsontable uses to control scroll behavior after selection.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   afterSelection: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // If set to `false` (default): when cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to cell selection's end corner.\n   *     // If set to `true`: when cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll to cell selection's end corner.\n   *     preventScrolling.value = true;\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterSelection={(row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // If set to `false` (default): when cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to cell selection's end corner.\n   *     // If set to `true`: when cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll to cell selection's end corner.\n   *     preventScrolling.value = true;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterSelection',\n\n  /**\n   * Fired after one or more cells are selected.\n   *\n   * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n   *\n   * @event Hooks#afterSelectionByProp\n   * @param {number} row Selection start visual row index.\n   * @param {string} prop Selection start data source object property name.\n   * @param {number} row2 Selection end visual row index.\n   * @param {string} prop2 Selection end data source object property name.\n   * @param {object} preventScrolling A reference to the observable object with the `value` property.\n   *                                  Property `preventScrolling.value` expects a boolean value that\n   *                                  Handsontable uses to control scroll behavior after selection.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   * @example\n   * ```js\n   * ::: only-for javascript\n   * new Handsontable(element, {\n   *   afterSelectionByProp: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // setting if prevent scrolling after selection\n   *     preventScrolling.value = true;\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterSelectionByProp={(row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n   *     // setting if prevent scrolling after selection\n   *     preventScrolling.value = true;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterSelectionByProp',\n\n  /**\n   * Fired after one or more cells are selected (e.g. on mouse up).\n   *\n   * @event Hooks#afterSelectionEnd\n   * @param {number} row Selection start visual row index.\n   * @param {number} column Selection start visual column index.\n   * @param {number} row2 Selection end visual row index.\n   * @param {number} column2 Selection end visual column index.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   */\n  'afterSelectionEnd',\n\n  /**\n   * Fired after one or more cells are selected (e.g. on mouse up).\n   *\n   * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n   *\n   * @event Hooks#afterSelectionEndByProp\n   * @param {number} row Selection start visual row index.\n   * @param {string} prop Selection start data source object property index.\n   * @param {number} row2 Selection end visual row index.\n   * @param {string} prop2 Selection end data source object property index.\n   * @param {number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n   */\n  'afterSelectionEndByProp',\n\n  /**\n   * Fired after the focus position within a selected range is changed.\n   *\n   * @since 14.3.0\n   * @event Hooks#afterSelectionFocusSet\n   * @param {number} row The focus visual row index position.\n   * @param {number} column The focus visual column index position.\n   * @param {object} preventScrolling A reference to the observable object with the `value` property.\n   *                                  Property `preventScrolling.value` expects a boolean value that\n   *                                  Handsontable uses to control scroll behavior after selection.\n   * @example\n   * ```js\n   * ::: only-for javascript\n   * new Handsontable(element, {\n   *   afterSelectionFocusSet: (row, column, preventScrolling) => {\n   *     // If set to `false` (default): when focused cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to that cell.\n   *     // If set to `true`: when focused cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll the viewport.\n   *     preventScrolling.value = true;\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   afterSelectionFocusSet={(row, column, preventScrolling) => {\n   *     // If set to `false` (default): when focused cell selection is outside the viewport,\n   *     // Handsontable scrolls the viewport to that cell.\n   *     // If set to `true`: when focused cell selection is outside the viewport,\n   *     // Handsontable doesn't scroll the viewport.\n   *     preventScrolling.value = true;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'afterSelectionFocusSet',\n\n  /**\n   * Fired before one or more columns are selected (e.g. During mouse header click or {@link Core#selectColumns} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeSelectColumns\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   beforeSelectColumns: (from, to, highlight) => {\n   *     // Extend the column selection by one column left and one column right.\n   *     from.col = Math.max(from.col - 1, 0);\n   *     to.col = Math.min(to.col + 1, this.countCols() - 1);\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   beforeSelectColumns={(from, to, highlight) => {\n   *     // Extend the column selection by one column left and one column right.\n   *     from.col = Math.max(from.col - 1, 0);\n   *     to.col = Math.min(to.col + 1, this.countCols() - 1);\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeSelectColumns',\n\n  /**\n   * Fired after one or more columns are selected (e.g. during mouse header click or {@link Core#selectColumns} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#afterSelectColumns\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   */\n  'afterSelectColumns',\n\n  /**\n   * Fired before one or more rows are selected (e.g. during mouse header click or {@link Core#selectRows} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeSelectRows\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * new Handsontable(element, {\n   *   beforeSelectRows: (from, to, highlight) => {\n   *     // Extend the row selection by one row up and one row bottom more.\n   *     from.row = Math.max(from.row - 1, 0);\n   *     to.row = Math.min(to.row + 1, this.countRows() - 1);\n   *   }\n   * })\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * <HotTable\n   *   beforeSelectRows={(from, to, highlight) => {\n   *     // Extend the row selection by one row up and one row bottom more.\n   *     from.row = Math.max(from.row - 1, 0);\n   *     to.row = Math.min(to.row + 1, this.countRows() - 1);\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeSelectRows',\n\n  /**\n   * Fired after one or more rows are selected (e.g. during mouse header click or {@link Core#selectRows} API call).\n   *\n   * @since 14.0.0\n   * @event Hooks#afterSelectRows\n   * @param {CellCoords} from Selection start coords object.\n   * @param {CellCoords} to Selection end coords object.\n   * @param {CellCoords} highlight Selection cell focus coords object.\n   */\n  'afterSelectRows',\n\n  /**\n   * Fired after cell meta is changed.\n   *\n   * @event Hooks#afterSetCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The updated meta key.\n   * @param {*} value The updated meta value.\n   */\n  'afterSetCellMeta',\n\n  /**\n   * Fired after cell meta is removed.\n   *\n   * @event Hooks#afterRemoveCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The removed meta key.\n   * @param {*} value Value which was under removed key of cell meta.\n   */\n  'afterRemoveCellMeta',\n\n  /**\n   * Fired after cell data was changed.\n   *\n   * @event Hooks#afterSetDataAtCell\n   * @param {Array} changes An array of changes in format `[[row, column, oldValue, value], ...]`.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterSetDataAtCell',\n\n  /**\n   * Fired after cell data was changed.\n   * Called only when [`setDataAtRowProp`](@/api/core.md#setdataatrowprop) was executed.\n   *\n   * @event Hooks#afterSetDataAtRowProp\n   * @param {Array} changes An array of changes in format `[[row, prop, oldValue, value], ...]`.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'afterSetDataAtRowProp',\n\n  /**\n   * Fired after cell source data was changed.\n   *\n   * @event Hooks#afterSetSourceDataAtCell\n   * @since 8.0.0\n   * @param {Array} changes An array of changes in format `[[row, column, oldValue, value], ...]`.\n   * @param {string} [source] String that identifies source of hook call.\n   */\n  'afterSetSourceDataAtCell',\n\n  /**\n   * Fired after calling the [`updateSettings`](@/api/core.md#updatesettings) method.\n   *\n   * @event Hooks#afterUpdateSettings\n   * @param {object} newSettings New settings object.\n   */\n  'afterUpdateSettings',\n\n  /**\n   * @description\n   * A plugin hook executed after validator function, only if validator function is defined.\n   * Validation result is the first parameter. This can be used to determinate if validation passed successfully or not.\n   *\n   * __Returning false from the callback will mark the cell as invalid__.\n   *\n   * @event Hooks#afterValidate\n   * @param {boolean} isValid `true` if valid, `false` if not.\n   * @param {*} value The value in question.\n   * @param {number} row Visual row index.\n   * @param {string|number} prop Property name / visual column index.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {undefined | boolean} If `false` the cell will be marked as invalid, `true` otherwise.\n   */\n  'afterValidate',\n\n  /**\n   * Fired before successful change of language (when proper language code was set).\n   *\n   * @event Hooks#beforeLanguageChange\n   * @since 0.35.0\n   * @param {string} languageCode New language code.\n   */\n  'beforeLanguageChange',\n\n  /**\n   * Fired after successful change of language (when proper language code was set).\n   *\n   * @event Hooks#afterLanguageChange\n   * @since 0.35.0\n   * @param {string} languageCode New language code.\n   */\n  'afterLanguageChange',\n\n  /**\n   * Fired by {@link Autofill} plugin before populating the data in the autofill feature. This hook is fired when\n   * {@link Options#fillHandle} option is enabled.\n   *\n   * @event Hooks#beforeAutofill\n   * @param {Array[]} selectionData Data the autofill operation will start from.\n   * @param {CellRange} sourceRange The range values will be filled from.\n   * @param {CellRange} targetRange The range new values will be filled into.\n   * @param {string} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n   *\n   * @returns {boolean|Array[]} If false, the operation is cancelled. If array of arrays, the returned data\n   *                              will be passed into [`populateFromArray`](@/api/core.md#populatefromarray) instead of the default autofill\n   *                              algorithm's result.\n   */\n  'beforeAutofill',\n\n  /**\n   * Fired by {@link Autofill} plugin after populating the data in the autofill feature. This hook is fired when\n   * {@link Options#fillHandle} option is enabled.\n   *\n   * @event Hooks#afterAutofill\n   * @since 8.0.0\n   * @param {Array[]} fillData The data that was used to fill the `targetRange`. If `beforeAutofill` was used\n   *                            and returned `[[]]`, this will be the same object that was returned from `beforeAutofill`.\n   * @param {CellRange} sourceRange The range values will be filled from.\n   * @param {CellRange} targetRange The range new values will be filled into.\n   * @param {string} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n   */\n  'afterAutofill',\n\n  /**\n   * Fired before aligning the cell contents.\n   *\n   * @event Hooks#beforeCellAlignment\n   * @param {object} stateBefore An object with class names defining the cell alignment.\n   * @param {CellRange[]} range An array of `CellRange` coordinates where the alignment will be applied.\n   * @param {string} type Type of the alignment - either `horizontal` or `vertical`.\n   * @param {string} alignmentClass String defining the alignment class added to the cell.\n   * Possible values: `htLeft` , `htCenter`, `htRight`, `htJustify`, `htTop`, `htMiddle`, `htBottom`.\n   */\n  'beforeCellAlignment',\n\n  /**\n   * Fired before one or more cells are changed.\n   *\n   * Use this hook to silently alter the user's changes before Handsontable re-renders.\n   *\n   * To ignore the user's changes, use a nullified array or return `false`.\n   *\n   * @event Hooks#beforeChange\n   * @param {Array[]} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`. `row` is a visual row index.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {undefined | boolean} If `false` all changes were cancelled, `true` otherwise.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // to alter a single change, overwrite the value with `changes[i][3]`\n   * new Handsontable(element, {\n   *   beforeChange: (changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0][3] = 10;\n   *   }\n   * });\n   *\n   * // to ignore a single change, set `changes[i]` to `null`\n   * // or remove `changes[i]` from the array, by using `changes.splice(i, 1)`\n   * new Handsontable(element, {\n   *   beforeChange: (changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0] = null;\n   *   }\n   * });\n   *\n   * // to ignore all changes, return `false`\n   * // or set the array's length to 0, by using `changes.length = 0`\n   * new Handsontable(element, {\n   *   beforeChange: (changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // to alter a single change, overwrite the desired value with `changes[i][3]`\n   * <HotTable\n   *   beforeChange={(changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0][3] = 10;\n   *   }}\n   * />\n   *\n   * // to ignore a single change, set `changes[i]` to `null`\n   * // or remove `changes[i]` from the array, by using changes.splice(i, 1).\n   * <HotTable\n   *   beforeChange={(changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     changes[0] = null;\n   *   }}\n   * />\n   *\n   * // to ignore all changes, return `false`\n   * // or set the array's length to 0 (`changes.length = 0`)\n   * <HotTable\n   *   beforeChange={(changes, source) => {\n   *     // [[row, prop, oldVal, newVal], ...]\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeChange',\n\n  /**\n   * Fired right before rendering the changes.\n   *\n   * @event Hooks#beforeChangeRender\n   * @param {Array[]} changes Array in form of `[row, prop, oldValue, newValue]`.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'beforeChangeRender',\n\n  /**\n   * Fired before drawing the borders.\n   *\n   * @event Hooks#beforeDrawBorders\n   * @param {Array} corners Array specifying the current selection borders.\n   * @param {string} borderClassName Specifies the border class name.\n   */\n  'beforeDrawBorders',\n\n  /**\n   * Fired before getting cell settings.\n   *\n   * @event Hooks#beforeGetCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  'beforeGetCellMeta',\n\n  /**\n   * Fired before cell meta is removed.\n   *\n   * @event Hooks#beforeRemoveCellMeta\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The removed meta key.\n   * @param {*} value Value which is under removed key of cell meta.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRemoveCellMeta',\n\n  /**\n   * Fired before the Handsontable instance is initiated.\n   *\n   * @event Hooks#beforeInit\n   */\n  'beforeInit',\n\n  /**\n   * Fired before the Walkontable instance is initiated.\n   *\n   * @event Hooks#beforeInitWalkontable\n   * @param {object} walkontableConfig Walkontable configuration object.\n   */\n  'beforeInitWalkontable',\n\n  /**\n   * Fired before Handsontable's [`data`](@/api/options.md#data)\n   * gets modified by the [`loadData()`](@/api/core.md#loaddata) method\n   * or the [`updateSettings()`](@/api/core.md#updatesettings) method.\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#beforeLoadData\n   * @since 8.0.0\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   * @returns {Array} The returned array will be used as Handsontable's new dataset.\n   */\n  'beforeLoadData',\n\n  /**\n   * Fired before the [`updateData()`](@/api/core.md#updatedata) method\n   * modifies Handsontable's [`data`](@/api/options.md#data).\n   *\n   * Read more:\n   * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n   * - [Saving data](@/guides/getting-started/saving-data/saving-data.md)\n   *\n   * @event Hooks#beforeUpdateData\n   * @since 11.1.0\n   * @param {Array} sourceData An [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), or an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), that contains Handsontable's data\n   * @param {boolean} initialLoad A flag that indicates whether the data was loaded at Handsontable's initialization (`true`) or later (`false`)\n   * @param {string} source The source of the call\n   * @returns {Array} The returned array will be used as Handsontable's new dataset.\n   */\n  'beforeUpdateData',\n\n  /**\n   * Hook fired before `keydown` event is handled. It can be used to stop default key bindings.\n   *\n   * __Note__: To prevent default behavior you need to call `false` in your `beforeKeyDown` handler.\n   *\n   * @event Hooks#beforeKeyDown\n   * @param {Event} event Original DOM event.\n   */\n  'beforeKeyDown',\n\n  /**\n   * Fired after the user clicked a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellMouseDown\n   * @param {Event} event The `mousedown` event object.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  'beforeOnCellMouseDown',\n\n  /**\n   * Fired after the user clicked a cell.\n   *\n   * @event Hooks#beforeOnCellMouseUp\n   * @param {Event} event The `mouseup` event object.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   */\n  'beforeOnCellMouseUp',\n\n  /**\n   * Fired after the user clicked a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellContextMenu\n   * @since 4.1.0\n   * @param {Event} event The `contextmenu` event object.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   */\n  'beforeOnCellContextMenu',\n\n  /**\n   * Fired after the user moved cursor over a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellMouseOver\n   * @param {Event} event The `mouseover` event object.\n   * @param {CellCoords} coords CellCoords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  'beforeOnCellMouseOver',\n\n  /**\n   * Fired after the user moved cursor out from a cell, but before all the calculations related with it.\n   *\n   * @event Hooks#beforeOnCellMouseOut\n   * @param {Event} event The `mouseout` event object.\n   * @param {CellCoords} coords CellCoords object containing the visual coordinates of the leaved cell.\n   * @param {HTMLTableCellElement} TD TD element.\n   */\n  'beforeOnCellMouseOut',\n\n  /**\n   * Fired before one or more columns are about to be removed.\n   *\n   * @event Hooks#beforeRemoveCol\n   * @param {number} index Visual index of starter column.\n   * @param {number} amount Amount of columns to be removed.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRemoveCol',\n\n  /**\n   * Fired when one or more rows are about to be removed.\n   *\n   * @event Hooks#beforeRemoveRow\n   * @param {number} index Visual index of starter row.\n   * @param {number} amount Amount of rows to be removed.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRemoveRow',\n\n  /**\n   * Fired before Handsontable's view-rendering engine is rendered.\n   *\n   * __Note:__ In Handsontable 9.x and earlier, the `beforeViewRender` hook was named `beforeRender`.\n   *\n   * @event Hooks#beforeViewRender\n   * @since 10.0.0\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   * @param {object} skipRender Object with `skipRender` property, if it is set to `true ` the next rendering cycle will be skipped.\n   */\n  'beforeViewRender',\n\n  /**\n   * Fired after Handsontable's view-rendering engine is rendered,\n   * but before redrawing the selection borders and before scroll syncing.\n   *\n   * __Note:__ In Handsontable 9.x and earlier, the `afterViewRender` hook was named `afterRender`.\n   *\n   * @event Hooks#afterViewRender\n   * @since 10.0.0\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   */\n  'afterViewRender',\n\n  /**\n   * Fired before Handsontable's view-rendering engine updates the view.\n   *\n   * The `beforeRender` event is fired right after the Handsontable\n   * business logic is executed and right before the rendering engine starts calling\n   * the Core logic, renderers, cell meta objects etc. to update the view.\n   *\n   * @event Hooks#beforeRender\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   */\n  'beforeRender',\n\n  /**\n   * Fired after Handsontable's view-rendering engine updates the view.\n   *\n   * @event Hooks#afterRender\n   * @param {boolean} isForced If set to `true`, the rendering gets triggered by a change of settings, a change of\n   *                           data, or a logic that needs a full Handsontable render cycle.\n   *                           If set to `false`, the rendering gets triggered by scrolling or moving the selection.\n   */\n  'afterRender',\n\n  /**\n   * When the focus position is moved to the next or previous row caused by the {@link Options#autoWrapRow} option\n   * the hook is triggered.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeRowWrap\n   * @param {boolean} isWrapEnabled Tells whether the row wrapping is going to happen.\n   * There may be situations where the option does not work even though it is enabled.\n   * This is due to the priority of other options that may block the feature.\n   * For example, when the {@link Options#minSpareCols} is defined, the {@link Options#autoWrapRow} option is not checked.\n   * Thus, row wrapping is off.\n   * @param {CellCoords} newCoords The new focus position. It is an object with keys `row` and `col`, where a value of `-1` indicates a header.\n   * @param {boolean} isFlipped `true` if the row index was flipped, `false` otherwise.\n   * Flipped index means that the user reached the last row and the focus is moved to the first row or vice versa.\n   */\n  'beforeRowWrap',\n\n  /**\n   * When the focus position is moved to the next or previous column caused by the {@link Options#autoWrapCol} option\n   * the hook is triggered.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeColumnWrap\n   * @param {boolean} isWrapEnabled Tells whether the column wrapping is going to happen.\n   * There may be situations where the option does not work even though it is enabled.\n   * This is due to the priority of other options that may block the feature.\n   * For example, when the {@link Options#minSpareRows} is defined, the {@link Options#autoWrapCol} option is not checked.\n   * Thus, column wrapping is off.\n   * @param {CellCoords} newCoords The new focus position. It is an object with keys `row` and `col`, where a value of `-1` indicates a header.\n   * @param {boolean} isFlipped `true` if the column index was flipped, `false` otherwise.\n   * Flipped index means that the user reached the last column and the focus is moved to the first column or vice versa.\n   */\n  'beforeColumnWrap',\n\n  /**\n   * Fired before cell meta is changed.\n   *\n   * @event Hooks#beforeSetCellMeta\n   * @since 8.0.0\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} key The updated meta key.\n   * @param {*} value The updated meta value.\n   * @returns {boolean|undefined} If false is returned the action is canceled.\n   */\n  'beforeSetCellMeta',\n\n  /**\n   * Fired before setting focus selection.\n   *\n   * @since 14.3.0\n   * @event Hooks#beforeSelectionFocusSet\n   * @param {CellCoords} coords CellCoords instance.\n   */\n  'beforeSelectionFocusSet',\n\n  /**\n   * Fired before setting range is started but not finished yet.\n   *\n   * @event Hooks#beforeSetRangeStartOnly\n   * @param {CellCoords} coords `CellCoords` instance.\n   */\n  'beforeSetRangeStartOnly',\n\n  /**\n   * Fired before setting range is started.\n   *\n   * @event Hooks#beforeSetRangeStart\n   * @param {CellCoords} coords `CellCoords` instance.\n   */\n  'beforeSetRangeStart',\n\n  /**\n   * Fired before setting range is ended.\n   *\n   * @event Hooks#beforeSetRangeEnd\n   * @param {CellCoords} coords `CellCoords` instance.\n   */\n  'beforeSetRangeEnd',\n\n  /**\n   * Fired before applying selection coordinates to the renderable coordinates for Walkontable (rendering engine).\n   * It occurs even when cell coordinates remain unchanged and activates during cell selection and drag selection.\n   * The behavior of Shift+Tab differs from Arrow Left when there's no further movement possible.\n   *\n   * @since 14.0.0\n   * @event Hooks#beforeSelectionHighlightSet\n   */\n  'beforeSelectionHighlightSet',\n\n  /**\n   * Fired before the logic of handling a touch scroll, when user started scrolling on a touch-enabled device.\n   *\n   * @event Hooks#beforeTouchScroll\n   */\n  'beforeTouchScroll',\n\n  /**\n   * Fired before cell validation, only if validator function is defined. This can be used to manipulate the value\n   * of changed cell before it is applied to the validator function.\n   *\n   * __Note:__ this will not affect values of changes. This will change value *ONLY* for validation.\n   *\n   * @event Hooks#beforeValidate\n   * @param {*} value Value of the cell.\n   * @param {number} row Visual row index.\n   * @param {string|number} prop Property name / column index.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   */\n  'beforeValidate',\n\n  /**\n   * Fired before cell value is rendered into the DOM (through renderer function). This can be used to manipulate the\n   * value which is passed to the renderer without modifying the renderer itself.\n   *\n   * @event Hooks#beforeValueRender\n   * @param {*} value Cell value to render.\n   * @param {object} cellProperties An object containing the cell properties.\n   */\n  'beforeValueRender',\n\n  /**\n   * Fired after Handsontable instance is constructed (using `new` operator).\n   *\n   * @event Hooks#construct\n   */\n  'construct',\n\n  /**\n   * Fired after Handsontable instance is initiated but before table is rendered.\n   *\n   * @event Hooks#init\n   */\n  'init',\n\n  /**\n   * Fired when a column header index is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyColHeader\n   * @param {number} column Visual column header index.\n   */\n  'modifyColHeader',\n\n  /**\n   * Fired when a column width is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyColWidth\n   * @param {number} width Current column width.\n   * @param {number} column Visual column index.\n   */\n  'modifyColWidth',\n\n  /**\n   * Fired when rendering the list of values in the multiple-selection component of the Filters dropdown.\n   * The hook allows modifying the displayed values in that component.\n   *\n   * @since 14.2.0\n   * @event Hooks#modifyFiltersMultiSelectValue\n   * @param {object} item The item in the list of values.\n   * @param {object} meta The cell properties object.\n   */\n  'modifyFiltersMultiSelectValue',\n\n  /**\n   * Fired when focusing a cell or a header element. Allows replacing the element to be focused by returning a\n   * different HTML element.\n   *\n   * @since 14.0.0\n   * @event Hooks#modifyFocusedElement\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @param {HTMLElement|undefined} focusedElement The element to be focused. `null` for focusedElement is intended when focused cell is hidden.\n   */\n  'modifyFocusedElement',\n\n  /**\n   * Fired when a row header index is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyRowHeader\n   * @param {number} row Visual row header index.\n   */\n  'modifyRowHeader',\n\n  /**\n   * Fired when a row height is about to be modified by a callback function.\n   *\n   * @event Hooks#modifyRowHeight\n   * @param {number} height Row height.\n   * @param {number} row Visual row index.\n   */\n  'modifyRowHeight',\n\n  /**\n   * Fired when a row height is about to be modified by a callback function. The hook allows to change the row height\n   * for the specified overlay type.\n   *\n   * @since 14.5.0\n   * @event Hooks#modifyRowHeightByOverlayName\n   * @param {number} height Row height.\n   * @param {number} row Visual row index.\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName Overlay name.\n   */\n  'modifyRowHeightByOverlayName',\n\n  /**\n   * Fired when a data was retrieved or modified.\n   *\n   * @event Hooks#modifyData\n   * @param {number} row Physical row index.\n   * @param {number} column Visual column index.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  'modifyData',\n\n  /**\n   * Fired when a data was retrieved or modified from the source data set.\n   *\n   * @event Hooks#modifySourceData\n   * @since 8.0.0\n   * @param {number} row Physical row index.\n   * @param {number} column Physical column index or property name.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  'modifySourceData',\n\n  /**\n   * Fired when a data was retrieved or modified.\n   *\n   * @event Hooks#modifyRowData\n   * @param {number} row Physical row index.\n   */\n  'modifyRowData',\n\n  /**\n   * Used to modify the cell coordinates when using the [`getCell`](@/api/core.md#getcell) method, opening editor, getting value from the editor\n   * and saving values from the closed editor.\n   *\n   * @event Hooks#modifyGetCellCoords\n   * @since 0.36.0\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {boolean} topmost If set to `true`, it returns the TD element from the topmost overlay. For example,\n   *                          if the wanted cell is in the range of fixed rows, it will return a TD element\n   *                          from the `top` overlay.\n   * @returns {undefined|number[]}\n   */\n  'modifyGetCellCoords',\n\n  /**\n   * Used to modify the cell coordinates when the table is activated (going into the listen mode).\n   *\n   * @event Hooks#modifyFocusOnTabNavigation\n   * @since 14.0.0\n   * @param {'from_above' | 'from_below'} tabActivationDir The browsers Tab navigation direction. Depending on\n   * whether the user activated the table from the element above or below, another cell can be selected.\n   * @param {CellCoords} visualCoords The coords that will be used to select a cell.\n   */\n  'modifyFocusOnTabNavigation',\n\n  /**\n   * Allows modify the visual row index that is used to retrieve the row header element (TH) before it's\n   * highlighted (proper CSS class names are added). Modifying the visual row index allows building a custom\n   * implementation of the nested headers feature or other features that require highlighting other DOM\n   * elements than that the rendering engine, by default, would have highlighted.\n   *\n   * @event Hooks#beforeHighlightingRowHeader\n   * @since 8.4.0\n   * @param {number} row Visual row index.\n   * @param {number} headerLevel Column header level (0 = most distant to the table).\n   * @param {object} highlightMeta An object that contains additional information about processed selection.\n   * @returns {number|undefined}\n   */\n  'beforeHighlightingRowHeader',\n\n  /**\n   * Allows modify the visual column index that is used to retrieve the column header element (TH) before it's\n   * highlighted (proper CSS class names are added). Modifying the visual column index allows building a custom\n   * implementation of the nested headers feature or other features that require highlighting other DOM\n   * elements than that the rendering engine, by default, would have highlighted.\n   *\n   * @event Hooks#beforeHighlightingColumnHeader\n   * @since 8.4.0\n   * @param {number} column Visual column index.\n   * @param {number} headerLevel Row header level (0 = most distant to the table).\n   * @param {object} highlightMeta An object that contains additional information about processed selection.\n   * @returns {number|undefined}\n   */\n  'beforeHighlightingColumnHeader',\n\n  /**\n   * Fired by {@link PersistentState} plugin, after loading value, saved under given key, from browser local storage.\n   *\n   * The `persistentStateLoad` hook is fired even when the {@link Options#persistentState} option is disabled.\n   *\n   * @event Hooks#persistentStateLoad\n   * @param {string} key Key.\n   * @param {object} valuePlaceholder Object containing the loaded value under `valuePlaceholder.value` (if no value have been saved, `value` key will be undefined).\n   */\n  'persistentStateLoad',\n\n  /**\n   * Fired by {@link PersistentState} plugin after resetting data from local storage. If no key is given, all values associated with table will be cleared.\n   * This hook is fired when {@link Options#persistentState} option is enabled.\n   *\n   * @event Hooks#persistentStateReset\n   * @param {string} [key] Key.\n   */\n  'persistentStateReset',\n\n  /**\n   * Fired by {@link PersistentState} plugin, after saving value under given key in browser local storage.\n   *\n   * The `persistentStateSave` hook is fired even when the {@link Options#persistentState} option is disabled.\n   *\n   * @event Hooks#persistentStateSave\n   * @param {string} key Key.\n   * @param {Mixed} value Value to save.\n   */\n  'persistentStateSave',\n\n  /**\n   * Fired by {@link ColumnSorting} and {@link MultiColumnSorting} plugins before sorting the column. If you return `false` value inside callback for hook, then sorting\n   * will be not applied by the Handsontable (useful for server-side sorting).\n   *\n   * This hook is fired when {@link Options#columnSorting} or {@link Options#multiColumnSorting} option is enabled.\n   *\n   * @event Hooks#beforeColumnSort\n   * @param {Array} currentSortConfig Current sort configuration (for all sorted columns).\n   * @param {Array} destinationSortConfigs Destination sort configuration (for all sorted columns).\n   * @returns {boolean | undefined} If `false` the column will not be sorted, `true` otherwise.\n   */\n  'beforeColumnSort',\n\n  /**\n   * Fired by {@link ColumnSorting} and {@link MultiColumnSorting} plugins after sorting the column. This hook is fired when {@link Options#columnSorting}\n   * or {@link Options#multiColumnSorting} option is enabled.\n   *\n   * @event Hooks#afterColumnSort\n   * @param {Array} currentSortConfig Current sort configuration (for all sorted columns).\n   * @param {Array} destinationSortConfigs Destination sort configuration (for all sorted columns).\n   */\n  'afterColumnSort',\n\n  /**\n   * Fired by {@link Autofill} plugin after setting range of autofill. This hook is fired when {@link Options#fillHandle}\n   * option is enabled.\n   *\n   * @event Hooks#modifyAutofillRange\n   * @param {Array} startArea Array of visual coordinates of the starting point for the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n   * @param {Array} entireArea Array of visual coordinates of the entire area of the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n   */\n  'modifyAutofillRange',\n\n  /**\n   * Fired to allow modifying the copyable range with a callback function.\n   *\n   * @event Hooks#modifyCopyableRange\n   * @param {Array[]} copyableRanges Array of objects defining copyable cells.\n   */\n  'modifyCopyableRange',\n\n  /**\n   * Fired by {@link CopyPaste} plugin before copying the values to the clipboard and before clearing values of\n   * the selected cells. This hook is fired when {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#beforeCut\n   * @param {Array[]} data An array of arrays which contains data to cut.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       which will be cut out.\n   * @returns {*} If returns `false` then operation of the cutting out is canceled.\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // To disregard a single row, remove it from the array using data.splice(i, 1).\n   * new Handsontable(element, {\n   *   beforeCut: function(data, coords) {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }\n   * });\n   * // To cancel a cutting action, just return `false`.\n   * new Handsontable(element, {\n   *   beforeCut: function(data, coords) {\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // To disregard a single row, remove it from the array using data.splice(i, 1).\n   * <HotTable\n   *   beforeCut={(data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }}\n   * />\n   * // To cancel a cutting action, just return `false`.\n   * <HotTable\n   *   beforeCut={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforeCut',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after data was cut out from the table. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#afterCut\n   * @param {Array[]} data An array of arrays with the cut data.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       which was cut out.\n   */\n  'afterCut',\n\n  /**\n   * Fired before values are copied to the clipboard.\n   *\n   * @event Hooks#beforeCopy\n   * @param {Array[]} data An array of arrays which contains data to copied.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                         which will copied.\n   * @param {{ columnHeadersCount: number }} copiedHeadersCount (Since 12.3.0) The number of copied column headers.\n   * @returns {*} If returns `false` then copying is canceled.\n   *\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * ...\n   * new Handsontable(document.getElementById('example'), {\n   *   beforeCopy: (data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }\n   * });\n   * ...\n   *\n   * // To cancel copying, return false from the callback.\n   * ...\n   * new Handsontable(document.getElementById('example'), {\n   *   beforeCopy: (data, coords) => {\n   *     return false;\n   *   }\n   * });\n   * ...\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * ...\n   * <HotTable\n   *   beforeCopy={(data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }}\n   * />\n   * ...\n   *\n   * // To cancel copying, return false from the callback.\n   * ...\n   * <HotTable\n   *   beforeCopy={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ...\n   * ```\n   * :::\n   */\n  'beforeCopy',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after data are pasted into table. This hook is fired when {@link Options#copyPaste}\n   * option is enabled.\n   *\n   * @event Hooks#afterCopy\n   * @param {Array[]} data An array of arrays which contains the copied data.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                         which was copied.\n   * @param {{ columnHeadersCount: number }} copiedHeadersCount (Since 12.3.0) The number of copied column headers.\n   */\n  'afterCopy',\n\n  /**\n   * Fired by {@link CopyPaste} plugin before values are pasted into table. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#beforePaste\n   * @param {Array[]} data An array of arrays which contains data to paste.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       that correspond to the previously selected area.\n   * @returns {*} If returns `false` then pasting is canceled.\n   * @example\n   * ```js\n   * ::: only-for javascript\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * new Handsontable(example, {\n   *   beforePaste: (data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }\n   * });\n   * // To cancel pasting, return false from the callback.\n   * new Handsontable(example, {\n   *   beforePaste: (data, coords) => {\n   *     return false;\n   *   }\n   * });\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * // To disregard a single row, remove it from array using data.splice(i, 1).\n   * <HotTable\n   *   beforePaste={(data, coords) => {\n   *     // data -> [[1, 2, 3], [4, 5, 6]]\n   *     data.splice(0, 1);\n   *     // data -> [[4, 5, 6]]\n   *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n   *   }}\n   * />\n   * // To cancel pasting, return false from the callback.\n   * <HotTable\n   *   beforePaste={(data, coords) => {\n   *     return false;\n   *   }}\n   * />\n   * ```\n   * :::\n   */\n  'beforePaste',\n\n  /**\n   * Fired by {@link CopyPaste} plugin after values are pasted into table. This hook is fired when\n   * {@link Options#copyPaste} option is enabled.\n   *\n   * @event Hooks#afterPaste\n   * @param {Array[]} data An array of arrays with the pasted data.\n   * @param {object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                       that correspond to the previously selected area.\n   */\n  'afterPaste',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, before freezing a column.\n   *\n   * @event Hooks#beforeColumnFreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the column that is going to freeze.\n   * @param {boolean} freezePerformed If `true`: the column is going to freeze. If `false`: the column is not going to freeze (which might happen if the column is already frozen).\n   * @returns {boolean|undefined} If `false`: the column is not going to freeze, and the `afterColumnFreeze` hook won't fire.\n   */\n  'beforeColumnFreeze',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, right after freezing a column.\n   *\n   * @event Hooks#afterColumnFreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the frozen column.\n   * @param {boolean} freezePerformed If `true`: the column got successfully frozen. If `false`: the column didn't get frozen.\n   */\n  'afterColumnFreeze',\n\n  /**\n   * Fired by {@link ManualColumnMove} plugin before change order of the visual indexes. This hook is fired when\n   * {@link Options#manualColumnMove} option is enabled.\n   *\n   * @event Hooks#beforeColumnMove\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/columns/column-moving/column-moving.md).\n   * @param {number|undefined} dropIndex Visual column index, being a drop index for the moved columns.\n   *                                     Points to where we are going to drop the moved elements. To check\n   *                                     visualization of drop index please take a look at\n   *                                     [documentation](@/guides/columns/column-moving/column-moving.md).\n   *                                     It's `undefined` when `dragColumns` function wasn't called.\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @returns {undefined | boolean} If `false` the column will not be moved, `true` otherwise.\n   */\n  'beforeColumnMove',\n\n  /**\n   * Fired by {@link ManualColumnMove} plugin after changing order of the visual indexes.\n   * This hook is fired when {@link Options#manualColumnMove} option is enabled.\n   *\n   * @event Hooks#afterColumnMove\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/columns/column-moving/column-moving.md).\n   * @param {number|undefined} dropIndex Visual column index, being a drop index for the moved columns.\n   *                                     Points to where we are going to drop the moved elements.\n   *                                     To check visualization of drop index please take a look at\n   *                                     [documentation](@/guides/columns/column-moving/column-moving.md).\n   *                                     It's `undefined` when `dragColumns` function wasn't called.\n   * @param {boolean} movePossible Indicates if it was possible to move columns to the desired position.\n   * @param {boolean} orderChanged Indicates if order of columns was changed by move.\n   */\n  'afterColumnMove',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, before unfreezing a column.\n   *\n   * @event Hooks#beforeColumnUnfreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the column that is going to unfreeze.\n   * @param {boolean} unfreezePerformed If `true`: the column is going to unfreeze. If `false`: the column is not going to unfreeze (which might happen if the column is already unfrozen).\n   * @returns {boolean|undefined} If `false`: the column is not going to unfreeze, and the `afterColumnUnfreeze` hook won't fire.\n   */\n  'beforeColumnUnfreeze',\n\n  /**\n   * Fired by the {@link ManualColumnFreeze} plugin, right after unfreezing a column.\n   *\n   * @event Hooks#afterColumnUnfreeze\n   * @since 12.1.0\n   * @param {number} column The visual index of the unfrozen column.\n   * @param {boolean} unfreezePerformed If `true`: the column got successfully unfrozen. If `false`: the column didn't get unfrozen.\n   */\n  'afterColumnUnfreeze',\n\n  /**\n   * Fired by {@link ManualRowMove} plugin before changing the order of the visual indexes. This hook is fired when\n   * {@link Options#manualRowMove} option is enabled.\n   *\n   * @event Hooks#beforeRowMove\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {number|undefined} dropIndex Visual row index, being a drop index for the moved rows.\n   *                                     Points to where we are going to drop the moved elements.\n   *                                     To check visualization of drop index please take a look at\n   *                                     [documentation](@/guides/rows/row-moving/row-moving.md).\n   *                                     It's `undefined` when `dragRows` function wasn't called.\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRowMove',\n\n  /**\n   * Fired by {@link ManualRowMove} plugin after changing the order of the visual indexes.\n   * This hook is fired when {@link Options#manualRowMove} option is enabled.\n   *\n   * @event Hooks#afterRowMove\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows.\n   *                            Points to where the elements will be placed after the moving action.\n   *                            To check visualization of final index please take a look at\n   *                            [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {number|undefined} dropIndex Visual row index, being a drop index for the moved rows.\n   *                                     Points to where we are going to drop the moved elements.\n   *                                     To check visualization of drop index please take a look at\n   *                                     [documentation](@/guides/rows/row-moving/row-moving.md).\n   *                                     It's `undefined` when `dragRows` function wasn't called.\n   * @param {boolean} movePossible Indicates if it was possible to move rows to the desired position.\n   * @param {boolean} orderChanged Indicates if order of rows was changed by move.\n   */\n  'afterRowMove',\n\n  /**\n   * Fired by {@link ManualColumnResize} plugin before rendering the table with modified column sizes. This hook is\n   * fired when {@link Options#manualColumnResize} option is enabled.\n   *\n   * @event Hooks#beforeColumnResize\n   * @param {number} newSize Calculated new column width.\n   * @param {number} column Visual index of the resized column.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   * @returns {number} Returns a new column size or `undefined`, if column size should be calculated automatically.\n   */\n  'beforeColumnResize',\n\n  /**\n   * Fired by {@link ManualColumnResize} plugin after rendering the table with modified column sizes. This hook is\n   * fired when {@link Options#manualColumnResize} option is enabled.\n   *\n   * @event Hooks#afterColumnResize\n   * @param {number} newSize Calculated new column width.\n   * @param {number} column Visual index of the resized column.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   */\n  'afterColumnResize',\n\n  /**\n   * Fired by {@link ManualRowResize} plugin before rendering the table with modified row sizes. This hook is\n   * fired when {@link Options#manualRowResize} option is enabled.\n   *\n   * @event Hooks#beforeRowResize\n   * @param {number} newSize Calculated new row height.\n   * @param {number} row Visual index of the resized row.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   * @returns {number|undefined} Returns the new row size or `undefined` if row size should be calculated automatically.\n   */\n  'beforeRowResize',\n\n  /**\n   * Fired by {@link ManualRowResize} plugin after rendering the table with modified row sizes. This hook is\n   * fired when {@link Options#manualRowResize} option is enabled.\n   *\n   * @event Hooks#afterRowResize\n   * @param {number} newSize Calculated new row height.\n   * @param {number} row Visual index of the resized row.\n   * @param {boolean} isDoubleClick Flag that determines whether there was a double-click.\n   */\n  'afterRowResize',\n\n  /**\n   * Fired after getting the column header renderers.\n   *\n   * @event Hooks#afterGetColumnHeaderRenderers\n   * @param {Function[]} renderers An array of the column header renderers.\n   */\n  'afterGetColumnHeaderRenderers',\n\n  /**\n   * Fired after getting the row header renderers.\n   *\n   * @event Hooks#afterGetRowHeaderRenderers\n   * @param {Function[]} renderers An array of the row header renderers.\n   */\n  'afterGetRowHeaderRenderers',\n\n  /**\n   * Fired before applying stretched column width to column.\n   *\n   * @event Hooks#beforeStretchingColumnWidth\n   * @param {number} stretchedWidth Calculated width.\n   * @param {number} column Visual column index.\n   * @returns {number|undefined} Returns new width which will be applied to the column element.\n   */\n  'beforeStretchingColumnWidth',\n\n  /**\n   * Fired by the [`Filters`](@/api/filters.md) plugin,\n   * before a [column filter](@/guides/columns/column-filter/column-filter.md) gets applied.\n   *\n   * [`beforeFilter`](#beforefilter) takes two arguments: `conditionsStack` and `previousConditionsStack`, both are\n   * arrays of objects.\n   *\n   * Each object represents one of your [column filters](@/api/filters.md#addcondition),\n   * and consists of the following properties:\n   *\n   * | Property     | Possible values                                                         | Description                                                                                                              |\n   * | ------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n   * | `column`     | Number                                                                  | A visual index of the column to which the filter will be applied.                                                        |\n   * | `conditions` | Array of objects                                                        | Each object represents one condition. For details, see [`addCondition()`](@/api/filters.md#addcondition).                |\n   * | `operation`  | `'conjunction'` \\| `'disjunction'` \\| `'disjunctionWithExtraCondition'` | An operation to perform on your set of `conditions`. For details, see [`addCondition()`](@/api/filters.md#addcondition). |\n   *\n   * An example of the format of the `conditionsStack` argument:\n   *\n   * ```js\n   * [\n   *   {\n   *     column: 2,\n   *     conditions: [\n   *       {name: 'begins_with', args: [['S']]}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   *   {\n   *     column: 4,\n   *     conditions: [\n   *       {name: 'not_empty', args: []}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   * ]\n   * ```\n   *\n   * To perform server-side filtering (i.e., to not apply filtering to Handsontable's UI),\n   * set [`beforeFilter`](#beforefilter) to return `false`:\n   *\n   * ```js\n   * new Handsontable(document.getElementById('example'), {\n   *   beforeFilter: (conditionsStack) => {\n   *     return false;\n   *   }\n   * });\n   *```\n   *\n   * Read more:\n   * - [Guides: Column filter](@/guides/columns/column-filter/column-filter.md)\n   * - [Hooks: `afterFilter`](#afterfilter)\n   * - [Options: `filters`](@/api/options.md#filters)\n   * - [Plugins: `Filters`](@/api/filters.md)\n   * – [Plugin methods: `addCondition()`](@/api/filters.md#addcondition)\n   *\n   * @event Hooks#beforeFilter\n   * @param {object[]} conditionsStack An array of objects with your [column filters](@/api/filters.md#addcondition).\n   * @param {object[]|null} previousConditionsStack An array of objects with your previous [column filters](@/api/filters.md#addcondition). It can also be `null` if there was no previous filters applied or the conditions did not change between performing the `filter` action.\n   * @returns {boolean} To perform server-side filtering (i.e., to not apply filtering to Handsontable's UI), return `false`.\n   */\n  'beforeFilter',\n\n  /**\n   * Fired by the [`Filters`](@/api/filters.md) plugin,\n   * after a [column filter](@/guides/columns/column-filter/column-filter.md) gets applied.\n   *\n   * [`afterFilter`](#afterfilter) takes one argument (`conditionsStack`), which is an array of objects.\n   * Each object represents one of your [column filters](@/api/filters.md#addcondition),\n   * and consists of the following properties:\n   *\n   * | Property     | Possible values                                                         | Description                                                                                                              |\n   * | ------------ | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n   * | `column`     | Number                                                                  | A visual index of the column to which the filter was applied.                                                            |\n   * | `conditions` | Array of objects                                                        | Each object represents one condition. For details, see [`addCondition()`](@/api/filters.md#addcondition).                |\n   * | `operation`  | `'conjunction'` \\| `'disjunction'` \\| `'disjunctionWithExtraCondition'` | An operation to perform on your set of `conditions`. For details, see [`addCondition()`](@/api/filters.md#addcondition). |\n   *\n   * An example of the format of the `conditionsStack` argument:\n   *\n   * ```js\n   * [\n   *   {\n   *     column: 2,\n   *     conditions: [\n   *       {name: 'begins_with', args: [['S']]}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   *   {\n   *     column: 4,\n   *     conditions: [\n   *       {name: 'not_empty', args: []}\n   *     ],\n   *     operation: 'conjunction'\n   *   },\n   * ]\n   * ```\n   *\n   * Read more:\n   * - [Guides: Column filter](@/guides/columns/column-filter/column-filter.md)\n   * - [Hooks: `beforeFilter`](#beforefilter)\n   * - [Options: `filters`](@/api/options.md#filters)\n   * - [Plugins: `Filters`](@/api/filters.md)\n   * – [Plugin methods: `addCondition()`](@/api/filters.md#addcondition)\n   *\n   * @event Hooks#afterFilter\n   * @param {object[]} conditionsStack An array of objects with your [column filters](@/api/filters.md#addcondition).\n   */\n  'afterFilter',\n\n  /**\n   * Fired by the {@link Formulas} plugin, when any cell value changes.\n   *\n   * Returns an array of objects that contains:\n   * - The addresses (`sheet`, `row`, `col`) and new values (`newValue`) of the changed cells.\n   * - The addresses and new values of any cells that had to be recalculated (because their formulas depend on the cells that changed).\n   *\n   * This hook gets also fired on Handsontable's initialization, returning the addresses and values of all cells.\n   *\n   * Read more:\n   * - [Guides: Formula calculation](@/guides/formulas/formula-calculation/formula-calculation.md)\n   * - [HyperFormula documentation: `valuesUpdated`](https://hyperformula.handsontable.com/api/interfaces/listeners.html#valuesupdated)\n   *\n   * @since 9.0.0\n   * @event Hooks#afterFormulasValuesUpdate\n   * @param {Array} changes The addresses and new values of all the changed and recalculated cells.\n   */\n  'afterFormulasValuesUpdate',\n\n  /**\n   * Fired when a named expression is added to the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterNamedExpressionAdded\n   * @param {string} namedExpressionName The name of the added expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  'afterNamedExpressionAdded',\n\n  /**\n   * Fired when a named expression is removed from the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterNamedExpressionRemoved\n   * @param {string} namedExpressionName The name of the removed expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  'afterNamedExpressionRemoved',\n\n  /**\n   * Fired when a new sheet is added to the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterSheetAdded\n   * @param {string} addedSheetDisplayName The name of the added sheet.\n   */\n  'afterSheetAdded',\n\n  /**\n   * Fired when a sheet in the Formulas' engine instance is renamed.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterSheetRenamed\n   * @param {string} oldDisplayName The old name of the sheet.\n   * @param {string} newDisplayName The new name of the sheet.\n   */\n  'afterSheetRenamed',\n\n  /**\n   * Fired when a sheet is removed from the Formulas' engine instance.\n   *\n   * @since 9.0.0\n   * @event Hooks#afterSheetRemoved\n   * @param {string} removedSheetDisplayName The removed sheet name.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  'afterSheetRemoved',\n\n  /**\n   * Fired while retrieving the column header height.\n   *\n   * @event Hooks#modifyColumnHeaderHeight\n   */\n  'modifyColumnHeaderHeight',\n\n  /**\n   * Fired while retrieving a column header's value.\n   *\n   * @since 12.3.0\n   * @event Hooks#modifyColumnHeaderValue\n   * @param {string} value A column header value.\n   * @param {number} visualColumnIndex A visual column index.\n   * @param {number} [headerLevel=0] Header level index. Accepts positive (`0` to `n`)\n   *                                 and negative (`-1` to `-n`) values. For positive values, `0` points to the\n   *                                 topmost header. For negative values, `-1` points to the bottom-most\n   *                                 header (the header closest to the cells).\n   * @returns {string} The column header value to be updated.\n   */\n  'modifyColumnHeaderValue',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before the undo action. Contains information about the action that is being undone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#beforeUndo\n   * @param {object} action The action object. Contains information about the action being undone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeUndo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before changing undo stack.\n   *\n   * @event Hooks#beforeUndoStackChange\n   * @since 8.4.0\n   * @param {Array} doneActions Stack of actions which may be undone.\n   * @param {string} [source] String that identifies source of action\n   *                          ([list of all available sources](@/guides/getting-started/events-and-hooks/events-and-hooks.md#definition-for-source-argument)).\n   * @returns {*|boolean} If false is returned the action of changing undo stack is canceled.\n   */\n  'beforeUndoStackChange',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after the undo action. Contains information about the action that is being undone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#afterUndo\n   * @param {object} action The action object. Contains information about the action being undone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n   */\n  'afterUndo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after changing undo stack.\n   *\n   * @event Hooks#afterUndoStackChange\n   * @since 8.4.0\n   * @param {Array} doneActionsBefore Stack of actions which could be undone before performing new action.\n   * @param {Array} doneActionsAfter Stack of actions which can be undone after performing new action.\n   */\n  'afterUndoStackChange',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before the redo action. Contains information about the action that is being redone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#beforeRedo\n   * @param {object} action The action object. Contains information about the action being redone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  'beforeRedo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin before changing redo stack.\n   *\n   * @event Hooks#beforeRedoStackChange\n   * @since 8.4.0\n   * @param {Array} undoneActions Stack of actions which may be redone.\n   */\n  'beforeRedoStackChange',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after the redo action. Contains information about the action that is being redone.\n   * This hook is fired when {@link Options#undo} option is enabled.\n   *\n   * @event Hooks#afterRedo\n   * @param {object} action The action object. Contains information about the action being redone. The `actionType`\n   *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n   */\n  'afterRedo',\n\n  /**\n   * Fired by {@link UndoRedo} plugin after changing redo stack.\n   *\n   * @event Hooks#afterRedoStackChange\n   * @since 8.4.0\n   * @param {Array} undoneActionsBefore Stack of actions which could be redone before performing new action.\n   * @param {Array} undoneActionsAfter Stack of actions which can be redone after performing new action.\n   */\n  'afterRedoStackChange',\n\n  /**\n   * Fired while retrieving the row header width.\n   *\n   * @event Hooks#modifyRowHeaderWidth\n   * @param {number} rowHeaderWidth Row header width.\n   */\n  'modifyRowHeaderWidth',\n\n  /**\n   * Fired when the focus of the selection is being modified (e.g. Moving the focus with the enter/tab keys).\n   *\n   * @since 14.3.0\n   * @event Hooks#modifyTransformFocus\n   * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n   */\n  'modifyTransformFocus',\n\n  /**\n   * Fired when the start of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#modifyTransformStart\n   * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n   */\n  'modifyTransformStart',\n\n  /**\n   * Fired when the end of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#modifyTransformEnd\n   * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n   */\n  'modifyTransformEnd',\n\n  /**\n   * Fired after the focus of the selection is being modified (e.g. Moving the focus with the enter/tab keys).\n   *\n   * @since 14.3.0\n   * @event Hooks#afterModifyTransformFocus\n   * @param {CellCoords} coords Coords of the freshly focused cell.\n   * @param {number} rowTransformDir `-1` if trying to focus a cell with a negative row index. `0` otherwise.\n   * @param {number} colTransformDir `-1` if trying to focus a cell with a negative column index. `0` otherwise.\n   */\n  'afterModifyTransformFocus',\n\n  /**\n   * Fired after the start of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#afterModifyTransformStart\n   * @param {CellCoords} coords Coords of the freshly selected cell.\n   * @param {number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n   * @param {number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n   */\n  'afterModifyTransformStart',\n\n  /**\n   * Fired after the end of the selection is being modified (e.g. Moving the selection with the arrow keys).\n   *\n   * @event Hooks#afterModifyTransformEnd\n   * @param {CellCoords} coords Visual coords of the freshly selected cell.\n   * @param {number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n   * @param {number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n   */\n  'afterModifyTransformEnd',\n\n  /**\n   * Fired inside the `viewportRowCalculatorOverride` method. Allows modifying the row calculator parameters.\n   *\n   * @event Hooks#afterViewportRowCalculatorOverride\n   * @param {object} calc The row calculator.\n   */\n  'afterViewportRowCalculatorOverride',\n\n  /**\n   * Fired inside the `viewportColumnCalculatorOverride` method. Allows modifying the row calculator parameters.\n   *\n   * @event Hooks#afterViewportColumnCalculatorOverride\n   * @param {object} calc The row calculator.\n   */\n  'afterViewportColumnCalculatorOverride',\n\n  /**\n   * Fired after initializing all the plugins.\n   * This hook should be added before Handsontable is initialized.\n   *\n   * @event Hooks#afterPluginsInitialized\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.add('afterPluginsInitialized', myCallback);\n   * ```\n   */\n  'afterPluginsInitialized',\n\n  /**\n   * Fired by {@link HiddenRows} plugin before marking the rows as hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   * Returning `false` in the callback will prevent the hiding action from completing.\n   *\n   * @event Hooks#beforeHideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n   */\n  'beforeHideRows',\n\n  /**\n   * Fired by {@link HiddenRows} plugin after marking the rows as hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   *\n   * @event Hooks#afterHideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any non-hidden rows, `false` otherwise.\n   */\n  'afterHideRows',\n\n  /**\n   * Fired by {@link HiddenRows} plugin before marking the rows as not hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   * Returning `false` in the callback will prevent the row revealing action from completing.\n   *\n   * @event Hooks#beforeUnhideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the revealing action will not be completed.\n   */\n  'beforeUnhideRows',\n\n  /**\n   * Fired by {@link HiddenRows} plugin after marking the rows as not hidden. Fired only if the {@link Options#hiddenRows} option is enabled.\n   *\n   * @event Hooks#afterUnhideRows\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical row indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical row indexes.\n   * @param {boolean} actionPossible `true`, if provided row indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any hidden rows, `false` otherwise.\n   */\n  'afterUnhideRows',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin before marking the columns as hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   * Returning `false` in the callback will prevent the hiding action from completing.\n   *\n   * @event Hooks#beforeHideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n   */\n  'beforeHideColumns',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin after marking the columns as hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   *\n   * @event Hooks#afterHideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any non-hidden columns, `false` otherwise.\n   */\n  'afterHideColumns',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin before marking the columns as not hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   * Returning `false` in the callback will prevent the column revealing action from completing.\n   *\n   * @event Hooks#beforeUnhideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the hiding action will not be completed.\n   */\n  'beforeUnhideColumns',\n\n  /**\n   * Fired by {@link HiddenColumns} plugin after marking the columns as not hidden. Fired only if the {@link Options#hiddenColumns} option is enabled.\n   *\n   * @event Hooks#afterUnhideColumns\n   * @param {Array} currentHideConfig Current hide configuration - a list of hidden physical column indexes.\n   * @param {Array} destinationHideConfig Destination hide configuration - a list of hidden physical column indexes.\n   * @param {boolean} actionPossible `true`, if the provided column indexes are valid, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any hidden columns, `false` otherwise.\n   */\n  'afterUnhideColumns',\n\n  /**\n   * Fired by {@link TrimRows} plugin before trimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#beforeTrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the trimming action will not be completed.\n   */\n  'beforeTrimRow',\n\n  /**\n   * Fired by {@link TrimRows} plugin after trimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#afterTrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any non-trimmed rows, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the trimming action will not be completed.\n   */\n  'afterTrimRow',\n\n  /**\n   * Fired by {@link TrimRows} plugin before untrimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#beforeUntrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the untrimming action will not be completed.\n   */\n  'beforeUntrimRow',\n\n  /**\n   * Fired by {@link TrimRows} plugin after untrimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n   *\n   * @event Hooks#afterUntrimRow\n   * @param {Array} currentTrimConfig Current trim configuration - a list of trimmed physical row indexes.\n   * @param {Array} destinationTrimConfig Destination trim configuration - a list of trimmed physical row indexes.\n   * @param {boolean} actionPossible `true`, if all of the row indexes are withing the bounds of the table, `false` otherwise.\n   * @param {boolean} stateChanged `true`, if the action affected any trimmed rows, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the untrimming action will not be completed.\n   */\n  'afterUntrimRow',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin before opening the dropdown menu. This hook is fired when {@link Options#dropdownMenu}\n   * option is enabled.\n   *\n   * @event Hooks#beforeDropdownMenuShow\n   * @param {DropdownMenu} dropdownMenu The `DropdownMenu` instance.\n   */\n  'beforeDropdownMenuShow',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin after opening the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterDropdownMenuShow\n   * @param {DropdownMenu} dropdownMenu The `DropdownMenu` instance.\n   */\n  'afterDropdownMenuShow',\n\n  /**\n   * Fired by {@link DropdownMenu} plugin after hiding the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n   * option is enabled.\n   *\n   * @event Hooks#afterDropdownMenuHide\n   * @param {DropdownMenu} instance The `DropdownMenu` instance.\n   */\n  'afterDropdownMenuHide',\n\n  /**\n   * Fired by {@link NestedRows} plugin before adding a children to the `NestedRows` structure. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#beforeAddChild\n   * @param {object} parent The parent object.\n   * @param {object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n   * @param {number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n   */\n  'beforeAddChild',\n\n  /**\n   * Fired by {@link NestedRows} plugin after adding a children to the `NestedRows` structure. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#afterAddChild\n   * @param {object} parent The parent object.\n   * @param {object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n   * @param {number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n   */\n  'afterAddChild',\n\n  /**\n   * Fired by {@link NestedRows} plugin before detaching a child from its parent. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#beforeDetachChild\n   * @param {object} parent An object representing the parent from which the element is to be detached.\n   * @param {object} element The detached element.\n   */\n  'beforeDetachChild',\n\n  /**\n   * Fired by {@link NestedRows} plugin after detaching a child from its parent. This hook is fired when\n   * {@link Options#nestedRows} option is enabled.\n   *\n   * @event Hooks#afterDetachChild\n   * @param {object} parent An object representing the parent from which the element was detached.\n   * @param {object} element The detached element.\n   * @param {number} finalElementPosition The final row index of the detached element.\n   */\n  'afterDetachChild',\n\n  /**\n   * Fired before the editor is opened and rendered.\n   *\n   * @since 14.2.0\n   * @event Hooks#beforeBeginEditing\n   * @param {number} row Visual row index of the edited cell.\n   * @param {number} column Visual column index of the edited cell.\n   * @param {*} initialValue The initial editor value.\n   * @param {MouseEvent | KeyboardEvent} event The event which was responsible for opening the editor.\n   * @param {boolean} fullEditMode `true` if the editor is opened in full edit mode, `false` otherwise.\n   * Editor opened in full edit mode does not close after pressing Arrow keys.\n   * @returns {boolean | undefined} If the callback returns `false,` the editor won't be opened after\n   * the mouse double click or after pressing the Enter key. Returning `undefined` (or other value\n   * than boolean) will result in default behavior, which disallows opening an editor for non-contiguous\n   * selection (while pressing Ctrl/Cmd) and for multiple selected cells (while pressing SHIFT).\n   * Returning `true` removes those restrictions.\n   */\n  'beforeBeginEditing',\n\n  /**\n   * Fired after the editor is opened and rendered.\n   *\n   * @event Hooks#afterBeginEditing\n   * @param {number} row Visual row index of the edited cell.\n   * @param {number} column Visual column index of the edited cell.\n   */\n  'afterBeginEditing',\n\n  /**\n   * Fired by {@link MergeCells} plugin before cell merging. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#beforeMergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'beforeMergeCells',\n\n  /**\n   * Fired by {@link MergeCells} plugin after cell merging. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#afterMergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {object} mergeParent The parent collection of the provided cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'afterMergeCells',\n\n  /**\n   * Fired by {@link MergeCells} plugin before unmerging the cells. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#beforeUnmergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'beforeUnmergeCells',\n\n  /**\n   * Fired by {@link MergeCells} plugin after unmerging the cells. This hook is fired when {@link Options#mergeCells}\n   * option is enabled.\n   *\n   * @event Hooks#afterUnmergeCells\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   */\n  'afterUnmergeCells',\n\n  /**\n   * Fired after the table was switched into listening mode. This allows Handsontable to capture keyboard events and\n   * respond in the right way.\n   *\n   * @event Hooks#afterListen\n   */\n  'afterListen',\n\n  /**\n   * Fired after the table was switched off from the listening mode. This makes the Handsontable inert for any\n   * keyboard events.\n   *\n   * @event Hooks#afterUnlisten\n   */\n  'afterUnlisten',\n\n  /**\n   * Fired after the window was resized or the size of the Handsontable root element was changed.\n   *\n   * @event Hooks#afterRefreshDimensions\n   * @param {{ width: number, height: number }} previousDimensions Previous dimensions of the container.\n   * @param {{ width: number, height: number }} currentDimensions Current dimensions of the container.\n   * @param {boolean} stateChanged `true`, if the container was re-render, `false` otherwise.\n   */\n  'afterRefreshDimensions',\n\n  /**\n   * Cancellable hook, called after resizing a window or after detecting size change of the\n   * Handsontable root element, but before redrawing a table.\n   *\n   * @event Hooks#beforeRefreshDimensions\n   * @param {{ width: number, height: number }} previousDimensions Previous dimensions of the container.\n   * @param {{ width: number, height: number }} currentDimensions Current dimensions of the container.\n   * @param {boolean} actionPossible `true`, if current and previous dimensions are different, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the refresh action will not be completed.\n   */\n  'beforeRefreshDimensions',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns collapse. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#beforeColumnCollapse\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} collapsePossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the collapsing action will not be completed.\n   */\n  'beforeColumnCollapse',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns collapse. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#afterColumnCollapse\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} collapsePossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @param {boolean} successfullyCollapsed `true`, if the action affected any non-collapsible column, `false` otherwise.\n   */\n  'afterColumnCollapse',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns expand. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#beforeColumnExpand\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} expandPossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @returns {undefined|boolean} If the callback returns `false`, the expanding action will not be completed.\n   */\n  'beforeColumnExpand',\n\n  /**\n   * Fired by {@link CollapsibleColumns} plugin before columns expand. This hook is fired when {@link Options#collapsibleColumns} option is enabled.\n   *\n   * @event Hooks#afterColumnExpand\n   * @since 8.0.0\n   * @param {Array} currentCollapsedColumns Current collapsible configuration - a list of collapsible physical column indexes.\n   * @param {Array} destinationCollapsedColumns Destination collapsible configuration - a list of collapsible physical column indexes.\n   * @param {boolean} expandPossible `true`, if all of the column indexes are withing the bounds of the collapsed sections, `false` otherwise.\n   * @param {boolean} successfullyExpanded `true`, if the action affected any non-collapsible column, `false` otherwise.\n   */\n  'afterColumnExpand',\n\n  /**\n   * Fired by {@link AutoColumnSize} plugin within SampleGenerator utility.\n   *\n   * @event Hooks#modifyAutoColumnSizeSeed\n   * @since 8.4.0\n   * @param {string|undefined} seed Seed ID, unique name to categorize samples.\n   * @param {object} cellProperties Object containing the cell properties.\n   * @param {*} cellValue Value of the cell.\n   */\n  'modifyAutoColumnSizeSeed',\n];\n\n/**\n * Template warning message for removed hooks.\n *\n * @type {string}\n */\nconst REMOVED_MESSAGE = toSingleLine`The plugin hook \"[hookName]\" was removed in Handsontable [removedInVersion].\\x20\n  Please consult release notes https://github.com/handsontable/handsontable/releases/tag/[removedInVersion] to\\x20\n  learn about the migration path.`;\n\n/**\n * The list of the hooks which are removed from the API. The warning message is printed out in\n * the developer console when the hook is used.\n *\n * The Map key is represented by hook name and its value points to the Handsontable version\n * in which it was removed.\n *\n * @type {Map<string, string>}\n */\nconst REMOVED_HOOKS = new Map([\n  ['modifyRow', '8.0.0'],\n  ['modifyCol', '8.0.0'],\n  ['unmodifyRow', '8.0.0'],\n  ['unmodifyCol', '8.0.0'],\n  ['skipLengthCache', '8.0.0'],\n  ['hiddenColumn', '8.0.0'],\n  ['hiddenRow', '8.0.0'],\n]);\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * The list of the hooks which are deprecated. The warning message is printed out in\n * the developer console when the hook is used.\n *\n * The Map key is represented by hook name and its value keeps message which whould be\n * printed out when the hook is used.\n *\n * Usage:\n * ```js\n * ...\n * New Map([\n *   ['beforeColumnExpand', 'The plugin hook \"beforeColumnExpand\" is deprecated. Use \"beforeColumnExpand2\" instead.'],\n * ])\n * ...\n * ```\n *\n *\n * @type {Map<string, string>}\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nconst DEPRECATED_HOOKS = new Map([\n  []\n]);\n\nconst callbackOrder = new WeakMap();\n\nclass Hooks {\n  static getSingleton() {\n    return getGlobalSingleton();\n  }\n\n  /**\n   * @type {object}\n   */\n  globalBucket;\n\n  /**\n   *\n   */\n  constructor() {\n    this.globalBucket = this.createEmptyBucket();\n  }\n\n  /**\n   * Returns a new object with empty handlers related to every registered hook name.\n   *\n   * @returns {object} The empty bucket object.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.createEmptyBucket();\n   * // Results:\n   * {\n   * ...\n   * afterCreateCol: [],\n   * afterCreateRow: [],\n   * beforeInit: [],\n   * ...\n   * }\n   * ```\n   */\n  createEmptyBucket() {\n    const bucket = Object.create(null);\n\n    // eslint-disable-next-line no-return-assign\n    arrayEach(REGISTERED_HOOKS, (hook) => {\n      bucket[hook] = [];\n\n      this.initOrderMap(bucket, hook);\n    });\n\n    return bucket;\n  }\n\n  /**\n   * Get hook bucket based on the context of the object or if argument is `undefined`, get the global hook bucket.\n   *\n   * @param {object} [context=null] A Handsontable instance.\n   * @returns {object} Returns a global or Handsontable instance bucket.\n   */\n  getBucket(context = null) {\n    if (context) {\n      if (!context.pluginHookBucket) {\n        context.pluginHookBucket = this.createEmptyBucket();\n      }\n\n      return context.pluginHookBucket;\n    }\n\n    return this.globalBucket;\n  }\n\n  /**\n   * Adds a listener (globally or locally) to a specified hook name.\n   * If the `context` parameter is provided, the hook will be added only to the instance it references.\n   * Otherwise, the callback will be used everytime the hook fires on any Handsontable instance.\n   * You can provide an array of callback functions as the `callback` argument, this way they will all be fired\n   * once the hook is triggered.\n   *\n   * @see Core#addHook\n   * @param {string} key Hook name.\n   * @param {Function|Array} callback Callback function or an array of functions.\n   * @param {object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   * @returns {Hooks} Instance of Hooks.\n   *\n   * @example\n   * ```js\n   * // single callback, added locally\n   * Handsontable.hooks.add('beforeInit', myCallback, hotInstance);\n   *\n   * // single callback, added globally\n   * Handsontable.hooks.add('beforeInit', myCallback);\n   *\n   * // multiple callbacks, added locally\n   * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback], hotInstance);\n   *\n   * // multiple callbacks, added globally\n   * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback]);\n   * ```\n   */\n  add(key, callback, context = null, orderIndex) {\n    if (Array.isArray(callback)) {\n      arrayEach(callback, c => this.add(key, c, context));\n\n    } else {\n\n      if (REMOVED_HOOKS.has(key)) {\n        warn(substitute(REMOVED_MESSAGE, { hookName: key, removedInVersion: REMOVED_HOOKS.get(key) }));\n      }\n      if (DEPRECATED_HOOKS.has(key)) {\n        warn(DEPRECATED_HOOKS.get(key));\n      }\n\n      const bucket = this.getBucket(context);\n\n      if (typeof bucket[key] === 'undefined') {\n        this.register(key);\n        bucket[key] = [];\n        this.initOrderMap(bucket, key);\n      }\n      callback.skip = false;\n\n      if (bucket[key].indexOf(callback) === -1) {\n        // only add a hook if it has not already been added (adding the same hook twice is now silently ignored)\n        let foundInitialHook = false;\n\n        if (callback.initialHook) {\n          arrayEach(bucket[key], (cb, i) => {\n            if (cb.initialHook) {\n              bucket[key][i] = callback;\n              foundInitialHook = true;\n\n              return false;\n            }\n          });\n        }\n\n        if (!foundInitialHook) {\n          bucket[key].push(callback);\n        }\n      }\n\n      this.setCallbackOrderIndex(bucket, key, callback, orderIndex);\n      this.orderBucketByOrderIndex(bucket, key);\n    }\n\n    return this;\n  }\n\n  /**\n   * Adds a listener to a specified hook. After the hook runs this listener will be automatically removed from the bucket.\n   *\n   * @see Core#addHookOnce\n   * @param {string} key Hook/Event name.\n   * @param {Function|Array} callback Callback function.\n   * @param {object} [context=null] A Handsontable instance.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.once('beforeInit', myCallback, hotInstance);\n   * ```\n   */\n  once(key, callback, context = null, orderIndex) {\n    if (Array.isArray(callback)) {\n      arrayEach(callback, c => this.once(key, c, context));\n\n    } else {\n      callback.runOnce = true;\n      this.add(key, callback, context, orderIndex);\n    }\n  }\n\n  /**\n   * Removes a listener from a hook with a given name. If the `context` argument is provided, it removes a listener from a local hook assigned to the given Handsontable instance.\n   *\n   * @see Core#removeHook\n   * @param {string} key Hook/Event name.\n   * @param {Function} callback Callback function (needs the be the function that was previously added to the hook).\n   * @param {object} [context=null] Handsontable instance.\n   * @returns {boolean} Returns `true` if hook was removed, `false` otherwise.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.remove('beforeInit', myCallback);\n   * ```\n   */\n  remove(key, callback, context = null) {\n    const bucket = this.getBucket(context);\n\n    if (typeof bucket[key] !== 'undefined') {\n      if (bucket[key].indexOf(callback) >= 0) {\n        callback.skip = true;\n\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Checks whether there are any registered listeners for the provided hook name.\n   * If the `context` parameter is provided, it only checks for listeners assigned to the given Handsontable instance.\n   *\n   * @param {string} key Hook name.\n   * @param {object} [context=null] A Handsontable instance.\n   * @returns {boolean} `true` for success, `false` otherwise.\n   */\n  has(key, context = null) {\n    const bucket = this.getBucket(context);\n\n    return !!(bucket[key] !== undefined && bucket[key].length);\n  }\n\n  /**\n   * Runs all local and global callbacks assigned to the hook identified by the `key` parameter.\n   * It returns either a return value from the last called callback or the first parameter (`p1`) passed to the `run` function.\n   *\n   * @see Core#runHooks\n   * @param {object} context Handsontable instance.\n   * @param {string} key Hook/Event name.\n   * @param {*} [p1] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p2] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p3] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p4] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p5] Parameter to be passed as an argument to the callback function.\n   * @param {*} [p6] Parameter to be passed as an argument to the callback function.\n   * @returns {*} Either a return value from the last called callback or `p1`.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.run(hot, 'beforeInit');\n   * ```\n   */\n  run(context, key, p1, p2, p3, p4, p5, p6) {\n    {\n      const globalHandlers = this.globalBucket[key];\n      const length = globalHandlers ? globalHandlers.length : 0;\n      let index = 0;\n\n      if (length) {\n        // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n        while (index < length) {\n          if (!globalHandlers[index] || globalHandlers[index].skip) {\n            index += 1;\n            /* eslint-disable no-continue */\n            continue;\n          }\n\n          const res = fastCall(globalHandlers[index], context, p1, p2, p3, p4, p5, p6);\n\n          if (res !== undefined) {\n            // eslint-disable-next-line no-param-reassign\n            p1 = res;\n          }\n          if (globalHandlers[index] && globalHandlers[index].runOnce) {\n            this.remove(key, globalHandlers[index]);\n          }\n\n          index += 1;\n        }\n      }\n    }\n    {\n      const localHandlers = this.getBucket(context)[key];\n      const length = localHandlers ? localHandlers.length : 0;\n      let index = 0;\n\n      if (length) {\n        // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n        while (index < length) {\n          if (!localHandlers[index] || localHandlers[index].skip) {\n            index += 1;\n            /* eslint-disable no-continue */\n            continue;\n          }\n\n          const res = fastCall(localHandlers[index], context, p1, p2, p3, p4, p5, p6);\n\n          if (res !== undefined) {\n            // eslint-disable-next-line no-param-reassign\n            p1 = res;\n          }\n          if (localHandlers[index] && localHandlers[index].runOnce) {\n            this.remove(key, localHandlers[index], context);\n          }\n\n          index += 1;\n        }\n      }\n    }\n\n    return p1;\n  }\n\n  /**\n   * Destroy all listeners connected to the context. If no context is provided, the global listeners will be destroyed.\n   *\n   * @param {object} [context=null] A Handsontable instance.\n   * @example\n   * ```js\n   * // destroy the global listeners\n   * Handsontable.hooks.destroy();\n   *\n   * // destroy the local listeners\n   * Handsontable.hooks.destroy(hotInstance);\n   * ```\n   */\n  destroy(context = null) {\n    // eslint-disable-next-line no-return-assign\n    objectEach(this.getBucket(context), (value, key, bucket) => (bucket[key].length = 0));\n  }\n\n  /**\n   * Registers a hook name (adds it to the list of the known hook names). Used by plugins.\n   * It is not necessary to call register, but if you use it, your plugin hook will be used returned by\n   * the `getRegistered` method. (which itself is used in the [demo](@/guides/getting-started/events-and-hooks/events-and-hooks.md)).\n   *\n   * @param {string} key The hook name.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.register('myHook');\n   * ```\n   */\n  register(key) {\n    if (!this.isRegistered(key)) {\n      REGISTERED_HOOKS.push(key);\n    }\n  }\n\n  /**\n   * Deregisters a hook name (removes it from the list of known hook names).\n   *\n   * @param {string} key The hook name.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.deregister('myHook');\n   * ```\n   */\n  deregister(key) {\n    if (this.isRegistered(key)) {\n      REGISTERED_HOOKS.splice(REGISTERED_HOOKS.indexOf(key), 1);\n    }\n  }\n\n  /**\n   * Returns a boolean value depending on if a hook by such name has been removed or deprecated.\n   *\n   * @param {string} hookName The hook name to check.\n   * @returns {boolean} Returns `true` if the provided hook name was marked as deprecated or\n   * removed from API, `false` otherwise.\n   * @example\n   * ```js\n   * Handsontable.hooks.isDeprecated('skipLengthCache');\n   *\n   * // Results:\n   * true\n   * ```\n   */\n  isDeprecated(hookName) {\n    return DEPRECATED_HOOKS.has(hookName) || REMOVED_HOOKS.has(hookName);\n  }\n\n  /**\n   * Returns a boolean depending on if a hook by such name has been registered.\n   *\n   * @param {string} hookName The hook name to check.\n   * @returns {boolean} `true` for success, `false` otherwise.\n   * @example\n   * ```js\n   * Handsontable.hooks.isRegistered('beforeInit');\n   *\n   * // Results:\n   * true\n   * ```\n   */\n  isRegistered(hookName) {\n    return REGISTERED_HOOKS.indexOf(hookName) >= 0;\n  }\n\n  /**\n   * Returns an array of registered hooks.\n   *\n   * @returns {Array} An array of registered hooks.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.getRegistered();\n   *\n   * // Results:\n   * [\n   * ...\n   *   'beforeInit',\n   *   'beforeRender',\n   *   'beforeSetRangeEnd',\n   *   'beforeDrawBorders',\n   *   'beforeChange',\n   * ...\n   * ]\n   * ```\n   */\n  getRegistered() {\n    return REGISTERED_HOOKS;\n  }\n\n  /**\n   * Sets the order index of the callback in the bucket object.\n   *\n   * @private\n   * @param {object} bucket The bucket object.\n   * @param {string} key Hook name.\n   * @param {Function} callback Callback function.\n   * @param {number|undefined} orderIndex Order index of the callback.\n   */\n  setCallbackOrderIndex(bucket, key, callback, orderIndex) {\n    const normalizedOrderIndex = Number.isInteger(orderIndex) ? orderIndex : 0;\n    const orderMap = this.getCallbackOrderMap(bucket, key);\n\n    orderMap.set(normalizedOrderIndex, [...(orderMap.get(normalizedOrderIndex) || []), callback]);\n  }\n\n  /**\n   * Reorders the callbacks in the bucket object by their order index.\n   *\n   * @private\n   * @param {objcet} bucket The bucket object.\n   * @param {string} key Hook name.\n   */\n  orderBucketByOrderIndex(bucket, key) {\n    const orderMap = this.getCallbackOrderMap(bucket, key);\n\n    if (\n      orderMap === undefined ||\n      orderMap.size === 0 ||\n      (orderMap.size === 1 && orderMap.has(0))\n    ) {\n      return;\n    }\n\n    bucket[key] = [...orderMap].sort((a, b) => a[0] - b[0]).flatMap(([, callbacks]) => callbacks);\n  }\n\n  /**\n   * Extends the bucket object with the order property.\n   *\n   * @private\n   * @param {object} bucket The bucket object.\n   * @param {string} hook The hook name.\n   */\n  initOrderMap(bucket, hook) {\n    if (!callbackOrder.has(bucket)) {\n      callbackOrder.set(bucket, []);\n    }\n\n    callbackOrder.get(bucket)[hook] = new Map();\n  }\n\n  /**\n   * Returns the order map for the provided hook.\n   *\n   * @private\n   * @param {object} bucket The bucket object.\n   * @param {string} hook The hook name.\n   * @returns {Map<number, Array<Function>>} Returns the order map for the provided hook.\n   */\n  getCallbackOrderMap(bucket, hook) {\n    return callbackOrder.get(bucket)[hook];\n  }\n}\n\nconst globalSingleton = new Hooks();\n\n/**\n * @returns {Hooks}\n */\nfunction getGlobalSingleton() {\n  return globalSingleton;\n}\n\nexport default Hooks;\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n  defineProperty(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n  activeXDocument = null;\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    activeXDocument = new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = typeof document != 'undefined'\n    ? document.domain && activeXDocument\n      ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n      : NullProtoObjectViaIFrame()\n    : NullProtoObjectViaActiveX(activeXDocument); // WSH\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var props = toIndexedObject(Properties);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n  return O;\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","/* eslint-disable no-console */\n/* eslint-disable no-restricted-globals */\n\n/**\n * \"In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened\n * for a particular tab.\".\n *\n * Source: https://stackoverflow.com/a/5473193.\n */\n\nimport { isDefined } from './mixed';\n\n/**\n * Logs message to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function log(...args) {\n  if (isDefined(console)) {\n    console.log(...args);\n  }\n}\n\n/**\n * Logs warn to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function warn(...args) {\n  if (isDefined(console)) {\n    console.warn(...args);\n  }\n}\n\n/**\n * Logs info to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function info(...args) {\n  if (isDefined(console)) {\n    console.info(...args);\n  }\n}\n\n/**\n * Logs error to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nexport function error(...args) {\n  if (isDefined(console)) {\n    console.error(...args);\n  }\n}\n","export const collection = new Map();\n\n/**\n * @param {string} namespace The namespace for the storage.\n * @returns {object}\n */\nexport default function staticRegister(namespace = 'common') {\n  if (!collection.has(namespace)) {\n    collection.set(namespace, new Map());\n  }\n  const subCollection = collection.get(namespace);\n\n  /**\n   * Register an item to the collection. If the item under the same was exist earlier then this item will be replaced with new one.\n   *\n   * @param {string} name Identification of the item.\n   * @param {*} item Item to save in the collection.\n   */\n  function register(name, item) {\n    subCollection.set(name, item);\n  }\n\n  /**\n   * Retrieve the item from the collection.\n   *\n   * @param {string} name Identification of the item.\n   * @returns {*} Returns item which was saved in the collection.\n   */\n  function getItem(name) {\n    return subCollection.get(name);\n  }\n\n  /**\n   * Check if item under specified name is exists.\n   *\n   * @param {string} name Identification of the item.\n   * @returns {boolean} Returns `true` or `false` depends on if element exists in the collection.\n   */\n  function hasItem(name) {\n    return subCollection.has(name);\n  }\n\n  /**\n   * Retrieve list of names registered from the collection.\n   *\n   * @returns {Array} Returns an array of strings with all names under which objects are stored.\n   */\n  function getNames() {\n    return [...subCollection.keys()];\n  }\n\n  /**\n   * Retrieve all registered values from the collection.\n   *\n   * @returns {Array} Returns an array with all values stored in the collection.\n   */\n  function getValues() {\n    return [...subCollection.values()];\n  }\n\n  return {\n    register,\n    getItem,\n    hasItem,\n    getNames,\n    getValues,\n  };\n}\n","import { stopImmediatePropagation as _stopImmediatePropagation } from './helpers/dom/event';\n\n/**\n * Counter which tracks unregistered listeners (useful for detecting memory leaks).\n *\n * @type {number}\n */\nlet listenersCounter = 0;\n\n/**\n * Event DOM manager for internal use in Handsontable.\n *\n * @class EventManager\n */\nclass EventManager {\n  /**\n   * @type {object}\n   */\n  context;\n\n  /**\n   * @param {object} [context=null] An object to which event listeners will be stored.\n   * @private\n   */\n  constructor(context = null) {\n    this.context = context || this;\n\n    // TODO it modify external object. Rethink that.\n    if (!this.context.eventListeners) {\n      this.context.eventListeners = []; // TODO perf It would be more performant if every instance of EventManager tracked its own listeners only\n    }\n  }\n\n  /**\n   * Register specified listener (`eventName`) to the element.\n   *\n   * @param {Element} element Target element.\n   * @param {string} eventName Event name.\n   * @param {Function} callback Function which will be called after event occur.\n   * @param {AddEventListenerOptions|boolean} [options] Listener options if object or useCapture if boolean.\n   * @returns {Function} Returns function which you can easily call to remove that event.\n   */\n  addEventListener(element, eventName, callback, options = false) {\n    /**\n     * @private\n     * @param {Event} event The event object.\n     */\n    function callbackProxy(event) {\n      callback.call(this, extendEvent(event));\n    }\n\n    this.context.eventListeners.push({\n      element,\n      event: eventName,\n      callback,\n      callbackProxy,\n      options,\n      eventManager: this\n    });\n\n    element.addEventListener(eventName, callbackProxy, options);\n    listenersCounter += 1;\n\n    return () => {\n      this.removeEventListener(element, eventName, callback);\n    };\n  }\n\n  /**\n   * Remove the event listener previously registered.\n   *\n   * @param {Element} element Target element.\n   * @param {string} eventName Event name.\n   * @param {Function} callback Function to remove from the event target. It must be the same as during registration listener.\n   * @param {boolean} [onlyOwnEvents] Whether whould remove only events registered using this instance of EventManager.\n   */\n  removeEventListener(element, eventName, callback, onlyOwnEvents = false) {\n    let len = this.context.eventListeners.length;\n    let tmpEvent;\n\n    while (len) {\n      len -= 1;\n      tmpEvent = this.context.eventListeners[len];\n\n      if (tmpEvent.event === eventName && tmpEvent.element === element) {\n        if (callback && callback !== tmpEvent.callback) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n        // TODO rethink that, main bulk is that it needs multi instances to handle same context, but with a different scopes.\n        // TODO I suppose much more efficient way will be comparing string with scope id, or any similar approach.\n        if (onlyOwnEvents && tmpEvent.eventManager !== this) {\n          continue;\n        }\n        this.context.eventListeners.splice(len, 1);\n        tmpEvent.element.removeEventListener(tmpEvent.event, tmpEvent.callbackProxy, tmpEvent.options);\n        listenersCounter -= 1;\n      }\n    }\n  }\n\n  /**\n   * Clear all previously registered events.\n   *\n   * @private\n   * @since 0.15.0-beta3\n   * @param {boolean} [onlyOwnEvents] Whether whould remove only events registered using this instance of EventManager.\n   */\n  clearEvents(onlyOwnEvents = false) {\n    if (!this.context) {\n      return;\n    }\n    let len = this.context.eventListeners.length;\n\n    while (len) {\n      len -= 1;\n      const event = this.context.eventListeners[len];\n\n      if (onlyOwnEvents && event.eventManager !== this) {\n        continue;\n      }\n      this.context.eventListeners.splice(len, 1);\n      event.element.removeEventListener(event.event, event.callbackProxy, event.options);\n      listenersCounter -= 1;\n    }\n  }\n\n  /**\n   * Clear all previously registered events.\n   */\n  clear() {\n    this.clearEvents();\n  }\n\n  /**\n   * Destroy instance of EventManager, clearing all events of the context.\n   */\n  destroy() {\n    this.clearEvents();\n    this.context = null;\n  }\n\n  /**\n   * Destroy instance of EventManager, clearing only the own events.\n   */\n  destroyWithOwnEventsOnly() {\n    this.clearEvents(true);\n    this.context = null;\n  }\n\n  /**\n   * Trigger event at the specified target element.\n   *\n   * @param {Element} element Target element.\n   * @param {string} eventName Event name.\n   */\n  fireEvent(element, eventName) {\n    let rootDocument = element.document;\n    let rootWindow = element;\n\n    if (!rootDocument) {\n      rootDocument = element.ownerDocument ? element.ownerDocument : element;\n      rootWindow = rootDocument.defaultView;\n    }\n\n    const options = {\n      bubbles: true,\n      cancelable: (eventName !== 'mousemove'),\n      view: rootWindow,\n      detail: 0,\n      screenX: 0,\n      screenY: 0,\n      clientX: 1,\n      clientY: 1,\n      ctrlKey: false,\n      altKey: false,\n      shiftKey: false,\n      metaKey: false,\n      button: 0,\n      relatedTarget: undefined,\n    };\n    let event;\n\n    if (rootDocument.createEvent) {\n      event = rootDocument.createEvent('MouseEvents');\n      event.initMouseEvent(eventName, options.bubbles, options.cancelable,\n        options.view, options.detail,\n        options.screenX, options.screenY, options.clientX, options.clientY,\n        options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,\n        options.button, options.relatedTarget || rootDocument.body.parentNode);\n\n    } else {\n      event = rootDocument.createEventObject();\n    }\n\n    if (element.dispatchEvent) {\n      element.dispatchEvent(event);\n    } else {\n      element.fireEvent(`on${eventName}`, event);\n    }\n  }\n}\n\n/**\n * @private\n * @param {Event} event The event object.\n * @returns {Event}\n */\nfunction extendEvent(event) {\n  const nativeStopImmediatePropagation = event.stopImmediatePropagation;\n\n  event.stopImmediatePropagation = function() {\n    nativeStopImmediatePropagation.apply(this);\n    _stopImmediatePropagation(this);\n  };\n\n  return event;\n}\n\nexport default EventManager;\n\n/**\n * @private\n * @returns {number}\n */\nexport function getListenersCounter() {\n  return listenersCounter;\n}\n","import { warn } from './helpers/console';\nimport { isOutsideInput } from './helpers/dom/element';\nimport { debounce } from './helpers/function';\n\n/**\n * Possible focus modes.\n * - CELL - The browser's focus stays on the lastly selected cell element.\n * - MIXED - The browser's focus switches from the lastly selected cell element to the currently active editor's\n * `TEXTAREA` element after a delay defined in the manager.\n *\n * @type {{CELL: string, MIXED: string}}\n */\nconst FOCUS_MODES = Object.freeze({\n  CELL: 'cell',\n  MIXED: 'mixed',\n});\n\n/**\n * Manages the browser's focus in the table.\n */\nexport class FocusManager {\n  /**\n   * The Handsontable instance.\n   */\n  #hot;\n  /**\n   * The currently enabled focus mode.\n   * Can be either:\n   *\n   * - 'cell' - The browser's focus stays on the lastly selected cell element.\n   * - 'mixed' - The browser's focus switches from the lastly selected cell element to the currently active editor's\n   * `TEXTAREA` element after a delay defined in the manager.\n   *\n   * @type {'cell' | 'mixed'}\n   */\n  #focusMode;\n  /**\n   * The delay after which the focus switches from the lastly selected cell to the active editor's `TEXTAREA`\n   * element if the focus mode is set to 'mixed'.\n   *\n   * @type {number}\n   */\n  #refocusDelay = 1;\n  /**\n   * Getter function for the element to be used when refocusing the browser after a delay. If `null`, the active\n   * editor's `TEXTAREA` element will be used.\n   *\n   * @type {null|Function}\n   */\n  #refocusElementGetter = null;\n  /**\n   * Map of the debounced `select` functions.\n   *\n   * @type {Map<number, Function>}\n   */\n  #debouncedSelect = new Map();\n\n  constructor(hotInstance) {\n    const hotSettings = hotInstance.getSettings();\n\n    this.#hot = hotInstance;\n    this.#focusMode = hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL;\n\n    this.#hot.addHook('afterUpdateSettings', (...args) => this.#onUpdateSettings(...args));\n    this.#hot.addHook('afterSelection', (...args) => this.#focusCell(...args));\n    this.#hot.addHook('afterSelectionFocusSet', (...args) => this.#focusCell(...args));\n    this.#hot.addHook('afterSelectionEnd', (...args) => this.#focusEditorElement(...args));\n  }\n\n  /**\n   * Get the current focus mode.\n   *\n   * @returns {'cell' | 'mixed'}\n   */\n  getFocusMode() {\n    return this.#focusMode;\n  }\n\n  /**\n   * Set the focus mode.\n   *\n   * @param {'cell' | 'mixed'} focusMode The new focus mode.\n   */\n  setFocusMode(focusMode) {\n    if (Object.values(FOCUS_MODES).includes(focusMode)) {\n      this.#focusMode = focusMode;\n\n    } else {\n      warn(`\"${focusMode}\" is not a valid focus mode.`);\n    }\n  }\n\n  /**\n   * Get the delay after which the focus will change from the cell elements to the active editor's `TEXTAREA`\n   * element if the focus mode is set to 'mixed'.\n   *\n   * @returns {number} Delay in milliseconds.\n   */\n  getRefocusDelay() {\n    return this.#refocusDelay;\n  }\n\n  /**\n   * Set the delay after which the focus will change from the cell elements to the active editor's `TEXTAREA`\n   * element if the focus mode is set to 'mixed'.\n   *\n   * @param {number} delay Delay in milliseconds.\n   */\n  setRefocusDelay(delay) {\n    this.#refocusDelay = delay;\n  }\n\n  /**\n   * Set the function to be used as the \"refocus element\" getter. It should return a focusable HTML element.\n   *\n   * @param {Function} getRefocusElementFunction The refocus element getter.\n   */\n  setRefocusElementGetter(getRefocusElementFunction) {\n    this.#refocusElementGetter = getRefocusElementFunction;\n  }\n\n  /**\n   * Get the element to be used when refocusing the browser after a delay in case of the focus mode being 'mixed'.\n   *\n   * @returns {HTMLTextAreaElement|HTMLElement|undefined}\n   */\n  getRefocusElement() {\n    if (typeof this.#refocusElementGetter === 'function') {\n      return this.#refocusElementGetter();\n\n    } else {\n      return this.#hot.getActiveEditor()?.TEXTAREA;\n    }\n  }\n\n  /**\n   * Set the browser's focus to the highlighted cell of the last selection.\n   *\n   * @param {HTMLTableCellElement} [selectedCell] The highlighted cell/header element.\n   */\n  focusOnHighlightedCell(selectedCell) {\n    const focusElement = (element) => {\n      const currentHighlightCoords = this.#hot.getSelectedRangeLast()?.highlight;\n\n      if (!currentHighlightCoords) {\n        return;\n      }\n\n      let elementToBeFocused = this.#hot.runHooks(\n        'modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, element\n      );\n\n      if (!(elementToBeFocused instanceof HTMLElement)) {\n        elementToBeFocused = element;\n      }\n\n      if (\n        elementToBeFocused &&\n        !this.#hot.getActiveEditor()?.isOpened()\n      ) {\n        elementToBeFocused.focus({\n          preventScroll: true\n        });\n      }\n    };\n\n    if (selectedCell) {\n      focusElement(selectedCell);\n    } else {\n      this.#getSelectedCell(element => focusElement(element));\n    }\n  }\n\n  /**\n   * Set the focus to the active editor's `TEXTAREA` element after the provided delay. If no delay is provided, it\n   * will be taken from the manager's configuration.\n   *\n   * @param {number} [delay] Delay in milliseconds.\n   */\n  refocusToEditorTextarea(delay = this.#refocusDelay) {\n    const refocusElement = this.getRefocusElement();\n\n    // Re-focus on the editor's `TEXTAREA` element (or a predefined element) if the `imeFastEdit` option is enabled.\n    if (\n      this.#hot.getSettings().imeFastEdit &&\n      !this.#hot.getActiveEditor()?.isOpened() &&\n      !!refocusElement\n    ) {\n      if (!this.#debouncedSelect.has(delay)) {\n        this.#debouncedSelect.set(delay, debounce(() => {\n          refocusElement.select();\n        }, delay));\n      }\n\n      this.#debouncedSelect.get(delay)();\n    }\n  }\n\n  /**\n   * Get and return the currently selected and highlighted cell/header element.\n   *\n   * @param {Function} callback Callback function to be called after the cell element is retrieved.\n   */\n  #getSelectedCell(callback) {\n    const highlight = this.#hot.getSelectedRangeLast()?.highlight;\n\n    if (!highlight || !this.#hot.selection.isCellVisible(highlight)) {\n      callback(null);\n\n      return;\n    }\n\n    const cell = this.#hot.getCell(highlight.row, highlight.col, true);\n\n    if (cell === null) {\n      this.#hot.addHookOnce('afterScroll', () => {\n        callback(this.#hot.getCell(highlight.row, highlight.col, true));\n      });\n\n    } else {\n      callback(cell);\n    }\n  }\n\n  /**\n   * Manage the browser's focus after each cell selection change.\n   */\n  #focusCell() {\n    this.#getSelectedCell((selectedCell) => {\n      const { activeElement } = this.#hot.rootDocument;\n\n      // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)\n      // and resets the `document.activeElement` property. The blurring should happen only when the\n      // previously selected input element has not belonged to the Handsontable editor. If blurring is\n      // triggered for all elements, there is a problem with the disappearing IME editor (#9672).\n      if (activeElement && isOutsideInput(activeElement)) {\n        activeElement.blur();\n      }\n\n      this.focusOnHighlightedCell(selectedCell);\n    });\n  }\n\n  /**\n   * Manage the browser's focus after cell selection end.\n   */\n  #focusEditorElement() {\n    this.#getSelectedCell((selectedCell) => {\n      if (\n        this.getFocusMode() === FOCUS_MODES.MIXED &&\n        selectedCell.nodeName === 'TD'\n      ) {\n        this.refocusToEditorTextarea();\n      }\n    });\n  }\n\n  /**\n   * Update the manager configuration after calling `updateSettings`.\n   *\n   * @param {object} newSettings The new settings passed to the `updateSettings` method.\n   */\n  #onUpdateSettings(newSettings) {\n    if (typeof newSettings.imeFastEdit === 'boolean') {\n      this.setFocusMode(newSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);\n    }\n  }\n}\n","import { isEmpty } from './../helpers/mixed';\n\nconst ESCAPED_HTML_CHARS = {\n  '&nbsp;': '\\x20',\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n};\nconst regEscapedChars = new RegExp(Object.keys(ESCAPED_HTML_CHARS).map(key => `(${key})`).join('|'), 'gi');\n\n/**\n * Verifies if node is an HTMLTable element.\n *\n * @param {Node} element Node to verify if it's an HTMLTable.\n * @returns {boolean}\n */\nfunction isHTMLTable(element) {\n  return (element && element.nodeName || '') === 'TABLE';\n}\n\n/**\n * Converts Handsontable into HTMLTableElement.\n *\n * @param {Core} instance The Handsontable instance.\n * @returns {string} OuterHTML of the HTMLTableElement.\n */\nexport function instanceToHTML(instance) {\n  const hasColumnHeaders = instance.hasColHeaders();\n  const hasRowHeaders = instance.hasRowHeaders();\n  const coords = [\n    hasColumnHeaders ? -1 : 0,\n    hasRowHeaders ? -1 : 0,\n    instance.countRows() - 1,\n    instance.countCols() - 1,\n  ];\n  const data = instance.getData(...coords);\n  const countRows = data.length;\n  const countCols = countRows > 0 ? data[0].length : 0;\n  const TABLE = ['<table>', '</table>'];\n  const THEAD = hasColumnHeaders ? ['<thead>', '</thead>'] : [];\n  const TBODY = ['<tbody>', '</tbody>'];\n  const rowModifier = hasRowHeaders ? 1 : 0;\n  const columnModifier = hasColumnHeaders ? 1 : 0;\n\n  for (let row = 0; row < countRows; row += 1) {\n    const isColumnHeadersRow = hasColumnHeaders && row === 0;\n    const CELLS = [];\n\n    for (let column = 0; column < countCols; column += 1) {\n      const isRowHeadersColumn = !isColumnHeadersRow && hasRowHeaders && column === 0;\n      let cell = '';\n\n      if (isColumnHeadersRow) {\n        cell = `<th>${instance.getColHeader(column - rowModifier)}</th>`;\n\n      } else if (isRowHeadersColumn) {\n        cell = `<th>${instance.getRowHeader(row - columnModifier)}</th>`;\n\n      } else {\n        const cellData = data[row][column];\n        const { hidden, rowspan, colspan } = instance.getCellMeta(row - columnModifier, column - rowModifier);\n\n        if (!hidden) {\n          const attrs = [];\n\n          if (rowspan) {\n            attrs.push(`rowspan=\"${rowspan}\"`);\n          }\n          if (colspan) {\n            attrs.push(`colspan=\"${colspan}\"`);\n          }\n          if (isEmpty(cellData)) {\n            cell = `<td ${attrs.join(' ')}></td>`;\n          } else {\n            const value = cellData.toString()\n              .replace('<', '&lt;')\n              .replace('>', '&gt;')\n              .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n')\n              .replace(/\\x20/gi, '&nbsp;')\n              .replace(/\\t/gi, '&#9;');\n\n            cell = `<td ${attrs.join(' ')}>${value}</td>`;\n          }\n        }\n      }\n\n      CELLS.push(cell);\n    }\n\n    const TR = ['<tr>', ...CELLS, '</tr>'].join('');\n\n    if (isColumnHeadersRow) {\n      THEAD.splice(1, 0, TR);\n    } else {\n      TBODY.splice(-1, 0, TR);\n    }\n  }\n\n  TABLE.splice(1, 0, THEAD.join(''), TBODY.join(''));\n\n  return TABLE.join('');\n}\n\n/**\n * Converts 2D array into HTMLTableElement.\n *\n * @param {Array} input Input array which will be converted to HTMLTable.\n * @returns {string} OuterHTML of the HTMLTableElement.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function _dataToHTML(input) {\n  const inputLen = input.length;\n  const result = ['<table>'];\n\n  for (let row = 0; row < inputLen; row += 1) {\n    const rowData = input[row];\n    const columnsLen = rowData.length;\n    const columnsResult = [];\n\n    if (row === 0) {\n      result.push('<tbody>');\n    }\n\n    for (let column = 0; column < columnsLen; column += 1) {\n      const cellData = rowData[column];\n      const parsedCellData = isEmpty(cellData) ?\n        '' :\n        cellData.toString()\n          .replace(/&/g, '&amp;')\n          .replace(/</g, '&lt;')\n          .replace(/>/g, '&gt;')\n          .replace(/(<br(\\s*|\\/)>(\\r\\n|\\n)?|\\r\\n|\\n)/g, '<br>\\r\\n')\n          .replace(/\\x20{2,}/gi, (substring) => {\n            // The way how Excel serializes data with at least two spaces.\n            return `<span style=\"mso-spacerun: yes\">${'&nbsp;'.repeat(substring.length - 1)} </span>`;\n          })\n          .replace(/\\t/gi, '&#9;');\n\n      columnsResult.push(`<td>${parsedCellData}</td>`);\n    }\n\n    result.push('<tr>', ...columnsResult, '</tr>');\n\n    if (row + 1 === inputLen) {\n      result.push('</tbody>');\n    }\n  }\n\n  result.push('</table>');\n\n  return result.join('');\n}\n\n/**\n * Converts HTMLTable or string into Handsontable configuration object.\n *\n * @param {Element|string} element Node element which should contain `<table>...</table>`.\n * @param {Document} [rootDocument] The document window owner.\n * @returns {object} Return configuration object. Contains keys as DefaultSettings.\n */\n// eslint-disable-next-line no-restricted-globals\nexport function htmlToGridSettings(element, rootDocument = document) {\n  const settingsObj = {};\n  const fragment = rootDocument.createDocumentFragment();\n  const tempElem = rootDocument.createElement('div');\n\n  fragment.appendChild(tempElem);\n\n  let checkElement = element;\n\n  if (typeof checkElement === 'string') {\n    const escapedAdjacentHTML = checkElement.replace(/<td\\b[^>]*?>([\\s\\S]*?)<\\/\\s*td>/g, (cellFragment) => {\n      const openingTag = cellFragment.match(/<td\\b[^>]*?>/g)[0];\n      const paragraphRegexp = /<p.*?>/g;\n      const cellValue = cellFragment\n        .substring(openingTag.length, cellFragment.lastIndexOf('<'))\n        .trim() // Removing whitespaces from the start and the end of HTML fragment\n        .replaceAll(/\\n\\s+/g, ' ') // HTML tags may be split using multiple new lines and whitespaces\n        .replaceAll(paragraphRegexp, '\\n') // Only paragraphs should split text using new line characters\n        .replace('\\n', '') // First paragraph shouldn't start with new line characters\n        .replaceAll(/<\\/(.*)>\\s+$/mg, '</$1>') // HTML tags may end with whitespace.\n        .replace(/(<(?!br)([^>]+)>)/gi, '') // Removing HTML tags\n        .replaceAll(/^&nbsp;$/mg, ''); // Removing single &nbsp; characters separating new lines\n      const closingTag = '</td>';\n\n      return `${openingTag}${cellValue}${closingTag}`;\n    });\n\n    tempElem.insertAdjacentHTML('afterbegin', `${escapedAdjacentHTML}`);\n    checkElement = tempElem.querySelector('table');\n  }\n\n  if (!checkElement || !isHTMLTable(checkElement)) {\n    return;\n  }\n\n  const generator = tempElem.querySelector('meta[name$=\"enerator\"]');\n  const hasRowHeaders = checkElement.querySelector('tbody th') !== null;\n  const trElement = checkElement.querySelector('tr');\n  const countCols = !trElement ? 0 : Array.from(trElement.cells)\n    .reduce((cols, cell) => cols + cell.colSpan, 0) - (hasRowHeaders ? 1 : 0);\n  const fixedRowsBottom = checkElement.tFoot && Array.from(checkElement.tFoot.rows) || [];\n  const fixedRowsTop = [];\n  let hasColHeaders = false;\n  let thRowsLen = 0;\n  let countRows = 0;\n\n  if (checkElement.tHead) {\n    const thRows = Array.from(checkElement.tHead.rows).filter((tr) => {\n      const isDataRow = tr.querySelector('td') !== null;\n\n      if (isDataRow) {\n        fixedRowsTop.push(tr);\n      }\n\n      return !isDataRow;\n    });\n\n    thRowsLen = thRows.length;\n    hasColHeaders = thRowsLen > 0;\n\n    if (thRowsLen > 1) {\n      settingsObj.nestedHeaders = Array.from(thRows).reduce((rows, row) => {\n        const headersRow = Array.from(row.cells).reduce((headers, header, currentIndex) => {\n          if (hasRowHeaders && currentIndex === 0) {\n            return headers;\n          }\n\n          const {\n            colSpan: colspan,\n            innerHTML,\n          } = header;\n          const nextHeader = colspan > 1 ? { label: innerHTML, colspan } : innerHTML;\n\n          headers.push(nextHeader);\n\n          return headers;\n        }, []);\n\n        rows.push(headersRow);\n\n        return rows;\n      }, []);\n\n    } else if (hasColHeaders) {\n      settingsObj.colHeaders = Array.from(thRows[0].children).reduce((headers, header, index) => {\n        if (hasRowHeaders && index === 0) {\n          return headers;\n        }\n\n        headers.push(header.innerHTML);\n\n        return headers;\n      }, []);\n    }\n  }\n\n  if (fixedRowsTop.length) {\n    settingsObj.fixedRowsTop = fixedRowsTop.length;\n  }\n  if (fixedRowsBottom.length) {\n    settingsObj.fixedRowsBottom = fixedRowsBottom.length;\n  }\n\n  const dataRows = [\n    ...fixedRowsTop,\n    ...Array.from(checkElement.tBodies).reduce((sections, section) => {\n      sections.push(...Array.from(section.rows));\n\n      return sections;\n    }, []),\n    ...fixedRowsBottom];\n\n  countRows = dataRows.length;\n\n  const dataArr = new Array(countRows);\n\n  for (let r = 0; r < countRows; r++) {\n    dataArr[r] = new Array(countCols);\n  }\n\n  const mergeCells = [];\n  const rowHeaders = [];\n\n  for (let row = 0; row < countRows; row++) {\n    const tr = dataRows[row];\n    const cells = Array.from(tr.cells);\n    const cellsLen = cells.length;\n\n    for (let cellId = 0; cellId < cellsLen; cellId++) {\n      const cell = cells[cellId];\n      const {\n        nodeName,\n        innerHTML,\n        rowSpan: rowspan,\n        colSpan: colspan,\n      } = cell;\n      const col = dataArr[row].findIndex(value => value === undefined);\n\n      if (nodeName === 'TD') {\n        if (rowspan > 1 || colspan > 1) {\n          for (let rstart = row; rstart < row + rowspan; rstart++) {\n            if (rstart < countRows) {\n              for (let cstart = col; cstart < col + colspan; cstart++) {\n                dataArr[rstart][cstart] = null;\n              }\n            }\n          }\n\n          const styleAttr = cell.getAttribute('style');\n          const ignoreMerge = styleAttr && styleAttr.includes('mso-ignore:colspan');\n\n          if (!ignoreMerge) {\n            mergeCells.push({ col, row, rowspan, colspan });\n          }\n        }\n\n        let cellValue = '';\n\n        if (generator && /excel/gi.test(generator.content)) {\n          cellValue = innerHTML.replace(/[\\r\\n][\\x20]{0,2}/g, '\\x20')\n            .replace(/<br(\\s*|\\/)>[\\r\\n]?[\\x20]{0,3}/gim, '\\r\\n');\n\n        } else {\n          cellValue = innerHTML.replace(/<br(\\s*|\\/)>[\\r\\n]?/gim, '\\r\\n');\n        }\n\n        dataArr[row][col] = cellValue.replace(regEscapedChars, match => ESCAPED_HTML_CHARS[match]);\n\n      } else {\n        rowHeaders.push(innerHTML);\n      }\n    }\n  }\n\n  if (mergeCells.length) {\n    settingsObj.mergeCells = mergeCells;\n  }\n  if (rowHeaders.length) {\n    settingsObj.rowHeaders = rowHeaders;\n  }\n\n  if (dataArr.length) {\n    settingsObj.data = dataArr;\n  }\n\n  return settingsObj;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getSubstitution = require('../internals/get-substitution');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar $TypeError = TypeError;\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\n\n// `String.prototype.replaceAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\n$({ target: 'String', proto: true }, {\n  replaceAll: function replaceAll(searchValue, replaceValue) {\n    var O = requireObjectCoercible(this);\n    var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, position, replacement;\n    var endOfLastMatch = 0;\n    var result = '';\n    if (!isNullOrUndefined(searchValue)) {\n      IS_REG_EXP = isRegExp(searchValue);\n      if (IS_REG_EXP) {\n        flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));\n        if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes');\n      }\n      replacer = getMethod(searchValue, REPLACE);\n      if (replacer) return call(replacer, searchValue, O, replaceValue);\n      if (IS_PURE && IS_REG_EXP) return replace(toString(O), searchValue, replaceValue);\n    }\n    string = toString(O);\n    searchString = toString(searchValue);\n    functionalReplace = isCallable(replaceValue);\n    if (!functionalReplace) replaceValue = toString(replaceValue);\n    searchLength = searchString.length;\n    advanceBy = max(1, searchLength);\n    position = indexOf(string, searchString);\n    while (position !== -1) {\n      replacement = functionalReplace\n        ? toString(replaceValue(searchString, position, string))\n        : getSubstitution(searchString, string, position, [], undefined, replaceValue);\n      result += stringSlice(string, endOfLastMatch, position) + replacement;\n      endOfLastMatch = position + searchLength;\n      position = position + advanceBy > string.length ? -1 : indexOf(string, searchString, position + advanceBy);\n    }\n    if (endOfLastMatch < string.length) {\n      result += stringSlice(string, endOfLastMatch);\n    }\n    return result;\n  }\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n  var flags = R.flags;\n  return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n    ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.hasIndices) result += 'd';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.unicodeSets) result += 'v';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (charAt(ch, 0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return stringSlice(str, 0, position);\n      case \"'\": return stringSlice(str, tailPos);\n      case '<':\n        capture = namedCaptures[stringSlice(ch, 1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n","/**\n * Utility to register plugins and common namespace for keeping the reference to all plugins classes.\n */\nimport { toUpperCaseFirst } from '../helpers/string';\nimport { createPriorityMap } from '../utils/dataStructures/priorityMap';\nimport { createUniqueMap } from '../utils/dataStructures/uniqueMap';\nimport { createUniqueSet } from '../utils/dataStructures/uniqueSet';\n\nconst ERROR_PLUGIN_REGISTERED = pluginName => `There is already registered \"${pluginName}\" plugin.`;\nconst ERROR_PRIORITY_REGISTERED = priority => `There is already registered plugin on priority \"${priority}\".`;\nconst ERROR_PRIORITY_NAN = priority => `The priority \"${priority}\" is not a number.`;\n\n/**\n * Stores plugins' names' queue with their priorities.\n */\nconst priorityPluginsQueue = createPriorityMap({\n  errorPriorityExists: ERROR_PRIORITY_REGISTERED,\n  errorPriorityNaN: ERROR_PRIORITY_NAN,\n});\n/**\n * Stores plugins names' queue by registration order.\n */\nconst uniquePluginsQueue = createUniqueSet({\n  errorItemExists: ERROR_PLUGIN_REGISTERED,\n});\n/**\n * Stores plugins references between their name and class.\n */\nconst uniquePluginsList = createUniqueMap({\n  errorIdExists: ERROR_PLUGIN_REGISTERED,\n});\n\n/**\n * Gets registered plugins' names in the following order:\n * 1) Plugins registered with a defined priority attribute, in the ascending order of priority.\n * 2) Plugins registered without a defined priority attribute, in the registration order.\n *\n * @returns {string[]}\n */\nexport function getPluginsNames() {\n  return [\n    ...priorityPluginsQueue.getItems(),\n    ...uniquePluginsQueue.getItems(),\n  ];\n}\n\n/**\n * Gets registered plugin's class based on the given name.\n *\n * @param {string} pluginName Plugin's name.\n * @returns {BasePlugin}\n */\nexport function getPlugin(pluginName) {\n  const unifiedPluginName = toUpperCaseFirst(pluginName);\n\n  return uniquePluginsList.getItem(unifiedPluginName);\n}\n\n/**\n * Checks if the plugin under the name is already registered.\n *\n * @param {string} pluginName Plugin's name.\n * @returns {boolean}\n */\nexport function hasPlugin(pluginName) {\n  /* eslint-disable no-unneeded-ternary */\n  return getPlugin(pluginName) ? true : false;\n}\n\n/**\n * Registers plugin under the given name only once.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n */\nexport function registerPlugin(pluginName, pluginClass, priority) {\n  [pluginName, pluginClass, priority] = unifyPluginArguments(pluginName, pluginClass, priority);\n\n  if (getPlugin(pluginName) === undefined) {\n    _registerPlugin(pluginName, pluginClass, priority);\n  }\n}\n\n/**\n * Registers plugin under the given name.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n */\nfunction _registerPlugin(pluginName, pluginClass, priority) {\n  const unifiedPluginName = toUpperCaseFirst(pluginName);\n\n  if (uniquePluginsList.hasItem(unifiedPluginName)) {\n    throw new Error(ERROR_PLUGIN_REGISTERED(unifiedPluginName));\n  }\n\n  if (priority === undefined) {\n    uniquePluginsQueue.addItem(unifiedPluginName);\n  } else {\n    priorityPluginsQueue.addItem(priority, unifiedPluginName);\n  }\n\n  uniquePluginsList.addItem(unifiedPluginName, pluginClass);\n}\n\n/**\n * Unifies arguments to register the plugin.\n *\n * @param {string|Function} pluginName The plugin name or plugin class.\n * @param {Function} [pluginClass] The plugin class.\n * @param {number} [priority] The plugin priority.\n * @returns {Array}\n */\nfunction unifyPluginArguments(pluginName, pluginClass, priority) {\n  if (typeof pluginName === 'function') {\n    pluginClass = pluginName;\n    pluginName = pluginClass.PLUGIN_KEY;\n    priority = pluginClass.PLUGIN_PRIORITY;\n  }\n\n  return [pluginName, pluginClass, priority];\n}\n","import { isNumeric } from '../../helpers/number';\nimport { isFunction } from '../../helpers/function';\n\nexport const ASC = 'asc';\nexport const DESC = 'desc';\nconst ORDER_MAP = new Map([\n  [ASC, [-1, 1]],\n  [DESC, [1, -1]],\n]);\nconst DEFAULT_ERROR_PRIORITY_EXISTS = priority => `The priority '${priority}' is already declared in a map.`;\nconst DEFAULT_ERROR_PRIORITY_NAN = priority => `The priority '${priority}' is not a number.`;\n\n/**\n * @typedef {object} PriorityMap\n * @property {Function} addItem Adds items to the priority map.\n * @property {Function} getItems Gets items from the passed map in a ASC or DESC order of priorities.\n */\n/**\n * Creates a new priority map.\n *\n * @param {object} config The config for priority map.\n * @param {Function} config.errorPriorityExists The function to generate a custom error message if priority is already taken.\n * @param {Function} config.errorPriorityNaN The function to generate a custom error message if priority is not a number.\n * @returns {PriorityMap}\n */\nexport function createPriorityMap({ errorPriorityExists, errorPriorityNaN } = {}) {\n  const priorityMap = new Map();\n\n  errorPriorityExists = isFunction(errorPriorityExists) ? errorPriorityExists : DEFAULT_ERROR_PRIORITY_EXISTS;\n  errorPriorityNaN = isFunction(errorPriorityNaN) ? errorPriorityNaN : DEFAULT_ERROR_PRIORITY_NAN;\n\n  /**\n   * Adds items to priority map. Throws an error if `priority` is not a number or if is already added.\n   *\n   * @param {number} priority The priority for adding item.\n   * @param {*} item The adding item.\n   */\n  function addItem(priority, item) {\n    if (!isNumeric(priority)) {\n      throw new Error(errorPriorityNaN(priority));\n    }\n    if (priorityMap.has(priority)) {\n      throw new Error(errorPriorityExists(priority));\n    }\n\n    priorityMap.set(priority, item);\n  }\n\n  /**\n   * Gets items from the passed map in a ASC or DESC order of priorities.\n   *\n   * @param {string} [order] The order for getting items. ASC is an default.\n   * @returns {*}\n   */\n  function getItems(order = ASC) {\n    const [left, right] = ORDER_MAP.get(order) || ORDER_MAP.get(ASC);\n\n    return [...priorityMap]\n      // we want to be sure we sort over a priority key\n      // if we are sure we can remove custom compare function\n      // then we should replace next line with a default `.sort()`\n      .sort((a, b) => (a[0] < b[0] ? left : right))\n      .map(item => item[1]);\n  }\n\n  return {\n    addItem,\n    getItems,\n  };\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * Checks if the passed value is numeric one. For example these values (passed as string or number)\n * are considered as numeric values:\n *  - 0.001\n *  - .001\n *  - 10000\n *  - 1e+26\n *  - 22e-26\n *  - .45e+26\n *  - 0xabcdef (hex)\n *  - 0x1 (hex)\n *\n * these values are not considered as numeric:\n *  - - 1000\n *  - 100 000\n *\n * @param {*} value The value to check.\n * @param {string[]} additionalDelimiters An additional delimiters to be used while checking the numeric value.\n * @returns {boolean}\n */\nexport function isNumeric(value, additionalDelimiters = []) {\n  const type = typeof value;\n\n  if (type === 'number') {\n    return !isNaN(value) && isFinite(value);\n\n  } else if (type === 'string') {\n    if (value.length === 0) {\n      return false;\n\n    } else if (value.length === 1) {\n      return /\\d/.test(value);\n    }\n\n    const delimiter = Array.from(new Set(['.', ...additionalDelimiters]))\n      .map(d => `\\\\${d}`)\n      .join('|');\n\n    return new RegExp(`^[+-]?(((${delimiter})?\\\\d+((${delimiter})\\\\d+)?(e[+-]?\\\\d+)?)|(0x[a-f\\\\d]+))$`, 'i')\n      .test(value.trim());\n\n  } else if (type === 'object') {\n    return !!value && typeof value.valueOf() === 'number' && !(value instanceof Date);\n  }\n\n  return false;\n}\n/* eslint-enable jsdoc/require-description-complete-sentence */\n\n/**\n * Checks if the passed value is numeric-like value. The helper returns `true` for the same\n * values as for the `isNumeric` function plus `true` for numbers delimited by comma.\n *\n * @param {*} value The value to check.\n * @returns {boolean}\n */\nexport function isNumericLike(value) {\n  return isNumeric(value, [',']);\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges.\n *\n * @param {number} rangeFrom The number from start iterate.\n * @param {number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nexport function rangeEach(rangeFrom, rangeTo, iteratee) {\n  let index = -1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = rangeFrom;\n  } else {\n    index = rangeFrom - 1;\n  }\n\n  /* eslint-disable-next-line no-plusplus */\n  while (++index <= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges iterable in reverse order.\n *\n * @param {number} rangeFrom The number from start iterate.\n * @param {number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nexport function rangeEachReverse(rangeFrom, rangeTo, iteratee) {\n  let index = rangeFrom + 1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = 0;\n  }\n  /* eslint-disable-next-line no-plusplus */\n  while (--index >= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n\n/**\n * Calculate value from percent.\n *\n * @param {number} value Base value from percent will be calculated.\n * @param {string|number} percent Can be number or string (eq. `'33%'`).\n * @returns {number}\n */\nexport function valueAccordingPercent(value, percent) {\n  percent = parseInt(percent.toString().replace('%', ''), 10);\n  percent = isNaN(percent) ? 0 : percent;\n\n  return parseInt(value * percent / 100, 10);\n}\n\n/**\n * Clamps the value between min and max.\n *\n * @param {number} value The base number value.\n * @param {number} minValue The max number value.\n * @param {number} maxValue The min number value.\n * @returns {number}\n */\nexport function clamp(value, minValue, maxValue) {\n  if (Math.min(value, minValue) === value) {\n    return minValue;\n\n  } else if (Math.max(value, maxValue) === value) {\n    return maxValue;\n  }\n\n  return value;\n}\n","import { isFunction } from '../../helpers/function';\n\nconst DEFAULT_ERROR_ID_EXISTS = id => `The id '${id}' is already declared in a map.`;\n\n/**\n * @typedef {object} UniqueMap\n * @property {Function} addItem Adds a new item to the unique map.\n * @property {Function} clear Clears the map.\n * @property {Function} getId Returns ID for the passed item.\n * @property {Function} getItem Gets item from the passed ID.\n * @property {Function} getItems Gets all items from the map.\n * @property {Function} hasItem Verifies if the passed ID exists in a map.\n * @property {Function} removeItem Removes item from the passed id if exists.\n */\n/**\n * Creates a new unique map.\n *\n * @param {object} config The config for priority queue.\n * @param {Function} config.errorIdExists The function to generate custom message if ID is already taken.\n * @returns {UniqueMap}\n */\nexport function createUniqueMap({ errorIdExists } = {}) {\n  const uniqueMap = new Map();\n\n  errorIdExists = isFunction(errorIdExists) ? errorIdExists : DEFAULT_ERROR_ID_EXISTS;\n\n  /**\n   * Adds a new item to the unique map. Throws error if `id` is already added.\n   *\n   * @param {*} id The ID of the adding item.\n   * @param {*} item The adding item.\n   */\n  function addItem(id, item) {\n    if (hasItem(id)) {\n      throw new Error(errorIdExists(id));\n    }\n\n    uniqueMap.set(id, item);\n  }\n\n  /**\n   * Removes item from the passed id if exists.\n   *\n   * @param {*} id The ID to remove.\n   * @returns {boolean}\n   */\n  function removeItem(id) {\n    return uniqueMap.delete(id);\n  }\n\n  /**\n   * Clears the map.\n   */\n  function clear() {\n    uniqueMap.clear();\n  }\n\n  /**\n   * Returns ID for the passed item.\n   *\n   * @param {*} item The item of the getting ID.\n   * @returns {*}\n   */\n  function getId(item) {\n    const [itemId] = getItems().find(([id, element]) => {\n      if (item === element) {\n        return id;\n      }\n\n      return false;\n    }) || [null];\n\n    return itemId;\n  }\n\n  /**\n   * Returns item from the passed ID.\n   *\n   * @param {*} id The ID of the getting item.\n   * @returns {*}\n   */\n  function getItem(id) {\n    return uniqueMap.get(id);\n  }\n\n  /**\n   * Gets all items from the map.\n   *\n   * @returns {Array}\n   */\n  function getItems() {\n    return [...uniqueMap];\n  }\n\n  /**\n   * Verifies if the passed ID exists in a map.\n   *\n   * @param {*} id The ID to check if registered.\n   * @returns {boolean}\n   */\n  function hasItem(id) {\n    return uniqueMap.has(id);\n  }\n\n  return {\n    addItem,\n    clear,\n    getId,\n    getItem,\n    getItems,\n    hasItem,\n    removeItem,\n  };\n}\n","import { isFunction } from '../../helpers/function';\n\nconst DEFAULT_ERROR_ITEM_EXISTS = item => `'${item}' value is already declared in a unique set.`;\n\n/**\n * @typedef {object} UniqueSet\n * @property {Function} addItem Adds items to the priority set.\n * @property {Function} getItems Gets items from the set in order of addition.\n */\n/**\n * Creates a new unique set.\n *\n * @param {object} config The config for priority set.\n * @param {Function} config.errorItemExists The function to generate custom error message if item is already in the set.\n * @returns {UniqueSet}\n */\nexport function createUniqueSet({ errorItemExists } = {}) {\n  const uniqueSet = new Set();\n\n  errorItemExists = isFunction(errorItemExists) ? errorItemExists : DEFAULT_ERROR_ITEM_EXISTS;\n\n  /**\n   * Adds items to the unique set. Throws an error if `item` is already added.\n   *\n   * @param {*} item The adding item.\n   */\n  function addItem(item) {\n    if (uniqueSet.has(item)) {\n      throw new Error(errorItemExists(item));\n    }\n\n    uniqueSet.add(item);\n  }\n\n  /**\n   * Gets items from the set in order of addition.\n   *\n   * @returns {*}\n   */\n  function getItems() {\n    return [...uniqueSet];\n  }\n\n  /**\n   * Clears the unique set.\n   */\n  function clear() {\n    uniqueSet.clear();\n  }\n\n  return {\n    addItem,\n    clear,\n    getItems,\n  };\n}\n","import staticRegister from '../utils/staticRegister';\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('renderers');\n\n/**\n * Retrieve renderer function.\n *\n * @param {string} name Renderer identification.\n * @returns {Function} Returns renderer function.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error(`No registered renderer found under \"${name}\" name`);\n  }\n\n  return getItem(name);\n}\n\n/**\n * Register renderer under its alias.\n *\n * @param {string|Function} name Renderer's alias or renderer function with its descriptor.\n * @param {Function} [renderer] Renderer function.\n */\nfunction _register(name, renderer) {\n  if (typeof name !== 'string') {\n    renderer = name;\n    name = renderer.RENDERER_TYPE;\n  }\n\n  register(name, renderer);\n}\n\nexport {\n  _register as registerRenderer,\n  _getItem as getRenderer,\n  hasItem as hasRenderer,\n  getNames as getRegisteredRendererNames,\n  getValues as getRegisteredRenderers,\n};\n","import staticRegister from '../utils/staticRegister';\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('validators');\n\n/**\n * Retrieve validator function.\n *\n * @param {string} name Validator identification.\n * @returns {Function} Returns validator function.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error(`No registered validator found under \"${name}\" name`);\n  }\n\n  return getItem(name);\n}\n\n/**\n * Register validator under its alias.\n *\n * @param {string|Function} name Validator's alias or validator function with its descriptor.\n * @param {Function} [validator] Validator function.\n */\nfunction _register(name, validator) {\n  if (typeof name !== 'string') {\n    validator = name;\n    name = validator.VALIDATOR_TYPE;\n  }\n\n  register(name, validator);\n}\n\nexport {\n  _register as registerValidator,\n  _getItem as getValidator,\n  hasItem as hasValidator,\n  getNames as getRegisteredValidatorNames,\n  getValues as getRegisteredValidators,\n};\n","import {\n  addClass,\n  clearTextSelection,\n  empty,\n  fastInnerHTML,\n  fastInnerText,\n  getScrollbarWidth,\n  hasClass,\n  isChildOf,\n  isInput,\n  isOutsideInput,\n  isVisible,\n  setAttribute,\n  getParentWindow,\n} from './helpers/dom/element';\nimport EventManager from './eventManager';\nimport { isImmediatePropagationStopped, isRightClick, isLeftClick } from './helpers/dom/event';\nimport Walkontable from './3rdparty/walkontable/src';\nimport { handleMouseEvent } from './selection/mouseEventHandler';\nimport { isRootInstance } from './utils/rootInstance';\nimport {\n  A11Y_COLCOUNT,\n  A11Y_MULTISELECTABLE,\n  A11Y_PRESENTATION,\n  A11Y_ROWCOUNT,\n  A11Y_TREEGRID\n} from './helpers/a11y';\n\n/**\n * @class TableView\n * @private\n */\nclass TableView {\n  /**\n   * Instance of {@link Handsontable}.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @private\n   * @type {EventManager}\n   */\n  eventManager;\n  /**\n   * Current Handsontable's GridSettings object.\n   *\n   * @private\n   * @type {GridSettings}\n   */\n  settings;\n  /**\n   * Main <THEAD> element.\n   *\n   * @private\n   * @type {HTMLTableSectionElement}\n   */\n  THEAD;\n  /**\n   * Main <TBODY> element.\n   *\n   * @private\n   * @type {HTMLTableSectionElement}\n   */\n  TBODY;\n  /**\n   * Main Walkontable instance.\n   *\n   * @private\n   * @type {Walkontable}\n   */\n  _wt;\n  /**\n   * Main Walkontable instance.\n   *\n   * @type {Walkontable}\n   */\n  activeWt;\n  /**\n   * The total number of the column header renderers applied to the table through the\n   * `afterGetColumnHeaderRenderers` hook.\n   *\n   * @type {number}\n   */\n  #columnHeadersCount = 0;\n  /**\n   * The total number of the row header renderers applied to the table through the\n   * `afterGetRowHeaderRenderers` hook.\n   *\n   * @type {number}\n   */\n  #rowHeadersCount = 0;\n  /**\n   * The flag determines if the `adjustElementsSize` method call was made during\n   * the render suspending. If true, the method has to be triggered once after render\n   * resuming.\n   *\n   * @private\n   * @type {boolean}\n   */\n  postponedAdjustElementsSize = false;\n  /**\n   * Defines if the text should be selected during mousemove.\n   *\n   * @type {boolean}\n   */\n  #selectionMouseDown = false;\n  /**\n   * @type {boolean}\n   */\n  #mouseDown;\n  /**\n   * Main <TABLE> element.\n   *\n   * @type {HTMLTableElement}\n   */\n  #table;\n  /**\n   * Cached width of the rootElement.\n   *\n   * @type {number}\n   */\n  #lastWidth = 0;\n  /**\n   * Cached height of the rootElement.\n   *\n   * @type {number}\n   */\n  #lastHeight = 0;\n\n  /**\n   * @param {Hanstontable} hotInstance Instance of {@link Handsontable}.\n   */\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n    this.eventManager = new EventManager(this.hot);\n    this.settings = this.hot.getSettings();\n\n    this.createElements();\n    this.registerEvents();\n    this.initializeWalkontable();\n  }\n\n  /**\n   * Renders WalkontableUI.\n   */\n  render() {\n    if (!this.hot.isRenderSuspended()) {\n      this.hot.runHooks('beforeRender', this.hot.forceFullRender);\n\n      if (this.postponedAdjustElementsSize) {\n        this.postponedAdjustElementsSize = false;\n\n        this.adjustElementsSize(true);\n      }\n\n      this._wt.draw(!this.hot.forceFullRender);\n      this.hot.runHooks('afterRender', this.hot.forceFullRender);\n      this.hot.forceFullRender = false;\n      this.hot.renderCall = false;\n    }\n  }\n\n  /**\n   * Adjust overlays elements size and master table size.\n   */\n  adjustElementsSize() {\n    if (this.hot.isRenderSuspended()) {\n      this.postponedAdjustElementsSize = true;\n    } else {\n      this._wt.wtOverlays.adjustElementsSize();\n    }\n  }\n\n  /**\n   * Returns td object given coordinates.\n   *\n   * @param {CellCoords} coords Renderable cell coordinates.\n   * @param {boolean} topmost Indicates whether the cell should be calculated from the topmost.\n   * @returns {HTMLTableCellElement|null}\n   */\n  getCellAtCoords(coords, topmost) {\n    const td = this._wt.getCell(coords, topmost);\n\n    if (td < 0) { // there was an exit code (cell is out of bounds)\n      return null;\n    }\n\n    return td;\n  }\n\n  /**\n   * Scroll viewport to a cell.\n   *\n   * @param {CellCoords} coords Renderable cell coordinates.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right side of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom side of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left side of the table.\n   * @returns {boolean}\n   */\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    return this._wt.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n  }\n\n  /**\n   * Scroll viewport to a column.\n   *\n   * @param {number} column Renderable column index.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right side of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left side of the table.\n   * @returns {boolean}\n   */\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    return this._wt.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n  }\n\n  /**\n   * Scroll viewport to a row.\n   *\n   * @param {number} row Renderable row index.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom side of the table.\n   * @returns {boolean}\n   */\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    return this._wt.scrollViewportVertically(row, snapToTop, snapToBottom);\n  }\n\n  /**\n   * Prepares DOMElements and adds correct className to the root element.\n   *\n   * @private\n   */\n  createElements() {\n    const { rootElement, rootDocument } = this.hot;\n    const originalStyle = rootElement.getAttribute('style');\n\n    if (originalStyle) {\n      rootElement.setAttribute('data-originalstyle', originalStyle); // needed to retrieve original style in jsFiddle link generator in HT examples. may be removed in future versions\n    }\n\n    addClass(rootElement, 'handsontable');\n\n    this.#table = rootDocument.createElement('TABLE');\n    addClass(this.#table, 'htCore');\n\n    if (this.hot.getSettings().tableClassName) {\n      addClass(this.#table, this.hot.getSettings().tableClassName);\n    }\n\n    if (this.settings.ariaTags) {\n      setAttribute(this.#table, [\n        A11Y_PRESENTATION()\n      ]);\n\n      setAttribute(rootElement, [\n        A11Y_TREEGRID(),\n        A11Y_ROWCOUNT(-1),\n        A11Y_COLCOUNT(this.hot.countCols()),\n        A11Y_MULTISELECTABLE(),\n      ]);\n    }\n\n    this.THEAD = rootDocument.createElement('THEAD');\n    this.#table.appendChild(this.THEAD);\n\n    this.TBODY = rootDocument.createElement('TBODY');\n    this.#table.appendChild(this.TBODY);\n\n    this.hot.table = this.#table;\n\n    this.hot.container.insertBefore(this.#table, this.hot.container.firstChild);\n  }\n\n  /**\n   * Attaches necessary listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { rootElement, rootDocument, selection, rootWindow } = this.hot;\n    const documentElement = rootDocument.documentElement;\n\n    this.eventManager.addEventListener(rootElement, 'mousedown', (event) => {\n      this.#selectionMouseDown = true;\n\n      if (!this.isTextSelectionAllowed(event.target)) {\n\n        clearTextSelection(rootWindow);\n        event.preventDefault();\n        rootWindow.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe.\n      }\n    });\n\n    this.eventManager.addEventListener(rootElement, 'mouseup', () => {\n      this.#selectionMouseDown = false;\n    });\n    this.eventManager.addEventListener(rootElement, 'mousemove', (event) => {\n      if (this.#selectionMouseDown && !this.isTextSelectionAllowed(event.target)) {\n        // Clear selection only when fragmentSelection is enabled, otherwise clearing selection breaks the IME editor.\n        if (this.settings.fragmentSelection) {\n          clearTextSelection(rootWindow);\n        }\n        event.preventDefault();\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'keyup', (event) => {\n      // TODO: is it the best place and way to finish cell selection?\n      if (selection.isInProgress() && !event.shiftKey) {\n        selection.finish();\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'mouseup', (event) => {\n      if (selection.isInProgress() && isLeftClick(event)) {\n        selection.finish();\n      }\n\n      this.#mouseDown = false;\n\n      const isOutsideInputElement = isOutsideInput(rootDocument.activeElement);\n\n      if (isInput(rootDocument.activeElement) && !isOutsideInputElement) {\n        return;\n      }\n\n      if (isOutsideInputElement || (!selection.isSelected() && !selection.isSelectedByAnyHeader() &&\n          !rootElement.contains(event.target) && !isRightClick(event))) {\n        this.hot.unlisten();\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'contextmenu', (event) => {\n      if (selection.isInProgress() && isRightClick(event)) {\n        selection.finish();\n\n        this.#mouseDown = false;\n      }\n    });\n\n    this.eventManager.addEventListener(documentElement, 'touchend', () => {\n      if (selection.isInProgress()) {\n        selection.finish();\n      }\n\n      this.#mouseDown = false;\n    });\n\n    this.eventManager.addEventListener(documentElement, 'mousedown', (event) => {\n      const originalTarget = event.target;\n      const eventX = event.x || event.clientX;\n      const eventY = event.y || event.clientY;\n      let next = event.target;\n\n      if (this.#mouseDown || !rootElement || !this.hot.view) {\n        return; // it must have been started in a cell\n      }\n\n      // immediate click on \"holder\" means click on the right side of vertical scrollbar\n      const { holder } = this._wt.wtTable;\n\n      if (next === holder) {\n        const scrollbarWidth = getScrollbarWidth(rootDocument);\n\n        if (rootDocument.elementFromPoint(eventX + scrollbarWidth, eventY) !== holder ||\n          rootDocument.elementFromPoint(eventX, eventY + scrollbarWidth) !== holder) {\n          return;\n        }\n      } else {\n        while (next !== documentElement) {\n          if (next === null) {\n            if (event.isTargetWebComponent) {\n              break;\n            }\n\n            // click on something that was a row but now is detached (possibly because your click triggered a rerender)\n            return;\n          }\n          if (next === rootElement) {\n            // click inside container\n            return;\n          }\n          next = next.parentNode;\n        }\n      }\n\n      // function did not return until here, we have an outside click!\n      const outsideClickDeselects = typeof this.settings.outsideClickDeselects === 'function' ?\n        this.settings.outsideClickDeselects(originalTarget) :\n        this.settings.outsideClickDeselects;\n\n      if (outsideClickDeselects) {\n        this.hot.deselectCell();\n      } else {\n        this.hot.destroyEditor(false, false);\n      }\n    });\n\n    let parentWindow = getParentWindow(rootWindow);\n\n    while (parentWindow !== null) {\n      this.eventManager.addEventListener(parentWindow.document.documentElement, 'click', () => {\n        this.hot.unlisten();\n      });\n\n      parentWindow = getParentWindow(parentWindow);\n    }\n\n    this.eventManager.addEventListener(this.#table, 'selectstart', (event) => {\n      if (this.settings.fragmentSelection || isInput(event.target)) {\n        return;\n      }\n      // https://github.com/handsontable/handsontable/issues/160\n      // Prevent text from being selected when performing drag down.\n      event.preventDefault();\n    });\n  }\n\n  /**\n   * Translate renderable cell coordinates to visual coordinates.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @returns {CellCoords}\n   */\n  translateFromRenderableToVisualCoords({ row, col }) {\n    // TODO: To consider an idea to reusing the CellCoords instance instead creating new one.\n    return this.hot._createCellCoords(...this.translateFromRenderableToVisualIndex(row, col));\n  }\n\n  /**\n   * Translate renderable row and column indexes to visual row and column indexes.\n   *\n   * @param {number} renderableRow Renderable row index.\n   * @param {number} renderableColumn Renderable columnIndex.\n   * @returns {number[]}\n   */\n  translateFromRenderableToVisualIndex(renderableRow, renderableColumn) {\n    // TODO: Some helper may be needed.\n    // We perform translation for indexes (without headers).\n    let visualRow = renderableRow >= 0 ?\n      this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow;\n    let visualColumn = renderableColumn >= 0 ?\n      this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn;\n\n    if (visualRow === null) {\n      visualRow = renderableRow;\n    }\n    if (visualColumn === null) {\n      visualColumn = renderableColumn;\n    }\n\n    return [visualRow, visualColumn];\n  }\n\n  /**\n   * Returns the number of renderable indexes.\n   *\n   * @private\n   * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n   * @param {number} maxElements Maximum number of elements (rows or columns).\n   *\n   * @returns {number|*}\n   */\n  countRenderableIndexes(indexMapper, maxElements) {\n    const consideredElements = Math.min(indexMapper.getNotTrimmedIndexesLength(), maxElements);\n    // Don't take hidden indexes into account. We are looking just for renderable indexes.\n    const firstNotHiddenIndex = indexMapper.getNearestNotHiddenIndex(consideredElements - 1, -1);\n\n    // There are no renderable indexes.\n    if (firstNotHiddenIndex === null) {\n      return 0;\n    }\n\n    return indexMapper.getRenderableFromVisualIndex(firstNotHiddenIndex) + 1;\n  }\n\n  /**\n   * Returns the number of renderable columns.\n   *\n   * @returns {number}\n   */\n  countRenderableColumns() {\n    return this.countRenderableIndexes(this.hot.columnIndexMapper, this.settings.maxCols);\n  }\n\n  /**\n   * Returns the number of renderable rows.\n   *\n   * @returns {number}\n   */\n  countRenderableRows() {\n    return this.countRenderableIndexes(this.hot.rowIndexMapper, this.settings.maxRows);\n  }\n\n  /**\n   * Returns number of not hidden row indexes counting from the passed starting index.\n   * The counting direction can be controlled by `incrementBy` argument.\n   *\n   * @param {number} visualIndex The visual index from which the counting begins.\n   * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n   * @returns {number}\n   */\n  countNotHiddenRowIndexes(visualIndex, incrementBy) {\n    return this.countNotHiddenIndexes(\n      visualIndex, incrementBy, this.hot.rowIndexMapper, this.countRenderableRows());\n  }\n\n  /**\n   * Returns number of not hidden column indexes counting from the passed starting index.\n   * The counting direction can be controlled by `incrementBy` argument.\n   *\n   * @param {number} visualIndex The visual index from which the counting begins.\n   * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n   * @returns {number}\n   */\n  countNotHiddenColumnIndexes(visualIndex, incrementBy) {\n    return this.countNotHiddenIndexes(\n      visualIndex, incrementBy, this.hot.columnIndexMapper, this.countRenderableColumns());\n  }\n\n  /**\n   * Returns number of not hidden indexes counting from the passed starting index.\n   * The counting direction can be controlled by `incrementBy` argument.\n   *\n   * @param {number} visualIndex The visual index from which the counting begins.\n   * @param {number} incrementBy If `-1` then counting is backwards or forward when `1`.\n   * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n   * @param {number} renderableIndexesCount Total count of renderable indexes for specific axis.\n   * @returns {number}\n   */\n  countNotHiddenIndexes(visualIndex, incrementBy, indexMapper, renderableIndexesCount) {\n    if (isNaN(visualIndex) || visualIndex < 0) {\n      return 0;\n    }\n\n    const firstVisibleIndex = indexMapper.getNearestNotHiddenIndex(visualIndex, incrementBy);\n    const renderableIndex = indexMapper.getRenderableFromVisualIndex(firstVisibleIndex);\n\n    if (!Number.isInteger(renderableIndex)) {\n      return 0;\n    }\n\n    let notHiddenIndexes = 0;\n\n    if (incrementBy < 0) {\n      // Zero-based numbering for renderable indexes corresponds to a number of not hidden indexes.\n      notHiddenIndexes = renderableIndex + 1;\n    } else if (incrementBy > 0) {\n      notHiddenIndexes = renderableIndexesCount - renderableIndex;\n    }\n\n    return notHiddenIndexes;\n  }\n\n  /**\n   * The function returns the number of not hidden column indexes that fit between the first and\n   * last fixed column in the left (or right in RTL mode) overlay.\n   *\n   * @returns {number}\n   */\n  countNotHiddenFixedColumnsStart() {\n    const countCols = this.hot.countCols();\n    const visualFixedColumnsStart = Math.min(parseInt(this.settings.fixedColumnsStart, 10), countCols) - 1;\n\n    return this.countNotHiddenColumnIndexes(visualFixedColumnsStart, -1);\n  }\n\n  /**\n   * The function returns the number of not hidden row indexes that fit between the first and\n   * last fixed row in the top overlay.\n   *\n   * @returns {number}\n   */\n  countNotHiddenFixedRowsTop() {\n    const countRows = this.hot.countRows();\n    const visualFixedRowsTop = Math.min(parseInt(this.settings.fixedRowsTop, 10), countRows) - 1;\n\n    return this.countNotHiddenRowIndexes(visualFixedRowsTop, -1);\n  }\n\n  /**\n   * The function returns the number of not hidden row indexes that fit between the first and\n   * last fixed row in the bottom overlay.\n   *\n   * @returns {number}\n   */\n  countNotHiddenFixedRowsBottom() {\n    const countRows = this.hot.countRows();\n    const visualFixedRowsBottom = Math.max(countRows - parseInt(this.settings.fixedRowsBottom, 10), 0);\n\n    return this.countNotHiddenRowIndexes(visualFixedRowsBottom, 1);\n  }\n\n  /**\n   * The function returns the number of renderable column indexes within the passed range of the visual indexes.\n   *\n   * @param {number} columnStart The column visual start index.\n   * @param {number} columnEnd The column visual end index.\n   * @returns {number}\n   */\n  countRenderableColumnsInRange(columnStart, columnEnd) {\n    let count = 0;\n\n    for (let column = columnStart; column <= columnEnd; column++) {\n      if (this.hot.columnIndexMapper.getRenderableFromVisualIndex(column) !== null) {\n        count += 1;\n      }\n    }\n\n    return count;\n  }\n\n  /**\n   * The function returns the number of renderable row indexes within the passed range of the visual indexes.\n   *\n   * @param {number} rowStart The row visual start index.\n   * @param {number} rowEnd The row visual end index.\n   * @returns {number}\n   */\n  countRenderableRowsInRange(rowStart, rowEnd) {\n    let count = 0;\n\n    for (let row = rowStart; row <= rowEnd; row++) {\n      if (this.hot.rowIndexMapper.getRenderableFromVisualIndex(row) !== null) {\n        count += 1;\n      }\n    }\n\n    return count;\n  }\n\n  /**\n   * Checks if at least one cell than belongs to the main table is not covered by the top, left or\n   * bottom overlay.\n   *\n   * @returns {boolean}\n   */\n  isMainTableNotFullyCoveredByOverlays() {\n    const fixedAllRows = this.countNotHiddenFixedRowsTop() + this.countNotHiddenFixedRowsBottom();\n    const fixedAllColumns = this.countNotHiddenFixedColumnsStart();\n\n    return this.hot.countRenderedRows() > fixedAllRows && this.hot.countRenderedCols() > fixedAllColumns;\n  }\n\n  /**\n   * Defines default configuration and initializes WalkOnTable instance.\n   *\n   * @private\n   */\n  initializeWalkontable() {\n    const walkontableConfig = {\n      ariaTags: this.settings.ariaTags,\n      rtlMode: this.hot.isRtl(),\n      externalRowCalculator: this.hot.getPlugin('autoRowSize') &&\n        this.hot.getPlugin('autoRowSize').isEnabled(),\n      table: this.#table,\n      isDataViewInstance: () => isRootInstance(this.hot),\n      preventOverflow: () => this.settings.preventOverflow,\n      preventWheel: () => this.settings.preventWheel,\n      stretchH: () => this.settings.stretchH,\n      data: (renderableRow, renderableColumn) => {\n        return this.hot\n          .getDataAtCell(...this.translateFromRenderableToVisualIndex(renderableRow, renderableColumn));\n      },\n      totalRows: () => this.countRenderableRows(),\n      totalColumns: () => this.countRenderableColumns(),\n      // Number of renderable columns for the left overlay.\n      fixedColumnsStart: () => this.countNotHiddenFixedColumnsStart(),\n      // Number of renderable rows for the top overlay.\n      fixedRowsTop: () => this.countNotHiddenFixedRowsTop(),\n      // Number of renderable rows for the bottom overlay.\n      fixedRowsBottom: () => this.countNotHiddenFixedRowsBottom(),\n      // Enable the inline start overlay when conditions are met.\n      shouldRenderInlineStartOverlay: () => {\n        return this.settings.fixedColumnsStart > 0 || walkontableConfig.rowHeaders().length > 0;\n      },\n      // Enable the top overlay when conditions are met.\n      shouldRenderTopOverlay: () => {\n        return this.settings.fixedRowsTop > 0 || walkontableConfig.columnHeaders().length > 0;\n      },\n      // Enable the bottom overlay when conditions are met.\n      shouldRenderBottomOverlay: () => {\n        return this.settings.fixedRowsBottom > 0;\n      },\n      minSpareRows: () => this.settings.minSpareRows,\n      renderAllRows: this.settings.renderAllRows,\n      renderAllColumns: this.settings.renderAllColumns,\n      rowHeaders: () => {\n        const headerRenderers = [];\n\n        if (this.hot.hasRowHeaders()) {\n          headerRenderers.push((renderableRowIndex, TH) => {\n            // TODO: Some helper may be needed.\n            // We perform translation for row indexes (without row headers).\n            const visualRowIndex = renderableRowIndex >= 0 ?\n              this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderableRowIndex) : renderableRowIndex;\n\n            this.appendRowHeader(visualRowIndex, TH);\n          });\n        }\n\n        this.hot.runHooks('afterGetRowHeaderRenderers', headerRenderers);\n        this.#rowHeadersCount = headerRenderers.length;\n\n        if (this.hot.getSettings().ariaTags) {\n          // Update the aria-colcount attribute.\n          // Only needs to be done once after initialization/data update.\n          if (this.#getAriaColcount() === this.hot.countCols()) {\n            this.#updateAriaColcount(this.#rowHeadersCount);\n          }\n        }\n\n        return headerRenderers;\n      },\n      columnHeaders: () => {\n        const headerRenderers = [];\n\n        if (this.hot.hasColHeaders()) {\n          headerRenderers.push((renderedColumnIndex, TH) => {\n            // TODO: Some helper may be needed.\n            // We perform translation for columns indexes (without column headers).\n            const visualColumnsIndex = renderedColumnIndex >= 0 ?\n              this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex) : renderedColumnIndex;\n\n            this.appendColHeader(visualColumnsIndex, TH);\n          });\n        }\n\n        this.hot.runHooks('afterGetColumnHeaderRenderers', headerRenderers);\n        this.#columnHeadersCount = headerRenderers.length;\n\n        return headerRenderers;\n      },\n      columnWidth: (renderedColumnIndex) => {\n        const visualIndex = this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n        // It's not a bug that we can't find visual index for some handled by method indexes. The function is called also\n        // for indexes that are not displayed (indexes that are beyond the grid's boundaries), i.e. when `fixedColumnsStart` > `startCols` (wrong config?) or\n        // scrolling and dataset is empty (scroll should handle that?).\n        return this.hot.getColWidth(visualIndex === null ? renderedColumnIndex : visualIndex);\n      },\n      rowHeight: (renderedRowIndex) => {\n        const visualIndex = this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderedRowIndex);\n\n        return this.hot.getRowHeight(visualIndex === null ? renderedRowIndex : visualIndex);\n      },\n      rowHeightByOverlayName: (renderedRowIndex, overlayType) => {\n        const visualIndex = this.hot.rowIndexMapper.getVisualFromRenderableIndex(renderedRowIndex);\n        const visualRowIndex = visualIndex === null ? renderedRowIndex : visualIndex;\n\n        return this.hot.runHooks('modifyRowHeightByOverlayName',\n          this.hot.getRowHeight(visualRowIndex), visualRowIndex, overlayType);\n      },\n      cellRenderer: (renderedRowIndex, renderedColumnIndex, TD) => {\n        const [visualRowIndex, visualColumnIndex] = this\n          .translateFromRenderableToVisualIndex(renderedRowIndex, renderedColumnIndex);\n\n        // Coords may be modified. For example, by the `MergeCells` plugin. It should affect cell value and cell meta.\n        const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowIndex, visualColumnIndex);\n\n        let visualRowToCheck = visualRowIndex;\n        let visualColumnToCheck = visualColumnIndex;\n\n        if (Array.isArray(modifiedCellCoords)) {\n          [visualRowToCheck, visualColumnToCheck] = modifiedCellCoords;\n        }\n\n        const cellProperties = this.hot.getCellMeta(visualRowToCheck, visualColumnToCheck);\n        const prop = this.hot.colToProp(visualColumnToCheck);\n        let value = this.hot.getDataAtRowProp(visualRowToCheck, prop);\n\n        if (this.hot.hasHook('beforeValueRender')) {\n          value = this.hot.runHooks('beforeValueRender', value, cellProperties);\n        }\n\n        this.hot.runHooks('beforeRenderer', TD, visualRowIndex, visualColumnIndex, prop, value, cellProperties);\n        this.hot.getCellRenderer(cellProperties)(\n          this.hot,\n          TD,\n          visualRowIndex,\n          visualColumnIndex,\n          prop,\n          value,\n          cellProperties\n        );\n\n        this.hot.runHooks('afterRenderer', TD, visualRowIndex, visualColumnIndex, prop, value, cellProperties);\n      },\n      selections: this.hot.selection.highlight,\n      hideBorderOnMouseDownOver: () => this.settings.fragmentSelection,\n      onWindowResize: () => {\n        if (this.hot && !this.hot.isDestroyed) {\n          this.hot.refreshDimensions();\n        }\n      },\n      onContainerElementResize: () => {\n        if (this.hot && !this.hot.isDestroyed && isVisible(this.hot.rootElement)) {\n          this.hot.refreshDimensions();\n        }\n      },\n      onCellMouseDown: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n        const controller = {\n          row: false,\n          column: false,\n          cell: false\n        };\n\n        this.hot.listen();\n\n        this.activeWt = wt;\n        this.#mouseDown = true;\n\n        this.hot.runHooks('beforeOnCellMouseDown', event, visualCoords, TD, controller);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        handleMouseEvent(event, {\n          coords: visualCoords,\n          selection: this.hot.selection,\n          controller,\n          cellCoordsFactory: (row, column) => this.hot._createCellCoords(row, column),\n        });\n\n        this.hot.runHooks('afterOnCellMouseDown', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellContextMenu: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        this.activeWt = wt;\n        this.#mouseDown = false;\n\n        if (this.hot.selection.isInProgress()) {\n          this.hot.selection.finish();\n        }\n\n        this.hot.runHooks('beforeOnCellContextMenu', event, visualCoords, TD);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        this.hot.runHooks('afterOnCellContextMenu', event, visualCoords, TD);\n\n        this.activeWt = this._wt;\n      },\n      onCellMouseOut: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        this.activeWt = wt;\n        this.hot.runHooks('beforeOnCellMouseOut', event, visualCoords, TD);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        this.hot.runHooks('afterOnCellMouseOut', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellMouseOver: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        const controller = {\n          row: false,\n          column: false,\n          cell: false\n        };\n\n        this.activeWt = wt;\n        this.hot.runHooks('beforeOnCellMouseOver', event, visualCoords, TD, controller);\n\n        if (isImmediatePropagationStopped(event)) {\n          return;\n        }\n\n        if (this.#mouseDown) {\n          handleMouseEvent(event, {\n            coords: visualCoords,\n            selection: this.hot.selection,\n            controller,\n            cellCoordsFactory: (row, column) => this.hot._createCellCoords(row, column),\n          });\n        }\n\n        this.hot.runHooks('afterOnCellMouseOver', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellMouseUp: (event, coords, TD, wt) => {\n        const visualCoords = this.translateFromRenderableToVisualCoords(coords);\n\n        this.activeWt = wt;\n        this.hot.runHooks('beforeOnCellMouseUp', event, visualCoords, TD);\n\n        // TODO: The second condition check is a workaround. Callback corresponding the method `updateSettings`\n        // disable plugin and enable it again. Disabling plugin closes the menu. Thus, calling the\n        // `updateSettings` in a body of any callback executed right after some context-menu action\n        // breaks the table (#7231).\n        if (isImmediatePropagationStopped(event) || this.hot.isDestroyed) {\n          return;\n        }\n\n        this.hot.runHooks('afterOnCellMouseUp', event, visualCoords, TD);\n        this.activeWt = this._wt;\n      },\n      onCellCornerMouseDown: (event) => {\n        event.preventDefault();\n        this.hot.runHooks('afterOnCellCornerMouseDown', event);\n      },\n      onCellCornerDblClick: (event) => {\n        event.preventDefault();\n        this.hot.runHooks('afterOnCellCornerDblClick', event);\n      },\n      beforeDraw: (force, skipRender) => this.beforeRender(force, skipRender),\n      onDraw: force => this.afterRender(force),\n      onBeforeViewportScrollVertically: (renderableRow) => {\n        const rowMapper = this.hot.rowIndexMapper;\n        const areColumnHeadersSelected = renderableRow < 0;\n        let visualRow = renderableRow;\n\n        if (!areColumnHeadersSelected) {\n          visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);\n\n          // for an empty data return index as is\n          if (visualRow === null) {\n            return renderableRow;\n          }\n        }\n\n        visualRow = this.hot.runHooks('beforeViewportScrollVertically', visualRow);\n        this.hot.runHooks('beforeViewportScroll');\n\n        if (!areColumnHeadersSelected) {\n          return rowMapper.getRenderableFromVisualIndex(visualRow);\n        }\n\n        return visualRow;\n      },\n      onBeforeViewportScrollHorizontally: (renderableColumn) => {\n        const columnMapper = this.hot.columnIndexMapper;\n        const areRowHeadersSelected = renderableColumn < 0;\n        let visualColumn = renderableColumn;\n\n        if (!areRowHeadersSelected) {\n          visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);\n\n          // for an empty data return index as is\n          if (visualColumn === null) {\n            return renderableColumn;\n          }\n        }\n\n        visualColumn = this.hot.runHooks('beforeViewportScrollHorizontally', visualColumn);\n        this.hot.runHooks('beforeViewportScroll');\n\n        if (!areRowHeadersSelected) {\n          return columnMapper.getRenderableFromVisualIndex(visualColumn);\n        }\n\n        return visualColumn;\n      },\n      onScrollVertically: () => {\n        this.hot.runHooks('afterScrollVertically');\n        this.hot.runHooks('afterScroll');\n      },\n      onScrollHorizontally: () => {\n        this.hot.runHooks('afterScrollHorizontally');\n        this.hot.runHooks('afterScroll');\n      },\n      onBeforeRemoveCellClassNames: () => this.hot.runHooks('beforeRemoveCellClassNames'),\n      onBeforeHighlightingRowHeader: (renderableRow, headerLevel, highlightMeta) => {\n        const rowMapper = this.hot.rowIndexMapper;\n        const areColumnHeadersSelected = renderableRow < 0;\n        let visualRow = renderableRow;\n\n        if (!areColumnHeadersSelected) {\n          visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);\n        }\n\n        const newVisualRow = this.hot\n          .runHooks('beforeHighlightingRowHeader', visualRow, headerLevel, highlightMeta);\n\n        if (!areColumnHeadersSelected) {\n          return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));\n        }\n\n        return newVisualRow;\n      },\n      onBeforeHighlightingColumnHeader: (renderableColumn, headerLevel, highlightMeta) => {\n        const columnMapper = this.hot.columnIndexMapper;\n        const areRowHeadersSelected = renderableColumn < 0;\n        let visualColumn = renderableColumn;\n\n        if (!areRowHeadersSelected) {\n          visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);\n        }\n\n        const newVisualColumn = this.hot\n          .runHooks('beforeHighlightingColumnHeader', visualColumn, headerLevel, highlightMeta);\n\n        if (!areRowHeadersSelected) {\n          return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));\n        }\n\n        return newVisualColumn;\n      },\n      onAfterDrawSelection: (currentRow, currentColumn, layerLevel) => {\n        let cornersOfSelection;\n        const [visualRowIndex, visualColumnIndex] =\n          this.translateFromRenderableToVisualIndex(currentRow, currentColumn);\n        const selectedRange = this.hot.selection.getSelectedRange();\n        const selectionRangeSize = selectedRange.size();\n\n        if (selectionRangeSize > 0) {\n          const selectionForLayer = selectedRange.peekByIndex(layerLevel ?? 0);\n\n          cornersOfSelection = [\n            selectionForLayer.from.row, selectionForLayer.from.col, selectionForLayer.to.row, selectionForLayer.to.col\n          ];\n        }\n\n        return this.hot\n          .runHooks('afterDrawSelection', visualRowIndex, visualColumnIndex, cornersOfSelection, layerLevel);\n      },\n      onBeforeDrawBorders: (corners, borderClassName) => {\n        const [startRenderableRow, startRenderableColumn, endRenderableRow, endRenderableColumn] = corners;\n        const visualCorners = [\n          this.hot.rowIndexMapper.getVisualFromRenderableIndex(startRenderableRow),\n          this.hot.columnIndexMapper.getVisualFromRenderableIndex(startRenderableColumn),\n          this.hot.rowIndexMapper.getVisualFromRenderableIndex(endRenderableRow),\n          this.hot.columnIndexMapper.getVisualFromRenderableIndex(endRenderableColumn),\n        ];\n\n        return this.hot.runHooks('beforeDrawBorders', visualCorners, borderClassName);\n      },\n      onBeforeTouchScroll: () => this.hot.runHooks('beforeTouchScroll'),\n      onAfterMomentumScroll: () => this.hot.runHooks('afterMomentumScroll'),\n      onBeforeStretchingColumnWidth: (stretchedWidth, renderedColumnIndex) => {\n        const visualColumnIndex = this.hot.columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n        return this.hot.runHooks('beforeStretchingColumnWidth', stretchedWidth, visualColumnIndex);\n      },\n      onModifyRowHeaderWidth: rowHeaderWidth => this.hot.runHooks('modifyRowHeaderWidth', rowHeaderWidth),\n      onModifyGetCellCoords: (renderableRowIndex, renderableColumnIndex, topmost) => {\n        const rowMapper = this.hot.rowIndexMapper;\n        const columnMapper = this.hot.columnIndexMapper;\n\n        // Callback handle also headers. We shouldn't translate them.\n        const visualColumnIndex = renderableColumnIndex >= 0 ?\n          columnMapper.getVisualFromRenderableIndex(renderableColumnIndex) : renderableColumnIndex;\n        const visualRowIndex = renderableRowIndex >= 0 ?\n          rowMapper.getVisualFromRenderableIndex(renderableRowIndex) : renderableRowIndex;\n\n        const visualIndexes = this.hot.runHooks('modifyGetCellCoords', visualRowIndex, visualColumnIndex, topmost);\n\n        if (Array.isArray(visualIndexes)) {\n          const [visualRowFrom, visualColumnFrom, visualRowTo, visualColumnTo] = visualIndexes;\n\n          // Result of the hook is handled by the Walkontable (renderable indexes).\n          return [\n            visualRowFrom >= 0 ? rowMapper.getRenderableFromVisualIndex(\n              rowMapper.getNearestNotHiddenIndex(visualRowFrom, 1)) : visualRowFrom,\n            visualColumnFrom >= 0 ? columnMapper.getRenderableFromVisualIndex(\n              columnMapper.getNearestNotHiddenIndex(visualColumnFrom, 1)) : visualColumnFrom,\n            visualRowTo >= 0 ? rowMapper.getRenderableFromVisualIndex(\n              rowMapper.getNearestNotHiddenIndex(visualRowTo, -1)) : visualRowTo,\n            visualColumnTo >= 0 ? columnMapper.getRenderableFromVisualIndex(\n              columnMapper.getNearestNotHiddenIndex(visualColumnTo, -1)) : visualColumnTo\n          ];\n        }\n      },\n      viewportRowCalculatorOverride: (calc) => {\n        let viewportOffset = this.settings.viewportRowRenderingOffset;\n\n        if (viewportOffset === 'auto' && this.settings.fixedRowsTop) {\n          viewportOffset = 10;\n        }\n\n        if (viewportOffset > 0 || viewportOffset === 'auto') {\n          const renderableRows = this.countRenderableRows();\n          const firstRenderedRow = calc.startRow;\n          const lastRenderedRow = calc.endRow;\n\n          if (typeof viewportOffset === 'number') {\n            calc.startRow = Math.max(firstRenderedRow - viewportOffset, 0);\n            calc.endRow = Math.min(lastRenderedRow + viewportOffset, renderableRows - 1);\n\n          } else if (viewportOffset === 'auto') {\n            const offset = Math.ceil(lastRenderedRow / renderableRows * 12);\n\n            calc.startRow = Math.max(firstRenderedRow - offset, 0);\n            calc.endRow = Math.min(lastRenderedRow + offset, renderableRows - 1);\n          }\n        }\n        this.hot.runHooks('afterViewportRowCalculatorOverride', calc);\n      },\n      viewportColumnCalculatorOverride: (calc) => {\n        let viewportOffset = this.settings.viewportColumnRenderingOffset;\n\n        if (viewportOffset === 'auto' && this.settings.fixedColumnsStart) {\n          viewportOffset = 10;\n        }\n\n        if (viewportOffset > 0 || viewportOffset === 'auto') {\n          const renderableColumns = this.countRenderableColumns();\n          const firstRenderedColumn = calc.startColumn;\n          const lastRenderedColumn = calc.endColumn;\n\n          if (typeof viewportOffset === 'number') {\n            calc.startColumn = Math.max(firstRenderedColumn - viewportOffset, 0);\n            calc.endColumn = Math.min(lastRenderedColumn + viewportOffset, renderableColumns - 1);\n          }\n          if (viewportOffset === 'auto') {\n            const offset = Math.ceil(lastRenderedColumn / renderableColumns * 6);\n\n            calc.startColumn = Math.max(firstRenderedColumn - offset, 0);\n            calc.endColumn = Math.min(lastRenderedColumn + offset, renderableColumns - 1);\n          }\n        }\n        this.hot.runHooks('afterViewportColumnCalculatorOverride', calc);\n      },\n      rowHeaderWidth: () => this.settings.rowHeaderWidth,\n      columnHeaderHeight: () => {\n        const columnHeaderHeight = this.hot.runHooks('modifyColumnHeaderHeight');\n\n        return this.settings.columnHeaderHeight || columnHeaderHeight;\n      }\n    };\n\n    this.hot.runHooks('beforeInitWalkontable', walkontableConfig);\n\n    this._wt = new Walkontable(walkontableConfig);\n    this.activeWt = this._wt;\n\n    const spreader = this._wt.wtTable.spreader;\n    // We have to cache width and height after Walkontable initialization.\n    const { width, height } = this.hot.rootElement.getBoundingClientRect();\n\n    this.setLastSize(width, height);\n\n    this.eventManager.addEventListener(spreader, 'mousedown', (event) => {\n      // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n      if (event.target === spreader && event.which === 3) {\n        event.stopPropagation();\n      }\n    });\n\n    this.eventManager.addEventListener(spreader, 'contextmenu', (event) => {\n      // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n      if (event.target === spreader && event.which === 3) {\n        event.stopPropagation();\n      }\n    });\n\n    this.eventManager.addEventListener(this.hot.rootDocument.documentElement, 'click', () => {\n      if (this.settings.observeDOMVisibility) {\n        if (this._wt.drawInterrupted) {\n          this.hot.forceFullRender = true;\n          this.render();\n        }\n      }\n    });\n  }\n\n  /**\n   * Checks if it's possible to create text selection in element.\n   *\n   * @private\n   * @param {HTMLElement} el The element to check.\n   * @returns {boolean}\n   */\n  isTextSelectionAllowed(el) {\n    if (isInput(el)) {\n      return true;\n    }\n    const isChildOfTableBody = isChildOf(el, this._wt.wtTable.spreader);\n\n    if (this.settings.fragmentSelection === true && isChildOfTableBody) {\n      return true;\n    }\n    if (this.settings.fragmentSelection === 'cell' && this.isSelectedOnlyCell() && isChildOfTableBody) {\n      return true;\n    }\n    if (!this.settings.fragmentSelection && this.isCellEdited() && this.isSelectedOnlyCell()) {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Checks if user's been called mousedown.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isMouseDown() {\n    return this.#mouseDown;\n  }\n\n  /**\n   * Check if selected only one cell.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isSelectedOnlyCell() {\n    return this.hot.getSelectedRangeLast()?.isSingleCell() ?? false;\n  }\n\n  /**\n   * Checks if active cell is editing.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isCellEdited() {\n    const activeEditor = this.hot.getActiveEditor();\n\n    return activeEditor && activeEditor.isOpened();\n  }\n\n  /**\n   * `beforeDraw` callback.\n   *\n   * @private\n   * @param {boolean} force If `true` rendering was triggered by a change of settings or data or `false` if\n   *                        rendering was triggered by scrolling or moving selection.\n   * @param {object} skipRender Object with `skipRender` property, if it is set to `true ` the next rendering\n   *                            cycle will be skipped.\n   */\n  beforeRender(force, skipRender) {\n    if (force) {\n      // this.hot.forceFullRender = did Handsontable request full render?\n      this.hot.runHooks('beforeViewRender', this.hot.forceFullRender, skipRender);\n    }\n  }\n\n  /**\n   * `afterRender` callback.\n   *\n   * @private\n   * @param {boolean} force If `true` rendering was triggered by a change of settings or data or `false` if\n   *                        rendering was triggered by scrolling or moving selection.\n   */\n  afterRender(force) {\n    if (force) {\n      // this.hot.forceFullRender = did Handsontable request full render?\n      this.hot.runHooks('afterViewRender', this.hot.forceFullRender);\n    }\n  }\n\n  /**\n   * Append row header to a TH element.\n   *\n   * @private\n   * @param {number} visualRowIndex The visual row index.\n   * @param {HTMLTableHeaderCellElement} TH The table header element.\n   */\n  appendRowHeader(visualRowIndex, TH) {\n    if (TH.firstChild) {\n      const container = TH.firstChild;\n\n      if (!hasClass(container, 'relative')) {\n        empty(TH);\n        this.appendRowHeader(visualRowIndex, TH);\n\n        return;\n      }\n\n      this.updateCellHeader(container.querySelector('.rowHeader'), visualRowIndex, this.hot.getRowHeader);\n\n    } else {\n      const { rootDocument, getRowHeader } = this.hot;\n      const div = rootDocument.createElement('div');\n      const span = rootDocument.createElement('span');\n\n      div.className = 'relative';\n      span.className = 'rowHeader';\n      this.updateCellHeader(span, visualRowIndex, getRowHeader);\n\n      div.appendChild(span);\n      TH.appendChild(div);\n    }\n\n    this.hot.runHooks('afterGetRowHeader', visualRowIndex, TH);\n  }\n\n  /**\n   * Append column header to a TH element.\n   *\n   * @private\n   * @param {number} visualColumnIndex Visual column index.\n   * @param {HTMLTableCellElement} TH The table header element.\n   * @param {Function} [label] The function that returns the header label.\n   * @param {number} [headerLevel=0] The index of header level counting from the top (positive\n   *                                 values counting from 0 to N).\n   */\n  appendColHeader(\n    visualColumnIndex,\n    TH,\n    label = this.hot.getColHeader,\n    headerLevel = 0\n  ) {\n    const getColumnHeaderClassNames = () => {\n      const metaHeaderClassNames =\n        visualColumnIndex >= 0 ?\n          this.hot.getColumnMeta(visualColumnIndex).headerClassName :\n          null;\n\n      return metaHeaderClassNames ? metaHeaderClassNames.split(' ') : [];\n    };\n\n    if (TH.firstChild) {\n      const container = TH.firstChild;\n\n      if (hasClass(container, 'relative')) {\n        this.updateCellHeader(container.querySelector('.colHeader'), visualColumnIndex, label, headerLevel);\n\n        container.className = '';\n        addClass(container, ['relative', ...getColumnHeaderClassNames()]);\n\n      } else {\n        empty(TH);\n        this.appendColHeader(visualColumnIndex, TH, label, headerLevel);\n      }\n\n    } else {\n      const { rootDocument } = this.hot;\n      const div = rootDocument.createElement('div');\n      const span = rootDocument.createElement('span');\n      const classNames = getColumnHeaderClassNames();\n\n      div.classList.add('relative', ...classNames);\n      span.className = 'colHeader';\n\n      if (this.settings.ariaTags) {\n        setAttribute(div, ...A11Y_PRESENTATION());\n        setAttribute(span, ...A11Y_PRESENTATION());\n      }\n\n      this.updateCellHeader(span, visualColumnIndex, label, headerLevel);\n\n      div.appendChild(span);\n      TH.appendChild(div);\n    }\n\n    this.hot.runHooks('afterGetColHeader', visualColumnIndex, TH, headerLevel);\n  }\n\n  /**\n   * Updates header cell content.\n   *\n   * @private\n   * @param {HTMLElement} element Element to update.\n   * @param {number} index Row index or column index.\n   * @param {Function} content Function which should be returns content for this cell.\n   * @param {number} [headerLevel=0] The index of header level counting from the top (positive\n   *                                 values counting from 0 to N).\n   */\n  updateCellHeader(element, index, content, headerLevel = 0) {\n    let renderedIndex = index;\n    const parentOverlay = this._wt.wtOverlays.getParentOverlay(element) || this._wt;\n\n    // prevent wrong calculations from SampleGenerator\n    if (element.parentNode) {\n      if (hasClass(element, 'colHeader')) {\n        renderedIndex = parentOverlay.wtTable.columnFilter.sourceToRendered(index);\n\n      } else if (hasClass(element, 'rowHeader')) {\n        renderedIndex = parentOverlay.wtTable.rowFilter.sourceToRendered(index);\n      }\n    }\n\n    if (renderedIndex > -1) {\n      fastInnerHTML(element, content(index, headerLevel));\n\n    } else {\n      // workaround for https://github.com/handsontable/handsontable/issues/1946\n      fastInnerText(element, String.fromCharCode(160));\n      addClass(element, 'cornerHeader');\n    }\n  }\n\n  /**\n   * Given a element's left (or right in RTL mode) position relative to the viewport, returns maximum\n   * element width until the right (or left) edge of the viewport (before scrollbar).\n   *\n   * @private\n   * @param {number} inlineOffset The left (or right in RTL mode) offset.\n   * @returns {number}\n   */\n  maximumVisibleElementWidth(inlineOffset) {\n    const workspaceWidth = this._wt.wtViewport.getWorkspaceWidth();\n    const maxWidth = workspaceWidth - inlineOffset;\n\n    return maxWidth > 0 ? maxWidth : 0;\n  }\n\n  /**\n   * Given a element's top position relative to the viewport, returns maximum element height until the bottom\n   * edge of the viewport (before scrollbar).\n   *\n   * @private\n   * @param {number} topOffset The top offset.\n   * @returns {number}\n   */\n  maximumVisibleElementHeight(topOffset) {\n    const workspaceHeight = this._wt.wtViewport.getWorkspaceHeight();\n    const maxHeight = workspaceHeight - topOffset;\n\n    return maxHeight > 0 ? maxHeight : 0;\n  }\n\n  /**\n   * Sets new dimensions of the container.\n   *\n   * @param {number} width The table width.\n   * @param {number} height The table height.\n   */\n  setLastSize(width, height) {\n    this.#lastWidth = width;\n    this.#lastHeight = height;\n  }\n\n  /**\n   * Returns cached dimensions.\n   *\n   * @returns {object}\n   */\n  getLastSize() {\n    return {\n      width: this.#lastWidth,\n      height: this.#lastHeight,\n    };\n  }\n\n  /**\n   * Returns the first rendered row in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getFirstRenderedVisibleRow() {\n    if (!this._wt.wtViewport.rowsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.rowIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getFirstRenderedRow(), 1);\n  }\n\n  /**\n   * Returns the last rendered row in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getLastRenderedVisibleRow() {\n    if (!this._wt.wtViewport.rowsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.rowIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getLastRenderedRow(), -1);\n  }\n\n  /**\n   * Returns the first rendered column in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getFirstRenderedVisibleColumn() {\n    if (!this._wt.wtViewport.columnsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.columnIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getFirstRenderedColumn(), 1);\n  }\n\n  /**\n   * Returns the last rendered column in the DOM (usually is not visible in the table's viewport).\n   *\n   * @returns {number | null}\n   */\n  getLastRenderedVisibleColumn() {\n    if (!this._wt.wtViewport.columnsRenderCalculator) {\n      return null;\n    }\n\n    return this.hot.columnIndexMapper\n      .getNearestNotHiddenIndex(this._wt.wtTable.getLastRenderedColumn(), -1);\n  }\n\n  /**\n   * Returns the first fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstFullyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstVisibleRow());\n  }\n\n  /**\n   * Returns the last fully visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastFullyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastVisibleRow());\n  }\n\n  /**\n   * Returns the first fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstFullyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstVisibleColumn());\n  }\n\n  /**\n   * Returns the last fully visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastFullyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastVisibleColumn());\n  }\n\n  /**\n   * Returns the first partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstPartiallyVisibleRow());\n  }\n\n  /**\n   * Returns the last partially visible row in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleRow() {\n    return this.hot.rowIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastPartiallyVisibleRow());\n  }\n\n  /**\n   * Returns the first partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getFirstPartiallyVisibleColumn());\n  }\n\n  /**\n   * Returns the last partially visible column in the table viewport. When the table has overlays the method returns\n   * the first row of the master table that is not overlapped by overlay.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleColumn() {\n    return this.hot.columnIndexMapper\n      .getVisualFromRenderableIndex(this._wt.wtScroll.getLastPartiallyVisibleColumn());\n  }\n\n  /**\n   * Returns the total count of the rendered column headers.\n   *\n   * @returns {number}\n   */\n  getColumnHeadersCount() {\n    return this.#columnHeadersCount;\n  }\n\n  /**\n   * Returns the total count of the rendered row headers.\n   *\n   * @returns {number}\n   */\n  getRowHeadersCount() {\n    return this.#rowHeadersCount;\n  }\n\n  /**\n   * Returns the table's viewport width. When the table has defined the size of the container,\n   * and the columns do not fill the entire viewport, the viewport width is equal to the sum of\n   * the columns' widths.\n   *\n   * @returns {number}\n   */\n  getViewportWidth() {\n    return this._wt.wtViewport.getViewportWidth();\n  }\n\n  /**\n   * Returns the table's total width including the scrollbar width.\n   *\n   * @returns {number}\n   */\n  getWorkspaceWidth() {\n    return this._wt.wtViewport.getWorkspaceWidth();\n  }\n\n  /**\n   * Returns the table's viewport height. When the table has defined the size of the container,\n   * and the rows do not fill the entire viewport, the viewport height is equal to the sum of\n   * the rows' heights.\n   *\n   * @returns {number}\n   */\n  getViewportHeight() {\n    return this._wt.wtViewport.getViewportHeight();\n  }\n\n  /**\n   * Returns the table's total height including the scrollbar height.\n   *\n   * @returns {number}\n   */\n  getWorkspaceHeight() {\n    return this._wt.wtViewport.getWorkspaceHeight();\n  }\n\n  /**\n   * Checks to what overlay the provided element belongs.\n   *\n   * @param {HTMLElement} element The DOM element to check.\n   * @returns {'master'|'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'}\n   */\n  getElementOverlayName(element) {\n    return (this._wt.wtOverlays.getParentOverlay(element) ?? this._wt).wtTable.name;\n  }\n\n  /**\n   * Gets the overlay instance by its name.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'} overlayName The overlay name.\n   * @returns {Overlay | null}\n   */\n  getOverlayByName(overlayName) {\n    return this._wt.getOverlayByName(overlayName);\n  }\n\n  /**\n   * Checks if the table is visible or not.\n   *\n   * @returns {boolean}\n   */\n  isVisible() {\n    return this._wt.wtTable.isVisible();\n  }\n\n  /**\n   * Return the value of the `aria-colcount` attribute.\n   *\n   * @returns {number} The value of the `aria-colcount` attribute.\n   */\n  #getAriaColcount() {\n    return parseInt(this.hot.rootElement.getAttribute(A11Y_COLCOUNT()[0]), 10);\n  }\n\n  /**\n   * Update the `aria-colcount` attribute by the provided value.\n   *\n   * @param {number} delta The number of columns to add or remove to the aria tag.\n   */\n  #updateAriaColcount(delta) {\n    const colCount = this.#getAriaColcount() + delta;\n\n    setAttribute(this.hot.rootElement, ...A11Y_COLCOUNT(colCount));\n  }\n\n  /**\n   * Destroys internal WalkOnTable's instance. Detaches all of the bonded listeners.\n   *\n   * @private\n   */\n  destroy() {\n    this._wt.destroy();\n    this.eventManager.destroy();\n  }\n}\n\nexport default TableView;\n","import {\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n  DEFAULT_ROW_HEIGHT,\n  DEFAULT_COLUMN_WIDTH,\n} from './calculator';\n\nimport CellCoords from './cell/coords';\nimport CellRange from './cell/range';\n\nimport Walkontable from './facade/core';\nimport {\n  Selection,\n  ACTIVE_HEADER_TYPE,\n  AREA_TYPE,\n  FOCUS_TYPE,\n  FILL_TYPE,\n  HEADER_TYPE,\n  ROW_TYPE,\n  COLUMN_TYPE,\n  CUSTOM_SELECTION_TYPE,\n} from './selection';\nimport * as Renderer from './renderer';\nimport { OrderView, SharedOrderView } from './utils/orderView';\nimport { getListenersCounter } from '../../../eventManager';\n\nexport {\n  DEFAULT_ROW_HEIGHT,\n  DEFAULT_COLUMN_WIDTH,\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n\n  CellCoords,\n  CellRange,\n\n  Walkontable as default,\n  Walkontable as Core,\n\n  Selection,\n  ACTIVE_HEADER_TYPE as HIGHLIGHT_ACTIVE_HEADER_TYPE,\n  AREA_TYPE as HIGHLIGHT_AREA_TYPE,\n  FOCUS_TYPE as HIGHLIGHT_FOCUS_TYPE,\n  FILL_TYPE as HIGHLIGHT_FILL_TYPE,\n  HEADER_TYPE as HIGHLIGHT_HEADER_TYPE,\n  ROW_TYPE as HIGHLIGHT_ROW_TYPE,\n  COLUMN_TYPE as HIGHLIGHT_COLUMN_TYPE,\n  CUSTOM_SELECTION_TYPE as HIGHLIGHT_CUSTOM_SELECTION_TYPE,\n\n  Renderer,\n  OrderView,\n  SharedOrderView,\n\n  getListenersCounter\n};\n","import { FullyVisibleColumnsCalculationType } from './calculationType/fullyVisibleColumns';\nimport { FullyVisibleRowsCalculationType } from './calculationType/fullyVisibleRows';\nimport { PartiallyVisibleColumnsCalculationType } from './calculationType/partiallyVisibleColumns';\nimport { PartiallyVisibleRowsCalculationType } from './calculationType/partiallyVisibleRows';\nimport { RenderedAllColumnsCalculationType } from './calculationType/renderedAllColumns';\nimport { RenderedAllRowsCalculationType } from './calculationType/renderedAllRows';\nimport { RenderedColumnsCalculationType } from './calculationType/renderedColumns';\nimport { RenderedRowsCalculationType } from './calculationType/renderedRows';\nimport { ViewportColumnsCalculator, DEFAULT_WIDTH } from './viewportColumns';\nimport { ViewportRowsCalculator, DEFAULT_HEIGHT } from './viewportRows';\n\nexport {\n  DEFAULT_HEIGHT as DEFAULT_ROW_HEIGHT,\n  DEFAULT_WIDTH as DEFAULT_COLUMN_WIDTH,\n  FullyVisibleColumnsCalculationType,\n  FullyVisibleRowsCalculationType,\n  PartiallyVisibleColumnsCalculationType,\n  PartiallyVisibleRowsCalculationType,\n  RenderedAllColumnsCalculationType,\n  RenderedAllRowsCalculationType,\n  RenderedColumnsCalculationType,\n  RenderedRowsCalculationType,\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n};\n","/**\n * @class FullyVisibleColumnsCalculationType\n */\nexport class FullyVisibleColumnsCalculationType {\n  /**\n   * Total number of fully visible columns in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The column index of the first fully visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  startColumn = null;\n  /**\n   * The column index of the last fully visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  endColumn = null;\n  /**\n   * Position of the first fully visible column (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the column.\n   *\n   * @param {number} column The column index.\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(column, viewportCalculator) {\n    const {\n      totalCalculatedWidth,\n      zeroBasedScrollOffset,\n      viewportWidth,\n      columnWidth,\n    } = viewportCalculator;\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n\n    if (\n      totalCalculatedWidth >= zeroBasedScrollOffset &&\n      totalCalculatedWidth + columnWidth <= zeroBasedScrollOffset + compensatedViewportWidth\n    ) {\n      if (this.startColumn === null || this.startColumn === undefined) {\n        this.startColumn = column;\n      }\n\n      this.endColumn = column;\n    }\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportWidth,\n      inlineStartOffset,\n      zeroBasedScrollOffset,\n      totalColumns,\n      needReverse,\n      startPositions,\n      columnWidth,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last column and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with columns\n    if (this.endColumn === totalColumns - 1 && needReverse) {\n      this.startColumn = this.endColumn;\n\n      while (this.startColumn > 0) {\n        const calculatedViewportHeight = startPositions[this.endColumn] +\n          columnWidth -\n          startPositions[this.startColumn - 1];\n\n        if (calculatedViewportHeight <= viewportWidth) {\n          this.startColumn -= 1;\n        }\n\n        if (calculatedViewportHeight >= viewportWidth) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startColumn] ?? null;\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n    const mostRightScrollOffset = scrollOffset + viewportWidth - compensatedViewportWidth;\n    const inlineStartColumnOffset = this.startColumn === null ? 0 : viewportCalculator.getColumnWidth(this.startColumn);\n\n    if (\n      // the table is to the left of the viewport\n      (\n        mostRightScrollOffset < (-1) * inlineStartOffset ||\n        scrollOffset > startPositions.at(-1)\n      ) ||\n      // the table is to the right of the viewport\n      (((-1) * scrollOffset) - viewportWidth > (-1) * inlineStartColumnOffset)\n    ) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalColumns < this.endColumn) {\n      this.endColumn = totalColumns - 1;\n    }\n\n    if (this.startColumn !== null) {\n      this.count = this.endColumn - this.startColumn + 1;\n    }\n  }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.at` method\n// https://tc39.es/ecma262/#sec-array.prototype.at\n$({ target: 'Array', proto: true }, {\n  at: function at(index) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var relativeIndex = toIntegerOrInfinity(index);\n    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n    return (k < 0 || k >= len) ? undefined : O[k];\n  }\n});\n\naddToUnscopables('at');\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\n\nvar charAt = uncurryThis(''.charAt);\n\nvar FORCED = fails(function () {\n  // eslint-disable-next-line es/no-string-prototype-at -- safe\n  return '𠮷'.at(-2) !== '\\uD842';\n});\n\n// `String.prototype.at` method\n// https://tc39.es/ecma262/#sec-string.prototype.at\n$({ target: 'String', proto: true, forced: FORCED }, {\n  at: function at(index) {\n    var S = toString(requireObjectCoercible(this));\n    var len = S.length;\n    var relativeIndex = toIntegerOrInfinity(index);\n    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n    return (k < 0 || k >= len) ? undefined : charAt(S, k);\n  }\n});\n","/**\n * @class FullyVisibleRowsCalculationType\n */\nexport class FullyVisibleRowsCalculationType {\n  /**\n   * Total number of fully visible rows in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The row index of the first fully visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  startRow = null;\n  /**\n   * The row index of the last fully visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  endRow = null;\n  /**\n   * Position of the first fully visible row (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the row.\n   *\n   * @param {number} row The row index.\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(row, viewportCalculator) {\n    const {\n      totalCalculatedHeight,\n      zeroBasedScrollOffset,\n      innerViewportHeight,\n      rowHeight,\n    } = viewportCalculator;\n\n    if (\n      totalCalculatedHeight >= zeroBasedScrollOffset &&\n      totalCalculatedHeight + rowHeight <= innerViewportHeight\n    ) {\n      if (this.startRow === null) {\n        this.startRow = row;\n      }\n\n      this.endRow = row;\n    }\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportHeight,\n      horizontalScrollbarHeight,\n      totalRows,\n      needReverse,\n      startPositions,\n      rowHeight,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last row and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with rows\n    if (this.endRow === totalRows - 1 && needReverse) {\n      this.startRow = this.endRow;\n\n      while (this.startRow > 0) {\n        const calculatedViewportHeight = startPositions[this.endRow] +\n          rowHeight -\n          startPositions[this.startRow - 1];\n\n        if (calculatedViewportHeight <= viewportHeight - horizontalScrollbarHeight) {\n          this.startRow -= 1;\n        }\n\n        if (calculatedViewportHeight >= viewportHeight - horizontalScrollbarHeight) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startRow] ?? null;\n\n    const mostBottomScrollOffset = scrollOffset + viewportHeight - horizontalScrollbarHeight;\n    const topRowOffset = this.startRow === null ? 0 : viewportCalculator.getRowHeight(this.startRow);\n\n    if (mostBottomScrollOffset < topRowOffset || scrollOffset > startPositions.at(-1)) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalRows < this.endRow) {\n      this.endRow = totalRows - 1;\n    }\n\n    if (this.startRow !== null) {\n      this.count = this.endRow - this.startRow + 1;\n    }\n  }\n}\n","/**\n * @class PartiallyVisibleColumnsCalculationType\n */\nexport class PartiallyVisibleColumnsCalculationType {\n  /**\n   * Total number of partially visible columns in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The column index of the first partially visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  startColumn = null;\n  /**\n   * The column index of the last partially visible column in the viewport.\n   *\n   * @type {number|null}\n   */\n  endColumn = null;\n  /**\n   * Position of the first partially visible column (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the column.\n   *\n   * @param {number} column The column index.\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(column, viewportCalculator) {\n    const {\n      totalCalculatedWidth,\n      zeroBasedScrollOffset,\n      viewportWidth,\n    } = viewportCalculator;\n\n    if (totalCalculatedWidth <= zeroBasedScrollOffset) {\n      this.startColumn = column;\n    }\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n\n    if (\n      totalCalculatedWidth >= zeroBasedScrollOffset &&\n      totalCalculatedWidth <= zeroBasedScrollOffset + compensatedViewportWidth\n    ) {\n      if (this.startColumn === null || this.startColumn === undefined) {\n        this.startColumn = column;\n      }\n    }\n\n    this.endColumn = column;\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportWidth,\n      inlineStartOffset,\n      zeroBasedScrollOffset,\n      totalColumns,\n      needReverse,\n      startPositions,\n      columnWidth,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last column and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with columns\n    if (this.endColumn === totalColumns - 1 && needReverse) {\n      this.startColumn = this.endColumn;\n\n      while (this.startColumn > 0) {\n        const calculatedViewportWidth = startPositions[this.endColumn] +\n          columnWidth -\n          startPositions[this.startColumn - 1];\n\n        this.startColumn -= 1;\n\n        if (calculatedViewportWidth > viewportWidth) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startColumn] ?? null;\n\n    const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n    const mostRightScrollOffset = scrollOffset + viewportWidth - compensatedViewportWidth;\n\n    if (\n      // the table is to the left of the viewport\n      (\n        mostRightScrollOffset < (-1) * inlineStartOffset ||\n        scrollOffset > startPositions.at(-1) + columnWidth\n      ) ||\n      // the table is to the right of the viewport\n      (((-1) * scrollOffset) - viewportWidth > 0)\n    ) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalColumns < this.endColumn) {\n      this.endColumn = totalColumns - 1;\n    }\n\n    if (this.startColumn !== null) {\n      this.count = this.endColumn - this.startColumn + 1;\n    }\n  }\n}\n","/**\n * @class PartiallyVisibleRowsCalculationType\n */\nexport class PartiallyVisibleRowsCalculationType {\n  /**\n   * Total number of partially visible rows in the viewport.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * The row index of the first partially visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  startRow = null;\n  /**\n   * The row index of the last partially visible row in the viewport.\n   *\n   * @type {number|null}\n   */\n  endRow = null;\n  /**\n   * Position of the first partially visible row (in px).\n   *\n   * @type {number|null}\n   */\n  startPosition = null;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = false;\n\n  /**\n   * Initializes the calculation.\n   */\n  initialize() {}\n\n  /**\n   * Processes the row.\n   *\n   * @param {number} row The row index.\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  process(row, viewportCalculator) {\n    const {\n      totalCalculatedHeight,\n      zeroBasedScrollOffset,\n      innerViewportHeight,\n    } = viewportCalculator;\n\n    if (totalCalculatedHeight <= zeroBasedScrollOffset) {\n      this.startRow = row;\n    }\n\n    if (\n      totalCalculatedHeight >= zeroBasedScrollOffset &&\n      totalCalculatedHeight <= innerViewportHeight\n    ) {\n      if (this.startRow === null) {\n        this.startRow = row;\n      }\n    }\n\n    this.endRow = row;\n  }\n\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    const {\n      scrollOffset,\n      viewportHeight,\n      horizontalScrollbarHeight,\n      totalRows,\n      needReverse,\n      startPositions,\n      rowHeight,\n    } = viewportCalculator;\n\n    // If the estimation has reached the last row and there is still some space available in the viewport,\n    // we need to render in reverse in order to fill the whole viewport with rows\n    if (this.endRow === totalRows - 1 && needReverse) {\n      this.startRow = this.endRow;\n\n      while (this.startRow > 0) {\n        const calculatedViewportHeight = startPositions[this.endRow] +\n          rowHeight -\n          startPositions[this.startRow - 1];\n\n        this.startRow -= 1;\n\n        if (calculatedViewportHeight >= viewportHeight - horizontalScrollbarHeight) {\n          break;\n        }\n      }\n    }\n\n    this.startPosition = startPositions[this.startRow] ?? null;\n\n    const mostBottomScrollOffset = scrollOffset + viewportHeight - horizontalScrollbarHeight;\n\n    if (mostBottomScrollOffset < 0 || scrollOffset > startPositions.at(-1) + rowHeight) {\n      this.isVisibleInTrimmingContainer = false;\n    } else {\n      this.isVisibleInTrimmingContainer = true;\n    }\n\n    if (totalRows < this.endRow) {\n      this.endRow = totalRows - 1;\n    }\n\n    if (this.startRow !== null) {\n      this.count = this.endRow - this.startRow + 1;\n    }\n  }\n}\n","/**\n * @typedef {object} RenderedAllColumnsCalculatorOptions\n * @property {number} totalColumns Total number of columns.\n */\n/**\n * Holds all calculations needed to perform the rendering of all columns.\n *\n * @class RenderedAllColumnsCalculationType\n */\nexport class RenderedAllColumnsCalculationType {\n  /**\n   * Number of rendered/visible columns.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * Index of the first rendered/visible column.\n   *\n   * @type {number}\n   */\n  startColumn = 0;\n  /**\n   * Index of the last rendered/visible column.\n   *\n   * @type {number}\n   */\n  endColumn = 0;\n  /**\n   * Position of the first rendered/visible column (in px).\n   *\n   * @type {number}\n   */\n  startPosition = 0;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = true;\n\n  /**\n   * Initializes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  initialize({ totalColumns }) {\n    this.count = totalColumns;\n    this.endColumn = this.count - 1;\n  }\n\n  /**\n   * Processes the column.\n   */\n  process() {}\n\n  /**\n   * Finalizes the calculation.\n   */\n  finalize() {}\n}\n","/**\n * @typedef {object} RenderedAllRowsCalculatorOptions\n * @property {number} totalRows Total number of rows.\n */\n/**\n * Holds all calculations needed to perform the rendering of all rows.\n *\n * @class RenderedAllRowsCalculationType\n */\nexport class RenderedAllRowsCalculationType {\n  /**\n   * Number of rendered/visible rows.\n   *\n   * @type {number}\n   */\n  count = 0;\n  /**\n   * Index of the first rendered/visible row.\n   *\n   * @type {number}\n   */\n  startRow = 0;\n  /**\n   * Index of the last rendered/visible row.\n   *\n   * @type {number}\n   */\n  endRow = 0;\n  /**\n   * Position of the first rendered/visible row (in px).\n   *\n   * @type {number}\n   */\n  startPosition = 0;\n  /**\n   * Determines if the viewport is visible in the trimming container.\n   *\n   * @type {boolean}\n   */\n  isVisibleInTrimmingContainer = true;\n\n  /**\n   * Initializes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  initialize({ totalRows }) {\n    this.count = totalRows;\n    this.endRow = this.count - 1;\n  }\n\n  /**\n   * Processes the row.\n   */\n  process() {}\n\n  /**\n   * Finalizes the calculation.\n   */\n  finalize() {}\n}\n","import { PartiallyVisibleColumnsCalculationType } from './partiallyVisibleColumns';\n\n/**\n * @class RenderedColumnsCalculationType\n */\nexport class RenderedColumnsCalculationType extends PartiallyVisibleColumnsCalculationType {\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportColumnsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    super.finalize(viewportCalculator);\n\n    const {\n      overrideFn,\n      totalColumns,\n      startPositions,\n    } = viewportCalculator;\n\n    if (this.startColumn !== null && typeof overrideFn === 'function') {\n      overrideFn(this);\n    }\n\n    if (this.startColumn < 0) {\n      this.startColumn = 0;\n    }\n\n    this.startPosition = startPositions[this.startColumn] ?? null;\n\n    if (totalColumns < this.endColumn) {\n      this.endColumn = totalColumns - 1;\n    }\n\n    if (this.startColumn !== null) {\n      this.count = this.endColumn - this.startColumn + 1;\n    }\n  }\n}\n","import { PartiallyVisibleRowsCalculationType } from './partiallyVisibleRows';\n\n/**\n * @class RenderedRowsCalculationType\n */\nexport class RenderedRowsCalculationType extends PartiallyVisibleRowsCalculationType {\n  /**\n   * Finalizes the calculation.\n   *\n   * @param {ViewportRowsCalculator} viewportCalculator The viewport calculator object.\n   */\n  finalize(viewportCalculator) {\n    super.finalize(viewportCalculator);\n\n    const {\n      overrideFn,\n      totalRows,\n      startPositions,\n    } = viewportCalculator;\n\n    if (this.startRow !== null && typeof overrideFn === 'function') {\n      overrideFn(this);\n    }\n\n    if (this.startRow < 0) {\n      this.startRow = 0;\n    }\n\n    this.startPosition = startPositions[this.startRow] ?? null;\n\n    if (totalRows < this.endRow) {\n      this.endRow = totalRows - 1;\n    }\n\n    if (this.startRow !== null) {\n      this.count = this.endRow - this.startRow + 1;\n    }\n  }\n}\n","import { ViewportBaseCalculator } from './viewportBase';\n\nexport const DEFAULT_WIDTH = 50;\n\n/**\n * @typedef {object} ViewportColumnsCalculatorOptions\n * @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.\n * @property {number} viewportWidth Width of the viewport.\n * @property {number} scrollOffset Current horizontal scroll position of the viewport.\n * @property {number} totalColumns Total number of columns.\n * @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).\n * @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.\n * @property {string} inlineStartOffset Inline-start offset of the parent container.\n */\n/**\n * Calculates indexes of columns to render OR columns that are visible OR partially visible in the viewport.\n *\n * @class ViewportColumnsCalculator\n */\nexport class ViewportColumnsCalculator extends ViewportBaseCalculator {\n  viewportWidth = 0;\n  scrollOffset = 0;\n  zeroBasedScrollOffset = 0;\n  totalColumns = 0;\n  columnWidthFn = null;\n  columnWidth = 0;\n  overrideFn = null;\n  inlineStartOffset = 0;\n  totalCalculatedWidth = 0;\n  startPositions = [];\n  needReverse = true;\n\n  /**\n   * @param {ViewportColumnsCalculatorOptions} options Object with all options specified for column viewport calculation.\n   */\n  constructor({\n    calculationTypes,\n    viewportWidth,\n    scrollOffset,\n    totalColumns,\n    columnWidthFn,\n    overrideFn,\n    inlineStartOffset,\n  }) {\n    super(calculationTypes);\n    this.viewportWidth = viewportWidth;\n    this.scrollOffset = scrollOffset;\n    this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);\n    this.totalColumns = totalColumns;\n    this.columnWidthFn = columnWidthFn;\n    this.overrideFn = overrideFn;\n    this.inlineStartOffset = inlineStartOffset;\n\n    this.calculate();\n  }\n\n  /**\n   * Calculates viewport.\n   */\n  calculate() {\n    this._initialize(this);\n\n    for (let column = 0; column < this.totalColumns; column++) {\n      this.columnWidth = this.getColumnWidth(column);\n\n      this._process(column, this);\n\n      this.startPositions.push(this.totalCalculatedWidth);\n      this.totalCalculatedWidth += this.columnWidth;\n\n      if (this.totalCalculatedWidth >= this.zeroBasedScrollOffset + this.viewportWidth) {\n        this.needReverse = false;\n        break;\n      }\n    }\n\n    this._finalize(this);\n  }\n\n  /**\n   * Gets the column width at the specified column index.\n   *\n   * @param {number} column Column index.\n   * @returns {number}\n   */\n  getColumnWidth(column) {\n    const width = this.columnWidthFn(column);\n\n    if (isNaN(width)) {\n      return DEFAULT_WIDTH;\n    }\n\n    return width;\n  }\n}\n","/**\n * @typedef {object} ColumnsCalculationType\n * @property {number | null} startColumn The column index of the first column in the viewport.\n * @property {number | null} endColumn The column index of the last column in the viewport.\n * @property {number} count Total number of columns.\n * @property {number | null} startPosition Position of the first fully column (in px).\n * @property {boolean} isVisibleInTrimmingContainer Determines if the viewport is visible in the trimming container.\n */\n/**\n * @typedef {object} RowsCalculationType\n * @property {number | null} startRow The row index of the first row in the viewport.\n * @property {number | null} endRow The row index of the last row in the viewport.\n * @property {number} count Total number of rows.\n * @property {number | null} startPosition Position of the first fully row (in px).\n * @property {boolean} isVisibleInTrimmingContainer Determines if the viewport is visible in the trimming container.\n */\n/**\n * @class ViewportBaseCalculator\n */\nexport class ViewportBaseCalculator {\n  /**\n   * The calculation types to be performed.\n   *\n   * @type {Array}\n   */\n  calculationTypes = [];\n  /**\n   * The calculation results.\n   *\n   * @type {Map<string, ColumnsCalculationType | RowsCalculationType>}\n   */\n  calculationResults = new Map();\n\n  constructor(calculationTypes) {\n    this.calculationTypes = calculationTypes;\n  }\n\n  /**\n   * Initializes all calculators (triggers all calculators before calculating the rows/columns sizes).\n   *\n   * @param {*} context The context object (rows or columns viewport calculator).\n   */\n  _initialize(context) {\n    this.calculationTypes.forEach(([id, calculator]) => {\n      this.calculationResults.set(id, calculator);\n      calculator.initialize(context);\n    });\n  }\n\n  /**\n   * Processes the row/column at the given index.\n   *\n   * @param {number} index The index of the row/column.\n   * @param {*} context The context object (rows or columns viewport calculator).\n   */\n  _process(index, context) {\n    this.calculationTypes.forEach(([, calculator]) => calculator.process(index, context));\n  }\n\n  /**\n   * Finalizes all calculators (triggers all calculators after calculating the rows/columns sizes).\n   *\n   * @param {*} context The context object (rows or columns viewport calculator).\n   */\n  _finalize(context) {\n    this.calculationTypes.forEach(([, calculator]) => calculator.finalize(context));\n  }\n\n  /**\n   * Gets the results for the given calculator.\n   *\n   * @param {string} calculatorId The id of the calculator.\n   * @returns {ColumnsCalculationType | RowsCalculationType}\n   */\n  getResultsFor(calculatorId) {\n    return this.calculationResults.get(calculatorId);\n  }\n}\n","import { ViewportBaseCalculator } from './viewportBase';\n\nexport const DEFAULT_HEIGHT = 23;\n\n/**\n * @typedef {object} ViewportRowsCalculatorOptions\n * @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.\n * @property {number} viewportHeight Height of the viewport.\n * @property {number} scrollOffset Current vertical scroll position of the viewport.\n * @property {number} totalRows Total number of rows.\n * @property {Function} rowHeightFn Function that returns the height of the row at a given index (in px).\n * @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.\n * @property {number} horizontalScrollbarHeight The scrollbar height.\n */\n/**\n * Calculates indexes of rows to render OR rows that are visible OR partially visible in the viewport.\n *\n * @class ViewportRowsCalculator\n */\nexport class ViewportRowsCalculator extends ViewportBaseCalculator {\n  viewportHeight = 0;\n  scrollOffset = 0;\n  zeroBasedScrollOffset = 0;\n  totalRows = 0;\n  rowHeightFn = null;\n  rowHeight = 0;\n  overrideFn = null;\n  horizontalScrollbarHeight = 0;\n  innerViewportHeight = 0;\n  totalCalculatedHeight = 0;\n  startPositions = [];\n  needReverse = true;\n\n  /**\n   * @param {ViewportRowsCalculatorOptions} options Object with all options specified for row viewport calculation.\n   */\n  constructor({\n    calculationTypes,\n    viewportHeight,\n    scrollOffset,\n    totalRows,\n    rowHeightFn,\n    overrideFn,\n    horizontalScrollbarHeight,\n  }) {\n    super(calculationTypes);\n    this.viewportHeight = viewportHeight;\n    this.scrollOffset = scrollOffset;\n    this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);\n    this.totalRows = totalRows;\n    this.rowHeightFn = rowHeightFn;\n    this.overrideFn = overrideFn;\n    this.horizontalScrollbarHeight = horizontalScrollbarHeight ?? 0;\n    this.innerViewportHeight = this.zeroBasedScrollOffset + this.viewportHeight - this.horizontalScrollbarHeight;\n\n    this.calculate();\n  }\n\n  /**\n   * Calculates viewport.\n   */\n  calculate() {\n    this._initialize(this);\n\n    for (let row = 0; row < this.totalRows; row++) {\n      this.rowHeight = this.getRowHeight(row);\n\n      this._process(row, this);\n\n      this.startPositions.push(this.totalCalculatedHeight);\n      this.totalCalculatedHeight += this.rowHeight;\n\n      if (this.totalCalculatedHeight >= this.innerViewportHeight) {\n        this.needReverse = false;\n        break;\n      }\n    }\n\n    this._finalize(this);\n  }\n\n  /**\n   * Gets the row height at the specified row index.\n   *\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  getRowHeight(row) {\n    const rowHeight = this.rowHeightFn(row);\n\n    if (isNaN(rowHeight)) {\n      return DEFAULT_HEIGHT;\n    }\n\n    return rowHeight;\n  }\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n *\n * The `CellCoords` class holds the coordinates (`row`, `col`) of a single cell.\n *\n * It also contains methods for validating the coordinates\n * and retrieving them as an object.\n *\n * To import the `CellCoords` class:\n *\n * ```js\n * import Handsontable, { CellCoords } from '/handsontable';\n *\n * // or, using modules\n * import Handsontable, { CellCoords } from '/handsontable/base';\n * ```\n */\nclass CellCoords {\n  /**\n   * A visual row index.\n   *\n   * @type {number}\n   */\n  row = null;\n  /**\n   * A visual column index.\n   *\n   * @type {number}\n   */\n  col = null;\n  /**\n   * A flag which determines if the coordinates run in RTL mode.\n   *\n   * @type {boolean}\n   */\n  #isRtl = false;\n\n  constructor(row, column, isRtl = false) {\n    this.#isRtl = isRtl;\n\n    if (typeof row !== 'undefined' && typeof column !== 'undefined') {\n      this.row = row;\n      this.col = column;\n    }\n  }\n\n  /**\n   * Checks if the coordinates in your `CellCoords` instance are valid\n   * in the context of given table parameters.\n   *\n   * The `row` index:\n   * - Must be an integer.\n   * - Must be higher than the number of column headers in the table.\n   * - Must be lower than the total number of rows in the table.\n   *\n   * The `col` index:\n   * - Must be an integer.\n   * - Must be higher than the number of row headers in the table.\n   * - Must be lower than the total number of columns in the table.\n   *\n   * @param {object} [tableParams] An object with a defined table size.\n   * @param {number} [tableParams.countRows=0] The total number of rows.\n   * @param {number} [tableParams.countCols=0] The total number of columns.\n   * @param {number} [tableParams.countRowHeaders=0] A number of row headers.\n   * @param {number} [tableParams.countColHeaders=0] A number of column headers.\n   * @returns {boolean} `true`: The coordinates are valid.\n   */\n  isValid(tableParams) {\n    const { countRows, countCols, countRowHeaders, countColHeaders } = {\n      countRows: 0,\n      countCols: 0,\n      countRowHeaders: 0,\n      countColHeaders: 0,\n      ...tableParams,\n    };\n\n    if (!Number.isInteger(this.row) || !Number.isInteger(this.col)) {\n      return false;\n    }\n\n    if (this.row < -countColHeaders || this.col < -countRowHeaders) {\n      return false;\n    }\n\n    if (this.row >= countRows || this.col >= countCols) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Checks if another set of coordinates (`coords`)\n   * is equal to the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} coords Coordinates to check.\n   * @returns {boolean}\n   */\n  isEqual(coords) {\n    if (coords === this) {\n      return true;\n    }\n\n    return this.row === coords.row && this.col === coords.col;\n  }\n\n  /**\n   * Checks if the coordinates point to the headers range. If one of the axis (row or col) point to\n   * the header (negative value) then method returns `true`.\n   *\n   * @returns {boolean}\n   */\n  isHeader() {\n    return !this.isCell();\n  }\n\n  /**\n   * Checks if the coordinates point to the cells range. If all axis (row and col) point to\n   * the cell (positive value) then method returns `true`.\n   *\n   * @returns {boolean}\n   */\n  isCell() {\n    return this.row >= 0 && this.col >= 0;\n  }\n\n  /**\n   * Checks if the coordinates runs in RTL mode.\n   *\n   * @returns {boolean}\n   */\n  isRtl() {\n    return this.#isRtl;\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is south-east of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isSouthEastOf(testedCoords) {\n    return this.row >= testedCoords.row &&\n      (this.#isRtl ? this.col <= testedCoords.col : this.col >= testedCoords.col);\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is north-west of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isNorthWestOf(testedCoords) {\n    return this.row <= testedCoords.row &&\n      (this.#isRtl ? this.col >= testedCoords.col : this.col <= testedCoords.col);\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is south-west of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isSouthWestOf(testedCoords) {\n    return this.row >= testedCoords.row &&\n      (this.#isRtl ? this.col >= testedCoords.col : this.col <= testedCoords.col);\n  }\n\n  /**\n   * Checks if another set of coordinates (`testedCoords`)\n   * is north-east of the coordinates in your `CellCoords` instance.\n   *\n   * @param {CellCoords} testedCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isNorthEastOf(testedCoords) {\n    return this.row <= testedCoords.row &&\n      (this.#isRtl ? this.col <= testedCoords.col : this.col >= testedCoords.col);\n  }\n\n  /**\n   * Normalizes the coordinates in your `CellCoords` instance to the nearest valid position.\n   *\n   * Coordinates that point to headers (negative values) are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  normalize() {\n    this.row = this.row === null ? this.row : Math.max(this.row, 0);\n    this.col = this.col === null ? this.col : Math.max(this.col, 0);\n\n    return this;\n  }\n\n  /**\n   * Assigns the coordinates from another `CellCoords` instance (or compatible literal object)\n   * to your `CellCoords` instance.\n   *\n   * @param {CellCoords | { row: number | undefined, col: number | undefined }} coords The CellCoords\n   * instance or compatible literal object.\n   * @returns {CellCoords}\n   */\n  assign(coords) {\n    if (Number.isInteger(coords?.row)) {\n      this.row = coords.row;\n    }\n    if (Number.isInteger(coords?.col)) {\n      this.col = coords.col;\n    }\n\n    if (coords instanceof CellCoords) {\n      this.#isRtl = coords.isRtl();\n    }\n\n    return this;\n  }\n\n  /**\n   * Clones your `CellCoords` instance.\n   *\n   * @returns {CellCoords}\n   */\n  clone() {\n    return new CellCoords(this.row, this.col, this.#isRtl);\n  }\n\n  /**\n   * Converts your `CellCoords` instance into an object literal with `row` and `col` properties.\n   *\n   * @returns {{row: number, col: number}} An object literal with `row` and `col` properties.\n   */\n  toObject() {\n    return {\n      row: this.row,\n      col: this.col,\n    };\n  }\n}\n\nexport default CellCoords;\n","import CellCoords from './../cell/coords';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n *\n * The `CellRange` class holds a set of cell coordinates ([`CellCoords`](@/api/cellCoords.md) instances)\n * that form a [selection range](@/guides/cell-features/selection/selection.md#select-ranges).\n *\n * A single `CellRange` instance represents a single unit of selection\n * that contains either a single cell or multiple adjacent cells.\n *\n * To import the `CellRange` class:\n *\n * ```js\n * import Handsontable, { CellRange } from '/handsontable';\n *\n * // or, using modules\n * import Handsontable, { CellRange } from '/handsontable/base';\n * ```\n */\nclass CellRange {\n  /**\n   * Used to draw bold border around a cell where selection was started and to edit the cell\n   * when you press Enter. The highlight cannot point to headers (negative values) so its\n   * coordinates object is normalized while assigning.\n   *\n   * @private\n   * @type {CellCoords}\n   */\n  highlight = null;\n  /**\n   * Usually the same as highlight, but in Excel there is distinction - one can change\n   * highlight within a selection.\n   *\n   * @private\n   * @type {CellCoords}\n   */\n  from = null;\n  /**\n   * End selection.\n   *\n   * @private\n   * @type {CellCoords}\n   */\n  to = null;\n  /**\n   * @type {boolean}\n   */\n  #isRtl = false;\n\n  constructor(highlight, from = highlight, to = highlight, isRtl = false) {\n    this.highlight = highlight.clone();\n    this.from = from.clone();\n    this.to = to.clone();\n    this.#isRtl = isRtl;\n  }\n\n  /**\n   * Highlights cell selection at the `coords` coordinates.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   * @returns {CellRange}\n   */\n  setHighlight(coords) {\n    this.highlight = coords.clone();\n\n    return this;\n  }\n\n  /**\n   * Sets the `coords` coordinates as the start of your range.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   * @returns {CellRange}\n   */\n  setFrom(coords) {\n    this.from = coords.clone();\n\n    return this;\n  }\n\n  /**\n   * Sets the `coords` coordinates as the end of your range.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   * @returns {CellRange}\n   */\n  setTo(coords) {\n    this.to = coords.clone();\n\n    return this;\n  }\n\n  /**\n   * Checks if the coordinates in your `CellRange` instance are valid\n   * in the context of given table parameters.\n   *\n   * See the [`isValid()`](@/api/cellCoords.md#isvalid) method of the [`CellCoords`](@/api/cellCoords.md) class.\n   *\n   * @param {object} tableParams An object with a defined table size.\n   * @param {number} tableParams.countRows The total number of rows.\n   * @param {number} tableParams.countCols The total number of columns.\n   * @param {number} tableParams.countRowHeaders A number of row headers.\n   * @param {number} tableParams.countColHeaders A number of column headers.\n   * @returns {boolean}\n   */\n  isValid(tableParams) {\n    return this.from.isValid(tableParams) && this.to.isValid(tableParams);\n  }\n\n  /**\n   * Checks if your range is just a single cell or header.\n   *\n   * @returns {boolean}\n   */\n  isSingle() {\n    return this.isSingleCell() || this.isSingleHeader();\n  }\n\n  /**\n   * Checks if your range is just a single cell.\n   *\n   * @returns {boolean}\n   */\n  isSingleCell() {\n    return this.from.row >= 0 && this.from.row === this.to.row &&\n           this.from.col >= 0 && this.from.col === this.to.col;\n  }\n\n  /**\n   * Checks if your range is just a single header.\n   *\n   * @returns {boolean}\n   */\n  isSingleHeader() {\n    return (this.from.row < 0 || this.from.col < 0) && this.from.row === this.to.row &&\n           this.from.col === this.to.col;\n  }\n\n  /**\n   * Checks if your range covers only headers range (negative coordinates, without any cells).\n   *\n   * @returns {boolean}\n   */\n  isHeader() {\n    if (this.from.isHeader() && this.to.isHeader()) {\n      return true;\n    }\n\n    return this.from.col < 0 && this.to.col < 0 || this.from.row < 0 && this.to.row < 0;\n  }\n\n  /**\n   * Checks if your range overlaps headers range (negative coordinates).\n   *\n   * @returns {boolean}\n   */\n  containsHeaders() {\n    return this.from.isHeader() || this.to.isHeader();\n  }\n\n  /**\n   * Returns the height of your range (as a number of rows, including row headers).\n   *\n   * @returns {number}\n   */\n  getOuterHeight() {\n    return Math.max(this.from.row, this.to.row) - Math.min(this.from.row, this.to.row) + 1;\n  }\n\n  /**\n   * Returns the width of your range (as a number of columns, including column headers).\n   *\n   * @returns {number}\n   */\n  getOuterWidth() {\n    return Math.max(this.from.col, this.to.col) - Math.min(this.from.col, this.to.col) + 1;\n  }\n\n  /**\n   * Returns the height of your range (as a number of rows, excluding row headers).\n   *\n   * @returns {number}\n   */\n  getHeight() {\n    // if the selection contains only row headers, return 0\n    if (this.from.row < 0 && this.to.row < 0) {\n      return 0;\n    }\n\n    const fromRow = Math.max(this.from.row, 0);\n    const toRow = Math.max(this.to.row, 0);\n\n    return Math.max(fromRow, toRow) - Math.min(fromRow, toRow) + 1;\n  }\n\n  /**\n   * Returns the width of your range (as a number of columns, excluding column headers).\n   *\n   * @returns {number}\n   */\n  getWidth() {\n    // if the selection contains only column headers, return 0\n    if (this.from.col < 0 && this.to.col < 0) {\n      return 0;\n    }\n\n    const fromCol = Math.max(this.from.col, 0);\n    const toCol = Math.max(this.to.col, 0);\n\n    return Math.max(fromCol, toCol) - Math.min(fromCol, toCol) + 1;\n  }\n\n  /**\n   * Returns the number of cells within your range (excluding column and row headers).\n   *\n   * @returns {number}\n   */\n  getCellsCount() {\n    return this.getWidth() * this.getHeight();\n  }\n\n  /**\n   * Checks if another set of coordinates (`cellCoords`)\n   * is within the `from` and `to` coordinates of your range.\n   *\n   * @param {CellCoords} cellCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  includes(cellCoords) {\n    const { row, col } = cellCoords;\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n\n    return topStart.row <= row && bottomEnd.row >= row && topStart.col <= col && bottomEnd.col >= col;\n  }\n\n  /**\n   * Checks if another range (`cellRange`) is within your range.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  includesRange(cellRange) {\n    return this.includes(cellRange.getOuterTopStartCorner()) &&\n           this.includes(cellRange.getOuterBottomEndCorner());\n  }\n\n  /**\n   * Checks if another range (`cellRange`) is equal to your range.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  isEqual(cellRange) {\n    return (Math.min(this.from.row, this.to.row) === Math.min(cellRange.from.row, cellRange.to.row)) &&\n      (Math.max(this.from.row, this.to.row) === Math.max(cellRange.from.row, cellRange.to.row)) &&\n      (Math.min(this.from.col, this.to.col) === Math.min(cellRange.from.col, cellRange.to.col)) &&\n      (Math.max(this.from.col, this.to.col) === Math.max(cellRange.from.col, cellRange.to.col));\n  }\n\n  /**\n   * Checks if another range (`cellRange`) overlaps your range.\n   *\n   * Range A overlaps range B if the intersection of A and B (or B and A) is not empty.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  overlaps(cellRange) {\n    return cellRange.isSouthEastOf(this.getOuterTopLeftCorner()) &&\n           cellRange.isNorthWestOf(this.getOuterBottomRightCorner());\n  }\n\n  /**\n   * Checks if coordinates point is south-east of your range.\n   *\n   * @param {CellCoords} cellCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isSouthEastOf(cellCoords) {\n    return this.getOuterTopLeftCorner().isSouthEastOf(cellCoords) ||\n           this.getOuterBottomRightCorner().isSouthEastOf(cellCoords);\n  }\n\n  /**\n   * Checks if coordinates point is north-west of your range.\n   *\n   * @param {CellRange} cellCoords Coordinates to check.\n   * @returns {boolean}\n   */\n  isNorthWestOf(cellCoords) {\n    return this.getOuterTopLeftCorner().isNorthWestOf(cellCoords) ||\n           this.getOuterBottomRightCorner().isNorthWestOf(cellCoords);\n  }\n\n  /**\n   * Checks if another range (`cellRange`) overlaps your range horizontally.\n   *\n   * For example: returns `true` if the last column of your range is `5`\n   * and the first column of the `cellRange` range is `3`.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  isOverlappingHorizontally(cellRange) {\n    return (this.getOuterTopEndCorner().col >= cellRange.getOuterTopStartCorner().col &&\n            this.getOuterTopEndCorner().col <= cellRange.getOuterTopEndCorner().col) ||\n           (this.getOuterTopStartCorner().col <= cellRange.getOuterTopEndCorner().col &&\n            this.getOuterTopStartCorner().col >= cellRange.getOuterTopStartCorner().col);\n  }\n\n  /**\n   * Checks if another range (`cellRange`) overlaps your range vertically.\n   *\n   * For example: returns `true` if the last row of your range is `5`\n   * and the first row of the `cellRange` range is `3`.\n   *\n   * @param {CellRange} cellRange A range to check.\n   * @returns {boolean}\n   */\n  isOverlappingVertically(cellRange) {\n    return (this.getOuterBottomStartCorner().row >= cellRange.getOuterTopRightCorner().row &&\n            this.getOuterBottomStartCorner().row <= cellRange.getOuterBottomStartCorner().row) ||\n           (this.getOuterTopEndCorner().row <= cellRange.getOuterBottomStartCorner().row &&\n            this.getOuterTopEndCorner().row >= cellRange.getOuterTopRightCorner().row);\n  }\n\n  /**\n   * Adds a cell to your range, at `cellCoords` coordinates.\n   *\n   * The `cellCoords` coordinates must exceed a corner of your range.\n   *\n   * @param {CellCoords} cellCoords A new cell's coordinates.\n   * @returns {boolean}\n   */\n  expand(cellCoords) {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n\n    if (cellCoords.row < topStart.row || cellCoords.col < topStart.col ||\n        cellCoords.row > bottomEnd.row || cellCoords.col > bottomEnd.col) {\n      this.from = this._createCellCoords(Math.min(topStart.row, cellCoords.row),\n        Math.min(topStart.col, cellCoords.col));\n      this.to = this._createCellCoords(Math.max(bottomEnd.row, cellCoords.row),\n        Math.max(bottomEnd.col, cellCoords.col));\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Expand your range with another range (`expandingRange`).\n   *\n   * @param {CellRange} expandingRange A new range.\n   * @param {boolean} [changeDirection=true] If `true`, the direction of your range is changed to the direction\n   * of the `expandingRange` range.\n   * @returns {boolean}\n   */\n  expandByRange(expandingRange, changeDirection = true) {\n    if (this.includesRange(expandingRange) || !this.overlaps(expandingRange)) {\n      return false;\n    }\n\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n    const initialDirection = this.getDirection();\n\n    const expandingTopStart = expandingRange.getOuterTopStartCorner();\n    const expandingBottomEnd = expandingRange.getOuterBottomEndCorner();\n\n    const resultTopRow = Math.min(topStart.row, expandingTopStart.row);\n    const resultTopCol = Math.min(topStart.col, expandingTopStart.col);\n    const resultBottomRow = Math.max(bottomEnd.row, expandingBottomEnd.row);\n    const resultBottomCol = Math.max(bottomEnd.col, expandingBottomEnd.col);\n\n    const finalFrom = this._createCellCoords(resultTopRow, resultTopCol);\n    const finalTo = this._createCellCoords(resultBottomRow, resultBottomCol);\n\n    this.from = finalFrom;\n    this.to = finalTo;\n\n    this.setDirection(initialDirection);\n\n    if (changeDirection) {\n      if (this.highlight.row === this.getOuterBottomRightCorner().row && this.getVerticalDirection() === 'N-S') {\n        this.flipDirectionVertically();\n      }\n\n      if (this.highlight.col === this.getOuterTopRightCorner().col && this.getHorizontalDirection() === 'W-E') {\n        this.flipDirectionHorizontally();\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Gets the direction of the selection.\n   *\n   * @returns {string} Returns one of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n   */\n  getDirection() {\n    if (this.from.isNorthWestOf(this.to)) { // NorthWest - SouthEast\n      return 'NW-SE';\n\n    } else if (this.from.isNorthEastOf(this.to)) { // NorthEast - SouthWest\n      return 'NE-SW';\n\n    } else if (this.from.isSouthEastOf(this.to)) { // SouthEast - NorthWest\n      return 'SE-NW';\n\n    } else if (this.from.isSouthWestOf(this.to)) { // SouthWest - NorthEast\n      return 'SW-NE';\n    }\n  }\n\n  /**\n   * Sets the direction of the selection.\n   *\n   * @param {string} direction One of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n   */\n  setDirection(direction) {\n    switch (direction) {\n      case 'NW-SE':\n        [this.from, this.to] = [this.getOuterTopLeftCorner(), this.getOuterBottomRightCorner()];\n        break;\n      case 'NE-SW':\n        [this.from, this.to] = [this.getOuterTopRightCorner(), this.getOuterBottomLeftCorner()];\n        break;\n      case 'SE-NW':\n        [this.from, this.to] = [this.getOuterBottomRightCorner(), this.getOuterTopLeftCorner()];\n        break;\n      case 'SW-NE':\n        [this.from, this.to] = [this.getOuterBottomLeftCorner(), this.getOuterTopRightCorner()];\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Gets the vertical direction of the selection.\n   *\n   * @returns {string} Returns one of the values: `N-S` (north->south), `S-N` (south->north).\n   */\n  getVerticalDirection() {\n    return ['NE-SW', 'NW-SE'].indexOf(this.getDirection()) > -1 ? 'N-S' : 'S-N';\n  }\n\n  /**\n   * Gets the horizontal direction of the selection.\n   *\n   * @returns {string} Returns one of the values: `W-E` (west->east), `E-W` (east->west).\n   */\n  getHorizontalDirection() {\n    return ['NW-SE', 'SW-NE'].indexOf(this.getDirection()) > -1 ? 'W-E' : 'E-W';\n  }\n\n  /**\n   * Flips the direction of your range vertically (e.g., `NW-SE` changes to `SW-NE`).\n   */\n  flipDirectionVertically() {\n    const direction = this.getDirection();\n\n    switch (direction) {\n      case 'NW-SE':\n        this.setDirection('SW-NE');\n        break;\n      case 'NE-SW':\n        this.setDirection('SE-NW');\n        break;\n      case 'SE-NW':\n        this.setDirection('NE-SW');\n        break;\n      case 'SW-NE':\n        this.setDirection('NW-SE');\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Flips the direction of your range horizontally (e.g., `NW-SE` changes to `NE-SW`).\n   */\n  flipDirectionHorizontally() {\n    const direction = this.getDirection();\n\n    switch (direction) {\n      case 'NW-SE':\n        this.setDirection('NE-SW');\n        break;\n      case 'NE-SW':\n        this.setDirection('NW-SE');\n        break;\n      case 'SE-NW':\n        this.setDirection('SW-NE');\n        break;\n      case 'SW-NE':\n        this.setDirection('SE-NW');\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Gets the top-left (in LTR) or top-right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopStartCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row),\n      Math.min(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the top-left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopLeftCorner() {\n    return this.#isRtl ? this.getTopEndCorner() : this.getTopStartCorner();\n  }\n\n  /**\n   * Gets the bottom right (in LTR) or bottom left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomEndCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row),\n      Math.max(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the bottom right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomRightCorner() {\n    return this.#isRtl ? this.getBottomStartCorner() : this.getBottomEndCorner();\n  }\n\n  /**\n   * Gets the top right (in LTR) or top left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopEndCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row),\n      Math.max(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the top right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getTopRightCorner() {\n    return this.#isRtl ? this.getTopStartCorner() : this.getTopEndCorner();\n  }\n\n  /**\n   * Gets the bottom left (in LTR) or bottom right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomStartCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row),\n      Math.min(this.from.col, this.to.col)).normalize();\n  }\n\n  /**\n   * Gets the bottom left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the corner coordinates are normalized to `0`.\n   *\n   * @returns {CellCoords}\n   */\n  getBottomLeftCorner() {\n    return this.#isRtl ? this.getBottomEndCorner() : this.getBottomStartCorner();\n  }\n\n  /**\n   * Gets the top left (in LTR) or top right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopStartCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the top left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopLeftCorner() {\n    return this.#isRtl ? this.getOuterTopEndCorner() : this.getOuterTopStartCorner();\n  }\n\n  /**\n   * Gets the bottom right (in LTR) or bottom left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomEndCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the bottom right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomRightCorner() {\n    return this.#isRtl ? this.getOuterBottomStartCorner() : this.getOuterBottomEndCorner();\n  }\n\n  /**\n   * Gets the top right (in LTR) or top left (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopEndCorner() {\n    return this._createCellCoords(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the top right corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterTopRightCorner() {\n    return this.#isRtl ? this.getOuterTopStartCorner() : this.getOuterTopEndCorner();\n  }\n\n  /**\n   * Gets the bottom left (in LTR) or bottom right (in RTL) corner coordinates of your range.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and start coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomStartCorner() {\n    return this._createCellCoords(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n  }\n\n  /**\n   * Gets the bottom left corner coordinates of your range,\n   * both in the LTR and RTL layout direction.\n   *\n   * If the corner contains header coordinates (negative values),\n   * the top and left coordinates are pointed to that header.\n   *\n   * @returns {CellCoords}\n   */\n  getOuterBottomLeftCorner() {\n    return this.#isRtl ? this.getOuterBottomEndCorner() : this.getOuterBottomStartCorner();\n  }\n\n  /**\n   * Checks if a set of coordinates (`coords`) matches one of the 4 corners of your range.\n   *\n   * @param {CellCoords} coords Coordinates to check.\n   * @returns {boolean}\n   */\n  isCorner(coords) {\n    return coords.isEqual(this.getOuterTopLeftCorner()) || coords.isEqual(this.getOuterTopRightCorner()) ||\n      coords.isEqual(this.getOuterBottomLeftCorner()) || coords.isEqual(this.getOuterBottomRightCorner());\n  }\n\n  /**\n   * Gets the coordinates of a range corner opposite to the provided `coords`.\n   *\n   * For example: if the `coords` coordinates match the bottom-right corner of your range,\n   * the coordinates of the top-left corner of your range are returned.\n   *\n   * @param {CellCoords} coords Coordinates to check.\n   * @returns {CellCoords}\n   */\n  getOppositeCorner(coords) {\n    if (!(coords instanceof CellCoords)) {\n      return false;\n    }\n\n    if (coords.isEqual(this.getOuterBottomEndCorner())) {\n      return this.getOuterTopStartCorner();\n\n    } else if (coords.isEqual(this.getOuterTopStartCorner())) {\n      return this.getOuterBottomEndCorner();\n\n    } else if (coords.isEqual(this.getOuterTopEndCorner())) {\n      return this.getOuterBottomStartCorner();\n\n    } else if (coords.isEqual(this.getOuterBottomStartCorner())) {\n      return this.getOuterTopEndCorner();\n    }\n  }\n\n  /**\n   * Indicates which borders (top, right, bottom, left) are shared between\n   * your `CellRange`instance and another `range` that's within your range.\n   *\n   * @param {CellRange} range A range to compare with.\n   * @returns {Array<'top' | 'right' | 'bottom' | 'left'>}\n   */\n  getBordersSharedWith(range) {\n    if (!this.includesRange(range)) {\n      return [];\n    }\n\n    const thisBorders = {\n      top: Math.min(this.from.row, this.to.row),\n      bottom: Math.max(this.from.row, this.to.row),\n      left: Math.min(this.from.col, this.to.col),\n      right: Math.max(this.from.col, this.to.col)\n    };\n    const rangeBorders = {\n      top: Math.min(range.from.row, range.to.row),\n      bottom: Math.max(range.from.row, range.to.row),\n      left: Math.min(range.from.col, range.to.col),\n      right: Math.max(range.from.col, range.to.col)\n    };\n    const result = [];\n\n    if (thisBorders.top === rangeBorders.top) {\n      result.push('top');\n    }\n    if (thisBorders.right === rangeBorders.right) {\n      result.push(this.#isRtl ? 'left' : 'right');\n    }\n    if (thisBorders.bottom === rangeBorders.bottom) {\n      result.push('bottom');\n    }\n    if (thisBorders.left === rangeBorders.left) {\n      result.push(this.#isRtl ? 'right' : 'left');\n    }\n\n    return result;\n  }\n\n  /**\n   * Gets the coordinates of the inner cells of your range.\n   *\n   * @returns {CellCoords[]}\n   */\n  getInner() {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n    const out = [];\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        if (!(this.from.row === r && this.from.col === c) && !(this.to.row === r && this.to.col === c)) {\n          out.push(this._createCellCoords(r, c));\n        }\n      }\n    }\n\n    return out;\n  }\n\n  /**\n   * Gets the coordinates of all cells of your range.\n   *\n   * @returns {CellCoords[]}\n   */\n  getAll() {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n    const out = [];\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        if (topStart.row === r && topStart.col === c) {\n          out.push(topStart);\n\n        } else if (bottomEnd.row === r && bottomEnd.col === c) {\n          out.push(bottomEnd);\n\n        } else {\n          out.push(this._createCellCoords(r, c));\n        }\n      }\n    }\n\n    return out;\n  }\n\n  /**\n   * Runs a callback function on all cells within your range.\n   *\n   * You can break the iteration by returning `false` in the callback function.\n   *\n   * @param {function(number, number): boolean} callback A callback function.\n   */\n  forAll(callback) {\n    const topStart = this.getOuterTopStartCorner();\n    const bottomEnd = this.getOuterBottomEndCorner();\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        const breakIteration = callback(r, c);\n\n        if (breakIteration === false) {\n          return;\n        }\n      }\n    }\n  }\n\n  /**\n   * Clones your `CellRange` instance.\n   *\n   * @returns {CellRange}\n   */\n  clone() {\n    return new CellRange(this.highlight, this.from, this.to, this.#isRtl);\n  }\n\n  /**\n   * Converts your `CellRange` instance into an object literal with the following properties:\n   *\n   * - `from`\n   *    - `row`\n   *    - `col`\n   * - `to`\n   *    - `row`\n   *    - `col`\n   *\n   * @returns {{from: {row: number, col: number}, to: {row: number, col: number}}} An object literal with `from` and `to` properties.\n   */\n  toObject() {\n    return {\n      from: this.from.toObject(),\n      to: this.to.toObject(),\n    };\n  }\n\n  /**\n   * Creates and returns a new instance of the `CellCoords` class.\n   *\n   * The new `CellCoords` instance automatically inherits the LTR/RTL flag\n   * from your `CellRange` instance.\n   *\n   * @private\n   * @param {number} row A row index.\n   * @param {number} column A column index.\n   * @returns {CellCoords}\n   */\n  _createCellCoords(row, column) {\n    return new CellCoords(row, column, this.#isRtl);\n  }\n}\n\nexport default CellRange;\n","import Walkontable from '../core/core';\nimport CoreAbstract from '../core/_base';\n\n/**\n * This layer cares about backward compatibility.\n *\n * @class WalkontableFacade\n * @augments Walkontable\n * @inheritDoc\n */\nexport default class WalkontableFacade {\n  /**\n   * @param {SettingsPure|Walkontable} settingsOrInstance The Walkontable settings.\n   */\n  constructor(settingsOrInstance) {\n    if (settingsOrInstance instanceof CoreAbstract) {\n      this._wot = settingsOrInstance;\n    } else {\n      this._initFromSettings(settingsOrInstance);\n    }\n  }\n\n  _initFromSettings(settings) {\n    settings.facade = (instance) => {\n      const facade = new WalkontableFacade(instance);\n\n      return () => facade;\n    };\n\n    this._wot = new Walkontable(settings.table, settings);\n  }\n\n  get guid() {\n    return this._wot.guid;\n  }\n\n  get rootDocument() {\n    return this._wot.domBindings.rootDocument;\n  }\n\n  get rootWindow() {\n    return this._wot.domBindings.rootWindow;\n  }\n  get wtSettings() {\n    return this._wot.wtSettings; // todo create facade\n  }\n  get cloneSource() {\n    return this._wot.cloneSource; // todo create facade\n  }\n  get cloneOverlay() {\n    return this._wot.cloneOverlay; // todo create facade\n  }\n  get selectionManager() {\n    return this._wot.selectionManager; // todo create facade\n  }\n  get wtViewport() {\n    return this._wot.wtViewport; // todo create facade\n  }\n  get wtOverlays() {\n    return this._wot.wtOverlays; // todo create facade\n  }\n  get wtTable() {\n    return this._wot.wtTable; // todo create facade\n  }\n  get wtEvent() {\n    return this._wot.wtEvent; // todo create facade\n  }\n  get wtScroll() {\n    return this._wot.wtScroll; // todo create facade\n  }\n  get drawn() {\n    return this._wot.drawn;\n  }\n  set drawn(value) {\n    this._wot.drawn = value;\n  }\n  get drawInterrupted() {\n    return this._wot.drawInterrupted;\n  }\n  set drawInterrupted(value) {\n    this._wot.drawInterrupted = value;\n  }\n  get lastMouseOver() {\n    return this._wot.lastMouseOver;\n  }\n  set lastMouseOver(value) {\n    this._wot.lastMouseOver = value;\n  }\n  get momentumScrolling() {\n    return this._wot.momentumScrolling;\n  }\n  set momentumScrolling(value) {\n    this._wot.momentumScrolling = value;\n  }\n  get touchApplied() {\n    return this._wot.touchApplied;\n  }\n  set touchApplied(value) {\n    this._wot.touchApplied = value;\n  }\n  get domBindings() {\n    return this._wot.domBindings;\n  }\n  get eventListeners() {\n    return this._wot.eventListeners;\n  }\n  set eventListeners(value) {\n    this._wot.eventListeners = value;\n  }\n  get eventManager() {\n    return this._wot.eventManager;\n  }\n\n  createCellCoords(row, column) {\n    return this._wot.createCellCoords(row, column);\n  }\n\n  createCellRange(highlight, from, to) {\n    return this._wot.createCellRange(highlight, from, to);\n  }\n\n  draw(fastDraw = false) {\n    this._wot.draw(fastDraw);\n\n    return this;\n  }\n\n  getCell(coords, topmost = false) {\n    return this._wot.getCell(coords, topmost);\n  }\n\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    return this._wot.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n  }\n\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    return this._wot.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n  }\n\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    return this._wot.scrollViewportVertically(row, snapToTop, snapToBottom);\n  }\n\n  getViewport() {\n    return this._wot.getViewport();\n  }\n\n  getOverlayName() {\n    return this._wot.cloneOverlay ? this._wot.cloneOverlay.type : 'master';\n  }\n\n  getOverlayByName(overlayName) {\n    return this._wot.getOverlayByName(overlayName);\n  }\n\n  exportSettingsAsClassNames() {\n    return this._wot.exportSettingsAsClassNames();\n  }\n\n  update(settings, value) {\n    this._wot.wtSettings.update(settings, value);\n\n    return this;\n  }\n\n  getSetting(key, param1, param2, param3, param4) {\n    return this._wot.wtSettings.getSetting(key, param1, param2, param3, param4);\n  }\n\n  hasSetting(key) {\n    return this._wot.wtSettings.hasSetting(key);\n  }\n\n  destroy() {\n    this._wot.destroy();\n  }\n}\n","import Event from '../event';\nimport Overlays from '../overlays';\nimport { CLONE_TYPES } from '../overlay';\nimport Settings from '../settings';\nimport MasterTable from '../table/master';\nimport Viewport from '../viewport';\nimport CoreAbstract from './_base';\nimport { SelectionManager } from '../selection/manager';\nimport { objectEach } from '../../../../helpers/object';\nimport { addClass, removeClass } from '../../../../helpers/dom/element';\n\n/**\n * @class Walkontable\n */\nexport default class Walkontable extends CoreAbstract {\n  /**\n   * @param {HTMLTableElement} table Main table.\n   * @param {SettingsPure} settings The Walkontable settings.\n   */\n  constructor(table, settings) {\n    super(table, new Settings(settings));\n\n    const facadeGetter = this.wtSettings.getSetting('facade', this); // todo rethink. I would like to have no access to facade from the internal scope.\n\n    this.wtTable = new MasterTable(this.getTableDao(), facadeGetter, this.domBindings, this.wtSettings);\n    this.wtViewport = new Viewport(\n      this.getViewportDao(), this.domBindings, this.wtSettings, this.eventManager, this.wtTable\n    );\n    this.selectionManager = new SelectionManager(this.wtSettings.getSetting('selections'));\n    this.wtEvent = new Event(\n      facadeGetter, this.domBindings, this.wtSettings, this.eventManager, this.wtTable, this.selectionManager\n    );\n    this.wtOverlays = new Overlays(\n      // TODO create DAO and remove reference to the Walkontable instance.\n      this, facadeGetter, this.domBindings, this.wtSettings, this.eventManager, this.wtTable\n    );\n\n    this.exportSettingsAsClassNames();\n\n    this.findOriginalHeaders();\n  }\n\n  /**\n   * Export settings as class names added to the parent element of the table.\n   */\n  exportSettingsAsClassNames() {\n    const toExport = {\n      rowHeaders: 'htRowHeaders',\n      columnHeaders: 'htColumnHeaders'\n    };\n    const allClassNames = [];\n    const newClassNames = [];\n\n    objectEach(toExport, (className, key) => {\n      if (this.wtSettings.getSetting(key).length) {\n        newClassNames.push(className);\n      }\n      allClassNames.push(className);\n    });\n    removeClass(this.wtTable.wtRootElement.parentNode, allClassNames);\n    addClass(this.wtTable.wtRootElement.parentNode, newClassNames);\n  }\n\n  /**\n   * Gets the overlay instance by its name.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'} overlayName The overlay name.\n   * @returns {Overlay | null}\n   */\n  getOverlayByName(overlayName) {\n    if (!CLONE_TYPES.includes(overlayName)) {\n      return null;\n    }\n\n    const camelCaseOverlay = overlayName.replace(/_([a-z])/g, match => match[1].toUpperCase());\n\n    return this.wtOverlays[`${camelCaseOverlay}Overlay`] ?? null;\n  }\n\n  /**\n   * @returns {ViewportDao}\n   */\n  getViewportDao() {\n    const wot = this;\n\n    return {\n      get wot() {\n        return wot;\n      },\n      get topOverlayTrimmingContainer() {\n        return wot.wtOverlays.topOverlay.trimmingContainer;\n      },\n      get inlineStartOverlayTrimmingContainer() {\n        return wot.wtOverlays.inlineStartOverlay.trimmingContainer;\n      },\n      get topScrollPosition() {\n        return wot.wtOverlays.topOverlay.getScrollPosition();\n      },\n      get topParentOffset() {\n        return wot.wtOverlays.topOverlay.getTableParentOffset();\n      },\n      get inlineStartScrollPosition() {\n        return wot.wtOverlays.inlineStartOverlay.getScrollPosition();\n      },\n      get inlineStartParentOffset() {\n        return wot.wtOverlays.inlineStartOverlay.getTableParentOffset();\n      },\n      get topOverlay() {\n        return wot.wtOverlays.topOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get inlineStartOverlay() {\n        return wot.wtOverlays.inlineStartOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get bottomOverlay() {\n        return wot.wtOverlays.bottomOverlay; // TODO refactoring: move outside dao, use IOC\n      }\n    };\n  }\n}\n","import {\n  closestDown,\n  hasClass,\n  isChildOf,\n  getParent,\n} from '../../../helpers/dom/element';\nimport { partial } from '../../../helpers/function';\nimport { isTouchSupported } from '../../../helpers/feature';\nimport { isMobileBrowser, isChromeWebKit, isFirefoxWebKit, isIOS } from '../../../helpers/browser';\nimport { isDefined } from '../../../helpers/mixed';\n\n/**\n * @class Event\n */\nclass Event {\n  #wtSettings;\n  #domBindings;\n  #wtTable;\n  #selectionManager;\n  #parent;\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @type {EventManager}\n   */\n  #eventManager;\n  /**\n   * Should be use only for passing face called external origin methods, like registered event listeners.\n   * It provides backward compatibility by getting instance facade.\n   *\n   * @todo Consider about removing this from Event class, because it make relationship into facade (implicit circular\n   *   dependency).\n   * @todo Con. Maybe passing listener caller as an ioc from faced resolves this issue. To rethink later.\n   *\n   * @type {FacadeGetter}\n   */\n  #facadeGetter;\n  /**\n   * @type {boolean}\n   */\n  #selectedCellBeforeTouchEnd;\n  /**\n   * @type {number[]}\n   */\n  #dblClickTimeout = [null, null];\n  /**\n   * @type {number[]}\n   */\n  #dblClickOrigin = [null, null];\n\n  /**\n   * @param {FacadeGetter} facadeGetter Gets an instance facade.\n   * @param {DomBindings} domBindings Bindings into dom.\n   * @param {Settings} wtSettings The walkontable settings.\n   * @param {EventManager} eventManager The walkontable event manager.\n   * @param {Table} wtTable The table.\n   * @param {SelectionManager} selectionManager Selections.\n   * @param {Event} [parent=null] The main Event instance.\n   */\n  constructor(facadeGetter, domBindings, wtSettings, eventManager, wtTable, selectionManager, parent = null) {\n    this.#wtSettings = wtSettings;\n    this.#domBindings = domBindings;\n    this.#wtTable = wtTable;\n    this.#selectionManager = selectionManager;\n    this.#parent = parent;\n    this.#eventManager = eventManager;\n    this.#facadeGetter = facadeGetter;\n\n    this.registerEvents();\n  }\n\n  /**\n   * Adds listeners for mouse and touch events.\n   *\n   * @private\n   */\n  registerEvents() {\n    this.#eventManager.addEventListener(this.#wtTable.holder, 'contextmenu', event => this.onContextMenu(event));\n    this.#eventManager.addEventListener(this.#wtTable.TABLE, 'mouseover', event => this.onMouseOver(event));\n    this.#eventManager.addEventListener(this.#wtTable.TABLE, 'mouseout', event => this.onMouseOut(event));\n\n    const initTouchEvents = () => {\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'touchstart', event => this.onTouchStart(event));\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'touchend', event => this.onTouchEnd(event));\n\n      if (!this.momentumScrolling) {\n        this.momentumScrolling = {};\n      }\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'scroll', () => {\n        clearTimeout(this.momentumScrolling._timeout);\n\n        if (!this.momentumScrolling.ongoing) {\n          this.#wtSettings.getSetting('onBeforeTouchScroll');\n        }\n        this.momentumScrolling.ongoing = true;\n\n        this.momentumScrolling._timeout = setTimeout(() => {\n          if (!this.touchApplied) {\n            this.momentumScrolling.ongoing = false;\n\n            this.#wtSettings.getSetting('onAfterMomentumScroll');\n          }\n        }, 200);\n      });\n    };\n\n    const initMouseEvents = () => {\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'mouseup', event => this.onMouseUp(event));\n      this.#eventManager.addEventListener(this.#wtTable.holder, 'mousedown', event => this.onMouseDown(event));\n    };\n\n    if (isMobileBrowser()) {\n      initTouchEvents();\n    } else {\n      // PC like devices which support both methods (touchscreen and ability to plug-in mouse).\n      if (isTouchSupported()) {\n        initTouchEvents();\n      }\n\n      initMouseEvents();\n    }\n  }\n\n  /**\n   * Checks if an element is already selected.\n   *\n   * @private\n   * @param {Element} touchTarget An element to check.\n   * @returns {boolean}\n   */\n  selectedCellWasTouched(touchTarget) {\n    const cellUnderFinger = this.parentCell(touchTarget);\n    const coordsOfCellUnderFinger = cellUnderFinger.coords;\n\n    if (this.#selectedCellBeforeTouchEnd && coordsOfCellUnderFinger) {\n      const [rowTouched, rowSelected] = [coordsOfCellUnderFinger.row, this.#selectedCellBeforeTouchEnd.from.row];\n      const [colTouched, colSelected] = [coordsOfCellUnderFinger.col, this.#selectedCellBeforeTouchEnd.from.col];\n\n      return rowTouched === rowSelected && colTouched === colSelected;\n    }\n\n    return false;\n  }\n\n  /**\n   * Gets closest TD or TH element.\n   *\n   * @private\n   * @param {Element} elem An element from the traversing starts.\n   * @returns {object} Contains coordinates and reference to TD or TH if it exists. Otherwise it's empty object.\n   */\n  parentCell(elem) {\n    const cell = {};\n    const TABLE = this.#wtTable.TABLE;\n    const TD = closestDown(elem, ['TD', 'TH'], TABLE);\n\n    if (TD) {\n      cell.coords = this.#wtTable.getCoords(TD);\n      cell.TD = TD;\n\n    } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'current')) {\n      cell.coords = this.#selectionManager.getFocusSelection().cellRange.highlight;\n      cell.TD = this.#wtTable.getCell(cell.coords);\n\n    } else if (hasClass(elem, 'wtBorder') && hasClass(elem, 'area')) {\n      if (this.#selectionManager.getAreaSelection().cellRange) {\n        cell.coords = this.#selectionManager.getAreaSelection().cellRange.to;\n        cell.TD = this.#wtTable.getCell(cell.coords);\n      }\n    }\n\n    return cell;\n  }\n\n  /**\n   * OnMouseDown callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseDown(event) {\n    const activeElement = this.#domBindings.rootDocument.activeElement;\n    const getParentNode = partial(getParent, event.target);\n    const realTarget = event.target;\n\n    // ignore non-TD focusable elements from mouse down processing\n    // (https://github.com/handsontable/handsontable/issues/3555)\n    if (!['TD', 'TH'].includes(activeElement.nodeName) &&\n      (\n        realTarget === activeElement ||\n        getParentNode(0) === activeElement ||\n        getParentNode(1) === activeElement\n      )\n    ) {\n      return;\n    }\n\n    const cell = this.parentCell(realTarget);\n\n    if (hasClass(realTarget, 'corner')) {\n      this.#wtSettings.getSetting('onCellCornerMouseDown', event, realTarget);\n\n    } else if (cell.TD && this.#wtSettings.has('onCellMouseDown')) {\n      this.callListener('onCellMouseDown', event, cell.coords, cell.TD);\n    }\n\n    // doubleclick reacts only for left mouse button or from touch events\n    if ((event.button === 0 || this.touchApplied) && cell.TD) {\n      this.#dblClickOrigin[0] = cell.TD;\n\n      clearTimeout(this.#dblClickTimeout[0]);\n\n      this.#dblClickTimeout[0] = setTimeout(() => {\n        this.#dblClickOrigin[0] = null;\n      }, 1000);\n    }\n  }\n\n  /**\n   * OnContextMenu callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onContextMenu(event) {\n    if (this.#wtSettings.has('onCellContextMenu')) {\n      const cell = this.parentCell(event.target);\n\n      if (cell.TD) {\n        this.callListener('onCellContextMenu', event, cell.coords, cell.TD);\n      }\n    }\n  }\n\n  /**\n   * OnMouseOver callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseOver(event) {\n    if (!this.#wtSettings.has('onCellMouseOver')) {\n      return;\n    }\n\n    const table = this.#wtTable.TABLE;\n    const td = closestDown(event.target, ['TD', 'TH'], table);\n    const parent = this.#parent || this;\n\n    if (td && td !== parent.lastMouseOver && isChildOf(td, table)) {\n      parent.lastMouseOver = td;\n\n      this.callListener('onCellMouseOver', event, this.#wtTable.getCoords(td), td);\n    }\n  }\n\n  /**\n   * OnMouseOut callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseOut(event) {\n    if (!this.#wtSettings.has('onCellMouseOut')) {\n      return;\n    }\n\n    const table = this.#wtTable.TABLE;\n    const lastTD = closestDown(event.target, ['TD', 'TH'], table);\n    const nextTD = closestDown(event.relatedTarget, ['TD', 'TH'], table);\n    const parent = this.#parent || this;\n\n    if (lastTD && lastTD !== nextTD && isChildOf(lastTD, table)) {\n      this.callListener('onCellMouseOut', event, this.#wtTable.getCoords(lastTD), lastTD);\n\n      if (nextTD === null) {\n        parent.lastMouseOver = null;\n      }\n    }\n  }\n\n  /**\n   * OnMouseUp callback.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onMouseUp(event) {\n    const cell = this.parentCell(event.target);\n\n    if (cell.TD && this.#wtSettings.has('onCellMouseUp')) {\n      this.callListener('onCellMouseUp', event, cell.coords, cell.TD);\n    }\n\n    // if not left mouse button, and the origin event is not comes from touch\n    if (event.button !== 0 && !this.touchApplied) {\n      return;\n    }\n\n    if (cell.TD === this.#dblClickOrigin[0] && cell.TD === this.#dblClickOrigin[1]) {\n      if (hasClass(event.target, 'corner')) {\n        this.callListener('onCellCornerDblClick', event, cell.coords, cell.TD);\n      } else {\n        this.callListener('onCellDblClick', event, cell.coords, cell.TD);\n      }\n\n      this.#dblClickOrigin[0] = null;\n      this.#dblClickOrigin[1] = null;\n\n    } else if (cell.TD === this.#dblClickOrigin[0]) {\n      this.#dblClickOrigin[1] = cell.TD;\n\n      clearTimeout(this.#dblClickTimeout[1]);\n\n      this.#dblClickTimeout[1] = setTimeout(() => {\n        this.#dblClickOrigin[1] = null;\n      }, 500);\n    }\n  }\n\n  /**\n   * OnTouchStart callback. Simulates mousedown event.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onTouchStart(event) {\n    this.#selectedCellBeforeTouchEnd = this.#selectionManager.getFocusSelection().cellRange;\n    this.touchApplied = true;\n\n    this.onMouseDown(event);\n  }\n\n  /**\n   * OnTouchEnd callback. Simulates mouseup event.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onTouchEnd(event) {\n    const target = event.target;\n    const parentCellCoords = this.parentCell(target)?.coords;\n    const isCellsRange = isDefined(parentCellCoords) && (parentCellCoords.row >= 0 && parentCellCoords.col >= 0);\n    const isEventCancelable = event.cancelable && isCellsRange && this.#wtSettings.getSetting('isDataViewInstance');\n\n    // To prevent accidental redirects or other actions that the interactive elements (e.q \"A\" link) do\n    // while the cell is highlighted, all touch events that are triggered on different cells are\n    // \"preventDefault\"'ed. The user can interact with the element (e.q. click on the link that opens\n    // a new page) only when the same cell was previously selected (see related PR #7980).\n    if (isEventCancelable) {\n      const interactiveElements = ['A', 'BUTTON', 'INPUT'];\n\n      // For browsers that use the WebKit as an engine (excluding Safari), there is a bug. The prevent\n      // default has to be called all the time. Otherwise, the second tap won't be triggered (probably\n      // caused by the native ~300ms delay - https://webkit.org/blog/5610/more-responsive-tapping-on-ios/).\n      // To make the interactive elements work, the event target element has to be check. If the element\n      // matches the allow-list, the event is not prevented.\n      if (isIOS() &&\n          (isChromeWebKit() || isFirefoxWebKit()) &&\n          this.selectedCellWasTouched(target) &&\n          !interactiveElements.includes(target.tagName)) {\n        event.preventDefault();\n\n      } else if (!this.selectedCellWasTouched(target)) {\n        // For other browsers, prevent default is fired only for the first tap and only when the previous\n        // highlighted cell was different.\n        event.preventDefault();\n      }\n    }\n\n    this.onMouseUp(event);\n\n    this.touchApplied = false;\n  }\n\n  /**\n   * Call listener with backward compatibility.\n   *\n   * @private\n   * @param {string} name Name of listener.\n   * @param {MouseEvent} event The event object.\n   * @param {CellCoords} coords Coordinates.\n   * @param {HTMLElement} target Event target.\n   */\n  callListener(name, event, coords, target) {\n    const listener = this.#wtSettings.getSettingPure(name);\n\n    if (listener) {\n      listener(event, coords, target, this.#facadeGetter());\n    }\n  }\n\n  /**\n   * Clears double-click timeouts and destroys the internal eventManager instance.\n   */\n  destroy() {\n    clearTimeout(this.#dblClickTimeout[0]);\n    clearTimeout(this.#dblClickTimeout[1]);\n\n    this.#eventManager.destroy();\n  }\n}\n\nexport default Event;\n","import {\n  getScrollableElement,\n  getScrollbarWidth,\n} from '../../../helpers/dom/element';\nimport { requestAnimationFrame } from '../../../helpers/feature';\nimport { arrayEach } from '../../../helpers/array';\nimport { isKey } from '../../../helpers/unicode';\nimport { isChrome } from '../../../helpers/browser';\nimport { warn } from '../../../helpers/console';\nimport {\n  InlineStartOverlay,\n  TopOverlay,\n  TopInlineStartCornerOverlay,\n  BottomOverlay,\n  BottomInlineStartCornerOverlay,\n} from './overlay';\n\n/**\n * @class Overlays\n */\nclass Overlays {\n  /**\n   * Walkontable instance's reference.\n   *\n   * @protected\n   * @type {Walkontable}\n   */\n  wot = null;\n\n  /**\n   * An array of the all overlays.\n   *\n   * @type {Overlay[]}\n   */\n  #overlays = [];\n\n  /**\n   * Refer to the TopOverlay instance.\n   *\n   * @protected\n   * @type {TopOverlay}\n   */\n  topOverlay = null;\n\n  /**\n   * Refer to the BottomOverlay instance.\n   *\n   * @protected\n   * @type {BottomOverlay}\n   */\n  bottomOverlay = null;\n\n  /**\n   * Refer to the InlineStartOverlay or instance.\n   *\n   * @protected\n   * @type {InlineStartOverlay}\n   */\n  inlineStartOverlay = null;\n\n  /**\n   * Refer to the TopInlineStartCornerOverlay instance.\n   *\n   * @protected\n   * @type {TopInlineStartCornerOverlay}\n   */\n  topInlineStartCornerOverlay = null;\n\n  /**\n   * Refer to the BottomInlineStartCornerOverlay instance.\n   *\n   * @protected\n   * @type {BottomInlineStartCornerOverlay}\n   */\n  bottomInlineStartCornerOverlay = null;\n\n  /**\n   * Browser line height for purposes of translating mouse wheel.\n   *\n   * @private\n   * @type {number}\n   */\n  browserLineHeight = undefined;\n\n  /**\n   * The walkontable settings.\n   *\n   * @protected\n   * @type {Settings}\n   */\n  wtSettings = null;\n\n  /**\n   * Indicates whether the rendering state has changed for one of the overlays.\n   *\n   * @type {boolean}\n   */\n  #hasRenderingStateChanged = false;\n\n  /**\n   * The amount of times the ResizeObserver callback was fired in direct succession.\n   *\n   * @type {number}\n   */\n  #containerDomResizeCount = 0;\n\n  /**\n   * The timeout ID for the ResizeObserver endless-loop-blocking logic.\n   *\n   * @type {number}\n   */\n  #containerDomResizeCountTimeout = null;\n\n  /**\n   * The instance of the ResizeObserver that observes the size of the Walkontable wrapper element.\n   * In case of the size change detection the `onContainerElementResize` is fired.\n   *\n   * @private\n   * @type {ResizeObserver}\n   */\n  resizeObserver = new ResizeObserver((entries) => {\n    requestAnimationFrame(() => {\n      if (!Array.isArray(entries) || !entries.length) {\n        return;\n      }\n\n      this.#containerDomResizeCount += 1;\n\n      if (this.#containerDomResizeCount === 100) {\n        warn('The ResizeObserver callback was fired too many times in direct succession.' +\n          '\\nThis may be due to an infinite loop caused by setting a dynamic height/width (for example, ' +\n          'with the `dvh` units) to a Handsontable container\\'s parent. ' +\n          '\\nThe observer will be disconnected.');\n\n        this.resizeObserver.disconnect();\n      }\n\n      // This logic is required to prevent an endless loop of the ResizeObserver callback.\n      // https://github.com/handsontable/dev-handsontable/issues/1898#issuecomment-2154794817\n      if (this.#containerDomResizeCountTimeout !== null) {\n        clearTimeout(this.#containerDomResizeCountTimeout);\n      }\n\n      this.#containerDomResizeCountTimeout = setTimeout(() => {\n        this.#containerDomResizeCount = 0;\n      }, 100);\n\n      this.wtSettings.getSetting('onContainerElementResize');\n    });\n  });\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @todo refactoring remove.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {EventManager} eventManager The walkontable event manager.\n   * @param {MasterTable} wtTable The master table.\n   */\n  constructor(wotInstance, facadeGetter, domBindings, wtSettings, eventManager, wtTable) {\n    this.wot = wotInstance;\n    this.wtSettings = wtSettings;\n    this.domBindings = domBindings;\n    this.facadeGetter = facadeGetter;\n    this.wtTable = wtTable;\n    const { rootDocument, rootWindow } = this.domBindings;\n\n    // legacy support\n    this.instance = this.wot; // todo refactoring: move to facade\n    this.eventManager = eventManager;\n\n    // TODO refactoring: probably invalid place to this logic\n    this.scrollbarSize = getScrollbarWidth(rootDocument);\n\n    const isOverflowHidden = rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode)\n      .getPropertyValue('overflow') === 'hidden';\n\n    this.scrollableElement = isOverflowHidden ? wtTable.holder : getScrollableElement(wtTable.TABLE);\n\n    this.initOverlays();\n\n    this.hasScrollbarBottom = false;\n    this.hasScrollbarRight = false;\n\n    this.destroyed = false;\n    this.keyPressed = false;\n    this.spreaderLastSize = {\n      width: null,\n      height: null,\n    };\n\n    this.verticalScrolling = false;\n    this.horizontalScrolling = false;\n\n    this.initBrowserLineHeight();\n    this.registerListeners();\n    this.lastScrollX = rootWindow.scrollX;\n    this.lastScrollY = rootWindow.scrollY;\n  }\n\n  /**\n   * Get the list of references to all overlays.\n   *\n   * @param {boolean} [includeMaster = false] If set to `true`, the list will contain the master table as the last\n   * element.\n   * @returns {(TopOverlay|TopInlineStartCornerOverlay|InlineStartOverlay|BottomOverlay|BottomInlineStartCornerOverlay)[]}\n   */\n  getOverlays(includeMaster = false) {\n    const overlays = [...this.#overlays];\n\n    if (includeMaster) {\n      overlays.push(this.wtTable);\n    }\n\n    return overlays;\n  }\n\n  /**\n   * Retrieve browser line height and apply its value to `browserLineHeight`.\n   *\n   * @private\n   */\n  initBrowserLineHeight() {\n    const { rootWindow, rootDocument } = this.domBindings;\n    const computedStyle = rootWindow.getComputedStyle(rootDocument.body);\n    /**\n     * Sometimes `line-height` might be set to 'normal'. In that case, a default `font-size` should be multiplied by roughly 1.2.\n     * Https://developer.mozilla.org/pl/docs/Web/CSS/line-height#Values.\n     */\n    const lineHeight = parseInt(computedStyle.lineHeight, 10);\n    const lineHeightFalback = parseInt(computedStyle.fontSize, 10) * 1.2;\n\n    this.browserLineHeight = lineHeight || lineHeightFalback;\n  }\n\n  /**\n   * Prepare overlays based on user settings.\n   *\n   * @private\n   */\n  initOverlays() {\n    const args = [this.wot, this.facadeGetter, this.wtSettings, this.domBindings];\n\n    // todo refactoring: IOC, collection or factories.\n    // TODO refactoring, conceive about using generic collection of overlays.\n    this.topOverlay = new TopOverlay(...args);\n    this.bottomOverlay = new BottomOverlay(...args);\n    this.inlineStartOverlay = new InlineStartOverlay(...args);\n\n    // TODO discuss, the controversial here would be removing the lazy creation mechanism for corners.\n    // TODO cond. Has no any visual impact. They're initially hidden in same way like left, top, and bottom overlays.\n    this.topInlineStartCornerOverlay = new TopInlineStartCornerOverlay(...args,\n      this.topOverlay, this.inlineStartOverlay);\n    this.bottomInlineStartCornerOverlay = new BottomInlineStartCornerOverlay(...args,\n      this.bottomOverlay, this.inlineStartOverlay);\n\n    this.#overlays = [\n      this.topOverlay,\n      this.bottomOverlay,\n      this.inlineStartOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay,\n    ];\n  }\n\n  /**\n   * Runs logic for the overlays before the table is drawn.\n   */\n  beforeDraw() {\n    this.#hasRenderingStateChanged = this.#overlays.reduce((acc, overlay) => {\n      return overlay.hasRenderingStateChanged() || acc;\n    }, false);\n\n    this.#overlays.forEach(overlay => overlay.updateStateOfRendering('before'));\n  }\n\n  /**\n   * Runs logic for the overlays after the table is drawn.\n   */\n  afterDraw() {\n    this.syncScrollWithMaster();\n    this.#overlays.forEach((overlay) => {\n      const hasRenderingStateChanged = overlay.hasRenderingStateChanged();\n\n      overlay.updateStateOfRendering('after');\n\n      if (hasRenderingStateChanged && !overlay.needFullRender) {\n        overlay.reset();\n      }\n    });\n  }\n\n  /**\n   * Refresh and redraw table.\n   */\n  refreshAll() {\n    if (!this.wot.drawn) {\n      return;\n    }\n    if (!this.wtTable.holder.parentNode) {\n      // Walkontable was detached from DOM, but this handler was not removed\n      this.destroy();\n\n      return;\n    }\n    this.wot.draw(true);\n\n    if (this.verticalScrolling) {\n      this.inlineStartOverlay.onScroll(); // todo the inlineStartOverlay.onScroll() fires hook. Why is it needed there, not in any another place?\n    }\n\n    if (this.horizontalScrolling) {\n      this.topOverlay.onScroll();\n    }\n\n    this.verticalScrolling = false;\n    this.horizontalScrolling = false;\n  }\n\n  /**\n   * Register all necessary event listeners.\n   */\n  registerListeners() {\n    const { rootDocument, rootWindow } = this.domBindings;\n    const { mainTableScrollableElement: topOverlayScrollableElement } = this.topOverlay;\n    const { mainTableScrollableElement: inlineStartOverlayScrollableElement } = this.inlineStartOverlay;\n\n    this.eventManager.addEventListener(rootDocument.documentElement, 'keydown', event => this.onKeyDown(event));\n    this.eventManager.addEventListener(rootDocument.documentElement, 'keyup', () => this.onKeyUp());\n    this.eventManager.addEventListener(rootDocument, 'visibilitychange', () => this.onKeyUp());\n    this.eventManager.addEventListener(\n      topOverlayScrollableElement,\n      'scroll',\n      event => this.onTableScroll(event),\n      { passive: true }\n    );\n\n    if (topOverlayScrollableElement !== inlineStartOverlayScrollableElement) {\n      this.eventManager.addEventListener(\n        inlineStartOverlayScrollableElement,\n        'scroll',\n        event => this.onTableScroll(event),\n        { passive: true }\n      );\n    }\n\n    const isHighPixelRatio = rootWindow.devicePixelRatio && rootWindow.devicePixelRatio > 1;\n    const isScrollOnWindow = this.scrollableElement === rootWindow;\n    const preventWheel = this.wtSettings.getSetting('preventWheel');\n    const wheelEventOptions = { passive: isScrollOnWindow };\n\n    if (preventWheel || isHighPixelRatio || !isChrome()) {\n      this.eventManager.addEventListener(\n        this.wtTable.wtRootElement,\n        'wheel',\n        event => this.onCloneWheel(event, preventWheel),\n        wheelEventOptions\n      );\n    }\n\n    const overlays = [\n      this.topOverlay,\n      this.bottomOverlay,\n      this.inlineStartOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay,\n    ];\n\n    overlays.forEach((overlay) => {\n      if (overlay && overlay.needFullRender) {\n        const { holder } = overlay.clone.wtTable; // todo rethink, maybe: overlay.getHolder()\n\n        this.eventManager.addEventListener(\n          holder,\n          'wheel',\n          event => this.onCloneWheel(event, preventWheel),\n          wheelEventOptions\n        );\n      }\n    });\n\n    let resizeTimeout;\n\n    this.eventManager.addEventListener(rootWindow, 'resize', () => {\n      clearTimeout(resizeTimeout);\n\n      resizeTimeout = setTimeout(() => {\n        this.wtSettings.getSetting('onWindowResize');\n\n        // Remove resizing the window from the ResizeObserver's endless-loop-blocking logic.\n        this.#containerDomResizeCount = 0;\n      }, 200);\n    });\n\n    if (!isScrollOnWindow) {\n      this.resizeObserver.observe(this.wtTable.wtRootElement.parentElement);\n    }\n  }\n\n  /**\n   * Deregister all previously registered listeners.\n   */\n  deregisterListeners() {\n    this.eventManager.clearEvents(true);\n  }\n\n  /**\n   * Scroll listener.\n   *\n   * @param {Event} event The mouse event object.\n   */\n  onTableScroll(event) {\n    // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n    // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n    const rootWindow = this.domBindings.rootWindow;\n    const masterHorizontal = this.inlineStartOverlay.mainTableScrollableElement;\n    const masterVertical = this.topOverlay.mainTableScrollableElement;\n    const target = event.target;\n\n    // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n    // by hot.refreshBorder\n    if (this.keyPressed) {\n      if ((masterVertical !== rootWindow && target !== rootWindow && !event.target.contains(masterVertical)) ||\n          (masterHorizontal !== rootWindow && target !== rootWindow && !event.target.contains(masterHorizontal))) {\n        return;\n      }\n    }\n\n    this.syncScrollPositions(event);\n  }\n\n  /**\n   * Wheel listener for cloned overlays.\n   *\n   * @param {Event} event The mouse event object.\n   * @param {boolean} preventDefault If `true`, the `preventDefault` will be called on event object.\n   */\n  onCloneWheel(event, preventDefault) {\n    const { rootWindow } = this.domBindings;\n\n    // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n    // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n\n    const masterHorizontal = this.inlineStartOverlay.mainTableScrollableElement;\n    const masterVertical = this.topOverlay.mainTableScrollableElement;\n    const target = event.target;\n\n    // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n    // by hot.refreshBorder\n    const shouldNotWheelVertically = masterVertical !== rootWindow &&\n      target !== rootWindow && !target.contains(masterVertical);\n    const shouldNotWheelHorizontally = masterHorizontal !== rootWindow &&\n      target !== rootWindow && !target.contains(masterHorizontal);\n\n    if (\n      (this.keyPressed && (shouldNotWheelVertically || shouldNotWheelHorizontally))\n       ||\n      this.scrollableElement === rootWindow\n    ) {\n      return;\n    }\n\n    const isScrollPossible = this.translateMouseWheelToScroll(event);\n\n    if (preventDefault || (this.scrollableElement !== rootWindow && isScrollPossible)) {\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * Key down listener.\n   *\n   * @param {Event} event The keyboard event object.\n   */\n  onKeyDown(event) {\n    this.keyPressed = isKey(event.keyCode, 'ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT');\n  }\n\n  /**\n   * Key up listener.\n   */\n  onKeyUp() {\n    this.keyPressed = false;\n  }\n\n  /**\n   * Translate wheel event into scroll event and sync scroll overlays position.\n   *\n   * @private\n   * @param {Event} event The mouse event object.\n   * @returns {boolean}\n   */\n  translateMouseWheelToScroll(event) {\n    let deltaY = isNaN(event.deltaY) ? (-1) * event.wheelDeltaY : event.deltaY;\n    let deltaX = isNaN(event.deltaX) ? (-1) * event.wheelDeltaX : event.deltaX;\n\n    if (event.deltaMode === 1) {\n      deltaX += deltaX * this.browserLineHeight;\n      deltaY += deltaY * this.browserLineHeight;\n    }\n\n    const isScrollVerticallyPossible = this.scrollVertically(deltaY);\n    const isScrollHorizontallyPossible = this.scrollHorizontally(deltaX);\n\n    return isScrollVerticallyPossible || isScrollHorizontallyPossible;\n  }\n\n  /**\n   * Scrolls main scrollable element horizontally.\n   *\n   * @param {number} delta Relative value to scroll.\n   * @returns {boolean}\n   */\n  scrollVertically(delta) {\n    const previousScroll = this.scrollableElement.scrollTop;\n\n    this.scrollableElement.scrollTop += delta;\n\n    return previousScroll !== this.scrollableElement.scrollTop;\n  }\n\n  /**\n   * Scrolls main scrollable element horizontally.\n   *\n   * @param {number} delta Relative value to scroll.\n   * @returns {boolean}\n   */\n  scrollHorizontally(delta) {\n    const previousScroll = this.scrollableElement.scrollLeft;\n\n    this.scrollableElement.scrollLeft += delta;\n\n    return previousScroll !== this.scrollableElement.scrollLeft;\n  }\n\n  /**\n   * Synchronize scroll position between master table and overlay table.\n   *\n   * @private\n   */\n  syncScrollPositions() {\n    if (this.destroyed) {\n      return;\n    }\n\n    const { rootWindow } = this.domBindings;\n    const topHolder = this.topOverlay.clone.wtTable.holder; // todo rethink\n    const leftHolder = this.inlineStartOverlay.clone.wtTable.holder; // todo rethink\n\n    const [scrollLeft, scrollTop] = [this.scrollableElement.scrollLeft, this.scrollableElement.scrollTop];\n\n    this.horizontalScrolling = (topHolder.scrollLeft !== scrollLeft || this.lastScrollX !== rootWindow.scrollX);\n    this.verticalScrolling = (leftHolder.scrollTop !== scrollTop || this.lastScrollY !== rootWindow.scrollY);\n    this.lastScrollX = rootWindow.scrollX;\n    this.lastScrollY = rootWindow.scrollY;\n\n    if (this.horizontalScrolling) {\n      topHolder.scrollLeft = scrollLeft;\n\n      const bottomHolder = this.bottomOverlay.needFullRender ? this.bottomOverlay.clone.wtTable.holder : null; // todo rethink\n\n      if (bottomHolder) {\n        bottomHolder.scrollLeft = scrollLeft;\n      }\n    }\n\n    if (this.verticalScrolling) {\n      leftHolder.scrollTop = scrollTop;\n    }\n\n    this.refreshAll();\n  }\n\n  /**\n   * Synchronize overlay scrollbars with the master scrollbar.\n   */\n  syncScrollWithMaster() {\n    if (!this.#hasRenderingStateChanged) {\n      return;\n    }\n\n    const master = this.topOverlay.mainTableScrollableElement;\n    const { scrollLeft, scrollTop } = master;\n\n    if (this.topOverlay.needFullRender) {\n      this.topOverlay.clone.wtTable.holder.scrollLeft = scrollLeft; // todo rethink, *overlay.setScroll*()\n    }\n    if (this.bottomOverlay.needFullRender) {\n      this.bottomOverlay.clone.wtTable.holder.scrollLeft = scrollLeft; // todo rethink, *overlay.setScroll*()\n    }\n    if (this.inlineStartOverlay.needFullRender) {\n      this.inlineStartOverlay.clone.wtTable.holder.scrollTop = scrollTop; // todo rethink, *overlay.setScroll*()\n    }\n\n    this.#hasRenderingStateChanged = false;\n  }\n\n  /**\n   * Update the main scrollable elements for all the overlays.\n   */\n  updateMainScrollableElements() {\n    this.deregisterListeners();\n\n    this.inlineStartOverlay.updateMainScrollableElement();\n    this.topOverlay.updateMainScrollableElement();\n\n    if (this.bottomOverlay.needFullRender) {\n      this.bottomOverlay.updateMainScrollableElement();\n    }\n    const { wtTable } = this;\n    const { rootWindow } = this.domBindings;\n\n    if (rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden') {\n      this.scrollableElement = wtTable.holder;\n    } else {\n      this.scrollableElement = getScrollableElement(wtTable.TABLE);\n    }\n\n    this.registerListeners();\n  }\n\n  /**\n   *\n   */\n  destroy() {\n    this.resizeObserver.disconnect();\n    this.eventManager.destroy();\n    // todo, probably all below `destory` calls has no sense. To analyze\n    this.topOverlay.destroy();\n\n    if (this.bottomOverlay.clone) {\n      this.bottomOverlay.destroy();\n    }\n    this.inlineStartOverlay.destroy();\n\n    if (this.topInlineStartCornerOverlay) {\n      this.topInlineStartCornerOverlay.destroy();\n    }\n\n    if (this.bottomInlineStartCornerOverlay && this.bottomInlineStartCornerOverlay.clone) {\n      this.bottomInlineStartCornerOverlay.destroy();\n    }\n\n    this.destroyed = true;\n  }\n\n  /**\n   * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway.\n   */\n  refresh(fastDraw = false) {\n    const wasSpreaderSizeUpdated = this.updateLastSpreaderSize();\n\n    if (wasSpreaderSizeUpdated) {\n      this.adjustElementsSize();\n    }\n\n    if (this.bottomOverlay.clone) {\n      this.bottomOverlay.refresh(fastDraw);\n    }\n\n    this.inlineStartOverlay.refresh(fastDraw);\n    this.topOverlay.refresh(fastDraw);\n\n    if (this.topInlineStartCornerOverlay) {\n      this.topInlineStartCornerOverlay.refresh(fastDraw);\n    }\n\n    if (this.bottomInlineStartCornerOverlay && this.bottomInlineStartCornerOverlay.clone) {\n      this.bottomInlineStartCornerOverlay.refresh(fastDraw);\n    }\n  }\n\n  /**\n   * Update the last cached spreader size with the current size.\n   *\n   * @returns {boolean} `true` if the lastSpreaderSize cache was updated, `false` otherwise.\n   */\n  updateLastSpreaderSize() {\n    const spreader = this.wtTable.spreader;\n    const width = spreader.clientWidth;\n    const height = spreader.clientHeight;\n    const needsUpdating = width !== this.spreaderLastSize.width || height !== this.spreaderLastSize.height;\n\n    if (needsUpdating) {\n      this.spreaderLastSize.width = width;\n      this.spreaderLastSize.height = height;\n    }\n\n    return needsUpdating;\n  }\n\n  /**\n   * Adjust overlays elements size and master table size.\n   */\n  adjustElementsSize() {\n    const { wtViewport } = this.wot;\n    const { wtTable } = this;\n    const { rootWindow } = this.domBindings;\n    const isWindowScrolled = this.scrollableElement === rootWindow;\n    const totalColumns = this.wtSettings.getSetting('totalColumns');\n    const totalRows = this.wtSettings.getSetting('totalRows');\n    const headerRowSize = wtViewport.getRowHeaderWidth();\n    const headerColumnSize = wtViewport.getColumnHeaderHeight();\n    const proposedHiderHeight = headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + 1;\n    const proposedHiderWidth = headerRowSize + this.inlineStartOverlay.sumCellSizes(0, totalColumns);\n    const hiderElement = wtTable.hider;\n    const hiderStyle = hiderElement.style;\n    const isScrolledBeyondHiderHeight = () => {\n      return isWindowScrolled ?\n        false :\n        (this.scrollableElement.scrollTop > Math.max(0, proposedHiderHeight - wtTable.holder.clientHeight));\n    };\n    const isScrolledBeyondHiderWidth = () => {\n      return isWindowScrolled ?\n        false :\n        (this.scrollableElement.scrollLeft > Math.max(0, proposedHiderWidth - wtTable.holder.clientWidth));\n    };\n    const columnHeaderBorderCompensation = isScrolledBeyondHiderHeight() ? 1 : 0;\n    const rowHeaderBorderCompensation = isScrolledBeyondHiderWidth() ? 1 : 0;\n\n    // If the elements are being adjusted after scrolling the table from the very beginning to the very end,\n    // we need to adjust the hider dimensions by the header border size. (https://github.com/handsontable/dev-handsontable/issues/1772)\n    hiderStyle.width = `${proposedHiderWidth + rowHeaderBorderCompensation}px`;\n    hiderStyle.height = `${proposedHiderHeight + columnHeaderBorderCompensation}px`;\n\n    if (this.scrollbarSize > 0) { // todo refactoring, looking as a part of logic which should be moved outside the class\n      const {\n        scrollHeight: rootElemScrollHeight,\n        scrollWidth: rootElemScrollWidth,\n      } = wtTable.wtRootElement;\n      const {\n        scrollHeight: holderScrollHeight,\n        scrollWidth: holderScrollWidth,\n      } = wtTable.holder;\n\n      this.hasScrollbarRight = rootElemScrollHeight < holderScrollHeight;\n      this.hasScrollbarBottom = rootElemScrollWidth < holderScrollWidth;\n\n      if (this.hasScrollbarRight && wtTable.hider.scrollWidth + this.scrollbarSize > rootElemScrollWidth) {\n        this.hasScrollbarBottom = true;\n      } else if (this.hasScrollbarBottom && wtTable.hider.scrollHeight + this.scrollbarSize > rootElemScrollHeight) {\n        this.hasScrollbarRight = true;\n      }\n    }\n\n    this.topOverlay.adjustElementsSize();\n    this.inlineStartOverlay.adjustElementsSize();\n    this.bottomOverlay.adjustElementsSize();\n  }\n\n  /**\n   * Expand the hider vertically element by the provided delta value.\n   *\n   * @param {number} heightDelta The delta value to expand the hider element by.\n   */\n  expandHiderVerticallyBy(heightDelta) {\n    const { wtTable } = this;\n\n    wtTable.hider.style.height = `${parseInt(wtTable.hider.style.height, 10) + heightDelta}px`;\n  }\n\n  /**\n   * Expand the hider horizontally element by the provided delta value.\n   *\n   * @param {number} widthDelta The delta value to expand the hider element by.\n   */\n  expandHiderHorizontallyBy(widthDelta) {\n    const { wtTable } = this;\n\n    wtTable.hider.style.width = `${parseInt(wtTable.hider.style.width, 10) + widthDelta}px`;\n  }\n\n  /**\n   *\n   */\n  applyToDOM() {\n    if (!this.wtTable.isVisible()) {\n      return;\n    }\n\n    this.topOverlay.applyToDOM();\n\n    if (this.bottomOverlay.clone) {\n      this.bottomOverlay.applyToDOM();\n    }\n\n    this.inlineStartOverlay.applyToDOM();\n  }\n\n  /**\n   * Get the parent overlay of the provided element.\n   *\n   * @param {HTMLElement} element An element to process.\n   * @returns {object|null}\n   */\n  getParentOverlay(element) {\n    if (!element) {\n      return null;\n    }\n\n    const overlays = [\n      this.topOverlay,\n      this.inlineStartOverlay,\n      this.bottomOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay\n    ];\n    let result = null;\n\n    arrayEach(overlays, (overlay) => {\n      if (!overlay) {\n        return;\n      }\n\n      if (overlay.clone && overlay.clone.wtTable.TABLE.contains(element)) { // todo demeter\n        result = overlay.clone;\n      }\n    });\n\n    return result;\n  }\n\n  /**\n   * Synchronize the class names between the main overlay table and the tables on the other overlays.\n   *\n   */\n  syncOverlayTableClassNames() {\n    const masterTable = this.wtTable.TABLE;\n    const overlays = [\n      this.topOverlay,\n      this.inlineStartOverlay,\n      this.bottomOverlay,\n      this.topInlineStartCornerOverlay,\n      this.bottomInlineStartCornerOverlay\n    ];\n\n    arrayEach(overlays, (elem) => {\n      if (!elem) {\n        return;\n      }\n\n      elem.clone.wtTable.TABLE.className = masterTable.className; // todo demeter\n    });\n  }\n}\n\nexport default Overlays;\n","export { BottomInlineStartCornerOverlay } from './bottomInlineStartCorner';\nexport { BottomOverlay } from './bottom';\nexport { InlineStartOverlay } from './inlineStart';\nexport { Overlay } from './_base';\nexport { TopInlineStartCornerOverlay } from './topInlineStartCorner';\nexport { TopOverlay } from './top';\nexport * from './constants';\n","import {\n  getScrollbarWidth,\n  outerHeight,\n  outerWidth,\n  resetCssTransform\n} from '../../../../helpers/dom/element';\nimport BottomInlineStartCornerOverlayTable from '../table/bottomInlineStartCorner';\nimport { Overlay } from './_base';\nimport {\n  CLONE_BOTTOM_INLINE_START_CORNER,\n} from './constants';\n\n/**\n * @class BottomInlineStartCornerOverlay\n */\nexport class BottomInlineStartCornerOverlay extends Overlay {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   * @param {BottomOverlay} bottomOverlay The instance of the Top overlay.\n   * @param {InlineStartOverlay} inlineStartOverlay The instance of the InlineStart overlay.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings, bottomOverlay, inlineStartOverlay) {\n    super(wotInstance, facadeGetter, CLONE_BOTTOM_INLINE_START_CORNER, wtSettings, domBindings);\n    this.bottomOverlay = bottomOverlay;\n    this.inlineStartOverlay = inlineStartOverlay;\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {BottomInlineStartCornerOverlayTable}\n   */\n  createTable(...args) {\n    return new BottomInlineStartCornerOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderBottomOverlay')\n      && this.wtSettings.getSetting('shouldRenderInlineStartOverlay');\n  }\n\n  /**\n   * Updates the corner overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    const { wot } = this;\n\n    this.updateTrimmingContainer();\n\n    if (!wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n\n    overlayRoot.style.top = '';\n\n    if (this.trimmingContainer === this.domBindings.rootWindow) {\n      const inlineStartOffset = this.inlineStartOverlay.getOverlayOffset();\n      const bottom = this.bottomOverlay.getOverlayOffset();\n\n      overlayRoot.style[this.isRtl() ? 'right' : 'left'] = `${inlineStartOffset}px`;\n      overlayRoot.style.bottom = `${bottom}px`;\n\n    } else {\n      resetCssTransform(overlayRoot);\n      this.repositionOverlay();\n    }\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n    const tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRoot.style.height = `${tableHeight}px`;\n    overlayRoot.style.width = `${tableWidth}px`;\n\n    return false;\n  }\n\n  /**\n   * Reposition the overlay.\n   */\n  repositionOverlay() {\n    const { wtTable, wtViewport } = this.wot;\n    const { rootDocument } = this.domBindings;\n    const cloneRoot = this.clone.wtTable.holder.parentNode;\n    let bottomOffset = 0;\n\n    if (!wtViewport.hasVerticalScroll()) {\n      bottomOffset += (wtViewport.getWorkspaceHeight() - wtTable.getTotalHeight());\n    }\n\n    if (wtViewport.hasVerticalScroll() && wtViewport.hasHorizontalScroll()) {\n      bottomOffset += getScrollbarWidth(rootDocument);\n    }\n\n    cloneRoot.style.bottom = `${bottomOffset}px`;\n  }\n}\n","import Table from '../table';\nimport stickyRowsBottom from './mixin/stickyRowsBottom';\nimport stickyColumnsStart from './mixin/stickyColumnsStart';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_BOTTOM_INLINE_START_CORNER } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to bottomInlineStartCornerOverlay\n * (in RTL mode the overlay sits on the right of the screen), implemented through mixins.\n *\n * @mixes stickyRowsBottom\n * @mixes stickyColumnsStart\n */\nclass BottomInlineStartCornerOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_BOTTOM_INLINE_START_CORNER);\n  }\n}\n\nmixin(BottomInlineStartCornerOverlayTable, stickyRowsBottom);\nmixin(BottomInlineStartCornerOverlayTable, stickyColumnsStart);\n\nexport default BottomInlineStartCornerOverlayTable;\n","import {\n  hasClass,\n  index,\n  offset,\n  removeTextNodes,\n  overlayContainsElement,\n  closest,\n  outerHeight,\n  outerWidth,\n  innerHeight,\n  isVisible,\n  setAttribute,\n} from '../../../helpers/dom/element';\nimport { isFunction } from '../../../helpers/function';\nimport ColumnFilter from './filter/column';\nimport RowFilter from './filter/row';\nimport { Renderer } from './renderer';\nimport ColumnUtils from './utils/column';\nimport RowUtils from './utils/row';\nimport {\n  CLONE_TOP,\n  CLONE_BOTTOM,\n  CLONE_INLINE_START,\n  CLONE_TOP_INLINE_START_CORNER,\n  CLONE_BOTTOM_INLINE_START_CORNER,\n} from './overlay';\nimport { A11Y_PRESENTATION } from '../../../helpers/a11y';\n\n/**\n * @todo These mixes are never added to the class Table, however their members are used here.\n * @todo Continue: Potentially it works only, because some of these mixes are added to every inherited class.\n * @todo Refactoring, move code from `if(this.isMaster)` into MasterTable, and others like that.\n * @mixes stickyColumnsStart\n * @mixes stickyRowsBottom\n * @mixes stickyRowsTop\n * @mixes calculatedRows\n * @mixes calculatedColumns\n * @abstract\n */\nclass Table {\n  /**\n   * The walkontable settings.\n   *\n   * @protected\n   * @type {Settings}\n   */\n  wtSettings = null;\n  domBindings;\n  TBODY = null;\n  THEAD = null;\n  COLGROUP = null;\n  /**\n   * Indicates if the table has height bigger than 0px.\n   *\n   * @type {boolean}\n   */\n  hasTableHeight = true;\n  /**\n   * Indicates if the table has width bigger than 0px.\n   *\n   * @type {boolean}\n   */\n  hasTableWidth = true;\n  /**\n   * Indicates if the table is visible. By visible, it means that the holder\n   * element has CSS 'display' property different than 'none'.\n   *\n   * @type {boolean}\n   */\n  isTableVisible = false;\n  tableOffset = 0;\n  holderOffset = 0;\n  /**\n   *\n   * @abstract\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {'master'|CLONE_TYPES_ENUM} name Overlay name.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings, name) {\n    this.domBindings = domBindings;\n    /**\n     * Indicates if this instance is of type `MasterTable` (i.e. It is NOT an overlay).\n     *\n     * @type {boolean}\n     */\n    this.isMaster = name === 'master';\n    this.name = name;\n    this.dataAccessObject = dataAccessObject;\n    this.facadeGetter = facadeGetter;\n    this.wtSettings = wtSettings;\n\n    // legacy support\n    this.instance = this.dataAccessObject.wot; // TODO refactoring: it might be removed here, and provides legacy support through facade.\n    this.wot = this.dataAccessObject.wot;\n    this.TABLE = domBindings.rootTable;\n\n    removeTextNodes(this.TABLE);\n\n    // TODO refactoring, to recognize the legitimacy of moving them into domBidings\n    this.spreader = this.createSpreader(this.TABLE);\n    this.hider = this.createHider(this.spreader);\n    this.holder = this.createHolder(this.hider);\n    this.wtRootElement = this.holder.parentNode;\n\n    if (this.isMaster) {\n      this.alignOverlaysWithTrimmingContainer(); // todo wow, It calls method from child class (MasterTable).\n    }\n    this.fixTableDomTree();\n\n    this.rowFilter = null; // TODO refactoring, eliminate all (re)creations of this object, then updates state when needed.\n    this.columnFilter = null; // TODO refactoring, eliminate all (re)creations of this object, then updates state when needed.\n    this.correctHeaderWidth = false;\n\n    const origRowHeaderWidth = this.wtSettings.getSettingPure('rowHeaderWidth');\n\n    // Fix for jumping row headers (https://github.com/handsontable/handsontable/issues/3850)\n    this.wtSettings.update('rowHeaderWidth', () => this._modifyRowHeaderWidth(origRowHeaderWidth));\n\n    this.rowUtils = new RowUtils(this.dataAccessObject, this.wtSettings); // TODO refactoring, It can be passed through IOC.\n    this.columnUtils = new ColumnUtils(this.dataAccessObject, this.wtSettings); // TODO refactoring, It can be passed through IOC.\n\n    this.tableRenderer = new Renderer({ // TODO refactoring, It can be passed through IOC.\n      TABLE: this.TABLE,\n      THEAD: this.THEAD,\n      COLGROUP: this.COLGROUP,\n      TBODY: this.TBODY,\n      rowUtils: this.rowUtils,\n      columnUtils: this.columnUtils,\n      cellRenderer: this.wtSettings.getSettingPure('cellRenderer'),\n    });\n  }\n\n  /**\n   * Returns a boolean that is true if this Table represents a specific overlay, identified by the overlay name.\n   * For MasterTable, it returns false.\n   *\n   * @param {string} overlayTypeName The overlay type.\n   * @returns {boolean}\n   */\n  is(overlayTypeName) { // todo refactoring: eliminate all protected and private usages\n    return this.name === overlayTypeName;\n  }\n\n  /**\n   *\n   */\n  fixTableDomTree() {\n    const rootDocument = this.domBindings.rootDocument;\n\n    this.TBODY = this.TABLE.querySelector('tbody');\n\n    if (!this.TBODY) {\n      this.TBODY = rootDocument.createElement('tbody');\n      this.TABLE.appendChild(this.TBODY);\n    }\n    this.THEAD = this.TABLE.querySelector('thead');\n\n    if (!this.THEAD) {\n      this.THEAD = rootDocument.createElement('thead');\n      this.TABLE.insertBefore(this.THEAD, this.TBODY);\n    }\n    this.COLGROUP = this.TABLE.querySelector('colgroup');\n\n    if (!this.COLGROUP) {\n      this.COLGROUP = rootDocument.createElement('colgroup');\n      this.TABLE.insertBefore(this.COLGROUP, this.THEAD);\n    }\n  }\n\n  /**\n   * @param {HTMLTableElement} table An element to process.\n   * @returns {HTMLElement}\n   */\n  createSpreader(table) {\n    const parent = table.parentNode;\n    let spreader;\n\n    if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n      spreader = this.domBindings.rootDocument.createElement('div');\n      spreader.className = 'wtSpreader';\n\n      if (parent) {\n        // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n        parent.insertBefore(spreader, table);\n      }\n      spreader.appendChild(table);\n    }\n\n    spreader.style.position = 'relative';\n\n    if (this.wtSettings.getSetting('ariaTags')) {\n      setAttribute(spreader, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    return spreader;\n  }\n\n  /**\n   * @param {HTMLElement} spreader An element to the hider element is injected.\n   * @returns {HTMLElement}\n   */\n  createHider(spreader) {\n    const parent = spreader.parentNode;\n    let hider;\n\n    if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n      hider = this.domBindings.rootDocument.createElement('div');\n      hider.className = 'wtHider';\n\n      if (parent) {\n        // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n        parent.insertBefore(hider, spreader);\n      }\n      hider.appendChild(spreader);\n    }\n\n    if (this.wtSettings.getSetting('ariaTags')) {\n      setAttribute(hider, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    return hider;\n  }\n\n  /**\n   *\n   * @param {HTMLElement} hider An element to the holder element is injected.\n   * @returns {HTMLElement}\n   */\n  createHolder(hider) {\n    const parent = hider.parentNode;\n    let holder;\n\n    if (!parent || parent.nodeType !== Node.ELEMENT_NODE || !hasClass(parent, 'wtHolder')) {\n      holder = this.domBindings.rootDocument.createElement('div');\n      holder.style.position = 'relative';\n      holder.className = 'wtHolder';\n\n      if (parent) {\n        // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n        parent.insertBefore(holder, hider);\n      }\n      if (this.isMaster) {\n        holder.parentNode.className += 'ht_master handsontable';\n        holder.parentNode.setAttribute('dir', this.wtSettings.getSettingPure('rtlMode') ? 'rtl' : 'ltr');\n\n        if (this.wtSettings.getSetting('ariaTags')) {\n          setAttribute(holder.parentNode, [\n            A11Y_PRESENTATION()\n          ]);\n        }\n      }\n      holder.appendChild(hider);\n    }\n\n    if (this.wtSettings.getSetting('ariaTags')) {\n      setAttribute(holder, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    return holder;\n  }\n\n  /**\n   * Redraws the table.\n   *\n   * @param {boolean} [fastDraw=false] If TRUE, will try to avoid full redraw and only update the border positions.\n   *                                   If FALSE or UNDEFINED, will perform a full redraw.\n   * @returns {Table}\n   */\n  draw(fastDraw = false) {\n    const { wtSettings } = this;\n    const { wtOverlays, wtViewport } = this.dataAccessObject;\n    const totalRows = wtSettings.getSetting('totalRows');\n    const totalColumns = wtSettings.getSetting('totalColumns');\n    const rowHeaders = wtSettings.getSetting('rowHeaders');\n    const rowHeadersCount = rowHeaders.length;\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n    const columnHeadersCount = columnHeaders.length;\n    let runFastDraw = fastDraw;\n\n    if (this.isMaster) {\n      wtOverlays.beforeDraw();\n      this.holderOffset = offset(this.holder);\n      runFastDraw = wtViewport.createCalculators(runFastDraw);\n\n      if (rowHeadersCount && !wtSettings.getSetting('fixedColumnsStart')) {\n        const leftScrollPos = wtOverlays.inlineStartOverlay.getScrollPosition();\n        const previousState = this.correctHeaderWidth;\n\n        this.correctHeaderWidth = leftScrollPos !== 0;\n\n        if (previousState !== this.correctHeaderWidth) {\n          runFastDraw = false;\n        }\n      }\n    }\n\n    if (runFastDraw) {\n      if (this.isMaster) {\n        wtOverlays.refresh(true);\n      }\n    } else {\n      if (this.isMaster) {\n        this.tableOffset = offset(this.TABLE);\n      } else {\n        this.tableOffset = this.dataAccessObject.parentTableOffset;\n      }\n      const startRow = totalRows > 0 ? this.getFirstRenderedRow() : 0;\n      const startColumn = totalColumns > 0 ? this.getFirstRenderedColumn() : 0;\n\n      this.rowFilter = new RowFilter(startRow, totalRows, columnHeadersCount);\n      this.columnFilter = new ColumnFilter(startColumn, totalColumns, rowHeadersCount);\n\n      let performRedraw = true;\n\n      // Only master table rendering can be skipped\n      if (this.isMaster) {\n        this.alignOverlaysWithTrimmingContainer(); // todo It calls method from child class (MasterTable).\n        const skipRender = {};\n\n        this.wtSettings.getSetting('beforeDraw', true, skipRender);\n        performRedraw = skipRender.skipRender !== true;\n      }\n\n      if (performRedraw) {\n        this.tableRenderer.setHeaderContentRenderers(rowHeaders, columnHeaders);\n\n        if (this.is(CLONE_BOTTOM) ||\n            this.is(CLONE_BOTTOM_INLINE_START_CORNER)) {\n          // do NOT render headers on the bottom or bottom-left corner overlay\n          this.tableRenderer.setHeaderContentRenderers(rowHeaders, []);\n        }\n\n        this.resetOversizedRows();\n\n        this.tableRenderer\n          .setActiveOverlayName(this.name)\n          .setViewportSize(this.getRenderedRowsCount(), this.getRenderedColumnsCount())\n          .setFilters(this.rowFilter, this.columnFilter)\n          .render();\n\n        let workspaceWidth;\n\n        if (this.isMaster) {\n          workspaceWidth = this.dataAccessObject.workspaceWidth;\n          wtViewport.containerWidth = null;\n          this.markOversizedColumnHeaders();\n        }\n\n        this.adjustColumnHeaderHeights();\n\n        if (this.isMaster || this.is(CLONE_BOTTOM)) {\n          this.markOversizedRows();\n        }\n\n        if (this.isMaster) {\n          if (!this.wtSettings.getSetting('externalRowCalculator')) {\n            wtViewport.createVisibleCalculators();\n          }\n\n          wtOverlays.refresh(false);\n          wtOverlays.applyToDOM();\n\n          const hiderWidth = outerWidth(this.hider);\n          const tableWidth = outerWidth(this.TABLE);\n\n          if (hiderWidth !== 0 && (tableWidth !== hiderWidth)) {\n            // Recalculate the column widths, if width changes made in the overlays removed the scrollbar, thus changing the viewport width.\n            this.columnUtils.calculateWidths();\n            this.tableRenderer.renderer.colGroup.render();\n          }\n\n          if (workspaceWidth !== wtViewport.getWorkspaceWidth()) {\n            // workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching\n            wtViewport.containerWidth = null;\n            this.columnUtils.calculateWidths();\n            this.tableRenderer.renderer.colGroup.render();\n          }\n\n          this.wtSettings.getSetting('onDraw', true);\n\n        } else if (this.is(CLONE_BOTTOM)) {\n          this.dataAccessObject.cloneSource.wtOverlays.adjustElementsSize();\n        }\n      }\n    }\n\n    let positionChanged = false;\n\n    if (this.isMaster) {\n      positionChanged = wtOverlays.topOverlay.resetFixedPosition();\n\n      if (wtOverlays.bottomOverlay.clone) {\n        positionChanged = wtOverlays.bottomOverlay.resetFixedPosition() || positionChanged;\n      }\n\n      positionChanged = wtOverlays.inlineStartOverlay.resetFixedPosition() || positionChanged;\n\n      if (wtOverlays.topInlineStartCornerOverlay) {\n        wtOverlays.topInlineStartCornerOverlay.resetFixedPosition();\n      }\n\n      if (wtOverlays.bottomInlineStartCornerOverlay && wtOverlays.bottomInlineStartCornerOverlay.clone) {\n        wtOverlays.bottomInlineStartCornerOverlay.resetFixedPosition();\n      }\n    }\n\n    if (positionChanged) {\n      // It refreshes the cells borders caused by a 1px shift (introduced by overlays which add or\n      // remove `innerBorderTop` and `innerBorderInlineStart` CSS classes to the DOM element. This happens\n      // when there is a switch between rendering from 0 to N rows/columns and vice versa).\n      wtOverlays.refreshAll(); // `refreshAll()` internally already calls `refreshSelections()` method\n      wtOverlays.adjustElementsSize();\n    } else {\n      this.dataAccessObject.selectionManager\n        .setActiveOverlay(this.facadeGetter())\n        .render(runFastDraw);\n    }\n\n    if (this.isMaster) {\n      wtOverlays.afterDraw();\n    }\n\n    this.dataAccessObject.drawn = true;\n\n    return this;\n  }\n\n  /**\n   * @param {number} col The visual column index.\n   */\n  markIfOversizedColumnHeader(col) {\n    const sourceColIndex = this.columnFilter.renderedToSource(col);\n    let level = this.wtSettings.getSetting('columnHeaders').length;\n    const defaultRowHeight = this.wtSettings.getSetting('defaultRowHeight');\n    let previousColHeaderHeight;\n    let currentHeader;\n    let currentHeaderHeight;\n    const columnHeaderHeightSetting = this.wtSettings.getSetting('columnHeaderHeight') || [];\n\n    while (level) {\n      level -= 1;\n\n      previousColHeaderHeight = this.getColumnHeaderHeight(level);\n      currentHeader = this.getColumnHeader(sourceColIndex, level);\n\n      if (!currentHeader) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n      currentHeaderHeight = innerHeight(currentHeader);\n\n      if (!previousColHeaderHeight &&\n          defaultRowHeight < currentHeaderHeight || previousColHeaderHeight < currentHeaderHeight) {\n        this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = currentHeaderHeight;\n      }\n\n      if (Array.isArray(columnHeaderHeightSetting)) {\n        if (columnHeaderHeightSetting[level] !== null && columnHeaderHeightSetting[level] !== undefined) {\n          this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level];\n        }\n\n      } else if (!isNaN(columnHeaderHeightSetting)) {\n        this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting;\n      }\n\n      if (this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] < (columnHeaderHeightSetting[level] ||\n          columnHeaderHeightSetting)) {\n        this.dataAccessObject.wtViewport.oversizedColumnHeaders[level] = (columnHeaderHeightSetting[level] || columnHeaderHeightSetting); // eslint-disable-line max-len\n      }\n    }\n  }\n\n  /**\n   *\n   */\n  adjustColumnHeaderHeights() {\n    const { wtSettings } = this;\n    const children = this.THEAD.childNodes;\n    const oversizedColumnHeaders = this.dataAccessObject.wtViewport.oversizedColumnHeaders;\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n\n    for (let i = 0, len = columnHeaders.length; i < len; i++) {\n      if (oversizedColumnHeaders[i]) {\n        if (!children[i] || children[i].childNodes.length === 0) {\n          return;\n        }\n        children[i].childNodes[0].style.height = `${oversizedColumnHeaders[i]}px`;\n      }\n    }\n  }\n\n  /**\n   * Resets cache of row heights. The cache should be cached for each render cycle in a case\n   * when new cell values have content which increases/decreases cell height.\n   */\n  resetOversizedRows() {\n    const { wtSettings } = this;\n    const { wtViewport } = this.dataAccessObject;\n\n    if (!this.isMaster && !this.is(CLONE_BOTTOM)) {\n      return;\n    }\n\n    if (!wtSettings.getSetting('externalRowCalculator')) {\n      const rowsToRender = this.getRenderedRowsCount();\n\n      // Reset the oversized row cache for rendered rows\n      for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n        const sourceRow = this.rowFilter.renderedToSource(visibleRowIndex);\n\n        if (wtViewport.oversizedRows && wtViewport.oversizedRows[sourceRow]) {\n          wtViewport.oversizedRows[sourceRow] = undefined;\n        }\n      }\n    }\n  }\n\n  /**\n   * Get cell element at coords.\n   * Negative coords.row or coords.col are used to retrieve header cells. If there are multiple header levels, the\n   * negative value corresponds to the distance from the working area. For example, when there are 3 levels of column\n   * headers, coords.col=-1 corresponds to the most inner header element, while coords.col=-3 corresponds to the\n   * outmost header element.\n   *\n   * In case an element for the coords is not rendered, the method returns an error code.\n   * To produce the error code, the input parameters are validated in the order in which they\n   * are given. Thus, if both the row and the column coords are out of the rendered bounds,\n   * the method returns the error code for the row.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @returns {HTMLElement|number} HTMLElement on success or Number one of the exit codes on error:\n   *  -1 row before viewport\n   *  -2 row after viewport\n   *  -3 column before viewport\n   *  -4 column after viewport.\n   */\n  getCell(coords) {\n    let row = coords.row;\n    let column = coords.col;\n    const hookResult = this.wtSettings.getSetting('onModifyGetCellCoords', row, column);\n\n    if (hookResult && Array.isArray(hookResult)) {\n      [row, column] = hookResult;\n    }\n\n    if (this.isRowBeforeRenderedRows(row)) {\n      // row before rendered rows\n      return -1;\n\n    } else if (this.isRowAfterRenderedRows(row)) {\n      // row after rendered rows\n      return -2;\n\n    } else if (this.isColumnBeforeRenderedColumns(column)) {\n      // column before rendered columns\n      return -3;\n\n    } else if (this.isColumnAfterRenderedColumns(column)) {\n      // column after rendered columns\n      return -4;\n    }\n\n    const TR = this.getRow(row);\n\n    if (!TR && row >= 0) {\n      throw new Error('TR was expected to be rendered but is not');\n    }\n\n    const TD = TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column)];\n\n    if (!TD && column >= 0) {\n      throw new Error('TD or TH was expected to be rendered but is not');\n    }\n\n    return TD;\n  }\n\n  /**\n   * Get the DOM element of the row with the provided index.\n   *\n   * @param {number} rowIndex Row index.\n   * @returns {HTMLTableRowElement|boolean} Return the row's DOM element or `false` if the row with the provided\n   * index doesn't exist.\n   */\n  getRow(rowIndex) {\n    let renderedRowIndex = null;\n    let parentElement = null;\n\n    if (rowIndex < 0) {\n      renderedRowIndex = this.rowFilter?.sourceRowToVisibleColHeadedRow(rowIndex);\n      parentElement = this.THEAD;\n\n    } else {\n      renderedRowIndex = this.rowFilter?.sourceToRendered(rowIndex);\n      parentElement = this.TBODY;\n    }\n\n    if (renderedRowIndex !== undefined && parentElement !== undefined) {\n      if (parentElement.childNodes.length < renderedRowIndex + 1) {\n        return false;\n\n      } else {\n        return parentElement.childNodes[renderedRowIndex];\n      }\n\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * GetColumnHeader.\n   *\n   * @param {number} col Column index.\n   * @param {number} [level=0] Header level (0 = most distant to the table).\n   * @returns {object} HTMLElement on success or undefined on error.\n   */\n  getColumnHeader(col, level = 0) {\n    const TR = this.THEAD.childNodes[level];\n\n    return TR?.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(col)];\n  }\n\n  /**\n   * Gets all columns headers (TH elements) from the table.\n   *\n   * @param {number} column A source column index.\n   * @returns {HTMLTableCellElement[]}\n   */\n  getColumnHeaders(column) {\n    const THs = [];\n    const visibleColumn = this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column);\n\n    this.THEAD.childNodes.forEach((TR) => {\n      const TH = TR.childNodes[visibleColumn];\n\n      if (TH) {\n        THs.push(TH);\n      }\n    });\n\n    return THs;\n  }\n\n  /**\n   * GetRowHeader.\n   *\n   * @param {number} row Row index.\n   * @param {number} [level=0] Header level (0 = most distant to the table).\n   * @returns {HTMLElement} HTMLElement on success or Number one of the exit codes on error: `null table doesn't have\n   *   row headers`.\n   */\n  getRowHeader(row, level = 0) {\n    const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;\n\n    if (level >= rowHeadersCount) {\n      return;\n    }\n\n    const renderedRow = this.rowFilter.sourceToRendered(row);\n    const visibleRow = renderedRow < 0 ? this.rowFilter.sourceRowToVisibleColHeadedRow(row) : renderedRow;\n    const parentElement = renderedRow < 0 ? this.THEAD : this.TBODY;\n    const TR = parentElement.childNodes[visibleRow];\n\n    return TR?.childNodes[level];\n  }\n\n  /**\n   * Gets all rows headers (TH elements) from the table.\n   *\n   * @param {number} row A source row index.\n   * @returns {HTMLTableCellElement[]}\n   */\n  getRowHeaders(row) {\n    const THs = [];\n    const rowHeadersCount = this.wtSettings.getSetting('rowHeaders').length;\n\n    for (let renderedRowIndex = 0; renderedRowIndex < rowHeadersCount; renderedRowIndex++) {\n      const TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n      const TH = TR?.childNodes[renderedRowIndex];\n\n      if (TH) {\n        THs.push(TH);\n      }\n    }\n\n    return THs;\n  }\n\n  /**\n   * Returns cell coords object for a given TD (or a child element of a TD element).\n   *\n   * @param {HTMLTableCellElement} TD A cell DOM element (or a child of one).\n   * @returns {CellCoords|null} The coordinates of the provided TD element (or the closest TD element) or null, if the\n   *   provided element is not applicable.\n   */\n  getCoords(TD) {\n    let cellElement = TD;\n\n    if (cellElement.nodeName !== 'TD' && cellElement.nodeName !== 'TH') {\n      cellElement = closest(cellElement, ['TD', 'TH']);\n    }\n\n    if (cellElement === null) {\n      return null;\n    }\n\n    const TR = cellElement.parentNode;\n    const CONTAINER = TR.parentNode;\n    let row = index(TR);\n    let col = cellElement.cellIndex;\n\n    if (overlayContainsElement(CLONE_TOP_INLINE_START_CORNER, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_TOP, cellElement, this.wtRootElement)) {\n      if (CONTAINER.nodeName === 'THEAD') {\n        row -= CONTAINER.childNodes.length;\n      }\n\n    } else if (overlayContainsElement(CLONE_BOTTOM_INLINE_START_CORNER, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_BOTTOM, cellElement, this.wtRootElement)) {\n      const totalRows = this.wtSettings.getSetting('totalRows');\n\n      row = totalRows - CONTAINER.childNodes.length + row;\n\n    } else if (CONTAINER === this.THEAD) {\n      row = this.rowFilter.visibleColHeadedRowToSourceRow(row);\n\n    } else {\n      row = this.rowFilter.renderedToSource(row);\n    }\n\n    if (overlayContainsElement(CLONE_TOP_INLINE_START_CORNER, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_INLINE_START, cellElement, this.wtRootElement)\n      || overlayContainsElement(CLONE_BOTTOM_INLINE_START_CORNER, cellElement, this.wtRootElement)) {\n      col = this.columnFilter.offsettedTH(col);\n\n    } else {\n      col = this.columnFilter.visibleRowHeadedColumnToSourceColumn(col);\n    }\n\n    return this.wot.createCellCoords(row, col);\n  }\n\n  /**\n   * Check if any of the rendered rows is higher than expected, and if so, cache them.\n   */\n  markOversizedRows() {\n    if (this.wtSettings.getSetting('externalRowCalculator')) {\n      return;\n    }\n    let rowCount = this.TBODY.childNodes.length;\n    const expectedTableHeight = rowCount * this.wtSettings.getSetting('defaultRowHeight');\n    const actualTableHeight = innerHeight(this.TBODY) - 1;\n    let previousRowHeight;\n    let rowInnerHeight;\n    let sourceRowIndex;\n    let currentTr;\n    let rowHeader;\n\n    if (expectedTableHeight === actualTableHeight && !this.wtSettings.getSetting('fixedRowsBottom')) {\n      // If the actual table height equals rowCount * default single row height, no row is oversized -> no need to iterate over them\n      return;\n    }\n\n    while (rowCount) {\n      rowCount -= 1;\n      sourceRowIndex = this.rowFilter.renderedToSource(rowCount);\n      previousRowHeight = this.getRowHeight(sourceRowIndex);\n      currentTr = this.getTrForRow(sourceRowIndex);\n      rowHeader = currentTr.querySelector('th');\n\n      if (rowHeader) {\n        rowInnerHeight = innerHeight(rowHeader);\n      } else {\n        rowInnerHeight = innerHeight(currentTr) - 1;\n      }\n\n      if ((!previousRowHeight && this.wtSettings.getSetting('defaultRowHeight') < rowInnerHeight ||\n          previousRowHeight < rowInnerHeight)) {\n        rowInnerHeight += 1;\n        this.dataAccessObject.wtViewport.oversizedRows[sourceRowIndex] = rowInnerHeight;\n      }\n    }\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @returns {HTMLTableElement}\n   */\n  getTrForRow(row) {\n    return this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n  }\n\n  /**\n   * Checks if the column index (negative value from -1 to N) is rendered.\n   *\n   * @param {number} column The column index (negative value from -1 to N).\n   * @returns {boolean}\n   */\n  isColumnHeaderRendered(column) {\n    if (column >= 0) {\n      return false;\n    }\n\n    const rowHeaders = this.wtSettings.getSetting('rowHeaders');\n    const rowHeadersCount = rowHeaders.length;\n\n    return Math.abs(column) <= rowHeadersCount;\n  }\n\n  /**\n   * Checks if the row index (negative value from -1 to N) is rendered.\n   *\n   * @param {number} row The row index (negative value from -1 to N).\n   * @returns {boolean}\n   */\n  isRowHeaderRendered(row) {\n    if (row >= 0) {\n      return false;\n    }\n\n    const columnHeaders = this.wtSettings.getSetting('columnHeaders');\n    const columnHeadersCount = columnHeaders.length;\n\n    return Math.abs(row) <= columnHeadersCount;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given row index is lower than the index of the first row that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * Negative row index is used to check the columns' headers.\n   *\n   *  Headers\n   *           +--------------+                                     │\n   *       -3  │    │    │    │                                     │\n   *           +--------------+                                     │\n   *       -2  │    │    │    │                                     │ TRUE\n   *           +--------------+                                     │\n   *       -1  │    │    │    │                                     │\n   *  Cells  +==================+                                   │\n   *        0  ┇    ┇    ┇    ┇ <--- For fixedRowsTop: 1            │\n   *           +--------------+      the master overlay do       ---+ first rendered row (index 1)\n   *        1  │ A2 │ B2 │ C2 │      not render the first row.      │\n   *           +--------------+                                     │ FALSE\n   *        2  │ A3 │ B3 │ C3 │                                     │\n   *           +--------------+                                  ---+ last rendered row\n   *                                                                │\n   *                                                                │ FALSE\n   *\n   * @param {number} row The visual row index.\n   * @memberof Table#\n   * @function isRowBeforeRenderedRows\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isRowBeforeRenderedRows(row) {\n    const first = this.getFirstRenderedRow();\n\n    // Check the headers only in case when the first rendered row is -1 or 0.\n    // This is an indication that the overlay is placed on the most top position.\n    if (row < 0 && first <= 0) {\n      return !this.isRowHeaderRendered(row);\n    }\n\n    return row < first;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given column index is greater than the index of the last column that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * The negative row index is used to check the columns' headers. However,\n   * keep in mind that for negative indexes, the method always returns FALSE as\n   * it is not possible to render headers partially. The \"after\" index can not be\n   * lower than -1.\n   *\n   *  Headers\n   *           +--------------+                                     │\n   *       -3  │    │    │    │                                     │\n   *           +--------------+                                     │\n   *       -2  │    │    │    │                                     │ FALSE\n   *           +--------------+                                     │\n   *       -1  │    │    │    │                                     │\n   *  Cells  +==================+                                   │\n   *        0  ┇    ┇    ┇    ┇ <--- For fixedRowsTop: 1            │\n   *           +--------------+      the master overlay do       ---+ first rendered row (index 1)\n   *        1  │ A2 │ B2 │ C2 │      not render the first rows      │\n   *           +--------------+                                     │ FALSE\n   *        2  │ A3 │ B3 │ C3 │                                     │\n   *           +--------------+                                  ---+ last rendered row\n   *                                                                │\n   *                                                                │ TRUE\n   *\n   * @param {number} row The visual row index.\n   * @memberof Table#\n   * @function isRowAfterRenderedRows\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isRowAfterRenderedRows(row) {\n    return row > this.getLastRenderedRow();\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given column index is lower than the index of the first column that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * Negative column index is used to check the rows' headers.\n   *\n   *                            For fixedColumnsStart: 1 the master overlay\n   *                            do not render this first columns.\n   *  Headers    -3   -2   -1    |\n   *           +----+----+----║┄ ┄ +------+------+\n   *           │    │    │    ║    │  B1  │  C1  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B2  │  C2  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B3  │  C3  │\n   *           +----+----+----║┄ ┄ +------+------+\n   *                               ╷             ╷\n   *      -------------------------+-------------+---------------->\n   *          TRUE             first    FALSE   last         FALSE\n   *                           rendered         rendered\n   *                           column           column\n   *\n   * @param {number} column The visual column index.\n   * @memberof Table#\n   * @function isColumnBeforeRenderedColumns\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isColumnBeforeRenderedColumns(column) {\n    const first = this.getFirstRenderedColumn();\n\n    // Check the headers only in case when the first rendered column is -1 or 0.\n    // This is an indication that the overlay is placed on the most left position.\n    if (column < 0 && first <= 0) {\n      return !this.isColumnHeaderRendered(column);\n    }\n\n    return column < first;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Check if the given column index is greater than the index of the last column that\n   * is currently rendered and return TRUE in that case, or FALSE otherwise.\n   *\n   * The negative column index is used to check the rows' headers. However,\n   * keep in mind that for negative indexes, the method always returns FALSE as\n   * it is not possible to render headers partially. The \"after\" index can not be\n   * lower than -1.\n   *\n   *                            For fixedColumnsStart: 1 the master overlay\n   *                            do not render this first columns.\n   *  Headers    -3   -2   -1    |\n   *           +----+----+----║┄ ┄ +------+------+\n   *           │    │    │    ║    │  B1  │  C1  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B2  │  C2  │\n   *           +--------------║┄ ┄ --------------│\n   *           │    │    │    ║    │  B3  │  C3  │\n   *           +----+----+----║┄ ┄ +------+------+\n   *                               ╷             ╷\n   *      -------------------------+-------------+---------------->\n   *          FALSE             first    FALSE   last         TRUE\n   *                           rendered         rendered\n   *                           column           column\n   *\n   * @param {number} column The visual column index.\n   * @memberof Table#\n   * @function isColumnAfterRenderedColumns\n   * @returns {boolean}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  isColumnAfterRenderedColumns(column) {\n    return this.columnFilter && (column > this.getLastRenderedColumn());\n  }\n\n  isColumnAfterViewport(column) {\n    return this.columnFilter && (column > this.getLastVisibleColumn());\n  }\n\n  isRowAfterViewport(row) {\n    return this.rowFilter && (row > this.getLastVisibleRow());\n  }\n\n  isColumnBeforeViewport(column) {\n    return this.columnFilter && (this.columnFilter.sourceToRendered(column) < 0 && column >= 0);\n  }\n\n  isLastRowFullyVisible() {\n    return this.getLastVisibleRow() === this.getLastRenderedRow();\n  }\n\n  isLastColumnFullyVisible() {\n    return this.getLastVisibleColumn() === this.getLastRenderedColumn();\n  }\n\n  allRowsInViewport() {\n    return this.wtSettings.getSetting('totalRows') === this.getVisibleRowsCount();\n  }\n\n  allColumnsInViewport() {\n    return this.wtSettings.getSetting('totalColumns') === this.getVisibleColumnsCount();\n  }\n\n  /**\n   * Checks if any of the row's cells content exceeds its initial height, and if so, returns the oversized height.\n   *\n   * @param {number} sourceRow The physical row index.\n   * @returns {number}\n   */\n  getRowHeight(sourceRow) {\n    return this.rowUtils.getHeight(sourceRow);\n  }\n\n  /**\n   * @param {number} level The column level.\n   * @returns {number}\n   */\n  getColumnHeaderHeight(level) {\n    return this.columnUtils.getHeaderHeight(level);\n  }\n\n  /**\n   * @param {number} sourceColumn The physical column index.\n   * @returns {number}\n   */\n  getColumnWidth(sourceColumn) {\n    return this.columnUtils.getWidth(sourceColumn);\n  }\n\n  /**\n   * @param {number} sourceColumn The physical column index.\n   * @returns {number}\n   */\n  getStretchedColumnWidth(sourceColumn) {\n    return this.columnUtils.getStretchedColumnWidth(sourceColumn);\n  }\n\n  /**\n   * Checks if the table has defined size. It returns `true` when the table has width and height\n   * set bigger than `0px`.\n   *\n   * @returns {boolean}\n   */\n  hasDefinedSize() {\n    return this.hasTableHeight && this.hasTableWidth;\n  }\n\n  /**\n   * Gets table's width. The returned width is the width of the rendered cells that fit in the\n   * current viewport. The value may change depends on the viewport position (scroll position).\n   *\n   * @returns {number}\n   */\n  getWidth() {\n    return outerWidth(this.TABLE);\n  }\n\n  /**\n   * Gets table's height. The returned height is the height of the rendered cells that fit in the\n   * current viewport. The value may change depends on the viewport position (scroll position).\n   *\n   * @returns {number}\n   */\n  getHeight() {\n    return outerHeight(this.TABLE);\n  }\n\n  /**\n   * Gets table's total width. The returned width is the width of all rendered cells (including headers)\n   * that can be displayed in the table.\n   *\n   * @returns {number}\n   */\n  getTotalWidth() {\n    const width = outerWidth(this.hider);\n\n    // when the overlay's table does not have any cells the hider returns 0, get then width from the table element\n    return width !== 0 ? width : this.getWidth();\n  }\n\n  /**\n   * Gets table's total height. The returned height is the height of all rendered cells (including headers)\n   * that can be displayed in the table.\n   *\n   * @returns {number}\n   */\n  getTotalHeight() {\n    const height = outerHeight(this.hider);\n\n    // when the overlay's table does not have any cells the hider returns 0, get then height from the table element\n    return height !== 0 ? height : this.getHeight();\n  }\n\n  /**\n   * Checks if the table is visible. It returns `true` when the holder element (or its parents)\n   * has CSS 'display' property different than 'none'.\n   *\n   * @returns {boolean}\n   */\n  isVisible() {\n    return isVisible(this.TABLE);\n  }\n\n  /**\n   * Modify row header widths provided by user in class contructor.\n   *\n   * @private\n   * @param {Function} rowHeaderWidthFactory The function which can provide default width values for rows..\n   * @returns {number}\n   */\n  _modifyRowHeaderWidth(rowHeaderWidthFactory) {\n    let widths = isFunction(rowHeaderWidthFactory) ? rowHeaderWidthFactory() : null;\n\n    if (Array.isArray(widths)) {\n      widths = [...widths];\n      widths[widths.length - 1] = this._correctRowHeaderWidth(widths[widths.length - 1]);\n    } else {\n      widths = this._correctRowHeaderWidth(widths);\n    }\n\n    return widths;\n  }\n\n  /**\n   * Correct row header width if necessary.\n   *\n   * @private\n   * @param {number} width The width to process.\n   * @returns {number}\n   */\n  _correctRowHeaderWidth(width) {\n    let rowHeaderWidth = width;\n\n    if (typeof width !== 'number') {\n      rowHeaderWidth = this.wtSettings.getSetting('defaultColumnWidth');\n    }\n    if (this.correctHeaderWidth) {\n      rowHeaderWidth += 1;\n    }\n\n    return rowHeaderWidth;\n  }\n}\n\nexport default Table;\n","/**\n * @class ColumnFilter\n */\nclass ColumnFilter {\n  /**\n   * @type {number}\n   */\n  offset;\n  /**\n   * @type {number}\n   */\n  total;\n  /**\n   * @type {number}\n   */\n  countTH;\n\n  /**\n   * @param {number} offset The scroll horizontal offset.\n   * @param {number} total The total width of the table.\n   * @param {number} countTH The number of rendered row headers.\n   */\n  constructor(offset, total, countTH) {\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  offsetted(index) {\n    return index + this.offset;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  unOffsetted(index) {\n    return index - this.offset;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  renderedToSource(index) {\n    return this.offsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  sourceToRendered(index) {\n    return this.unOffsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  offsettedTH(index) {\n    return index - this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  unOffsettedTH(index) {\n    return index + this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  visibleRowHeadedColumnToSourceColumn(index) {\n    return this.renderedToSource(this.offsettedTH(index));\n  }\n\n  /**\n   * @param {number} index The visual column index.\n   * @returns {number}\n   */\n  sourceColumnToVisibleRowHeadedColumn(index) {\n    return this.unOffsettedTH(this.sourceToRendered(index));\n  }\n}\n\nexport default ColumnFilter;\n","/**\n * @class RowFilter\n */\nclass RowFilter {\n  /**\n   * @type {number}\n   */\n  offset;\n  /**\n   * @type {number}\n   */\n  total;\n  /**\n   * @type {number}\n   */\n  countTH;\n\n  /**\n   * @param {number} offset The scroll vertical offset.\n   * @param {number} total The total height of the table.\n   * @param {number} countTH The number of rendered column headers.\n   */\n  constructor(offset, total, countTH) {\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  offsetted(index) {\n    return index + this.offset;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  unOffsetted(index) {\n    return index - this.offset;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  renderedToSource(index) {\n    return this.offsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  sourceToRendered(index) {\n    return this.unOffsetted(index);\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  offsettedTH(index) {\n    return index - this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  unOffsettedTH(index) {\n    return index + this.countTH;\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  visibleColHeadedRowToSourceRow(index) {\n    return this.renderedToSource(this.offsettedTH(index));\n  }\n\n  /**\n   * @param {number} index The visual row index.\n   * @returns {number}\n   */\n  sourceRowToVisibleColHeadedRow(index) {\n    return this.unOffsettedTH(this.sourceToRendered(index));\n  }\n}\n\nexport default RowFilter;\n","import RowHeadersRenderer from './rowHeaders';\nimport ColumnHeadersRenderer from './columnHeaders';\nimport ColGroupRenderer from './colGroup';\nimport RowsRenderer from './rows';\nimport CellsRenderer from './cells';\nimport TableRenderer from './table';\n\n/**\n * Content renderer.\n *\n * @class Renderer\n */\nclass Renderer {\n  constructor({ TABLE, THEAD, COLGROUP, TBODY, rowUtils, columnUtils, cellRenderer } = {}) {\n    /**\n     * General renderer class used to render Walkontable content on screen.\n     *\n     * @type {TableRenderer}\n     */\n    this.renderer = new TableRenderer(TABLE, { cellRenderer });\n    this.renderer.setRenderers({\n      rowHeaders: new RowHeadersRenderer(),\n      columnHeaders: new ColumnHeadersRenderer(THEAD),\n      colGroup: new ColGroupRenderer(COLGROUP),\n      rows: new RowsRenderer(TBODY),\n      cells: new CellsRenderer(),\n    });\n    this.renderer.setAxisUtils(rowUtils, columnUtils);\n  }\n\n  /**\n   * Sets the overlay that is currently rendered. If `null` is provided, the master overlay is set.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName The overlay name.\n   * @returns {Renderer}\n   */\n  setActiveOverlayName(overlayName) {\n    this.renderer.setActiveOverlayName(overlayName);\n\n    return this;\n  }\n\n  /**\n   * Sets filter calculators for newly calculated row and column position. The filters are used to transform visual\n   * indexes (0 to N) to source indexes provided by Handsontable.\n   *\n   * @param {RowFilter} rowFilter The row filter instance.\n   * @param {ColumnFilter} columnFilter The column filter instance.\n   * @returns {Renderer}\n   */\n  setFilters(rowFilter, columnFilter) {\n    this.renderer.setFilters(rowFilter, columnFilter);\n\n    return this;\n  }\n\n  /**\n   * Sets the viewport size of the rendered table.\n   *\n   * @param {number} rowsCount An amount of rows to render.\n   * @param {number} columnsCount An amount of columns to render.\n   * @returns {Renderer}\n   */\n  setViewportSize(rowsCount, columnsCount) {\n    this.renderer.setViewportSize(rowsCount, columnsCount);\n\n    return this;\n  }\n\n  /**\n   * Sets row and column header functions.\n   *\n   * @param {Function[]} rowHeaders Row header functions. Factories for creating content for row headers.\n   * @param {Function[]} columnHeaders Column header functions. Factories for creating content for column headers.\n   * @returns {Renderer}\n   */\n  setHeaderContentRenderers(rowHeaders, columnHeaders) {\n    this.renderer.setHeaderContentRenderers(rowHeaders, columnHeaders);\n\n    return this;\n  }\n\n  /**\n   * Adjusts the table (preparing for render).\n   */\n  adjust() {\n    this.renderer.adjust();\n  }\n\n  /**\n   * Renders the table.\n   */\n  render() {\n    this.renderer.render();\n  }\n}\n\nexport {\n  RowHeadersRenderer,\n  ColumnHeadersRenderer,\n  ColGroupRenderer,\n  RowsRenderer,\n  CellsRenderer,\n  TableRenderer,\n  Renderer,\n};\n","import { SharedOrderView } from './../utils/orderView';\nimport BaseRenderer from './_base';\nimport { setAttribute, removeAttribute } from '../../../../helpers/dom/element';\nimport {\n  A11Y_COLINDEX,\n  A11Y_ROWHEADER,\n  A11Y_SCOPE_ROW,\n  A11Y_TABINDEX\n} from '../../../../helpers/a11y';\n\n/**\n * Row headers renderer responsible for managing (inserting, tracking, rendering) TR elements belongs to TR.\n *\n *   <tr> (root node)\n *     ├ <th>   --- RowHeadersRenderer\n *     ├ <td>   \\\n *     ├ <td>    \\\n *     ├ <td>     - CellsRenderer\n *     ├ <td>    /\n *     └ <td>   /.\n *\n * @class {CellsRenderer}\n */\nexport default class RowHeadersRenderer extends BaseRenderer {\n  /**\n   * Cache for OrderView classes connected to specified node.\n   *\n   * @type {WeakMap}\n   */\n  orderViews = new WeakMap();\n  /**\n   * Row index which specifies the row position of the processed row header.\n   *\n   * @type {number}\n   */\n  sourceRowIndex = 0;\n\n  constructor() {\n    super('TH');\n  }\n\n  /**\n   * Obtains the instance of the SharedOrderView class which is responsible for rendering the nodes to the root node.\n   *\n   * @param {HTMLTableRowElement} rootNode The TR element, which is root element for row headers (TH).\n   * @returns {SharedOrderView}\n   */\n  obtainOrderView(rootNode) {\n    let orderView;\n\n    if (this.orderViews.has(rootNode)) {\n      orderView = this.orderViews.get(rootNode);\n    } else {\n      orderView = new SharedOrderView(\n        rootNode,\n        sourceColumnIndex => this.nodesPool.obtain(this.sourceRowIndex, sourceColumnIndex),\n        this.nodeType,\n      );\n      this.orderViews.set(rootNode, orderView);\n    }\n\n    return orderView;\n  }\n\n  /**\n   * Renders the cells.\n   */\n  render() {\n    const { rowsToRender, rowHeaderFunctions, rowHeadersCount, rows, cells } = this.table;\n\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      const sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n      const TR = rows.getRenderedNode(visibleRowIndex);\n\n      this.sourceRowIndex = sourceRowIndex;\n\n      const orderView = this.obtainOrderView(TR);\n      const cellsView = cells.obtainOrderView(TR);\n\n      orderView\n        .appendView(cellsView)\n        .setSize(rowHeadersCount)\n        .setOffset(this.table.renderedColumnToSource(0))\n        .start();\n\n      for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n        orderView.render();\n\n        const TH = orderView.getCurrentNode();\n\n        TH.className = '';\n        TH.removeAttribute('style');\n\n        // Remove all accessibility-related attributes for the header to start fresh.\n        removeAttribute(TH, [\n          new RegExp('aria-(.*)'),\n          new RegExp('role')\n        ]);\n\n        if (this.table.isAriaEnabled()) {\n          setAttribute(TH, [\n            A11Y_ROWHEADER(),\n            A11Y_SCOPE_ROW(),\n            A11Y_COLINDEX(visibleColumnIndex + 1),\n            A11Y_TABINDEX(-1)\n          ]);\n        }\n\n        rowHeaderFunctions[visibleColumnIndex](sourceRowIndex, TH, visibleColumnIndex);\n      }\n\n      orderView.end();\n    }\n  }\n}\n","import OrderView from './view';\nimport SharedOrderView from './sharedView';\n\nexport {\n  OrderView,\n  SharedOrderView,\n};\n","import { WORKING_SPACE_TOP, WORKING_SPACE_BOTTOM } from './constants';\nimport ViewSizeSet from './viewSizeSet';\n\n/**\n * Executive model for each table renderer. It's responsible for injecting DOM nodes in a\n * specified order and adjusting the number of elements in the root node.\n *\n * Only this class have rights to juggling DOM elements within the root node (see render method).\n *\n * @class {OrderView}\n */\nexport default class OrderView {\n  /**\n   * The root node to manage with.\n   *\n   * @type {HTMLElement}\n   */\n  rootNode;\n  /**\n   * Factory for newly created DOM elements.\n   *\n   * @type {Function}\n   */\n  nodesPool;\n  /**\n   * Holder for sizing and positioning of the view.\n   *\n   * @type {ViewSizeSet}\n   */\n  sizeSet = new ViewSizeSet();\n  /**\n   * Node type which the order view will manage while rendering the DOM elements.\n   *\n   * @type {string}\n   */\n  childNodeType;\n  /**\n   * The visual index of currently processed row.\n   *\n   * @type {number}\n   */\n  visualIndex = 0;\n  /**\n   * The list of DOM elements which are rendered for this render cycle.\n   *\n   * @type {HTMLElement[]}\n   */\n  collectedNodes = [];\n\n  constructor(rootNode, nodesPool, childNodeType) {\n    this.rootNode = rootNode;\n    this.nodesPool = nodesPool;\n    this.childNodeType = childNodeType.toUpperCase();\n  }\n\n  /**\n   * Sets the size for rendered elements. It can be a size for rows, cells or size for row\n   * headers etc. It depends for what table renderer this instance was created.\n   *\n   * @param {number} size The size.\n   * @returns {OrderView}\n   */\n  setSize(size) {\n    this.sizeSet.setSize(size);\n\n    return this;\n  }\n\n  /**\n   * Sets the offset for rendered elements. The offset describes the shift between 0 and\n   * the first rendered element according to the scroll position.\n   *\n   * @param {number} offset The offset.\n   * @returns {OrderView}\n   */\n  setOffset(offset) {\n    this.sizeSet.setOffset(offset);\n\n    return this;\n  }\n\n  /**\n   * Checks if this instance of the view shares the root node with another instance. This happens only once when\n   * a row (TR) as a root node is managed by two OrderView instances. If this happens another DOM injection\n   * algorithm is performed to achieve consistent order.\n   *\n   * @returns {boolean}\n   */\n  isSharedViewSet() {\n    return this.sizeSet.isShared();\n  }\n\n  /**\n   * Returns rendered DOM element based on visual index.\n   *\n   * @param {number} visualIndex The visual index.\n   * @returns {HTMLElement}\n   */\n  getNode(visualIndex) {\n    return visualIndex < this.collectedNodes.length ? this.collectedNodes[visualIndex] : null;\n  }\n\n  /**\n   * Returns currently processed DOM element.\n   *\n   * @returns {HTMLElement}\n   */\n  getCurrentNode() {\n    const length = this.collectedNodes.length;\n\n    return length > 0 ? this.collectedNodes[length - 1] : null;\n  }\n\n  /**\n   * Returns rendered child count for this instance.\n   *\n   * @returns {number}\n   */\n  getRenderedChildCount() {\n    const { rootNode, sizeSet } = this;\n    let childElementCount = 0;\n\n    if (this.isSharedViewSet()) {\n      let element = rootNode.firstElementChild;\n\n      while (element) {\n        if (element.tagName === this.childNodeType) {\n          childElementCount += 1;\n\n        } else if (sizeSet.isPlaceOn(WORKING_SPACE_TOP)) {\n          break;\n        }\n        element = element.nextElementSibling;\n      }\n    } else {\n      childElementCount = rootNode.childElementCount;\n    }\n\n    return childElementCount;\n  }\n\n  /**\n   * Setups and prepares all necessary properties and start the rendering process.\n   * This method has to be called only once (at the start) for the render cycle.\n   */\n  start() {\n    this.collectedNodes.length = 0;\n    this.visualIndex = 0;\n\n    const { rootNode, sizeSet } = this;\n    const isShared = this.isSharedViewSet();\n    const { nextSize } = sizeSet.getViewSize();\n\n    let childElementCount = this.getRenderedChildCount();\n\n    while (childElementCount < nextSize) {\n      const newNode = this.nodesPool();\n\n      if (!isShared || (isShared && sizeSet.isPlaceOn(WORKING_SPACE_BOTTOM))) {\n        rootNode.appendChild(newNode);\n      } else {\n        rootNode.insertBefore(newNode, rootNode.firstChild);\n      }\n      childElementCount += 1;\n    }\n\n    const isSharedPlacedOnTop = (isShared && sizeSet.isPlaceOn(WORKING_SPACE_TOP));\n\n    while (childElementCount > nextSize) {\n      rootNode.removeChild(isSharedPlacedOnTop ? rootNode.firstChild : rootNode.lastChild);\n      childElementCount -= 1;\n    }\n  }\n\n  /**\n   * Renders the DOM element based on visual index (which is calculated internally).\n   * This method has to be called as many times as the size count is met (to cover all previously rendered DOM elements).\n   */\n  render() {\n    const { rootNode, sizeSet } = this;\n    let visualIndex = this.visualIndex;\n\n    if (this.isSharedViewSet() && sizeSet.isPlaceOn(WORKING_SPACE_BOTTOM)) {\n      visualIndex += sizeSet.sharedSize.nextSize;\n    }\n\n    let node = rootNode.childNodes[visualIndex];\n\n    if (node.tagName !== this.childNodeType) {\n      const newNode = this.nodesPool();\n\n      rootNode.replaceChild(newNode, node);\n      node = newNode;\n    }\n\n    this.collectedNodes.push(node);\n    this.visualIndex += 1;\n  }\n\n  /**\n   * Ends the render process.\n   * This method has to be called only once (at the end) for the render cycle.\n   */\n  end() { }\n}\n","/**\n * Describes that ViewSizeSet instance doesn't share sizes with another\n * instance (root node can contain only one type of children nodes).\n *\n * @type {number}\n */\nexport const WORKING_SPACE_ALL = 0;\n/**\n * Describes that ViewSizeSet instance share sizes with another instance and\n * set working space for this instance to 'top' (root node can contain multiple\n * types of children and this instance will be occupied top space of the root node).\n *\n * @type {number}\n */\nexport const WORKING_SPACE_TOP = 1;\n/**\n * Describes that ViewSizeSet instance share sizes with another instance and\n * set working space for this instance to 'bottom' (root node can contain multiple\n * types of children and this instance will be occupied bottom space of the root node).\n *\n * @type {number}\n */\nexport const WORKING_SPACE_BOTTOM = 2;\n","import ViewSize from './viewSize';\nimport { WORKING_SPACE_ALL, WORKING_SPACE_TOP, WORKING_SPACE_BOTTOM } from './constants';\n\n/**\n * The class is a source of the truth of information about the current and\n * next size of the rendered DOM elements and current and next offset of\n * the view. That information allows us to calculate diff between current\n * DOM order and this which should be rendered without touching the DOM API at all.\n *\n * Mostly the ViewSizeSet is created for each individual renderer. But in\n * the table, there is one case where this size information should be shared\n * between two different instances (different table renderers). This is a TR\n * element which can contain TH elements - managed by own renderer and\n * TD elements - managed by another renderer. To generate correct DOM order\n * for them it is required to connect these two instances by reference\n * through `sharedSize`.\n *\n * @class {ViewSizeSet}\n */\nexport default class ViewSizeSet {\n  /**\n   * Holder for current and next view size and offset.\n   *\n   * @type {ViewSize}\n   */\n  size = new ViewSize();\n  /**\n   * Defines if this instance shares its size with another instance. If it's in the shared\n   * mode it defines what space it occupies ('top' or 'bottom').\n   *\n   * @type {number}\n   */\n  workingSpace = WORKING_SPACE_ALL;\n  /**\n   * Shared Size instance.\n   *\n   * @type {ViewSize}\n   */\n  sharedSize = null;\n\n  /**\n   * Sets the size for rendered elements. It can be a size for rows, cells or size for row\n   * headers etc.\n   *\n   * @param {number} size The size.\n   */\n  setSize(size) {\n    this.size.setSize(size);\n  }\n\n  /**\n   * Sets the offset for rendered elements. The offset describes the shift between 0 and\n   * the first rendered element according to the scroll position.\n   *\n   * @param {number} offset The offset.\n   */\n  setOffset(offset) {\n    this.size.setOffset(offset);\n  }\n\n  /**\n   * Returns ViewSize instance.\n   *\n   * @returns {ViewSize}\n   */\n  getViewSize() {\n    return this.size;\n  }\n\n  /**\n   * Checks if this ViewSizeSet is sharing the size with another instance.\n   *\n   * @returns {boolean}\n   */\n  isShared() {\n    return this.sharedSize instanceof ViewSize;\n  }\n\n  /**\n   * Checks what working space describes this size instance.\n   *\n   * @param {number} workingSpace The number which describes the type of the working space (see constants.js).\n   * @returns {boolean}\n   */\n  isPlaceOn(workingSpace) {\n    return this.workingSpace === workingSpace;\n  }\n\n  /**\n   * Appends the ViewSizeSet instance to this instance that turns it into a shared mode.\n   *\n   * @param {ViewSizeSet} viewSize The instance of the ViewSizeSet class.\n   */\n  append(viewSize) {\n    this.workingSpace = WORKING_SPACE_TOP;\n    viewSize.workingSpace = WORKING_SPACE_BOTTOM;\n    this.sharedSize = viewSize.getViewSize();\n  }\n\n  /**\n   * Prepends the ViewSize instance to this instance that turns it into a shared mode.\n   *\n   * @param {ViewSizeSet} viewSize The instance of the ViewSizeSet class.\n   */\n  prepend(viewSize) {\n    this.workingSpace = WORKING_SPACE_BOTTOM;\n    viewSize.workingSpace = WORKING_SPACE_TOP;\n    this.sharedSize = viewSize.getViewSize();\n  }\n}\n","/**\n * Holder for current and next size (count of rendered and to render DOM elements) and offset.\n *\n * @class {ViewSize}\n */\nexport default class ViewSize {\n  /**\n   * Current size of the rendered DOM elements.\n   *\n   * @type {number}\n   */\n  currentSize = 0;\n  /**\n   * Next size of the rendered DOM elements which should be fulfilled.\n   *\n   * @type {number}\n   */\n  nextSize = 0;\n  /**\n   * Current offset.\n   *\n   * @type {number}\n   */\n  currentOffset = 0;\n  /**\n   * Next offset.\n   *\n   * @type {number}\n   */\n  nextOffset = 0;\n\n  /**\n   * Sets new size of the rendered DOM elements.\n   *\n   * @param {number} size The size.\n   */\n  setSize(size) {\n    this.currentSize = this.nextSize;\n    this.nextSize = size;\n  }\n\n  /**\n   * Sets new offset.\n   *\n   * @param {number} offset The offset.\n   */\n  setOffset(offset) {\n    this.currentOffset = this.nextOffset;\n    this.nextOffset = offset;\n  }\n}\n","import OrderView from './view';\n\n/**\n * Executive model for TR root nodes.\n *\n * @class {SharedOrderView}\n */\nexport default class SharedOrderView extends OrderView {\n  /**\n   * The method results in merging external order view into the current order. This happens only for order views which\n   * operate on the same root node.\n   *\n   * In the table, there is only one scenario when this happens. TR root element\n   * has a common root node with cells order view and row headers order view. Both classes have to share\n   * information about their order sizes to make proper diff calculations.\n   *\n   * @param {OrderView} orderView The order view to merging with. The view will be added at the beginning of the list.\n   * @returns {SharedOrderView}\n   */\n  prependView(orderView) {\n    this.sizeSet.prepend(orderView.sizeSet);\n    orderView.sizeSet.append(this.sizeSet);\n\n    return this;\n  }\n\n  /**\n   * The method results in merging external order view into the current order. This happens only for order views which\n   * operate on the same root node.\n   *\n   * In the table, there is only one scenario when this happens. TR root element\n   * has a common root node with cells order view and row headers order view. Both classes have to share\n   * information about their order sizes to make proper diff calculations.\n   *\n   * @param {OrderView} orderView The order view to merging with. The view will be added at the end of the list.\n   * @returns {SharedOrderView}\n   */\n  appendView(orderView) {\n    this.sizeSet.append(orderView.sizeSet);\n    orderView.sizeSet.prepend(this.sizeSet);\n\n    return this;\n  }\n}\n","import NodesPool from './../utils/nodesPool';\n\n/**\n * Base renderer class, abstract logic for specialized renderers.\n *\n * @class BaseRenderer\n */\nexport default class BaseRenderer {\n  /**\n   * Factory for newly created DOM elements.\n   *\n   * NodePool should be used for each renderer. For the first stage of the refactoring\n   * process, only some of the renderers are implemented a new approach.\n   *\n   * @type {NodesPool|null}\n   */\n  nodesPool = null;\n  /**\n   * Node type which the renderer will manage while building the table (eg. 'TD', 'TR', 'TH').\n   *\n   * @type {string}\n   */\n  nodeType;\n  /**\n   * The root node to which newly created elements will be inserted.\n   *\n   * @type {HTMLElement}\n   */\n  rootNode;\n  /**\n   * The instance of the Table class, a wrapper for all renderers and holder for properties describe table state.\n   *\n   * @type {TableRenderer}\n   */\n  table = null;\n  /**\n   * Counter of nodes already added.\n   *\n   * @type {number}\n   */\n  renderedNodes = 0;\n\n  constructor(nodeType, rootNode) {\n    this.nodesPool = typeof nodeType === 'string' ? new NodesPool(nodeType) : null;\n    this.nodeType = nodeType;\n    this.rootNode = rootNode;\n  }\n\n  /**\n   * Sets the table renderer instance to the current renderer.\n   *\n   * @param {TableRenderer} table The TableRenderer instance.\n   */\n  setTable(table) {\n    if (this.nodesPool) {\n      this.nodesPool.setRootDocument(table.rootDocument);\n    }\n\n    this.table = table;\n  }\n\n  /**\n   * Adjusts the number of rendered nodes.\n   */\n  adjust() { }\n\n  /**\n   * Renders the contents to the elements.\n   */\n  render() { }\n}\n","/**\n * Factory for newly created DOM elements.\n *\n * @class {NodesPool}\n */\nexport default class NodesPool {\n  /**\n   * Node type to generate (ew 'th', 'td').\n   *\n   * @type {string}\n   */\n  nodeType;\n\n  constructor(nodeType) {\n    this.nodeType = nodeType.toUpperCase();\n  }\n\n  /**\n   * Set document owner for this instance.\n   *\n   * @param {HTMLDocument} rootDocument The document window owner.\n   */\n  setRootDocument(rootDocument) {\n    this.rootDocument = rootDocument;\n  }\n\n  /**\n   * Obtains an element. The returned elements in the feature can be cached.\n   *\n   * @returns {HTMLElement}\n   */\n  obtain() {\n    return this.rootDocument.createElement(this.nodeType);\n  }\n}\n","import {\n  empty,\n  setAttribute,\n  removeAttribute,\n} from './../../../../helpers/dom/element';\nimport BaseRenderer from './_base';\nimport {\n  A11Y_COLINDEX,\n  A11Y_COLUMNHEADER,\n  A11Y_ROW,\n  A11Y_ROWGROUP,\n  A11Y_ROWINDEX,\n  A11Y_SCOPE_COL,\n  A11Y_TABINDEX,\n} from '../../../../helpers/a11y';\n\n/**\n * Column headers renderer responsible for managing (inserting, tracking, rendering) TR and TH elements.\n *\n *   <thead> (root node)\n *     ├ <tr>   \\\n *     ├ <tr>    \\\n *     ├ <tr>     - ColumnHeadersRenderer\n *     ├ <tr>    /\n *     └ <tr>   /.\n *\n * @class {ColumnHeadersRenderer}\n */\nexport default class ColumnHeadersRenderer extends BaseRenderer {\n  constructor(rootNode) {\n    super(null, rootNode); // NodePool is not implemented for this renderer yet\n  }\n\n  /**\n   * Adjusts the number of the rendered elements.\n   */\n  adjust() {\n    const { columnHeadersCount, rowHeadersCount } = this.table;\n    let TR = this.rootNode.firstChild;\n\n    if (columnHeadersCount) {\n      const { columnsToRender } = this.table;\n      const allColumnsToRender = columnsToRender + rowHeadersCount;\n\n      for (let i = 0, len = columnHeadersCount; i < len; i++) {\n        TR = this.rootNode.childNodes[i];\n\n        if (!TR) {\n          TR = this.table.rootDocument.createElement('tr');\n          this.rootNode.appendChild(TR);\n        }\n        this.renderedNodes = TR.childNodes.length;\n\n        while (this.renderedNodes < allColumnsToRender) {\n          TR.appendChild(this.table.rootDocument.createElement('th'));\n          this.renderedNodes += 1;\n        }\n        while (this.renderedNodes > allColumnsToRender) {\n          TR.removeChild(TR.lastChild);\n          this.renderedNodes -= 1;\n        }\n      }\n      const theadChildrenLength = this.rootNode.childNodes.length;\n\n      if (theadChildrenLength > columnHeadersCount) {\n        for (let i = columnHeadersCount; i < theadChildrenLength; i++) {\n          this.rootNode.removeChild(this.rootNode.lastChild);\n        }\n      }\n    } else if (TR) {\n      empty(TR);\n    }\n  }\n\n  /**\n   * Renders the TH elements.\n   */\n  render() {\n    const { columnHeadersCount } = this.table;\n\n    if (this.table.isAriaEnabled()) {\n      setAttribute(this.rootNode, [\n        A11Y_ROWGROUP()\n      ]);\n    }\n\n    for (let rowHeaderIndex = 0; rowHeaderIndex < columnHeadersCount; rowHeaderIndex += 1) {\n      const { columnHeaderFunctions, columnsToRender, rowHeadersCount } = this.table;\n      const TR = this.rootNode.childNodes[rowHeaderIndex];\n\n      if (this.table.isAriaEnabled()) {\n        setAttribute(TR, [\n          A11Y_ROW(),\n          A11Y_ROWINDEX(rowHeaderIndex + 1),\n        ]);\n      }\n\n      for (let renderedColumnIndex = (-1) * rowHeadersCount; renderedColumnIndex < columnsToRender; renderedColumnIndex += 1) { // eslint-disable-line max-len\n        const sourceColumnIndex = this.table.renderedColumnToSource(renderedColumnIndex);\n        const TH = TR.childNodes[renderedColumnIndex + rowHeadersCount];\n\n        TH.className = '';\n        TH.removeAttribute('style');\n\n        // Remove all accessibility-related attributes for the header to start fresh.\n        removeAttribute(TH, [\n          new RegExp('aria-(.*)'),\n          new RegExp('role')\n        ]);\n\n        if (this.table.isAriaEnabled()) {\n          setAttribute(TH, [\n            A11Y_COLINDEX(renderedColumnIndex + 1 + this.table.rowHeadersCount),\n            A11Y_TABINDEX(-1),\n            A11Y_COLUMNHEADER(),\n            ...(renderedColumnIndex >= 0 ? [\n              A11Y_SCOPE_COL(),\n            ] : [\n              // Adding `role=row` to the corner headers to prevent\n              // https://github.com/handsontable/dev-handsontable/issues/1574\n              A11Y_ROW()\n            ]),\n          ]);\n        }\n\n        columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);\n      }\n    }\n  }\n}\n","import BaseRenderer from './_base';\nimport { warn } from './../../../../helpers/console';\nimport { toSingleLine } from './../../../../helpers/templateLiteralTag';\nimport { addClass } from './../../../../helpers/dom/element';\n\nlet performanceWarningAppeared = false;\n\n/**\n * Colgroup renderer responsible for managing (inserting, tracking, rendering) COL elements.\n *\n *   <colgroup> (root node)\n *     ├ <col>   \\\n *     ├ <col>    \\\n *     ├ <col>     - ColGroupRenderer\n *     ├ <col>    /\n *     └ <col>   /.\n *\n * @class {ColGroupRenderer}\n */\nexport default class ColGroupRenderer extends BaseRenderer {\n  constructor(rootNode) {\n    super(null, rootNode); // NodePool is not implemented for this renderer yet\n  }\n\n  /**\n   * Adjusts the number of the rendered elements.\n   */\n  adjust() {\n    const { columnsToRender, rowHeadersCount } = this.table;\n    const allColumnsToRender = columnsToRender + rowHeadersCount;\n\n    while (this.renderedNodes < allColumnsToRender) {\n      this.rootNode.appendChild(this.table.rootDocument.createElement('col'));\n      this.renderedNodes += 1;\n    }\n    while (this.renderedNodes > allColumnsToRender) {\n      this.rootNode.removeChild(this.rootNode.lastChild);\n      this.renderedNodes -= 1;\n    }\n  }\n\n  /**\n   * Renders the col group elements.\n   */\n  render() {\n    this.adjust();\n\n    const { columnsToRender, rowHeadersCount } = this.table;\n\n    if (!performanceWarningAppeared && columnsToRender > 1000) {\n      performanceWarningAppeared = true;\n      warn(toSingleLine`Performance tip: Handsontable rendered more than 1000 visible columns.\\x20\n        Consider limiting the number of rendered columns by specifying the table width and/or\\x20\n        turning off the \"renderAllColumns\" option.`);\n    }\n\n    // Render column nodes for row headers\n    for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n      const sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n      const width = this.table.columnUtils.getHeaderWidth(sourceColumnIndex);\n\n      this.rootNode.childNodes[visibleColumnIndex].style.width = `${width}px`;\n    }\n\n    // Render column nodes for cells\n    for (let visibleColumnIndex = 0; visibleColumnIndex < columnsToRender; visibleColumnIndex++) {\n      const sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n      const width = this.table.columnUtils.getStretchedColumnWidth(sourceColumnIndex);\n\n      this.rootNode.childNodes[visibleColumnIndex + rowHeadersCount].style.width = `${width}px`;\n    }\n\n    const firstChild = this.rootNode.firstChild;\n\n    if (firstChild) {\n      addClass(firstChild, 'rowHeader');\n    }\n  }\n}\n","import BaseRenderer from './_base';\nimport { warn } from './../../../../helpers/console';\nimport { toSingleLine } from './../../../../helpers/templateLiteralTag';\nimport { OrderView } from './../utils/orderView';\nimport {\n  addClass,\n  removeClass,\n  setAttribute\n} from '../../../../helpers/dom/element';\nimport {\n  A11Y_ROW,\n  A11Y_ROWGROUP,\n  A11Y_ROWINDEX\n} from '../../../../helpers/a11y';\n\nconst ROW_CLASSNAMES = {\n  rowEven: 'ht__row_even',\n  rowOdd: 'ht__row_odd',\n};\nlet performanceWarningAppeared = false;\n\n/**\n * Rows renderer responsible for managing (inserting, tracking, rendering) TR elements belongs to TBODY.\n *\n *   <tbody> (root node)\n *     ├ <tr>   \\\n *     ├ <tr>    \\\n *     ├ <tr>     - RowsRenderer\n *     ├ <tr>    /\n *     └ <tr>   /.\n *\n * @class {RowsRenderer}\n */\nexport default class RowsRenderer extends BaseRenderer {\n  /**\n   * Cache for OrderView classes connected to specified node.\n   *\n   * @type {WeakMap}\n   */\n  orderView;\n\n  constructor(rootNode) {\n    super('TR', rootNode);\n\n    this.orderView = new OrderView(\n      rootNode,\n      sourceRowIndex => this.nodesPool.obtain(sourceRowIndex),\n      this.nodeType,\n    );\n  }\n\n  /**\n   * Returns currently rendered node.\n   *\n   * @param {string} visualIndex Visual index of the rendered node (it always goeas from 0 to N).\n   * @returns {HTMLTableRowElement}\n   */\n  getRenderedNode(visualIndex) {\n    return this.orderView.getNode(visualIndex);\n  }\n\n  /**\n   * Renders the cells.\n   */\n  render() {\n    const { rowsToRender } = this.table;\n\n    if (!performanceWarningAppeared && rowsToRender > 1000) {\n      performanceWarningAppeared = true;\n      warn(toSingleLine`Performance tip: Handsontable rendered more than 1000 visible rows.\\x20\n        Consider limiting the number of rendered rows by specifying the table height and/or\\x20\n        turning off the \"renderAllRows\" option.`);\n    }\n\n    if (this.table.isAriaEnabled()) {\n      setAttribute(this.rootNode, [\n        A11Y_ROWGROUP()\n      ]);\n    }\n\n    this.orderView\n      .setSize(rowsToRender)\n      .setOffset(this.table.renderedRowToSource(0))\n      .start();\n\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      this.orderView.render();\n\n      const TR = this.orderView.getCurrentNode();\n      const sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n\n      if (this.table.isAriaEnabled()) {\n        setAttribute(TR, [\n          A11Y_ROW(),\n          // `aria-rowindex` is incremented by both tbody and thead rows.\n          A11Y_ROWINDEX(sourceRowIndex + (this.table.rowUtils?.dataAccessObject?.columnHeaders.length ?? 0) + 1),\n        ]);\n      }\n\n      removeClass(TR, [ROW_CLASSNAMES.rowEven, ROW_CLASSNAMES.rowOdd]);\n\n      if ((sourceRowIndex + 1) % 2 === 0) {\n        addClass(TR, ROW_CLASSNAMES.rowEven);\n\n      } else {\n        addClass(TR, ROW_CLASSNAMES.rowOdd);\n      }\n    }\n\n    this.orderView.end();\n  }\n}\n","import {\n  hasClass,\n  removeAttribute,\n  setAttribute,\n} from './../../../../helpers/dom/element';\nimport { SharedOrderView } from './../utils/orderView';\nimport BaseRenderer from './_base';\nimport {\n  A11Y_COLINDEX,\n  A11Y_GRIDCELL,\n  A11Y_TABINDEX\n} from '../../../../helpers/a11y';\n\n/**\n * Cell renderer responsible for managing (inserting, tracking, rendering) TD elements.\n *\n *   <tr> (root node)\n *     ├ <th>   --- RowHeadersRenderer\n *     ├ <td>   \\\n *     ├ <td>    \\\n *     ├ <td>     - CellsRenderer\n *     ├ <td>    /\n *     └ <td>   /.\n *\n * @class {CellsRenderer}\n */\nexport default class CellsRenderer extends BaseRenderer {\n  /**\n   * Cache for OrderView classes connected to specified node.\n   *\n   * @type {WeakMap}\n   */\n  orderViews = new WeakMap();\n  /**\n   * Row index which specifies the row position of the processed cell.\n   *\n   * @type {number}\n   */\n  sourceRowIndex = 0;\n\n  constructor() {\n    super('TD');\n  }\n\n  /**\n   * Obtains the instance of the SharedOrderView class which is responsible for rendering the nodes to the root node.\n   *\n   * @param {HTMLTableRowElement} rootNode The TR element, which is root element for cells (TD).\n   * @returns {SharedOrderView}\n   */\n  obtainOrderView(rootNode) {\n    let orderView;\n\n    if (this.orderViews.has(rootNode)) {\n      orderView = this.orderViews.get(rootNode);\n    } else {\n      orderView = new SharedOrderView(\n        rootNode,\n        sourceColumnIndex => this.nodesPool.obtain(this.sourceRowIndex, sourceColumnIndex),\n        this.nodeType,\n      );\n      this.orderViews.set(rootNode, orderView);\n    }\n\n    return orderView;\n  }\n\n  /**\n   * Renders the cells.\n   */\n  render() {\n    const { rowsToRender, columnsToRender, rows, rowHeaders } = this.table;\n\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      const sourceRowIndex = this.table.renderedRowToSource(visibleRowIndex);\n      const TR = rows.getRenderedNode(visibleRowIndex);\n\n      this.sourceRowIndex = sourceRowIndex;\n\n      const orderView = this.obtainOrderView(TR);\n      const rowHeadersView = rowHeaders.obtainOrderView(TR);\n\n      // @TODO(perf-tip): For cells other than \"visual 0\" generating diff leads/commands can be skipped. New order view\n      // should share state between next orderViews.\n      orderView\n        .prependView(rowHeadersView)\n        .setSize(columnsToRender)\n        .setOffset(this.table.renderedColumnToSource(0))\n        .start();\n\n      for (let visibleColumnIndex = 0; visibleColumnIndex < columnsToRender; visibleColumnIndex++) {\n        orderView.render();\n\n        const TD = orderView.getCurrentNode();\n        const sourceColumnIndex = this.table.renderedColumnToSource(visibleColumnIndex);\n\n        if (!hasClass(TD, 'hide')) { // Workaround for hidden columns plugin\n          TD.className = '';\n        }\n\n        TD.removeAttribute('style');\n        TD.removeAttribute('dir');\n\n        // Remove all accessibility-related attributes for the cell to start fresh.\n        removeAttribute(TD, [\n          new RegExp('aria-(.*)'),\n          new RegExp('role')\n        ]);\n\n        this.table.cellRenderer(sourceRowIndex, sourceColumnIndex, TD);\n\n        if (this.table.isAriaEnabled()) {\n          setAttribute(TD, [\n            ...(TD.hasAttribute('role') ? [] : [A11Y_GRIDCELL()]),\n            A11Y_TABINDEX(-1),\n            // `aria-colindex` is incremented by both tbody and thead rows.\n            A11Y_COLINDEX(sourceColumnIndex + (this.table.rowUtils?.dataAccessObject?.rowHeaders.length ?? 0) + 1),\n          ]);\n        }\n      }\n\n      orderView.end();\n    }\n  }\n}\n","/**\n * TableRenderer class collects all renderers and properties necessary for table creation. It's\n * responsible for adjusting and rendering each renderer.\n *\n * Below is a diagram of the renderers together with an indication of what they are responisble for.\n *   <table>\n *     <colgroup>  \\ (root node)\n *       <col>      \\\n *       <col>       \\___ ColGroupRenderer\n *       <col>       /\n *       <col>      /\n *     </colgroup> /\n *     <thead>     \\ (root node)\n *       <tr>       \\\n *         <th>      \\\n *         <th>       \\____ ColumnHeadersRenderer\n *         <th>       /\n *         <th>      /\n *       </tr>      /\n *     </thead>    /\n *     <tbody>   ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\\ (root node)\n *       <tr>   (root node)          \\\n *         <th>  --- RowHeadersRenderer\n *         <td>  \\                     \\\n *         <td>   -- CellsRenderer      \\\n *         <td>  /                       \\\n *       </tr>                            \\\n *       <tr>   (root node)                \\\n *         <th>  --- RowHeadersRenderer     \\\n *         <td>  \\                           \\___ RowsRenderer\n *         <td>   -- CellsRenderer           /\n *         <td>  /                          /\n *       </tr>                             /\n *       <tr>   (root node)               /\n *         <th>  --- RowHeadersRenderer  /\n *         <td>  \\                      /\n *         <td>   -- CellsRenderer     /\n *         <td>  /                    /\n *       </tr>                       /\n *     </tbody>  ___________________/\n *   </table>.\n *\n * @class {RowsRenderer}\n */\nexport default class TableRenderer {\n  /**\n   * Table element which will be used to render the children element.\n   *\n   * @type {HTMLTableElement}\n   */\n  rootNode;\n  /**\n   * Document owner of the root node.\n   *\n   * @type {HTMLDocument}\n   */\n  rootDocument;\n  /**\n   * Renderer class responsible for rendering row headers.\n   *\n   * @type {RowsRenderer}\n   */\n  rowHeaders = null;\n  /**\n   * Renderer class responsible for rendering column headers.\n   *\n   * @type {ColumnHeadersRenderer}\n   */\n  columnHeaders = null;\n  /**\n   * Renderer class responsible for rendering col in colgroup.\n   *\n   * @type {ColGroupRenderer}\n   */\n  colGroup = null;\n  /**\n   * Renderer class responsible for rendering rows in tbody.\n   *\n   * @type {RowsRenderer}\n   */\n  rows = null;\n  /**\n   * Renderer class responsible for rendering cells.\n   *\n   * @type {CellsRenderer}\n   */\n  cells = null;\n  /**\n   * Row filter which contains all necessary information about row index transformation.\n   *\n   * @type {RowFilter}\n   */\n  rowFilter = null;\n  /**\n   * Column filter which contains all necessary information about column index transformation.\n   *\n   * @type {ColumnFilter}\n   */\n  columnFilter = null;\n  /**\n   * Row utils class which contains all necessary information about sizes of the rows.\n   *\n   * @type {RowUtils}\n   */\n  rowUtils = null;\n  /**\n   * Column utils class which contains all necessary information about sizes of the columns.\n   *\n   * @type {ColumnUtils}\n   */\n  columnUtils = null;\n  /**\n   * Indicates how much rows should be rendered to fill whole table viewport.\n   *\n   * @type {number}\n   */\n  rowsToRender = 0;\n  /**\n   * Indicates how much columns should be rendered to fill whole table viewport.\n   *\n   * @type {number}\n   */\n  columnsToRender = 0;\n  /**\n   * An array of functions to be used as a content factory to row headers.\n   *\n   * @type {Function[]}\n   */\n  rowHeaderFunctions = [];\n  /**\n   * Count of the function used to render row headers.\n   *\n   * @type {number}\n   */\n  rowHeadersCount = 0;\n  /**\n   * An array of functions to be used as a content factory to column headers.\n   *\n   * @type {Function[]}\n   */\n  columnHeaderFunctions = [];\n  /**\n   * Count of the function used to render column headers.\n   *\n   * @type {number}\n   */\n  columnHeadersCount = 0;\n  /**\n   * Cell renderer used to render cells content.\n   *\n   * @type {Function}\n   */\n  cellRenderer;\n  /**\n   * Holds the name of the currently active overlay.\n   *\n   * @type {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'}\n   */\n  activeOverlayName;\n\n  constructor(rootNode, { cellRenderer } = {}) {\n    this.rootNode = rootNode;\n    this.rootDocument = this.rootNode.ownerDocument;\n    this.cellRenderer = cellRenderer;\n  }\n\n  /**\n   * Sets the overlay that is currently rendered. If `null` is provided, the master overlay is set.\n   *\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName The overlay name.\n   */\n  setActiveOverlayName(overlayName) {\n    this.activeOverlayName = overlayName;\n  }\n\n  /**\n   * Set row and column util classes.\n   *\n   * @param {RowUtils} rowUtils RowUtils instance which provides useful methods related to row sizes.\n   * @param {ColumnUtils} columnUtils ColumnUtils instance which provides useful methods related to row sizes.\n   */\n  setAxisUtils(rowUtils, columnUtils) {\n    this.rowUtils = rowUtils;\n    this.columnUtils = columnUtils;\n  }\n\n  /**\n   * Sets viewport size of the table.\n   *\n   * @param {number} rowsCount An amount of rows to render.\n   * @param {number} columnsCount An amount of columns to render.\n   */\n  setViewportSize(rowsCount, columnsCount) {\n    this.rowsToRender = rowsCount;\n    this.columnsToRender = columnsCount;\n  }\n\n  /**\n   * Sets row and column filter instances.\n   *\n   * @param {RowFilter} rowFilter Row filter instance which contains all necessary information about row index transformation.\n   * @param {ColumnFilter} columnFilter Column filter instance which contains all necessary information about row\n   * index transformation.\n   */\n  setFilters(rowFilter, columnFilter) {\n    this.rowFilter = rowFilter;\n    this.columnFilter = columnFilter;\n  }\n\n  /**\n   * Sets row and column header functions.\n   *\n   * @param {Function[]} rowHeaders Row header functions. Factories for creating content for row headers.\n   * @param {Function[]} columnHeaders Column header functions. Factories for creating content for column headers.\n   */\n  setHeaderContentRenderers(rowHeaders, columnHeaders) {\n    this.rowHeaderFunctions = rowHeaders;\n    this.rowHeadersCount = rowHeaders.length;\n    this.columnHeaderFunctions = columnHeaders;\n    this.columnHeadersCount = columnHeaders.length;\n  }\n\n  /**\n   * Sets table renderers.\n   *\n   * @param {renderers} renderers The renderer units.\n   * @param {RowHeadersRenderer} renderers.rowHeaders Row headers renderer.\n   * @param {ColumnHeadersRenderer} renderers.columnHeaders Column headers renderer.\n   * @param {ColGroupRenderer} renderers.colGroup Col group renderer.\n   * @param {RowsRenderer} renderers.rows Rows renderer.\n   * @param {CellsRenderer} renderers.cells Cells renderer.\n   */\n  setRenderers({ rowHeaders, columnHeaders, colGroup, rows, cells } = {}) {\n    rowHeaders.setTable(this);\n    columnHeaders.setTable(this);\n    colGroup.setTable(this);\n    rows.setTable(this);\n    cells.setTable(this);\n\n    this.rowHeaders = rowHeaders;\n    this.columnHeaders = columnHeaders;\n    this.colGroup = colGroup;\n    this.rows = rows;\n    this.cells = cells;\n  }\n\n  /**\n   * Transforms visual/rendered row index to source index.\n   *\n   * @param {number} rowIndex Rendered index.\n   * @returns {number}\n   */\n  renderedRowToSource(rowIndex) {\n    return this.rowFilter.renderedToSource(rowIndex);\n  }\n\n  /**\n   * Transforms visual/rendered column index to source index.\n   *\n   * @param {number} columnIndex Rendered index.\n   * @returns {number}\n   */\n  renderedColumnToSource(columnIndex) {\n    return this.columnFilter.renderedToSource(columnIndex);\n  }\n\n  /**\n   * Returns `true` if the accessibility-related ARIA tags should be added to the table, `false` otherwise.\n   *\n   * @returns {boolean}\n   */\n  isAriaEnabled() {\n    return this.rowUtils.wtSettings.getSetting('ariaTags');\n  }\n\n  /**\n   * Renders the table.\n   */\n  render() {\n    this.colGroup.adjust();\n    this.columnHeaders.adjust();\n    this.rows.adjust();\n    this.rowHeaders.adjust();\n\n    this.columnHeaders.render();\n    this.rows.render();\n    this.rowHeaders.render();\n    this.cells.render();\n\n    // After the cells are rendered calculate columns width (or columns stretch width) to prepare proper values\n    // for colGroup renderer (which renders COL elements).\n    this.columnUtils.calculateWidths();\n    this.colGroup.render();\n\n    const { rowsToRender, rows } = this;\n\n    // Fix for multi-line content and for supporting `rowHeights` option.\n    for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {\n      const TR = rows.getRenderedNode(visibleRowIndex);\n\n      if (TR.firstChild) {\n        const sourceRowIndex = this.renderedRowToSource(visibleRowIndex);\n        const rowHeight = this.rowUtils.getHeightByOverlayName(sourceRowIndex, this.activeOverlayName);\n\n        if (rowHeight) {\n          // Decrease height. 1 pixel will be \"replaced\" by 1px border top\n          TR.firstChild.style.height = `${rowHeight - 1}px`;\n        } else {\n          TR.firstChild.style.height = '';\n        }\n      }\n    }\n  }\n}\n","import {\n  getScrollbarWidth,\n} from './../../../../helpers/dom/element';\nimport { ColumnStretching } from './columnStretching';\n\n/**\n * Column utils class contains all necessary information about sizes of the columns.\n *\n * @class {ColumnUtils}\n */\nexport default class ColumnUtils {\n  /**\n   * @type {TableDao}\n   */\n  dataAccessObject;\n  /**\n   * @type {Settings}\n   */\n  wtSettings;\n  /**\n   * @type {Map<number, number>}\n   */\n  headerWidths = new Map();\n  /**\n   * @type {ColumnStretching}\n   */\n  stretching;\n\n  /**\n   * @param {TableDao} dataAccessObject The table Data Access Object.\n   * @param {Settings} wtSettings The walkontable settings.\n   */\n  constructor(dataAccessObject, wtSettings) {\n    this.dataAccessObject = dataAccessObject;\n    this.wtSettings = wtSettings;\n\n    this.stretching = new ColumnStretching({\n      totalColumns: () => this.wtSettings.getSetting('totalColumns'),\n      stretchMode: () => this.wtSettings.getSetting('stretchH'),\n      stretchingColumnWidthFn: (stretchedWidth, column) =>\n        this.wtSettings.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column),\n      columnWidthFn: sourceCol => this.dataAccessObject.wtTable.getColumnWidth(sourceCol),\n    });\n  }\n\n  /**\n   * Returns column width based on passed source index.\n   *\n   * @param {number} sourceIndex Column source index.\n   * @returns {number}\n   */\n  getWidth(sourceIndex) {\n    const width = this.wtSettings.getSetting('columnWidth', sourceIndex)\n      || this.wtSettings.getSetting('defaultColumnWidth');\n\n    return width;\n  }\n\n  /**\n   * Returns stretched column width based on passed source index.\n   *\n   * @param {number} sourceIndex Column source index.\n   * @returns {number}\n   */\n  getStretchedColumnWidth(sourceIndex) {\n    let width = this.getWidth(sourceIndex);\n\n    const stretchedWidth = this.stretching.getStretchedColumnWidth(sourceIndex, width);\n\n    if (stretchedWidth) {\n      width = stretchedWidth;\n    }\n\n    return width;\n  }\n\n  /**\n   * Returns column header height based on passed header level.\n   *\n   * @param {number} level Column header level.\n   * @returns {number}\n   */\n  getHeaderHeight(level) {\n    let height = this.wtSettings.getSetting('defaultRowHeight');\n    const oversizedHeight = this.dataAccessObject.wtViewport.oversizedColumnHeaders[level];\n\n    if (oversizedHeight !== undefined) {\n      height = height ? Math.max(height, oversizedHeight) : oversizedHeight;\n    }\n\n    return height;\n  }\n\n  /**\n   * Returns column header width based on passed source index.\n   *\n   * @param {number} sourceIndex Column source index.\n   * @returns {number}\n   */\n  getHeaderWidth(sourceIndex) {\n    return this.headerWidths.get(this.dataAccessObject.wtTable.columnFilter.sourceToRendered(sourceIndex));\n  }\n\n  /**\n   * Refreshes the stretching column width by recalculating the widths of the columns.\n   */\n  refreshStretching() {\n    const { wtTable, wtViewport, cloneSource } = this.dataAccessObject;\n    const mainHolder = cloneSource ? cloneSource.wtTable.holder : wtTable.holder;\n    const scrollbarCompensation = mainHolder.offsetHeight < mainHolder.scrollHeight ? getScrollbarWidth() : 0;\n\n    this.stretching.refreshStretching(wtViewport.getViewportWidth() - scrollbarCompensation);\n  }\n\n  /**\n   * Calculates column header widths that can be retrieved from the cache.\n   */\n  calculateWidths() {\n    const { wtSettings } = this;\n    let rowHeaderWidthSetting = wtSettings.getSetting('rowHeaderWidth');\n\n    this.refreshStretching();\n\n    rowHeaderWidthSetting = wtSettings.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);\n\n    if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== undefined) {\n      const rowHeadersCount = wtSettings.getSetting('rowHeaders').length;\n      const defaultColumnWidth = wtSettings.getSetting('defaultColumnWidth');\n\n      for (let visibleColumnIndex = 0; visibleColumnIndex < rowHeadersCount; visibleColumnIndex++) {\n        let width = Array.isArray(rowHeaderWidthSetting)\n          ? rowHeaderWidthSetting[visibleColumnIndex] : rowHeaderWidthSetting;\n\n        width = (width === null || width === undefined) ? defaultColumnWidth : width;\n\n        this.headerWidths.set(visibleColumnIndex, width);\n      }\n    }\n  }\n}\n","import { DEFAULT_COLUMN_WIDTH } from '../calculator';\n\n/**\n * @typedef {object} ColumnStretchingOptions\n * @property {number} totalColumns Total number of columns.\n * @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).\n * @property {'all' | 'last' | 'none'} stretchMode Stretch mode 'all', 'last' or 'none'.\n * @property {Function} stretchingColumnWidthFn Function that returns the new width of the stretched column.\n */\n/**\n * @class ColumnStretching\n */\nexport class ColumnStretching {\n  /**\n   * @type {number}\n   */\n  stretchAllRatio = 0;\n  /**\n   * @type {number}\n   */\n  stretchLastWidth = 0;\n  /**\n   * @type {number[]}\n   */\n  stretchAllColumnsWidth = [];\n  /**\n   * @type {number}\n   */\n  #totalTargetWidth = 0;\n  /**\n   * @type {boolean}\n   */\n  needVerifyLastColumnWidth = true;\n  /**\n   * The total number of columns.\n   *\n   * @type {function(): number}\n   */\n  #totalColumns = () => 0;\n  /**\n   * Function that returns the width of the stretched column at a given index (in px).\n   *\n   * @type {function(): number}\n   */\n  #stretchingColumnWidthFn = width => width;\n  /**\n   * Function that returns the width of the column at a given index (in px).\n   *\n   * @type {function(): number}\n   */\n  #columnWidthFn = width => width;\n  /**\n   * Stretch mode.\n   *\n   * @type {function(): 'all' | 'last' | 'none'}\n   */\n  #stretchMode = () => 'none';\n\n  /**\n   * @param {ColumnStretchingOptions} options Object with all options specified for column viewport calculation.\n   */\n  constructor({ totalColumns, stretchMode, stretchingColumnWidthFn, columnWidthFn }) {\n    this.#totalColumns = totalColumns;\n    this.#stretchMode = stretchMode;\n    this.#stretchingColumnWidthFn = stretchingColumnWidthFn ?? this.#stretchingColumnWidthFn;\n    this.#columnWidthFn = columnWidthFn ?? this.#columnWidthFn;\n  }\n\n  /**\n   * Recalculate columns stretching.\n   *\n   * @param {number} totalWidth The total width of the table.\n   */\n  refreshStretching(totalWidth) {\n    if (this.#stretchMode() === 'none') {\n      return;\n    }\n\n    this.stretchAllRatio = 0;\n    this.stretchAllColumnsWidth = [];\n    this.needVerifyLastColumnWidth = true;\n    this.stretchLastWidth = 0;\n    this.#totalTargetWidth = totalWidth;\n\n    let sumAll = 0;\n\n    for (let i = 0; i < this.#totalColumns(); i++) {\n      const columnWidth = this._getColumnWidth(i);\n      const permanentColumnWidth = this.#stretchingColumnWidthFn(undefined, i);\n\n      if (typeof permanentColumnWidth === 'number') {\n        totalWidth -= permanentColumnWidth;\n      } else {\n        sumAll += columnWidth;\n      }\n    }\n    const remainingSize = totalWidth - sumAll;\n\n    if (this.#stretchMode() === 'all' && remainingSize > 0) {\n      this.stretchAllRatio = totalWidth / sumAll;\n      this.stretchAllColumnsWidth = [];\n      this.needVerifyLastColumnWidth = true;\n\n    } else if (this.#stretchMode() === 'last' && totalWidth !== Infinity) {\n      const columnWidth = this._getColumnWidth(this.#totalColumns() - 1);\n      const lastColumnWidth = remainingSize + columnWidth;\n\n      this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : columnWidth;\n    }\n  }\n\n  /**\n   * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance.\n   *\n   * @param {number} column The visual column index.\n   * @param {number} baseWidth The default column width.\n   * @returns {number|null}\n   */\n  getStretchedColumnWidth(column, baseWidth) {\n    let result = null;\n\n    if (this.#stretchMode() === 'all' && this.stretchAllRatio !== 0) {\n      result = this._getStretchedAllColumnWidth(column, baseWidth);\n\n    } else if (this.#stretchMode() === 'last' && this.stretchLastWidth !== 0) {\n      result = this._getStretchedLastColumnWidth(column);\n    }\n\n    return result;\n  }\n\n  /**\n   * @param {number} column The visual column index.\n   * @param {number} baseWidth The default column width.\n   * @returns {number}\n   * @private\n   */\n  _getStretchedAllColumnWidth(column, baseWidth) {\n    let sumRatioWidth = 0;\n\n    if (!this.stretchAllColumnsWidth[column]) {\n      const stretchedWidth = Math.round(baseWidth * this.stretchAllRatio);\n      const newStretchedWidth = this.#stretchingColumnWidthFn(stretchedWidth, column);\n\n      if (newStretchedWidth === undefined) {\n        this.stretchAllColumnsWidth[column] = stretchedWidth;\n      } else {\n        this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth)\n          ? this._getColumnWidth(column) : newStretchedWidth;\n      }\n    }\n\n    if (this.stretchAllColumnsWidth.length === this.#totalColumns() && this.needVerifyLastColumnWidth) {\n      this.needVerifyLastColumnWidth = false;\n\n      for (let i = 0; i < this.stretchAllColumnsWidth.length; i++) {\n        sumRatioWidth += this.stretchAllColumnsWidth[i];\n      }\n      if (sumRatioWidth !== this.#totalTargetWidth) {\n        this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += this.#totalTargetWidth - sumRatioWidth;\n      }\n    }\n\n    return this.stretchAllColumnsWidth[column];\n  }\n\n  /**\n   * @param {number} column The visual column index.\n   * @returns {number|null}\n   * @private\n   */\n  _getStretchedLastColumnWidth(column) {\n    if (column === this.#totalColumns() - 1) {\n      return this.stretchLastWidth;\n    }\n\n    return null;\n  }\n\n  /**\n   * @param {number} column The visual column index.\n   * @returns {number}\n   * @private\n   */\n  _getColumnWidth(column) {\n    let width = this.#columnWidthFn(column);\n\n    if (isNaN(width)) {\n      width = DEFAULT_COLUMN_WIDTH;\n    }\n\n    return width;\n  }\n}\n","/**\n * Row utils class contains all necessary information about sizes of the rows.\n *\n * @class {RowUtils}\n */\nexport default class RowUtils {\n  /**\n   * @type {TableDao}\n   */\n  dataAccessObject;\n  /**\n   * @type {Settings}\n   */\n  wtSettings;\n\n  /**\n   * @param {TableDao} dataAccessObject The table Data Access Object.\n   * @param {Settings} wtSettings The walkontable settings.\n   */\n  constructor(dataAccessObject, wtSettings) {\n    this.dataAccessObject = dataAccessObject;\n    this.wtSettings = wtSettings;\n  }\n\n  /**\n   * Returns row height based on passed source index.\n   *\n   * @param {number} sourceIndex Row source index.\n   * @returns {number}\n   */\n  getHeight(sourceIndex) {\n    let height = this.wtSettings.getSetting('rowHeight', sourceIndex);\n    const oversizedHeight = this.dataAccessObject.wtViewport.oversizedRows[sourceIndex];\n\n    if (oversizedHeight !== undefined) {\n      height = height === undefined ? oversizedHeight : Math.max(height, oversizedHeight);\n    }\n\n    return height;\n  }\n\n  /**\n   * Returns row height based on passed source index for the specified overlay type.\n   *\n   * @param {number} sourceIndex Row source index.\n   * @param {'inline_start'|'top'|'top_inline_start_corner'|'bottom'|'bottom_inline_start_corner'|'master'} overlayName The overlay name.\n   * @returns {number}\n   */\n  getHeightByOverlayName(sourceIndex, overlayName) {\n    let height = this.wtSettings.getSetting('rowHeightByOverlayName', sourceIndex, overlayName);\n    const oversizedHeight = this.dataAccessObject.wtViewport.oversizedRows[sourceIndex];\n\n    if (oversizedHeight !== undefined) {\n      height = height === undefined ? oversizedHeight : Math.max(height, oversizedHeight);\n    }\n\n    return height;\n  }\n}\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'stickyRowsBottom';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the bottom rows in the vertical axis.\n *\n * @type {object}\n */\nconst stickyRowsBottom = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedRow() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n    const fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n    const index = totalRows - fixedRowsBottom;\n\n    if (totalRows === 0 || fixedRowsBottom === 0) {\n      return -1;\n    }\n\n    if (index < 0) {\n      return 0;\n    }\n\n    return index;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedRow() {\n    return this.wtSettings.getSetting('totalRows') - 1;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedRowsCount() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n\n    return Math.min(this.wtSettings.getSetting('fixedRowsBottom'), totalRows);\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleRowsCount() {\n    return this.getRenderedRowsCount();\n  },\n\n  /**\n   * Get the number of rendered column headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getColumnHeadersCount() {\n    return 0;\n  },\n};\n\ndefineGetter(stickyRowsBottom, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default stickyRowsBottom;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'stickyColumnsStart';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to columns.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the first columns in the horizontal axis.\n *\n * @type {object}\n */\nconst stickyColumnsStart = {\n  /**\n   * Get the source index of the first rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedColumn() {\n    const totalColumns = this.wtSettings.getSetting('totalColumns');\n\n    if (totalColumns === 0) {\n      return -1;\n    }\n\n    return 0;\n  },\n\n  /**\n   * Get the source index of the first column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleColumn() {\n    return this.getFirstRenderedColumn();\n  },\n\n  /**\n   * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleColumn() {\n    return this.getFirstRenderedColumn();\n  },\n\n  /**\n   * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedColumn() {\n    return this.getRenderedColumnsCount() - 1;\n  },\n\n  /**\n   * Get the source index of the last column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleColumn() {\n    return this.getLastRenderedColumn();\n  },\n\n  /**\n   * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleColumn() {\n    return this.getLastRenderedColumn();\n  },\n\n  /**\n   * Get the number of rendered columns.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedColumnsCount() {\n    const totalColumns = this.wtSettings.getSetting('totalColumns');\n\n    return Math.min(this.wtSettings.getSetting('fixedColumnsStart'), totalColumns);\n  },\n\n  /**\n   * Get the number of fully visible columns in the viewport.\n   * Assumes that all rendered columns are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleColumnsCount() {\n    return this.getRenderedColumnsCount();\n  },\n\n  /**\n   * Get the number of rendered row headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRowHeadersCount() {\n    return this.dataAccessObject.rowHeaders.length;\n  },\n};\n\ndefineGetter(stickyColumnsStart, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default stickyColumnsStart;\n","import {\n  getScrollableElement,\n  getTrimmingContainer,\n  getScrollbarWidth,\n  setAttribute,\n} from '../../../../helpers/dom/element';\nimport { defineGetter } from '../../../../helpers/object';\nimport { warn } from '../../../../helpers/console';\nimport {\n  CLONE_TYPES,\n  CLONE_CLASS_NAMES,\n  CLONE_TOP,\n  CLONE_INLINE_START,\n} from './constants';\nimport Clone from '../core/clone';\nimport { A11Y_PRESENTATION } from '../../../../helpers/a11y';\n\n/**\n * Creates an overlay over the original Walkontable instance. The overlay renders the clone of the original Walkontable\n * and (optionally) implements behavior needed for native horizontal and vertical scrolling.\n *\n * @abstract\n * @class Overlay\n * @property {Walkontable} wot The Walkontable instance.\n */\nexport class Overlay {\n  /**\n   *  The Walkontable settings.\n   *\n   * @private\n   * @type {Settings}\n   */\n  wtSettings = null;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {CLONE_TYPES_ENUM} type The overlay type name (clone name).\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, type, wtSettings, domBindings) {\n    defineGetter(this, 'wot', wotInstance, {\n      writable: false,\n    });\n    this.domBindings = domBindings;\n    this.facadeGetter = facadeGetter;\n    this.wtSettings = wtSettings;\n\n    const {\n      TABLE,\n      hider,\n      spreader,\n      holder,\n      wtRootElement,\n    } = this.wot.wtTable; // todo ioc\n\n    // legacy support, deprecated in the future\n    this.instance = this.wot;\n\n    this.type = type;\n    this.mainTableScrollableElement = null;\n    this.TABLE = TABLE;\n    this.hider = hider;\n    this.spreader = spreader;\n    this.holder = holder;\n    this.wtRootElement = wtRootElement;\n    this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n    this.needFullRender = this.shouldBeRendered();\n    this.clone = this.makeClone();\n  }\n\n  /**\n   * Checks if the overlay rendering state has changed.\n   *\n   * @returns {boolean}\n   */\n  hasRenderingStateChanged() {\n    return this.needFullRender !== this.shouldBeRendered();\n  }\n\n  /**\n   * Updates internal state with an information about the need of full rendering of the overlay in the next draw cycles.\n   *\n   * If the state is changed to render the overlay, the `needFullRender` property is set to `true` which means that\n   * the overlay will be fully rendered in the current draw cycle. If the state is changed to not render the overlay,\n   * the `needFullRender` property is set to `false` which means that the overlay will be fully rendered in the\n   * current draw cycle but it will not be rendered in the next draw cycles.\n   *\n   * @param {'before' | 'after'} drawPhase The phase of the rendering process.\n   */\n  updateStateOfRendering(drawPhase) {\n    if (drawPhase === 'before' && this.shouldBeRendered()) {\n      this.needFullRender = true;\n\n    } else if (drawPhase === 'after' && !this.shouldBeRendered()) {\n      this.needFullRender = false;\n    }\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return true;\n  }\n\n  /**\n   * Update the trimming container.\n   */\n  updateTrimmingContainer() {\n    this.trimmingContainer = getTrimmingContainer(this.hider.parentNode.parentNode);\n  }\n\n  /**\n   * Update the main scrollable element.\n   */\n  updateMainScrollableElement() {\n    const { wtTable } = this.wot;\n    const { rootWindow } = this.domBindings;\n\n    if (rootWindow.getComputedStyle(wtTable.wtRootElement.parentNode).getPropertyValue('overflow') === 'hidden') {\n      this.mainTableScrollableElement = this.wot.wtTable.holder;\n    } else {\n      this.mainTableScrollableElement = getScrollableElement(wtTable.TABLE);\n    }\n  }\n\n  /**\n   * Calculates coordinates of the provided element, relative to the root Handsontable element.\n   * NOTE: The element needs to be a child of the overlay in order for the method to work correctly.\n   *\n   * @param {HTMLElement} element The cell element to calculate the position for.\n   * @param {number} rowIndex Visual row index.\n   * @param {number} columnIndex Visual column index.\n   * @returns {{top: number, start: number}|undefined}\n   */\n  getRelativeCellPosition(element, rowIndex, columnIndex) {\n    if (this.clone.wtTable.holder.contains(element) === false) {\n      warn(`The provided element is not a child of the ${this.type} overlay`);\n\n      return;\n    }\n    const windowScroll = this.mainTableScrollableElement === this.domBindings.rootWindow;\n    const fixedColumnStart = columnIndex < this.wtSettings.getSetting('fixedColumnsStart');\n    const fixedRowTop = rowIndex < this.wtSettings.getSetting('fixedRowsTop');\n    const fixedRowBottom =\n      rowIndex >= this.wtSettings.getSetting('totalRows') - this.wtSettings.getSetting('fixedRowsBottom');\n    const spreader = this.clone.wtTable.spreader;\n\n    const spreaderOffset = {\n      start: this.getRelativeStartPosition(spreader),\n      top: spreader.offsetTop\n    };\n    const elementOffset = {\n      start: this.getRelativeStartPosition(element),\n      top: element.offsetTop\n    };\n    let offsetObject = null;\n\n    if (windowScroll) {\n      offsetObject = this.getRelativeCellPositionWithinWindow(\n        fixedRowTop, fixedColumnStart, elementOffset, spreaderOffset\n      );\n\n    } else {\n      offsetObject = this.getRelativeCellPositionWithinHolder(\n        fixedRowTop, fixedRowBottom, fixedColumnStart, elementOffset, spreaderOffset\n      );\n    }\n\n    return offsetObject;\n  }\n\n  /**\n   * Get inline start value depending of direction.\n   *\n   * @param {HTMLElement} el Element.\n   * @returns {number}\n   */\n  getRelativeStartPosition(el) {\n    return this.isRtl()\n      ? el.offsetParent.offsetWidth - el.offsetLeft - el.offsetWidth\n      : el.offsetLeft;\n  }\n\n  /**\n   * Calculates coordinates of the provided element, relative to the root Handsontable element within a table with window\n   * as a scrollable element.\n   *\n   * @private\n   * @param {boolean} onFixedRowTop `true` if the coordinates point to a place within the top fixed rows.\n   * @param {boolean} onFixedColumn `true` if the coordinates point to a place within the fixed columns.\n   * @param {number} elementOffset Offset position of the cell element.\n   * @param {number} spreaderOffset Offset position of the spreader element.\n   * @returns {{top: number, left: number}}\n   */\n  getRelativeCellPositionWithinWindow(onFixedRowTop, onFixedColumn, elementOffset, spreaderOffset) {\n    const absoluteRootElementPosition = this.wot.wtTable.wtRootElement.getBoundingClientRect(); // todo refactoring: DEMETER\n    let horizontalOffset = 0;\n    let verticalOffset = 0;\n\n    if (!onFixedColumn) {\n      horizontalOffset = spreaderOffset.start;\n\n    } else {\n      let absoluteRootElementStartPosition = absoluteRootElementPosition.left;\n\n      if (this.isRtl()) {\n        absoluteRootElementStartPosition = this.domBindings.rootWindow.innerWidth -\n          (absoluteRootElementPosition.left + absoluteRootElementPosition.width + getScrollbarWidth());\n      }\n\n      horizontalOffset = absoluteRootElementStartPosition <= 0 ? (-1) * absoluteRootElementStartPosition : 0;\n    }\n\n    if (onFixedRowTop) {\n      const absoluteOverlayPosition = this.clone.wtTable.TABLE.getBoundingClientRect();\n\n      verticalOffset = absoluteOverlayPosition.top - absoluteRootElementPosition.top;\n\n    } else {\n      verticalOffset = spreaderOffset.top;\n    }\n\n    return {\n      start: elementOffset.start + horizontalOffset,\n      top: elementOffset.top + verticalOffset\n    };\n  }\n\n  /**\n   * Calculates coordinates of the provided element, relative to the root Handsontable element within a table with window\n   * as a scrollable element.\n   *\n   * @private\n   * @param {boolean} onFixedRowTop `true` if the coordinates point to a place within the top fixed rows.\n   * @param {boolean} onFixedRowBottom `true` if the coordinates point to a place within the bottom fixed rows.\n   * @param {boolean} onFixedColumn `true` if the coordinates point to a place within the fixed columns.\n   * @param {number} elementOffset Offset position of the cell element.\n   * @param {number} spreaderOffset Offset position of the spreader element.\n   * @returns {{top: number, left: number}}\n   */\n  getRelativeCellPositionWithinHolder(onFixedRowTop, onFixedRowBottom, onFixedColumn, elementOffset, spreaderOffset) {\n    const tableScrollPosition = {\n      horizontal: this.wot.wtOverlays.inlineStartOverlay.getScrollPosition(),\n      vertical: this.wot.wtOverlays.topOverlay.getScrollPosition()\n    };\n    let horizontalOffset = 0;\n    let verticalOffset = 0;\n\n    if (!onFixedColumn) {\n      horizontalOffset = tableScrollPosition.horizontal - spreaderOffset.start;\n    }\n\n    if (onFixedRowBottom) {\n      const absoluteRootElementPosition = this.wot.wtTable.wtRootElement.getBoundingClientRect();// todo refactoring: DEMETER\n      const absoluteOverlayPosition = this.clone.wtTable.TABLE.getBoundingClientRect();// todo refactoring: DEMETER\n\n      verticalOffset = (absoluteOverlayPosition.top * (-1)) + absoluteRootElementPosition.top;\n\n    } else if (!onFixedRowTop) {\n      verticalOffset = tableScrollPosition.vertical - spreaderOffset.top;\n    }\n\n    return {\n      start: elementOffset.start - horizontalOffset,\n      top: elementOffset.top - verticalOffset,\n    };\n  }\n\n  /**\n   * Make a clone of table for overlay.\n   *\n   * @returns {Clone}\n   */\n  makeClone() {\n    if (CLONE_TYPES.indexOf(this.type) === -1) {\n      throw new Error(`Clone type \"${this.type}\" is not supported.`);\n    }\n    const {\n      wtTable,\n      wtSettings\n    } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const clone = rootDocument.createElement('div');\n    const clonedTable = rootDocument.createElement('table');\n    const tableParent = wtTable.wtRootElement.parentNode;\n\n    clone.className = `${CLONE_CLASS_NAMES.get(this.type)} handsontable`;\n    clone.setAttribute('dir', this.isRtl() ? 'rtl' : 'ltr');\n    clone.style.position = 'absolute';\n    clone.style.top = 0;\n    clone.style.overflow = 'visible';\n\n    if (this.isRtl()) {\n      clone.style.right = 0;\n    } else {\n      clone.style.left = 0;\n    }\n\n    if (wtSettings.getSetting('ariaTags')) {\n      setAttribute(clone, [\n        A11Y_PRESENTATION()\n      ]);\n    }\n\n    clonedTable.className = wtTable.TABLE.className;\n\n    // Clone the main table's `role` attribute to the cloned table.\n    const mainTableRole = wtTable.TABLE.getAttribute('role');\n\n    if (mainTableRole) {\n      clonedTable.setAttribute('role', wtTable.TABLE.getAttribute('role'));\n    }\n\n    clone.appendChild(clonedTable);\n\n    tableParent.appendChild(clone);\n\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (preventOverflow === true ||\n      preventOverflow === 'horizontal' && this.type === CLONE_TOP ||\n      preventOverflow === 'vertical' && this.type === CLONE_INLINE_START) {\n      this.mainTableScrollableElement = rootWindow;\n\n    } else if (rootWindow.getComputedStyle(tableParent).getPropertyValue('overflow') === 'hidden') {\n      this.mainTableScrollableElement = wtTable.holder;\n    } else {\n      this.mainTableScrollableElement = getScrollableElement(wtTable.TABLE);\n    }\n\n    // Create a new instance of the Walkontable class\n    return new Clone(clonedTable, this.wtSettings, { // todo ioc factory\n      source: this.wot,\n      overlay: this,\n      viewport: this.wot.wtViewport, // todo ioc , or factor func if used only here\n      event: this.wot.wtEvent, // todo ioc , or factory func if used only here\n      selectionManager: this.wot.selectionManager, // todo ioc , or factory func if used only here\n    });\n  }\n\n  /**\n   * Refresh/Redraw overlay.\n   *\n   * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway.\n   */\n  refresh(fastDraw = false) {\n    if (this.needFullRender) {\n      this.clone.draw(fastDraw);\n    }\n  }\n\n  /**\n   * Reset overlay styles to initial values.\n   */\n  reset() {\n    const holder = this.clone.wtTable.holder; // todo refactoring: DEMETER\n    const hider = this.clone.wtTable.hider; // todo refactoring: DEMETER\n    const holderStyle = holder.style;\n    const hiderStyle = hider.style;\n    const rootStyle = holder.parentNode.style;\n\n    [holderStyle, hiderStyle, rootStyle].forEach((style) => {\n      style.width = '';\n      style.height = '';\n    });\n  }\n\n  /**\n   * Determine if Walkontable is running in RTL mode.\n   *\n   * @returns {boolean}\n   */\n  isRtl() {\n    return this.wtSettings.getSetting('rtlMode');\n  }\n\n  /**\n   * Destroy overlay instance.\n   */\n  destroy() {\n    this.clone.eventManager.destroy(); // todo check if it is good place for that operation\n  }\n}\n","/**\n * @typedef {'top'|'bottom'|'inline_start'|'top_inline_start_corner'|'bottom_inline_start_corner'} CLONE_TYPES_ENUM\n */\nexport const CLONE_TOP = 'top';\nexport const CLONE_BOTTOM = 'bottom';\nexport const CLONE_INLINE_START = 'inline_start';\nexport const CLONE_TOP_INLINE_START_CORNER = 'top_inline_start_corner';\nexport const CLONE_BOTTOM_INLINE_START_CORNER = 'bottom_inline_start_corner';\nexport const CLONE_TYPES = [\n  CLONE_TOP,\n  CLONE_BOTTOM,\n  CLONE_INLINE_START,\n  CLONE_TOP_INLINE_START_CORNER,\n  CLONE_BOTTOM_INLINE_START_CORNER,\n];\n\nexport const CLONE_CLASS_NAMES = new Map([\n  [CLONE_TOP, `ht_clone_${CLONE_TOP}`],\n  [CLONE_BOTTOM, `ht_clone_${CLONE_BOTTOM}`],\n  [CLONE_INLINE_START, `ht_clone_${CLONE_INLINE_START} ht_clone_left`],\n  [CLONE_TOP_INLINE_START_CORNER, `ht_clone_${CLONE_TOP_INLINE_START_CORNER} ht_clone_top_left_corner`],\n  [CLONE_BOTTOM_INLINE_START_CORNER, `ht_clone_${CLONE_BOTTOM_INLINE_START_CORNER} ht_clone_bottom_left_corner`],\n]);\n","import Event from '../event';\nimport CoreAbstract from './_base';\n\n/**\n * @class Walkontable\n */\nexport default class Clone extends CoreAbstract {\n  /**\n   * @type {Walkontable}\n   */\n  cloneSource;\n  /**\n   * @type {Overlay}\n   */\n  cloneOverlay;\n\n  /**\n   * @param {HTMLTableElement} table Main table.\n   * @param {SettingsPure|Settings} settings The Walkontable settings.\n   * @param {WalkontableCloneOptions} clone Clone data.\n   */\n  constructor(table, settings, clone) {\n    super(table, settings);\n\n    const facadeGetter = this.wtSettings.getSetting('facade', this);\n\n    this.cloneSource = clone.source;\n    this.cloneOverlay = clone.overlay;\n    this.wtTable = this.cloneOverlay.createTable(this.getTableDao(), facadeGetter, this.domBindings, this.wtSettings);\n    this.wtViewport = clone.viewport;\n    this.selectionManager = clone.selectionManager;\n    this.wtEvent = new Event(\n      facadeGetter, this.domBindings, this.wtSettings, this.eventManager, this.wtTable,\n      this.selectionManager, clone.event\n    );\n\n    this.findOriginalHeaders();\n  }\n}\n","import {\n  fastInnerText,\n} from '../../../../helpers/dom/element';\nimport { randomString } from '../../../../helpers/string';\nimport EventManager from '../../../../eventManager';\nimport Scroll from '../scroll';\nimport CellCoords from '../cell/coords';\nimport CellRange from '../cell/range';\n\n/**\n * @abstract\n * @class Walkontable\n */\nexport default class CoreAbstract {\n  wtTable;\n  wtScroll;\n  wtViewport;\n  wtOverlays;\n  selectionManager;\n  wtEvent;\n  /**\n   * The walkontable instance id.\n   *\n   * @public\n   * @type {Readonly<string>}\n   */\n  guid = `wt_${randomString()}`;\n  drawInterrupted = false;\n  drawn = false;\n\n  /**\n   * The DOM bindings.\n   *\n   * @public\n   * @type {DomBindings}\n   */\n  domBindings;\n\n  /**\n   * Settings.\n   *\n   * @public\n   * @type {Settings}\n   */\n  wtSettings;\n\n  get eventManager() {\n    return new EventManager(this);\n  }\n\n  /**\n   * @param {HTMLTableElement} table Main table.\n   * @param {Settings} settings The Walkontable settings.\n   */\n  constructor(table, settings) {\n    this.domBindings = {\n      rootTable: table,\n      rootDocument: table.ownerDocument,\n      rootWindow: table.ownerDocument.defaultView,\n    };\n\n    this.wtSettings = settings;\n    this.wtScroll = new Scroll(this.createScrollDao());\n  }\n\n  findOriginalHeaders() {\n    const originalHeaders = [];\n\n    // find original headers\n    if (this.wtTable.THEAD.childNodes.length && this.wtTable.THEAD.childNodes[0].childNodes.length) {\n      for (let c = 0, clen = this.wtTable.THEAD.childNodes[0].childNodes.length; c < clen; c++) {\n        originalHeaders.push(this.wtTable.THEAD.childNodes[0].childNodes[c].innerHTML);\n      }\n      if (!this.wtSettings.getSetting('columnHeaders').length) {\n        this.wtSettings.update('columnHeaders', [\n          function(column, TH) {\n            fastInnerText(TH, originalHeaders[column]);\n          }\n        ]);\n      }\n    }\n  }\n\n  /**\n   * Creates and returns the CellCoords object.\n   *\n   * @param {*} row The row index.\n   * @param {*} column The column index.\n   * @returns {CellCoords}\n   */\n  createCellCoords(row, column) {\n    return new CellCoords(row, column, this.wtSettings.getSetting('rtlMode'));\n  }\n\n  /**\n   * Creates and returns the CellRange object.\n   *\n   * @param {CellCoords} highlight The highlight coordinates.\n   * @param {CellCoords} from The from coordinates.\n   * @param {CellCoords} to The to coordinates.\n   * @returns {CellRange}\n   */\n  createCellRange(highlight, from, to) {\n    return new CellRange(highlight, from, to, this.wtSettings.getSetting('rtlMode'));\n  }\n\n  /**\n   * Force rerender of Walkontable.\n   *\n   * @param {boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway.\n   * @returns {Walkontable}\n   */\n  draw(fastDraw = false) {\n    this.drawInterrupted = false;\n\n    if (!this.wtTable.isVisible()) {\n      // draw interrupted because TABLE is not visible\n      this.drawInterrupted = true;\n    } else {\n      this.wtTable.draw(fastDraw);\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the TD at coords. If topmost is set to true, returns TD from the topmost overlay layer,\n   * if not set or set to false, returns TD from the master table.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @param {boolean} [topmost=false] If set to `true`, it returns the TD element from the topmost overlay. For example,\n   *                                  if the wanted cell is in the range of fixed rows, it will return a TD element\n   *                                  from the top overlay.\n   * @returns {HTMLElement}\n   */\n  getCell(coords, topmost = false) {\n    if (!topmost) {\n      return this.wtTable.getCell(coords);\n    }\n\n    const totalRows = this.wtSettings.getSetting('totalRows');\n    const fixedRowsTop = this.wtSettings.getSetting('fixedRowsTop');\n    const fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n    const fixedColumnsStart = this.wtSettings.getSetting('fixedColumnsStart');\n\n    if (coords.row < fixedRowsTop && coords.col < fixedColumnsStart) {\n      return this.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.getCell(coords);\n\n    } else if (coords.row < fixedRowsTop) {\n      return this.wtOverlays.topOverlay.clone.wtTable.getCell(coords);\n\n    } else if (coords.col < fixedColumnsStart && coords.row >= totalRows - fixedRowsBottom) {\n      if (this.wtOverlays.bottomInlineStartCornerOverlay && this.wtOverlays.bottomInlineStartCornerOverlay.clone) {\n        return this.wtOverlays.bottomInlineStartCornerOverlay.clone.wtTable.getCell(coords);\n      }\n\n    } else if (coords.col < fixedColumnsStart) {\n      return this.wtOverlays.inlineStartOverlay.clone.wtTable.getCell(coords);\n\n    } else if (coords.row < totalRows && coords.row >= totalRows - fixedRowsBottom) {\n      if (this.wtOverlays.bottomOverlay && this.wtOverlays.bottomOverlay.clone) {\n        return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(coords);\n      }\n\n    }\n\n    return this.wtTable.getCell(coords);\n  }\n\n  /**\n   * Scrolls the viewport to a cell (rerenders if needed).\n   *\n   * @param {CellCoords} coords The cell coordinates to scroll to.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    if (coords.col < 0 || coords.row < 0) {\n      return false;\n    }\n\n    return this.wtScroll.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n  }\n\n  /**\n   * Scrolls the viewport to a column (rerenders if needed).\n   *\n   * @param {number} column Visual column index.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    if (column < 0) {\n      return false;\n    }\n\n    return this.wtScroll.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n  }\n\n  /**\n   * Scrolls the viewport to a row (rerenders if needed).\n   *\n   * @param {number} row Visual row index.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @returns {boolean}\n   */\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    if (row < 0) {\n      return false;\n    }\n\n    return this.wtScroll.scrollViewportVertically(row, snapToTop, snapToBottom);\n  }\n\n  /**\n   * @returns {Array}\n   */\n  getViewport() {\n    return [\n      this.wtTable.getFirstVisibleRow(),\n      this.wtTable.getFirstVisibleColumn(),\n      this.wtTable.getLastVisibleRow(),\n      this.wtTable.getLastVisibleColumn()\n    ];\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.wtOverlays.destroy();\n    this.wtEvent.destroy();\n  }\n\n  /**\n   * Create data access object for scroll.\n   *\n   * @protected\n   * @returns {ScrollDao}\n   */\n  createScrollDao() {\n    const wot = this;\n\n    return {\n      get drawn() {\n        return wot.drawn; // TODO refactoring: consider about injecting `isDrawn` function : ()=>return wot.drawn. (it'll enables remove dao layer)\n      },\n      get topOverlay() {\n        return wot.wtOverlays.topOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get inlineStartOverlay() {\n        return wot.wtOverlays.inlineStartOverlay; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtTable() {\n        return wot.wtTable; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtViewport() {\n        return wot.wtViewport; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtSettings() {\n        return wot.wtSettings;\n      },\n      get rootWindow() {\n        return wot.domBindings.rootWindow; // TODO refactoring: move outside dao\n      },\n      // TODO refactoring, consider about using injecting wtSettings into scroll (it'll enables remove dao layer)\n      get totalRows() {\n        return wot.wtSettings.getSetting('totalRows');\n      },\n      get totalColumns() {\n        return wot.wtSettings.getSetting('totalColumns');\n      },\n      get fixedRowsTop() {\n        return wot.wtSettings.getSetting('fixedRowsTop');\n      },\n      get fixedRowsBottom() {\n        return wot.wtSettings.getSetting('fixedRowsBottom');\n      },\n      get fixedColumnsStart() {\n        return wot.wtSettings.getSetting('fixedColumnsStart');\n      },\n    };\n  }\n  // TODO refactoring: it will be much better to not use DAO objects. They are needed for now to provide\n  // dynamically access to related objects\n  /**\n   * Create data access object for wtTable.\n   *\n   * @protected\n   * @returns {TableDao}\n   */\n  getTableDao() {\n    const wot = this;\n\n    return {\n      get wot() {\n        return wot;\n      },\n      get parentTableOffset() {\n        return wot.cloneSource.wtTable.tableOffset; // TODO rethink: cloneSource exists only in Clone type.\n      },\n      get cloneSource() {\n        return wot.cloneSource; // TODO rethink: cloneSource exists only in Clone type.\n      },\n      get workspaceWidth() {\n        return wot.wtViewport.getWorkspaceWidth();\n      },\n      get wtViewport() {\n        return wot.wtViewport; // TODO refactoring: move outside dao, use IOC\n      },\n      get wtOverlays() {\n        return wot.wtOverlays; // TODO refactoring: move outside dao, use IOC\n      },\n      get selectionManager() {\n        return wot.selectionManager; // TODO refactoring: move outside dao, use IOC\n      },\n      get drawn() {\n        return wot.drawn;\n      },\n      set drawn(v) { // TODO rethink: this breaks assumes of data access object, however it is required until invent better way to handle WOT state.\n        wot.drawn = v;\n      },\n      get wtTable() {\n        return wot.wtTable; // TODO refactoring: it provides itself\n      },\n      get startColumnRendered() {\n        return wot.wtViewport.columnsRenderCalculator.startColumn;\n      },\n      get startColumnVisible() {\n        return wot.wtViewport.columnsVisibleCalculator.startColumn;\n      },\n      get startColumnPartiallyVisible() {\n        return wot.wtViewport.columnsPartiallyVisibleCalculator.startColumn;\n      },\n      get endColumnRendered() {\n        return wot.wtViewport.columnsRenderCalculator.endColumn;\n      },\n      get endColumnVisible() {\n        return wot.wtViewport.columnsVisibleCalculator.endColumn;\n      },\n      get endColumnPartiallyVisible() {\n        return wot.wtViewport.columnsPartiallyVisibleCalculator.endColumn;\n      },\n      get countColumnsRendered() {\n        return wot.wtViewport.columnsRenderCalculator.count;\n      },\n      get countColumnsVisible() {\n        return wot.wtViewport.columnsVisibleCalculator.count;\n      },\n      get startRowRendered() {\n        return wot.wtViewport.rowsRenderCalculator.startRow;\n      },\n      get startRowVisible() {\n        return wot.wtViewport.rowsVisibleCalculator.startRow;\n      },\n      get startRowPartiallyVisible() {\n        return wot.wtViewport.rowsPartiallyVisibleCalculator.startRow;\n      },\n      get endRowRendered() {\n        return wot.wtViewport.rowsRenderCalculator.endRow;\n      },\n      get endRowVisible() {\n        return wot.wtViewport.rowsVisibleCalculator.endRow;\n      },\n      get endRowPartiallyVisible() {\n        return wot.wtViewport.rowsPartiallyVisibleCalculator.endRow;\n      },\n      get countRowsRendered() {\n        return wot.wtViewport.rowsRenderCalculator.count;\n      },\n      get countRowsVisible() {\n        return wot.wtViewport.rowsVisibleCalculator.count;\n      },\n      get columnHeaders() {\n        return wot.wtSettings.getSetting('columnHeaders');\n      },\n      get rowHeaders() {\n        return wot.wtSettings.getSetting('rowHeaders');\n      },\n    };\n  }\n}\n","import {\n  innerHeight,\n  innerWidth,\n  getScrollLeft,\n  getScrollTop,\n  offset,\n} from '../../../helpers/dom/element';\n\n/**\n * @class Scroll\n */\nclass Scroll {\n  /**\n   * The data access object.\n   *\n   * @protected\n   * @type {ScrollDao}\n   */\n  dataAccessObject;\n\n  /**\n   * @param {ScrollDao} dataAccessObject Tha data access object.\n   */\n  constructor(dataAccessObject) {\n    this.dataAccessObject = dataAccessObject;\n  }\n\n  /**\n   * Scrolls viewport to a cell.\n   *\n   * @param {CellCoords} coords The cell coordinates.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n    const scrolledHorizontally = this.scrollViewportHorizontally(coords.col, snapToRight, snapToLeft);\n    const scrolledVertically = this.scrollViewportVertically(coords.row, snapToTop, snapToBottom);\n\n    return scrolledHorizontally || scrolledVertically;\n  }\n\n  /**\n   * Scrolls viewport to a column.\n   *\n   * @param {number} column Visual column index.\n   * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.\n   * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.\n   * @returns {boolean}\n   */\n  scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n    const {\n      drawn,\n      totalColumns\n    } = this.dataAccessObject;\n\n    // do not scroll the viewport when the column points to a range outside of the dataset\n    if (!drawn || !Number.isInteger(column) || column < 0 || column > totalColumns) {\n      return false;\n    }\n\n    const autoSnapping = snapToRight === undefined && snapToLeft === undefined;\n    const {\n      fixedColumnsStart,\n      inlineStartOverlay,\n    } = this.dataAccessObject;\n\n    // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport\n    // when the columns points to the overlays\n    if (autoSnapping && column < fixedColumnsStart) {\n      return false;\n    }\n\n    column = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollHorizontally', column);\n\n    if (!Number.isInteger(column) || column < 0 || column > totalColumns) {\n      return false;\n    }\n\n    const firstColumn = this.getFirstVisibleColumn();\n    const lastColumn = this.getLastVisibleColumn();\n    let result = false;\n\n    if (autoSnapping && (column < firstColumn || column > lastColumn) || !autoSnapping) {\n      // if there is at least one fully visible column determine the snapping direction based on\n      // that columns or by snapToRight/snapToLeft flags, if provided.\n      result = inlineStartOverlay\n        .scrollTo(column, autoSnapping ? column >= this.getLastPartiallyVisibleColumn() : snapToRight);\n    }\n\n    return result;\n  }\n\n  /**\n   * Scrolls viewport to a row.\n   *\n   * @param {number} row Visual row index.\n   * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.\n   * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @returns {boolean}\n   */\n  scrollViewportVertically(row, snapToTop, snapToBottom) {\n    const {\n      drawn,\n      totalRows\n    } = this.dataAccessObject;\n\n    // do not scroll the viewport when the row points to a range outside of the dataset\n    if (!drawn || !Number.isInteger(row) || row < 0 || row > totalRows) {\n      return false;\n    }\n\n    const autoSnapping = snapToTop === undefined && snapToBottom === undefined;\n    const {\n      fixedRowsBottom,\n      fixedRowsTop,\n      topOverlay,\n    } = this.dataAccessObject;\n\n    // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport\n    // when the rows points to the overlays\n    if (autoSnapping && (row < fixedRowsTop || row > totalRows - fixedRowsBottom - 1)) {\n      return false;\n    }\n\n    row = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollVertically', row);\n\n    if (!Number.isInteger(row) || row < 0 || row > totalRows) {\n      return false;\n    }\n\n    const firstRow = this.getFirstVisibleRow();\n    const lastRow = this.getLastVisibleRow();\n    let result = false;\n\n    if (autoSnapping && (row < firstRow || row > lastRow) || !autoSnapping) {\n      // if there is at least one fully visible row determine the snapping direction based on\n      // that rows or by snapToTop/snapToBottom flags, if provided.\n      result = topOverlay.scrollTo(row, autoSnapping ? row >= this.getLastPartiallyVisibleRow() : snapToBottom);\n    }\n\n    return result;\n  }\n\n  /**\n   * Get first visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleRow() {\n    return this.dataAccessObject.wtTable.getFirstVisibleRow();\n  }\n\n  /**\n   * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastVisibleRow() {\n    return this.#getLastRowIndex(this.dataAccessObject.wtTable.getLastVisibleRow());\n  }\n\n  /**\n   * Get first partially visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.dataAccessObject.wtTable.getFirstPartiallyVisibleRow();\n  }\n\n  /**\n   * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleRow() {\n    return this.#getLastRowIndex(this.dataAccessObject.wtTable.getLastPartiallyVisibleRow());\n  }\n\n  /**\n   * Get first visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstVisibleColumn() {\n    return this.dataAccessObject.wtTable.getFirstVisibleColumn();\n  }\n\n  /**\n   * Get last visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastVisibleColumn() {\n    return this.#getLastColumnIndex(this.dataAccessObject.wtTable.getLastVisibleColumn());\n  }\n\n  /**\n   * Get first partially visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getFirstPartiallyVisibleColumn() {\n    return this.dataAccessObject.wtTable.getFirstPartiallyVisibleColumn();\n  }\n\n  /**\n   * Get last partially visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @returns {number}\n   */\n  getLastPartiallyVisibleColumn() {\n    return this.#getLastColumnIndex(this.dataAccessObject.wtTable.getLastPartiallyVisibleColumn());\n  }\n\n  /**\n   * Get last visible column based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @param {number} lastColumnIndex The last visible column index.\n   * @returns {number}\n   */\n  #getLastColumnIndex(lastColumnIndex) {\n    const {\n      wtSettings,\n      inlineStartOverlay,\n      wtTable,\n      wtViewport,\n      totalColumns,\n      rootWindow,\n    } = this.dataAccessObject;\n\n    if (inlineStartOverlay.mainTableScrollableElement === rootWindow) {\n      const isRtl = wtSettings.getSetting('rtlMode');\n      let inlineStartRootElementOffset = null;\n\n      if (isRtl) {\n        const tableRect = wtTable.TABLE.getBoundingClientRect();\n        const rootDocument = this.dataAccessObject.rootWindow.document;\n        const docOffsetWidth = rootDocument.documentElement.offsetWidth;\n\n        inlineStartRootElementOffset = Math.abs(tableRect.right - docOffsetWidth);\n\n      } else {\n        const rootElementOffset = offset(wtTable.wtRootElement);\n\n        inlineStartRootElementOffset = rootElementOffset.left;\n      }\n\n      const windowScrollLeft = Math.abs(getScrollLeft(rootWindow, rootWindow));\n\n      // Only calculate lastColumnIndex when table didn't filled (from right) whole viewport space\n      if (inlineStartRootElementOffset > windowScrollLeft) {\n        const windowWidth = innerWidth(rootWindow);\n        let columnsWidth = wtViewport.getRowHeaderWidth();\n\n        for (let column = 1; column <= totalColumns; column++) {\n          columnsWidth += inlineStartOverlay.sumCellSizes(column - 1, column);\n\n          if (inlineStartRootElementOffset + columnsWidth - windowScrollLeft >= windowWidth) {\n            // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements)\n            lastColumnIndex = column - 2;\n            break;\n          }\n        }\n      }\n    }\n\n    return lastColumnIndex;\n  }\n\n  /**\n   * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n   *\n   * @param {number} lastRowIndex The last visible row index.\n   * @returns {number}\n   */\n  #getLastRowIndex(lastRowIndex) {\n    const {\n      topOverlay,\n      wtTable,\n      wtViewport,\n      totalRows,\n      rootWindow,\n    } = this.dataAccessObject;\n\n    if (topOverlay.mainTableScrollableElement === rootWindow) {\n      const rootElementOffset = offset(wtTable.wtRootElement);\n      const windowScrollTop = getScrollTop(rootWindow, rootWindow);\n\n      // Only calculate lastRowIndex when table didn't filled (from bottom) whole viewport space\n      if (rootElementOffset.top > windowScrollTop) {\n        const windowHeight = innerHeight(rootWindow);\n        let rowsHeight = wtViewport.getColumnHeaderHeight();\n\n        for (let row = 1; row <= totalRows; row++) {\n          rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n          if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) {\n            // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements)\n            lastRowIndex = row - 2;\n            break;\n          }\n        }\n      }\n    }\n\n    return lastRowIndex;\n  }\n}\n\nexport default Scroll;\n","import {\n  addClass,\n  getScrollbarWidth,\n  getScrollTop,\n  getWindowScrollLeft,\n  hasClass,\n  outerHeight,\n  removeClass,\n} from '../../../../helpers/dom/element';\nimport BottomOverlayTable from './../table/bottom';\nimport { Overlay } from './_base';\nimport {\n  CLONE_BOTTOM,\n} from './constants';\n\n/**\n * @class BottomOverlay\n */\nexport class BottomOverlay extends Overlay {\n  /**\n   * Cached value which holds the previous value of the `fixedRowsBottom` option.\n   * It is used as a comparison value that can be used to detect changes in that value.\n   *\n   * @type {number}\n   */\n  cachedFixedRowsBottom = -1;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings) {\n    super(wotInstance, facadeGetter, CLONE_BOTTOM, wtSettings, domBindings);\n    this.cachedFixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {BottomOverlayTable}\n   */\n  createTable(...args) {\n    return new BottomOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderBottomOverlay');\n  }\n\n  /**\n   * Updates the top overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    if (!this.needFullRender || !this.shouldBeRendered() || !this.wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n    const { rootWindow } = this.domBindings;\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n\n    overlayRoot.style.top = '';\n\n    let overlayPosition = 0;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      overlayPosition = this.getOverlayOffset();\n      overlayRoot.style.bottom = `${overlayPosition}px`;\n\n    } else {\n      overlayPosition = this.getScrollPosition();\n      this.repositionOverlay();\n    }\n\n    const positionChanged = this.adjustHeaderBordersPosition(overlayPosition);\n\n    this.adjustElementsSize();\n\n    return positionChanged;\n  }\n\n  /**\n   * Updates the bottom overlay position.\n   */\n  repositionOverlay() {\n    const { wtTable, wtViewport } = this.wot;\n    const { rootDocument } = this.domBindings;\n    const cloneRoot = this.clone.wtTable.holder.parentNode;\n    let bottomOffset = 0;\n\n    if (!wtViewport.hasVerticalScroll()) {\n      bottomOffset += (wtViewport.getWorkspaceHeight() - wtTable.getTotalHeight());\n    }\n\n    if (wtViewport.hasVerticalScroll() && wtViewport.hasHorizontalScroll()) {\n      bottomOffset += getScrollbarWidth(rootDocument);\n    }\n\n    cloneRoot.style.bottom = `${bottomOffset}px`;\n  }\n\n  /**\n   * Sets the main overlay's vertical scroll position.\n   *\n   * @param {number} pos The scroll position.\n   * @returns {boolean}\n   */\n  setScrollPosition(pos) {\n    const { rootWindow } = this.domBindings;\n    let result = false;\n\n    if (this.mainTableScrollableElement === rootWindow) {\n      rootWindow.scrollTo(getWindowScrollLeft(rootWindow), pos);\n      result = true;\n\n    } else if (this.mainTableScrollableElement.scrollTop !== pos) {\n      this.mainTableScrollableElement.scrollTop = pos;\n      result = true;\n    }\n\n    return result;\n  }\n\n  /**\n   * Triggers onScroll hook callback.\n   */\n  onScroll() {\n    this.wtSettings.getSetting('onScrollHorizontally');\n  }\n\n  /**\n   * Calculates total sum cells height.\n   *\n   * @param {number} from Row index which calculates started from.\n   * @param {number} to Row index where calculation is finished.\n   * @returns {number} Height sum.\n   */\n  sumCellSizes(from, to) {\n    const { wtTable, wtSettings } = this.wot;\n    const defaultRowHeight = wtSettings.getSetting('defaultRowHeight');\n    let row = from;\n    let sum = 0;\n\n    while (row < to) {\n      const height = wtTable.getRowHeight(row);\n\n      sum += height === undefined ? defaultRowHeight : height;\n      row += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * Adjust overlay root element, children and master table element sizes (width, height).\n   */\n  adjustElementsSize() {\n    this.updateTrimmingContainer();\n\n    if (this.needFullRender) {\n      this.adjustRootElementSize();\n      this.adjustRootChildrenSize();\n    }\n  }\n\n  /**\n   * Adjust overlay root element size (width and height).\n   */\n  adjustRootElementSize() {\n    const { wtTable, wtViewport } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const scrollbarWidth = getScrollbarWidth(rootDocument);\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const overlayRootStyle = overlayRoot.style;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {\n      let width = wtViewport.getWorkspaceWidth();\n\n      if (this.wot.wtOverlays.hasScrollbarRight) {\n        width -= scrollbarWidth;\n      }\n\n      width = Math.min(width, wtTable.wtRootElement.scrollWidth);\n      overlayRootStyle.width = `${width}px`;\n\n    } else {\n      overlayRootStyle.width = '';\n    }\n\n    this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRootStyle.height = `${tableHeight}px`;\n  }\n\n  /**\n   * Adjust overlay root childs size.\n   */\n  adjustRootChildrenSize() {\n    const { holder } = this.clone.wtTable;\n\n    this.clone.wtTable.hider.style.width = this.hider.style.width;\n    holder.style.width = holder.parentNode.style.width;\n    holder.style.height = holder.parentNode.style.height;\n  }\n\n  /**\n   * Adjust the overlay dimensions and position.\n   */\n  applyToDOM() {\n    const total = this.wtSettings.getSetting('totalRows');\n\n    if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n      this.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n    } else if (total === 0) {\n      // can happen if there are 0 rows\n      this.spreader.style.top = '0';\n\n    } else {\n      throw new Error('Incorrect value of the rowsRenderCalculator');\n    }\n\n    this.spreader.style.bottom = '';\n\n    if (this.needFullRender) {\n      this.syncOverlayOffset();\n    }\n  }\n\n  /**\n   * Synchronize calculated left position to an element.\n   */\n  syncOverlayOffset() {\n    const styleProperty = this.isRtl() ? 'right' : 'left';\n    const { spreader } = this.clone.wtTable;\n\n    if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n      spreader.style[styleProperty] = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n    } else {\n      spreader.style[styleProperty] = '';\n    }\n  }\n\n  /**\n   * Scrolls vertically to a row.\n   *\n   * @param {number} sourceRow Row index which you want to scroll to.\n   * @param {boolean} [bottomEdge=false] If `true`, scrolls according to the bottom edge (top edge is by default).\n   */\n  scrollTo(sourceRow, bottomEdge) {\n    let newY = this.getTableParentOffset();\n    const sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n    const mainHolder = sourceInstance.wtTable.holder;\n    let scrollbarCompensation = 0;\n\n    if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n      scrollbarCompensation = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    if (bottomEdge) {\n      newY += this.sumCellSizes(0, sourceRow + 1);\n      newY -= this.wot.wtViewport.getViewportHeight();\n      // Fix 1 pixel offset when cell is selected\n      newY += 1;\n\n    } else {\n      newY += this.sumCellSizes(this.wtSettings.getSetting('fixedRowsBottom'), sourceRow);\n    }\n    newY += scrollbarCompensation;\n\n    this.setScrollPosition(newY);\n  }\n\n  /**\n   * Gets table parent top position.\n   *\n   * @returns {number}\n   */\n  getTableParentOffset() {\n    if (this.mainTableScrollableElement === this.domBindings.rootWindow) {\n      return this.wot.wtTable.holderOffset.top;\n    }\n\n    return 0;\n  }\n\n  /**\n   * Gets the main overlay's vertical scroll position.\n   *\n   * @returns {number} Main table's vertical scroll position.\n   */\n  getScrollPosition() {\n    return getScrollTop(this.mainTableScrollableElement, this.domBindings.rootWindow);\n  }\n\n  /**\n   * Gets the main overlay's vertical overlay offset.\n   *\n   * @returns {number} Main table's vertical overlay offset.\n   */\n  getOverlayOffset() {\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayOffset = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      const rootHeight = this.wot.wtTable.getTotalHeight();\n      const overlayRootHeight = this.clone.wtTable.getTotalHeight();\n      const maxOffset = rootHeight - overlayRootHeight;\n      const docClientHeight = this.domBindings.rootDocument.documentElement.clientHeight;\n\n      overlayOffset = Math.max(\n        this.getTableParentOffset() - this.getScrollPosition() - docClientHeight + rootHeight, 0);\n\n      if (overlayOffset > maxOffset) {\n        overlayOffset = 0;\n      }\n    }\n\n    return overlayOffset;\n  }\n\n  /**\n   * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n   *\n   * @param {number} position Header Y position if trimming container is window or scroll top if not.\n   * @returns {boolean}\n   */\n  adjustHeaderBordersPosition(position) {\n    const fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n    const areFixedRowsBottomChanged = this.cachedFixedRowsBottom !== fixedRowsBottom;\n    const columnHeaders = this.wtSettings.getSetting('columnHeaders');\n    let positionChanged = false;\n\n    if ((areFixedRowsBottomChanged || fixedRowsBottom === 0) && columnHeaders.length > 0) {\n      const masterParent = this.wot.wtTable.holder.parentNode;\n      const previousState = hasClass(masterParent, 'innerBorderBottom');\n\n      this.cachedFixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n\n      if (position || this.wtSettings.getSetting('totalRows') === 0) {\n        addClass(masterParent, 'innerBorderBottom');\n        positionChanged = !previousState;\n      } else {\n        removeClass(masterParent, 'innerBorderBottom');\n        positionChanged = previousState;\n      }\n    }\n\n    return positionChanged;\n  }\n}\n","import Table from '../table';\nimport stickyRowsBottom from './mixin/stickyRowsBottom';\nimport calculatedColumns from './mixin/calculatedColumns';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_BOTTOM } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to BottomOverlay, implemented through mixins.\n *\n * @mixes stickyRowsBottom\n * @mixes calculatedColumns\n */\nclass BottomOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_BOTTOM);\n  }\n}\n\nmixin(BottomOverlayTable, stickyRowsBottom);\nmixin(BottomOverlayTable, calculatedColumns);\n\nexport default BottomOverlayTable;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'calculatedColumns';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to columns.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use virtual rendering in the horizontal axis.\n *\n * @type {object}\n */\nconst calculatedColumns = {\n  /**\n   * Get the source index of the first rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedColumn() {\n    const startColumn = this.dataAccessObject.startColumnRendered;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the first column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleColumn() {\n    const startColumn = this.dataAccessObject.startColumnVisible;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the first column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleColumn() {\n    const startColumn = this.dataAccessObject.startColumnPartiallyVisible;\n\n    if (startColumn === null) {\n      return -1;\n    }\n\n    return startColumn;\n  },\n\n  /**\n   * Get the source index of the last rendered column. If no columns are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedColumn() {\n    const endColumn = this.dataAccessObject.endColumnRendered;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the source index of the last column fully visible in the viewport. If no columns are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleColumn() {\n    const endColumn = this.dataAccessObject.endColumnVisible;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the source index of the last column partially visible in the viewport. If no columns are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleColumn() {\n    const endColumn = this.dataAccessObject.endColumnPartiallyVisible;\n\n    if (endColumn === null) {\n      return -1;\n    }\n\n    return endColumn;\n  },\n\n  /**\n   * Get the number of rendered columns.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedColumnsCount() {\n    return this.dataAccessObject.countColumnsRendered;\n  },\n\n  /**\n   * Get the number of fully visible columns in the viewport.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleColumnsCount() {\n    return this.dataAccessObject.countColumnsVisible;\n  },\n\n  /**\n   * Get the number of rendered row headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRowHeadersCount() {\n    return this.dataAccessObject.rowHeaders.length;\n  },\n};\n\ndefineGetter(calculatedColumns, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default calculatedColumns;\n","import {\n  addClass,\n  getScrollbarWidth,\n  getScrollLeft,\n  getMaximumScrollLeft,\n  getWindowScrollTop,\n  hasClass,\n  outerWidth,\n  removeClass,\n  setOverlayPosition,\n  resetCssTransform,\n} from '../../../../helpers/dom/element';\nimport InlineStartOverlayTable from '../table/inlineStart';\nimport { Overlay } from './_base';\nimport { CORNER_DEFAULT_STYLE } from '../selection';\nimport {\n  CLONE_INLINE_START,\n} from './constants';\n\n/**\n * @class InlineStartOverlay\n */\nexport class InlineStartOverlay extends Overlay {\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings) {\n    super(wotInstance, facadeGetter, CLONE_INLINE_START, wtSettings, domBindings);\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {InlineStartOverlayTable}\n   */\n  createTable(...args) {\n    return new InlineStartOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderInlineStartOverlay');\n  }\n\n  /**\n   * Updates the left overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    const { wtTable } = this.wot;\n\n    if (!this.needFullRender || !this.shouldBeRendered() || !wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const { rootWindow } = this.domBindings;\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayPosition = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'horizontal')) {\n      overlayPosition = this.getOverlayOffset() * (this.isRtl() ? -1 : 1);\n      setOverlayPosition(overlayRoot, `${overlayPosition}px`, '0px');\n\n    } else {\n      overlayPosition = this.getScrollPosition();\n      resetCssTransform(overlayRoot);\n    }\n\n    const positionChanged = this.adjustHeaderBordersPosition(overlayPosition);\n\n    this.adjustElementsSize();\n\n    return positionChanged;\n  }\n\n  /**\n   * Sets the main overlay's horizontal scroll position.\n   *\n   * @param {number} pos The scroll position.\n   * @returns {boolean}\n   */\n  setScrollPosition(pos) {\n    const { rootWindow } = this.domBindings;\n    let result = false;\n\n    if (this.isRtl()) {\n      pos = -pos;\n    }\n\n    if (this.mainTableScrollableElement === rootWindow && rootWindow.scrollX !== pos) {\n      rootWindow.scrollTo(pos, getWindowScrollTop(rootWindow));\n      result = true;\n\n    } else if (this.mainTableScrollableElement.scrollLeft !== pos) {\n      this.mainTableScrollableElement.scrollLeft = pos;\n      result = true;\n    }\n\n    return result;\n  }\n\n  /**\n   * Triggers onScroll hook callback.\n   */\n  onScroll() {\n    this.wtSettings.getSetting('onScrollVertically');\n  }\n\n  /**\n   * Calculates total sum cells width.\n   *\n   * @param {number} from Column index which calculates started from.\n   * @param {number} to Column index where calculation is finished.\n   * @returns {number} Width sum.\n   */\n  sumCellSizes(from, to) {\n    const defaultColumnWidth = this.wtSettings.getSetting('defaultColumnWidth');\n    let column = from;\n    let sum = 0;\n\n    while (column < to) {\n      sum += this.wot.wtTable.getStretchedColumnWidth(column) || defaultColumnWidth;\n      column += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * Adjust overlay root element, children and master table element sizes (width, height).\n   */\n  adjustElementsSize() {\n    this.updateTrimmingContainer();\n\n    if (this.needFullRender) {\n      this.adjustRootElementSize();\n      this.adjustRootChildrenSize();\n    }\n  }\n\n  /**\n   * Adjust overlay root element size (width and height).\n   */\n  adjustRootElementSize() {\n    const { wtTable } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const scrollbarHeight = getScrollbarWidth(rootDocument);\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const overlayRootStyle = overlayRoot.style;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer !== rootWindow || preventOverflow === 'vertical') {\n      let height = this.wot.wtViewport.getWorkspaceHeight();\n\n      if (this.wot.wtOverlays.hasScrollbarBottom) {\n        height -= scrollbarHeight;\n      }\n\n      height = Math.min(height, wtTable.wtRootElement.scrollHeight);\n      overlayRootStyle.height = `${height}px`;\n\n    } else {\n      overlayRootStyle.height = '';\n    }\n\n    this.clone.wtTable.holder.style.height = overlayRootStyle.height;\n\n    const tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n    overlayRootStyle.width = `${tableWidth}px`;\n  }\n\n  /**\n   * Adjust overlay root childs size.\n   */\n  adjustRootChildrenSize() {\n    const { holder } = this.clone.wtTable;\n    const selectionCornerOffset = this.wot.selectionManager\n      .getFocusSelection() ? parseInt(CORNER_DEFAULT_STYLE.width, 10) / 2 : 0;\n\n    this.clone.wtTable.hider.style.height = this.hider.style.height;\n    holder.style.height = holder.parentNode.style.height;\n    // Add selection corner protruding part to the holder total width to make sure that\n    // borders' corner won't be cut after horizontal scroll (#6937).\n    holder.style.width = `${parseInt(holder.parentNode.style.width, 10) + selectionCornerOffset}px`;\n  }\n\n  /**\n   * Adjust the overlay dimensions and position.\n   */\n  applyToDOM() {\n    const total = this.wtSettings.getSetting('totalColumns');\n    const styleProperty = this.isRtl() ? 'right' : 'left';\n\n    if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n      this.spreader.style[styleProperty] = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n    } else if (total === 0) {\n      this.spreader.style[styleProperty] = '0';\n\n    } else {\n      throw new Error('Incorrect value of the columnsRenderCalculator');\n    }\n\n    if (this.isRtl()) {\n      this.spreader.style.left = '';\n    } else {\n      this.spreader.style.right = '';\n    }\n\n    if (this.needFullRender) {\n      this.syncOverlayOffset();\n    }\n  }\n\n  /**\n   * Synchronize calculated top position to an element.\n   */\n  syncOverlayOffset() {\n    if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n      this.clone.wtTable.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n    } else {\n      this.clone.wtTable.spreader.style.top = '';\n    }\n  }\n\n  /**\n   * Scrolls horizontally to a column at the left edge of the viewport.\n   *\n   * @param {number} sourceCol  Column index which you want to scroll to.\n   * @param {boolean} [beyondRendered]  If `true`, scrolls according to the right\n   *                                    edge (left edge is by default).\n   * @returns {boolean}\n   */\n  scrollTo(sourceCol, beyondRendered) {\n    const { wtSettings } = this;\n    const rowHeaders = wtSettings.getSetting('rowHeaders');\n    const fixedColumnsStart = wtSettings.getSetting('fixedColumnsStart');\n    const sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n    const mainHolder = sourceInstance.wtTable.holder;\n    const rowHeaderBorderCompensation = (\n      fixedColumnsStart === 0 &&\n      rowHeaders.length > 0 &&\n      !hasClass(mainHolder.parentNode, 'innerBorderInlineStart')\n    ) ? 1 : 0;\n    let newX = this.getTableParentOffset();\n    let scrollbarCompensation = 0;\n\n    if (beyondRendered) {\n      const columnWidth = this.wot.wtTable.getColumnWidth(sourceCol);\n      const viewportWidth = this.wot.wtViewport.getViewportWidth();\n\n      if (columnWidth > viewportWidth) {\n        beyondRendered = false;\n      }\n    }\n\n    if (beyondRendered && mainHolder.offsetWidth !== mainHolder.clientWidth) {\n      scrollbarCompensation = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n    if (beyondRendered) {\n      newX += this.sumCellSizes(0, sourceCol + 1);\n      newX -= this.wot.wtViewport.getViewportWidth();\n      // Compensate for the right header border if scrolled from the absolute left.\n      newX += rowHeaderBorderCompensation;\n\n    } else {\n      newX += this.sumCellSizes(this.wtSettings.getSetting('fixedColumnsStart'), sourceCol);\n    }\n\n    newX += scrollbarCompensation;\n\n    // If the table is scrolled all the way left when starting the scroll and going to be scrolled to the far right,\n    // we need to compensate for the potential header border width.\n    if (\n      getMaximumScrollLeft(this.mainTableScrollableElement) === newX - rowHeaderBorderCompensation &&\n      rowHeaderBorderCompensation > 0\n    ) {\n      this.wot.wtOverlays.expandHiderHorizontallyBy(rowHeaderBorderCompensation);\n    }\n\n    return this.setScrollPosition(newX);\n  }\n\n  /**\n   * Gets table parent left position.\n   *\n   * @returns {number}\n   */\n  getTableParentOffset() {\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let offset = 0;\n\n    if (!preventOverflow && this.trimmingContainer === this.domBindings.rootWindow) {\n      offset = this.wot.wtTable.holderOffset.left;\n    }\n\n    return offset;\n  }\n\n  /**\n   * Gets the main overlay's horizontal scroll position.\n   *\n   * @returns {number} Main table's horizontal scroll position.\n   */\n  getScrollPosition() {\n    return Math.abs(getScrollLeft(this.mainTableScrollableElement, this.domBindings.rootWindow));\n  }\n\n  /**\n   * Gets the main overlay's horizontal overlay offset.\n   *\n   * @returns {number} Main table's horizontal overlay offset.\n   */\n  getOverlayOffset() {\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayOffset = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'horizontal')) {\n      if (this.isRtl()) {\n        overlayOffset = Math.abs(Math.min(this.getTableParentOffset() - this.getScrollPosition(), 0));\n      } else {\n        overlayOffset = Math.max(this.getScrollPosition() - this.getTableParentOffset(), 0);\n      }\n\n      const rootWidth = this.wot.wtTable.getTotalWidth();\n      const overlayRootWidth = this.clone.wtTable.getTotalWidth();\n      const maxOffset = rootWidth - overlayRootWidth;\n\n      if (overlayOffset > maxOffset) {\n        overlayOffset = 0;\n      }\n    }\n\n    return overlayOffset;\n  }\n\n  /**\n   * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n   *\n   * @param {number} position Header X position if trimming container is window or scroll top if not.\n   * @returns {boolean}\n   */\n  adjustHeaderBordersPosition(position) {\n    const { wtSettings } = this;\n    const masterParent = this.wot.wtTable.holder.parentNode;\n    const rowHeaders = wtSettings.getSetting('rowHeaders');\n    const fixedColumnsStart = wtSettings.getSetting('fixedColumnsStart');\n    const totalRows = wtSettings.getSetting('totalRows');\n    const preventVerticalOverflow = wtSettings.getSetting('preventOverflow') === 'vertical';\n\n    if (totalRows) {\n      removeClass(masterParent, 'emptyRows');\n    } else {\n      addClass(masterParent, 'emptyRows');\n    }\n\n    let positionChanged = false;\n\n    if (!preventVerticalOverflow) {\n      if (fixedColumnsStart && !rowHeaders.length) {\n        // \"innerBorderLeft\" is for backward compatibility\n        addClass(masterParent, 'innerBorderLeft innerBorderInlineStart');\n\n      } else if (!fixedColumnsStart && rowHeaders.length) {\n        const previousState = hasClass(masterParent, 'innerBorderInlineStart');\n\n        if (position) {\n          addClass(masterParent, 'innerBorderLeft innerBorderInlineStart');\n          positionChanged = !previousState;\n        } else {\n          removeClass(masterParent, 'innerBorderLeft innerBorderInlineStart');\n          positionChanged = previousState;\n        }\n      }\n    }\n\n    return positionChanged;\n  }\n}\n","import Table from '../table';\nimport calculatedRows from './mixin/calculatedRows';\nimport stickyColumnsStart from './mixin/stickyColumnsStart';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_INLINE_START } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to InlineStartOverlayTable, implemented through mixins.\n */\nclass InlineStartOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_INLINE_START);\n  }\n}\n\nmixin(InlineStartOverlayTable, calculatedRows);\nmixin(InlineStartOverlayTable, stickyColumnsStart);\n\nexport default InlineStartOverlayTable;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'calculatedRows';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use virtual rendering in the vertical axis.\n *\n * @type {object}\n */\nconst calculatedRows = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedRow() {\n    const startRow = this.dataAccessObject.startRowRendered;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleRow() {\n    const startRow = this.dataAccessObject.startRowVisible;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleRow() {\n    const startRow = this.dataAccessObject.startRowPartiallyVisible;\n\n    if (startRow === null) {\n      return -1;\n    }\n\n    return startRow;\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedRow() {\n    const endRow = this.dataAccessObject.endRowRendered;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleRow() {\n    const endRow = this.dataAccessObject.endRowVisible;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleRow() {\n    const endRow = this.dataAccessObject.endRowPartiallyVisible;\n\n    if (endRow === null) {\n      return -1;\n    }\n\n    return endRow;\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedRowsCount() {\n    return this.dataAccessObject.countRowsRendered;\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleRowsCount() {\n    return this.dataAccessObject.countRowsVisible;\n  },\n\n  /**\n   * Get the number of rendered column headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getColumnHeadersCount() {\n    return this.dataAccessObject.columnHeaders.length;\n  },\n};\n\ndefineGetter(calculatedRows, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default calculatedRows;\n","import Selection from './selection';\n\nexport * from './constants';\nexport * from './border/constants';\nexport { SelectionManager } from './manager';\nexport {\n  Selection\n};\n","import { mixin } from '../../../../helpers/object';\nimport localHooks from '../../../../mixins/localHooks';\n\n/**\n * The Selection class allows highlighting (by applying CSS class) the table's cells or headers\n * and setting up the borders if defined in the settings.\n *\n * The Selection coordinates may point to the cells (positive numbers) or headers (negative numbers).\n *\n * @class Selection\n */\nclass Selection {\n  /**\n   * @param {object} settings The selection settings object. @todo type.\n   * @param {CellRange} cellRange The cell range instance.\n   */\n  constructor(settings, cellRange) {\n    this.settings = settings;\n    this.cellRange = cellRange || null;\n  }\n\n  /**\n   * Checks if selection is empty.\n   *\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return this.cellRange === null;\n  }\n\n  /**\n   * Adds a cell coords to the selection.\n   *\n   * @param {CellCoords} coords The cell coordinates to add.\n   * @returns {Selection}\n   */\n  add(coords) {\n    if (this.isEmpty()) {\n      this.cellRange = this.settings.createCellRange(coords);\n\n    } else {\n      this.cellRange.expand(coords);\n    }\n\n    return this;\n  }\n\n  /**\n   * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean\n   * information about success.\n   *\n   * @param {CellCoords} oldCoords An old cell coordinates to replace.\n   * @param {CellCoords} newCoords The new cell coordinates.\n   * @returns {boolean}\n   */\n  replace(oldCoords, newCoords) {\n    if (!this.isEmpty()) {\n      if (this.cellRange.from.isEqual(oldCoords)) {\n        this.cellRange.from = newCoords;\n\n        return true;\n      }\n      if (this.cellRange.to.isEqual(oldCoords)) {\n        this.cellRange.to = newCoords;\n\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Clears selection.\n   *\n   * @returns {Selection}\n   */\n  clear() {\n    this.cellRange = null;\n\n    return this;\n  }\n\n  /**\n   * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.\n   *\n   * @returns {number[]} Returns array of coordinates for example `[1, 1, 5, 5]`.\n   */\n  getCorners() {\n    const topStart = this.cellRange.getOuterTopStartCorner();\n    const bottomEnd = this.cellRange.getOuterBottomEndCorner();\n\n    return [\n      topStart.row,\n      topStart.col,\n      bottomEnd.row,\n      bottomEnd.col,\n    ];\n  }\n\n  /**\n   * Destroys the instance.\n   */\n  destroy() {\n    this.runLocalHooks('destroy');\n  }\n}\n\nmixin(Selection, localHooks);\n\nexport default Selection;\n","import { defineGetter } from './../helpers/object';\nimport { fastCall } from './../helpers/function';\n\nconst MIXIN_NAME = 'localHooks';\n\n/**\n * Mixin object to extend objects functionality for local hooks.\n *\n * @type {object}\n */\nconst localHooks = {\n  /**\n   * Internal hooks storage.\n   */\n  _localHooks: Object.create(null),\n\n  /**\n   * Add hook to the collection.\n   *\n   * @param {string} key The hook name.\n   * @param {Function} callback The hook callback.\n   * @returns {object}\n   */\n  addLocalHook(key, callback) {\n    if (!this._localHooks[key]) {\n      this._localHooks[key] = [];\n    }\n    this._localHooks[key].push(callback);\n\n    return this;\n  },\n\n  /**\n   * Run hooks.\n   *\n   * @param {string} key The name of the hook to run.\n   * @param {*} [arg1] An additional parameter passed to the callback function.\n   * @param {*} [arg2] An additional parameter passed to the callback function.\n   * @param {*} [arg3] An additional parameter passed to the callback function.\n   * @param {*} [arg4] An additional parameter passed to the callback function.\n   * @param {*} [arg5] An additional parameter passed to the callback function.\n   * @param {*} [arg6] An additional parameter passed to the callback function.\n   */\n  runLocalHooks(key, arg1, arg2, arg3, arg4, arg5, arg6) {\n    if (this._localHooks[key]) {\n      const length = this._localHooks[key].length;\n\n      // don't optimize this loop with the `arrayEach()` method or arrow functions\n      // otherwise, performance will decrease because of garbage collection\n      // using the `...rest` syntax (ES6 and later) will decrease performance as well\n      for (let i = 0; i < length; i++) {\n        fastCall(this._localHooks[key][i], this, arg1, arg2, arg3, arg4, arg5, arg6);\n      }\n    }\n  },\n\n  /**\n   * Clear all added hooks.\n   *\n   * @returns {object}\n   */\n  clearLocalHooks() {\n    this._localHooks = {};\n\n    return this;\n  },\n};\n\ndefineGetter(localHooks, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default localHooks;\n","/**\n * Selection type that is visible only if the row or column header is clicked. If that happened\n * all row or column header layers are highlighted.\n *\n * @type {string}\n */\nexport const ACTIVE_HEADER_TYPE = 'active-header';\n/**\n * Selection type that is visible only if the a cell or cells are clicked. If that happened\n * only the most closest to the cells row or column header is highlighted.\n *\n * @type {string}\n */\nexport const HEADER_TYPE = 'header';\n/**\n * Selection type that is visible when a cell or cells are clicked. The selected cells are\n * highlighted.\n *\n * @type {string}\n */\nexport const AREA_TYPE = 'area';\n/**\n * Selection type defines a cell that follows the user (keyboard navigation).\n *\n * @type {string}\n */\nexport const FOCUS_TYPE = 'focus';\n/**\n * Selection type defines borders for the autofill functionality.\n *\n * @type {string}\n */\nexport const FILL_TYPE = 'fill';\n/**\n * Selection type defines highlights for the `currentRowClassName` option.\n *\n * @type {string}\n */\nexport const ROW_TYPE = 'row';\n/**\n * Selection type defines highlights for the `currentColumnClassName` option.\n *\n * @type {string}\n */\nexport const COLUMN_TYPE = 'column';\n/**\n * Selection type defines highlights managed by the CustomBorders plugin.\n *\n * @type {string}\n */\nexport const CUSTOM_SELECTION_TYPE = 'custom-selection';\n","/**\n * Default border corner style.\n *\n * @type {object}\n */\nexport const CORNER_DEFAULT_STYLE = Object.freeze({\n  width: '6px',\n  height: '6px',\n  borderWidth: '1px',\n  borderStyle: 'solid',\n  borderColor: '#FFF'\n});\n","import {\n  removeClass,\n  addClass,\n  setAttribute,\n  removeAttribute\n} from '../../../../helpers/dom/element';\nimport { SelectionScanner } from './scanner';\nimport Border from './border/border';\n\n/**\n * Module responsible for rendering selections (CSS classes) and borders based on the\n * collection of the Selection instances provided throughout the `selections` Walkontable\n * setting.\n *\n * @private\n */\nexport class SelectionManager {\n  /**\n   * The overlay's Walkontable instance that are currently processed.\n   *\n   * @type {Walkontable}\n   */\n  #activeOverlaysWot;\n  /**\n   * The Highlight instance that holds Selections instances within it.\n   *\n   * @type {Highlight|null}\n   */\n  #selections;\n  /**\n   * The SelectionScanner allows to scan and collect the cell and header elements that matches\n   * to the coords defined in the selections.\n   *\n   * @type {SelectionScanner}\n   */\n  #scanner = new SelectionScanner();\n  /**\n   * The Map tracks applied CSS classes. It's used to reset the elements state to their initial state.\n   *\n   * @type {WeakMap}\n   */\n  #appliedClasses = new WeakMap();\n  /**\n   * The Map tracks applied \"destroy\" listeners for Selection instances.\n   *\n   * @type {WeakMap}\n   */\n  #destroyListeners = new WeakSet();\n  /**\n   * The Map holds references to Border classes for Selection instances which requires that when\n   * the \"border\" setting is defined.\n   *\n   * @type {Map}\n   */\n  #selectionBorders = new Map();\n\n  constructor(selections) {\n    this.#selections = selections;\n  }\n\n  /**\n   * Sets the active Walkontable instance.\n   *\n   * @param {Walkontable} activeWot The overlays or master Walkontable instance.\n   * @returns {SelectionManager}\n   */\n  setActiveOverlay(activeWot) {\n    this.#activeOverlaysWot = activeWot;\n    this.#scanner.setActiveOverlay(this.#activeOverlaysWot);\n\n    if (!this.#appliedClasses.has(this.#activeOverlaysWot)) {\n      this.#appliedClasses.set(this.#activeOverlaysWot, new Set());\n    }\n\n    return this;\n  }\n\n  /**\n   * Gets the Selection instance of the \"focus\" type.\n   *\n   * @returns {Selection|null}\n   */\n  getFocusSelection() {\n    return this.#selections !== null ? this.#selections.getFocus() : null;\n  }\n\n  /**\n   * Gets the Selection instance of the \"area\" type.\n   *\n   * @returns {Selection|null}\n   */\n  getAreaSelection() {\n    return this.#selections !== null ? this.#selections.createLayeredArea() : null;\n  }\n\n  /**\n   * Gets the Border instance associated with Selection instance.\n   *\n   * @param {Selection} selection The selection instance.\n   * @returns {Border|null} Returns the Border instance (new for each overlay Walkontable instance).\n   */\n  getBorderInstance(selection) {\n    if (!selection.settings.border) {\n      return null;\n    }\n\n    if (this.#selectionBorders.has(selection)) {\n      const borders = this.#selectionBorders.get(selection);\n\n      if (borders.has(this.#activeOverlaysWot)) {\n        return borders.get(this.#activeOverlaysWot);\n      }\n\n      const border = new Border(this.#activeOverlaysWot, selection.settings);\n\n      borders.set(this.#activeOverlaysWot, border);\n\n      return border;\n    }\n\n    const border = new Border(this.#activeOverlaysWot, selection.settings);\n\n    this.#selectionBorders.set(selection, new Map([[this.#activeOverlaysWot, border]]));\n\n    return border;\n  }\n\n  /**\n   * Gets all Border instances associated with Selection instance for all overlays.\n   *\n   * @param {Selection} selection The selection instance.\n   * @returns {Border[]}\n   */\n  getBorderInstances(selection) {\n    return Array.from(this.#selectionBorders.get(selection)?.values() ?? []);\n  }\n\n  /**\n   * Destroys the Border instance associated with Selection instance.\n   *\n   * @param {Selection} selection The selection instance.\n   */\n  destroyBorders(selection) {\n    this.#selectionBorders.get(selection).forEach(border => border.destroy());\n    this.#selectionBorders.delete(selection);\n  }\n\n  /**\n   * Renders all the selections (add CSS classes to cells and draw borders).\n   *\n   * @param {boolean} fastDraw Indicates the render cycle type (fast/slow).\n   */\n  render(fastDraw) {\n    if (this.#selections === null) {\n      return;\n    }\n\n    if (fastDraw) {\n      // there was no rerender, so we need to remove classNames by ourselves\n      this.#resetCells();\n    }\n\n    const selections = Array.from(this.#selections);\n    const classNamesMap = new Map();\n    const headerAttributesMap = new Map();\n\n    for (let i = 0; i < selections.length; i++) {\n      const selection = selections[i];\n      const {\n        className,\n        headerAttributes,\n        createLayers,\n        selectionType,\n      } = selection.settings;\n\n      if (!this.#destroyListeners.has(selection)) {\n        this.#destroyListeners.add(selection);\n        selection.addLocalHook('destroy', () => this.destroyBorders(selection));\n      }\n\n      const borderInstance = this.getBorderInstance(selection);\n\n      if (selection.isEmpty()) {\n        borderInstance?.disappear();\n\n        continue; // eslint-disable-line no-continue\n      }\n\n      if (className) {\n        const elements = this.#scanner\n          .setActiveSelection(selection)\n          .scan();\n\n        elements.forEach((element) => {\n          if (classNamesMap.has(element)) {\n            const classNamesLayers = classNamesMap.get(element);\n\n            if (classNamesLayers.has(className) && createLayers === true) {\n              classNamesLayers.set(className, classNamesLayers.get(className) + 1);\n            } else {\n              classNamesLayers.set(className, 1);\n            }\n\n          } else {\n            classNamesMap.set(element, new Map([[className, 1]]));\n          }\n\n          if (headerAttributes) {\n            if (!headerAttributesMap.has(element)) {\n              headerAttributesMap.set(element, []);\n            }\n\n            if (element.nodeName === 'TH') {\n              headerAttributesMap.get(element).push(...headerAttributes);\n            }\n          }\n        });\n      }\n\n      const corners = selection.getCorners();\n\n      this.#activeOverlaysWot.getSetting('onBeforeDrawBorders', corners, selectionType);\n      borderInstance?.appear(corners);\n    }\n\n    classNamesMap.forEach((classNamesLayers, element) => {\n      const classNames = Array.from(classNamesLayers).map(([className, occurrenceCount]) => {\n        if (occurrenceCount === 1) {\n          return className;\n        }\n\n        return [className, ...Array.from({\n          length: occurrenceCount - 1\n        }, (_, i) => `${className}-${i + 1}`)];\n      }).flat();\n\n      classNames.forEach(className => this.#appliedClasses\n        .get(this.#activeOverlaysWot)\n        .add(className));\n\n      addClass(element, classNames);\n\n      if (element.nodeName === 'TD' && Array.isArray(this.#selections.options?.cellAttributes)) {\n        setAttribute(element, this.#selections.options.cellAttributes);\n\n      }\n    });\n\n    // Set the attributes for the headers if they're focused.\n    Array.from(headerAttributesMap.keys()).forEach((element) => {\n      setAttribute(element, [...headerAttributesMap.get(element)]);\n    });\n  }\n\n  /**\n   * Resets the elements to their initial state (remove the CSS classes that are added in the\n   * previous render cycle).\n   */\n  #resetCells() {\n    const appliedOverlaysClasses = this.#appliedClasses.get(this.#activeOverlaysWot);\n    const classesToRemove = this.#activeOverlaysWot.wtSettings.getSetting('onBeforeRemoveCellClassNames');\n\n    if (Array.isArray(classesToRemove)) {\n      for (let i = 0; i < classesToRemove.length; i++) {\n        appliedOverlaysClasses.add(classesToRemove[i]);\n      }\n    }\n\n    appliedOverlaysClasses.forEach((className) => {\n      const nodes = this.#activeOverlaysWot.wtTable.TABLE.querySelectorAll(`.${className}`);\n      let cellAttributes = [];\n\n      if (Array.isArray(this.#selections.options?.cellAttributes)) {\n        cellAttributes = this.#selections.options.cellAttributes.map(el => el[0]);\n      }\n\n      if (Array.isArray(this.#selections.options?.headerAttributes)) {\n        cellAttributes = [...cellAttributes, ...this.#selections.options.headerAttributes.map(el => el[0])];\n      }\n\n      for (let i = 0, len = nodes.length; i < len; i++) {\n        removeClass(nodes[i], className);\n\n        removeAttribute(nodes[i], cellAttributes);\n      }\n    });\n\n    appliedOverlaysClasses.clear();\n  }\n}\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flat');\n","/* eslint-disable no-continue */\nimport { addClass } from '../../../../helpers/dom/element';\n\n/**\n * Selection scanner module scans the rendered cells and headers and if it finds an intersection with\n * the coordinates of the Selection class (highlight) it returns the DOM elements.\n *\n * @private\n */\nexport class SelectionScanner {\n  /**\n   * Active Selection instance to process.\n   *\n   * @type {Selection}\n   */\n  #selection;\n  /**\n   * The Walkontable instance that the scans depends on.\n   *\n   * @type {Walkontable}\n   */\n  #activeOverlaysWot;\n\n  /**\n   * Sets the Walkontable instance that will be taking into account while scanning the table.\n   *\n   * @param {Walkontable} activeOverlaysWot The Walkontable instance.\n   * @returns {SelectionScanner}\n   */\n  setActiveOverlay(activeOverlaysWot) {\n    this.#activeOverlaysWot = activeOverlaysWot;\n\n    return this;\n  }\n\n  /**\n   * Sets the Selection instance to process.\n   *\n   * @param {Selection} selection The Selection instance.\n   * @returns {SelectionScanner}\n   */\n  setActiveSelection(selection) {\n    this.#selection = selection;\n\n    return this;\n  }\n\n  /**\n   * Scans the rendered table with selection and returns elements that intersects\n   * with selection coordinates.\n   *\n   * @returns {HTMLTableElement[]}\n   */\n  scan() {\n    const selectionType = this.#selection.settings.selectionType;\n    const elements = new Set();\n\n    // TODO(improvement): use heuristics from coords to detect what type of scan\n    // the Selection needs instead of using `selectionType` property.\n    if (selectionType === 'active-header') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanRowsInHeadersRange(element => elements.add(element));\n\n    } else if (selectionType === 'area') {\n      this.scanCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'focus') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanRowsInHeadersRange(element => elements.add(element));\n      this.scanCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'fill') {\n      this.scanCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'header') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanRowsInHeadersRange(element => elements.add(element));\n\n    } else if (selectionType === 'row') {\n      this.scanRowsInHeadersRange(element => elements.add(element));\n      this.scanRowsInCellsRange(element => elements.add(element));\n\n    } else if (selectionType === 'column') {\n      this.scanColumnsInHeadersRange(element => elements.add(element));\n      this.scanColumnsInCellsRange(element => elements.add(element));\n    }\n\n    return elements;\n  }\n\n  /**\n   * Scans the table (only rendered headers) and collect all column headers (TH) that match\n   * the coordinates passed in the Selection instance.\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanColumnsInHeadersRange(callback) {\n    const [topRow, topColumn, bottomRow, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n    const renderedColumnsCount = wtTable.getRenderedColumnsCount();\n    const columnHeadersCount = wtTable.getColumnHeadersCount();\n    let cursor = 0;\n\n    for (let column = -wtTable.getRowHeadersCount(); column < renderedColumnsCount; column++) {\n      const sourceColumn = wtTable.columnFilter.renderedToSource(column);\n\n      if (sourceColumn < topColumn || sourceColumn > bottomColumn) {\n        continue;\n      }\n\n      for (let headerLevel = -columnHeadersCount; headerLevel < 0; headerLevel++) {\n        if (headerLevel < topRow || headerLevel > bottomRow) {\n          continue;\n        }\n\n        const positiveBasedHeaderLevel = headerLevel + columnHeadersCount;\n        let TH = wtTable.getColumnHeader(sourceColumn, positiveBasedHeaderLevel);\n        const newSourceCol = this.#activeOverlaysWot\n          .getSetting('onBeforeHighlightingColumnHeader', sourceColumn, positiveBasedHeaderLevel, {\n            selectionType: this.#selection.settings.selectionType,\n            columnCursor: cursor,\n            selectionWidth: bottomColumn - topColumn + 1,\n          });\n\n        if (newSourceCol === null) {\n          continue;\n        }\n\n        if (newSourceCol !== sourceColumn) {\n          TH = wtTable.getColumnHeader(newSourceCol, positiveBasedHeaderLevel);\n        }\n\n        callback(TH);\n      }\n\n      cursor += 1;\n    }\n  }\n\n  /**\n   * Scans the table (only rendered headers) and collect all row headers (TH) that match\n   * the coordinates passed in the Selection instance.\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanRowsInHeadersRange(callback) {\n    const [topRow, topColumn, bottomRow, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n    const renderedRowsCount = wtTable.getRenderedRowsCount();\n    const rowHeadersCount = wtTable.getRowHeadersCount();\n    let cursor = 0;\n\n    for (let row = -wtTable.getColumnHeadersCount(); row < renderedRowsCount; row++) {\n      const sourceRow = wtTable.rowFilter.renderedToSource(row);\n\n      if (sourceRow < topRow || sourceRow > bottomRow) {\n        continue;\n      }\n\n      for (let headerLevel = -rowHeadersCount; headerLevel < 0; headerLevel++) {\n        if (headerLevel < topColumn || headerLevel > bottomColumn) {\n          continue;\n        }\n\n        const positiveBasedHeaderLevel = headerLevel + rowHeadersCount;\n        let TH = wtTable.getRowHeader(sourceRow, positiveBasedHeaderLevel);\n        const newSourceRow = this.#activeOverlaysWot\n          .getSetting('onBeforeHighlightingRowHeader', sourceRow, positiveBasedHeaderLevel, {\n            selectionType: this.#selection.settings.selectionType,\n            rowCursor: cursor,\n            selectionHeight: bottomRow - topRow + 1,\n          });\n\n        if (newSourceRow === null) {\n          continue;\n        }\n\n        if (newSourceRow !== sourceRow) {\n          TH = wtTable.getRowHeader(newSourceRow, positiveBasedHeaderLevel);\n        }\n\n        callback(TH);\n      }\n\n      cursor += 1;\n    }\n  }\n\n  /**\n   * Scans the table (only rendered cells) and collect all cells (TR) that match\n   * the coordinates passed in the Selection instance.\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanCellsRange(callback) {\n    const [topRow, topColumn, bottomRow, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n\n    this.#scanCellsRange((sourceRow, sourceColumn) => {\n      if (sourceRow >= topRow && sourceRow <= bottomRow && sourceColumn >= topColumn && sourceColumn <= bottomColumn) {\n        const cell = wtTable.getCell(this.#activeOverlaysWot.createCellCoords(sourceRow, sourceColumn));\n\n        // support for old API\n        const additionalSelectionClass = this.#activeOverlaysWot\n          .getSetting('onAfterDrawSelection', sourceRow, sourceColumn, this.#selection.settings.layerLevel);\n\n        if (typeof additionalSelectionClass === 'string') {\n          addClass(cell, additionalSelectionClass);\n        }\n\n        callback(cell);\n      }\n    });\n  }\n\n  /**\n   * Scans the table (only rendered cells) and collects all cells (TR) that match the coordinates\n   * passed in the Selection instance but only for the X axis (rows).\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanRowsInCellsRange(callback) {\n    // eslint-disable-next-line comma-spacing\n    const [topRow,, bottomRow,] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n\n    this.#scanCellsRange((sourceRow, sourceColumn) => {\n      if (sourceRow >= topRow && sourceRow <= bottomRow) {\n        const cell = wtTable.getCell(this.#activeOverlaysWot.createCellCoords(sourceRow, sourceColumn));\n\n        callback(cell);\n      }\n    });\n  }\n\n  /**\n   * Scans the table (only rendered cells) and collects all cells (TR) that match the coordinates\n   * passed in the Selection instance but only for the Y axis (columns).\n   *\n   * @param {function(HTMLTableElement): void} callback The callback function to trigger.\n   */\n  scanColumnsInCellsRange(callback) {\n    const [, topColumn,, bottomColumn] = this.#selection.getCorners();\n    const { wtTable } = this.#activeOverlaysWot;\n\n    this.#scanCellsRange((sourceRow, sourceColumn) => {\n      if (sourceColumn >= topColumn && sourceColumn <= bottomColumn) {\n        const cell = wtTable.getCell(this.#activeOverlaysWot.createCellCoords(sourceRow, sourceColumn));\n\n        callback(cell);\n      }\n    });\n  }\n\n  /**\n   * The method triggers a callback for each rendered cell.\n   *\n   * @param {function(number, number): void} callback The callback function to trigger.\n   */\n  #scanCellsRange(callback) {\n    const { wtTable } = this.#activeOverlaysWot;\n    const renderedRowsCount = wtTable.getRenderedRowsCount();\n    const renderedColumnsCount = wtTable.getRenderedColumnsCount();\n\n    for (let row = 0; row < renderedRowsCount; row += 1) {\n      const sourceRow = wtTable.rowFilter.renderedToSource(row);\n\n      for (let column = 0; column < renderedColumnsCount; column += 1) {\n        callback(sourceRow, wtTable.columnFilter.renderedToSource(column));\n      }\n    }\n  }\n}\n","import {\n  addClass,\n  hasClass,\n  removeClass,\n  getComputedStyle,\n  getTrimmingContainer,\n  innerWidth,\n  innerHeight,\n  offset,\n  outerHeight,\n  outerWidth,\n} from '../../../../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../../../../helpers/dom/event';\nimport { objectEach } from '../../../../../helpers/object';\nimport { isMobileBrowser } from '../../../../../helpers/browser';\nimport { CORNER_DEFAULT_STYLE } from './constants';\n\n/**\n *\n */\nclass Border {\n  // TODO As this is an internal class, should be designed for using {Walkontable}. It uses the facade,\n  // TODO Con. Because the class is created on place where the instance reference comes from external origin.\n  // TODO Imho, the discrimination for handling both, facade and non-facade should be handled.\n  /**\n   * @param {WalkontableFacade} wotInstance The Walkontable instance.\n   * @param {object} settings The border settings.\n   */\n  constructor(wotInstance, settings) {\n    if (!settings) {\n      return;\n    }\n    this.eventManager = wotInstance.eventManager;\n    this.instance = wotInstance;\n    this.wot = wotInstance;\n    this.settings = settings;\n    this.mouseDown = false;\n    this.main = null;\n\n    this.top = null;\n    this.bottom = null;\n    this.start = null;\n    this.end = null;\n\n    this.topStyle = null;\n    this.bottomStyle = null;\n    this.startStyle = null;\n    this.endStyle = null;\n\n    this.cornerDefaultStyle = CORNER_DEFAULT_STYLE;\n    // Offset to moving the corner to be centered relative to the grid.\n    this.cornerCenterPointOffset = -(parseInt(this.cornerDefaultStyle.width, 10) / 2);\n    this.corner = null;\n    this.cornerStyle = null;\n\n    this.createBorders(settings);\n    this.registerListeners();\n  }\n\n  /**\n   * Register all necessary events.\n   */\n  registerListeners() {\n    const documentBody = this.wot.rootDocument.body;\n\n    this.eventManager.addEventListener(documentBody, 'mousedown', () => this.onMouseDown());\n    this.eventManager.addEventListener(documentBody, 'mouseup', () => this.onMouseUp());\n\n    for (let c = 0, len = this.main.childNodes.length; c < len; c++) {\n      const element = this.main.childNodes[c];\n\n      this.eventManager\n        .addEventListener(element, 'mouseenter', event => this.onMouseEnter(event, this.main.childNodes[c]));\n    }\n  }\n\n  /**\n   * Mouse down listener.\n   *\n   * @private\n   */\n  onMouseDown() {\n    this.mouseDown = true;\n  }\n\n  /**\n   * Mouse up listener.\n   *\n   * @private\n   */\n  onMouseUp() {\n    this.mouseDown = false;\n  }\n\n  /**\n   * Mouse enter listener for fragment selection functionality.\n   *\n   * @private\n   * @param {Event} event Dom event.\n   * @param {HTMLElement} parentElement Part of border element.\n   */\n  onMouseEnter(event, parentElement) {\n    if (!this.mouseDown || !this.wot.getSetting('hideBorderOnMouseDownOver')) {\n      return;\n    }\n    event.preventDefault();\n    stopImmediatePropagation(event);\n\n    const _this = this;\n    const documentBody = this.wot.rootDocument.body;\n    const bounds = parentElement.getBoundingClientRect();\n\n    // Hide border to prevents selection jumping when fragmentSelection is enabled.\n    parentElement.style.display = 'none';\n\n    /**\n     * @param {Event} mouseEvent The mouse event object.\n     * @returns {boolean}\n     */\n    function isOutside(mouseEvent) {\n      if (mouseEvent.clientY < Math.floor(bounds.top)) {\n        return true;\n      }\n      if (mouseEvent.clientY > Math.ceil(bounds.top + bounds.height)) {\n        return true;\n      }\n      if (mouseEvent.clientX < Math.floor(bounds.left)) {\n        return true;\n      }\n      if (mouseEvent.clientX > Math.ceil(bounds.left + bounds.width)) {\n        return true;\n      }\n    }\n\n    /**\n     * @param {Event} handlerEvent The mouse event object.\n     */\n    function handler(handlerEvent) {\n      if (isOutside(handlerEvent)) {\n        _this.eventManager.removeEventListener(documentBody, 'mousemove', handler);\n        parentElement.style.display = 'block';\n      }\n    }\n\n    this.eventManager.addEventListener(documentBody, 'mousemove', handler);\n  }\n\n  /**\n   * Create border elements.\n   *\n   * @param {object} settings The border settings.\n   */\n  createBorders(settings) {\n    const { rootDocument } = this.wot;\n\n    this.main = rootDocument.createElement('div');\n\n    const borderDivs = ['top', 'start', 'bottom', 'end', 'corner'];\n    let style = this.main.style;\n\n    style.position = 'absolute';\n    style.top = 0;\n    style.left = 0;\n\n    for (let i = 0; i < 5; i++) {\n      const position = borderDivs[i];\n      const div = rootDocument.createElement('div');\n\n      div.className = `wtBorder ${this.settings.className || ''}`; // + borderDivs[i];\n\n      if (this.settings[position] && this.settings[position].hide) {\n        div.className += ' hidden';\n      }\n      style = div.style;\n      style.backgroundColor = (this.settings[position] && this.settings[position].color) ?\n        this.settings[position].color : settings.border.color;\n      style.height = (this.settings[position] && this.settings[position].width) ?\n        `${this.settings[position].width}px` : `${settings.border.width}px`;\n      style.width = (this.settings[position] && this.settings[position].width) ?\n        `${this.settings[position].width}px` : `${settings.border.width}px`;\n\n      this.main.appendChild(div);\n    }\n    this.top = this.main.childNodes[0];\n    this.start = this.main.childNodes[1];\n    this.bottom = this.main.childNodes[2];\n    this.end = this.main.childNodes[3];\n\n    this.topStyle = this.top.style;\n    this.startStyle = this.start.style;\n    this.bottomStyle = this.bottom.style;\n    this.endStyle = this.end.style;\n\n    this.corner = this.main.childNodes[4];\n    this.corner.className += ' corner';\n    this.cornerStyle = this.corner.style;\n    this.cornerStyle.width = this.cornerDefaultStyle.width;\n    this.cornerStyle.height = this.cornerDefaultStyle.height;\n    this.cornerStyle.border = [\n      this.cornerDefaultStyle.borderWidth,\n      this.cornerDefaultStyle.borderStyle,\n      this.cornerDefaultStyle.borderColor\n    ].join(' ');\n\n    if (isMobileBrowser() && this.instance.getSetting('isDataViewInstance')) {\n      this.createMultipleSelectorHandles();\n    }\n    this.disappear();\n\n    const { wtTable } = this.wot;\n    let bordersHolder = wtTable.bordersHolder;\n\n    if (!bordersHolder) {\n      bordersHolder = rootDocument.createElement('div');\n      bordersHolder.className = 'htBorders';\n      wtTable.bordersHolder = bordersHolder;\n      wtTable.spreader.appendChild(bordersHolder);\n    }\n    bordersHolder.appendChild(this.main);\n  }\n\n  /**\n   * Create multiple selector handler for mobile devices.\n   */\n  createMultipleSelectorHandles() {\n    const { rootDocument } = this.wot;\n\n    this.selectionHandles = {\n      top: rootDocument.createElement('DIV'),\n      topHitArea: rootDocument.createElement('DIV'),\n      bottom: rootDocument.createElement('DIV'),\n      bottomHitArea: rootDocument.createElement('DIV')\n    };\n    const width = 10;\n    const hitAreaWidth = 40;\n\n    this.selectionHandles.top.className = 'topSelectionHandle topLeftSelectionHandle';\n    this.selectionHandles.topHitArea.className = 'topSelectionHandle-HitArea topLeftSelectionHandle-HitArea';\n    this.selectionHandles.bottom.className = 'bottomSelectionHandle bottomRightSelectionHandle';\n    this.selectionHandles.bottomHitArea.className = 'bottomSelectionHandle-HitArea bottomRightSelectionHandle-HitArea';\n\n    this.selectionHandles.styles = {\n      top: this.selectionHandles.top.style,\n      topHitArea: this.selectionHandles.topHitArea.style,\n      bottom: this.selectionHandles.bottom.style,\n      bottomHitArea: this.selectionHandles.bottomHitArea.style\n    };\n\n    const hitAreaStyle = {\n      position: 'absolute',\n      height: `${hitAreaWidth}px`,\n      width: `${hitAreaWidth}px`,\n      'border-radius': `${parseInt(hitAreaWidth / 1.5, 10)}px`,\n    };\n\n    objectEach(hitAreaStyle, (value, key) => {\n      this.selectionHandles.styles.bottomHitArea[key] = value;\n      this.selectionHandles.styles.topHitArea[key] = value;\n    });\n\n    const handleStyle = {\n      position: 'absolute',\n      height: `${width}px`,\n      width: `${width}px`,\n      'border-radius': `${parseInt(width / 1.5, 10)}px`,\n      background: '#F5F5FF',\n      border: '1px solid #4285c8'\n    };\n\n    objectEach(handleStyle, (value, key) => {\n      this.selectionHandles.styles.bottom[key] = value;\n      this.selectionHandles.styles.top[key] = value;\n    });\n\n    this.main.appendChild(this.selectionHandles.top);\n    this.main.appendChild(this.selectionHandles.bottom);\n    this.main.appendChild(this.selectionHandles.topHitArea);\n    this.main.appendChild(this.selectionHandles.bottomHitArea);\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @returns {boolean}\n   */\n  isPartRange(row, col) {\n    const areaSelection = this.wot.selectionManager.getAreaSelection();\n\n    if (areaSelection.cellRange) {\n      if (row !== areaSelection.cellRange.to.row || col !== areaSelection.cellRange.to.col) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number} top The top position of the handler.\n   * @param {number} left The left position of the handler.\n   * @param {number} width The width of the handler.\n   * @param {number} height The height of the handler.\n   */\n  updateMultipleSelectionHandlesPosition(row, col, top, left, width, height) {\n    const isRtl = this.wot.wtSettings.getSetting('rtlMode');\n    const inlinePosProperty = isRtl ? 'right' : 'left';\n    const {\n      top: topStyles,\n      topHitArea: topHitAreaStyles,\n      bottom: bottomStyles,\n      bottomHitArea: bottomHitAreaStyles,\n    } = this.selectionHandles.styles;\n\n    const handleBorderSize = parseInt(topStyles.borderWidth, 10);\n    const handleSize = parseInt(topStyles.width, 10);\n    const hitAreaSize = parseInt(topHitAreaStyles.width, 10);\n    const totalTableWidth = this.wot.wtTable.getWidth();\n    const totalTableHeight = this.wot.wtTable.getHeight();\n\n    topStyles.top = `${parseInt(top - handleSize - 1, 10)}px`;\n    topStyles[inlinePosProperty] = `${parseInt(left - handleSize - 1, 10)}px`;\n\n    topHitAreaStyles.top = `${parseInt(top - ((hitAreaSize / 4) * 3), 10)}px`;\n    topHitAreaStyles[inlinePosProperty] = `${parseInt(left - ((hitAreaSize / 4) * 3), 10)}px`;\n\n    const bottomHandlerInline = Math.min(\n      parseInt(left + width, 10),\n      totalTableWidth - handleSize - (handleBorderSize * 2),\n    );\n    const bottomHandlerAreaInline = Math.min(\n      parseInt(left + width - (hitAreaSize / 4), 10),\n      totalTableWidth - hitAreaSize - (handleBorderSize * 2),\n    );\n\n    bottomStyles[inlinePosProperty] = `${bottomHandlerInline}px`;\n    bottomHitAreaStyles[inlinePosProperty] = `${bottomHandlerAreaInline}px`;\n\n    const bottomHandlerTop = Math.min(\n      parseInt(top + height, 10),\n      totalTableHeight - handleSize - (handleBorderSize * 2),\n    );\n    const bottomHandlerAreaTop = Math.min(\n      parseInt(top + height - (hitAreaSize / 4), 10),\n      totalTableHeight - hitAreaSize - (handleBorderSize * 2),\n    );\n\n    bottomStyles.top = `${bottomHandlerTop}px`;\n    bottomHitAreaStyles.top = `${bottomHandlerAreaTop}px`;\n\n    if (this.settings.border.cornerVisible && this.settings.border.cornerVisible()) {\n      topStyles.display = 'block';\n      topHitAreaStyles.display = 'block';\n\n      if (this.isPartRange(row, col)) {\n        bottomStyles.display = 'none';\n        bottomHitAreaStyles.display = 'none';\n      } else {\n        bottomStyles.display = 'block';\n        bottomHitAreaStyles.display = 'block';\n      }\n    } else {\n      topStyles.display = 'none';\n      bottomStyles.display = 'none';\n      topHitAreaStyles.display = 'none';\n      bottomHitAreaStyles.display = 'none';\n    }\n\n    if (row === this.wot.wtSettings.getSetting('fixedRowsTop') ||\n        col === this.wot.wtSettings.getSetting('fixedColumnsStart')) {\n      topStyles.zIndex = '9999';\n      topHitAreaStyles.zIndex = '9999';\n    } else {\n      topStyles.zIndex = '';\n      topHitAreaStyles.zIndex = '';\n    }\n  }\n\n  /**\n   * Show border around one or many cells.\n   *\n   * @param {Array} corners The corner coordinates.\n   */\n  appear(corners) {\n    if (this.disabled) {\n      return;\n    }\n\n    const { wtTable, rootDocument, rootWindow } = this.wot; // todo refactoring: consider about using internal facade (it is given by external code)\n    let fromRow;\n    let toRow;\n    let fromColumn;\n    let toColumn;\n    let rowHeader;\n    let columnHeader;\n\n    const rowsCount = wtTable.getRenderedRowsCount();\n\n    for (let i = 0; i < rowsCount; i += 1) {\n      const s = wtTable.rowFilter.renderedToSource(i);\n\n      if (s >= corners[0] && s <= corners[2]) {\n        fromRow = s;\n        rowHeader = corners[0];\n        break;\n      }\n    }\n\n    for (let i = rowsCount - 1; i >= 0; i -= 1) {\n      const s = wtTable.rowFilter.renderedToSource(i);\n\n      if (s >= corners[0] && s <= corners[2]) {\n        toRow = s;\n        break;\n      }\n    }\n\n    const columnsCount = wtTable.getRenderedColumnsCount();\n\n    for (let i = 0; i < columnsCount; i += 1) {\n      const s = wtTable.columnFilter.renderedToSource(i);\n\n      if (s >= corners[1] && s <= corners[3]) {\n        fromColumn = s;\n        columnHeader = corners[1];\n        break;\n      }\n    }\n\n    for (let i = columnsCount - 1; i >= 0; i -= 1) {\n      const s = wtTable.columnFilter.renderedToSource(i);\n\n      if (s >= corners[1] && s <= corners[3]) {\n        toColumn = s;\n        break;\n      }\n    }\n    if (fromRow === undefined || fromColumn === undefined) {\n      this.disappear();\n\n      return;\n    }\n\n    let fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));\n    const isMultiple = (fromRow !== toRow || fromColumn !== toColumn);\n    const toTD = isMultiple ? wtTable.getCell(this.wot.createCellCoords(toRow, toColumn)) : fromTD;\n    const fromOffset = offset(fromTD);\n    const toOffset = isMultiple ? offset(toTD) : fromOffset;\n    const containerOffset = offset(wtTable.TABLE);\n    const containerWidth = outerWidth(wtTable.TABLE);\n    const minTop = fromOffset.top;\n    const minLeft = fromOffset.left;\n    const isRtl = this.wot.wtSettings.getSetting('rtlMode');\n\n    let inlineStartPos = 0;\n    let width = 0;\n\n    if (isRtl) {\n      const fromWidth = outerWidth(fromTD);\n      const gridRightPos = rootWindow.innerWidth - containerOffset.left - containerWidth;\n\n      width = minLeft + fromWidth - toOffset.left;\n      inlineStartPos = rootWindow.innerWidth - minLeft - fromWidth - gridRightPos - 1;\n\n    } else {\n      width = toOffset.left + outerWidth(toTD) - minLeft;\n      inlineStartPos = minLeft - containerOffset.left - 1;\n    }\n\n    if (this.isEntireColumnSelected(fromRow, toRow)) {\n      const modifiedValues = this.getDimensionsFromHeader('columns', fromColumn, toColumn, rowHeader, containerOffset);\n      let fromTH = null;\n\n      if (modifiedValues) {\n        [fromTH, inlineStartPos, width] = modifiedValues;\n      }\n\n      if (fromTH) {\n        fromTD = fromTH;\n      }\n    }\n\n    let top = minTop - containerOffset.top - 1;\n    let height = toOffset.top + outerHeight(toTD) - minTop;\n\n    if (this.isEntireRowSelected(fromColumn, toColumn)) {\n      const modifiedValues = this.getDimensionsFromHeader('rows', fromRow, toRow, columnHeader, containerOffset);\n      let fromTH = null;\n\n      if (modifiedValues) {\n        [fromTH, top, height] = modifiedValues;\n      }\n\n      if (fromTH) {\n        fromTD = fromTH;\n      }\n    }\n\n    const style = getComputedStyle(fromTD, rootWindow);\n\n    if (parseInt(style.borderTopWidth, 10) > 0) {\n      top += 1;\n      height = height > 0 ? height - 1 : 0;\n    }\n    if (parseInt(style[isRtl ? 'borderRightWidth' : 'borderLeftWidth'], 10) > 0) {\n      inlineStartPos += 1;\n      width = width > 0 ? width - 1 : 0;\n    }\n\n    const inlinePosProperty = isRtl ? 'right' : 'left';\n\n    this.topStyle.top = `${top}px`;\n    this.topStyle[inlinePosProperty] = `${inlineStartPos}px`;\n    this.topStyle.width = `${width}px`;\n    this.topStyle.display = 'block';\n\n    this.startStyle.top = `${top}px`;\n    this.startStyle[inlinePosProperty] = `${inlineStartPos}px`;\n    this.startStyle.height = `${height}px`;\n    this.startStyle.display = 'block';\n\n    const delta = Math.floor(this.settings.border.width / 2);\n\n    this.bottomStyle.top = `${top + height - delta}px`;\n    this.bottomStyle[inlinePosProperty] = `${inlineStartPos}px`;\n    this.bottomStyle.width = `${width}px`;\n    this.bottomStyle.display = 'block';\n\n    this.endStyle.top = `${top}px`;\n    this.endStyle[inlinePosProperty] = `${inlineStartPos + width - delta}px`;\n    this.endStyle.height = `${height + 1}px`;\n    this.endStyle.display = 'block';\n\n    let cornerVisibleSetting = this.settings.border.cornerVisible;\n\n    cornerVisibleSetting = typeof cornerVisibleSetting === 'function' ?\n      cornerVisibleSetting(this.settings.layerLevel) : cornerVisibleSetting;\n\n    const hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn);\n    let [checkRow, checkCol] = [toRow, toColumn];\n\n    if (hookResult && Array.isArray(hookResult)) {\n      [,, checkRow, checkCol] = hookResult;\n    }\n\n    if (isMobileBrowser() || !cornerVisibleSetting || this.isPartRange(checkRow, checkCol)) {\n      this.cornerStyle.display = 'none';\n\n    } else {\n      this.cornerStyle.top = `${top + height + this.cornerCenterPointOffset - 1}px`;\n      this.cornerStyle[inlinePosProperty] = `${inlineStartPos + width + this.cornerCenterPointOffset - 1}px`;\n      this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth;\n      this.cornerStyle.width = this.cornerDefaultStyle.width;\n\n      // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars.\n      this.cornerStyle.display = 'none';\n\n      let trimmingContainer = getTrimmingContainer(wtTable.TABLE);\n      const trimToWindow = trimmingContainer === rootWindow;\n\n      if (trimToWindow) {\n        trimmingContainer = rootDocument.documentElement;\n      }\n\n      const cornerHalfWidth = parseInt(this.cornerDefaultStyle.width, 10) / 2;\n      const cornerHalfHeight = parseInt(this.cornerDefaultStyle.height, 10) / 2;\n\n      if (toColumn === this.wot.getSetting('totalColumns') - 1) {\n        const toTdOffsetLeft = trimToWindow ? toTD.getBoundingClientRect().left : toTD.offsetLeft;\n        let cornerOverlappingContainer = false;\n        let cornerEdge = 0;\n\n        if (isRtl) {\n          cornerEdge = toTdOffsetLeft - (parseInt(this.cornerDefaultStyle.width, 10) / 2);\n          cornerOverlappingContainer = cornerEdge < 0;\n\n        } else {\n          cornerEdge = toTdOffsetLeft + outerWidth(toTD) + (parseInt(this.cornerDefaultStyle.width, 10) / 2);\n          cornerOverlappingContainer = cornerEdge >= innerWidth(trimmingContainer);\n        }\n\n        if (cornerOverlappingContainer) {\n          this.cornerStyle[inlinePosProperty] = `${Math\n            .floor(inlineStartPos + width + this.cornerCenterPointOffset - cornerHalfWidth)}px`;\n          this.cornerStyle[isRtl ? 'borderLeftWidth' : 'borderRightWidth'] = 0;\n        }\n      }\n\n      if (toRow === this.wot.getSetting('totalRows') - 1) {\n        const toTdOffsetTop = trimToWindow ? toTD.getBoundingClientRect().top : toTD.offsetTop;\n        const cornerBottomEdge = toTdOffsetTop + outerHeight(toTD) + (parseInt(this.cornerDefaultStyle.height, 10) / 2);\n        const cornerOverlappingContainer = cornerBottomEdge >= innerHeight(trimmingContainer);\n\n        if (cornerOverlappingContainer) {\n          this.cornerStyle.top = `${Math.floor(top + height + this.cornerCenterPointOffset - cornerHalfHeight)}px`;\n          this.cornerStyle.borderBottomWidth = 0;\n        }\n      }\n\n      this.cornerStyle.display = 'block';\n    }\n\n    if (isMobileBrowser() && this.instance.getSetting('isDataViewInstance')) {\n      this.updateMultipleSelectionHandlesPosition(toRow, toColumn, top, inlineStartPos, width, height);\n    }\n  }\n\n  /**\n   * Check whether an entire column of cells is selected.\n   *\n   * @private\n   * @param {number} startRowIndex Start row index.\n   * @param {number} endRowIndex End row index.\n   * @returns {boolean}\n   */\n  isEntireColumnSelected(startRowIndex, endRowIndex) {\n    return startRowIndex === this.wot.wtTable.getFirstRenderedRow() &&\n      endRowIndex === this.wot.wtTable.getLastRenderedRow();\n  }\n\n  /**\n   * Check whether an entire row of cells is selected.\n   *\n   * @private\n   * @param {number} startColumnIndex Start column index.\n   * @param {number} endColumnIndex End column index.\n   * @returns {boolean}\n   */\n  isEntireRowSelected(startColumnIndex, endColumnIndex) {\n    return startColumnIndex === this.wot.wtTable.getFirstRenderedColumn() &&\n      endColumnIndex === this.wot.wtTable.getLastRenderedColumn();\n  }\n\n  /**\n   * Get left/top index and width/height depending on the `direction` provided.\n   *\n   * @private\n   * @param {string} direction `rows` or `columns`, defines if an entire column or row is selected.\n   * @param {number} fromIndex Start index of the selection.\n   * @param {number} toIndex End index of the selection.\n   * @param {number} headerIndex The header index as negative value.\n   * @param {number} containerOffset Offset of the container.\n   * @returns {Array|boolean} Returns an array of [headerElement, left, width] or [headerElement, top, height], depending on `direction` (`false` in case of an error getting the headers).\n   */\n  getDimensionsFromHeader(direction, fromIndex, toIndex, headerIndex, containerOffset) {\n    const { wtTable } = this.wot;\n    const rootHotElement = wtTable.wtRootElement.parentNode;\n    let getHeaderFn = null;\n    let dimensionFn = null;\n    let entireSelectionClassname = null;\n    let index = null;\n    let dimension = null;\n    let dimensionProperty = null;\n    let startHeader = null;\n    let endHeader = null;\n\n    switch (direction) {\n      case 'rows':\n        getHeaderFn = (...args) => wtTable.getRowHeader(...args);\n        dimensionFn = (...args) => outerHeight(...args);\n        entireSelectionClassname = 'ht__selection--rows';\n        dimensionProperty = 'top';\n\n        break;\n\n      case 'columns':\n        getHeaderFn = (...args) => wtTable.getColumnHeader(...args);\n        dimensionFn = (...args) => outerWidth(...args);\n        entireSelectionClassname = 'ht__selection--columns';\n        dimensionProperty = 'left';\n        break;\n      default:\n    }\n\n    if (rootHotElement.classList.contains(entireSelectionClassname)) {\n      const columnHeaderLevelCount = this.wot.getSetting('columnHeaders').length;\n\n      startHeader = getHeaderFn(fromIndex, columnHeaderLevelCount - headerIndex);\n      endHeader = getHeaderFn(toIndex, columnHeaderLevelCount - headerIndex);\n\n      if (!startHeader || !endHeader) {\n        return false;\n      }\n\n      const startHeaderOffset = offset(startHeader);\n      const endOffset = offset(endHeader);\n\n      if (startHeader && endHeader) {\n        index = startHeaderOffset[dimensionProperty] - containerOffset[dimensionProperty] - 1;\n        dimension = endOffset[dimensionProperty] + dimensionFn(endHeader) - startHeaderOffset[dimensionProperty];\n      }\n\n      return [startHeader, index, dimension];\n    }\n\n    return false;\n  }\n\n  /**\n   * Change border style.\n   *\n   * @private\n   * @param {string} borderElement Coordinate where add/remove border: top, bottom, start, end.\n   * @param {object} border The border object descriptor.\n   */\n  changeBorderStyle(borderElement, border) {\n    const style = this[borderElement].style;\n    const borderStyle = border[borderElement];\n\n    if (!borderStyle || borderStyle.hide) {\n      addClass(this[borderElement], 'hidden');\n\n    } else {\n      if (hasClass(this[borderElement], 'hidden')) {\n        removeClass(this[borderElement], 'hidden');\n      }\n\n      style.backgroundColor = borderStyle.color;\n\n      if (borderElement === 'top' || borderElement === 'bottom') {\n        style.height = `${borderStyle.width}px`;\n      }\n\n      if (borderElement === 'start' || borderElement === 'end') {\n        style.width = `${borderStyle.width}px`;\n      }\n    }\n  }\n\n  /**\n   * Change border style to default.\n   *\n   * @private\n   * @param {string} position The position type (\"top\", \"bottom\", \"start\", \"end\") to change.\n   */\n  changeBorderToDefaultStyle(position) {\n    const defaultBorder = {\n      width: 1,\n      color: '#000',\n    };\n    const style = this[position].style;\n\n    style.backgroundColor = defaultBorder.color;\n    style.width = `${defaultBorder.width}px`;\n    style.height = `${defaultBorder.width}px`;\n  }\n\n  /**\n   * Toggle class 'hidden' to element.\n   *\n   * @private\n   * @param {string} borderElement Coordinate where add/remove border: top, bottom, start, end.\n   * @param {boolean} [remove] Defines type of the action to perform.\n   */\n  toggleHiddenClass(borderElement, remove) {\n    this.changeBorderToDefaultStyle(borderElement);\n\n    if (remove) {\n      addClass(this[borderElement], 'hidden');\n    } else {\n      removeClass(this[borderElement], 'hidden');\n    }\n  }\n\n  /**\n   * Hide border.\n   */\n  disappear() {\n    this.topStyle.display = 'none';\n    this.bottomStyle.display = 'none';\n    this.startStyle.display = 'none';\n    this.endStyle.display = 'none';\n    this.cornerStyle.display = 'none';\n\n    if (isMobileBrowser() && this.instance.getSetting('isDataViewInstance')) {\n      this.selectionHandles.styles.top.display = 'none';\n      this.selectionHandles.styles.topHitArea.display = 'none';\n      this.selectionHandles.styles.bottom.display = 'none';\n      this.selectionHandles.styles.bottomHitArea.display = 'none';\n    }\n  }\n\n  /**\n   * Cleans up all the DOM state related to a Border instance. Call this prior to deleting a Border instance.\n   */\n  destroy() {\n    this.eventManager.destroyWithOwnEventsOnly();\n    this.main.parentNode.removeChild(this.main);\n  }\n}\n\nexport default Border;\n","import {\n  outerHeight,\n  outerWidth,\n  setOverlayPosition,\n  resetCssTransform,\n} from '../../../../helpers/dom/element';\nimport TopInlineStartCornerOverlayTable from '../table/topInlineStartCorner';\nimport { Overlay } from './_base';\nimport {\n  CLONE_TOP_INLINE_START_CORNER,\n} from './constants';\n\n/**\n * @class TopInlineStartCornerOverlay\n */\nexport class TopInlineStartCornerOverlay extends Overlay {\n  /**\n   * The instance of the Top overlay.\n   *\n   * @type {TopOverlay}\n   */\n  topOverlay;\n  /**\n   * The instance of the InlineStart overlay.\n   *\n   * @type {InlineStartOverlay}\n   */\n  inlineStartOverlay;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   * @param {TopOverlay} topOverlay The instance of the Top overlay.\n   * @param {InlineStartOverlay} inlineStartOverlay The instance of the InlineStart overlay.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings, topOverlay, inlineStartOverlay) {\n    super(wotInstance, facadeGetter, CLONE_TOP_INLINE_START_CORNER, wtSettings, domBindings);\n    this.topOverlay = topOverlay;\n    this.inlineStartOverlay = inlineStartOverlay;\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {TopInlineStartCornerOverlayTable}\n   */\n  createTable(...args) {\n    return new TopInlineStartCornerOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderTopOverlay')\n      && this.wtSettings.getSetting('shouldRenderInlineStartOverlay');\n  }\n\n  /**\n   * Updates the corner overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    this.updateTrimmingContainer();\n\n    if (!this.wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n\n    if (this.trimmingContainer === this.domBindings.rootWindow) {\n      const left = this.inlineStartOverlay.getOverlayOffset() * (this.isRtl() ? -1 : 1);\n      const top = this.topOverlay.getOverlayOffset();\n\n      setOverlayPosition(overlayRoot, `${left}px`, `${top}px`);\n    } else {\n      resetCssTransform(overlayRoot);\n    }\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n    const tableWidth = outerWidth(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRoot.style.height = `${tableHeight}px`;\n    overlayRoot.style.width = `${tableWidth}px`;\n\n    return false;\n  }\n}\n","import Table from '../table';\nimport stickyRowsTop from './mixin/stickyRowsTop';\nimport stickyColumnsStart from './mixin/stickyColumnsStart';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_TOP_INLINE_START_CORNER } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to topInlineStartCornerOverlay\n * (in RTL mode the overlay sits on the right of the screen), implemented through mixins.\n *\n * @mixes stickyRowsTop\n * @mixes stickyColumnsStart\n */\nclass TopInlineStartCornerOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_TOP_INLINE_START_CORNER);\n  }\n}\n\nmixin(TopInlineStartCornerOverlayTable, stickyRowsTop);\nmixin(TopInlineStartCornerOverlayTable, stickyColumnsStart);\n\nexport default TopInlineStartCornerOverlayTable;\n","import { defineGetter } from '../../../../../helpers/object';\n\nconst MIXIN_NAME = 'stickyRowsTop';\n\n/**\n * Mixin for the subclasses of `Table` with implementations of\n * helper methods that are related to rows.\n * This mixin is meant to be applied in the subclasses of `Table`\n * that use sticky rendering of the top rows in the vertical axis.\n *\n * @type {object}\n */\nconst stickyRowsTop = {\n  /**\n   * Get the source index of the first rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstRenderedRow() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n\n    if (totalRows === 0) {\n      return -1;\n    }\n\n    return 0;\n  },\n\n  /**\n   * Get the source index of the first row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the first row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getFirstPartiallyVisibleRow() {\n    return this.getFirstRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last rendered row. If no rows are rendered, returns an error code: -1.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastRenderedRow() {\n    return this.getRenderedRowsCount() - 1;\n  },\n\n  /**\n   * Get the source index of the last row fully visible in the viewport. If no rows are fully visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the source index of the last row partially visible in the viewport. If no rows are partially visible, returns an error code: -1.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getLastPartiallyVisibleRow() {\n    return this.getLastRenderedRow();\n  },\n\n  /**\n   * Get the number of rendered rows.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getRenderedRowsCount() {\n    const totalRows = this.wtSettings.getSetting('totalRows');\n\n    return Math.min(this.wtSettings.getSetting('fixedRowsTop'), totalRows);\n  },\n\n  /**\n   * Get the number of fully visible rows in the viewport.\n   * Assumes that all rendered rows are fully visible.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getVisibleRowsCount() {\n    return this.getRenderedRowsCount();\n  },\n\n  /**\n   * Get the number of rendered column headers.\n   *\n   * @returns {number}\n   * @this Table\n   */\n  getColumnHeadersCount() {\n    return this.dataAccessObject.columnHeaders.length;\n  }\n};\n\ndefineGetter(stickyRowsTop, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default stickyRowsTop;\n","import {\n  addClass,\n  getMaximumScrollTop,\n  getScrollbarWidth,\n  getScrollTop,\n  getWindowScrollLeft,\n  hasClass,\n  outerHeight,\n  removeClass,\n  setOverlayPosition,\n  resetCssTransform,\n} from '../../../../helpers/dom/element';\nimport TopOverlayTable from './../table/top';\nimport { Overlay } from './_base';\nimport { CORNER_DEFAULT_STYLE } from '../selection';\nimport {\n  CLONE_TOP,\n} from './constants';\n\n/**\n * @class TopOverlay\n */\nexport class TopOverlay extends Overlay {\n  /**\n   * Cached value which holds the previous value of the `fixedRowsTop` option.\n   * It is used as a comparison value that can be used to detect changes in this value.\n   *\n   * @type {number}\n   */\n  cachedFixedRowsTop = -1;\n\n  /**\n   * @param {Walkontable} wotInstance The Walkontable instance. @TODO refactoring: check if can be deleted.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {DomBindings} domBindings Dom elements bound to the current instance.\n   */\n  constructor(wotInstance, facadeGetter, wtSettings, domBindings) {\n    super(wotInstance, facadeGetter, CLONE_TOP, wtSettings, domBindings);\n    this.cachedFixedRowsTop = this.wtSettings.getSetting('fixedRowsTop');\n  }\n\n  /**\n   * Factory method to create a subclass of `Table` that is relevant to this overlay.\n   *\n   * @see Table#constructor\n   * @param {...*} args Parameters that will be forwarded to the `Table` constructor.\n   * @returns {TopOverlayTable}\n   */\n  createTable(...args) {\n    return new TopOverlayTable(...args);\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {boolean}\n   */\n  shouldBeRendered() {\n    return this.wtSettings.getSetting('shouldRenderTopOverlay');\n  }\n\n  /**\n   * Updates the top overlay position.\n   *\n   * @returns {boolean}\n   */\n  resetFixedPosition() {\n    if (!this.needFullRender || !this.shouldBeRendered() || !this.wot.wtTable.holder.parentNode) {\n      // removed from DOM\n      return false;\n    }\n\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayPosition = 0;\n    let skipInnerBorderAdjusting = false;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      const { wtTable } = this.wot;\n      const hiderRect = wtTable.hider.getBoundingClientRect();\n      const bottom = Math.ceil(hiderRect.bottom);\n      const rootHeight = overlayRoot.offsetHeight;\n\n      // This checks if the overlay is going to an infinite loop caused by added (or removed)\n      // `innerBorderTop` class name. Toggling the class name shifts the viewport by 1px and\n      // triggers the `scroll` event. It causes the table to render. The new render cycle takes into,\n      // account the shift and toggles the class name again. This causes the next loops. This\n      // happens only on Chrome (#7256).\n      //\n      // When we detect that the table bottom position is the same as the overlay bottom,\n      // do not toggle the class name.\n      //\n      // This workaround will be able to be cleared after merging the SVG borders, which introduces\n      // frozen lines (no more `innerBorderTop` workaround).\n      skipInnerBorderAdjusting = bottom === rootHeight;\n      overlayPosition = this.getOverlayOffset();\n\n      setOverlayPosition(overlayRoot, '0px', `${overlayPosition}px`);\n\n    } else {\n      overlayPosition = this.getScrollPosition();\n      resetCssTransform(overlayRoot);\n    }\n\n    const positionChanged = this.adjustHeaderBordersPosition(overlayPosition, skipInnerBorderAdjusting);\n\n    this.adjustElementsSize();\n\n    return positionChanged;\n  }\n\n  /**\n   * Sets the main overlay's vertical scroll position.\n   *\n   * @param {number} pos The scroll position.\n   * @returns {boolean}\n   */\n  setScrollPosition(pos) {\n    const rootWindow = this.domBindings.rootWindow;\n    let result = false;\n\n    if (this.mainTableScrollableElement === rootWindow && rootWindow.scrollY !== pos) {\n      rootWindow.scrollTo(getWindowScrollLeft(rootWindow), pos);\n      result = true;\n\n    } else if (this.mainTableScrollableElement.scrollTop !== pos) {\n      this.mainTableScrollableElement.scrollTop = pos;\n      result = true;\n    }\n\n    return result;\n  }\n\n  /**\n   * Triggers onScroll hook callback.\n   */\n  onScroll() {\n    this.wtSettings.getSetting('onScrollHorizontally');\n  }\n\n  /**\n   * Calculates total sum cells height.\n   *\n   * @param {number} from Row index which calculates started from.\n   * @param {number} to Row index where calculation is finished.\n   * @returns {number} Height sum.\n   */\n  sumCellSizes(from, to) {\n    const defaultRowHeight = this.wtSettings.getSetting('defaultRowHeight');\n    let row = from;\n    let sum = 0;\n\n    while (row < to) {\n      const height = this.wot.wtTable.getRowHeight(row);\n\n      sum += height === undefined ? defaultRowHeight : height;\n      row += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * Adjust overlay root element, children and master table element sizes (width, height).\n   */\n  adjustElementsSize() {\n    this.updateTrimmingContainer();\n\n    if (this.needFullRender) {\n      this.adjustRootElementSize();\n      this.adjustRootChildrenSize();\n    }\n  }\n\n  /**\n   * Adjust overlay root element size (width and height).\n   */\n  adjustRootElementSize() {\n    const { wtTable } = this.wot;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const scrollbarWidth = getScrollbarWidth(rootDocument);\n    const overlayRoot = this.clone.wtTable.holder.parentNode;\n    const overlayRootStyle = overlayRoot.style;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n    if (this.trimmingContainer !== rootWindow || preventOverflow === 'horizontal') {\n      let width = this.wot.wtViewport.getWorkspaceWidth();\n\n      if (this.wot.wtOverlays.hasScrollbarRight) {\n        width -= scrollbarWidth;\n      }\n\n      width = Math.min(width, wtTable.wtRootElement.scrollWidth);\n      overlayRootStyle.width = `${width}px`;\n\n    } else {\n      overlayRootStyle.width = '';\n    }\n\n    this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n\n    let tableHeight = outerHeight(this.clone.wtTable.TABLE);\n\n    if (!this.wot.wtTable.hasDefinedSize()) {\n      tableHeight = 0;\n    }\n\n    overlayRootStyle.height = `${tableHeight}px`;\n  }\n\n  /**\n   * Adjust overlay root childs size.\n   */\n  adjustRootChildrenSize() {\n    const { holder } = this.clone.wtTable;\n    const selectionCornerOffset = this.wot.selectionManager\n      .getFocusSelection() ? parseInt(CORNER_DEFAULT_STYLE.height, 10) / 2 : 0;\n\n    this.clone.wtTable.hider.style.width = this.hider.style.width;\n    holder.style.width = holder.parentNode.style.width;\n    // Add selection corner protruding part to the holder total height to make sure that\n    // borders' corner won't be cut after vertical scroll (#6937).\n    holder.style.height = `${parseInt(holder.parentNode.style.height, 10) + selectionCornerOffset}px`;\n  }\n\n  /**\n   * Adjust the overlay dimensions and position.\n   */\n  applyToDOM() {\n    const total = this.wtSettings.getSetting('totalRows');\n\n    if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n      this.spreader.style.top = `${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;\n\n    } else if (total === 0) {\n      // can happen if there are 0 rows\n      this.spreader.style.top = '0';\n\n    } else {\n      throw new Error('Incorrect value of the rowsRenderCalculator');\n    }\n    this.spreader.style.bottom = '';\n\n    if (this.needFullRender) {\n      this.syncOverlayOffset();\n    }\n  }\n\n  /**\n   * Synchronize calculated left position to an element.\n   */\n  syncOverlayOffset() {\n    const styleProperty = this.isRtl() ? 'right' : 'left';\n    const { spreader } = this.clone.wtTable;\n\n    if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n      spreader.style[styleProperty] = `${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;\n\n    } else {\n      spreader.style[styleProperty] = '';\n    }\n  }\n\n  /**\n   * Scrolls vertically to a row.\n   *\n   * @param {number} sourceRow Row index which you want to scroll to.\n   * @param {boolean} [bottomEdge] If `true`, scrolls according to the bottom edge (top edge is by default).\n   * @returns {boolean}\n   */\n  scrollTo(sourceRow, bottomEdge) {\n    const { wot, wtSettings } = this;\n    const sourceInstance = wot.cloneSource ? wot.cloneSource : wot;\n    const mainHolder = sourceInstance.wtTable.holder;\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n    const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n    const columnHeaderBorderCompensation = (\n      fixedRowsTop === 0 &&\n      columnHeaders.length > 0 &&\n      !hasClass(mainHolder.parentNode, 'innerBorderTop')\n    ) ? 1 : 0;\n    let newY = this.getTableParentOffset();\n    let scrollbarCompensation = 0;\n\n    if (bottomEdge) {\n      const rowHeight = this.wot.wtTable.getRowHeight(sourceRow);\n      const viewportHeight = this.wot.wtViewport.getViewportHeight();\n\n      if (rowHeight > viewportHeight) {\n        bottomEdge = false;\n      }\n    }\n\n    if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n      scrollbarCompensation = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    if (bottomEdge) {\n      const fixedRowsBottom = wtSettings.getSetting('fixedRowsBottom');\n      const totalRows = wtSettings.getSetting('totalRows');\n\n      newY += this.sumCellSizes(0, sourceRow + 1);\n      newY -= wot.wtViewport.getViewportHeight() - this.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n      // Fix 1 pixel offset when cell is selected\n      newY += 1;\n      // Compensate for the bottom header border if scrolled from the absolute top.\n      newY += columnHeaderBorderCompensation;\n\n    } else {\n      newY += this.sumCellSizes(wtSettings.getSetting('fixedRowsTop'), sourceRow);\n    }\n\n    newY += scrollbarCompensation;\n\n    // If the table is scrolled all the way up when starting the scroll and going to be scrolled to the bottom,\n    // we need to compensate for the potential header bottom border height.\n    if (\n      getMaximumScrollTop(this.mainTableScrollableElement) === newY - columnHeaderBorderCompensation &&\n      columnHeaderBorderCompensation > 0\n    ) {\n      this.wot.wtOverlays.expandHiderVerticallyBy(columnHeaderBorderCompensation);\n    }\n\n    return this.setScrollPosition(newY);\n  }\n\n  /**\n   * Gets table parent top position.\n   *\n   * @returns {number}\n   */\n  getTableParentOffset() {\n    if (this.mainTableScrollableElement === this.domBindings.rootWindow) {\n      return this.wot.wtTable.holderOffset.top;\n    }\n\n    return 0;\n  }\n\n  /**\n   * Gets the main overlay's vertical scroll position.\n   *\n   * @returns {number} Main table's vertical scroll position.\n   */\n  getScrollPosition() {\n    return getScrollTop(this.mainTableScrollableElement, this.domBindings.rootWindow);\n  }\n\n  /**\n   * Gets the main overlay's vertical overlay offset.\n   *\n   * @returns {number} Main table's vertical overlay offset.\n   */\n  getOverlayOffset() {\n    const { rootWindow } = this.domBindings;\n    const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n    let overlayOffset = 0;\n\n    if (this.trimmingContainer === rootWindow && (!preventOverflow || preventOverflow !== 'vertical')) {\n      const rootHeight = this.wot.wtTable.getTotalHeight();\n      const overlayRootHeight = this.clone.wtTable.getTotalHeight();\n      const maxOffset = rootHeight - overlayRootHeight;\n\n      overlayOffset = Math.max(this.getScrollPosition() - this.getTableParentOffset(), 0);\n\n      if (overlayOffset > maxOffset) {\n        overlayOffset = 0;\n      }\n    }\n\n    return overlayOffset;\n  }\n\n  /**\n   * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n   *\n   * @param {number} position Header Y position if trimming container is window or scroll top if not.\n   * @param {boolean} [skipInnerBorderAdjusting=false] If `true` the inner border adjusting will be skipped.\n   * @returns {boolean}\n   */\n  adjustHeaderBordersPosition(position, skipInnerBorderAdjusting = false) {\n    const { wtSettings } = this;\n    const masterParent = this.wot.wtTable.holder.parentNode;\n    const totalColumns = wtSettings.getSetting('totalColumns');\n    const preventHorizontalOverflow = wtSettings.getSetting('preventOverflow') === 'horizontal';\n\n    if (totalColumns) {\n      removeClass(masterParent, 'emptyColumns');\n    } else {\n      addClass(masterParent, 'emptyColumns');\n    }\n\n    let positionChanged = false;\n\n    if (!skipInnerBorderAdjusting && !preventHorizontalOverflow) {\n      const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n      const areFixedRowsTopChanged = this.cachedFixedRowsTop !== fixedRowsTop;\n      const columnHeaders = wtSettings.getSetting('columnHeaders');\n\n      if ((areFixedRowsTopChanged || fixedRowsTop === 0) && columnHeaders.length > 0) {\n        const previousState = hasClass(masterParent, 'innerBorderTop');\n\n        this.cachedFixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n\n        if (position || wtSettings.getSetting('totalRows') === 0) {\n          addClass(masterParent, 'innerBorderTop');\n          positionChanged = !previousState;\n        } else {\n          removeClass(masterParent, 'innerBorderTop');\n          positionChanged = previousState;\n        }\n      }\n    }\n\n    return positionChanged;\n  }\n}\n","import Table from '../table';\nimport stickyRowsTop from './mixin/stickyRowsTop';\nimport calculatedColumns from './mixin/calculatedColumns';\nimport { mixin } from '../../../../helpers/object';\nimport { CLONE_TOP } from '../overlay';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to TopOverlay, implemented through mixins.\n *\n * @mixes stickyRowsTop\n * @mixes calculatedColumns\n */\nclass TopOverlayTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, CLONE_TOP);\n  }\n}\n\nmixin(TopOverlayTable, stickyRowsTop);\nmixin(TopOverlayTable, calculatedColumns);\n\nexport default TopOverlayTable;\n","import { fastInnerText } from '../../../helpers/dom/element';\nimport { objectEach } from '../../../helpers/object';\n/**\n * @todo Describe options.\n * @typedef SettingsPure\n *\n * @property {Option} facade @todo desc.\n * @property {Option} ariaTags Option `ariaTags`.\n * @property {Option} cellRenderer Option `cellRenderer`.\n * @property {Option} columnHeaders Option `columnHeaders`.\n * @property {Option} columnWidth Option `columnWidth`.\n * @property {Option} currentRowClassName Option `currentRowClassName`.\n * @property {Option} data Option `data`.\n * @property {Option} defaultColumnWidth Option `defaultColumnWidth`.\n * @property {Option} defaultRowHeight Option `defaultRowHeight`.\n * @property {Option} externalRowCalculator Option `externalRowCalculator`.\n * @property {Option} fixedColumnsStart Option `fixedColumnsStart`.\n * @property {Option} fixedRowsBottom Option `fixedRowsBottom`.\n * @property {Option} fixedRowsTop Option `fixedRowsTop`.\n * @property {Option} freezeOverlays Option `freezeOverlays`.\n * @property {Option} groups Option `groups`.\n * @property {Option} hideBorderOnMouseDownOver Option `hideBorderOnMouseDownOver`.\n * @property {Option} isRtl Option `isRtl`.\n * @property {Option} isDataViewInstance Option `isDataViewInstance`.\n * @property {Option} minSpareRows Option `minSpareRows`.\n * @property {Option} onBeforeHighlightingColumnHeader Option `onBeforeHighlightingColumnHeader`.\n * @property {Option} onBeforeHighlightingRowHeader Option `onBeforeHighlightingRowHeader`.\n * @property {Option} onBeforeRemoveCellClassNames Option `onBeforeRemoveCellClassNames`.\n * @property {Option} onBeforeStretchingColumnWidth Option `onBeforeStretchingColumnWidth`.\n * @property {Option} preventOverflow Option `preventOverflow`.\n * @property {Option} preventWheel Option `preventWheel`.\n * @property {Option} renderAllColumns Option `renderAllColumns`.\n * @property {Option} renderAllRows Option `renderAllRows`.\n * @property {Option} rowHeaders Option `rowHeaders`.\n * @property {Option} rowHeightOption `rowHeight`.\n * @property {Option} rowHeightByOverlayName Option `rowHeightByOverlayName`.\n * @property {Option} shouldRenderBottomOverlay Option `shouldRenderBottomOverlay`.\n * @property {Option} shouldRenderInlineStartOverlay Option `shouldRenderInlineStartOverlay`.\n * @property {Option} shouldRenderTopOverlay Option `shouldRenderTopOverlay`.\n * @property {Option} stretchH Option `stretchH`.\n * @property {Option} table Option `table`.\n * @property {Option} totalColumns Option `totalColumns`.\n * @property {Option} totalRows Option `totalRows`.\n * @property {?Option} beforeDraw Option `beforeDraw`.\n * @property {?Option} columnHeaderHeight Option `columnHeaderHeight`.\n * @property {?Option} currentColumnClassName Option `currentColumnClassName`.\n * @property {?Option} headerClassName Option `headerClassName`.\n * @property {?Option} onAfterDrawSelection Option `onAfterDrawSelection`.\n * @property {?Option} onAfterMomentumScroll Option `onAfterMomentumScroll`.\n * @property {?Option} onBeforeDrawBorders Option `onBeforeDrawBorders`.\n * @property {?Option} onBeforeTouchScroll Option `onBeforeTouchScroll`.\n * @property {?Option} onCellContextMenu Option `onCellContextMenu`.\n * @property {?Option} onCellCornerDblClick Option `onCellCornerDblClick`.\n * @property {?Option} onCellCornerMouseDown Option `onCellCornerMouseDown`.\n * @property {?Option} onCellDblClick Option `onCellDblClick`.\n * @property {?Option} onCellMouseDown Option `onCellMouseDown`.\n * @property {?Option} onCellMouseOut Option `onCellMouseOut`.\n * @property {?Option} onCellMouseOver Option `onCellMouseOver`.\n * @property {?Option} onCellMouseUp Option `onCellMouseUp`.\n * @property {?Option} onDraw Option `onDraw`.\n * @property {?Option} onModifyGetCellCoords Option `onModifyGetCellCoords`.\n * @property {?Option} onModifyRowHeaderWidth Option `onModifyRowHeaderWidth`.\n * @property {?Option} onBeforeViewportScrollHorizontally Option `onBeforeViewportScrollHorizontally`.\n * @property {?Option} onBeforeViewportScrollVertically Option `onBeforeViewportScrollVertically`.\n * @property {?Option} onScrollHorizontally Option `onScrollHorizontally`.\n * @property {?Option} onScrollVertically Option `onScrollVertically`.\n * @property {?Option} onWindowResize Option `onWindowResize`.\n * @property {?Option} rowHeaderWidth Option `rowHeaderWidth`.\n * @property {?Option} selections Option `selections`.\n * @property {?Option} viewportColumnCalculatorOverride Option `viewportColumnCalculatorOverride`.\n * @property {?Option} viewportRowCalculatorOverride Option `viewportRowCalculatorOverride`.\n */\n\n/**\n * @template TValue.\n * @typedef { TValue | Array.<TValue> | (function(...*): TValue) } Option\n */\n\n/**\n * @class Settings\n */\nexport default class Settings {\n\n  /**\n   * Reference to settings.\n   *\n   * @protected\n   * @type {SettingsPure}\n   */\n  settings = {};\n\n  /**\n   * The defaults values of settings.\n   * Void 0 means it is required, null means it can be empty.\n   *\n   * @public\n   * @type {Readonly<SettingsPure>}\n   */\n  defaults = Object.freeze(this.getDefaults());\n\n  /**\n   * @param {SettingsPure} settings The user defined settings.\n   */\n  constructor(settings) {\n    objectEach(this.defaults, (value, key) => {\n      if (settings[key] !== undefined) {\n        this.settings[key] = settings[key];\n\n      } else if (value === undefined) {\n        throw new Error(`A required setting \"${key}\" was not provided`);\n\n      } else {\n        this.settings[key] = value;\n      }\n    });\n  }\n\n  /**\n   * Generate defaults for a settings.\n   * Void 0 means it is required, null means it can be empty.\n   *\n   * @private\n   * @returns {SettingsPure}\n   */\n  getDefaults() {\n    return {\n      facade: undefined,\n      table: undefined,\n\n      // Determines whether the Walkontable instance is used as dataset viewer. When its instance is used as\n      // a context menu, autocomplete list, etc, the returned value is `false`.\n      isDataViewInstance: true,\n      // presentation mode\n      externalRowCalculator: false,\n      stretchH: 'none', // values: all, last, none\n      currentRowClassName: null,\n      currentColumnClassName: null,\n      preventOverflow() {\n        return false;\n      },\n      preventWheel: false,\n\n      // data source\n      data: undefined,\n      freezeOverlays: false,\n      // Number of renderable columns for the left overlay.\n      fixedColumnsStart: 0,\n      // Number of renderable rows for the top overlay.\n      fixedRowsTop: 0,\n      // Number of renderable rows for the bottom overlay.\n      fixedRowsBottom: 0,\n      // Enable the inline start overlay when conditions are met (left for LTR and right for RTL document mode).\n      shouldRenderInlineStartOverlay: () => {\n        return this.getSetting('fixedColumnsStart') > 0 || this.getSetting('rowHeaders').length > 0;\n      },\n      // Enable the top overlay when conditions are met.\n      shouldRenderTopOverlay: () => {\n        return this.getSetting('fixedRowsTop') > 0 || this.getSetting('columnHeaders').length > 0;\n      },\n      // Enable the bottom overlay when conditions are met.\n      shouldRenderBottomOverlay: () => {\n        return this.getSetting('fixedRowsBottom') > 0;\n      },\n      minSpareRows: 0,\n\n      // this must be array of functions: [function (row, TH) {}]\n      rowHeaders() {\n        return [];\n      },\n\n      // this must be array of functions: [function (column, TH) {}]\n      columnHeaders() {\n        return [];\n      },\n      totalRows: undefined,\n      totalColumns: undefined,\n      cellRenderer: (row, column, TD) => {\n        const cellData = this.getSetting('data', row, column);\n\n        fastInnerText(TD, cellData === undefined || cellData === null ? '' : cellData);\n      },\n\n      // columnWidth: 50,\n      columnWidth() {\n        // return undefined means use default size for the rendered cell content\n      },\n      rowHeight() {\n        // return undefined means use default size for the rendered cell content\n      },\n      rowHeightByOverlayName() {\n        // return undefined means use default size for the rendered cell content\n      },\n      defaultRowHeight: 23,\n      defaultColumnWidth: 50,\n      selections: null,\n      hideBorderOnMouseDownOver: false,\n      viewportRowCalculatorOverride: null,\n      viewportColumnCalculatorOverride: null,\n\n      // callbacks\n      onCellMouseDown: null,\n      onCellContextMenu: null,\n      onCellMouseOver: null,\n      onCellMouseOut: null,\n      onCellMouseUp: null,\n\n      // onCellMouseOut: null,\n      onCellDblClick: null,\n      onCellCornerMouseDown: null,\n      onCellCornerDblClick: null,\n      beforeDraw: null,\n      onDraw: null,\n      onBeforeRemoveCellClassNames: null,\n      onAfterDrawSelection: null,\n      onBeforeDrawBorders: null,\n      // viewport scroll hooks\n      onBeforeViewportScrollHorizontally: column => column,\n      onBeforeViewportScrollVertically: row => row,\n      // native scroll hooks\n      onScrollHorizontally: null,\n      onScrollVertically: null,\n      //\n      onBeforeTouchScroll: null,\n      onAfterMomentumScroll: null,\n      onBeforeStretchingColumnWidth: width => width,\n      onModifyRowHeaderWidth: null,\n      onModifyGetCellCoords: null,\n      onBeforeHighlightingRowHeader: sourceRow => sourceRow,\n      onBeforeHighlightingColumnHeader: sourceCol => sourceCol,\n\n      onWindowResize: null,\n      onContainerElementResize: null,\n\n      renderAllColumns: false,\n      renderAllRows: false,\n      groups: false,\n      rowHeaderWidth: null,\n      columnHeaderHeight: null,\n      headerClassName: null,\n      rtlMode: false,\n      ariaTags: true\n    };\n  }\n\n  /**\n   * Update settings.\n   *\n   * @param {object|string} settings The singular settings to update or if passed as object to merge with.\n   * @param {*} value The value to set if the first argument is passed as string.\n   * @returns {Settings}\n   */\n  update(settings, value) {\n    if (value === undefined) { // settings is object\n      objectEach(settings, (settingValue, key) => {\n        this.settings[key] = settingValue;\n      });\n    } else { // if value is defined then settings is the key\n      this.settings[settings] = value;\n    }\n\n    return this;\n  }\n\n  /**\n   * Get setting by name.\n   *\n   * @param {$Keys<SettingsPure>} key The settings key to retrieve.\n   * @param {*} [param1] Additional parameter passed to the options defined as function.\n   * @param {*} [param2] Additional parameter passed to the options defined as function.\n   * @param {*} [param3] Additional parameter passed to the options defined as function.\n   * @param {*} [param4] Additional parameter passed to the options defined as function.\n   * @returns {*}\n   */\n  getSetting(key, param1, param2, param3, param4) {\n    if (typeof this.settings[key] === 'function') {\n      return this.settings[key](param1, param2, param3, param4);\n\n    } else if (param1 !== undefined && Array.isArray(this.settings[key])) {\n      return this.settings[key][param1];\n\n    }\n\n    return this.settings[key];\n  }\n\n  /**\n   * Get a setting value without any evaluation.\n   *\n   * @param {string} key The settings key to retrieve.\n   * @returns {*}\n   */\n  getSettingPure(key) {\n    return this.settings[key];\n  }\n\n  /**\n   * Checks if setting exists.\n   *\n   * @param {boolean} key The settings key to check.\n   * @returns {boolean}\n   */\n  has(key) {\n    return !!this.settings[key];\n  }\n}\n","import {\n  getStyle,\n  getComputedStyle,\n  getTrimmingContainer,\n  isVisible,\n} from './../../../../helpers/dom/element';\nimport Table from '../table';\nimport calculatedRows from './mixin/calculatedRows';\nimport calculatedColumns from './mixin/calculatedColumns';\nimport { mixin } from './../../../../helpers/object';\n\n/**\n * Subclass of `Table` that provides the helper methods relevant to the master table (not overlays), implemented through mixins.\n *\n * @mixes calculatedRows\n * @mixes calculatedColumns\n */\nclass MasterTable extends Table {\n  /**\n   * @param {TableDao} dataAccessObject The data access object.\n   * @param {FacadeGetter} facadeGetter Function which return proper facade.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   */\n  constructor(dataAccessObject, facadeGetter, domBindings, wtSettings) {\n    super(dataAccessObject, facadeGetter, domBindings, wtSettings, 'master');\n  }\n\n  alignOverlaysWithTrimmingContainer() {\n    const trimmingElement = getTrimmingContainer(this.wtRootElement);\n    const { rootWindow } = this.domBindings;\n\n    if (trimmingElement === rootWindow) {\n      const preventOverflow = this.wtSettings.getSetting('preventOverflow');\n\n      if (!preventOverflow) {\n        this.holder.style.overflow = 'visible';\n        this.wtRootElement.style.overflow = 'visible';\n      }\n    } else {\n      const trimmingElementParent = trimmingElement.parentElement;\n      const trimmingHeight = getStyle(trimmingElement, 'height', rootWindow);\n      const trimmingOverflow = getStyle(trimmingElement, 'overflow', rootWindow);\n      const holderStyle = this.holder.style;\n      const { scrollWidth, scrollHeight } = trimmingElement;\n      let width = trimmingElement.offsetWidth;\n      let height = trimmingElement.offsetHeight;\n      const overflow = ['auto', 'hidden', 'scroll'];\n\n      if (trimmingElementParent && overflow.includes(trimmingOverflow)) {\n        const cloneNode = trimmingElement.cloneNode(false);\n\n        // Before calculating the height of the trimming element, set overflow: auto to hide scrollbars.\n        // An issue occurred on Firefox, where an empty element with overflow: scroll returns an element height higher than 0px\n        // despite an empty content within.\n        cloneNode.style.overflow = 'auto';\n        // Issue #9545 shows problem with calculating height for HOT on Firefox while placing instance in some\n        // flex containers and setting overflow for some `div` section.\n        cloneNode.style.position = 'absolute';\n\n        if (trimmingElement.nextElementSibling) {\n          trimmingElementParent.insertBefore(cloneNode, trimmingElement.nextElementSibling);\n        } else {\n          trimmingElementParent.appendChild(cloneNode);\n        }\n\n        const cloneHeight = parseInt(getComputedStyle(cloneNode, rootWindow).height, 10);\n\n        trimmingElementParent.removeChild(cloneNode);\n\n        if (cloneHeight === 0) {\n          height = 0;\n        }\n      }\n\n      height = Math.min(height, scrollHeight);\n      holderStyle.height = trimmingHeight === 'auto' ? 'auto' : `${height}px`;\n\n      width = Math.min(width, scrollWidth);\n      holderStyle.width = `${width}px`;\n\n      holderStyle.overflow = '';\n      this.hasTableHeight = holderStyle.height === 'auto' ? true : height > 0;\n      this.hasTableWidth = width > 0;\n    }\n\n    this.isTableVisible = isVisible(this.TABLE);\n  }\n\n  markOversizedColumnHeaders() {\n    const { wtSettings } = this;\n    const { wtViewport } = this.dataAccessObject;\n    const overlayName = 'master';\n    const columnHeaders = wtSettings.getSetting('columnHeaders');\n    const columnHeadersCount = columnHeaders.length;\n\n    if (columnHeadersCount && !wtViewport.hasOversizedColumnHeadersMarked[overlayName]) {\n      const rowHeaders = wtSettings.getSetting('rowHeaders');\n      const rowHeaderCount = rowHeaders.length;\n      const columnCount = this.getRenderedColumnsCount();\n\n      for (let i = 0; i < columnHeadersCount; i++) {\n        for (let renderedColumnIndex = (-1) * rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) { // eslint-disable-line max-len\n          this.markIfOversizedColumnHeader(renderedColumnIndex);\n        }\n      }\n      wtViewport.hasOversizedColumnHeadersMarked[overlayName] = true;\n    }\n  }\n}\n\nmixin(MasterTable, calculatedRows);\nmixin(MasterTable, calculatedColumns);\n\nexport default MasterTable;\n","import {\n  getScrollbarWidth,\n  getStyle,\n  offset,\n  outerHeight,\n  outerWidth,\n} from '../../../helpers/dom/element';\nimport { objectEach } from '../../../helpers/object';\nimport {\n  FullyVisibleColumnsCalculationType,\n  FullyVisibleRowsCalculationType,\n  PartiallyVisibleColumnsCalculationType,\n  PartiallyVisibleRowsCalculationType,\n  RenderedAllColumnsCalculationType,\n  RenderedAllRowsCalculationType,\n  RenderedColumnsCalculationType,\n  RenderedRowsCalculationType,\n  ViewportColumnsCalculator,\n  ViewportRowsCalculator,\n} from './calculator';\n\n/**\n * @class Viewport\n */\nclass Viewport {\n  /**\n   * @param {ViewportDao} dataAccessObject The Walkontable instance.\n   * @param {DomBindings} domBindings Bindings into DOM.\n   * @param {Settings} wtSettings The Walkontable settings.\n   * @param {EventManager} eventManager The instance event manager.\n   * @param {Table} wtTable The table.\n   */\n  constructor(dataAccessObject, domBindings, wtSettings, eventManager, wtTable) {\n    this.dataAccessObject = dataAccessObject;\n    // legacy support\n    this.wot = dataAccessObject.wot;\n    this.instance = this.wot;\n    this.domBindings = domBindings;\n    this.wtSettings = wtSettings;\n    this.wtTable = wtTable;\n    this.oversizedRows = [];\n    this.oversizedColumnHeaders = [];\n    this.hasOversizedColumnHeadersMarked = {};\n    this.clientHeight = 0;\n    this.containerWidth = NaN;\n    this.rowHeaderWidth = NaN;\n    this.rowsVisibleCalculator = null;\n    this.columnsVisibleCalculator = null;\n    this.rowsCalculatorTypes = new Map([\n      ['rendered', () => (this.wtSettings.getSetting('renderAllRows') ?\n        new RenderedAllRowsCalculationType() : new RenderedRowsCalculationType())],\n      ['fullyVisible', () => new FullyVisibleRowsCalculationType()],\n      ['partiallyVisible', () => new PartiallyVisibleRowsCalculationType()],\n    ]);\n    this.columnsCalculatorTypes = new Map([\n      ['rendered', () => (this.wtSettings.getSetting('renderAllColumns') ?\n        new RenderedAllColumnsCalculationType() : new RenderedColumnsCalculationType())],\n      ['fullyVisible', () => new FullyVisibleColumnsCalculationType()],\n      ['partiallyVisible', () => new PartiallyVisibleColumnsCalculationType()],\n    ]);\n\n    this.eventManager = eventManager;\n    this.eventManager.addEventListener(this.domBindings.rootWindow, 'resize', () => {\n      this.clientHeight = this.getWorkspaceHeight();\n    });\n  }\n\n  /**\n   * @returns {number}\n   */\n  getWorkspaceHeight() {\n    const currentDocument = this.domBindings.rootDocument;\n    const trimmingContainer = this.dataAccessObject.topOverlayTrimmingContainer;\n    let height = 0;\n\n    if (trimmingContainer === this.domBindings.rootWindow) {\n      height = currentDocument.documentElement.clientHeight;\n\n    } else {\n      const elemHeight = outerHeight(trimmingContainer);\n\n      // returns height without DIV scrollbar\n      height = (elemHeight > 0 && trimmingContainer.clientHeight > 0) ? trimmingContainer.clientHeight : Infinity;\n    }\n\n    return height;\n  }\n\n  getWorkspaceWidth() {\n    const { wtSettings } = this;\n    const { rootDocument, rootWindow } = this.domBindings;\n    const trimmingContainer = this.dataAccessObject.inlineStartOverlayTrimmingContainer;\n    const docOffsetWidth = rootDocument.documentElement.offsetWidth;\n    const totalColumns = wtSettings.getSetting('totalColumns');\n    const preventOverflow = wtSettings.getSetting('preventOverflow');\n    const isRtl = wtSettings.getSetting('rtlMode');\n    const tableRect = this.wtTable.TABLE.getBoundingClientRect();\n    const inlineStart = isRtl ? tableRect.right - docOffsetWidth : tableRect.left;\n    const tableOffset = docOffsetWidth - inlineStart;\n    let width;\n    let overflow;\n\n    if (preventOverflow) {\n      return outerWidth(this.wtTable.wtRootElement);\n    }\n\n    if (wtSettings.getSetting('freezeOverlays')) {\n      width = Math.min(tableOffset, docOffsetWidth);\n    } else {\n      width = Math.min(this.getContainerFillWidth(), tableOffset, docOffsetWidth);\n    }\n\n    if (trimmingContainer === rootWindow && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) {\n      // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window\n      // otherwise continue below, which will allow stretching\n      // this is used in `scroll_window.html`\n      // TODO test me\n      return rootDocument.documentElement.clientWidth;\n    }\n\n    if (trimmingContainer !== rootWindow) {\n      overflow = getStyle(this.dataAccessObject.inlineStartOverlayTrimmingContainer, 'overflow', rootWindow);\n\n      if (overflow === 'scroll' || overflow === 'hidden' || overflow === 'auto') {\n        // this is used in `scroll.html`\n        // TODO test me\n        return Math.max(width, trimmingContainer.clientWidth);\n      }\n    }\n\n    const stretchSetting = wtSettings.getSetting('stretchH');\n\n    if (stretchSetting === 'none' || !stretchSetting) {\n      // if no stretching is used, return the maximum used workspace width\n      return Math.max(width, outerWidth(this.wtTable.TABLE));\n    }\n\n    // if stretching is used, return the actual container width, so the columns can fit inside it\n    return width;\n  }\n\n  /**\n   * Checks if viewport has vertical scroll.\n   *\n   * @returns {boolean}\n   */\n  hasVerticalScroll() {\n    return this.wtTable.hider.offsetHeight > this.getWorkspaceHeight();\n  }\n\n  /**\n   * Checks if viewport has horizontal scroll.\n   *\n   * @returns {boolean}\n   */\n  hasHorizontalScroll() {\n    return this.wtTable.hider.offsetWidth > this.getWorkspaceWidth();\n  }\n\n  /**\n   * @param {number} from The visual column index from the width sum is start calculated.\n   * @param {number} length The length of the column to traverse.\n   * @returns {number}\n   */\n  sumColumnWidths(from, length) {\n    let sum = 0;\n    let column = from;\n\n    while (column < length) {\n      sum += this.wtTable.getColumnWidth(column);\n      column += 1;\n    }\n\n    return sum;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getContainerFillWidth() {\n    if (this.containerWidth) {\n      return this.containerWidth;\n    }\n\n    const mainContainer = this.wtTable.holder;\n    const dummyElement = this.domBindings.rootDocument.createElement('div');\n\n    dummyElement.style.width = '100%';\n    dummyElement.style.height = '1px';\n    mainContainer.appendChild(dummyElement);\n\n    const fillWidth = dummyElement.offsetWidth;\n\n    this.containerWidth = fillWidth;\n    mainContainer.removeChild(dummyElement);\n\n    return fillWidth;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getWorkspaceOffset() {\n    return offset(this.wtTable.TABLE);\n  }\n\n  /**\n   * @returns {number}\n   */\n  getColumnHeaderHeight() {\n    const columnHeaders = this.wtSettings.getSetting('columnHeaders');\n\n    if (!columnHeaders.length) {\n      this.columnHeaderHeight = 0;\n    } else if (isNaN(this.columnHeaderHeight)) {\n      this.columnHeaderHeight = outerHeight(this.wtTable.THEAD);\n    }\n\n    return this.columnHeaderHeight;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getViewportHeight() {\n    let containerHeight = this.getWorkspaceHeight();\n\n    if (containerHeight === Infinity) {\n      return containerHeight;\n    }\n\n    const columnHeaderHeight = this.getColumnHeaderHeight();\n\n    if (columnHeaderHeight > 0) {\n      containerHeight -= columnHeaderHeight;\n    }\n\n    return containerHeight;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getRowHeaderWidth() {\n    const rowHeadersWidthSetting = this.wtSettings.getSetting('rowHeaderWidth');\n    const rowHeaders = this.wtSettings.getSetting('rowHeaders');\n\n    if (rowHeadersWidthSetting) {\n      this.rowHeaderWidth = 0;\n\n      for (let i = 0, len = rowHeaders.length; i < len; i++) {\n        this.rowHeaderWidth += rowHeadersWidthSetting[i] || rowHeadersWidthSetting;\n      }\n    }\n\n    if (isNaN(this.rowHeaderWidth)) {\n\n      if (rowHeaders.length) {\n        let TH = this.wtTable.TABLE.querySelector('TH');\n\n        this.rowHeaderWidth = 0;\n\n        for (let i = 0, len = rowHeaders.length; i < len; i++) {\n          if (TH) {\n            this.rowHeaderWidth += outerWidth(TH);\n            TH = TH.nextSibling;\n\n          } else {\n            // yes this is a cheat but it worked like that before, just taking assumption from CSS instead of measuring.\n            // TODO: proper fix\n            this.rowHeaderWidth += 50;\n          }\n        }\n      } else {\n        this.rowHeaderWidth = 0;\n      }\n    }\n\n    this.rowHeaderWidth = this.wtSettings\n      .getSetting('onModifyRowHeaderWidth', this.rowHeaderWidth) || this.rowHeaderWidth;\n\n    return this.rowHeaderWidth;\n  }\n\n  /**\n   * @returns {number}\n   */\n  getViewportWidth() {\n    const containerWidth = this.getWorkspaceWidth();\n\n    if (containerWidth === Infinity) {\n      return containerWidth;\n    }\n\n    const rowHeaderWidth = this.getRowHeaderWidth();\n\n    if (rowHeaderWidth > 0) {\n      return containerWidth - rowHeaderWidth;\n    }\n\n    return containerWidth;\n  }\n\n  /**\n   * Creates rows calculators. The type of the calculations can be chosen from the list:\n   *  - 'rendered' Calculates rows that should be rendered within the current table's viewport;\n   *  - 'fullyVisible' Calculates rows that are fully visible (used mostly for scrolling purposes);\n   *  - 'partiallyVisible' Calculates rows that are partially visible (used mostly for scrolling purposes).\n   *\n   * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.\n   * @returns {ViewportRowsCalculator}\n   */\n  createRowsCalculator(calculatorTypes = ['rendered', 'fullyVisible', 'partiallyVisible']) {\n    const { wtSettings, wtTable } = this;\n\n    let height = this.getViewportHeight();\n    let scrollbarHeight;\n    let fixedRowsHeight;\n\n    this.rowHeaderWidth = NaN;\n\n    let pos = this.dataAccessObject.topScrollPosition - this.dataAccessObject.topParentOffset;\n\n    const fixedRowsTop = wtSettings.getSetting('fixedRowsTop');\n    const fixedRowsBottom = wtSettings.getSetting('fixedRowsBottom');\n    const totalRows = wtSettings.getSetting('totalRows');\n\n    if (fixedRowsTop && pos >= 0) {\n      fixedRowsHeight = this.dataAccessObject.topOverlay.sumCellSizes(0, fixedRowsTop);\n      pos += fixedRowsHeight;\n      height -= fixedRowsHeight;\n    }\n\n    if (fixedRowsBottom && this.dataAccessObject.bottomOverlay.clone) {\n      fixedRowsHeight = this.dataAccessObject.bottomOverlay.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n\n      height -= fixedRowsHeight;\n    }\n\n    if (wtTable.holder.clientHeight === wtTable.holder.offsetHeight) {\n      scrollbarHeight = 0;\n    } else {\n      scrollbarHeight = getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    return new ViewportRowsCalculator({\n      calculationTypes: calculatorTypes.map(type => [type, this.rowsCalculatorTypes.get(type)()]),\n      viewportHeight: height,\n      scrollOffset: pos,\n      totalRows: wtSettings.getSetting('totalRows'),\n      rowHeightFn: sourceRow => wtTable.getRowHeight(sourceRow),\n      overrideFn: wtSettings.getSettingPure('viewportRowCalculatorOverride'),\n      horizontalScrollbarHeight: scrollbarHeight,\n    });\n  }\n\n  /**\n   * Creates columns calculators. The type of the calculations can be chosen from the list:\n   *  - 'rendered' Calculates columns that should be rendered within the current table's viewport;\n   *  - 'fullyVisible' Calculates columns that are fully visible (used mostly for scrolling purposes);\n   *  - 'partiallyVisible' Calculates columns that are partially visible (used mostly for scrolling purposes).\n   *\n   * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.\n   * @returns {ViewportColumnsCalculator}\n   */\n  createColumnsCalculator(calculatorTypes = ['rendered', 'fullyVisible', 'partiallyVisible']) {\n    const { wtSettings, wtTable } = this;\n\n    let width = this.getViewportWidth();\n    let pos = Math.abs(this.dataAccessObject.inlineStartScrollPosition) - this.dataAccessObject.inlineStartParentOffset;\n\n    this.columnHeaderHeight = NaN;\n\n    const fixedColumnsStart = wtSettings.getSetting('fixedColumnsStart');\n\n    if (fixedColumnsStart && pos >= 0) {\n      const fixedColumnsWidth = this.dataAccessObject.inlineStartOverlay.sumCellSizes(0, fixedColumnsStart);\n\n      pos += fixedColumnsWidth;\n      width -= fixedColumnsWidth;\n    }\n    if (wtTable.holder.clientWidth !== wtTable.holder.offsetWidth) {\n      width -= getScrollbarWidth(this.domBindings.rootDocument);\n    }\n\n    return new ViewportColumnsCalculator({\n      calculationTypes: calculatorTypes.map(type => [type, this.columnsCalculatorTypes.get(type)()]),\n      viewportWidth: width,\n      scrollOffset: pos,\n      totalColumns: wtSettings.getSetting('totalColumns'),\n      columnWidthFn: sourceCol => wtTable.getColumnWidth(sourceCol),\n      overrideFn: wtSettings.getSettingPure('viewportColumnCalculatorOverride'),\n      inlineStartOffset: this.dataAccessObject.inlineStartParentOffset\n    });\n  }\n\n  /**\n   * Creates rowsRenderCalculator and columnsRenderCalculator (before draw, to determine what rows and\n   * cols should be rendered).\n   *\n   * @param {boolean} fastDraw If `true`, will try to avoid full redraw and only update the border positions.\n   *                           If `false` or `undefined`, will perform a full redraw.\n   * @returns {boolean} The fastDraw value, possibly modified.\n   */\n  createCalculators(fastDraw = false) {\n    const { wtSettings } = this;\n    const rowsCalculator = this.createRowsCalculator();\n    const columnsCalculator = this.createColumnsCalculator();\n\n    if (fastDraw && !wtSettings.getSetting('renderAllRows')) {\n      const proposedRowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');\n\n      fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);\n    }\n\n    if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {\n      const proposedColumnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');\n\n      fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);\n    }\n\n    if (!fastDraw) {\n      this.rowsRenderCalculator = rowsCalculator.getResultsFor('rendered');\n      this.columnsRenderCalculator = columnsCalculator.getResultsFor('rendered');\n    }\n\n    this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');\n    this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');\n    this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');\n    this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');\n\n    return fastDraw;\n  }\n\n  /**\n   * Creates rows and columns calculators (after draw, to determine what are\n   * the actually fully visible and partially visible rows and columns).\n   */\n  createVisibleCalculators() {\n    const rowsCalculator = this.createRowsCalculator(['fullyVisible', 'partiallyVisible']);\n    const columnsCalculator = this.createColumnsCalculator(['fullyVisible', 'partiallyVisible']);\n\n    this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');\n    this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');\n    this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');\n    this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');\n  }\n\n  /**\n   * Returns information whether proposedRowsVisibleCalculator viewport\n   * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator).\n   *\n   * @param {ViewportRowsCalculator} proposedRowsVisibleCalculator The instance of the viewport calculator to compare with.\n   * @returns {boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).\n   *                    Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed).\n   */\n  areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {\n    if (!this.rowsVisibleCalculator) {\n      return false;\n    }\n\n    let { startRow, endRow } = proposedRowsVisibleCalculator;\n\n    // if there are no fully visible rows at all...\n    if (startRow === null && endRow === null) {\n      if (!proposedRowsVisibleCalculator.isVisibleInTrimmingContainer) {\n        return true;\n      }\n      // ...use partially visible rows calculator to determine what render type is needed\n      startRow = this.rowsPartiallyVisibleCalculator.startRow;\n      endRow = this.rowsPartiallyVisibleCalculator.endRow;\n    }\n\n    const { startRow: renderedStartRow, endRow: renderedEndRow } = this.rowsRenderCalculator;\n\n    if (startRow < renderedStartRow || (startRow === renderedStartRow && startRow > 0)) {\n      return false;\n\n    } else if (endRow > renderedEndRow ||\n              (endRow === renderedEndRow && endRow < this.wtSettings.getSetting('totalRows') - 1)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Returns information whether proposedColumnsVisibleCalculator viewport\n   * is contained inside column rendered in previous draw (cached in columnsRenderCalculator).\n   *\n   * @param {ViewportRowsCalculator} proposedColumnsVisibleCalculator The instance of the viewport calculator to compare with.\n   * @returns {boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).\n   *                    Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed).\n   */\n  areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {\n    if (!this.columnsVisibleCalculator) {\n      return false;\n    }\n\n    let { startColumn, endColumn } = proposedColumnsVisibleCalculator;\n\n    // if there are no fully visible columns at all...\n    if (startColumn === null && endColumn === null) {\n      if (!proposedColumnsVisibleCalculator.isVisibleInTrimmingContainer) {\n        return true;\n      }\n      // ...use partially visible columns calculator to determine what render type is needed\n      startColumn = this.columnsPartiallyVisibleCalculator.startColumn;\n      endColumn = this.columnsPartiallyVisibleCalculator.endColumn;\n    }\n\n    const { startColumn: renderedStartColumn, endColumn: renderedEndColumn } = this.columnsRenderCalculator;\n\n    if (startColumn < renderedStartColumn || (startColumn === renderedStartColumn && startColumn > 0)) {\n      return false;\n\n    } else if (endColumn > renderedEndColumn ||\n              (endColumn === renderedEndColumn && endColumn < this.wtSettings.getSetting('totalColumns') - 1)) {\n\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Resets values in keys of the hasOversizedColumnHeadersMarked object after updateSettings.\n   */\n  resetHasOversizedColumnHeadersMarked() {\n    objectEach(this.hasOversizedColumnHeadersMarked, (value, key, object) => {\n      object[key] = undefined;\n    });\n  }\n}\n\nexport default Viewport;\n","import { isRightClick as isRightClickEvent, isLeftClick as isLeftClickEvent } from './../helpers/dom/event';\n\n/**\n * MouseDown handler.\n *\n * @param {object} options The handler options.\n * @param {boolean} options.isShiftKey The flag which indicates if the shift key is pressed.\n * @param {boolean} options.isLeftClick The flag which indicates if the left mouse button is pressed.\n * @param {boolean} options.isRightClick The flag which indicates if the right mouse button is pressed.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n * @param {Function} options.cellCoordsFactory The function factory for CellCoords objects.\n */\nexport function mouseDown({ isShiftKey, isLeftClick, isRightClick, coords, selection, controller, cellCoordsFactory }) {\n  const currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n  const selectedCorner = selection.isSelectedByCorner();\n  const selectedRow = selection.isSelectedByRowHeader();\n\n  selection.markSource('mouse');\n\n  if (isShiftKey && currentSelection) {\n    if (coords.row >= 0 && coords.col >= 0 && !controller.cell) {\n      selection.setRangeEnd(coords);\n\n    } else if ((selectedCorner || selectedRow) && coords.row >= 0 && coords.col >= 0 && !controller.cell) {\n      selection.setRangeEnd(cellCoordsFactory(coords.row, coords.col));\n\n    } else if (selectedCorner && coords.row < 0 && !controller.column) {\n      selection.setRangeEnd(cellCoordsFactory(currentSelection.to.row, coords.col));\n\n    } else if (selectedRow && coords.col < 0 && !controller.row) {\n      selection.setRangeEnd(cellCoordsFactory(coords.row, currentSelection.to.col));\n\n    } else if (((!selectedCorner && !selectedRow && coords.col < 0) ||\n               (selectedCorner && coords.col < 0)) && !controller.row) {\n      selection.selectRows(Math.max(currentSelection.from.row, 0), coords.row, coords.col);\n\n    } else if (((!selectedCorner && !selectedRow && coords.row < 0) ||\n               (selectedRow && coords.row < 0)) && !controller.column) {\n      selection.selectColumns(Math.max(currentSelection.from.col, 0), coords.col, coords.row);\n    }\n\n  } else {\n    const allowRightClickSelection = !selection.inInSelection(coords);\n    const performSelection = isLeftClick || (isRightClick && allowRightClickSelection);\n\n    // clicked row header and when some column was selected\n    if (coords.row < 0 && coords.col >= 0 && !controller.column) {\n      if (performSelection) {\n        selection.selectColumns(coords.col, coords.col, coords.row);\n      }\n\n    // clicked column header and when some row was selected\n    } else if (coords.col < 0 && coords.row >= 0 && !controller.row) {\n      if (performSelection) {\n        selection.selectRows(coords.row, coords.row, coords.col);\n      }\n\n    } else if (coords.col >= 0 && coords.row >= 0 && !controller.cell) {\n      if (performSelection) {\n        selection.setRangeStart(coords);\n      }\n    } else if (coords.col < 0 && coords.row < 0) {\n      selection.selectAll(true, true, {\n        disableHeadersHighlight: true,\n        focusPosition: { row: 0, col: 0 },\n      });\n    }\n  }\n\n  selection.markEndSource();\n}\n\n/**\n * MouseOver handler.\n *\n * @param {object} options The handler options.\n * @param {boolean} options.isLeftClick Indicates that event was fired using the left mouse button.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n * @param {Function} options.cellCoordsFactory The function factory for CellCoords objects.\n */\nexport function mouseOver({ isLeftClick, coords, selection, controller, cellCoordsFactory }) {\n  if (!isLeftClick) {\n    return;\n  }\n\n  const selectedRow = selection.isSelectedByRowHeader();\n  const selectedColumn = selection.isSelectedByColumnHeader();\n  const countCols = selection.tableProps.countCols();\n  const countRows = selection.tableProps.countRows();\n\n  selection.markSource('mouse');\n\n  if (selectedColumn && !controller.column) {\n    selection.setRangeEnd(cellCoordsFactory(countRows - 1, coords.col));\n\n  } else if (selectedRow && !controller.row) {\n    selection.setRangeEnd(cellCoordsFactory(coords.row, countCols - 1));\n\n  } else if (!controller.cell) {\n    selection.setRangeEnd(coords);\n  }\n\n  selection.markEndSource();\n}\n\nconst handlers = new Map([\n  ['mousedown', mouseDown],\n  ['mouseover', mouseOver],\n  ['touchstart', mouseDown],\n]);\n\n/**\n * Mouse handler for selection functionality.\n *\n * @param {Event} event An native event to handle.\n * @param {object} options The handler options.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n * @param {Function} options.cellCoordsFactory The function factory for CellCoords objects.\n */\nexport function handleMouseEvent(event, { coords, selection, controller, cellCoordsFactory }) {\n  handlers.get(event.type)({\n    coords,\n    selection,\n    controller,\n    cellCoordsFactory,\n    isShiftKey: event.shiftKey,\n    isLeftClick: isLeftClickEvent(event) || event.type === 'touchstart',\n    isRightClick: isRightClickEvent(event),\n  });\n}\n","export const holder = new WeakMap();\n\nexport const rootInstanceSymbol = Symbol('rootInstance');\n\n/**\n * Register an object as a root instance.\n *\n * @param  {object} object An object to associate with root instance flag.\n */\nexport function registerAsRootInstance(object) {\n  holder.set(object, true);\n}\n\n/**\n * Check if the source of the root indication call is valid.\n *\n * @param  {symbol} rootSymbol A symbol as a source of truth.\n * @returns {boolean}\n */\nexport function hasValidParameter(rootSymbol) {\n  return rootSymbol === rootInstanceSymbol;\n}\n\n/**\n * Check if passed an object was flagged as a root instance.\n *\n * @param  {object} object An object to check.\n * @returns {boolean}\n */\nexport function isRootInstance(object) {\n  return holder.has(object);\n}\n","import {\n  createObjectPropListener,\n  getProperty,\n  isObject,\n  objectEach,\n  setProperty\n} from '../helpers/object';\nimport { countFirstRowKeys } from '../helpers/data';\nimport { arrayEach } from '../helpers/array';\nimport { rangeEach } from '../helpers/number';\nimport { isFunction } from '../helpers/function';\n\n/**\n * @class DataSource\n * @private\n */\nclass DataSource {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Data source.\n   *\n   * @type {Array}\n   */\n  data;\n  /**\n   * Type of data source.\n   *\n   * @type {string}\n   * @default 'array'\n   */\n  dataType = 'array';\n\n  colToProp = () => {};\n  propToCol = () => {};\n\n  constructor(hotInstance, dataSource = []) {\n    this.hot = hotInstance;\n    this.data = dataSource;\n  }\n\n  /**\n   * Run the `modifyRowData` hook and return either the modified or the source data for the provided row.\n   *\n   * @private\n   * @param {number} rowIndex Row index.\n   * @returns {Array|object} Source or modified row of data.\n   */\n  modifyRowData(rowIndex) {\n    let modifyRowData;\n\n    if (this.hot.hasHook('modifyRowData')) {\n      modifyRowData = this.hot.runHooks('modifyRowData', rowIndex);\n    }\n\n    return (modifyRowData !== undefined && !Number.isInteger(modifyRowData)) ? modifyRowData : this.data[rowIndex];\n  }\n\n  /**\n   * Get all data.\n   *\n   * @param {boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n   *                                  in another format.\n   * @returns {Array}\n   */\n  getData(toArray = false) {\n    if (!this.data || this.data.length === 0) {\n      return this.data;\n    }\n\n    return this.getByRange(\n      null,\n      null,\n      toArray\n    );\n  }\n\n  /**\n   * Set new data source.\n   *\n   * @param {Array} data The new data.\n   */\n  setData(data) {\n    this.data = data;\n  }\n\n  /**\n   * Returns array of column values from the data source. `column` is the index of the row in the data source.\n   *\n   * @param {number} column Visual column index.\n   * @returns {Array}\n   */\n  getAtColumn(column) {\n    const result = [];\n\n    arrayEach(this.data, (row, rowIndex) => {\n      const value = this.getAtCell(rowIndex, column);\n\n      result.push(value);\n    });\n\n    return result;\n  }\n\n  /**\n   * Returns a single row of the data or a subset of its columns. If a column range or `toArray` arguments are provided, it\n   * operates only on the columns declared by the `columns` setting or the data schema.\n   *\n   * @param {number} row Physical row index.\n   * @param {number} [startColumn] Starting index for the column range (optional).\n   * @param {number} [endColumn] Ending index for the column range (optional).\n   * @param {boolean} [toArray=false] `true` if the returned value should be forced to be presented as an array.\n   * @returns {Array|object}\n   */\n  getAtRow(row, startColumn, endColumn, toArray = false) {\n    const getAllProps = startColumn === undefined && endColumn === undefined;\n    const { dataDotNotation } = this.hot.getSettings();\n    let dataRow = null;\n    let newDataRow = null;\n\n    dataRow = this.modifyRowData(row);\n\n    if (Array.isArray(dataRow)) {\n      newDataRow = [];\n\n      if (getAllProps) {\n        dataRow.forEach((cell, column) => {\n          newDataRow[column] = this.getAtPhysicalCell(row, column, dataRow);\n        });\n\n      } else {\n        // Only the columns from the provided range\n        rangeEach(startColumn, endColumn, (column) => {\n          newDataRow[column - startColumn] = this.getAtPhysicalCell(row, column, dataRow);\n        });\n      }\n\n    } else if (isObject(dataRow) || isFunction(dataRow)) {\n      if (toArray) {\n        newDataRow = [];\n      } else {\n        newDataRow = {};\n      }\n\n      if (!getAllProps || toArray) {\n        const rangeStart = 0;\n        const rangeEnd = this.countFirstRowKeys() - 1;\n\n        rangeEach(rangeStart, rangeEnd, (column) => {\n          const prop = this.colToProp(column);\n\n          if (column >= (startColumn || rangeStart) && column <= (endColumn || rangeEnd) && !Number.isInteger(prop)) {\n            const cellValue = this.getAtPhysicalCell(row, prop, dataRow);\n\n            if (toArray) {\n              newDataRow.push(cellValue);\n\n            } else if (dataDotNotation) {\n              setProperty(newDataRow, prop, cellValue);\n\n            } else {\n              newDataRow[prop] = cellValue;\n            }\n          }\n        });\n\n      } else {\n        objectEach(dataRow, (value, prop) => {\n          const cellValue = this.getAtPhysicalCell(row, prop, dataRow);\n\n          if (dataDotNotation) {\n            setProperty(newDataRow, prop, cellValue);\n          } else {\n            newDataRow[prop] = cellValue;\n          }\n        });\n      }\n    }\n\n    return newDataRow;\n  }\n\n  /**\n   * Set the provided value in the source data set at the provided coordinates.\n   *\n   * @param {number} row Physical row index.\n   * @param {number|string} column Property name / physical column index.\n   * @param {*} value The value to be set at the provided coordinates.\n   */\n  setAtCell(row, column, value) {\n    if (row >= this.countRows() || column >= this.countFirstRowKeys()) {\n      // Not enough rows and/or columns.\n      return;\n    }\n\n    if (this.hot.hasHook('modifySourceData')) {\n      const valueHolder = createObjectPropListener(value);\n\n      this.hot.runHooks('modifySourceData', row, column, valueHolder, 'set');\n\n      if (valueHolder.isTouched()) {\n        value = valueHolder.value;\n      }\n    }\n\n    if (!Number.isInteger(column)) {\n      // column argument is the prop name\n      setProperty(this.data[row], column, value);\n\n    } else {\n      this.data[row][column] = value;\n    }\n  }\n\n  /**\n   * Get data from the source data set using the physical indexes.\n   *\n   * @private\n   * @param {number} row Physical row index.\n   * @param {string|number|Function} column Physical column index / property / function.\n   * @param {Array|object} dataRow A representation of a data row.\n   * @returns {*} Value at the provided coordinates.\n   */\n  getAtPhysicalCell(row, column, dataRow) {\n    let result = null;\n\n    if (dataRow) {\n      if (typeof column === 'string') {\n        const { dataDotNotation } = this.hot.getSettings();\n\n        result = dataDotNotation ? getProperty(dataRow, column) : dataRow[column];\n\n      } else if (typeof column === 'function') {\n        result = column(dataRow);\n\n      } else {\n        result = dataRow[column];\n      }\n    }\n\n    if (this.hot.hasHook('modifySourceData')) {\n      const valueHolder = createObjectPropListener(result);\n\n      this.hot.runHooks('modifySourceData', row, column, valueHolder, 'get');\n\n      if (valueHolder.isTouched()) {\n        result = valueHolder.value;\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Returns a single value from the data.\n   *\n   * @param {number} row Physical row index.\n   * @param {number} columnOrProp Visual column index or property.\n   * @returns {*}\n   */\n  getAtCell(row, columnOrProp) {\n    const dataRow = this.modifyRowData(row);\n\n    return this.getAtPhysicalCell(row, this.colToProp(columnOrProp), dataRow);\n  }\n\n  /**\n   * Returns source data by passed range.\n   *\n   * @param {object} [start] Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n   * @param {object} [end] Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n   * @param {boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n   *                                  in another format.\n   * @returns {Array}\n   */\n  getByRange(start = null, end = null, toArray = false) {\n    let getAllProps = false;\n    let startRow = null;\n    let startCol = null;\n    let endRow = null;\n    let endCol = null;\n\n    if (start === null || end === null) {\n      getAllProps = true;\n      startRow = 0;\n      endRow = this.countRows() - 1;\n\n    } else {\n      startRow = Math.min(start.row, end.row);\n      startCol = Math.min(start.col, end.col);\n      endRow = Math.max(start.row, end.row);\n      endCol = Math.max(start.col, end.col);\n    }\n\n    const result = [];\n\n    rangeEach(startRow, endRow, (currentRow) => {\n      result.push((\n        getAllProps ?\n          this.getAtRow(currentRow, undefined, undefined, toArray) :\n          this.getAtRow(currentRow, startCol, endCol, toArray)\n      ));\n    });\n\n    return result;\n  }\n\n  /**\n   * Count number of rows.\n   *\n   * @returns {number}\n   */\n  countRows() {\n    if (this.hot.hasHook('modifySourceLength')) {\n      const modifiedSourceLength = this.hot.runHooks('modifySourceLength');\n\n      if (Number.isInteger(modifiedSourceLength)) {\n        return modifiedSourceLength;\n      }\n    }\n\n    return this.data.length;\n  }\n\n  /**\n   * Count number of columns.\n   *\n   * @returns {number}\n   */\n  countFirstRowKeys() {\n    return countFirstRowKeys(this.data);\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.data = null;\n    this.hot = null;\n  }\n}\n\nexport default DataSource;\n","import { deepObjectSize, isObject } from './object';\n\nconst COLUMN_LABEL_BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst COLUMN_LABEL_BASE_LENGTH = COLUMN_LABEL_BASE.length;\n\n/**\n * Generates spreadsheet-like column names: A, B, C, ..., Z, AA, AB, etc.\n *\n * @param {number} index Column index.\n * @returns {string}\n */\nexport function spreadsheetColumnLabel(index) {\n  let dividend = index + 1;\n  let columnLabel = '';\n  let modulo;\n\n  while (dividend > 0) {\n    modulo = (dividend - 1) % COLUMN_LABEL_BASE_LENGTH;\n    columnLabel = String.fromCharCode(65 + modulo) + columnLabel;\n    dividend = parseInt((dividend - modulo) / COLUMN_LABEL_BASE_LENGTH, 10);\n  }\n\n  return columnLabel;\n}\n\n/**\n * Generates spreadsheet-like column index from theirs labels: A, B, C ...., Z, AA, AB, etc.\n *\n * @param {string} label Column label.\n * @returns {number}\n */\nexport function spreadsheetColumnIndex(label) {\n  let result = 0;\n\n  if (label) {\n    for (let i = 0, j = label.length - 1; i < label.length; i += 1, j -= 1) {\n      result += (COLUMN_LABEL_BASE_LENGTH ** j) * (COLUMN_LABEL_BASE.indexOf(label[i]) + 1);\n    }\n  }\n  result -= 1;\n\n  return result;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", ...\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} columns Number of columns to generate.\n * @returns {Array}\n */\nexport function createSpreadsheetData(rows = 100, columns = 4) {\n  const _rows = [];\n  let i;\n  let j;\n\n  for (i = 0; i < rows; i++) {\n    const row = [];\n\n    for (j = 0; j < columns; j++) {\n      row.push(spreadsheetColumnLabel(j) + (i + 1));\n    }\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", as an array of objects.\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} colCount Number of columns to generate.\n * @returns {Array}\n */\nexport function createSpreadsheetObjectData(rows = 100, colCount = 4) {\n  const _rows = [];\n  let i;\n  let j;\n\n  for (i = 0; i < rows; i++) {\n    const row = {};\n\n    for (j = 0; j < colCount; j++) {\n      row[`prop${j}`] = spreadsheetColumnLabel(j) + (i + 1);\n    }\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n\n/**\n * Generates an empty data object.\n *\n * @param {number} rows Number of rows to generate.\n * @param {number} columns Number of columns to generate.\n * @returns {Array}\n */\nexport function createEmptySpreadsheetData(rows, columns) {\n  const data = [];\n  let row;\n\n  for (let i = 0; i < rows; i++) {\n    row = [];\n\n    for (let j = 0; j < columns; j++) {\n      row.push('');\n    }\n    data.push(row);\n  }\n\n  return data;\n}\n\n/**\n * Transform a data row (either an array or an object) or an array of data rows to array of changes in a form of `[row,\n * prop/col, value]`. Convenient to use with `setDataAtRowProp` and `setSourceDataAtCell` methods.\n *\n * @param {Array|object} dataRow Object of row data, array of row data or an array of either.\n * @param {number} rowOffset Row offset to be passed to the resulting change list. Defaults to `0`.\n * @returns {Array} Array of changes (in a form of an array).\n */\nexport function dataRowToChangesArray(dataRow, rowOffset = 0) {\n  let dataRows = dataRow;\n  const changesArray = [];\n\n  if (!Array.isArray(dataRow) || !Array.isArray(dataRow[0])) {\n    dataRows = [dataRow];\n  }\n\n  dataRows.forEach((row, rowIndex) => {\n    if (Array.isArray(row)) {\n      row.forEach((value, column) => {\n        changesArray.push([\n          rowIndex + rowOffset,\n          column,\n          value\n        ]);\n      });\n\n    } else {\n      Object.keys(row).forEach((propName) => {\n        changesArray.push([\n          rowIndex + rowOffset,\n          propName,\n          row[propName]\n        ]);\n      });\n    }\n  });\n\n  return changesArray;\n}\n\n/**\n * Count the number of keys (or, basically, columns when the data is an array or arrays) in the first row of the\n * provided dataset.\n *\n * @param {Array} data The dataset.\n * @returns {number} Number of keys in the first row of the dataset.\n */\nexport function countFirstRowKeys(data) {\n  let result = 0;\n\n  if (Array.isArray(data)) {\n    if (data[0] && Array.isArray(data[0])) {\n      result = data[0].length;\n\n    } else if (data[0] && isObject(data[0])) {\n      result = deepObjectSize(data[0]);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Check whether the provided dataset is a *non-empty* array of arrays.\n *\n * @param {Array} data Dataset to be checked.\n * @returns {boolean} `true` if data is an array of arrays, `false` otherwise.\n */\nexport function isArrayOfArrays(data) {\n  return !!(Array.isArray(data) && data.length && data.every(el => Array.isArray(el)));\n}\n\n/**\n * Check whether the provided dataset is a *non-empty* array of objects.\n *\n * @param {Array} data Dataset to be checked.\n * @returns {boolean} `true` if data is an array of objects, `false` otherwise.\n */\nexport function isArrayOfObjects(data) {\n  return !!(Array.isArray(data) &&\n    data.length &&\n    data.every(el => typeof el === 'object' && !Array.isArray(el) && el !== null));\n}\n","export { IndexMapper } from './indexMapper';\nexport { getRegisteredMapsCounter } from './mapCollections/mapCollection';\nexport { getIncreasedIndexes, getDecreasedIndexes, alterUtilsFactory } from './maps/utils';\nexport * from './maps';\n","import { arrayMap } from '../helpers/array';\nimport {\n  createIndexMap,\n  getListWithInsertedItems,\n  getListWithRemovedItems,\n  HidingMap,\n  IndexesSequence,\n  TrimmingMap,\n} from './maps';\nimport {\n  AggregatedCollection,\n  MapCollection,\n} from './mapCollections';\nimport localHooks from '../mixins/localHooks';\nimport { mixin } from '../helpers/object';\nimport { isDefined } from '../helpers/mixed';\nimport { ChangesObservable } from './changesObservable/observable';\n\n/**\n * A set of deprecated feature names.\n *\n * @type {Set<string>}\n */\n// eslint-disable-next-line no-unused-vars\nconst deprecationWarns = new Set();\n\n/**\n * @class IndexMapper\n * @description\n *\n * Index mapper stores, registers and manages the indexes on the basis of calculations collected from the subsidiary maps.\n * It should be seen as a single source of truth (regarding row and column indexes, for example, their sequence, information if they are skipped in the process of rendering (hidden or trimmed), values linked to them)\n * for any operation that considers CRUD actions such as **insertion**, **movement**, **removal** etc, and is used to properly calculate physical and visual indexes translations in both ways.\n * It has a built-in cache that is updated only when the data or structure changes.\n *\n * **Physical index** is a type of an index from the sequence of indexes assigned to the data source rows or columns\n *  (from 0 to n, where n is number of the cells on the axis of data set).\n * **Visual index** is a type of an index from the sequence of indexes assigned to rows or columns existing in {@link DataMap} (from 0 to n, where n is number of the cells on the axis of data set).\n * **Renderable index** is a type of an index from the sequence of indexes assigned to rows or columns whose may be rendered (when they are in a viewport; from 0 to n, where n is number of the cells renderable on the axis).\n *\n * There are different kinds of index maps which may be registered in the collections and can be used by a reference.\n * They also expose public API and trigger two local hooks such as `init` (on initialization) and `change` (on change).\n *\n * These are: {@link IndexesSequence}, {@link PhysicalIndexToValueMap}, {@link LinkedPhysicalIndexToValueMap}, {@link HidingMap}, and {@link TrimmingMap}.\n */\nexport class IndexMapper {\n  /**\n   * Map for storing the sequence of indexes.\n   *\n   * It is registered by default and may be used from API methods.\n   *\n   * @private\n   * @type {IndexesSequence}\n   */\n  indexesSequence = new IndexesSequence();\n  /**\n   * Collection for different trimming maps. Indexes marked as trimmed in any map WILL NOT be included in\n   * the {@link DataMap} and won't be rendered.\n   *\n   * @private\n   * @type {MapCollection}\n   */\n  trimmingMapsCollection = new AggregatedCollection(\n    valuesForIndex => valuesForIndex.some(value => value === true), false);\n  /**\n   * Collection for different hiding maps. Indexes marked as hidden in any map WILL be included in the {@link DataMap},\n   * but won't be rendered.\n   *\n   * @private\n   * @type {MapCollection}\n   */\n  hidingMapsCollection = new AggregatedCollection(\n    valuesForIndex => valuesForIndex.some(value => value === true), false);\n  /**\n   * Collection for another kind of maps. There are stored mappings from indexes (visual or physical) to values.\n   *\n   * @private\n   * @type {MapCollection}\n   */\n  variousMapsCollection = new MapCollection();\n  /**\n   * The class instance collects row and column index changes that happen while the Handsontable\n   * is running. The object allows creating observers that you can subscribe. Each event represents\n   * the index change (e.g., insert, removing, change index value), which can be consumed by a\n   * developer to update its logic.\n   *\n   * @private\n   * @type {ChangesObservable}\n   */\n  hidingChangesObservable = new ChangesObservable({\n    initialIndexValue: false,\n  });\n  /**\n   * Cache for list of not trimmed indexes, respecting the indexes sequence (physical indexes).\n   *\n   * Note: Please keep in mind that trimmed index can be also hidden.\n   *\n   * @private\n   * @type {Array}\n   */\n  notTrimmedIndexesCache = [];\n  /**\n   * Cache for list of not hidden indexes, respecting the indexes sequence (physical indexes).\n   *\n   * Note: Please keep in mind that hidden index can be also trimmed.\n   *\n   * @private\n   * @type {Array}\n   */\n  notHiddenIndexesCache = [];\n  /**\n   * Flag determining whether actions performed on index mapper have been batched. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  isBatched = false;\n  /**\n   * Flag determining whether any action on indexes sequence has been performed. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  indexesSequenceChanged = false;\n  /**\n   * Flag informing about source of the change.\n   *\n   * @type {undefined|string}\n   */\n  indexesChangeSource = undefined;\n  /**\n   * Flag determining whether any action on trimmed indexes has been performed. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  trimmedIndexesChanged = false;\n  /**\n   * Flag determining whether any action on hidden indexes has been performed. It's used for cache management.\n   *\n   * @private\n   * @type {boolean}\n   */\n  hiddenIndexesChanged = false;\n  /**\n   * Physical indexes (respecting the sequence of indexes) which may be rendered (when they are in a viewport).\n   *\n   * @private\n   * @type {Array}\n   */\n  renderablePhysicalIndexesCache = [];\n  /**\n   * Visual indexes (native map's value) corresponding to physical indexes (native map's index).\n   *\n   * @private\n   * @type {Map}\n   */\n  fromPhysicalToVisualIndexesCache = new Map();\n  /**\n   * Visual indexes (native map's value) corresponding to physical indexes (native map's index).\n   *\n   * @private\n   * @type {Map}\n   */\n  fromVisualToRenderableIndexesCache = new Map();\n\n  constructor() {\n    this.indexesSequence.addLocalHook('change', () => {\n      this.indexesSequenceChanged = true;\n\n      // Sequence of stored indexes might change.\n      this.updateCache();\n\n      this.runLocalHooks('indexesSequenceChange', this.indexesChangeSource);\n      this.runLocalHooks('change', this.indexesSequence, null);\n    });\n\n    this.trimmingMapsCollection.addLocalHook('change', (changedMap) => {\n      this.trimmedIndexesChanged = true;\n\n      // Number of trimmed indexes might change.\n      this.updateCache();\n\n      this.runLocalHooks('change', changedMap, this.trimmingMapsCollection);\n    });\n\n    this.hidingMapsCollection.addLocalHook('change', (changedMap) => {\n      this.hiddenIndexesChanged = true;\n\n      // Number of hidden indexes might change.\n      this.updateCache();\n\n      this.runLocalHooks('change', changedMap, this.hidingMapsCollection);\n    });\n\n    this.variousMapsCollection.addLocalHook('change', (changedMap) => {\n      this.runLocalHooks('change', changedMap, this.variousMapsCollection);\n    });\n  }\n\n  /**\n   * Suspends the cache update for this map. The method is helpful to group multiple\n   * operations, which affects the cache. In this case, the cache will be updated once after\n   * calling the `resumeOperations` method.\n   */\n  suspendOperations() {\n    this.isBatched = true;\n  }\n\n  /**\n   * Resumes the cache update for this map. It recalculates the cache and restores the\n   * default behavior where each map modification updates the cache.\n   */\n  resumeOperations() {\n    this.isBatched = false;\n    this.updateCache();\n  }\n\n  /**\n   * It creates and returns the new instance of the ChangesObserver object. The object\n   * allows listening to the index changes that happen while the Handsontable is running.\n   *\n   * @param {string} indexMapType The index map type which we want to observe.\n   *                              Currently, only the 'hiding' index map types are observable.\n   * @returns {ChangesObserver}\n   */\n  createChangesObserver(indexMapType) {\n    if (indexMapType !== 'hiding') {\n      throw new Error(`Unsupported index map type \"${indexMapType}\".`);\n    }\n\n    return this.hidingChangesObservable.createObserver();\n  }\n\n  /**\n   * Creates and registers a new `IndexMap` for a specified `IndexMapper` instance.\n   *\n   * @param {string} indexName A unique index name.\n   * @param {string} mapType The index map type (e.g., \"hiding\", \"trimming\", \"physicalIndexToValue\").\n   * @param {*} [initValueOrFn] The initial value for the index map.\n   * @returns {IndexMap}\n   */\n  createAndRegisterIndexMap(indexName, mapType, initValueOrFn) {\n    return this.registerMap(indexName, createIndexMap(mapType, initValueOrFn));\n  }\n\n  /**\n   * Register map which provide some index mappings. Type of map determining to which collection it will be added.\n   *\n   * @param {string} uniqueName Name of the index map. It should be unique.\n   * @param {IndexMap} indexMap Registered index map updated on items removal and insertion.\n   * @returns {IndexMap}\n   */\n  registerMap(uniqueName, indexMap) {\n    if (this.trimmingMapsCollection.get(uniqueName) ||\n        this.hidingMapsCollection.get(uniqueName) ||\n        this.variousMapsCollection.get(uniqueName)) {\n      throw Error(`Map with name \"${uniqueName}\" has been already registered.`);\n    }\n\n    if (indexMap instanceof TrimmingMap) {\n      this.trimmingMapsCollection.register(uniqueName, indexMap);\n\n    } else if (indexMap instanceof HidingMap) {\n      this.hidingMapsCollection.register(uniqueName, indexMap);\n\n    } else {\n      this.variousMapsCollection.register(uniqueName, indexMap);\n    }\n\n    const numberOfIndexes = this.getNumberOfIndexes();\n\n    /*\n      We initialize map ony when we have full information about number of indexes and the dataset is not empty.\n      Otherwise it's unnecessary. Initialization of empty array would not give any positive changes. After initializing\n      it with number of indexes equal to 0 the map would be still empty. What's more there would be triggered\n      not needed hook (no real change have occurred). Number of indexes is known after loading data (the `loadData`\n      function from the `Core`).\n     */\n    if (numberOfIndexes > 0) {\n      indexMap.init(numberOfIndexes);\n    }\n\n    return indexMap;\n  }\n\n  /**\n   * Unregister a map with given name.\n   *\n   * @param {string} name Name of the index map.\n   */\n  unregisterMap(name) {\n    this.trimmingMapsCollection.unregister(name);\n    this.hidingMapsCollection.unregister(name);\n    this.variousMapsCollection.unregister(name);\n  }\n\n  /**\n   * Unregisters all collected index map instances from all map collection types.\n   */\n  unregisterAll() {\n    this.trimmingMapsCollection.unregisterAll();\n    this.hidingMapsCollection.unregisterAll();\n    this.variousMapsCollection.unregisterAll();\n  }\n\n  /**\n   * Get a physical index corresponding to the given visual index.\n   *\n   * @param {number} visualIndex Visual index.\n   * @returns {number|null} Returns translated index mapped by passed visual index.\n   */\n  getPhysicalFromVisualIndex(visualIndex) {\n    // Index in the table boundaries provided by the `DataMap`.\n    const physicalIndex = this.notTrimmedIndexesCache[visualIndex];\n\n    if (isDefined(physicalIndex)) {\n      return physicalIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get a physical index corresponding to the given renderable index.\n   *\n   * @param {number} renderableIndex Renderable index.\n   * @returns {null|number}\n   */\n  getPhysicalFromRenderableIndex(renderableIndex) {\n    const physicalIndex = this.renderablePhysicalIndexesCache[renderableIndex];\n\n    // Index in the renderable table boundaries.\n    if (isDefined(physicalIndex)) {\n      return physicalIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get a visual index corresponding to the given physical index.\n   *\n   * @param {number} physicalIndex Physical index to search.\n   * @returns {number|null} Returns a visual index of the index mapper.\n   */\n  getVisualFromPhysicalIndex(physicalIndex) {\n    const visualIndex = this.fromPhysicalToVisualIndexesCache.get(physicalIndex);\n\n    // Index in the table boundaries provided by the `DataMap`.\n    if (isDefined(visualIndex)) {\n      return visualIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get a visual index corresponding to the given renderable index.\n   *\n   * @param {number} renderableIndex Renderable index.\n   * @returns {null|number}\n   */\n  getVisualFromRenderableIndex(renderableIndex) {\n    return this.getVisualFromPhysicalIndex(this.getPhysicalFromRenderableIndex(renderableIndex));\n  }\n\n  /**\n   * Get a renderable index corresponding to the given visual index.\n   *\n   * @param {number} visualIndex Visual index.\n   * @returns {null|number}\n   */\n  getRenderableFromVisualIndex(visualIndex) {\n    const renderableIndex = this.fromVisualToRenderableIndexesCache.get(visualIndex);\n\n    // Index in the renderable table boundaries.\n    if (isDefined(renderableIndex)) {\n      return renderableIndex;\n    }\n\n    return null;\n  }\n\n  /**\n   * Search for the nearest not-hidden row or column.\n   *\n   * @param {number} fromVisualIndex The visual index of the row or column from which the search starts.<br><br>\n   * If the row or column from which the search starts is not hidden, the method simply returns the `fromVisualIndex` number.\n   * @param {number} searchDirection The search direction.<br><br>`1`: search from `fromVisualIndex` to the end of the dataset.<br><br>\n   * `-1`: search from `fromVisualIndex` to the beginning of the dataset (i.e., to the row or column at visual index `0`).\n   * @param {boolean} searchAlsoOtherWayAround `true`: if a search in a first direction failed, try the opposite direction.<br><br>\n   * `false`: search in one direction only.\n   *\n   * @returns {number|null} A visual index of a row or column, or `null`.\n   */\n  getNearestNotHiddenIndex(fromVisualIndex, searchDirection, searchAlsoOtherWayAround = false) {\n    const physicalIndex = this.getPhysicalFromVisualIndex(fromVisualIndex);\n\n    if (physicalIndex === null) {\n      return null;\n    }\n\n    if (this.fromVisualToRenderableIndexesCache.has(fromVisualIndex)) {\n      return fromVisualIndex;\n    }\n\n    const visibleIndexes = Array.from(this.fromVisualToRenderableIndexesCache.keys());\n    let index = -1;\n\n    if (searchDirection > 0) {\n      index = visibleIndexes.findIndex(visualIndex => visualIndex > fromVisualIndex);\n    } else {\n      index = visibleIndexes.reverse().findIndex(visualIndex => visualIndex < fromVisualIndex);\n    }\n\n    if (index === -1) {\n      if (searchAlsoOtherWayAround) {\n        return this.getNearestNotHiddenIndex(fromVisualIndex, -searchDirection, false);\n      }\n\n      return null;\n    }\n\n    return visibleIndexes[index];\n  }\n\n  /**\n   * Set default values for all indexes in registered index maps.\n   *\n   * @param {number} [length] Destination length for all stored index maps.\n   */\n  initToLength(length = this.getNumberOfIndexes()) {\n    this.notTrimmedIndexesCache = [...new Array(length).keys()];\n    this.notHiddenIndexesCache = [...new Array(length).keys()];\n\n    this.suspendOperations();\n    this.indexesChangeSource = 'init';\n    this.indexesSequence.init(length);\n    this.indexesChangeSource = undefined;\n    this.trimmingMapsCollection.initEvery(length);\n    this.resumeOperations();\n\n    // We move initialization of hidden collection to next batch for purpose of working on sequence of already trimmed indexes.\n    this.suspendOperations();\n    this.hidingMapsCollection.initEvery(length);\n\n    // It shouldn't reset the cache.\n    this.variousMapsCollection.initEvery(length);\n    this.resumeOperations();\n\n    this.runLocalHooks('init');\n  }\n\n  /**\n   * Trim/extend the mappers to fit the desired length.\n   *\n   * @param {number} length New mapper length.\n   */\n  fitToLength(length) {\n    const currentIndexCount = this.getNumberOfIndexes();\n\n    if (length < currentIndexCount) {\n      const indexesToBeRemoved = [\n        ...Array(this.getNumberOfIndexes() - length).keys()\n      ].map(i => i + length);\n\n      this.removeIndexes(indexesToBeRemoved);\n\n    } else {\n      this.insertIndexes(currentIndexCount, length - currentIndexCount);\n    }\n  }\n\n  /**\n   * Get sequence of indexes.\n   *\n   * @returns {Array} Physical indexes.\n   */\n  getIndexesSequence() {\n    return this.indexesSequence.getValues();\n  }\n\n  /**\n   * Set completely new indexes sequence.\n   *\n   * @param {Array} indexes Physical indexes.\n   */\n  setIndexesSequence(indexes) {\n    if (this.indexesChangeSource === undefined) {\n      this.indexesChangeSource = 'update';\n    }\n\n    this.indexesSequence.setValues(indexes);\n\n    if (this.indexesChangeSource === 'update') {\n      this.indexesChangeSource = undefined;\n    }\n  }\n\n  /**\n   * Get all NOT trimmed indexes.\n   *\n   * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n   *\n   * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n   * @returns {Array} List of physical indexes. Index of this native array is a \"visual index\",\n   * value of this native array is a \"physical index\".\n   */\n  getNotTrimmedIndexes(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.notTrimmedIndexesCache;\n    }\n\n    const indexesSequence = this.getIndexesSequence();\n\n    return indexesSequence.filter(physicalIndex => this.isTrimmed(physicalIndex) === false);\n  }\n\n  /**\n   * Get length of all NOT trimmed indexes.\n   *\n   * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n   *\n   * @returns {number}\n   */\n  getNotTrimmedIndexesLength() {\n    return this.getNotTrimmedIndexes().length;\n  }\n\n  /**\n   * Get all NOT hidden indexes.\n   *\n   * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n   *\n   * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n   * @returns {Array} List of physical indexes. Please keep in mind that index of this native array IS NOT a \"visual index\".\n   */\n  getNotHiddenIndexes(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.notHiddenIndexesCache;\n    }\n\n    const indexesSequence = this.getIndexesSequence();\n\n    return indexesSequence.filter(physicalIndex => this.isHidden(physicalIndex) === false);\n  }\n\n  /**\n   * Get length of all NOT hidden indexes.\n   *\n   * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n   *\n   * @returns {number}\n   */\n  getNotHiddenIndexesLength() {\n    return this.getNotHiddenIndexes().length;\n  }\n\n  /**\n   * Get list of physical indexes (respecting the sequence of indexes) which may be rendered (when they are in a viewport).\n   *\n   * @param {boolean} [readFromCache=true] Determine if read indexes from cache.\n   * @returns {Array} List of physical indexes. Index of this native array is a \"renderable index\",\n   * value of this native array is a \"physical index\".\n   */\n  getRenderableIndexes(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.renderablePhysicalIndexesCache;\n    }\n\n    const notTrimmedIndexes = this.getNotTrimmedIndexes();\n\n    return notTrimmedIndexes.filter(physicalIndex => this.isHidden(physicalIndex) === false);\n  }\n\n  /**\n   * Get length of all NOT trimmed and NOT hidden indexes.\n   *\n   * @returns {number}\n   */\n  getRenderableIndexesLength() {\n    return this.getRenderableIndexes().length;\n  }\n\n  /**\n   * Get number of all indexes.\n   *\n   * @returns {number}\n   */\n  getNumberOfIndexes() {\n    return this.getIndexesSequence().length;\n  }\n\n  /**\n   * Move indexes in the index mapper.\n   *\n   * @param {number|Array} movedIndexes Visual index(es) to move.\n   * @param {number} finalIndex Visual index being a start index for the moved elements.\n   */\n  moveIndexes(movedIndexes, finalIndex) {\n    if (typeof movedIndexes === 'number') {\n      movedIndexes = [movedIndexes];\n    }\n\n    const physicalMovedIndexes = arrayMap(movedIndexes, visualIndex => this.getPhysicalFromVisualIndex(visualIndex));\n    const notTrimmedIndexesLength = this.getNotTrimmedIndexesLength();\n    const movedIndexesLength = movedIndexes.length;\n\n    // Removing moved indexes without re-indexing.\n    const notMovedIndexes = getListWithRemovedItems(this.getIndexesSequence(), physicalMovedIndexes);\n    const notTrimmedNotMovedItems = notMovedIndexes.filter(index => this.isTrimmed(index) === false);\n\n    // When item(s) are moved after the last visible item we assign the last possible index.\n    let destinationPosition = notMovedIndexes.indexOf(notTrimmedNotMovedItems[notTrimmedNotMovedItems.length - 1]) + 1;\n\n    // Otherwise, we find proper index for inserted item(s).\n    if (finalIndex + movedIndexesLength < notTrimmedIndexesLength) {\n      // Physical index at final index position.\n      const physicalIndex = notTrimmedNotMovedItems[finalIndex];\n\n      destinationPosition = notMovedIndexes.indexOf(physicalIndex);\n    }\n\n    this.indexesChangeSource = 'move';\n\n    // Adding indexes without re-indexing.\n    this.setIndexesSequence(getListWithInsertedItems(notMovedIndexes, destinationPosition, physicalMovedIndexes));\n\n    this.indexesChangeSource = undefined;\n  }\n\n  /**\n   * Get whether index is trimmed. Index marked as trimmed isn't included in a {@link DataMap} and isn't rendered.\n   *\n   * @param {number} physicalIndex Physical index.\n   * @returns {boolean}\n   */\n  isTrimmed(physicalIndex) {\n    return this.trimmingMapsCollection.getMergedValueAtIndex(physicalIndex);\n  }\n\n  /**\n   * Get whether index is hidden. Index marked as hidden is included in a {@link DataMap}, but isn't rendered.\n   *\n   * @param {number} physicalIndex Physical index.\n   * @returns {boolean}\n   */\n  isHidden(physicalIndex) {\n    return this.hidingMapsCollection.getMergedValueAtIndex(physicalIndex);\n  }\n\n  /**\n   * Insert new indexes and corresponding mapping and update values of the others, for all stored index maps.\n   *\n   * @private\n   * @param {number} firstInsertedVisualIndex First inserted visual index.\n   * @param {number} amountOfIndexes Amount of inserted indexes.\n   */\n  insertIndexes(firstInsertedVisualIndex, amountOfIndexes) {\n    const nthVisibleIndex = this.getNotTrimmedIndexes()[firstInsertedVisualIndex];\n    const firstInsertedPhysicalIndex = isDefined(nthVisibleIndex) ? nthVisibleIndex : this.getNumberOfIndexes();\n    const insertionIndex = this.getIndexesSequence().includes(nthVisibleIndex) ?\n      this.getIndexesSequence().indexOf(nthVisibleIndex) : this.getNumberOfIndexes();\n    const insertedIndexes = arrayMap(new Array(amountOfIndexes).fill(firstInsertedPhysicalIndex),\n      (nextIndex, stepsFromStart) => nextIndex + stepsFromStart);\n\n    this.suspendOperations();\n    this.indexesChangeSource = 'insert';\n    this.indexesSequence.insert(insertionIndex, insertedIndexes);\n    this.indexesChangeSource = undefined;\n    this.trimmingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n    this.hidingMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n    this.variousMapsCollection.insertToEvery(insertionIndex, insertedIndexes);\n    this.resumeOperations();\n  }\n\n  /**\n   * Remove some indexes and corresponding mappings and update values of the others, for all stored index maps.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  removeIndexes(removedIndexes) {\n    this.suspendOperations();\n    this.indexesChangeSource = 'remove';\n    this.indexesSequence.remove(removedIndexes);\n    this.indexesChangeSource = undefined;\n    this.trimmingMapsCollection.removeFromEvery(removedIndexes);\n    this.hidingMapsCollection.removeFromEvery(removedIndexes);\n    this.variousMapsCollection.removeFromEvery(removedIndexes);\n    this.resumeOperations();\n  }\n\n  /**\n   * Rebuild cache for some indexes. Every action on indexes sequence or indexes skipped in the process of rendering\n   * by default reset cache, thus batching some index maps actions is recommended.\n   *\n   * @private\n   * @param {boolean} [force=false] Determine if force cache update.\n   */\n  updateCache(force = false) {\n    const anyCachedIndexChanged = this.indexesSequenceChanged ||\n      this.trimmedIndexesChanged || this.hiddenIndexesChanged;\n\n    if (force === true || (this.isBatched === false && anyCachedIndexChanged === true)) {\n      this.trimmingMapsCollection.updateCache();\n      this.hidingMapsCollection.updateCache();\n      this.notTrimmedIndexesCache = this.getNotTrimmedIndexes(false);\n      this.notHiddenIndexesCache = this.getNotHiddenIndexes(false);\n      this.renderablePhysicalIndexesCache = this.getRenderableIndexes(false);\n      this.cacheFromPhysicalToVisualIndexes();\n      this.cacheFromVisualToRenderableIndexes();\n\n      // Currently there's support only for the \"hiding\" map type.\n      if (this.hiddenIndexesChanged) {\n        this.hidingChangesObservable.emit(this.hidingMapsCollection.getMergedValues());\n      }\n\n      this.runLocalHooks('cacheUpdated', {\n        indexesSequenceChanged: this.indexesSequenceChanged,\n        trimmedIndexesChanged: this.trimmedIndexesChanged,\n        hiddenIndexesChanged: this.hiddenIndexesChanged,\n      });\n\n      this.indexesSequenceChanged = false;\n      this.trimmedIndexesChanged = false;\n      this.hiddenIndexesChanged = false;\n    }\n  }\n\n  /**\n   * Update cache for translations from physical to visual indexes.\n   *\n   * @private\n   */\n  cacheFromPhysicalToVisualIndexes() {\n    const nrOfNotTrimmedIndexes = this.getNotTrimmedIndexesLength();\n\n    this.fromPhysicalToVisualIndexesCache.clear();\n\n    for (let visualIndex = 0; visualIndex < nrOfNotTrimmedIndexes; visualIndex += 1) {\n      const physicalIndex = this.getPhysicalFromVisualIndex(visualIndex);\n\n      // Every visual index have corresponding physical index, but some physical indexes may don't have\n      // corresponding visual indexes (physical indexes may represent trimmed indexes, beyond the table boundaries)\n      this.fromPhysicalToVisualIndexesCache.set(physicalIndex, visualIndex);\n    }\n  }\n\n  /**\n   * Update cache for translations from visual to renderable indexes.\n   *\n   * @private\n   */\n  cacheFromVisualToRenderableIndexes() {\n    const nrOfRenderableIndexes = this.getRenderableIndexesLength();\n\n    this.fromVisualToRenderableIndexesCache.clear();\n\n    for (let renderableIndex = 0; renderableIndex < nrOfRenderableIndexes; renderableIndex += 1) {\n      // Can't use getRenderableFromVisualIndex here because we're building the cache here\n      const physicalIndex = this.getPhysicalFromRenderableIndex(renderableIndex);\n      const visualIndex = this.getVisualFromPhysicalIndex(physicalIndex);\n\n      this.fromVisualToRenderableIndexesCache.set(visualIndex, renderableIndex);\n    }\n  }\n}\n\nmixin(IndexMapper, localHooks);\n","import { HidingMap } from './hidingMap';\nimport { IndexMap } from './indexMap';\nimport { LinkedPhysicalIndexToValueMap } from './linkedPhysicalIndexToValueMap';\nimport { PhysicalIndexToValueMap } from './physicalIndexToValueMap';\nimport { TrimmingMap } from './trimmingMap';\n\nexport * from './indexesSequence';\nexport * from './utils/indexesSequence';\nexport {\n  HidingMap,\n  IndexMap,\n  LinkedPhysicalIndexToValueMap,\n  PhysicalIndexToValueMap,\n  TrimmingMap\n};\n\nconst availableIndexMapTypes = new Map([\n  ['hiding', HidingMap],\n  ['index', IndexMap],\n  ['linkedPhysicalIndexToValue', LinkedPhysicalIndexToValueMap],\n  ['physicalIndexToValue', PhysicalIndexToValueMap],\n  ['trimming', TrimmingMap],\n]);\n\n/**\n * Creates and returns new IndexMap instance.\n *\n * @param {string} mapType The type of the map.\n * @param {*} [initValueOrFn=null] Initial value or function for index map.\n * @returns {IndexMap}\n */\nexport function createIndexMap(mapType, initValueOrFn = null) {\n  if (!availableIndexMapTypes.has(mapType)) {\n    throw new Error(`The provided map type (\"${mapType}\") does not exist.`);\n  }\n\n  return new (availableIndexMapTypes.get(mapType))(initValueOrFn);\n}\n","import { PhysicalIndexToValueMap } from './physicalIndexToValueMap';\nimport { arrayReduce } from '../../helpers/array';\n\n/**\n * Map for storing mappings from an physical index to a boolean value. It stores information whether physical index is\n * included in a dataset, but skipped in the process of rendering.\n *\n * @class HidingMap\n */\nexport class HidingMap extends PhysicalIndexToValueMap {\n  constructor(initValueOrFn = false) {\n    super(initValueOrFn);\n  }\n\n  /**\n   * Get physical indexes which are hidden.\n   *\n   * Note: Indexes marked as hidden are included in a {@link DataMap}, but aren't rendered.\n   *\n   * @returns {Array}\n   */\n  getHiddenIndexes() {\n    return arrayReduce(this.getValues(), (indexesList, isHidden, physicalIndex) => {\n      if (isHidden) {\n        indexesList.push(physicalIndex);\n      }\n\n      return indexesList;\n    }, []);\n  }\n}\n","import { IndexMap } from './indexMap';\nimport { getListWithRemovedItems, getListWithInsertedItems } from './utils/physicallyIndexed';\n\n/**\n * Map for storing mappings from an physical index to a value.\n *\n * Does not update stored values on remove/add row or column action.\n *\n * @class PhysicalIndexToValueMap\n */\nexport class PhysicalIndexToValueMap extends IndexMap {\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    this.indexedValues = getListWithInsertedItems(\n      this.indexedValues,\n      insertionIndex,\n      insertedIndexes,\n      this.initValueOrFn\n    );\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n}\n","import { rangeEach } from '../../helpers/number';\nimport { mixin } from '../../helpers/object';\nimport { isFunction } from '../../helpers/function';\nimport localHooks from '../../mixins/localHooks';\n\n/**\n * Map for storing mappings from an index to a value.\n *\n * @class IndexMap\n */\nexport class IndexMap {\n  /**\n   * List of values for particular indexes.\n   *\n   * @private\n   * @type {Array}\n   */\n  indexedValues = [];\n  /**\n   * Initial value or function for each existing index.\n   *\n   * @private\n   * @type {*}\n   */\n  initValueOrFn;\n\n  constructor(initValueOrFn = null) {\n    this.initValueOrFn = initValueOrFn;\n  }\n\n  /**\n   * Get full list of values for particular indexes.\n   *\n   * @returns {Array}\n   */\n  getValues() {\n    return this.indexedValues;\n  }\n\n  /**\n   * Get value for the particular index.\n   *\n   * @param {number} index Index for which value is got.\n   * @returns {*}\n   */\n  getValueAtIndex(index) {\n    const values = this.indexedValues;\n\n    if (index < values.length) {\n      return values[index];\n    }\n  }\n\n  /**\n   * Set new values for particular indexes.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @param {Array} values List of set values.\n   */\n  setValues(values) {\n    this.indexedValues = values.slice();\n\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Set new value for the particular index.\n   *\n   * @param {number} index The index.\n   * @param {*} value The value to save.\n   *\n   * Note: Please keep in mind that it is not possible to set value beyond the map (not respecting already set\n   * map's size). Please use the `setValues` method when you would like to extend the map.\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @returns {boolean}\n   */\n  setValueAtIndex(index, value) {\n    if (index < this.indexedValues.length) {\n      this.indexedValues[index] = value;\n\n      this.runLocalHooks('change');\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Clear all values to the defaults.\n   */\n  clear() {\n    this.setDefaultValues();\n  }\n\n  /**\n   * Get length of the index map.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    return this.getValues().length;\n  }\n\n  /**\n   * Set default values for elements from `0` to `n`, where `n` is equal to the handled variable.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   * @param {number} [length] Length of list.\n   */\n  setDefaultValues(length = this.indexedValues.length) {\n    this.indexedValues.length = 0;\n\n    if (isFunction(this.initValueOrFn)) {\n      rangeEach(length - 1, index => this.indexedValues.push(this.initValueOrFn(index)));\n\n    } else {\n      rangeEach(length - 1, () => this.indexedValues.push(this.initValueOrFn));\n    }\n\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Initialize list with default values for particular indexes.\n   *\n   * @private\n   * @param {number} length New length of indexed list.\n   * @returns {IndexMap}\n   */\n  init(length) {\n    this.setDefaultValues(length);\n\n    this.runLocalHooks('init');\n\n    return this;\n  }\n\n  /**\n   * Add values to the list.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   */\n  insert() {\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Remove values from the list.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   */\n  remove() {\n    this.runLocalHooks('change');\n  }\n\n  /**\n   * Destroys the Map instance.\n   */\n  destroy() {\n    this.clearLocalHooks();\n\n    this.indexedValues = null;\n    this.initValueOrFn = null;\n  }\n}\n\nmixin(IndexMap, localHooks);\n","import { isFunction } from '../../../helpers/function';\nimport { arrayFilter } from '../../../helpers/array';\n\n/**\n * Insert new items to the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {number} insertionIndex Position inside the actual list.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @param {*} insertedValuesMapping Mapping which may provide value or function returning value for the specific parameters.\n * @returns {Array} List with new mappings.\n */\nexport function getListWithInsertedItems(indexedValues, insertionIndex, insertedIndexes, insertedValuesMapping) {\n  const firstInsertedIndex = insertedIndexes.length ? insertedIndexes[0] : undefined;\n\n  return [\n    ...indexedValues.slice(0, firstInsertedIndex),\n    ...insertedIndexes.map((insertedIndex, ordinalNumber) => {\n      if (isFunction(insertedValuesMapping)) {\n        return insertedValuesMapping(insertedIndex, ordinalNumber);\n      }\n\n      return insertedValuesMapping;\n    }),\n    ...(firstInsertedIndex === undefined ? [] : indexedValues.slice(firstInsertedIndex)),\n  ];\n}\n\n/**\n * Filter items from the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} Reduced list of mappings.\n */\nexport function getListWithRemovedItems(indexedValues, removedIndexes) {\n  return arrayFilter(indexedValues, (_, index) => removedIndexes.includes(index) === false);\n}\n","import { IndexMap } from './indexMap';\nimport { getListWithRemovedItems, getListWithInsertedItems } from './utils/physicallyIndexed';\nimport { getListWithRemovedItems as getListWithoutIndexes } from './utils/indexesSequence';\nimport { getDecreasedIndexes, getIncreasedIndexes } from './utils/actionsOnIndexes';\nimport { isFunction } from '../../helpers/function';\n\n/**\n * Map for storing mappings from an physical index to a value. Those entries are linked and stored in a certain order.\n *\n * It does not update stored values on remove/add row or column action. Otherwise, order of entries is updated after\n * such changes.\n *\n * @class LinkedPhysicalIndexToValueMap\n */\nexport class LinkedPhysicalIndexToValueMap extends IndexMap {\n  /**\n   * Indexes and values corresponding to them (entries) are stored in a certain order.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  orderOfIndexes = []\n\n  /**\n   * Get full list of ordered values for particular indexes.\n   *\n   * @returns {Array}\n   */\n  getValues() {\n    return this.orderOfIndexes.map(physicalIndex => this.indexedValues[physicalIndex]);\n  }\n\n  /**\n   * Set new values for particular indexes. Entries are linked and stored in a certain order.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @param {Array} values List of set values.\n   */\n  setValues(values) {\n    this.orderOfIndexes = [...Array(values.length).keys()];\n\n    super.setValues(values);\n  }\n\n  /**\n   * Set value at index and add it to the linked list of entries. Entries are stored in a certain order.\n   *\n   * Note: Value will be added at the end of the queue.\n   *\n   * @param {number} index The index.\n   * @param {*} value The value to save.\n   * @param {number} position Position to which entry will be added.\n   *\n   * @returns {boolean}\n   */\n  setValueAtIndex(index, value, position = this.orderOfIndexes.length) {\n    if (index < this.indexedValues.length) {\n      this.indexedValues[index] = value;\n\n      if (this.orderOfIndexes.includes(index) === false) {\n        this.orderOfIndexes.splice(position, 0, index);\n      }\n\n      this.runLocalHooks('change');\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Clear value for particular index.\n   *\n   * @param {number} physicalIndex Physical index.\n   */\n  clearValue(physicalIndex) {\n    this.orderOfIndexes = getListWithoutIndexes(this.orderOfIndexes, [physicalIndex]);\n\n    if (isFunction(this.initValueOrFn)) {\n      super.setValueAtIndex(physicalIndex, this.initValueOrFn(physicalIndex));\n\n    } else {\n      super.setValueAtIndex(physicalIndex, this.initValueOrFn);\n    }\n  }\n\n  /**\n   * Get length of the index map.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    return this.orderOfIndexes.length;\n  }\n\n  /**\n   * Set default values for elements from `0` to `n`, where `n` is equal to the handled variable.\n   *\n   * Note: Please keep in mind that `change` hook triggered by the method may not update cache of a collection immediately.\n   *\n   * @private\n   * @param {number} [length] Length of list.\n   */\n  setDefaultValues(length = this.indexedValues.length) {\n    this.orderOfIndexes.length = 0;\n\n    super.setDefaultValues(length);\n  }\n\n  /**\n   * Add values to list and reorganize. It updates list of indexes related to ordered values.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    this.indexedValues = getListWithInsertedItems(\n      this.indexedValues,\n      insertionIndex,\n      insertedIndexes,\n      this.initValueOrFn\n    );\n    this.orderOfIndexes = getIncreasedIndexes(this.orderOfIndexes, insertedIndexes);\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize. It updates list of indexes related to ordered values.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n    this.orderOfIndexes = getListWithoutIndexes(this.orderOfIndexes, removedIndexes);\n    this.orderOfIndexes = getDecreasedIndexes(this.orderOfIndexes, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n\n  /**\n   * Get every entry containing index and value, respecting order of indexes.\n   *\n   * @returns {Array}\n   */\n  getEntries() {\n    return this.orderOfIndexes.map(physicalIndex => [physicalIndex, this.getValueAtIndex(physicalIndex)]);\n  }\n}\n","import { arrayFilter } from '../../../helpers/array';\n\n/**\n * Insert new items to the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {number} insertionIndex Position inside the actual list.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @returns {Array} List with new mappings.\n */\nexport function getListWithInsertedItems(indexedValues, insertionIndex, insertedIndexes) {\n  return [...indexedValues.slice(0, insertionIndex), ...insertedIndexes, ...indexedValues.slice(insertionIndex)];\n}\n\n/**\n * Filter items from the list.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} Reduced list of mappings.\n */\nexport function getListWithRemovedItems(indexedValues, removedIndexes) {\n  return arrayFilter(indexedValues, (index) => {\n    return removedIndexes.includes(index) === false;\n  });\n}\n","import { arrayMap } from '../../../helpers/array';\n\n/**\n * Transform mappings after removal.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} removedIndexes List of removed indexes.\n * @returns {Array} List with decreased indexes.\n */\nexport function getDecreasedIndexes(indexedValues, removedIndexes) {\n  return arrayMap(indexedValues, index => index - removedIndexes.filter(removedIndex => removedIndex < index).length);\n}\n\n/**\n * Transform mappings after insertion.\n *\n * @private\n * @param {Array} indexedValues List of values for particular indexes.\n * @param {Array} insertedIndexes List of inserted indexes.\n * @returns {Array} List with increased indexes.\n */\nexport function getIncreasedIndexes(indexedValues, insertedIndexes) {\n  const firstInsertedIndex = insertedIndexes[0];\n  const amountOfIndexes = insertedIndexes.length;\n\n  return arrayMap(indexedValues, (index) => {\n    if (index >= firstInsertedIndex) {\n      return index + amountOfIndexes;\n    }\n\n    return index;\n  });\n}\n","import { PhysicalIndexToValueMap } from './physicalIndexToValueMap';\nimport { arrayReduce } from '../../helpers/array';\n\n/**\n * Map for storing mappings from an physical index to a boolean value. It stores information whether physical index is\n * NOT included in a dataset and skipped in the process of rendering.\n *\n * @class TrimmingMap\n */\nexport class TrimmingMap extends PhysicalIndexToValueMap {\n  constructor(initValueOrFn = false) {\n    super(initValueOrFn);\n  }\n\n  /**\n   * Get physical indexes which are trimmed.\n   *\n   * Note: Indexes marked as trimmed aren't included in a {@link DataMap} and aren't rendered.\n   *\n   * @returns {Array}\n   */\n  getTrimmedIndexes() {\n    return arrayReduce(this.getValues(), (indexesList, isTrimmed, physicalIndex) => {\n      if (isTrimmed) {\n        indexesList.push(physicalIndex);\n      }\n\n      return indexesList;\n    }, []);\n  }\n}\n","import { IndexMap } from './indexMap';\nimport { getListWithRemovedItems, getListWithInsertedItems } from './utils/indexesSequence';\nimport { getDecreasedIndexes, getIncreasedIndexes } from './utils';\n\n/**\n * Map for storing mappings from an index to a physical index.\n *\n * It also updates the physical indexes (remaining in the map) on remove/add row or column action.\n *\n * @class IndexesSequence\n */\nexport class IndexesSequence extends IndexMap {\n  constructor() {\n    // Not handling custom init function or init value.\n    super(index => index);\n  }\n\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    const listAfterUpdate = getIncreasedIndexes(this.indexedValues, insertedIndexes);\n\n    this.indexedValues = getListWithInsertedItems(listAfterUpdate, insertionIndex, insertedIndexes);\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    const listAfterUpdate = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    this.indexedValues = getDecreasedIndexes(listAfterUpdate, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n}\n","import { getDecreasedIndexes, getIncreasedIndexes } from './actionsOnIndexes';\nimport {\n  getListWithInsertedItems as sequenceStrategyInsert,\n  getListWithRemovedItems as sequenceStrategyRemove\n} from './indexesSequence';\nimport {\n  getListWithInsertedItems as physicalStrategyInsert,\n  getListWithRemovedItems as physicalStrategyRemove\n} from './physicallyIndexed';\n\nconst alterStrategies = new Map([\n  ['indexesSequence', {\n    getListWithInsertedItems: sequenceStrategyInsert,\n    getListWithRemovedItems: sequenceStrategyRemove\n  }],\n  ['physicallyIndexed', {\n    getListWithInsertedItems: physicalStrategyInsert,\n    getListWithRemovedItems: physicalStrategyRemove\n  }],\n]);\n\nconst alterUtilsFactory = (indexationStrategy) => {\n  if (alterStrategies.has(indexationStrategy) === false) {\n    throw new Error(`Alter strategy with ID '${indexationStrategy}' does not exist.`);\n  }\n\n  return alterStrategies.get(indexationStrategy);\n};\n\nexport {\n  getDecreasedIndexes,\n  getIncreasedIndexes,\n  alterUtilsFactory\n};\n","export * from './aggregatedCollection';\nexport * from './mapCollection';\n","import { MapCollection } from './mapCollection';\nimport { arrayMap } from '../../helpers/array';\nimport { isDefined } from '../../helpers/mixed';\n\n/**\n * Collection of maps. This collection aggregate maps with the same type of values. Values from the registered maps\n * can be used to calculate a single result for particular index.\n */\nexport class AggregatedCollection extends MapCollection {\n  /**\n   * List of merged values. Value for each index is calculated using values inside registered maps.\n   *\n   * @type {Array}\n   */\n  mergedValuesCache = [];\n  /**\n   * Function which do aggregation on the values for particular index.\n   */\n  aggregationFunction;\n  /**\n   * Fallback value when there is no calculated value for particular index.\n   */\n  fallbackValue;\n\n  constructor(aggregationFunction, fallbackValue) {\n    super();\n    this.aggregationFunction = aggregationFunction;\n    this.fallbackValue = fallbackValue;\n  }\n\n  /**\n   * Get merged values for all indexes.\n   *\n   * @param {boolean} [readFromCache=true] Determine if read results from the cache.\n   * @returns {Array}\n   */\n  getMergedValues(readFromCache = true) {\n    if (readFromCache === true) {\n      return this.mergedValuesCache;\n    }\n\n    if (this.getLength() === 0) {\n      return [];\n    }\n\n    // Below variable stores values for every particular map. Example describing situation when we have 2 registered maps,\n    // with length equal to 5.\n    //\n    // +---------+---------------------------------------------+\n    // |         |                  indexes                    |\n    // +---------+---------------------------------------------+\n    // |   maps  |     0    |   1   |    2  |   3   |    4     |\n    // +---------+----------+-------+-------+-------+----------+\n    // |    0    | [[ value,  value,  value,  value,  value ], |\n    // |    1    | [  value,  value,  value,  value,  value ]] |\n    // +---------+----------+-------+-------+-------+----------+\n    const mapsValuesMatrix = arrayMap(this.get(), map => map.getValues());\n    // Below variable stores values for every particular index. Example describing situation when we have 2 registered maps,\n    // with length equal to 5.\n    //\n    // +---------+---------------------+\n    // |         |         maps        |\n    // +---------+---------------------+\n    // | indexes |     0    |    1     |\n    // +---------+----------+----------+\n    // |    0    | [[ value,  value ], |\n    // |    1    | [  value,  value ], |\n    // |    2    | [  value,  value ], |\n    // |    3    | [  value,  value ], |\n    // |    4    | [  value,  value ]] |\n    // +---------+----------+----------+\n    const indexesValuesMatrix = [];\n    const mapsLength = (isDefined(mapsValuesMatrix[0]) && mapsValuesMatrix[0].length) || 0;\n\n    for (let index = 0; index < mapsLength; index += 1) {\n      const valuesForIndex = [];\n\n      for (let mapIndex = 0; mapIndex < this.getLength(); mapIndex += 1) {\n        valuesForIndex.push(mapsValuesMatrix[mapIndex][index]);\n      }\n\n      indexesValuesMatrix.push(valuesForIndex);\n    }\n\n    return arrayMap(indexesValuesMatrix, this.aggregationFunction);\n  }\n\n  /**\n   * Get merged value for particular index.\n   *\n   * @param {number} index Index for which we calculate single result.\n   * @param {boolean} [readFromCache=true] Determine if read results from the cache.\n   * @returns {*}\n   */\n  getMergedValueAtIndex(index, readFromCache) {\n    const valueAtIndex = this.getMergedValues(readFromCache)[index];\n\n    return isDefined(valueAtIndex) ? valueAtIndex : this.fallbackValue;\n  }\n\n  /**\n   * Rebuild cache for the collection.\n   */\n  updateCache() {\n    this.mergedValuesCache = this.getMergedValues(false);\n  }\n}\n","import { isUndefined, isDefined } from '../../helpers/mixed';\nimport { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\n// Counter for checking if there is a memory leak.\nlet registeredMaps = 0;\n\n/**\n * Collection of index maps having unique names. It allow us to perform bulk operations such as init, remove, insert on all index maps that have been registered in the collection.\n */\nexport class MapCollection {\n  /**\n   * Collection of index maps.\n   *\n   * @type {Map<string, IndexMap>}\n   */\n  collection = new Map();\n\n  /**\n   * Register custom index map.\n   *\n   * @param {string} uniqueName Unique name of the index map.\n   * @param {IndexMap} indexMap Index map containing miscellaneous (i.e. Meta data, indexes sequence), updated after remove and insert data actions.\n   */\n  register(uniqueName, indexMap) {\n    if (this.collection.has(uniqueName) === false) {\n      this.collection.set(uniqueName, indexMap);\n\n      indexMap.addLocalHook('change', () => this.runLocalHooks('change', indexMap));\n\n      registeredMaps += 1;\n    }\n  }\n\n  /**\n   * Unregister custom index map.\n   *\n   * @param {string} name Name of the index map.\n   */\n  unregister(name) {\n    const indexMap = this.collection.get(name);\n\n    if (isDefined(indexMap)) {\n      indexMap.destroy();\n      this.collection.delete(name);\n\n      this.runLocalHooks('change', indexMap);\n\n      registeredMaps -= 1;\n    }\n  }\n\n  /**\n   * Unregisters and destroys all collected index map instances.\n   */\n  unregisterAll() {\n    this.collection.forEach((indexMap, name) => this.unregister(name));\n    this.collection.clear();\n  }\n\n  /**\n   * Get index map for the provided name.\n   *\n   * @param {string} [name] Name of the index map.\n   * @returns {Array|IndexMap}\n   */\n  get(name) {\n    if (isUndefined(name)) {\n      return Array.from(this.collection.values());\n    }\n\n    return this.collection.get(name);\n  }\n\n  /**\n   * Get collection size.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    return this.collection.size;\n  }\n\n  /**\n   * Remove some indexes and corresponding mappings and update values of the others within all collection's index maps.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  removeFromEvery(removedIndexes) {\n    this.collection.forEach((indexMap) => {\n      indexMap.remove(removedIndexes);\n    });\n  }\n\n  /**\n   * Insert new indexes and corresponding mapping and update values of the others all collection's index maps.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the actual list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insertToEvery(insertionIndex, insertedIndexes) {\n    this.collection.forEach((indexMap) => {\n      indexMap.insert(insertionIndex, insertedIndexes);\n    });\n  }\n\n  /**\n   * Set default values to index maps within collection.\n   *\n   * @param {number} length Destination length for all stored maps.\n   */\n  initEvery(length) {\n    this.collection.forEach((indexMap) => {\n      indexMap.init(length);\n    });\n  }\n}\n\nmixin(MapCollection, localHooks);\n\n/**\n * @returns {number}\n */\nexport function getRegisteredMapsCounter() {\n  return registeredMaps;\n}\n","import { ChangesObserver } from './observer';\nimport { arrayDiff } from './utils';\n\n/**\n * The ChangesObservable module is an object that represents a resource that provides\n * the ability to observe the changes that happened in the index map indexes during\n * the code running.\n *\n * @private\n * @class ChangesObservable\n */\nexport class ChangesObservable {\n  /**\n   * The list of registered ChangesObserver instances.\n   *\n   * @type {ChangesObserver[]}\n   */\n  #observers = new Set();\n  /**\n   * An array with default values that act as a base array that will be compared with\n   * the last saved index state. The changes are generated and immediately send through\n   * the newly created ChangesObserver object. Thanks to that, the observer initially has\n   * all information about what indexes are currently changed.\n   *\n   * @type {Array}\n   */\n  #indexMatrix = [];\n  /**\n   * An array that holds the indexes state that is currently valid. The value is changed on every\n   * index mapper cache update.\n   *\n   * @type {Array}\n   */\n  #currentIndexState = [];\n  /**\n   * The flag determines if the observable is initialized or not. Not initialized object creates\n   * index matrix once while emitting new changes.\n   *\n   * @type {boolean}\n   */\n  #isMatrixIndexesInitialized = false;\n  /**\n   * The initial index value allows control from what value the index matrix array will be created.\n   * Changing that value changes how the array diff generates the changes for the initial data\n   * sent to the subscribers. For example, the changes can be triggered by detecting the changes\n   * from `false` to `true` value or vice versa. Generally, it depends on which index map type\n   * the Observable will work with. For \"hiding\" or \"trimming\" index types, it will be boolean\n   * values. For various index maps, it can be anything, but I suspect that the most appropriate\n   * initial value will be \"undefined\" in that case.\n   *\n   * @type {boolean}\n   */\n  #initialIndexValue = false;\n\n  constructor({ initialIndexValue } = {}) {\n    this.#initialIndexValue = initialIndexValue ?? false;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Creates and returns a new instance of the ChangesObserver object. The resource\n   * allows subscribing to the index changes that during the code running may change.\n   * Changes are emitted as an array of the index change. Each change is represented\n   * separately as an object with `op`, `index`, `oldValue`, and `newValue` props.\n   *\n   * For example:\n   * ```\n   * [\n   *   { op: 'replace', index: 1, oldValue: false, newValue: true },\n   *   { op: 'replace', index: 3, oldValue: false, newValue: true },\n   *   { op: 'insert', index: 4, oldValue: false, newValue: true },\n   * ]\n   * // or when the new index map changes have less indexes\n   * [\n   *   { op: 'replace', index: 1, oldValue: false, newValue: true },\n   *   { op: 'remove', index: 4, oldValue: false, newValue: true },\n   * ]\n   * ```\n   *\n   * @returns {ChangesObserver}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  createObserver() {\n    const observer = new ChangesObserver();\n\n    this.#observers.add(observer);\n\n    observer.addLocalHook('unsubscribe', () => {\n      this.#observers.delete(observer);\n    });\n\n    observer._writeInitialChanges(arrayDiff(this.#indexMatrix, this.#currentIndexState));\n\n    return observer;\n  }\n\n  /**\n   * The method is an entry point for triggering new index map changes. Emitting the\n   * changes triggers comparing algorithm which compares last saved state with a new\n   * state. When there are some differences, the changes are sent to all subscribers.\n   *\n   * @param {Array} indexesState An array with index map state.\n   */\n  emit(indexesState) {\n    let currentIndexState = this.#currentIndexState;\n\n    if (!this.#isMatrixIndexesInitialized || this.#indexMatrix.length !== indexesState.length) {\n      if (indexesState.length === 0) {\n        indexesState = new Array(currentIndexState.length).fill(this.#initialIndexValue);\n      } else {\n        this.#indexMatrix = new Array(indexesState.length).fill(this.#initialIndexValue);\n      }\n\n      if (!this.#isMatrixIndexesInitialized) {\n        this.#isMatrixIndexesInitialized = true;\n        currentIndexState = this.#indexMatrix;\n      }\n    }\n\n    const changes = arrayDiff(currentIndexState, indexesState);\n\n    this.#observers.forEach(observer => observer._write(changes));\n    this.#currentIndexState = indexesState;\n  }\n}\n","import { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\n/**\n * The ChangesObserver module is an object that represents a disposable resource\n * provided by the ChangesObservable module.\n *\n * @class ChangesObserver\n */\nexport class ChangesObserver {\n  /**\n   * The field holds initial changes that will be used to notify the callbacks added using\n   * subscribe method. Regardless of the moment of listening for changes, the subscriber\n   * will be notified once with all changes made before subscribing.\n   *\n   * @type {Array}\n   */\n  #currentInitialChanges = [];\n\n  /**\n   * Subscribes to the observer.\n   *\n   * @param {Function} callback A function that will be called when the new changes will appear.\n   * @returns {ChangesObserver}\n   */\n  subscribe(callback) {\n    this.addLocalHook('change', callback);\n    this._write(this.#currentInitialChanges);\n\n    return this;\n  }\n\n  /**\n   * Unsubscribes all subscriptions. After the method call, the observer would not produce\n   * any new events.\n   *\n   * @returns {ChangesObserver}\n   */\n  unsubscribe() {\n    this.runLocalHooks('unsubscribe');\n    this.clearLocalHooks();\n\n    return this;\n  }\n\n  /**\n   * The write method is executed by the ChangesObservable module. The module produces all\n   * changes events that are distributed further by the observer.\n   *\n   * @private\n   * @param {object} changes The chunk of changes produced by the ChangesObservable module.\n   * @returns {ChangesObserver}\n   */\n  _write(changes) {\n    if (changes.length > 0) {\n      this.runLocalHooks('change', changes);\n    }\n\n    return this;\n  }\n\n  /**\n   * The write method is executed by the ChangesObservable module. The module produces initial\n   * changes that will be used to notify new subscribers.\n   *\n   * @private\n   * @param {object} initialChanges The chunk of changes produced by the ChangesObservable module.\n   */\n  _writeInitialChanges(initialChanges) {\n    this.#currentInitialChanges = initialChanges;\n  }\n}\n\nmixin(ChangesObserver, localHooks);\n","/**\n * An array diff implementation. The function iterates through the arrays and depends\n * on the diff results, collect the changes as a list of the objects.\n *\n * Each object contains information about the differences in the indexes of the arrays.\n * The changes also contain data about the new and previous array values.\n *\n * @private\n * @param {Array} baseArray The base array to diff from.\n * @param {Array} newArray The new array to compare with.\n * @returns {Array}\n */\nexport function arrayDiff(baseArray, newArray) {\n  const changes = [];\n  let i = 0;\n  let j = 0;\n\n  /* eslint-disable no-plusplus */\n  for (; i < baseArray.length && j < newArray.length; i++, j++) {\n    if (baseArray[i] !== newArray[j]) {\n      changes.push({\n        op: 'replace',\n        index: j,\n        oldValue: baseArray[i],\n        newValue: newArray[j],\n      });\n    }\n  }\n\n  for (; i < newArray.length; i++) {\n    changes.push({\n      op: 'insert',\n      index: i,\n      oldValue: undefined,\n      newValue: newArray[i],\n    });\n  }\n\n  for (; j < baseArray.length; j++) {\n    changes.push({\n      op: 'remove',\n      index: j,\n      oldValue: baseArray[j],\n      newValue: undefined,\n    });\n  }\n\n  return changes;\n}\n","import { isObject, deepClone } from '../helpers/object';\nimport { arrayEach } from './../helpers/array';\nimport { isUndefined } from '../helpers/mixed';\nimport { extendNotExistingKeys, normalizeLanguageCode, warnUserAboutLanguageRegistration } from './utils';\nimport staticRegister from '../utils/staticRegister';\nimport { getPhraseFormatters } from './phraseFormatters';\nimport DEFAULT_DICTIONARY from './languages/en-US';\n\nimport * as _dictionaryKeys from './constants';\n\nexport const dictionaryKeys = _dictionaryKeys;\nexport const DEFAULT_LANGUAGE_CODE = DEFAULT_DICTIONARY.languageCode;\n\nconst {\n  register: registerGloballyLanguageDictionary,\n  getItem: getGlobalLanguageDictionary,\n  hasItem: hasGlobalLanguageDictionary,\n  getValues: getGlobalLanguagesDictionaries\n} = staticRegister('languagesDictionaries');\n\n/**\n * Register automatically the default language dictionary.\n */\nregisterLanguageDictionary(DEFAULT_DICTIONARY);\n\n/**\n * Register language dictionary for specific language code.\n *\n * @param {string|object} languageCodeOrDictionary Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE' or object representing dictionary.\n * @param {object} dictionary Dictionary for specific language (optional if first parameter has already dictionary).\n * @returns {object}\n */\nexport function registerLanguageDictionary(languageCodeOrDictionary, dictionary) {\n  let languageCode = languageCodeOrDictionary;\n  let dictionaryObject = dictionary;\n\n  // Dictionary passed as first argument.\n  if (isObject(languageCodeOrDictionary)) {\n    dictionaryObject = languageCodeOrDictionary;\n    languageCode = dictionaryObject.languageCode;\n  }\n\n  extendLanguageDictionary(languageCode, dictionaryObject);\n  registerGloballyLanguageDictionary(languageCode, deepClone(dictionaryObject));\n\n  // We do not allow user to work with dictionary by reference, it can cause lot of bugs.\n  return deepClone(dictionaryObject);\n}\n\n/**\n * Extend handled dictionary by default language dictionary. As result, if any dictionary key isn't defined for specific language, it will be filled with default language value (\"dictionary gaps\" are supplemented).\n *\n * @private\n * @param {string} languageCode Language code.\n * @param {object} dictionary Dictionary which is extended.\n */\nfunction extendLanguageDictionary(languageCode, dictionary) {\n  if (languageCode !== DEFAULT_LANGUAGE_CODE) {\n    extendNotExistingKeys(dictionary, getGlobalLanguageDictionary(DEFAULT_LANGUAGE_CODE));\n  }\n}\n\n/**\n * Get language dictionary for specific language code.\n *\n * @param {string} languageCode Language code.\n * @returns {object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nexport function getLanguageDictionary(languageCode) {\n  if (!hasLanguageDictionary(languageCode)) {\n    return null;\n  }\n\n  return deepClone(getGlobalLanguageDictionary(languageCode));\n}\n\n/**\n *\n * Get if language with specified language code was registered.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {boolean}\n */\nexport function hasLanguageDictionary(languageCode) {\n  return hasGlobalLanguageDictionary(languageCode);\n}\n\n/**\n * Get default language dictionary.\n *\n * @returns {object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nexport function getDefaultLanguageDictionary() {\n  return DEFAULT_DICTIONARY;\n}\n\n/**\n * Get registered language dictionaries.\n *\n * @returns {Array}\n */\nexport function getLanguagesDictionaries() {\n  return getGlobalLanguagesDictionaries();\n}\n\n/**\n * Get phrase for specified dictionary key.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @param {string} dictionaryKey Constant which is dictionary key.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {string}\n */\nexport function getTranslatedPhrase(languageCode, dictionaryKey, argumentsForFormatters) {\n  const languageDictionary = getLanguageDictionary(languageCode);\n\n  if (languageDictionary === null) {\n    return null;\n  }\n\n  const phrasePropositions = languageDictionary[dictionaryKey];\n\n  if (isUndefined(phrasePropositions)) {\n    return null;\n  }\n\n  const formattedPhrase = getFormattedPhrase(phrasePropositions, argumentsForFormatters);\n\n  if (Array.isArray(formattedPhrase)) {\n    return formattedPhrase[0];\n  }\n\n  return formattedPhrase;\n}\n\n/**\n * Get formatted phrase from phrases propositions for specified dictionary key.\n *\n * @private\n * @param {Array|string} phrasePropositions List of phrase propositions.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {Array|string}\n */\nfunction getFormattedPhrase(phrasePropositions, argumentsForFormatters) {\n  let formattedPhrasePropositions = phrasePropositions;\n\n  arrayEach(getPhraseFormatters(), (formatter) => {\n    formattedPhrasePropositions = formatter(phrasePropositions, argumentsForFormatters);\n  });\n\n  return formattedPhrasePropositions;\n}\n\n/**\n * Returns valid language code. If the passed language code doesn't exist default one will be used.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {string}\n */\nexport function getValidLanguageCode(languageCode) {\n  let normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n  if (!hasLanguageDictionary(normalizedLanguageCode)) {\n    normalizedLanguageCode = DEFAULT_LANGUAGE_CODE;\n\n    warnUserAboutLanguageRegistration(languageCode);\n  }\n\n  return normalizedLanguageCode;\n}\n","import { isUndefined, isDefined } from './../helpers/mixed';\nimport { objectEach } from './../helpers/object';\nimport { error } from './../helpers/console';\nimport { toSingleLine } from './../helpers/templateLiteralTag';\n\n/**\n * Perform shallow extend of a target object with only this extension's properties which doesn't exist in the target.\n *\n * TODO: Maybe it should be moved to global helpers? It's changed `extend` function.\n *\n * @param {object} target An object that will receive the new properties.\n * @param {object} extension An object containing additional properties to merge into the target.\n * @returns {object}\n */\nexport function extendNotExistingKeys(target, extension) {\n  objectEach(extension, (value, key) => {\n    if (isUndefined(target[key])) {\n      target[key] = value;\n    }\n  });\n\n  return target;\n}\n\n/**\n * Create range of values basing on cell indexes. For example, it will create below ranges for specified function arguments:\n *\n * createCellHeadersRange(2, 7) => `2-7`\n * createCellHeadersRange(7, 2) => `2-7`\n * createCellHeadersRange(0, 4, 'A', 'D') => `A-D`\n * createCellHeadersRange(4, 0, 'D', 'A') => `A-D`.\n *\n * @param {number} firstRowIndex Index of \"first\" cell.\n * @param {number} nextRowIndex Index of \"next\" cell.\n * @param {*} fromValue Value which will represent \"first\" cell.\n * @param {*} toValue Value which will represent \"next\" cell.\n * @returns {string} Value representing range i.e. A-Z, 11-15.\n */\nexport function createCellHeadersRange(firstRowIndex, nextRowIndex, fromValue = firstRowIndex, toValue = nextRowIndex) {\n  // Will swap `fromValue` with `toValue` if it's necessary.\n  let [from, to] = [fromValue, toValue];\n\n  if (firstRowIndex > nextRowIndex) {\n    [from, to] = [to, from];\n  }\n\n  return `${from}-${to}`;\n}\n\n/**\n * Normalize language code. It takes handled languageCode proposition and change it to proper languageCode.\n * For example, when it takes `eN-us` as parameter it return `en-US`.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {string}\n */\nexport function normalizeLanguageCode(languageCode) {\n  const languageCodePattern = /^([a-zA-Z]{2})-([a-zA-Z]{2})$/;\n  const partsOfLanguageCode = languageCodePattern.exec(languageCode);\n\n  if (partsOfLanguageCode) {\n    return `${partsOfLanguageCode[1].toLowerCase()}-${partsOfLanguageCode[2].toUpperCase()}`;\n  }\n\n  return languageCode;\n}\n\n/**\n *\n * Warn user if there is no registered language.\n *\n * @param {string} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n */\nexport function warnUserAboutLanguageRegistration(languageCode) {\n  if (isDefined(languageCode)) {\n    error(toSingleLine`Language with code \"${languageCode}\" was not found. You should register particular language\\x20\n    before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.`);\n  }\n}\n","import staticRegister from './../../utils/staticRegister';\nimport pluralizeFn from './pluralize';\n\nconst {\n  register: registerGloballyPhraseFormatter,\n  getValues: getGlobalPhraseFormatters,\n} = staticRegister('phraseFormatters');\n\n/**\n * Register phrase formatter.\n *\n * @param {string} name Name of formatter.\n * @param {Function} formatterFn Function which will be applied on phrase propositions. It will transform them if it's possible.\n */\nexport function register(name, formatterFn) {\n  registerGloballyPhraseFormatter(name, formatterFn);\n}\n\n/**\n * Get all registered previously formatters.\n *\n * @returns {Array}\n */\nexport function getAll() {\n  return getGlobalPhraseFormatters();\n}\n\nexport {\n  register as registerPhraseFormatter,\n  getAll as getPhraseFormatters\n};\n\nregister('pluralize', pluralizeFn);\n","/**\n * Try to choose plural form from available phrase propositions.\n *\n * @param {Array} phrasePropositions List of phrases propositions.\n * @param {number} pluralForm Number determining which phrase form should be used.\n *\n * @returns {string|Array} One particular phrase if it's possible, list of unchanged phrase propositions otherwise.\n */\nexport default function pluralize(phrasePropositions, pluralForm) {\n  const isPluralizable = Array.isArray(phrasePropositions) && Number.isInteger(pluralForm);\n\n  if (isPluralizable) {\n    return phrasePropositions[pluralForm];\n  }\n\n  return phrasePropositions;\n}\n","/**\n * @preserve\n * Authors: Handsoncode\n * Last updated: Nov 15, 2017\n *\n * Description: Definition file for English - United States language-country.\n */\nimport * as C from '../constants';\n\nconst dictionary = {\n  languageCode: 'en-US',\n  [C.CONTEXTMENU_ITEMS_NO_ITEMS]: 'No available options',\n  [C.CONTEXTMENU_ITEMS_ROW_ABOVE]: 'Insert row above',\n  [C.CONTEXTMENU_ITEMS_ROW_BELOW]: 'Insert row below',\n  [C.CONTEXTMENU_ITEMS_INSERT_LEFT]: 'Insert column left',\n  [C.CONTEXTMENU_ITEMS_INSERT_RIGHT]: 'Insert column right',\n  [C.CONTEXTMENU_ITEMS_REMOVE_ROW]: ['Remove row', 'Remove rows'],\n  [C.CONTEXTMENU_ITEMS_REMOVE_COLUMN]: ['Remove column', 'Remove columns'],\n  [C.CONTEXTMENU_ITEMS_UNDO]: 'Undo',\n  [C.CONTEXTMENU_ITEMS_REDO]: 'Redo',\n  [C.CONTEXTMENU_ITEMS_READ_ONLY]: 'Read only',\n  [C.CONTEXTMENU_ITEMS_CLEAR_COLUMN]: 'Clear column',\n\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT]: 'Alignment',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT]: 'Left',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER]: 'Center',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT]: 'Right',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY]: 'Justify',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP]: 'Top',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE]: 'Middle',\n  [C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM]: 'Bottom',\n\n  [C.CONTEXTMENU_ITEMS_FREEZE_COLUMN]: 'Freeze column',\n  [C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN]: 'Unfreeze column',\n\n  [C.CONTEXTMENU_ITEMS_BORDERS]: 'Borders',\n  [C.CONTEXTMENU_ITEMS_BORDERS_TOP]: 'Top',\n  [C.CONTEXTMENU_ITEMS_BORDERS_RIGHT]: 'Right',\n  [C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM]: 'Bottom',\n  [C.CONTEXTMENU_ITEMS_BORDERS_LEFT]: 'Left',\n  [C.CONTEXTMENU_ITEMS_REMOVE_BORDERS]: 'Remove border(s)',\n\n  [C.CONTEXTMENU_ITEMS_ADD_COMMENT]: 'Add comment',\n  [C.CONTEXTMENU_ITEMS_EDIT_COMMENT]: 'Edit comment',\n  [C.CONTEXTMENU_ITEMS_REMOVE_COMMENT]: 'Delete comment',\n  [C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT]: 'Read-only comment',\n\n  [C.CONTEXTMENU_ITEMS_MERGE_CELLS]: 'Merge cells',\n  [C.CONTEXTMENU_ITEMS_UNMERGE_CELLS]: 'Unmerge cells',\n\n  [C.CONTEXTMENU_ITEMS_COPY]: 'Copy',\n  [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS]: ['Copy with header', 'Copy with headers'],\n  [C.CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS]: ['Copy with group header', 'Copy with group headers'],\n  [C.CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY]: ['Copy header only', 'Copy headers only'],\n  [C.CONTEXTMENU_ITEMS_CUT]: 'Cut',\n\n  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD]: 'Insert child row',\n  [C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD]: 'Detach from parent',\n\n  [C.CONTEXTMENU_ITEMS_HIDE_COLUMN]: ['Hide column', 'Hide columns'],\n  [C.CONTEXTMENU_ITEMS_SHOW_COLUMN]: ['Show column', 'Show columns'],\n\n  [C.CONTEXTMENU_ITEMS_HIDE_ROW]: ['Hide row', 'Hide rows'],\n  [C.CONTEXTMENU_ITEMS_SHOW_ROW]: ['Show row', 'Show rows'],\n\n  [C.FILTERS_CONDITIONS_NONE]: 'None',\n  [C.FILTERS_CONDITIONS_EMPTY]: 'Is empty',\n  [C.FILTERS_CONDITIONS_NOT_EMPTY]: 'Is not empty',\n  [C.FILTERS_CONDITIONS_EQUAL]: 'Is equal to',\n  [C.FILTERS_CONDITIONS_NOT_EQUAL]: 'Is not equal to',\n  [C.FILTERS_CONDITIONS_BEGINS_WITH]: 'Begins with',\n  [C.FILTERS_CONDITIONS_ENDS_WITH]: 'Ends with',\n  [C.FILTERS_CONDITIONS_CONTAINS]: 'Contains',\n  [C.FILTERS_CONDITIONS_NOT_CONTAIN]: 'Does not contain',\n  [C.FILTERS_CONDITIONS_GREATER_THAN]: 'Greater than',\n  [C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL]: 'Greater than or equal to',\n  [C.FILTERS_CONDITIONS_LESS_THAN]: 'Less than',\n  [C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL]: 'Less than or equal to',\n  [C.FILTERS_CONDITIONS_BETWEEN]: 'Is between',\n  [C.FILTERS_CONDITIONS_NOT_BETWEEN]: 'Is not between',\n  [C.FILTERS_CONDITIONS_AFTER]: 'After',\n  [C.FILTERS_CONDITIONS_BEFORE]: 'Before',\n  [C.FILTERS_CONDITIONS_TODAY]: 'Today',\n  [C.FILTERS_CONDITIONS_TOMORROW]: 'Tomorrow',\n  [C.FILTERS_CONDITIONS_YESTERDAY]: 'Yesterday',\n\n  [C.FILTERS_VALUES_BLANK_CELLS]: 'Blank cells',\n\n  [C.FILTERS_DIVS_FILTER_BY_CONDITION]: 'Filter by condition',\n  [C.FILTERS_DIVS_FILTER_BY_VALUE]: 'Filter by value',\n\n  [C.FILTERS_LABELS_CONJUNCTION]: 'And',\n  [C.FILTERS_LABELS_DISJUNCTION]: 'Or',\n\n  [C.FILTERS_BUTTONS_SELECT_ALL]: 'Select all',\n  [C.FILTERS_BUTTONS_CLEAR]: 'Clear',\n  [C.FILTERS_BUTTONS_OK]: 'OK',\n  [C.FILTERS_BUTTONS_CANCEL]: 'Cancel',\n\n  [C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH]: 'Search',\n  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',\n  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',\n\n  [C.CHECKBOX_CHECKED]: 'Checked',\n  [C.CHECKBOX_UNCHECKED]: 'Unchecked',\n};\n\nexport default dictionary;\n","/**\n * Constants for parts of translation.\n */\n\nexport const CONTEXT_MENU_ITEMS_NAMESPACE = 'ContextMenu:items';\n\nconst CM_ALIAS = CONTEXT_MENU_ITEMS_NAMESPACE;\n\nexport const CONTEXTMENU_ITEMS_NO_ITEMS = `${CM_ALIAS}.noItems`;\nexport const CONTEXTMENU_ITEMS_ROW_ABOVE = `${CM_ALIAS}.insertRowAbove`;\nexport const CONTEXTMENU_ITEMS_ROW_BELOW = `${CM_ALIAS}.insertRowBelow`;\nexport const CONTEXTMENU_ITEMS_INSERT_LEFT = `${CM_ALIAS}.insertColumnOnTheLeft`;\nexport const CONTEXTMENU_ITEMS_INSERT_RIGHT = `${CM_ALIAS}.insertColumnOnTheRight`;\nexport const CONTEXTMENU_ITEMS_REMOVE_ROW = `${CM_ALIAS}.removeRow`;\nexport const CONTEXTMENU_ITEMS_REMOVE_COLUMN = `${CM_ALIAS}.removeColumn`;\nexport const CONTEXTMENU_ITEMS_UNDO = `${CM_ALIAS}.undo`;\nexport const CONTEXTMENU_ITEMS_REDO = `${CM_ALIAS}.redo`;\nexport const CONTEXTMENU_ITEMS_READ_ONLY = `${CM_ALIAS}.readOnly`;\nexport const CONTEXTMENU_ITEMS_CLEAR_COLUMN = `${CM_ALIAS}.clearColumn`;\n\nexport const CONTEXTMENU_ITEMS_COPY = `${CM_ALIAS}.copy`;\nexport const CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS = `${CM_ALIAS}.copyWithHeaders`;\nexport const CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS = `${CM_ALIAS}.copyWithGroupHeaders`;\nexport const CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY = `${CM_ALIAS}.copyHeadersOnly`;\nexport const CONTEXTMENU_ITEMS_CUT = `${CM_ALIAS}.cut`;\n\nexport const CONTEXTMENU_ITEMS_FREEZE_COLUMN = `${CM_ALIAS}.freezeColumn`;\nexport const CONTEXTMENU_ITEMS_UNFREEZE_COLUMN = `${CM_ALIAS}.unfreezeColumn`;\n\nexport const CONTEXTMENU_ITEMS_MERGE_CELLS = `${CM_ALIAS}.mergeCells`;\nexport const CONTEXTMENU_ITEMS_UNMERGE_CELLS = `${CM_ALIAS}.unmergeCells`;\n\nexport const CONTEXTMENU_ITEMS_ADD_COMMENT = `${CM_ALIAS}.addComment`;\nexport const CONTEXTMENU_ITEMS_EDIT_COMMENT = `${CM_ALIAS}.editComment`;\nexport const CONTEXTMENU_ITEMS_REMOVE_COMMENT = `${CM_ALIAS}.removeComment`;\nexport const CONTEXTMENU_ITEMS_READ_ONLY_COMMENT = `${CM_ALIAS}.readOnlyComment`;\n\nexport const CONTEXTMENU_ITEMS_ALIGNMENT = `${CM_ALIAS}.align`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_LEFT = `${CM_ALIAS}.align.left`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_CENTER = `${CM_ALIAS}.align.center`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT = `${CM_ALIAS}.align.right`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY = `${CM_ALIAS}.align.justify`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_TOP = `${CM_ALIAS}.align.top`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE = `${CM_ALIAS}.align.middle`;\nexport const CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM = `${CM_ALIAS}.align.bottom`;\n\nexport const CONTEXTMENU_ITEMS_BORDERS = `${CM_ALIAS}.borders`;\nexport const CONTEXTMENU_ITEMS_BORDERS_TOP = `${CM_ALIAS}.borders.top`;\nexport const CONTEXTMENU_ITEMS_BORDERS_RIGHT = `${CM_ALIAS}.borders.right`;\nexport const CONTEXTMENU_ITEMS_BORDERS_BOTTOM = `${CM_ALIAS}.borders.bottom`;\nexport const CONTEXTMENU_ITEMS_BORDERS_LEFT = `${CM_ALIAS}.borders.left`;\nexport const CONTEXTMENU_ITEMS_REMOVE_BORDERS = `${CM_ALIAS}.borders.remove`;\n\nexport const CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD = `${CM_ALIAS}.nestedHeaders.insertChildRow`; // eslint-disable-line max-len\nexport const CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD = `${CM_ALIAS}.nestedHeaders.detachFromParent`; // eslint-disable-line max-len\n\nexport const CONTEXTMENU_ITEMS_HIDE_COLUMN = `${CM_ALIAS}.hideColumn`;\nexport const CONTEXTMENU_ITEMS_SHOW_COLUMN = `${CM_ALIAS}.showColumn`;\n\nexport const CONTEXTMENU_ITEMS_HIDE_ROW = `${CM_ALIAS}.hideRow`;\nexport const CONTEXTMENU_ITEMS_SHOW_ROW = `${CM_ALIAS}.showRow`;\n\nexport const FILTERS_NAMESPACE = 'Filters:';\nexport const FILTERS_CONDITIONS_NAMESPACE = `${FILTERS_NAMESPACE}conditions`;\nexport const FILTERS_CONDITIONS_NONE = `${FILTERS_CONDITIONS_NAMESPACE}.none`;\nexport const FILTERS_CONDITIONS_EMPTY = `${FILTERS_CONDITIONS_NAMESPACE}.isEmpty`;\nexport const FILTERS_CONDITIONS_NOT_EMPTY = `${FILTERS_CONDITIONS_NAMESPACE}.isNotEmpty`;\nexport const FILTERS_CONDITIONS_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.isEqualTo`;\nexport const FILTERS_CONDITIONS_NOT_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.isNotEqualTo`;\nexport const FILTERS_CONDITIONS_BEGINS_WITH = `${FILTERS_CONDITIONS_NAMESPACE}.beginsWith`;\nexport const FILTERS_CONDITIONS_ENDS_WITH = `${FILTERS_CONDITIONS_NAMESPACE}.endsWith`;\nexport const FILTERS_CONDITIONS_CONTAINS = `${FILTERS_CONDITIONS_NAMESPACE}.contains`;\nexport const FILTERS_CONDITIONS_NOT_CONTAIN = `${FILTERS_CONDITIONS_NAMESPACE}.doesNotContain`;\nexport const FILTERS_CONDITIONS_BY_VALUE = `${FILTERS_CONDITIONS_NAMESPACE}.byValue`;\nexport const FILTERS_CONDITIONS_GREATER_THAN = `${FILTERS_CONDITIONS_NAMESPACE}.greaterThan`;\nexport const FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.greaterThanOrEqualTo`;\nexport const FILTERS_CONDITIONS_LESS_THAN = `${FILTERS_CONDITIONS_NAMESPACE}.lessThan`;\nexport const FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL = `${FILTERS_CONDITIONS_NAMESPACE}.lessThanOrEqualTo`;\nexport const FILTERS_CONDITIONS_BETWEEN = `${FILTERS_CONDITIONS_NAMESPACE}.isBetween`;\nexport const FILTERS_CONDITIONS_NOT_BETWEEN = `${FILTERS_CONDITIONS_NAMESPACE}.isNotBetween`;\nexport const FILTERS_CONDITIONS_AFTER = `${FILTERS_CONDITIONS_NAMESPACE}.after`;\nexport const FILTERS_CONDITIONS_BEFORE = `${FILTERS_CONDITIONS_NAMESPACE}.before`;\nexport const FILTERS_CONDITIONS_TODAY = `${FILTERS_CONDITIONS_NAMESPACE}.today`;\nexport const FILTERS_CONDITIONS_TOMORROW = `${FILTERS_CONDITIONS_NAMESPACE}.tomorrow`;\nexport const FILTERS_CONDITIONS_YESTERDAY = `${FILTERS_CONDITIONS_NAMESPACE}.yesterday`;\n\nexport const FILTERS_DIVS_FILTER_BY_CONDITION = `${FILTERS_NAMESPACE}labels.filterByCondition`;\nexport const FILTERS_DIVS_FILTER_BY_VALUE = `${FILTERS_NAMESPACE}labels.filterByValue`;\n\nexport const FILTERS_LABELS_CONJUNCTION = `${FILTERS_NAMESPACE}labels.conjunction`;\nexport const FILTERS_LABELS_DISJUNCTION = `${FILTERS_NAMESPACE}labels.disjunction`;\n\nexport const FILTERS_VALUES_BLANK_CELLS = `${FILTERS_NAMESPACE}values.blankCells`;\n\nexport const FILTERS_BUTTONS_SELECT_ALL = `${FILTERS_NAMESPACE}buttons.selectAll`;\nexport const FILTERS_BUTTONS_CLEAR = `${FILTERS_NAMESPACE}buttons.clear`;\nexport const FILTERS_BUTTONS_OK = `${FILTERS_NAMESPACE}buttons.ok`;\nexport const FILTERS_BUTTONS_CANCEL = `${FILTERS_NAMESPACE}buttons.cancel`;\n\nexport const FILTERS_BUTTONS_PLACEHOLDER_SEARCH = `${FILTERS_NAMESPACE}buttons.placeholder.search`;\nexport const FILTERS_BUTTONS_PLACEHOLDER_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.value`;\nexport const FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.secondValue`;\n\nexport const CHECKBOX_RENDERER_NAMESPACE = 'CheckboxRenderer:';\nexport const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;\nexport const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;\n","import Selection from './selection';\nimport { handleMouseEvent } from './mouseEventHandler';\nimport {\n  detectSelectionType,\n  normalizeSelectionFactory,\n} from './utils';\n\nexport * from './highlight/highlight';\nexport {\n  handleMouseEvent,\n  Selection,\n  detectSelectionType,\n  normalizeSelectionFactory\n};\n","import Highlight, {\n  AREA_TYPE,\n  HEADER_TYPE,\n  FOCUS_TYPE,\n} from './highlight/highlight';\nimport SelectionRange from './range';\nimport { createObjectPropListener, mixin } from './../helpers/object';\nimport { isUndefined } from './../helpers/mixed';\nimport { clamp } from './../helpers/number';\nimport { arrayEach } from './../helpers/array';\nimport localHooks from './../mixins/localHooks';\nimport Transformation from './transformation';\nimport {\n  detectSelectionType,\n  normalizeSelectionFactory,\n  SELECTION_TYPE_EMPTY,\n  SELECTION_TYPE_UNRECOGNIZED,\n} from './utils';\nimport { toSingleLine } from './../helpers/templateLiteralTag';\nimport { A11Y_SELECTED } from '../helpers/a11y';\n\n/**\n * @class Selection\n * @util\n */\nclass Selection {\n  /**\n   * Handsontable settings instance.\n   *\n   * @type {GridSettings}\n   */\n  settings;\n  /**\n   * An additional object with dynamically defined properties which describes table state.\n   *\n   * @type {object}\n   */\n  tableProps;\n  /**\n   * The flag which determines if the selection is in progress.\n   *\n   * @type {boolean}\n   */\n  inProgress = false;\n  /**\n   * Selection data layer (handle visual coordinates).\n   *\n   * @type {SelectionRange}\n   */\n  selectedRange = new SelectionRange((highlight, from, to) => {\n    return this.tableProps.createCellRange(highlight, from, to);\n  });\n  /**\n   * Visualization layer.\n   *\n   * @type {Highlight}\n   */\n  highlight;\n  /**\n   * The module for modifying coordinates of the start and end selection.\n   *\n   * @type {Transformation}\n   */\n  #transformation;\n  /**\n   * The module for modifying coordinates of the focus selection.\n   *\n   * @type {Transformation}\n   */\n  #focusTransformation;\n  /**\n   * The collection of the selection layer levels where the whole row was selected using the row header or\n   * the corner header.\n   *\n   * @type {Set<number>}\n   */\n  selectedByRowHeader = new Set();\n  /**\n   * The collection of the selection layer levels where the whole column was selected using the column header or\n   * the corner header.\n   *\n   * @type {Set<number>}\n   */\n  selectedByColumnHeader = new Set();\n  /**\n   * The flag which determines if the focus selection was changed.\n   *\n   * @type {boolean}\n   */\n  #isFocusSelectionChanged = false;\n  /**\n   * When sets disable highlighting the headers even when the logical coordinates points on them.\n   *\n   * @type {boolean}\n   */\n  #disableHeadersHighlight = false;\n  /**\n   * The source of the selection. It can be one of the following values: `mouse`, `unknown` or any other string.\n   *\n   * @type {'mouse' | 'unknown' | string}\n   */\n  #selectionSource = 'unknown';\n  /**\n   * The number of expected layers. It is used mostly to track when the last selection layer of non-contiguous\n   * selection is applied, thus the viewport scroll is triggered.\n   *\n   * @param {number}\n   */\n  #expectedLayersCount = -1;\n\n  constructor(settings, tableProps) {\n    this.settings = settings;\n    this.tableProps = tableProps;\n    this.highlight = new Highlight({\n      headerClassName: settings.currentHeaderClassName,\n      activeHeaderClassName: settings.activeHeaderClassName,\n      rowClassName: settings.currentRowClassName,\n      columnClassName: settings.currentColClassName,\n      cellAttributes: [A11Y_SELECTED()],\n      rowIndexMapper: this.tableProps.rowIndexMapper,\n      columnIndexMapper: this.tableProps.columnIndexMapper,\n      disabledCellSelection: (row, column) => this.tableProps.isDisabledCellSelection(row, column),\n      cellCornerVisible: (...args) => this.isCellCornerVisible(...args),\n      areaCornerVisible: (...args) => this.isAreaCornerVisible(...args),\n      visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),\n      renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),\n      createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),\n      createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to),\n    });\n    this.#transformation = new Transformation(this.selectedRange, {\n      rowIndexMapper: this.tableProps.rowIndexMapper,\n      columnIndexMapper: this.tableProps.columnIndexMapper,\n      countRenderableRows: () => this.tableProps.countRenderableRows(),\n      countRenderableColumns: () => this.tableProps.countRenderableColumns(),\n      visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),\n      renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),\n      findFirstNonHiddenRenderableRow: (...args) => this.tableProps.findFirstNonHiddenRenderableRow(...args),\n      findFirstNonHiddenRenderableColumn: (...args) => this.tableProps.findFirstNonHiddenRenderableColumn(...args),\n      createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),\n      fixedRowsBottom: () => settings.fixedRowsBottom,\n      minSpareRows: () => settings.minSpareRows,\n      minSpareCols: () => settings.minSpareCols,\n      autoWrapRow: () => settings.autoWrapRow,\n      autoWrapCol: () => settings.autoWrapCol,\n    });\n    this.#focusTransformation = new Transformation(this.selectedRange, {\n      rowIndexMapper: this.tableProps.rowIndexMapper,\n      columnIndexMapper: this.tableProps.columnIndexMapper,\n      countRenderableRows: () => {\n        const range = this.selectedRange.current();\n\n        return this.tableProps.countRenderableRowsInRange(0, range.getOuterBottomEndCorner().row);\n      },\n      countRenderableColumns: () => {\n        const range = this.selectedRange.current();\n\n        return this.tableProps.countRenderableColumnsInRange(0, range.getOuterBottomEndCorner().col);\n      },\n      visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),\n      renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),\n      findFirstNonHiddenRenderableRow: (...args) => this.tableProps.findFirstNonHiddenRenderableRow(...args),\n      findFirstNonHiddenRenderableColumn: (...args) => this.tableProps.findFirstNonHiddenRenderableColumn(...args),\n      createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),\n      fixedRowsBottom: () => 0,\n      minSpareRows: () => 0,\n      minSpareCols: () => 0,\n      autoWrapRow: () => true,\n      autoWrapCol: () => true,\n    });\n\n    this.#transformation.addLocalHook('beforeTransformStart',\n      (...args) => this.runLocalHooks('beforeModifyTransformStart', ...args));\n    this.#transformation.addLocalHook('afterTransformStart',\n      (...args) => this.runLocalHooks('afterModifyTransformStart', ...args));\n    this.#transformation.addLocalHook('beforeTransformEnd',\n      (...args) => this.runLocalHooks('beforeModifyTransformEnd', ...args));\n    this.#transformation.addLocalHook('afterTransformEnd',\n      (...args) => this.runLocalHooks('afterModifyTransformEnd', ...args));\n    this.#transformation.addLocalHook('insertRowRequire',\n      (...args) => this.runLocalHooks('insertRowRequire', ...args));\n    this.#transformation.addLocalHook('insertColRequire',\n      (...args) => this.runLocalHooks('insertColRequire', ...args));\n    this.#transformation.addLocalHook('beforeRowWrap',\n      (...args) => this.runLocalHooks('beforeRowWrap', ...args));\n    this.#transformation.addLocalHook('beforeColumnWrap',\n      (...args) => this.runLocalHooks('beforeColumnWrap', ...args));\n\n    this.#focusTransformation.addLocalHook('beforeTransformStart',\n      (...args) => this.runLocalHooks('beforeModifyTransformFocus', ...args));\n    this.#focusTransformation.addLocalHook('afterTransformStart',\n      (...args) => this.runLocalHooks('afterModifyTransformFocus', ...args));\n  }\n\n  /**\n   * Get data layer for current selection.\n   *\n   * @returns {SelectionRange}\n   */\n  getSelectedRange() {\n    return this.selectedRange;\n  }\n\n  /**\n   * Marks the source of the selection. It can be one of the following values: `mouse`, or any other string.\n   *\n   * @param {'mouse' | 'unknown' | string} sourceName The source name.\n   */\n  markSource(sourceName) {\n    this.#selectionSource = sourceName;\n  }\n\n  /**\n   * Marks end of the selection source. It restores the selection source to default value which is 'unknown'.\n   */\n  markEndSource() {\n    this.#selectionSource = 'unknown';\n  }\n\n  /**\n   * Returns the source of the selection.\n   *\n   * @returns {'mouse' | 'unknown' | string}\n   */\n  getSelectionSource() {\n    return this.#selectionSource;\n  }\n\n  /**\n   * Set the number of expected layers. The method is not obligatory to call. It is used mostly internally\n   * to determine when the last selection layer of non-contiguous is applied, thus the viewport scroll is triggered.\n   *\n   * @param {number} layersCount The number of expected layers.\n   */\n  setExpectedLayers(layersCount) {\n    this.#expectedLayersCount = layersCount;\n  }\n\n  /**\n   * Indicate that selection process began. It sets internally `.inProgress` property to `true`.\n   */\n  begin() {\n    this.inProgress = true;\n  }\n\n  /**\n   * Indicate that selection process finished. It sets internally `.inProgress` property to `false`.\n   */\n  finish() {\n    this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));\n    this.inProgress = false;\n    this.#expectedLayersCount = -1;\n  }\n\n  /**\n   * Check if the process of selecting the cell/cells is in progress.\n   *\n   * @returns {boolean}\n   */\n  isInProgress() {\n    return this.inProgress;\n  }\n\n  /**\n   * Starts selection range on given coordinate object.\n   *\n   * @param {CellCoords} coords Visual coords.\n   * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n   *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n   *                                      the default trigger will be used.\n   * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the\n   *                                   `setRangeEnd` method won't be called on every `setRangeStart` call.\n   * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.\n   */\n  setRangeStart(coords, multipleSelection, fragment = false, highlightCoords = coords) {\n    const isMultipleMode = this.settings.selectionMode === 'multiple';\n    const isMultipleSelection = isUndefined(multipleSelection) ?\n      this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;\n    // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords\n    // should be handled by next methods.\n    const coordsClone = coords.clone();\n\n    this.#isFocusSelectionChanged = false;\n    this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);\n\n    if (!isMultipleMode || (isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection))) {\n      this.selectedRange.clear();\n    }\n\n    this.selectedRange\n      .add(coordsClone)\n      .current()\n      .setHighlight(highlightCoords.clone());\n\n    if (this.getLayerLevel() === 0) {\n      this.selectedByRowHeader.clear();\n      this.selectedByColumnHeader.clear();\n    }\n    if (!fragment) {\n      this.setRangeEnd(coords);\n    }\n  }\n\n  /**\n   * Starts selection range on given coordinate object.\n   *\n   * @param {CellCoords} coords Visual coords.\n   * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n   *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n   *                                      the default trigger will be used.\n   * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.\n   */\n  setRangeStartOnly(coords, multipleSelection, highlightCoords = coords) {\n    this.setRangeStart(coords, multipleSelection, true, highlightCoords);\n  }\n\n  /**\n   * Ends selection range on given coordinate object.\n   *\n   * @param {CellCoords} coords Visual coords.\n   */\n  setRangeEnd(coords) {\n    if (this.selectedRange.isEmpty()) {\n      return;\n    }\n\n    const coordsClone = coords.clone();\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n    const isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();\n\n    // Ignore processing the end range when the header selection starts overlapping the corner and\n    // the selection is not a single header highlight.\n    if ((countRows > 0 || countCols > 0) &&\n       (countRows === 0 && coordsClone.col < 0 && !isSingle ||\n        countCols === 0 && coordsClone.row < 0 && !isSingle)) {\n      return;\n    }\n\n    this.runLocalHooks('beforeSetRangeEnd', coordsClone);\n    this.begin();\n\n    const cellRange = this.selectedRange.current();\n\n    if (!this.settings.navigableHeaders) {\n      cellRange.highlight.normalize();\n    }\n\n    if (this.settings.selectionMode === 'single') {\n      cellRange.setFrom(cellRange.highlight);\n      cellRange.setTo(cellRange.highlight);\n\n    } else {\n      const horizontalDir = cellRange.getHorizontalDirection();\n      const verticalDir = cellRange.getVerticalDirection();\n      const isMultiple = this.isMultiple();\n\n      cellRange.setTo(coordsClone);\n\n      if (\n        isMultiple &&\n        (horizontalDir !== cellRange.getHorizontalDirection() ||\n        cellRange.getWidth() === 1 && !cellRange.includes(cellRange.highlight))\n      ) {\n        cellRange.from.assign({\n          col: cellRange.highlight.col\n        });\n      }\n      if (\n        isMultiple &&\n        (verticalDir !== cellRange.getVerticalDirection() ||\n        cellRange.getHeight() === 1 && !cellRange.includes(cellRange.highlight))\n      ) {\n        cellRange.from.assign({\n          row: cellRange.highlight.row\n        });\n      }\n    }\n\n    // Prevent creating \"area\" selection that overlaps headers.\n    if (countRows > 0 && countCols > 0) {\n      if (!this.settings.navigableHeaders || (this.settings.navigableHeaders && !cellRange.isSingleHeader())) {\n        cellRange.to.normalize();\n      }\n    }\n\n    this.runLocalHooks('beforeHighlightSet');\n    this.setRangeFocus(this.selectedRange.current().highlight);\n    this.applyAndCommit();\n\n    const isLastLayer = this.#expectedLayersCount === -1 || this.selectedRange.size() === this.#expectedLayersCount;\n\n    this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);\n  }\n\n  /**\n   * Applies and commits the selection to all layers (using the Walkontable Selection API) based on the selection (CellRanges)\n   * collected in the `selectedRange` module.\n   *\n   * @param {CellRange} [cellRange] The cell range to apply. If not provided, the current selection is used.\n   * @param {number} [layerLevel] The layer level to apply. If not provided, the current layer level is used.\n   */\n  applyAndCommit(cellRange = this.selectedRange.current(), layerLevel = this.getLayerLevel()) {\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n\n    // If the next layer level is lower than previous then clear all area and header highlights. This is the\n    // indication that the new selection is performing.\n    if (layerLevel < this.highlight.layerLevel) {\n      arrayEach(this.highlight.getAreas(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getLayeredAreas(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getRowHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getColumnHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getRowHighlights(), highlight => void highlight.clear());\n      arrayEach(this.highlight.getColumnHighlights(), highlight => void highlight.clear());\n    }\n\n    this.highlight.useLayerLevel(layerLevel);\n\n    const areaHighlight = this.highlight.createArea();\n    const layeredAreaHighlight = this.highlight.createLayeredArea();\n    const rowHeaderHighlight = this.highlight.createRowHeader();\n    const columnHeaderHighlight = this.highlight.createColumnHeader();\n    const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();\n    const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();\n    const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();\n    const rowHighlight = this.highlight.createRowHighlight();\n    const columnHighlight = this.highlight.createColumnHighlight();\n\n    areaHighlight.clear();\n    layeredAreaHighlight.clear();\n    rowHeaderHighlight.clear();\n    columnHeaderHighlight.clear();\n    activeRowHeaderHighlight.clear();\n    activeColumnHeaderHighlight.clear();\n    activeCornerHeaderHighlight.clear();\n    rowHighlight.clear();\n    columnHighlight.clear();\n\n    if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {\n      areaHighlight\n        .add(cellRange.from)\n        .add(cellRange.to)\n        .commit();\n      layeredAreaHighlight\n        .add(cellRange.from)\n        .add(cellRange.to)\n        .commit();\n\n      if (layerLevel === 1) {\n        // For single cell selection in the same layer, we do not create area selection to prevent blue background.\n        // When non-consecutive selection is performed we have to add that missing area selection to the previous layer\n        // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.\n        const previousRange = this.selectedRange.previous();\n\n        this.highlight.useLayerLevel(layerLevel - 1);\n        this.highlight\n          .createArea()\n          .add(previousRange.from)\n          .commit()\n          // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).\n          .syncWith(previousRange);\n        this.highlight\n          .createLayeredArea()\n          .add(previousRange.from)\n          .commit()\n          // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).\n          .syncWith(previousRange);\n\n        this.highlight.useLayerLevel(layerLevel);\n      }\n    }\n\n    if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {\n      if (!cellRange.isSingleHeader()) {\n        const rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);\n        const rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);\n        const columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));\n        const columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);\n\n        if (this.settings.selectionMode === 'single') {\n          rowHeaderHighlight.add(rowCoordsFrom).commit();\n          columnHeaderHighlight.add(columnCoordsFrom).commit();\n          rowHighlight.add(rowCoordsFrom).commit();\n          columnHighlight.add(columnCoordsFrom).commit();\n\n        } else {\n          rowHeaderHighlight\n            .add(rowCoordsFrom)\n            .add(rowCoordsTo)\n            .commit();\n          columnHeaderHighlight\n            .add(columnCoordsFrom)\n            .add(columnCoordsTo)\n            .commit();\n          rowHighlight\n            .add(rowCoordsFrom)\n            .add(rowCoordsTo)\n            .commit();\n          columnHighlight\n            .add(columnCoordsFrom)\n            .add(columnCoordsTo)\n            .commit();\n        }\n      }\n\n      const highlightRowHeaders = !this.#disableHeadersHighlight && (this.isEntireRowSelected() &&\n        (countCols > 0 && countCols === cellRange.getWidth() ||\n        countCols === 0 && this.isSelectedByRowHeader()));\n      const highlightColumnHeaders = !this.#disableHeadersHighlight && (this.isEntireColumnSelected() &&\n        (countRows > 0 && countRows === cellRange.getHeight() ||\n        countRows === 0 && this.isSelectedByColumnHeader()));\n\n      if (highlightRowHeaders) {\n        activeRowHeaderHighlight\n          .add(this.tableProps\n            .createCellCoords(Math.max(cellRange.from.row, 0), Math.min(-this.tableProps.countRowHeaders(), -1)))\n          .add(this.tableProps\n            .createCellCoords(Math.max(cellRange.to.row, 0), -1))\n          .commit();\n      }\n\n      if (highlightColumnHeaders) {\n        activeColumnHeaderHighlight\n          .add(this.tableProps\n            .createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), Math.max(cellRange.from.col, 0)))\n          .add(this.tableProps\n            .createCellCoords(-1, Math.max(cellRange.to.col, 0)))\n          .commit();\n      }\n\n      if (highlightRowHeaders && highlightColumnHeaders) {\n        activeCornerHeaderHighlight\n          .add(this.tableProps\n            .createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders()))\n          .add(this.tableProps\n            .createCellCoords(-1, -1))\n          .commit();\n      }\n    }\n  }\n\n  /**\n   * Sets the selection focus position at the specified coordinates.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   */\n  setRangeFocus(coords) {\n    if (this.selectedRange.isEmpty()) {\n      return;\n    }\n\n    const cellRange = this.selectedRange.current();\n\n    if (!this.inProgress) {\n      this.runLocalHooks('beforeSetFocus', coords);\n    }\n\n    const focusHighlight = this.highlight.getFocus();\n\n    focusHighlight.clear();\n    cellRange.setHighlight(coords);\n\n    if (!this.inProgress) {\n      this.runLocalHooks('beforeHighlightSet');\n    }\n\n    if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {\n      focusHighlight\n        .add(cellRange.highlight)\n        .commit()\n        .syncWith(cellRange);\n    }\n\n    if (!this.inProgress) {\n      this.#isFocusSelectionChanged = true;\n      this.runLocalHooks('afterSetFocus', cellRange.highlight);\n    }\n  }\n\n  /**\n   * Selects cell relative to the current cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.\n   * Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n   */\n  transformStart(rowDelta, colDelta, createMissingRecords = false) {\n    if (this.settings.navigableHeaders) {\n      this.#transformation.setOffsetSize({\n        x: this.tableProps.countRowHeaders(),\n        y: this.tableProps.countColHeaders(),\n      });\n\n    } else {\n      this.#transformation.resetOffsetSize();\n    }\n\n    this.setRangeStart(this.#transformation.transformStart(rowDelta, colDelta, createMissingRecords));\n  }\n\n  /**\n   * Sets selection end cell relative to the current selection end cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   */\n  transformEnd(rowDelta, colDelta) {\n    if (this.settings.navigableHeaders) {\n      this.#transformation.setOffsetSize({\n        x: this.tableProps.countRowHeaders(),\n        y: this.tableProps.countColHeaders(),\n      });\n\n    } else {\n      this.#transformation.resetOffsetSize();\n    }\n\n    this.setRangeEnd(this.#transformation.transformEnd(rowDelta, colDelta));\n  }\n\n  /**\n   * Transforms the focus cell selection relative to the current focus position.\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   */\n  transformFocus(rowDelta, colDelta) {\n    const range = this.selectedRange.current();\n    const { row, col } = range.getOuterTopStartCorner();\n    const columnsInRange = this.tableProps.countRenderableColumnsInRange(0, col - 1);\n    const rowsInRange = this.tableProps.countRenderableRowsInRange(0, row - 1);\n\n    if (range.highlight.isHeader()) {\n      // for header focus selection calculate the new coords based on the selection including headers\n      this.#focusTransformation.setOffsetSize({\n        x: col < 0 ? Math.abs(col) : -columnsInRange,\n        y: row < 0 ? Math.abs(row) : -rowsInRange,\n      });\n    } else {\n      // for focus selection in cells calculate the new coords only based on the selected cells\n      this.#focusTransformation.setOffsetSize({\n        x: col < 0 ? 0 : -columnsInRange,\n        y: row < 0 ? 0 : -rowsInRange,\n      });\n    }\n\n    const focusCoords = this.#focusTransformation.transformStart(rowDelta, colDelta);\n\n    this.setRangeFocus(focusCoords.normalize());\n  }\n\n  /**\n   * Transforms the last selection layer down or up by the index count.\n   *\n   * @param {number} visualRowIndex Visual row index from which the selection will be shifted.\n   * @param {number} amount The number of rows to shift the selection.\n   */\n  shiftRows(visualRowIndex, amount) {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const range = this.selectedRange.current();\n\n    if (this.isSelectedByCorner()) {\n      this.selectAll(true, true, {\n        disableHeadersHighlight: true,\n      });\n\n    } else if (this.isSelectedByColumnHeader() || range.getOuterTopStartCorner().row >= visualRowIndex) {\n      const { from, to, highlight } = range;\n      const countRows = this.tableProps.countRows();\n      const isSelectedByRowHeader = this.isSelectedByRowHeader();\n      const isSelectedByColumnHeader = this.isSelectedByColumnHeader();\n      const minRow = isSelectedByColumnHeader ? -1 : 0;\n      const coordsStartAmount = isSelectedByColumnHeader ? 0 : amount;\n\n      // Remove from the stack the last added selection as that selection below will be\n      // replaced by new transformed selection.\n      this.getSelectedRange().pop();\n\n      const coordsStart = this.tableProps.createCellCoords(\n        clamp(from.row + coordsStartAmount, minRow, countRows - 1),\n        from.col\n      );\n      const coordsEnd = this.tableProps.createCellCoords(\n        clamp(to.row + amount, minRow, countRows - 1),\n        to.col\n      );\n\n      this.markSource('shift');\n\n      if (highlight.row >= visualRowIndex) {\n        this.setRangeStartOnly(coordsStart, true, this.tableProps.createCellCoords(\n          clamp(highlight.row + amount, 0, countRows - 1),\n          highlight.col\n        ));\n\n      } else {\n        this.setRangeStartOnly(coordsStart, true);\n      }\n\n      if (isSelectedByRowHeader) {\n        this.selectedByRowHeader.add(this.getLayerLevel());\n      }\n      if (isSelectedByColumnHeader) {\n        this.selectedByColumnHeader.add(this.getLayerLevel());\n      }\n\n      this.setRangeEnd(coordsEnd);\n      this.markEndSource();\n    }\n  }\n\n  /**\n   * Transforms the last selection layer left or right by the index count.\n   *\n   * @param {number} visualColumnIndex Visual column index from which the selection will be shifted.\n   * @param {number} amount The number of columns to shift the selection.\n   */\n  shiftColumns(visualColumnIndex, amount) {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const range = this.selectedRange.current();\n\n    if (this.isSelectedByCorner()) {\n      this.selectAll(true, true, {\n        disableHeadersHighlight: true,\n      });\n\n    } else if (this.isSelectedByRowHeader() || range.getOuterTopStartCorner().col >= visualColumnIndex) {\n      const { from, to, highlight } = range;\n      const countCols = this.tableProps.countCols();\n      const isSelectedByRowHeader = this.isSelectedByRowHeader();\n      const isSelectedByColumnHeader = this.isSelectedByColumnHeader();\n      const minColumn = isSelectedByRowHeader ? -1 : 0;\n      const coordsStartAmount = isSelectedByRowHeader ? 0 : amount;\n\n      // Remove from the stack the last added selection as that selection below will be\n      // replaced by new transformed selection.\n      this.getSelectedRange().pop();\n\n      const coordsStart = this.tableProps.createCellCoords(\n        from.row,\n        clamp(from.col + coordsStartAmount, minColumn, countCols - 1)\n      );\n      const coordsEnd = this.tableProps.createCellCoords(\n        to.row,\n        clamp(to.col + amount, minColumn, countCols - 1)\n      );\n\n      this.markSource('shift');\n\n      if (highlight.col >= visualColumnIndex) {\n        this.setRangeStartOnly(coordsStart, true, this.tableProps.createCellCoords(\n          highlight.row,\n          clamp(highlight.col + amount, 0, countCols - 1)\n        ));\n\n      } else {\n        this.setRangeStartOnly(coordsStart, true);\n      }\n\n      if (isSelectedByRowHeader) {\n        this.selectedByRowHeader.add(this.getLayerLevel());\n      }\n      if (isSelectedByColumnHeader) {\n        this.selectedByColumnHeader.add(this.getLayerLevel());\n      }\n\n      this.setRangeEnd(coordsEnd);\n      this.markEndSource();\n    }\n  }\n\n  /**\n   * Returns currently used layer level.\n   *\n   * @returns {number} Returns layer level starting from 0. If no selection was added to the table -1 is returned.\n   */\n  getLayerLevel() {\n    return this.selectedRange.size() - 1;\n  }\n\n  /**\n   * Returns `true` if currently there is a selection on the screen, `false` otherwise.\n   *\n   * @returns {boolean}\n   */\n  isSelected() {\n    return !this.selectedRange.isEmpty();\n  }\n\n  /**\n   * Returns information if we have a multi-selection. This method check multi-selection only on the latest layer of\n   * the selection.\n   *\n   * @returns {boolean}\n   */\n  isMultiple() {\n    if (!this.isSelected()) {\n      return false;\n    }\n\n    const isMultipleListener = createObjectPropListener(!this.selectedRange.current().isSingle());\n\n    this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);\n\n    return isMultipleListener.value;\n  }\n\n  /**\n   * Checks if the last selection involves changing the focus cell position only.\n   *\n   * @returns {boolean}\n   */\n  isFocusSelectionChanged() {\n    return this.isSelected() && this.#isFocusSelectionChanged;\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking to the row header. If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks if any row header\n   * was clicked on any selection layer level.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isSelectedByRowHeader(layerLevel = this.getLayerLevel()) {\n    return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ?\n      this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));\n  }\n\n  /**\n   * Returns `true` if the selection consists of entire rows (including their headers). If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks the selection for all layers.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isEntireRowSelected(layerLevel = this.getLayerLevel()) {\n    const tester = (range) => {\n      const { col } = range.getOuterTopStartCorner();\n      const rowHeaders = this.tableProps.countRowHeaders();\n      const countCols = this.tableProps.countCols();\n\n      return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;\n    };\n\n    if (layerLevel === -1) {\n      return Array.from(this.selectedRange).some(range => tester(range));\n    }\n\n    const range = this.selectedRange.peekByIndex(layerLevel);\n\n    return range ? tester(range) : false;\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking to the column header. If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks if any column header\n   * was clicked on any selection layer level.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isSelectedByColumnHeader(layerLevel = this.getLayerLevel()) {\n    return !this.isSelectedByCorner() && (layerLevel === -1 ?\n      this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));\n  }\n\n  /**\n   * Returns `true` if the selection consists of entire columns (including their headers). If the `layerLevel`\n   * argument is passed then only that layer will be checked. Otherwise, it checks the selection for all layers.\n   *\n   * @param {number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n   * @returns {boolean}\n   */\n  isEntireColumnSelected(layerLevel = this.getLayerLevel()) {\n    const tester = (range) => {\n      const { row } = range.getOuterTopStartCorner();\n      const colHeaders = this.tableProps.countColHeaders();\n      const countRows = this.tableProps.countRows();\n\n      return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;\n    };\n\n    if (layerLevel === -1) {\n      return Array.from(this.selectedRange).some(range => tester(range));\n    }\n\n    const range = this.selectedRange.peekByIndex(layerLevel);\n\n    return range ? tester(range) : false;\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking on the row or column header on any layer level.\n   *\n   * @returns {boolean}\n   */\n  isSelectedByAnyHeader() {\n    return this.isSelectedByRowHeader(-1) ||\n      this.isSelectedByColumnHeader(-1) ||\n      this.isSelectedByCorner();\n  }\n\n  /**\n   * Returns `true` if the selection was applied by clicking on the left-top corner overlay.\n   *\n   * @returns {boolean}\n   */\n  isSelectedByCorner() {\n    return this.selectedByColumnHeader.has(this.getLayerLevel()) &&\n      this.selectedByRowHeader.has(this.getLayerLevel());\n  }\n\n  /**\n   * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n   * the coords object is within selection range.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {boolean}\n   */\n  inInSelection(coords) {\n    return this.selectedRange.includes(coords);\n  }\n\n  /**\n   * Returns `true` if the cell corner should be visible.\n   *\n   * @private\n   * @returns {boolean} `true` if the corner element has to be visible, `false` otherwise.\n   */\n  isCellCornerVisible() {\n    return this.settings.fillHandle && !this.tableProps.isEditorOpened() && !this.isMultiple();\n  }\n\n  /**\n   * Returns `true` if the cell coordinates are visible (renderable).\n   *\n   * @private\n   * @param {CellCoords} coords The cell coordinates to check.\n   * @returns {boolean}\n   */\n  isCellVisible(coords) {\n    const renderableCoords = this.tableProps.visualToRenderableCoords(coords);\n\n    return renderableCoords.row !== null && renderableCoords.col !== null;\n  }\n\n  /**\n   * Returns `true` if the area corner should be visible.\n   *\n   * @param {number} layerLevel The layer level.\n   * @returns {boolean} `true` if the corner element has to be visible, `false` otherwise.\n   */\n  isAreaCornerVisible(layerLevel) {\n    if (Number.isInteger(layerLevel) && layerLevel !== this.getLayerLevel()) {\n      return false;\n    }\n\n    return this.settings.fillHandle && !this.tableProps.isEditorOpened() && this.isMultiple();\n  }\n\n  /**\n   * Clear the selection by resetting the collected ranges and highlights.\n   */\n  clear() {\n    // TODO: collections selectedByColumnHeader and selectedByRowHeader should be clear too.\n    this.selectedRange.clear();\n    this.highlight.clear();\n  }\n\n  /**\n   * Deselects all selected cells.\n   */\n  deselect() {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    this.inProgress = false;\n    this.clear();\n    this.runLocalHooks('afterDeselect');\n  }\n\n  /**\n   * Selects all cells and headers.\n   *\n   * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,\n   * `false` otherwise.\n   * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column\n   * headers, `false` otherwise.\n   * @param {object} [options] Additional object with options.\n   * @param {{row: number, col: number} | boolean} [options.focusPosition] The argument allows changing the cell/header\n   * focus position. The value takes an object with a `row` and `col` properties from -N to N, where\n   * negative values point to the headers and positive values point to the cell range. If `false`, the focus\n   * position won't be changed.\n   * @param {boolean} [options.disableHeadersHighlight] If `true`, disables highlighting the headers even when\n   * the logical coordinates points on them.\n   */\n  selectAll(includeRowHeaders = false, includeColumnHeaders = false, options = {\n    focusPosition: false,\n    disableHeadersHighlight: false,\n  }) {\n    const nrOfRows = this.tableProps.countRows();\n    const nrOfColumns = this.tableProps.countCols();\n    const countRowHeaders = this.tableProps.countRowHeaders();\n    const countColHeaders = this.tableProps.countColHeaders();\n\n    const rowFrom = includeColumnHeaders ? -countColHeaders : 0;\n    const columnFrom = includeRowHeaders ? -countRowHeaders : 0;\n\n    // We can't select cells when there is no data.\n    if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {\n      return;\n    }\n\n    let highlight = this.getSelectedRange().current()?.highlight;\n    const {\n      focusPosition,\n      disableHeadersHighlight\n    } = options;\n\n    this.#disableHeadersHighlight = disableHeadersHighlight;\n\n    if (focusPosition && Number.isInteger(focusPosition?.row) && Number.isInteger(focusPosition?.col)) {\n      highlight = this.tableProps\n        .createCellCoords(\n          clamp(focusPosition.row, rowFrom, nrOfRows - 1),\n          clamp(focusPosition.col, columnFrom, nrOfColumns - 1)\n        );\n    }\n\n    const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);\n    const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);\n\n    this.clear();\n    this.setRangeStartOnly(startCoords, undefined, highlight);\n\n    if (columnFrom < 0) {\n      this.selectedByRowHeader.add(this.getLayerLevel());\n    }\n    if (rowFrom < 0) {\n      this.selectedByColumnHeader.add(this.getLayerLevel());\n    }\n\n    this.setRangeEnd(endCoords);\n    this.finish();\n\n    this.#disableHeadersHighlight = false;\n  }\n\n  /**\n   * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n   * finishing at `endRow`, `endColumn`. The method supports two input formats, first as an array of arrays such\n   * as `[[rowStart, columnStart, rowEnd, columnEnd]]` and second format as an array of CellRange objects.\n   * If the passed ranges have another format the exception will be thrown.\n   *\n   * @param {Array[]|CellRange[]} selectionRanges The coordinates which define what the cells should be selected.\n   * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n   */\n  selectCells(selectionRanges) {\n    const selectionType = detectSelectionType(selectionRanges);\n\n    if (selectionType === SELECTION_TYPE_EMPTY) {\n      return false;\n\n    } else if (selectionType === SELECTION_TYPE_UNRECOGNIZED) {\n      throw new Error(toSingleLine`Unsupported format of the selection ranges was passed. To select cells pass\\x20\n        the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd,\\x20\n        columnEnd/columnPropEnd]]) or as an array of CellRange objects.`);\n    }\n\n    const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n      createCellCoords: (...args) => this.tableProps.createCellCoords(...args),\n      createCellRange: (...args) => this.tableProps.createCellRange(...args),\n      propToCol: prop => this.tableProps.propToCol(prop),\n      keepDirection: true,\n    });\n    const navigableHeaders = this.settings.navigableHeaders;\n    const tableParams = {\n      countRows: this.tableProps.countRows(),\n      countCols: this.tableProps.countCols(),\n      countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,\n      countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0,\n    };\n\n    // Check if every layer of the coordinates are valid.\n    const isValid = !selectionRanges.some((selection) => {\n      const cellRange = selectionSchemaNormalizer(selection);\n      const rangeValidity = cellRange.isValid(tableParams);\n\n      return !(rangeValidity && !cellRange.containsHeaders() ||\n               rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());\n    });\n\n    if (isValid) {\n      this.clear();\n      this.setExpectedLayers(selectionRanges.length);\n\n      arrayEach(selectionRanges, (selection) => {\n        const { from, to } = selectionSchemaNormalizer(selection);\n\n        this.setRangeStartOnly(from.clone(), false);\n        this.setRangeEnd(to.clone());\n      });\n\n      this.finish();\n    }\n\n    return isValid;\n  }\n\n  /**\n   * Select column specified by `startColumn` visual index or column property or a range of columns finishing at\n   * `endColumn`.\n   *\n   * @param {number|string} startColumn Visual column index or column property from which the selection starts.\n   * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.\n   * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position horizontally.\n   * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n   */\n  selectColumns(startColumn, endColumn = startColumn, focusPosition = 0) {\n    const start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;\n    const end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n    const countColHeaders = this.tableProps.countColHeaders();\n    const columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;\n\n    const fromCoords = this.tableProps.createCellCoords(columnHeaderLastIndex, start);\n    const toCoords = this.tableProps.createCellCoords(countRows - 1, end);\n    const isValid = this.tableProps.createCellRange(fromCoords, fromCoords, toCoords)\n      .isValid({\n        countRows,\n        countCols,\n        countRowHeaders: 0,\n        countColHeaders,\n      });\n\n    if (isValid) {\n      let highlightRow = 0;\n      let highlightColumn = 0;\n\n      if (Number.isInteger(focusPosition?.row) && Number.isInteger(focusPosition?.col)) {\n        highlightRow = clamp(focusPosition.row, columnHeaderLastIndex, countRows - 1);\n        highlightColumn = clamp(focusPosition.col, Math.min(start, end), Math.max(start, end));\n      } else {\n        highlightRow = clamp(focusPosition, columnHeaderLastIndex, countRows - 1);\n        highlightColumn = start;\n      }\n\n      const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);\n      const fromRow = countColHeaders === 0 ? 0 : clamp(highlight.row, columnHeaderLastIndex, -1);\n      const toRow = countRows - 1;\n      const from = this.tableProps.createCellCoords(fromRow, start);\n      const to = this.tableProps.createCellCoords(toRow, end);\n\n      this.runLocalHooks('beforeSelectColumns', from, to, highlight);\n\n      // disallow modifying row axis for that hooks\n      from.row = fromRow;\n      to.row = toRow;\n\n      this.setRangeStartOnly(from, undefined, highlight);\n      this.selectedByColumnHeader.add(this.getLayerLevel());\n      this.setRangeEnd(to);\n      this.runLocalHooks('afterSelectColumns', from, to, highlight);\n      this.finish();\n    }\n\n    return isValid;\n  }\n\n  /**\n   * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n   *\n   * @param {number} startRow Visual row index from which the selection starts.\n   * @param {number} [endRow] Visual row index from to the selection finishes.\n   * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus\n   * position. The value can take visual row index from -N to N, where negative values point to the headers and positive\n   * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus\n   * position horizontally.\n   * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.\n   */\n  selectRows(startRow, endRow = startRow, focusPosition = 0) {\n    const countRows = this.tableProps.countRows();\n    const countCols = this.tableProps.countCols();\n    const countRowHeaders = this.tableProps.countRowHeaders();\n    const rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;\n\n    const fromCoords = this.tableProps.createCellCoords(startRow, rowHeaderLastIndex);\n    const toCoords = this.tableProps.createCellCoords(endRow, countCols - 1);\n    const isValid = this.tableProps.createCellRange(fromCoords, fromCoords, toCoords)\n      .isValid({\n        countRows,\n        countCols,\n        countRowHeaders,\n        countColHeaders: 0,\n      });\n\n    if (isValid) {\n      let highlightRow = 0;\n      let highlightColumn = 0;\n\n      if (Number.isInteger(focusPosition?.row) && Number.isInteger(focusPosition?.col)) {\n        highlightRow = clamp(focusPosition.row, Math.min(startRow, endRow), Math.max(startRow, endRow));\n        highlightColumn = clamp(focusPosition.col, rowHeaderLastIndex, countCols - 1);\n      } else {\n        highlightRow = startRow;\n        highlightColumn = clamp(focusPosition, rowHeaderLastIndex, countCols - 1);\n      }\n\n      const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);\n      const fromColumn = countRowHeaders === 0 ? 0 : clamp(highlight.col, rowHeaderLastIndex, -1);\n      const toColumn = countCols - 1;\n      const from = this.tableProps.createCellCoords(startRow, fromColumn);\n      const to = this.tableProps.createCellCoords(endRow, toColumn);\n\n      this.runLocalHooks('beforeSelectRows', from, to, highlight);\n\n      // disallow modifying column axis for that hooks\n      from.col = fromColumn;\n      to.col = toColumn;\n\n      this.setRangeStartOnly(from, undefined, highlight);\n      this.selectedByRowHeader.add(this.getLayerLevel());\n      this.setRangeEnd(to);\n      this.runLocalHooks('afterSelectRows', from, to, highlight);\n      this.finish();\n    }\n\n    return isValid;\n  }\n\n  /**\n   * Refreshes the whole selection by clearing, reapplying and committing the renderable selection (Walkontable Selection API)\n   * by using already added visual ranges.\n   */\n  refresh() {\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const countRows = this.tableProps.countRows();\n    const countColumns = this.tableProps.countCols();\n\n    if (countRows === 0 || countColumns === 0) {\n      this.deselect();\n\n      return;\n    }\n\n    const range = this.selectedRange.peekByIndex(this.selectedRange.size() - 1);\n    const { from, to, highlight } = range;\n\n    this.clear();\n\n    highlight.assign({\n      row: clamp(highlight.row, -Infinity, countRows - 1),\n      col: clamp(highlight.col, -Infinity, countColumns - 1),\n    });\n    from.assign({\n      row: clamp(from.row, -Infinity, countRows - 1),\n      col: clamp(from.col, -Infinity, countColumns - 1),\n    });\n    to.assign({\n      row: clamp(to.row, 0, countRows - 1),\n      col: clamp(to.col, 0, countColumns - 1),\n    });\n\n    this.selectedRange.ranges.push(range);\n    this.highlight\n      .getFocus()\n      .add(highlight)\n      .commit()\n      .syncWith(range);\n\n    this.applyAndCommit(range);\n  }\n\n  /**\n   * Refreshes the whole selection by recommitting (recalculating visual indexes to renderable ones) the renderable selection\n   * that was already added.\n   */\n  commit() {\n    const customSelections = this.highlight.getCustomSelections();\n\n    customSelections.forEach((customSelection) => {\n      customSelection.commit();\n    });\n\n    if (!this.isSelected()) {\n      return;\n    }\n\n    const focusHighlight = this.highlight.getFocus();\n    const currentLayer = this.getLayerLevel();\n\n    focusHighlight.commit().syncWith(this.selectedRange.current());\n\n    // Rewriting rendered ranges going through all layers.\n    for (let layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {\n      this.highlight.useLayerLevel(layerLevel);\n\n      const areaHighlight = this.highlight.createArea();\n      const areaLayeredHighlight = this.highlight.createLayeredArea();\n      const rowHeaderHighlight = this.highlight.createRowHeader();\n      const columnHeaderHighlight = this.highlight.createColumnHeader();\n      const activeRowHeaderHighlight = this.highlight.createActiveRowHeader();\n      const activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();\n      const activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();\n      const rowHighlight = this.highlight.createRowHighlight();\n      const columnHighlight = this.highlight.createColumnHighlight();\n\n      areaHighlight.commit();\n      areaLayeredHighlight.commit();\n      rowHeaderHighlight.commit();\n      columnHeaderHighlight.commit();\n      activeRowHeaderHighlight.commit();\n      activeColumnHeaderHighlight.commit();\n      activeCornerHeaderHighlight.commit();\n      rowHighlight.commit();\n      columnHighlight.commit();\n    }\n\n    // Reverting starting layer for the Highlight.\n    this.highlight.useLayerLevel(currentLayer);\n  }\n}\n\nmixin(Selection, localHooks);\n\nexport default Selection;\n","import { createHighlight as createActiveHighlight } from './types/activeHeader';\nimport { createHighlight as createAreaLayeredHighlight } from './types/areaLayered';\nimport { createHighlight as createAreaHighlight } from './types/area';\nimport { createHighlight as createColumnHighlight } from './types/column';\nimport { createHighlight as createFocusHighlight } from './types/focus';\nimport { createHighlight as createCustomHighlight } from './types/customSelection';\nimport { createHighlight as createFillHighlight } from './types/fill';\nimport { createHighlight as createHeaderHighlight } from './types/header';\nimport { createHighlight as createRowHighlight } from './types/row';\nimport {\n  HIGHLIGHT_ACTIVE_HEADER_TYPE,\n  HIGHLIGHT_AREA_TYPE,\n  HIGHLIGHT_FOCUS_TYPE,\n  HIGHLIGHT_CUSTOM_SELECTION_TYPE,\n  HIGHLIGHT_FILL_TYPE,\n  HIGHLIGHT_HEADER_TYPE,\n  HIGHLIGHT_ROW_TYPE,\n  HIGHLIGHT_COLUMN_TYPE,\n} from '../../3rdparty/walkontable/src';\nimport { arrayEach } from './../../helpers/array';\n\nexport {\n  HIGHLIGHT_ACTIVE_HEADER_TYPE as ACTIVE_HEADER_TYPE,\n  HIGHLIGHT_AREA_TYPE as AREA_TYPE,\n  HIGHLIGHT_FOCUS_TYPE as FOCUS_TYPE,\n  HIGHLIGHT_CUSTOM_SELECTION_TYPE as CUSTOM_SELECTION_TYPE,\n  HIGHLIGHT_FILL_TYPE as FILL_TYPE,\n  HIGHLIGHT_HEADER_TYPE as HEADER_TYPE,\n  HIGHLIGHT_ROW_TYPE as ROW_TYPE,\n  HIGHLIGHT_COLUMN_TYPE as COLUMN_TYPE,\n};\n\n/**\n * Highlight class responsible for managing Walkontable Selection classes.\n *\n * With Highlight object you can manipulate four different highlight types:\n *  - `cell` can be added only to a single cell at a time and it defines currently selected cell;\n *  - `fill` can occur only once and its highlight defines selection of autofill functionality (managed by the plugin with the same name);\n *  - `areas` can be added to multiple cells at a time. This type highlights selected cell or multiple cells.\n *    The multiple cells have to be defined as an uninterrupted order (regular shape). Otherwise, the new layer of\n *    that type should be created to manage not-consecutive selection;\n *  - `header` can occur multiple times. This type is designed to highlight only headers. Like `area` type it\n *    can appear with multiple highlights (accessed under different level layers).\n *\n * @class Highlight\n * @util\n */\nclass Highlight {\n  /**\n   * Options consumed by Highlight class and Walkontable Selection classes.\n   *\n   * @type {object}\n   */\n  options;\n  /**\n   * The property which describes which layer level of the visual selection will be modified.\n   * This option is valid only for `area` and `header` highlight types which occurs multiple times on\n   * the table (as a non-consecutive selection).\n   *\n   * An order of the layers is the same as the order of added new non-consecutive selections.\n   *\n   * @type {number}\n   * @default 0\n   */\n  layerLevel = 0;\n  /**\n   * `cell` highlight object which describes attributes for the currently selected cell.\n   * It can only occur only once on the table.\n   *\n   * @type {Selection}\n   */\n  focus;\n  /**\n   * `fill` highlight object which describes attributes for the borders for autofill functionality.\n   * It can only occur only once on the table.\n   *\n   * @type {Selection}\n   */\n  fill;\n  /**\n   * Collection of the `area` highlights. That objects describes attributes for the borders and selection of\n   * the multiple selected cells. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  layeredAreas = new Map();\n  /**\n   * Collection of the `highlight` highlights. That objects describes attributes for the borders and selection of\n   * the multiple selected cells. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  areas = new Map();\n  /**\n   * Collection of the `header` highlights. That objects describes attributes for the selection of\n   * the multiple selected rows in the table header. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  rowHeaders = new Map();\n  /**\n   * Collection of the `header` highlights. That objects describes attributes for the selection of\n   * the multiple selected columns in the table header. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  columnHeaders = new Map();\n  /**\n   * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n   * the multiple selected rows in the table header. The table headers which have selected all items in\n   * a row will be marked as `active-header`.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  activeRowHeaders = new Map();\n  /**\n   * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n   * the multiple selected columns in the table header. The table headers which have selected all items in\n   * a row will be marked as `active-header`.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  activeColumnHeaders = new Map();\n  /**\n   * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n   * the selected corner in the table header. The table headers which have selected all items in\n   * a row will be marked as `active-header`.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  activeCornerHeaders = new Map();\n  /**\n   * Collection of the `rows` highlights. That objects describes attributes for the selection of\n   * the multiple selected cells in a row. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  rowHighlights = new Map();\n  /**\n   * Collection of the `columns` highlights. That objects describes attributes for the selection of\n   * the multiple selected cells in a column. It can occur multiple times on the table.\n   *\n   * @type {Map.<number, Selection>}\n   */\n  columnHighlights = new Map();\n  /**\n   * Collection of the `custom-selection`, holder for example borders added through CustomBorders plugin.\n   *\n   * @type {Selection[]}\n   */\n  customSelections = [];\n\n  constructor(options) {\n    this.options = options;\n    this.focus = createFocusHighlight(options);\n    this.fill = createFillHighlight(options);\n  }\n\n  /**\n   * Check if highlight cell rendering is disabled for specified highlight type.\n   *\n   * @param {string} highlightType Highlight type. Possible values are: `cell`, `area`, `fill` or `header`.\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {boolean}\n   */\n  isEnabledFor(highlightType, coords) {\n    let type = highlightType;\n\n    // Legacy compatibility.\n    if (highlightType === HIGHLIGHT_FOCUS_TYPE) {\n      type = 'current'; // One from settings for `disableVisualSelection` up to Handsontable 0.36/Handsontable Pro 1.16.0.\n    }\n\n    let disableHighlight = this.options.disabledCellSelection(coords.row, coords.col);\n\n    if (typeof disableHighlight === 'string') {\n      disableHighlight = [disableHighlight];\n    }\n\n    return disableHighlight === false || Array.isArray(disableHighlight) && !disableHighlight.includes(type);\n  }\n\n  /**\n   * Set a new layer level to make access to the desire `area` and `header` highlights.\n   *\n   * @param {number} [level=0] Layer level to use.\n   * @returns {Highlight}\n   */\n  useLayerLevel(level = 0) {\n    this.layerLevel = level;\n\n    return this;\n  }\n\n  /**\n   * Get Walkontable Selection instance created for controlling highlight of the currently\n   * focused cell (or header).\n   *\n   * @returns {Selection}\n   */\n  getFocus() {\n    return this.focus;\n  }\n\n  /**\n   * Get Walkontable Selection instance created for controlling highlight of the autofill functionality.\n   *\n   * @returns {Selection}\n   */\n  getFill() {\n    return this.fill;\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * `area` highlights.\n   *\n   * @returns {Selection}\n   */\n  createLayeredArea() {\n    return this.#createHighlight(this.layeredAreas, createAreaLayeredHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the cells.\n   *\n   * @returns {Selection[]}\n   */\n  getLayeredAreas() {\n    return [...this.layeredAreas.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * `highlight` highlights.\n   *\n   * @returns {Selection}\n   */\n  createArea() {\n    return this.#createHighlight(this.areas, createAreaHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the cells.\n   *\n   * @returns {Selection[]}\n   */\n  getAreas() {\n    return [...this.areas.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * header highlight for rows.\n   *\n   * @returns {Selection}\n   */\n  createRowHeader() {\n    return this.#createHighlight(this.rowHeaders, createHeaderHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers.\n   *\n   * @returns {Selection[]}\n   */\n  getRowHeaders() {\n    return [...this.rowHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * header highlight for columns.\n   *\n   * @returns {Selection}\n   */\n  createColumnHeader() {\n    return this.#createHighlight(this.columnHeaders, createHeaderHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers.\n   *\n   * @returns {Selection[]}\n   */\n  getColumnHeaders() {\n    return [...this.columnHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight for active row headers.\n   *\n   * @returns {Selection}\n   */\n  createActiveRowHeader() {\n    return this.#createHighlight(this.activeRowHeaders, createActiveHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the active headers.\n   *\n   * @returns {Selection[]}\n   */\n  getActiveRowHeaders() {\n    return [...this.activeRowHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight for active column headers.\n   *\n   * @returns {Selection}\n   */\n  createActiveColumnHeader() {\n    return this.#createHighlight(this.activeColumnHeaders, createActiveHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the active headers.\n   *\n   * @returns {Selection[]}\n   */\n  getActiveColumnHeaders() {\n    return [...this.activeColumnHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight for the headers corner.\n   *\n   * @returns {Selection}\n   */\n  createActiveCornerHeader() {\n    return this.#createHighlight(this.activeCornerHeaders, createActiveHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers corner.\n   *\n   * @returns {Selection[]}\n   */\n  getActiveCornerHeaders() {\n    return [...this.activeCornerHeaders.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight cells in a row.\n   *\n   * @returns {Selection}\n   */\n  createRowHighlight() {\n    return this.#createHighlight(this.rowHighlights, createRowHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the rows highlighting.\n   *\n   * @returns {Selection[]}\n   */\n  getRowHighlights() {\n    return [...this.rowHighlights.values()];\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance created for controlling\n   * highlight cells in a column.\n   *\n   * @returns {Selection}\n   */\n  createColumnHighlight() {\n    return this.#createHighlight(this.columnHighlights, createColumnHighlight);\n  }\n\n  /**\n   * Get all Walkontable Selection instances which describes the state of the columns highlighting.\n   *\n   * @returns {Selection[]}\n   */\n  getColumnHighlights() {\n    return [...this.columnHighlights.values()];\n  }\n\n  /**\n   * Get Walkontable Selection instance created for controlling highlight of the custom selection functionality.\n   *\n   * @returns {Selection}\n   */\n  getCustomSelections() {\n    return [...this.customSelections.values()];\n  }\n\n  /**\n   * Add selection to the custom selection instance. The new selection are added to the end of the selection collection.\n   *\n   * @param {object} selectionInstance The selection instance.\n   */\n  addCustomSelection(selectionInstance) {\n    this.customSelections.push(createCustomHighlight({\n      ...this.options,\n      ...selectionInstance\n    }));\n  }\n\n  /**\n   * Perform cleaning visual highlights for the whole table.\n   */\n  clear() {\n    this.focus.clear();\n    this.fill.clear();\n\n    arrayEach(this.areas.values(), highlight => void highlight.clear());\n    arrayEach(this.layeredAreas.values(), highlight => void highlight.clear());\n    arrayEach(this.rowHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.columnHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.activeRowHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.activeColumnHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.activeCornerHeaders.values(), highlight => void highlight.clear());\n    arrayEach(this.rowHighlights.values(), highlight => void highlight.clear());\n    arrayEach(this.columnHighlights.values(), highlight => void highlight.clear());\n  }\n\n  /**\n   * Creates (if not exist in the cache) Walkontable Selection instance.\n   *\n   * @param {Map} cacheMap The map where the instance will be cached.\n   * @param {Function} highlightFactory The function factory.\n   * @returns {VisualSelection}\n   */\n  #createHighlight(cacheMap, highlightFactory) {\n    const layerLevel = this.layerLevel;\n\n    if (cacheMap.has(layerLevel)) {\n      return cacheMap.get(layerLevel);\n    }\n\n    const highlight = highlightFactory({ layerLevel, ...this.options });\n\n    cacheMap.set(layerLevel, highlight);\n\n    return highlight;\n  }\n\n  /**\n   * This object can be iterate over using `for of` syntax or using internal `arrayEach` helper.\n   *\n   * @returns {Selection[]}\n   */\n  [Symbol.iterator]() {\n    return [\n      this.focus,\n      this.fill,\n      ...this.areas.values(),\n      ...this.layeredAreas.values(),\n      ...this.rowHeaders.values(),\n      ...this.columnHeaders.values(),\n      ...this.activeRowHeaders.values(),\n      ...this.activeColumnHeaders.values(),\n      ...this.activeCornerHeaders.values(),\n      ...this.rowHighlights.values(),\n      ...this.columnHighlights.values(),\n      ...this.customSelections,\n    ][Symbol.iterator]();\n  }\n}\n\nexport default Highlight;\n","import { HIGHLIGHT_ACTIVE_HEADER_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting column or row headers\n * only when the whole column or row is selected.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.activeHeaderClassName Highlighted headers' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ activeHeaderClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: activeHeaderClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_ACTIVE_HEADER_TYPE,\n  });\n}\n","import { Selection } from './../../3rdparty/walkontable/src';\n\nclass VisualSelection extends Selection {\n  /**\n   * Range of selection visually. Visual representation may have representation in a rendered selection.\n   *\n   * @type {null|CellRange}\n   */\n  visualCellRange = null;\n\n  constructor(settings, visualCellRange) {\n    super(settings, null);\n    this.visualCellRange = visualCellRange || null;\n    this.commit();\n  }\n  /**\n   * Adds a cell coords to the selection.\n   *\n   * @param {CellCoords} coords Visual coordinates of a cell.\n   * @returns {VisualSelection}\n   */\n  add(coords) {\n    if (this.visualCellRange === null) {\n      this.visualCellRange = this.settings.createCellRange(coords);\n    } else {\n      this.visualCellRange.expand(coords);\n    }\n\n    return this;\n  }\n\n  /**\n   * Clears visual and renderable selection.\n   *\n   * @returns {VisualSelection}\n   */\n  clear() {\n    this.visualCellRange = null;\n\n    return super.clear();\n  }\n\n  /**\n   * Trims the passed cell range object by removing all coordinates that points to the hidden rows\n   * or columns. The result is a new cell range object that points only to the visible indexes or `null`.\n   *\n   * @private\n   * @param {CellRange} cellRange Cells range object to be trimmed.\n   * @returns {CellRange} Visual non-hidden cells range coordinates.\n   */\n  trimToVisibleCellsRangeOnly({ from, to }) {\n    let visibleFromCoords = this.getNearestNotHiddenCoords(from, 1);\n    let visibleToCoords = this.getNearestNotHiddenCoords(to, -1);\n\n    if (visibleFromCoords === null || visibleToCoords === null) {\n      return null;\n    }\n\n    if (visibleFromCoords.row > visibleToCoords.row || visibleFromCoords.col > visibleToCoords.col) {\n      visibleFromCoords = from;\n      visibleToCoords = to;\n    }\n\n    return this.settings.createCellRange(visibleFromCoords, visibleFromCoords, visibleToCoords);\n  }\n\n  /**\n   * Gets nearest coordinates that points to the visible row and column indexes. If there are no visible\n   * rows and/or columns the `null` value is returned.\n   *\n   * @private\n   * @param {CellCoords} coords The coords object as starting point for finding the nearest visible coordinates.\n   * @param {1|-1} rowSearchDirection The search direction. For value 1, it means searching from top to bottom for\n   *                                  rows and from left to right for columns. For -1, it is the other way around.\n   * @param {1|-1} columnSearchDirection The same as above but for rows.\n   * @returns {CellCoords|null} Visual cell coordinates.\n   */\n  getNearestNotHiddenCoords(coords, rowSearchDirection, columnSearchDirection = rowSearchDirection) {\n    const nextVisibleRow = this.getNearestNotHiddenIndex(\n      this.settings.rowIndexMapper, coords.row, rowSearchDirection);\n\n    // There are no more visual rows in the range.\n    if (nextVisibleRow === null) {\n      return null;\n    }\n\n    const nextVisibleColumn = this.getNearestNotHiddenIndex(\n      this.settings.columnIndexMapper, coords.col, columnSearchDirection);\n\n    // There are no more visual columns in the range.\n    if (nextVisibleColumn === null) {\n      return null;\n    }\n\n    return this.settings.createCellCoords(nextVisibleRow, nextVisibleColumn);\n  }\n\n  /**\n   * Gets nearest visual index. If there are no visible rows or columns the `null` value is returned.\n   *\n   * @private\n   * @param {IndexMapper} indexMapper The IndexMapper instance for specific axis.\n   * @param {number} visualIndex The index as starting point for finding the nearest visible index.\n   * @param {1|-1} searchDirection The search direction. For value 1, it means searching from top to bottom for\n   *                               rows and from left to right for columns. For -1, it is the other way around.\n   * @returns {number|null} Visual row/column index.\n   */\n  getNearestNotHiddenIndex(indexMapper, visualIndex, searchDirection) {\n    if (visualIndex < 0) {\n      return visualIndex;\n    }\n\n    return indexMapper.getNearestNotHiddenIndex(visualIndex, searchDirection);\n  }\n\n  /**\n   * Override internally stored visual indexes added by the Selection's `add` function. It should be executed\n   * at the end of process of adding visual selection coordinates.\n   *\n   * @returns {VisualSelection}\n   */\n  commit() {\n    // There is no information about visual ranges, thus no selection may be displayed.\n    if (this.visualCellRange === null) {\n      return this;\n    }\n\n    const trimmedCellRange = this.trimToVisibleCellsRangeOnly(this.visualCellRange);\n\n    // There is no visual start point (and also visual end point) in the range.\n    if (trimmedCellRange === null) {\n      this.cellRange = null;\n    } else {\n      this.cellRange = this.createRenderableCellRange(trimmedCellRange.from, trimmedCellRange.to);\n    }\n\n    return this;\n  }\n\n  /**\n   * Some selection may be a part of broader cell range. This function sync coordinates of current selection\n   * and the broader cell range when needed (current selection can't be presented visually).\n   *\n   * @param {CellRange} broaderCellRange Visual range. Actual cell range may be contained in the broader cell range.\n   * When there is no way to represent some cell range visually we try to find range containing just the first visible cell.\n   *\n   * Warn: Please keep in mind that this function may change coordinates of the handled broader range.\n   *\n   * @returns {VisualSelection}\n   */\n  syncWith(broaderCellRange) {\n    const coordsFrom = broaderCellRange.from.clone().normalize();\n    const rowDirection = broaderCellRange.getVerticalDirection() === 'N-S' ? 1 : -1;\n    const columnDirection = broaderCellRange.getHorizontalDirection() === 'W-E' ? 1 : -1;\n    const renderableHighlight = this.settings.visualToRenderableCoords(this.visualCellRange.highlight);\n    let cellCoordsVisual = null;\n\n    if (renderableHighlight === null || renderableHighlight.col === null || renderableHighlight.row === null) {\n      cellCoordsVisual = this.getNearestNotHiddenCoords(coordsFrom, rowDirection, columnDirection);\n    }\n\n    if (cellCoordsVisual !== null && broaderCellRange.overlaps(cellCoordsVisual)) {\n      const currentHighlight = broaderCellRange.highlight.clone();\n\n      if (currentHighlight.row >= 0) {\n        currentHighlight.row = cellCoordsVisual.row;\n      }\n      if (currentHighlight.col >= 0) {\n        currentHighlight.col = cellCoordsVisual.col;\n      }\n\n      // We can't show selection visually now, but we found first visible range in the broader cell range.\n      if (this.cellRange === null) {\n        const cellCoordsRenderable = this.settings.visualToRenderableCoords(currentHighlight);\n\n        this.cellRange = this.settings.createCellRange(cellCoordsRenderable);\n      }\n\n      // TODO\n      // We set new highlight as it might change (for example, when showing/hiding some cells from the broader selection range)\n      // TODO: It is also handled by the `MergeCells` plugin while adjusting already modified coordinates. Should it?\n      broaderCellRange.setHighlight(currentHighlight);\n    }\n\n    // TODO\n    // Sync the highlight coords from the visual selection layer with logical coords.\n    if (this.settings.selectionType === 'focus' && renderableHighlight !== null && cellCoordsVisual === null) {\n      broaderCellRange.setHighlight(this.visualCellRange.highlight);\n    }\n\n    return this;\n  }\n\n  /**\n   * Returns the top left (TL) and bottom right (BR) selection coordinates (renderable indexes).\n   * The method overwrites the original method to support header selection for hidden cells.\n   * To make the header selection working, the CellCoords and CellRange have to support not\n   * complete coordinates (`null` values for example, `row: null`, `col: 2`).\n   *\n   * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.\n   */\n  getCorners() {\n    const { from, to } = this.cellRange;\n\n    return [\n      Math.min(from.row, to.row),\n      Math.min(from.col, to.col),\n      Math.max(from.row, to.row),\n      Math.max(from.col, to.col),\n    ];\n  }\n\n  /**\n   * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection\n   * coordinates (visual indexes).\n   *\n   * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.\n   */\n  getVisualCorners() {\n    const topStart = this.settings.renderableToVisualCoords(this.cellRange.getTopStartCorner());\n    const bottomEnd = this.settings.renderableToVisualCoords(this.cellRange.getBottomEndCorner());\n\n    return [\n      topStart.row,\n      topStart.col,\n      bottomEnd.row,\n      bottomEnd.col,\n    ];\n  }\n\n  /**\n   * Creates a new CellRange object based on visual coordinates which before object creation are\n   * translated to renderable indexes.\n   *\n   * @param {CellCoords} visualFromCoords The CellCoords object which contains coordinates that\n   *                                      points to the beginning of the selection.\n   * @param {CellCoords} visualToCoords The CellCoords object which contains coordinates that\n   *                                    points to the end of the selection.\n   * @returns {CellRange|null}\n   */\n  createRenderableCellRange(visualFromCoords, visualToCoords) {\n    const renderableFromCoords = this.settings.visualToRenderableCoords(visualFromCoords);\n    const renderableToCoords = this.settings.visualToRenderableCoords(visualToCoords);\n\n    if (renderableFromCoords.row === null || renderableFromCoords.col === null ||\n        renderableToCoords.row === null || renderableToCoords.col === null) {\n      return null;\n    }\n\n    return this.settings.createCellRange(renderableFromCoords, renderableFromCoords, renderableToCoords);\n  }\n}\n\nexport default VisualSelection;\n","import { HIGHLIGHT_AREA_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection responsible for highlighting area of the selected multiple cells.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {object} highlightParams.areaCornerVisible Function to determine if area's corner should be visible.\n * @returns {Selection}\n */\nexport function createHighlight({ areaCornerVisible, ...restOptions }) {\n  return new VisualSelection({\n    className: 'area',\n    createLayers: true,\n    border: {\n      width: 1,\n      color: '#4b89ff',\n      cornerVisible: areaCornerVisible,\n    },\n    ...restOptions,\n    selectionType: HIGHLIGHT_AREA_TYPE,\n  });\n}\n","import { HIGHLIGHT_AREA_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection responsible for highlighting area of the selected multiple cells.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {object} highlightParams.areaCornerVisible Function to determine if area's corner should be visible.\n * @returns {Selection}\n */\nexport function createHighlight({ ...restOptions }) {\n  return new VisualSelection({\n    className: 'highlight',\n    ...restOptions,\n    selectionType: HIGHLIGHT_AREA_TYPE,\n  });\n}\n","import { HIGHLIGHT_COLUMN_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells in a columns and\n * column headers.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.columnClassName Highlighted column' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ columnClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: columnClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_COLUMN_TYPE,\n  });\n}\n","import { HIGHLIGHT_FOCUS_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\nimport { A11Y_SELECTED } from '../../../helpers/a11y';\n\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection\n * can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {Function} highlightParams.cellCornerVisible Function to determine if cell's corner should be visible.\n * @returns {Selection}\n */\nexport function createHighlight({ cellCornerVisible, ...restOptions }) {\n  return new VisualSelection({\n    className: 'current',\n    headerAttributes: [A11Y_SELECTED()],\n    border: {\n      width: 2,\n      color: '#4b89ff',\n      cornerVisible: cellCornerVisible,\n    },\n    ...restOptions,\n    selectionType: HIGHLIGHT_FOCUS_TYPE,\n  });\n}\n","import { HIGHLIGHT_CUSTOM_SELECTION_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell.\n * This type of selection can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {object} highlightParams.border Border configuration.\n * @param {object} highlightParams.visualCellRange Function to translate visual to renderable coords.\n * @returns {Selection}\n */\nexport function createHighlight({ border, visualCellRange, ...restOptions }) {\n  return new VisualSelection({\n    ...border,\n    ...restOptions,\n    selectionType: HIGHLIGHT_CUSTOM_SELECTION_TYPE,\n  }, visualCellRange);\n}\n","import { HIGHLIGHT_FILL_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells which are covered by fill handle\n * functionality. This type of selection can present on the table only one at the time.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @returns {Selection}\n */\nexport function createHighlight({ ...restOptions }) {\n  return new VisualSelection({\n    className: 'fill',\n    border: {\n      width: 1,\n      color: '#ff0000',\n    },\n    ...restOptions,\n    selectionType: HIGHLIGHT_FILL_TYPE,\n  });\n}\n","import { HIGHLIGHT_HEADER_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting column or row headers when\n * any cell is selected.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.headerClassName Highlighted headers' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ headerClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: headerClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_HEADER_TYPE,\n  });\n}\n","import { HIGHLIGHT_ROW_TYPE } from '../../../3rdparty/walkontable/src';\nimport VisualSelection from '../visualSelection';\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells in a rows and\n * row headers.\n * This type of selection can occur multiple times.\n *\n * @param {object} highlightParams A configuration object to create a highlight.\n * @param {string} highlightParams.rowClassName Highlighted row' class name.\n * @returns {Selection}\n */\nexport function createHighlight({ rowClassName, ...restOptions }) {\n  return new VisualSelection({\n    className: rowClassName,\n    ...restOptions,\n    selectionType: HIGHLIGHT_ROW_TYPE,\n  });\n}\n","/**\n * The SelectionRange class is a simple CellRanges collection designed for easy manipulation of the multiple\n * consecutive and non-consecutive selections.\n *\n * @class SelectionRange\n * @util\n */\nclass SelectionRange {\n  /**\n   * List of all CellRanges added to the class instance.\n   *\n   * @type {CellRange[]}\n   */\n  ranges = [];\n  /**\n   * @type {function(CellCoords): CellRange}\n   */\n  createCellRange;\n\n  constructor(createCellRange) {\n    this.createCellRange = createCellRange;\n  }\n\n  /**\n   * Check if selected range is empty.\n   *\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return this.size() === 0;\n  }\n\n  /**\n   * Set coordinates to the class instance. It clears all previously added coordinates and push `coords`\n   * to the collection.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {SelectionRange}\n   */\n  set(coords) {\n    this.clear();\n    this.ranges.push(this.createCellRange(coords));\n\n    return this;\n  }\n\n  /**\n   * Add coordinates to the class instance. The new coordinates are added to the end of the range collection.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {SelectionRange}\n   */\n  add(coords) {\n    this.ranges.push(this.createCellRange(coords));\n\n    return this;\n  }\n\n  /**\n   * Removes from the stack the last added coordinates.\n   *\n   * @returns {SelectionRange}\n   */\n  pop() {\n    this.ranges.pop();\n\n    return this;\n  }\n\n  /**\n   * Get last added coordinates from ranges, it returns a CellRange instance.\n   *\n   * @returns {CellRange|undefined}\n   */\n  current() {\n    return this.peekByIndex(this.size() - 1);\n  }\n\n  /**\n   * Get previously added coordinates from ranges, it returns a CellRange instance.\n   *\n   * @returns {CellRange|undefined}\n   */\n  previous() {\n    return this.peekByIndex(this.size() - 2);\n  }\n\n  /**\n   * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n   * the coords object is within selection range.\n   *\n   * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n   * @returns {boolean}\n   */\n  includes(coords) {\n    return this.ranges.some(cellRange => cellRange.includes(coords));\n  }\n\n  /**\n   * Clear collection.\n   *\n   * @returns {SelectionRange}\n   */\n  clear() {\n    this.ranges.length = 0;\n\n    return this;\n  }\n\n  /**\n   * Get count of added all coordinates added to the selection.\n   *\n   * @returns {number}\n   */\n  size() {\n    return this.ranges.length;\n  }\n\n  /**\n   * Peek the coordinates based on the index where that coordinate resides in the collection.\n   *\n   * @param {number} [index=0] An index where the coordinate will be retrieved from. The index '0' gets the\n   * latest range.\n   * @returns {CellRange|undefined}\n   */\n  peekByIndex(index = 0) {\n    let cellRange;\n\n    if (index >= 0 && index < this.size()) {\n      cellRange = this.ranges[index];\n    }\n\n    return cellRange;\n  }\n\n  [Symbol.iterator]() {\n    return this.ranges[Symbol.iterator]();\n  }\n}\n\nexport default SelectionRange;\n","import { mixin, createObjectPropListener } from '../helpers/object';\nimport localHooks from './../mixins/localHooks';\n\n/**\n * The Transformation class implements algorithms for transforming coordinates based on current settings\n * passed to the Handsontable. The class performs the calculations based on the renderable indexes.\n *\n * Transformation is always applied relative to the current selection.\n *\n * The class operates on a table size defined by the renderable indexes. If the `navigableHeaders`\n * option is enabled, the table size is increased by the number of row and/or column headers.\n * Because the headers are treated as cells as part of the table size (indexes always go from 0 to N),\n * the algorithm can be written as simply as possible (without new if's that distinguish the headers\n * logic).\n *\n * @class Transformation\n * @util\n */\nclass Transformation {\n  /**\n   * Instance of the SelectionRange, holder for visual coordinates applied to the table.\n   *\n   * @type {SelectionRange}\n   */\n  #range;\n  /**\n   * Additional options which define the state of the settings which can infer transformation and\n   * give the possibility to translate indexes.\n   *\n   * @type {object}\n   */\n  #options;\n  /**\n   * Increases the table size by applying the offsets. The option is used by the `navigableHeaders`\n   * option.\n   *\n   * @type {{ x: number, y: number }}\n   */\n  #offset = { x: 0, y: 0 };\n\n  constructor(range, options) {\n    this.#range = range;\n    this.#options = options;\n  }\n\n  /**\n   * Selects cell relative to the current cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n   *                        be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n   * @returns {CellCoords} Visual coordinates after transformation.\n   */\n  transformStart(rowDelta, colDelta, createMissingRecords = false) {\n    const delta = this.#options.createCellCoords(rowDelta, colDelta);\n    let visualCoords = this.#range.current().highlight;\n    const highlightRenderableCoords = this.#options.visualToRenderableCoords(visualCoords);\n    let rowTransformDir = 0;\n    let colTransformDir = 0;\n\n    this.runLocalHooks('beforeTransformStart', delta);\n\n    if (highlightRenderableCoords.row !== null && highlightRenderableCoords.col !== null) {\n      const { width, height } = this.#getTableSize();\n      const { row, col } = this.#visualToZeroBasedCoords(visualCoords);\n      const fixedRowsBottom = this.#options.fixedRowsBottom();\n      const minSpareRows = this.#options.minSpareRows();\n      const minSpareCols = this.#options.minSpareCols();\n      const autoWrapRow = this.#options.autoWrapRow();\n      const autoWrapCol = this.#options.autoWrapCol();\n\n      const zeroBasedCoords = this.#options.createCellCoords(\n        row + delta.row,\n        col + delta.col,\n      );\n\n      if (zeroBasedCoords.row >= height) {\n        const isActionInterrupted = createObjectPropListener(\n          createMissingRecords && minSpareRows > 0 && fixedRowsBottom === 0\n        );\n        const nextColumn = zeroBasedCoords.col + 1;\n        const newCoords = this.#options.createCellCoords(\n          zeroBasedCoords.row - height,\n          nextColumn >= width ? nextColumn - width : nextColumn,\n        );\n\n        this.runLocalHooks(\n          'beforeColumnWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          nextColumn >= width,\n        );\n\n        if (isActionInterrupted.value) {\n          this.runLocalHooks('insertRowRequire', this.#options.countRenderableRows());\n\n        } else if (autoWrapCol) {\n          zeroBasedCoords.assign(newCoords);\n        }\n\n      } else if (zeroBasedCoords.row < 0) {\n        const isActionInterrupted = createObjectPropListener(autoWrapCol);\n        const previousColumn = zeroBasedCoords.col - 1;\n        const newCoords = this.#options.createCellCoords(\n          height + zeroBasedCoords.row,\n          previousColumn < 0 ? width + previousColumn : previousColumn,\n        );\n\n        this.runLocalHooks(\n          'beforeColumnWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          previousColumn < 0,\n        );\n\n        if (autoWrapCol) {\n          zeroBasedCoords.assign(newCoords);\n        }\n      }\n\n      if (zeroBasedCoords.col >= width) {\n        const isActionInterrupted = createObjectPropListener(\n          createMissingRecords && minSpareCols > 0\n        );\n        const nextRow = zeroBasedCoords.row + 1;\n        const newCoords = this.#options.createCellCoords(\n          nextRow >= height ? nextRow - height : nextRow,\n          zeroBasedCoords.col - width,\n        );\n\n        this.runLocalHooks(\n          'beforeRowWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          nextRow >= height,\n        );\n\n        if (isActionInterrupted.value) {\n          this.runLocalHooks('insertColRequire', this.#options.countRenderableColumns());\n\n        } else if (autoWrapRow) {\n          zeroBasedCoords.assign(newCoords);\n        }\n\n      } else if (zeroBasedCoords.col < 0) {\n        const isActionInterrupted = createObjectPropListener(autoWrapRow);\n        const previousRow = zeroBasedCoords.row - 1;\n        const newCoords = this.#options.createCellCoords(\n          previousRow < 0 ? height + previousRow : previousRow,\n          width + zeroBasedCoords.col,\n        );\n\n        this.runLocalHooks(\n          'beforeRowWrap',\n          isActionInterrupted,\n          this.#zeroBasedToVisualCoords(newCoords),\n          previousRow < 0,\n        );\n\n        if (autoWrapRow) {\n          zeroBasedCoords.assign(newCoords);\n        }\n      }\n\n      const { rowDir, colDir } = this.#clampCoords(zeroBasedCoords);\n\n      rowTransformDir = rowDir;\n      colTransformDir = colDir;\n      visualCoords = this.#zeroBasedToVisualCoords(zeroBasedCoords);\n    }\n\n    this.runLocalHooks('afterTransformStart', visualCoords, rowTransformDir, colTransformDir);\n\n    return visualCoords;\n  }\n\n  /**\n   * Sets selection end cell relative to the current selection end cell (if possible).\n   *\n   * @param {number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {number} colDelta Columns number to move, value can be passed as negative number.\n   * @returns {CellCoords} Visual coordinates after transformation.\n   */\n  transformEnd(rowDelta, colDelta) {\n    const delta = this.#options.createCellCoords(rowDelta, colDelta);\n    const cellRange = this.#range.current();\n    const highlightRenderableCoords = this.#options.visualToRenderableCoords(cellRange.highlight);\n    const toRow = this.#findFirstNonHiddenZeroBasedRow(cellRange.to.row, cellRange.from.row);\n    const toColumn = this.#findFirstNonHiddenZeroBasedColumn(cellRange.to.col, cellRange.from.col);\n    const visualCoords = cellRange.to.clone();\n    let rowTransformDir = 0;\n    let colTransformDir = 0;\n\n    this.runLocalHooks('beforeTransformEnd', delta);\n\n    if (\n      highlightRenderableCoords.row !== null && highlightRenderableCoords.col !== null &&\n      toRow !== null && toColumn !== null\n    ) {\n      const {\n        row: highlightRow,\n        col: highlightColumn,\n      } = this.#visualToZeroBasedCoords(cellRange.highlight);\n      const coords = this.#options.createCellCoords(toRow + delta.row, toColumn + delta.col);\n      const topStartCorner = cellRange.getTopStartCorner();\n      const topEndCorner = cellRange.getTopEndCorner();\n      const bottomEndCorner = cellRange.getBottomEndCorner();\n\n      if (delta.col < 0 && toColumn >= highlightColumn && coords.col < highlightColumn) {\n        const columnRestDelta = coords.col - highlightColumn;\n\n        coords.col = this.#findFirstNonHiddenZeroBasedColumn(topStartCorner.col, topEndCorner.col) + columnRestDelta;\n\n      } else if (delta.col > 0 && toColumn <= highlightColumn && coords.col > highlightColumn) {\n        const endColumnIndex = this.#findFirstNonHiddenZeroBasedColumn(topEndCorner.col, topStartCorner.col);\n        const columnRestDelta = Math.max(coords.col - endColumnIndex, 1);\n\n        coords.col = endColumnIndex + columnRestDelta;\n      }\n\n      if (delta.row < 0 && toRow >= highlightRow && coords.row < highlightRow) {\n        const rowRestDelta = coords.row - highlightRow;\n\n        coords.row = this.#findFirstNonHiddenZeroBasedRow(topStartCorner.row, bottomEndCorner.row) + rowRestDelta;\n\n      } else if (delta.row > 0 && toRow <= highlightRow && coords.row > highlightRow) {\n        const bottomRowIndex = this.#findFirstNonHiddenZeroBasedRow(bottomEndCorner.row, topStartCorner.row);\n        const rowRestDelta = Math.max(coords.row - bottomRowIndex, 1);\n\n        coords.row = bottomRowIndex + rowRestDelta;\n      }\n\n      const { rowDir, colDir } = this.#clampCoords(coords);\n\n      rowTransformDir = rowDir;\n      colTransformDir = colDir;\n\n      const newVisualCoords = this.#zeroBasedToVisualCoords(coords);\n\n      if (delta.row === 0 && delta.col !== 0) {\n        visualCoords.col = newVisualCoords.col;\n\n      } else if (delta.row !== 0 && delta.col === 0) {\n        visualCoords.row = newVisualCoords.row;\n\n      } else {\n        visualCoords.row = newVisualCoords.row;\n        visualCoords.col = newVisualCoords.col;\n      }\n    }\n\n    this.runLocalHooks('afterTransformEnd', visualCoords, rowTransformDir, colTransformDir);\n\n    return visualCoords;\n  }\n\n  /**\n   * Sets the additional offset in table size that may occur when the `navigableHeaders` option\n   * is enabled.\n   *\n   * @param {{x: number, y: number}} offset Offset as x and y properties.\n   */\n  setOffsetSize({ x, y }) {\n    this.#offset = { x, y };\n  }\n\n  /**\n   * Resets the offset size to the default values.\n   */\n  resetOffsetSize() {\n    this.#offset = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  /**\n   * Clamps the coords to make sure they points to the cell (or header) in the table range.\n   *\n   * @param {CellCoords} zeroBasedCoords The coords object to clamp.\n   * @returns {{rowDir: 1|0|-1, colDir: 1|0|-1}}\n   */\n  #clampCoords(zeroBasedCoords) {\n    const { width, height } = this.#getTableSize();\n    let rowDir = 0;\n    let colDir = 0;\n\n    if (zeroBasedCoords.row < 0) {\n      rowDir = -1;\n      zeroBasedCoords.row = 0;\n\n    } else if (zeroBasedCoords.row > 0 && zeroBasedCoords.row >= height) {\n      rowDir = 1;\n      zeroBasedCoords.row = height - 1;\n    }\n\n    if (zeroBasedCoords.col < 0) {\n      colDir = -1;\n      zeroBasedCoords.col = 0;\n\n    } else if (zeroBasedCoords.col > 0 && zeroBasedCoords.col >= width) {\n      colDir = 1;\n      zeroBasedCoords.col = width - 1;\n    }\n\n    return { rowDir, colDir };\n  }\n\n  /**\n   * Gets the table size in number of rows with headers as \"height\" and number of columns with\n   * headers as \"width\".\n   *\n   * @returns {{width: number, height: number}}\n   */\n  #getTableSize() {\n    return {\n      width: this.#offset.x + this.#options.countRenderableColumns(),\n      height: this.#offset.y + this.#options.countRenderableRows(),\n    };\n  }\n\n  /**\n   * Finds the first non-hidden zero-based row in the table range.\n   *\n   * @param {number} visualRowFrom The visual row from which the search should start.\n   * @param {number} visualRowTo The visual row to which the search should end.\n   * @returns {number | null}\n   */\n  #findFirstNonHiddenZeroBasedRow(visualRowFrom, visualRowTo) {\n    const row = this.#options.findFirstNonHiddenRenderableRow(visualRowFrom, visualRowTo);\n\n    if (row === null) {\n      return null;\n    }\n\n    return this.#offset.y + row;\n  }\n\n  /**\n   * Finds the first non-hidden zero-based column in the table range.\n   *\n   * @param {number} visualColumnFrom The visual column from which the search should start.\n   * @param {number} visualColumnTo The visual column to which the search should end.\n   * @returns {number | null}\n   */\n  #findFirstNonHiddenZeroBasedColumn(visualColumnFrom, visualColumnTo) {\n    const column = this.#options.findFirstNonHiddenRenderableColumn(visualColumnFrom, visualColumnTo);\n\n    if (column === null) {\n      return null;\n    }\n\n    return this.#offset.x + column;\n  }\n\n  /**\n   * Translates the visual coordinates to zero-based ones.\n   *\n   * @param {CellCoords} visualCoords The visual coords to process.\n   * @returns {CellCoords}\n   */\n  #visualToZeroBasedCoords(visualCoords) {\n    const { row, col } = this.#options.visualToRenderableCoords(visualCoords);\n\n    if (row === null || col === null) {\n      throw new Error('Renderable coords are not visible.');\n    }\n\n    return this.#options.createCellCoords(this.#offset.y + row, this.#offset.x + col);\n  }\n\n  /**\n   * Translates the zero-based coordinates to visual ones.\n   *\n   * @param {CellCoords} zeroBasedCoords The coordinates to process.\n   * @returns {CellCoords}\n   */\n  #zeroBasedToVisualCoords(zeroBasedCoords) {\n    const coords = zeroBasedCoords.clone();\n\n    coords.col = zeroBasedCoords.col - this.#offset.x;\n    coords.row = zeroBasedCoords.row - this.#offset.y;\n\n    return this.#options.renderableToVisualCoords(coords);\n  }\n}\n\nmixin(Transformation, localHooks);\n\nexport default Transformation;\n","import { CellRange } from './../3rdparty/walkontable/src';\nimport { arrayEach, arrayReduce } from './../helpers/array';\nimport { isUndefined } from './../helpers/mixed';\n\nexport const SELECTION_TYPE_UNRECOGNIZED = 0;\nexport const SELECTION_TYPE_EMPTY = 1;\nexport const SELECTION_TYPE_ARRAY = 2;\nexport const SELECTION_TYPE_OBJECT = 3;\nexport const SELECTION_TYPES = [\n  SELECTION_TYPE_OBJECT,\n  SELECTION_TYPE_ARRAY,\n];\nconst ARRAY_TYPE_PATTERN = [\n  ['number'],\n  ['number', 'string'],\n  ['number', 'undefined'],\n  ['number', 'string', 'undefined']\n];\nconst rootCall = Symbol('root');\nconst childCall = Symbol('child');\n\n/**\n * Detect selection schema structure.\n *\n * @param {*} selectionRanges The selected range or and array of selected ranges. This type of data is produced by\n * `hot.getSelected()`, `hot.getSelectedLast()`, `hot.getSelectedRange()`\n * and `hot.getSelectedRangeLast()` methods.\n * @param {symbol} _callSymbol The symbol object which indicates source of the helper invocation.\n * @returns {number} Returns a number that specifies the type of detected selection schema. If selection schema type\n * is unrecognized than it returns `0`.\n */\nexport function detectSelectionType(selectionRanges, _callSymbol = rootCall) {\n  if (_callSymbol !== rootCall && _callSymbol !== childCall) {\n    throw new Error('The second argument is used internally only and cannot be overwritten.');\n  }\n\n  const isArray = Array.isArray(selectionRanges);\n  const isRootCall = _callSymbol === rootCall;\n  let result = SELECTION_TYPE_UNRECOGNIZED;\n\n  if (isArray) {\n    const firstItem = selectionRanges[0];\n\n    if (selectionRanges.length === 0) {\n      result = SELECTION_TYPE_EMPTY;\n\n    } else if (isRootCall && firstItem instanceof CellRange) {\n      result = SELECTION_TYPE_OBJECT;\n\n    } else if (isRootCall && Array.isArray(firstItem)) {\n      result = detectSelectionType(firstItem, childCall);\n\n    } else if (selectionRanges.length >= 2 && selectionRanges.length <= 4) {\n      const isArrayType = !selectionRanges.some((value, index) => !ARRAY_TYPE_PATTERN[index].includes(typeof value));\n\n      if (isArrayType) {\n        result = SELECTION_TYPE_ARRAY;\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Factory function designed for normalization data schema from different data structures of the selection ranges.\n *\n * @param {number} type Selection type which will be processed.\n * @param {object} options The normalization options.\n * @param {function(number, number): CellCoords} options.createCellCoords The factory function that returns an instance of the `CellCoords` class.\n * @param {function(CellCoords, CellCoords, CellCoords): CellRange} options.createCellRange The factory function that returns an instance of the `CellRange` class.\n * @param {boolean} [options.keepDirection=false] If `true`, the coordinates which contain the direction of the\n *                                                selected cells won't be changed. Otherwise, the selection will be\n *                                                normalized to values starting from top-left to bottom-right.\n * @param {Function} [options.propToCol] Pass the converting function (usually `datamap.propToCol`) if the column\n *                                       defined as props should be normalized to the numeric values.\n * @returns {number[]} Returns normalized data about selected range as an array (`[rowStart, columnStart, rowEnd, columnEnd]`).\n */\nexport function normalizeSelectionFactory(type, {\n  createCellCoords,\n  createCellRange,\n  keepDirection = false,\n  propToCol,\n} = {}) {\n  if (!SELECTION_TYPES.includes(type)) {\n    throw new Error('Unsupported selection ranges schema type was provided.');\n  }\n\n  return function(selection) {\n    const isObjectType = type === SELECTION_TYPE_OBJECT;\n    let rowStart = isObjectType ? selection.from.row : selection[0];\n    let columnStart = isObjectType ? selection.from.col : selection[1];\n    let rowEnd = isObjectType ? selection.to.row : selection[2];\n    let columnEnd = isObjectType ? selection.to.col : selection[3];\n\n    if (typeof propToCol === 'function') {\n      if (typeof columnStart === 'string') {\n        columnStart = propToCol(columnStart);\n      }\n      if (typeof columnEnd === 'string') {\n        columnEnd = propToCol(columnEnd);\n      }\n    }\n\n    if (isUndefined(rowEnd)) {\n      rowEnd = rowStart;\n    }\n    if (isUndefined(columnEnd)) {\n      columnEnd = columnStart;\n    }\n\n    if (!keepDirection) {\n      const origRowStart = rowStart;\n      const origColumnStart = columnStart;\n      const origRowEnd = rowEnd;\n      const origColumnEnd = columnEnd;\n\n      rowStart = Math.min(origRowStart, origRowEnd);\n      columnStart = Math.min(origColumnStart, origColumnEnd);\n      rowEnd = Math.max(origRowStart, origRowEnd);\n      columnEnd = Math.max(origColumnStart, origColumnEnd);\n    }\n\n    const from = createCellCoords(rowStart, columnStart);\n    const to = createCellCoords(rowEnd, columnEnd);\n\n    return createCellRange(from, from, to);\n  };\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Core} hotInstance The Handsontable instance.\n * @returns {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\nexport function transformSelectionToColumnDistance(hotInstance) {\n  const selectionType = detectSelectionType(hotInstance.getSelected());\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n    createCellCoords: hotInstance._createCellCoords.bind(hotInstance),\n    createCellRange: hotInstance._createCellRange.bind(hotInstance),\n  });\n  const unorderedIndexes = new Set();\n\n  // Iterate through all ranges and collect all column indexes which are not saved yet.\n  arrayEach(hotInstance.getSelected(), (selection) => {\n    const { from, to } = selectionSchemaNormalizer(selection);\n    const columnNonHeaderStart = Math.max(from.col, 0);\n    const amount = to.col - columnNonHeaderStart + 1;\n\n    arrayEach(Array.from(new Array(amount), (_, i) => columnNonHeaderStart + i), (index) => {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  });\n\n  // Sort indexes in ascending order to easily detecting non-consecutive columns.\n  const orderedIndexes = Array.from(unorderedIndexes).sort((a, b) => a - b);\n  const normalizedColumnRanges = arrayReduce(orderedIndexes, (acc, visualColumnIndex, index, array) => {\n    if (index !== 0 && visualColumnIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n\n    } else {\n      acc.push([visualColumnIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n\n  return normalizedColumnRanges;\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Core} hotInstance The Handsontable instance.\n * @returns {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\nexport function transformSelectionToRowDistance(hotInstance) {\n  const selectionType = detectSelectionType(hotInstance.getSelected());\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n    createCellCoords: hotInstance._createCellCoords.bind(hotInstance),\n    createCellRange: hotInstance._createCellRange.bind(hotInstance),\n  });\n  const unorderedIndexes = new Set();\n\n  // Iterate through all ranges and collect all column indexes which are not saved yet.\n  arrayEach(hotInstance.getSelected(), (selection) => {\n    const { from, to } = selectionSchemaNormalizer(selection);\n    const rowNonHeaderStart = Math.max(from.row, 0);\n    const amount = to.row - rowNonHeaderStart + 1;\n\n    arrayEach(Array.from(new Array(amount), (_, i) => rowNonHeaderStart + i), (index) => {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  });\n\n  // Sort indexes in ascending order to easily detecting non-consecutive columns.\n  const orderedIndexes = Array.from(unorderedIndexes).sort((a, b) => a - b);\n  const normalizedRowRanges = arrayReduce(orderedIndexes, (acc, rowIndex, index, array) => {\n    if (index !== 0 && rowIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n\n    } else {\n      acc.push([rowIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n\n  return normalizedRowRanges;\n}\n","import DataMap from './dataMap';\nimport MetaManager from './metaManager';\nimport metaSchemaFactory from './metaManager/metaSchema';\nimport { replaceData } from './replaceData';\nimport { DynamicCellMetaMod } from './metaManager/mods/dynamicCellMeta';\nimport { ExtendMetaPropertiesMod } from './metaManager/mods/extendMetaProperties';\n\nexport {\n  DataMap,\n  MetaManager,\n  DynamicCellMetaMod,\n  ExtendMetaPropertiesMod,\n  metaSchemaFactory,\n  replaceData\n};\n","import { stringify } from '../3rdparty/SheetClip';\nimport {\n  countFirstRowKeys\n} from '../helpers/data';\nimport {\n  createObjectPropListener,\n  deepClone,\n  deepExtend,\n  deepObjectSize,\n  duckSchema,\n  hasOwnProperty,\n  isObject,\n  objectEach\n} from '../helpers/object';\nimport { extendArray, to2dArray } from '../helpers/array';\nimport { rangeEach } from '../helpers/number';\nimport { isDefined } from '../helpers/mixed';\n\n/*\nThis class contains open-source contributions covered by the MIT license.\n\n1) In the `createRow` method: Row creation using functional `dataSchema` value\n2) In the `set` method: Data setting using functional `prop` value\n3) in the `get` method: Data getting using functional `prop` value\n\nThe remaining part of this code comment contains the full license text of these contributions.\n\n======\n\nThe MIT License\n\nCopyright 2013 Nicholas Bollweg\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n*/\n\n/**\n * Utility class that gets and saves data from/to the data source using mapping of columns numbers to object property names.\n *\n * @todo Refactor arguments of methods getRange, getText to be numbers (not objects).\n * @todo Remove priv, GridSettings from object constructor.\n *\n * @class DataMap\n * @private\n */\nclass DataMap {\n  /**\n   * @type {number}\n   */\n  static get DESTINATION_RENDERER() {\n    return 1;\n  }\n\n  /**\n   * @type {number}\n   */\n  static get DESTINATION_CLIPBOARD_GENERATOR() {\n    return 2;\n  }\n\n  /**\n   * Instance of {@link Handsontable}.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Instance of {@link MetaManager}.\n   *\n   * @private\n   * @type {MetaManager}\n   */\n  metaManager;\n  /**\n   * Instance of {@link TableMeta}.\n   *\n   * @private\n   * @type {TableMeta}\n   */\n  tableMeta;\n  /**\n   * Reference to the original dataset.\n   *\n   * @type {*}\n   */\n  dataSource;\n  /**\n   * Generated schema based on the first row from the source data.\n   *\n   * @type {object}\n   */\n  duckSchema;\n  /**\n   * Cached array of properties to columns.\n   *\n   * @type {Array}\n   */\n  colToPropCache;\n  /**\n   * Cached map of properties to columns.\n   *\n   * @type {Map}\n   */\n  propToColCache;\n\n  /**\n   * @param {object} hotInstance Instance of Handsontable.\n   * @param {Array} data Array of arrays or array of objects containing data.\n   * @param {MetaManager} metaManager The meta manager instance.\n   */\n  constructor(hotInstance, data, metaManager) {\n    this.hot = hotInstance;\n    this.metaManager = metaManager;\n    this.tableMeta = metaManager.getTableMeta();\n    this.dataSource = data;\n    this.duckSchema = this.createDuckSchema();\n\n    this.createMap();\n  }\n\n  /**\n   * Generates cache for property to and from column addressation.\n   */\n  createMap() {\n    const schema = this.getSchema();\n\n    if (typeof schema === 'undefined') {\n      throw new Error('trying to create `columns` definition but you didn\\'t provide `schema` nor `data`');\n    }\n\n    const columns = this.tableMeta.columns;\n    let i;\n\n    this.colToPropCache = [];\n    this.propToColCache = new Map();\n\n    if (columns) {\n      let columnsLen = 0;\n      let filteredIndex = 0;\n      let columnsAsFunc = false;\n\n      if (typeof columns === 'function') {\n        const schemaLen = deepObjectSize(schema);\n\n        columnsLen = schemaLen > 0 ? schemaLen : this.countFirstRowKeys();\n        columnsAsFunc = true;\n\n      } else {\n        const maxCols = this.tableMeta.maxCols;\n\n        columnsLen = Math.min(maxCols, columns.length);\n      }\n\n      for (i = 0; i < columnsLen; i++) {\n        const column = columnsAsFunc ? columns(i) : columns[i];\n\n        if (isObject(column)) {\n          if (typeof column.data !== 'undefined') {\n            const index = columnsAsFunc ? filteredIndex : i;\n\n            this.colToPropCache[index] = column.data;\n            this.propToColCache.set(column.data, index);\n          }\n\n          filteredIndex += 1;\n        }\n      }\n\n    } else {\n      this.recursiveDuckColumns(schema);\n    }\n  }\n\n  /**\n   * Get the amount of physical columns in the first data row.\n   *\n   * @returns {number} Amount of physical columns in the first data row.\n   */\n  countFirstRowKeys() {\n    return countFirstRowKeys(this.dataSource);\n  }\n\n  /**\n   * Generates columns' translation cache.\n   *\n   * @param {object} schema An object to generate schema from.\n   * @param {number} lastCol The column index.\n   * @param {number} parent The property cache for recursive calls.\n   * @returns {number}\n   */\n  recursiveDuckColumns(schema, lastCol, parent) {\n    let lastColumn = lastCol;\n    let propertyParent = parent;\n    let prop;\n\n    if (typeof lastColumn === 'undefined') {\n      lastColumn = 0;\n      propertyParent = '';\n    }\n    if (typeof schema === 'object' && !Array.isArray(schema)) {\n      objectEach(schema, (value, key) => {\n        if (value === null) {\n          prop = propertyParent + key;\n          this.colToPropCache.push(prop);\n          this.propToColCache.set(prop, lastColumn);\n\n          lastColumn += 1;\n        } else {\n          lastColumn = this.recursiveDuckColumns(value, lastColumn, `${key}.`);\n        }\n      });\n    }\n\n    return lastColumn;\n  }\n\n  /**\n   * Returns property name that corresponds with the given column index.\n   *\n   * @param {string|number} column Visual column index or another passed argument.\n   * @returns {string|number} Column property, physical column index or passed argument.\n   */\n  colToProp(column) {\n    // TODO: Should it work? Please, look at the test:\n    // \"it should return the provided property name, when the user passes a property name as a column number\".\n    if (Number.isInteger(column) === false) {\n      return column;\n    }\n\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    // Out of range, not visible column index.\n    if (physicalColumn === null) {\n      return column;\n    }\n\n    // Cached property.\n    if (this.colToPropCache && isDefined(this.colToPropCache[physicalColumn])) {\n      return this.colToPropCache[physicalColumn];\n    }\n\n    return physicalColumn;\n  }\n\n  /**\n   * Translates property into visual column index.\n   *\n   * @param {string|number} prop Column property which may be also a physical column index.\n   * @returns {string|number} Visual column index or passed argument.\n   */\n  propToCol(prop) {\n    const cachedPhysicalIndex = this.propToColCache.get(prop);\n\n    if (isDefined(cachedPhysicalIndex)) {\n      return this.hot.toVisualColumn(cachedPhysicalIndex);\n    }\n\n    // Property may be a physical column index.\n    const visualColumn = this.hot.toVisualColumn(prop);\n\n    if (visualColumn === null) {\n      return prop;\n    }\n\n    return visualColumn;\n  }\n\n  /**\n   * Returns data's schema.\n   *\n   * @returns {object}\n   */\n  getSchema() {\n    const schema = this.tableMeta.dataSchema;\n\n    if (schema) {\n      if (typeof schema === 'function') {\n        return schema();\n      }\n\n      return schema;\n    }\n\n    return this.duckSchema;\n  }\n\n  /**\n   * Creates the duck schema based on the current dataset.\n   *\n   * @returns {Array|object}\n   */\n  createDuckSchema() {\n    return this.dataSource && this.dataSource[0] ? duckSchema(this.dataSource[0]) : {};\n  }\n\n  /**\n   * Refresh the data schema.\n   */\n  refreshDuckSchema() {\n    this.duckSchema = this.createDuckSchema();\n  }\n\n  /**\n   * Creates row at the bottom of the data array.\n   *\n   * @param {number} [index] Physical index of the row before which the new row will be inserted.\n   * @param {number} [amount=1] An amount of rows to add.\n   * @param {object} [options] Additional options for created rows.\n   * @param {string} [options.source] Source of method call.\n   * @param {'above'|'below'} [options.mode] Sets where the row is inserted: above or below the passed index.\n   * @fires Hooks#afterCreateRow\n   * @returns {number} Returns number of created rows.\n   */\n  createRow(index, amount = 1, { source, mode = 'above' } = {}) {\n    const sourceRowsCount = this.hot.countSourceRows();\n    let physicalRowIndex = sourceRowsCount;\n    let numberOfCreatedRows = 0;\n    let rowIndex = index;\n\n    if (typeof rowIndex !== 'number' || rowIndex >= sourceRowsCount) {\n      rowIndex = sourceRowsCount;\n    }\n\n    if (rowIndex < this.hot.countRows()) {\n      physicalRowIndex = this.hot.toPhysicalRow(rowIndex);\n    }\n\n    const continueProcess = this.hot.runHooks('beforeCreateRow', rowIndex, amount, source);\n\n    if (continueProcess === false || physicalRowIndex === null) {\n      return {\n        delta: 0,\n      };\n    }\n\n    const maxRows = this.tableMeta.maxRows;\n    const columnCount = this.getSchema().length;\n    const rowsToAdd = [];\n\n    while (numberOfCreatedRows < amount && sourceRowsCount + numberOfCreatedRows < maxRows) {\n      let row = null;\n\n      if (this.hot.dataType === 'array') {\n        if (this.tableMeta.dataSchema) {\n          // Clone template array\n          row = deepClone(this.getSchema());\n\n        } else {\n          row = [];\n          /* eslint-disable no-loop-func */\n          rangeEach(columnCount - 1, () => row.push(null));\n        }\n\n      } else if (this.hot.dataType === 'function') {\n        row = this.tableMeta.dataSchema(rowIndex + numberOfCreatedRows);\n\n      } else {\n        row = {};\n        deepExtend(row, this.getSchema());\n      }\n\n      rowsToAdd.push(row);\n\n      numberOfCreatedRows += 1;\n    }\n\n    this.hot.rowIndexMapper.insertIndexes(rowIndex, numberOfCreatedRows);\n\n    if (mode === 'below') {\n      physicalRowIndex = Math.min(physicalRowIndex + 1, sourceRowsCount);\n    }\n\n    this.spliceData(physicalRowIndex, 0, rowsToAdd);\n\n    const newVisualRowIndex = this.hot.toVisualRow(physicalRowIndex);\n\n    // In case the created rows are the only ones in the table, the column index mappers need to be rebuilt based on\n    // the number of columns created in the row or the schema.\n    if (this.hot.countSourceRows() === rowsToAdd.length) {\n      this.hot.columnIndexMapper.initToLength(this.hot.getInitialColumnCount());\n    }\n\n    if (numberOfCreatedRows > 0) {\n      if ((index === undefined || index === null)) {\n        // Creates the meta rows at the end of the rows collection without shifting the cells\n        // that were defined out of the range of the dataset.\n        this.metaManager.createRow(null, numberOfCreatedRows);\n\n      } else if (source !== 'auto') {\n        this.metaManager.createRow(physicalRowIndex, amount);\n      }\n    }\n\n    this.hot.runHooks('afterCreateRow', newVisualRowIndex, numberOfCreatedRows, source);\n    this.hot.forceFullRender = true; // used when data was changed\n\n    return {\n      delta: numberOfCreatedRows,\n      startPhysicalIndex: physicalRowIndex,\n    };\n  }\n\n  /**\n   * Creates column at the right of the data array.\n   *\n   * @param {number} [index] Visual index of the column before which the new column will be inserted.\n   * @param {number} [amount=1] An amount of columns to add.\n   * @param {object} [options] Additional options for created columns.\n   * @param {string} [options.source] Source of method call.\n   * @param {'start'|'end'} [options.mode] Sets where the column is inserted: at the start (left in [LTR](@/api/options.md#layoutdirection), right in [RTL](@/api/options.md#layoutdirection)) or at the end (right in LTR, left in LTR)\n   * the passed index.\n   * @fires Hooks#afterCreateCol\n   * @returns {number} Returns number of created columns.\n   */\n  createCol(index, amount = 1, { source, mode = 'start' } = {}) {\n    if (!this.hot.isColumnModificationAllowed()) {\n      throw new Error('Cannot create new column. When data source in an object, ' +\n        'you can only have as much columns as defined in first data row, data schema or in the \\'columns\\' setting.' +\n        'If you want to be able to add new columns, you have to use array datasource.');\n    }\n\n    const dataSource = this.dataSource;\n    const maxCols = this.tableMeta.maxCols;\n    const countSourceCols = this.hot.countSourceCols();\n    let columnIndex = index;\n\n    if (typeof columnIndex !== 'number' || columnIndex >= countSourceCols) {\n      columnIndex = countSourceCols;\n    }\n\n    const continueProcess = this.hot.runHooks('beforeCreateCol', columnIndex, amount, source);\n\n    if (continueProcess === false) {\n      return {\n        delta: 0,\n      };\n    }\n\n    let physicalColumnIndex = countSourceCols;\n\n    if (columnIndex < this.hot.countCols()) {\n      physicalColumnIndex = this.hot.toPhysicalColumn(columnIndex);\n    }\n\n    const numberOfSourceRows = this.hot.countSourceRows();\n    let nrOfColumns = this.hot.countCols();\n    let numberOfCreatedCols = 0;\n    let currentIndex = physicalColumnIndex;\n\n    if (mode === 'end') {\n      currentIndex = Math.min(currentIndex + 1, countSourceCols);\n    }\n\n    const startPhysicalIndex = currentIndex;\n\n    while (numberOfCreatedCols < amount && nrOfColumns < maxCols) {\n      if (typeof columnIndex !== 'number' || columnIndex >= nrOfColumns) {\n        if (numberOfSourceRows > 0) {\n          for (let row = 0; row < numberOfSourceRows; row += 1) {\n            if (typeof dataSource[row] === 'undefined') {\n              dataSource[row] = [];\n            }\n\n            dataSource[row].push(null);\n          }\n        } else {\n          dataSource.push([null]);\n        }\n\n      } else {\n        for (let row = 0; row < numberOfSourceRows; row++) {\n          dataSource[row].splice(currentIndex, 0, null);\n        }\n      }\n\n      numberOfCreatedCols += 1;\n      currentIndex += 1;\n      nrOfColumns += 1;\n    }\n\n    this.hot.columnIndexMapper.insertIndexes(columnIndex, numberOfCreatedCols);\n\n    if (numberOfCreatedCols > 0) {\n      if ((index === undefined || index === null)) {\n        // Creates the meta columns at the end of the columns collection without shifting the cells\n        // that were defined out of the range of the dataset.\n        this.metaManager.createColumn(null, numberOfCreatedCols);\n\n      } else if (source !== 'auto') {\n        this.metaManager.createColumn(startPhysicalIndex, amount);\n      }\n    }\n\n    const newVisualColumnIndex = this.hot.toVisualColumn(startPhysicalIndex);\n\n    this.hot.runHooks('afterCreateCol', newVisualColumnIndex, numberOfCreatedCols, source);\n    this.hot.forceFullRender = true; // used when data was changed\n\n    this.refreshDuckSchema();\n\n    return {\n      delta: numberOfCreatedCols,\n      startPhysicalIndex,\n    };\n  }\n\n  /**\n   * Removes row from the data array.\n   *\n   * @fires Hooks#beforeRemoveRow\n   * @fires Hooks#afterRemoveRow\n   * @param {number} [index] Visual index of the row to be removed. If not provided, the last row will be removed.\n   * @param {number} [amount=1] Amount of the rows to be removed. If not provided, one row will be removed.\n   * @param {string} [source] Source of method call.\n   * @returns {boolean} Returns `false` when action was cancelled, otherwise `true`.\n   */\n  removeRow(index, amount = 1, source) {\n    let rowIndex = Number.isInteger(index) ? index : -amount; // -amount = taking indexes from the end.\n    const removedPhysicalIndexes = this.visualRowsToPhysical(rowIndex, amount);\n    const sourceRowsLength = this.hot.countSourceRows();\n\n    rowIndex = (sourceRowsLength + rowIndex) % sourceRowsLength;\n\n    // It handle also callback from the `NestedRows` plugin. Removing parent node has effect in removing children nodes.\n    const actionWasNotCancelled = this.hot.runHooks(\n      'beforeRemoveRow', rowIndex, removedPhysicalIndexes.length, removedPhysicalIndexes, source\n    );\n\n    if (actionWasNotCancelled === false) {\n      return false;\n    }\n\n    // List of removed indexes might be changed in the `beforeRemoveRow` hook. There may be new values.\n    const numberOfRemovedIndexes = removedPhysicalIndexes.length;\n\n    this.filterData(rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes);\n\n    // TODO: Function `removeRow` should validate fully, probably above.\n    if (rowIndex < this.hot.countRows()) {\n      this.hot.rowIndexMapper.removeIndexes(removedPhysicalIndexes);\n\n      const customDefinedColumns = isDefined(this.tableMeta.columns) || isDefined(this.tableMeta.dataSchema);\n\n      // All rows have been removed. There shouldn't be any columns.\n      if (this.hot.rowIndexMapper.getNotTrimmedIndexesLength() === 0 && customDefinedColumns === false) {\n        this.hot.columnIndexMapper.setIndexesSequence([]);\n      }\n    }\n\n    const descendingPhysicalRows = removedPhysicalIndexes.slice(0).sort((a, b) => b - a);\n\n    descendingPhysicalRows.forEach((rowPhysicalIndex) => {\n      this.metaManager.removeRow(rowPhysicalIndex, 1);\n    });\n\n    this.hot.runHooks('afterRemoveRow', rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes, source);\n    this.hot.forceFullRender = true; // used when data was changed\n\n    return true;\n  }\n\n  /**\n   * Removes column from the data array.\n   *\n   * @fires Hooks#beforeRemoveCol\n   * @fires Hooks#afterRemoveCol\n   * @param {number} [index] Visual index of the column to be removed. If not provided, the last column will be removed.\n   * @param {number} [amount=1] Amount of the columns to be removed. If not provided, one column will be removed.\n   * @param {string} [source] Source of method call.\n   * @returns {boolean} Returns `false` when action was cancelled, otherwise `true`.\n   */\n  removeCol(index, amount = 1, source) {\n    if (this.hot.dataType === 'object' || this.tableMeta.columns) {\n      throw new Error('cannot remove column with object data source or columns option specified');\n    }\n    let columnIndex = typeof index !== 'number' ? -amount : index;\n\n    columnIndex = (this.hot.countCols() + columnIndex) % this.hot.countCols();\n\n    const removedPhysicalIndexes = this.visualColumnsToPhysical(columnIndex, amount);\n    const descendingPhysicalColumns = removedPhysicalIndexes.slice(0).sort((a, b) => b - a);\n    const actionWasNotCancelled = this.hot\n      .runHooks('beforeRemoveCol', columnIndex, amount, removedPhysicalIndexes, source);\n\n    if (actionWasNotCancelled === false) {\n      return false;\n    }\n\n    let isTableUniform = true;\n    const removedColumnsCount = descendingPhysicalColumns.length;\n    const data = this.dataSource;\n\n    for (let c = 0; c < removedColumnsCount; c++) {\n      if (isTableUniform && removedPhysicalIndexes[0] !== removedPhysicalIndexes[c] - c) {\n        isTableUniform = false;\n      }\n    }\n\n    if (isTableUniform) {\n      for (let r = 0, rlen = this.hot.countSourceRows(); r < rlen; r++) {\n        data[r].splice(removedPhysicalIndexes[0], amount);\n\n        if (r === 0) {\n          this.metaManager.removeColumn(removedPhysicalIndexes[0], amount);\n        }\n      }\n\n    } else {\n      for (let r = 0, rlen = this.hot.countSourceRows(); r < rlen; r++) {\n        for (let c = 0; c < removedColumnsCount; c++) {\n          data[r].splice(descendingPhysicalColumns[c], 1);\n\n          if (r === 0) {\n            this.metaManager.removeColumn(descendingPhysicalColumns[c], 1);\n          }\n        }\n      }\n    }\n\n    // TODO: Function `removeCol` should validate fully, probably above.\n    if (columnIndex < this.hot.countCols()) {\n      this.hot.columnIndexMapper.removeIndexes(removedPhysicalIndexes);\n\n      // All columns have been removed. There shouldn't be any rows.\n      if (this.hot.columnIndexMapper.getNotTrimmedIndexesLength() === 0) {\n        this.hot.rowIndexMapper.setIndexesSequence([]);\n      }\n    }\n\n    this.hot.runHooks('afterRemoveCol', columnIndex, amount, removedPhysicalIndexes, source);\n    this.hot.forceFullRender = true; // used when data was changed\n    this.refreshDuckSchema();\n\n    return true;\n  }\n\n  /**\n   * Add/Removes data from the column.\n   *\n   * @param {number} col Physical index of column in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {Array} [elements] The new columns to add.\n   * @returns {Array} Returns removed portion of columns.\n   */\n  spliceCol(col, index, amount, ...elements) {\n    const colData = this.hot.getDataAtCol(col);\n    const removed = colData.slice(index, index + amount);\n    const after = colData.slice(index + amount);\n\n    extendArray(elements, after);\n    let i = 0;\n\n    while (i < amount) {\n      elements.push(null); // add null in place of removed elements\n      i += 1;\n    }\n    to2dArray(elements);\n    this.hot.populateFromArray(index, col, elements, null, null, 'spliceCol');\n\n    return removed;\n  }\n\n  /**\n   * Add/Removes data from the row.\n   *\n   * @param {number} row Physical index of row in which do you want to do splice.\n   * @param {number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {Array} [elements] The new rows to add.\n   * @returns {Array} Returns removed portion of rows.\n   */\n  spliceRow(row, index, amount, ...elements) {\n    const rowData = this.hot.getSourceDataAtRow(row);\n    const removed = rowData.slice(index, index + amount);\n    const after = rowData.slice(index + amount);\n\n    extendArray(elements, after);\n    let i = 0;\n\n    while (i < amount) {\n      elements.push(null); // add null in place of removed elements\n      i += 1;\n    }\n    this.hot.populateFromArray(row, index, [elements], null, null, 'spliceRow');\n\n    return removed;\n  }\n\n  /**\n   * Add/remove row(s) to/from the data source.\n   *\n   * @param {number} index Physical index of the element to add/remove.\n   * @param {number} deleteCount Number of rows to remove.\n   * @param {Array<object>} elements Row elements to be added.\n   */\n  spliceData(index, deleteCount, elements) {\n    const continueSplicing = this.hot.runHooks('beforeDataSplice', index, deleteCount, elements);\n\n    if (continueSplicing !== false) {\n      const newData = [...this.dataSource.slice(0, index), ...elements, ...this.dataSource.slice(index)];\n\n      // We try not to change the reference.\n      this.dataSource.length = 0;\n\n      // Pushing to array instead of using `splice`, because Babel changes the code to one that uses the `apply` method.\n      // The used method was cause of the problem described within #7840.\n      newData.forEach(row => this.dataSource.push(row));\n    }\n  }\n\n  /**\n   * Filter unwanted data elements from the data source.\n   *\n   * @param {number} index Visual index of the element to remove.\n   * @param {number} amount Number of rows to add/remove.\n   * @param {number} physicalRows Physical row indexes.\n   */\n  filterData(index, amount, physicalRows) {\n    // Custom data filtering (run as a consequence of calling the below hook) provide an array containing new data.\n    let data = this.hot.runHooks('filterData', index, amount, physicalRows);\n\n    // Hooks by default returns first argument (when there is no callback changing execution result).\n    if (Array.isArray(data) === false) {\n      data = this.dataSource.filter((row, rowIndex) => physicalRows.indexOf(rowIndex) === -1);\n    }\n\n    this.dataSource.length = 0;\n    Array.prototype.push.apply(this.dataSource, data);\n  }\n\n  /**\n   * Returns single value from the data array.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} prop The column property.\n   * @returns {*}\n   */\n  get(row, prop) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n\n    let dataRow = this.dataSource[physicalRow];\n    // TODO: To remove, use 'modifyData' hook instead (see below)\n    const modifiedRowData = this.hot.runHooks('modifyRowData', physicalRow);\n\n    dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n    //\n\n    const { dataDotNotation } = this.hot.getSettings();\n    let value = null;\n\n    // try to get value under property `prop` (includes dot)\n    if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n      value = dataRow[prop];\n\n    } else if (dataDotNotation && typeof prop === 'string' && prop.indexOf('.') > -1) {\n      let out = dataRow;\n\n      if (!out) {\n        return null;\n      }\n\n      const sliced = prop.split('.');\n\n      for (let i = 0, ilen = sliced.length; i < ilen; i++) {\n        out = out[sliced[i]];\n\n        if (typeof out === 'undefined') {\n          return null;\n        }\n      }\n\n      value = out;\n\n    } else if (typeof prop === 'function') {\n      value = prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0]);\n    }\n\n    if (this.hot.hasHook('modifyData')) {\n      const valueHolder = createObjectPropListener(value);\n\n      this.hot.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'get');\n\n      if (valueHolder.isTouched()) {\n        value = valueHolder.value;\n      }\n    }\n\n    return value;\n  }\n\n  /**\n   * Returns single value from the data array (intended for clipboard copy to an external application).\n   *\n   * @param {number} row Physical row index.\n   * @param {number} prop The column property.\n   * @returns {string}\n   */\n  getCopyable(row, prop) {\n    if (this.hot.getCellMeta(row, this.propToCol(prop)).copyable) {\n      return this.get(row, prop);\n    }\n\n    return '';\n  }\n\n  /**\n   * Saves single value to the data array.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} prop The column property.\n   * @param {string} value The value to set.\n   */\n  set(row, prop, value) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    let newValue = value;\n    let dataRow = this.dataSource[physicalRow];\n    // TODO: To remove, use 'modifyData' hook instead (see below)\n    const modifiedRowData = this.hot.runHooks('modifyRowData', physicalRow);\n\n    dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n    //\n\n    if (this.hot.hasHook('modifyData')) {\n      const valueHolder = createObjectPropListener(newValue);\n\n      this.hot.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'set');\n\n      if (valueHolder.isTouched()) {\n        newValue = valueHolder.value;\n      }\n    }\n\n    const { dataDotNotation } = this.hot.getSettings();\n\n    // try to set value under property `prop` (includes dot)\n    if (dataRow && dataRow.hasOwnProperty && hasOwnProperty(dataRow, prop)) {\n      dataRow[prop] = newValue;\n\n    } else if (dataDotNotation && typeof prop === 'string' && prop.indexOf('.') > -1) {\n      let out = dataRow;\n      let i = 0;\n      let ilen;\n\n      const sliced = prop.split('.');\n\n      for (i = 0, ilen = sliced.length - 1; i < ilen; i++) {\n        if (typeof out[sliced[i]] === 'undefined') {\n          out[sliced[i]] = {};\n        }\n        out = out[sliced[i]];\n      }\n\n      out[sliced[i]] = newValue;\n\n    } else if (typeof prop === 'function') {\n      prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0], newValue);\n\n    } else {\n      dataRow[prop] = newValue;\n    }\n  }\n\n  /**\n   * This ridiculous piece of code maps rows Id that are present in table data to those displayed for user.\n   * The trick is, the physical row id (stored in settings.data) is not necessary the same\n   * as the visual (displayed) row id (e.g. When sorting is applied).\n   *\n   * @param {number} index Visual row index.\n   * @param {number} amount An amount of rows to translate.\n   * @returns {number}\n   */\n  visualRowsToPhysical(index, amount) {\n    const totalRows = this.hot.countSourceRows();\n    const logicRows = [];\n    let physicRow = (totalRows + index) % totalRows;\n    let rowsToRemove = amount;\n    let row;\n\n    while (physicRow < totalRows && rowsToRemove) {\n      row = this.hot.toPhysicalRow(physicRow);\n      logicRows.push(row);\n\n      rowsToRemove -= 1;\n      physicRow += 1;\n    }\n\n    return logicRows;\n  }\n\n  /**\n   *\n   * @param {number} index Visual column index.\n   * @param {number} amount An amount of rows to translate.\n   * @returns {Array}\n   */\n  visualColumnsToPhysical(index, amount) {\n    const totalCols = this.hot.countCols();\n    const visualCols = [];\n    let physicalCol = (totalCols + index) % totalCols;\n    let colsToRemove = amount;\n\n    while (physicalCol < totalCols && colsToRemove) {\n      const col = this.hot.toPhysicalColumn(physicalCol);\n\n      visualCols.push(col);\n\n      colsToRemove -= 1;\n      physicalCol += 1;\n    }\n\n    return visualCols;\n  }\n\n  /**\n   * Clears the data array.\n   */\n  clear() {\n    for (let r = 0; r < this.hot.countSourceRows(); r++) {\n      for (let c = 0; c < this.hot.countCols(); c++) {\n        this.set(r, this.colToProp(c), '');\n      }\n    }\n  }\n\n  /**\n   * Get data length.\n   *\n   * @returns {number}\n   */\n  getLength() {\n    const maxRowsFromSettings = this.tableMeta.maxRows;\n    let maxRows;\n\n    if (maxRowsFromSettings < 0 || maxRowsFromSettings === 0) {\n      maxRows = 0;\n\n    } else {\n      maxRows = maxRowsFromSettings || Infinity;\n    }\n\n    const length = this.hot.rowIndexMapper.getNotTrimmedIndexesLength();\n\n    return Math.min(length, maxRows);\n  }\n\n  /**\n   * Returns the data array.\n   *\n   * @returns {Array}\n   */\n  getAll() {\n    const start = {\n      row: 0,\n      col: 0,\n    };\n\n    const end = {\n      row: Math.max(this.hot.countRows() - 1, 0),\n      col: Math.max(this.hot.countCols() - 1, 0),\n    };\n\n    if (start.row - end.row === 0 && !this.hot.countSourceRows()) {\n      return [];\n    }\n\n    return this.getRange(start, end, DataMap.DESTINATION_RENDERER);\n  }\n\n  /**\n   * Count the number of columns cached in the `colToProp` cache.\n   *\n   * @returns {number} Amount of cached columns.\n   */\n  countCachedColumns() {\n    return this.colToPropCache.length;\n  }\n\n  /**\n   * Returns data range as array.\n   *\n   * @param {object} [start] Start selection position. Visual indexes.\n   * @param {object} [end] End selection position. Visual indexes.\n   * @param {number} destination Destination of datamap.get.\n   * @returns {Array}\n   */\n  getRange(start, end, destination) {\n    const output = [];\n    let r;\n    let c;\n    let row;\n\n    const maxRows = this.tableMeta.maxRows;\n    const maxCols = this.tableMeta.maxCols;\n\n    if (maxRows === 0 || maxCols === 0) {\n      return [];\n    }\n\n    const getFn = destination === DataMap.DESTINATION_CLIPBOARD_GENERATOR ? this.getCopyable : this.get;\n\n    const rlen = Math.min(Math.max(maxRows - 1, 0), Math.max(start.row, end.row));\n    const clen = Math.min(Math.max(maxCols - 1, 0), Math.max(start.col, end.col));\n\n    for (r = Math.min(start.row, end.row); r <= rlen; r++) {\n      row = [];\n      // We just store indexes for rows without headers.\n      const physicalRow = r >= 0 ? this.hot.toPhysicalRow(r) : r;\n\n      for (c = Math.min(start.col, end.col); c <= clen; c++) {\n\n        if (physicalRow === null) {\n          break;\n        }\n        row.push(getFn.call(this, r, this.colToProp(c)));\n      }\n      if (physicalRow !== null) {\n        output.push(row);\n      }\n    }\n\n    return output;\n  }\n\n  /**\n   * Return data as text (tab separated columns).\n   *\n   * @param {object} [start] Start selection position. Visual indexes.\n   * @param {object} [end] End selection position. Visual indexes.\n   * @returns {string}\n   */\n  getText(start, end) {\n    return stringify(this.getRange(start, end, DataMap.DESTINATION_RENDERER));\n  }\n\n  /**\n   * Return data as copyable text (tab separated columns intended for clipboard copy to an external application).\n   *\n   * @param {object} [start] Start selection position. Visual indexes.\n   * @param {object} [end] End selection position. Visual indexes.\n   * @returns {string}\n   */\n  getCopyableText(start, end) {\n    return stringify(this.getRange(start, end, DataMap.DESTINATION_CLIPBOARD_GENERATOR));\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.hot = null;\n    this.metaManager = null;\n    this.dataSource = null;\n    this.duckSchema = null;\n    this.colToPropCache.length = 0;\n\n    this.propToColCache.clear();\n    this.propToColCache = undefined;\n  }\n}\n\nexport default DataMap;\n","export {\n  parse,\n  stringify,\n} from './SheetClip';\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * SheetClip - Spreadsheet Clipboard Parser.\n * version 0.2\n *\n * This tiny library transforms JavaScript arrays to strings that are pasteable by LibreOffice, OpenOffice,\n * Google Docs and Microsoft Excel.\n *\n * Copyright 2012, Marcin Warpechowski\n * Licensed under the MIT license.\n * http://github.com/warpech/sheetclip/\n */\n\nconst regUniversalNewLine = /^(\\r\\n|\\n\\r|\\r|\\n)/;\nconst regNextCellNoQuotes = /^[^\\t\\r\\n]+/;\nconst regNextEmptyCell = /^\\t/;\n\n/**\n * Decode spreadsheet string into array.\n *\n * @param {string} str The string to parse.\n * @returns {Array}\n */\nexport function parse(str) {\n  const arr = [['']];\n\n  if (str.length === 0) {\n    return arr;\n  }\n\n  let column = 0;\n  let row = 0;\n  let lastLength;\n\n  while (str.length > 0) {\n    if (lastLength === str.length) {\n      // In the case If in last cycle we didn't match anything, we have to leave the infinite loop\n      break;\n    }\n\n    lastLength = str.length;\n\n    if (str.match(regNextEmptyCell)) {\n      str = str.replace(regNextEmptyCell, '');\n\n      column += 1;\n      arr[row][column] = '';\n\n    } else if (str.match(regUniversalNewLine)) {\n      str = str.replace(regUniversalNewLine, '');\n      column = 0;\n      row += 1;\n\n      arr[row] = [''];\n\n    } else {\n      let nextCell = '';\n\n      if (str.startsWith('\"')) {\n        let quoteNo = 0;\n        let isStillCell = true;\n\n        while (isStillCell) {\n          const nextChar = str.slice(0, 1);\n\n          if (nextChar === '\"') {\n            quoteNo += 1;\n          }\n\n          nextCell += nextChar;\n\n          str = str.slice(1);\n\n          if (str.length === 0 || (str.match(/^[\\t\\r\\n]/) && quoteNo % 2 === 0)) {\n            isStillCell = false;\n          }\n        }\n\n        nextCell = nextCell.replace(/^\"/, '').replace(/\"$/, '')\n          .replace(/[\"]*/g, match => (new Array(Math.floor(match.length / 2))).fill('\"').join(''));\n\n      } else {\n        const matchedText = str.match(regNextCellNoQuotes);\n\n        nextCell = matchedText ? matchedText[0] : '';\n        str = str.slice(nextCell.length);\n      }\n\n      arr[row][column] = nextCell;\n    }\n\n  }\n\n  return arr;\n}\n\n/**\n * Encode array into valid spreadsheet string.\n *\n * @param {Array} arr An array of arrays to stringify.\n * @returns {string}\n */\nexport function stringify(arr) {\n  let r;\n  let rLen;\n  let c;\n  let cLen;\n  let str = '';\n  let val;\n\n  for (r = 0, rLen = arr.length; r < rLen; r += 1) {\n    cLen = arr[r].length;\n\n    for (c = 0; c < cLen; c += 1) {\n      if (c > 0) {\n        str += '\\t';\n      }\n      val = arr[r][c];\n\n      if (typeof val === 'string') {\n        if (val.indexOf('\\n') > -1) {\n          str += `\"${val.replace(/\"/g, '\"\"')}\"`;\n        } else {\n          str += val;\n        }\n\n      } else if (val === null || val === undefined) { // undefined resolves to undefined\n        str += '';\n\n      } else {\n        str += val;\n      }\n    }\n\n    if (r !== rLen - 1) {\n      str += '\\n';\n    }\n  }\n\n  return str;\n}\n","import GlobalMeta from './metaLayers/globalMeta';\nimport TableMeta from './metaLayers/tableMeta';\nimport ColumnMeta from './metaLayers/columnMeta';\nimport CellMeta from './metaLayers/cellMeta';\nimport localHooks from '../../mixins/localHooks';\nimport { mixin } from '../../helpers/object';\n\n/**\n * With the Meta Manager class, it can be possible to manage with meta objects for different layers in\n * one place. All coordinates used to fetch, updating, removing, or creating rows or columns have to\n * be passed as physical values.\n *\n * The diagram of the meta layers:\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n *\n * A more detailed description of the specific layers can be found in the \"metaLayers/\" modules description.\n */\nexport default class MetaManager {\n  constructor(hot, customSettings = {}, metaMods = []) {\n    /**\n     * @type {Handsontable}\n     */\n    this.hot = hot;\n    /**\n     * @type {GlobalMeta}\n     */\n    this.globalMeta = new GlobalMeta(hot);\n    /**\n     * @type {TableMeta}\n     */\n    this.tableMeta = new TableMeta(this.globalMeta);\n    /**\n     * @type {ColumnMeta}\n     */\n    this.columnMeta = new ColumnMeta(this.globalMeta);\n    /**\n     * @type {CellMeta}\n     */\n    this.cellMeta = new CellMeta(this.columnMeta);\n\n    metaMods.forEach(ModifierClass => new ModifierClass(this));\n\n    this.globalMeta.updateMeta(customSettings);\n  }\n\n  /**\n   * Gets the global meta object that is a root of all default settings, which are recognizable by Handsontable.\n   * Other layers inherites all properties from this. Adding, removing, or changing property in that\n   * object has a direct reflection to all layers.\n   *\n   * @returns {object}\n   */\n  getGlobalMeta() {\n    return this.globalMeta.getMeta();\n  }\n\n  /**\n   * Updates global settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateGlobalMeta(settings) {\n    this.globalMeta.updateMeta(settings);\n  }\n\n  /**\n   * Gets settings object that was passed in the Handsontable constructor. That layer contains all\n   * default settings inherited from the GlobalMeta layer merged with settings passed by the developer.\n   * Adding, removing, or changing property in that object has no direct reflection on any other layers.\n   *\n   * @returns {TableMeta}\n   */\n  getTableMeta() {\n    return this.tableMeta.getMeta();\n  }\n\n  /**\n   * Updates table settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateTableMeta(settings) {\n    this.tableMeta.updateMeta(settings);\n  }\n\n  /**\n   * Gets column meta object that is a root of all settings defined in the column property of the Handsontable\n   * settings. Each column in the Handsontable is associated with a unique meta object which identified by\n   * the physical column index. Adding, removing, or changing property in that object has a direct reflection\n   * only for the CellMeta layer. The reflection will be visible only if the property doesn't exist in the lower\n   * layers (prototype lookup).\n   *\n   * @param {number} physicalColumn The physical column index.\n   * @returns {object}\n   */\n  getColumnMeta(physicalColumn) {\n    return this.columnMeta.getMeta(physicalColumn);\n  }\n\n  /**\n   * Updates column meta object by merging settings with the current state.\n   *\n   * @param {number} physicalColumn The physical column index which points what column meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateColumnMeta(physicalColumn, settings) {\n    this.columnMeta.updateMeta(physicalColumn, settings);\n  }\n\n  /**\n   * Gets the cell meta object that is a root of all settings defined for the specific cell rendered by\n   * the Handsontable. Each cell meta inherits settings from higher layers. When a property doesn't\n   * exist in that layer, it is looked up through a prototype to the highest layer. Starting\n   * from CellMeta -> ColumnMeta and ending to GlobalMeta, which stores default settings. Adding,\n   * removing, or changing property in that object has no direct reflection on any other layers.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {object} options Additional options that are used to extend the cell meta object.\n   * @param {number} options.visualRow The visual row index of the currently requested cell meta object.\n   * @param {number} options.visualColumn The visual column index of the currently requested cell meta object.\n   * @returns {object}\n   */\n  getCellMeta(physicalRow, physicalColumn, { visualRow, visualColumn }) {\n    const cellMeta = this.cellMeta.getMeta(physicalRow, physicalColumn);\n\n    cellMeta.visualRow = visualRow;\n    cellMeta.visualCol = visualColumn;\n    cellMeta.row = physicalRow;\n    cellMeta.col = physicalColumn;\n\n    this.runLocalHooks('afterGetCellMeta', cellMeta);\n\n    return cellMeta;\n  }\n\n  /**\n   * Gets a value (defined by the `key` property) from the cell meta object.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key Defines the value that will be returned from the cell meta object.\n   * @returns {*}\n   */\n  getCellMetaKeyValue(physicalRow, physicalColumn, key) {\n    if (typeof key !== 'string') {\n      throw new Error('The passed cell meta object key is not a string');\n    }\n\n    return this.cellMeta.getMeta(physicalRow, physicalColumn, key);\n  }\n\n  /**\n   * Sets settings object for cell meta object defined by \"key\" property.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to set.\n   * @param {*} value Value to save.\n   */\n  setCellMeta(physicalRow, physicalColumn, key, value) {\n    this.cellMeta.setMeta(physicalRow, physicalColumn, key, value);\n  }\n\n  /**\n   * Updates cell meta object by merging settings with the current state.\n   *\n   * @param {number} physicalRow The physical row index which points what cell meta object is updated.\n   * @param {number} physicalColumn The physical column index which points what cell meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateCellMeta(physicalRow, physicalColumn, settings) {\n    this.cellMeta.updateMeta(physicalRow, physicalColumn, settings);\n  }\n\n  /**\n   * Removes a property defined by the \"key\" argument from the cell meta object.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to remove.\n   */\n  removeCellMeta(physicalRow, physicalColumn, key) {\n    this.cellMeta.removeMeta(physicalRow, physicalColumn, key);\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation. As cell meta\n   * objects are created lazy, the length of the returned collection depends on how and when the\n   * table has asked for access to that meta objects.\n   *\n   * @returns {object[]}\n   */\n  getCellsMeta() {\n    return this.cellMeta.getMetas();\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation but for\n   * specific row index.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @returns {object[]}\n   */\n  getCellsMetaAtRow(physicalRow) {\n    return this.cellMeta.getMetasAtRow(physicalRow);\n  }\n\n  /**\n   * Creates one or more rows at specific position.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is added.\n   * @param {number} [amount=1] An amount of rows to add.\n   */\n  createRow(physicalRow, amount = 1) {\n    this.cellMeta.createRow(physicalRow, amount);\n  }\n\n  /**\n   * Removes one or more rows from the collection.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is removed.\n   * @param {number} [amount=1] An amount rows to remove.\n   */\n  removeRow(physicalRow, amount = 1) {\n    this.cellMeta.removeRow(physicalRow, amount);\n  }\n\n  /**\n   * Creates one or more columns at specific position.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is added.\n   * @param {number} [amount=1] An amount of columns to add.\n   */\n  createColumn(physicalColumn, amount = 1) {\n    this.cellMeta.createColumn(physicalColumn, amount);\n    this.columnMeta.createColumn(physicalColumn, amount);\n  }\n\n  /**\n   * Removes one or more columns from the collection.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n   * @param {number} [amount=1] An amount of columns to remove.\n   */\n  removeColumn(physicalColumn, amount = 1) {\n    this.cellMeta.removeColumn(physicalColumn, amount);\n    this.columnMeta.removeColumn(physicalColumn, amount);\n  }\n\n  /**\n   * Clears all saved cell meta objects. It keeps column meta, table meta, and global meta intact.\n   */\n  clearCellsCache() {\n    this.cellMeta.clearCache();\n  }\n\n  /**\n   * Clears all saved cell and columns meta objects.\n   */\n  clearCache() {\n    this.cellMeta.clearCache();\n    this.columnMeta.clearCache();\n  }\n}\n\nmixin(MetaManager, localHooks);\n","import { extend } from '../../../helpers/object';\nimport { extendByMetaType } from '../utils';\nimport metaSchemaFactory from '../metaSchema';\n\n/**\n * @typedef {Options} TableMeta\n */\n/**\n * @returns {TableMeta} Returns an empty object. The holder for global meta object.\n */\nfunction createTableMetaEmptyClass() {\n  return class TableMeta {};\n}\n\n/**\n * The global meta object is a root of all default settings, which are recognizable by Handsontable.\n * Other layers are inherited from this object. Adding, removing, or changing property in that\n * object has a direct reflection to all layers such as: TableMeta, ColumnMeta, or CellMeta layers.\n *\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n */\nexport default class GlobalMeta {\n  /**\n   * An alias for the constructor. Necessary for inheritance for creating new layers.\n   *\n   * @type {TableMeta}\n   */\n  metaCtor = createTableMetaEmptyClass();\n  /**\n   * Main object (prototype of the internal TableMeta class), holder for all default settings.\n   *\n   * @type {object}\n   */\n  meta;\n\n  constructor(hot) {\n    this.meta = this.metaCtor.prototype;\n\n    extend(this.meta, metaSchemaFactory());\n\n    this.meta.instance = hot;\n  }\n\n  /**\n   * Gets constructor of the global meta object. Necessary for inheritance for creating the next meta layers.\n   *\n   * @returns {Function}\n   */\n  getMetaConstructor() {\n    return this.metaCtor;\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @returns {object}\n   */\n  getMeta() {\n    return this.meta;\n  }\n\n  /**\n   * Updates global settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(settings) {\n    extend(this.meta, settings);\n    extendByMetaType(this.meta, {\n      ...settings,\n      type: settings.type ?? this.meta.type,\n    }, settings);\n  }\n}\n","import { hasOwnProperty, isObject, objectEach, inherit, extend } from '../../helpers/object';\nimport { getCellType } from '../../cellTypes/registry';\n\n/**\n * Checks if the given property can be overwritten.\n *\n * @param {string} propertyName The property name to check.\n * @param {object} metaObject The current object meta settings.\n * @returns {boolean}\n */\nfunction canBeOverwritten(propertyName, metaObject) {\n  if (propertyName === 'CELL_TYPE') {\n    return false;\n  }\n\n  return metaObject._automaticallyAssignedMetaProps?.has(propertyName) ||\n    !hasOwnProperty(metaObject, propertyName);\n}\n\n/**\n * Expands \"type\" property of the meta object to single values. For example `type: 'numeric'` sets\n * \"renderer\", \"editor\", \"validator\" properties to specific functions designed for numeric values.\n * If \"type\" is passed as an object that object will be returned, excluding properties that\n * already exist in the \"metaObject\".\n *\n * The function utilizes `_automaticallyAssignedMetaProps` meta property that allows tracking what\n * properties are changed by the \"type\" expanding feature. That properties can be always overwritten by\n * the user.\n *\n * @param {object} metaObject The meta object.\n * @param {object} settings The settings object with the \"type\" setting.\n * @param {object} settingsToCompareWith The object to compare which properties need to be updated.\n */\nexport function extendByMetaType(metaObject, settings, settingsToCompareWith = metaObject) {\n  const validType = typeof settings.type === 'string' ? getCellType(settings.type) : settings.type;\n\n  if (metaObject._automaticallyAssignedMetaProps) {\n    objectEach(settings, (value, key) => void metaObject._automaticallyAssignedMetaProps.delete(key));\n  }\n\n  if (!isObject(validType)) {\n    return;\n  }\n\n  if (settingsToCompareWith === metaObject && !metaObject._automaticallyAssignedMetaProps) {\n    metaObject._automaticallyAssignedMetaProps = new Set();\n  }\n\n  const expandedType = {};\n\n  objectEach(validType, (value, property) => {\n    if (canBeOverwritten(property, settingsToCompareWith)) {\n      expandedType[property] = value;\n      metaObject._automaticallyAssignedMetaProps?.add(property);\n    }\n  });\n\n  extend(metaObject, expandedType);\n}\n\n/**\n * Creates new class which extends properties from TableMeta layer class.\n *\n * @param {TableMeta} TableMeta The TableMeta which the new ColumnMeta is created from.\n * @param {string[]} [conflictList] List of the properties which are conflicted with the column meta layer.\n *                                  Conflicted properties are overwritten by `undefined` value, to separate them\n *                                  from the TableMeta layer.\n * @returns {ColumnMeta} Returns constructor ready to initialize with `new` operator.\n */\nexport function columnFactory(TableMeta, conflictList = []) {\n  // Do not use ES6 \"class extends\" syntax here. It seems that the babel produces code\n  // which drastically decreases the performance of the ColumnMeta class creation.\n\n  /**\n   * Base \"class\" for column meta.\n   */\n  function ColumnMeta() {}\n\n  inherit(ColumnMeta, TableMeta);\n\n  // Clear conflict settings\n  for (let i = 0; i < conflictList.length; i++) {\n    ColumnMeta.prototype[conflictList[i]] = undefined;\n  }\n\n  return ColumnMeta;\n}\n\n/**\n * Helper which checks if the provided argument is an unsigned number.\n *\n * @param {*} value Value to check.\n * @returns {boolean}\n */\nexport function isUnsignedNumber(value) {\n  return Number.isInteger(value) && value >= 0;\n}\n\n/**\n * Function which makes assertion by custom condition. Function throws an error when assertion doesn't meet the spec.\n *\n * @param {Function} condition Function with custom logic. The condition has to return boolean values.\n * @param {string} errorMessage String which describes assertion error.\n */\nexport function assert(condition, errorMessage) {\n  if (!condition()) {\n    throw new Error(`Assertion failed: ${errorMessage}`);\n  }\n}\n\n/**\n * Check if given variable is null or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {boolean}\n */\nexport function isNullish(variable) {\n  return variable === null || variable === undefined;\n}\n","import staticRegister from '../utils/staticRegister';\nimport { registerEditor } from '../editors/registry';\nimport { registerRenderer } from '../renderers/registry';\nimport { registerValidator } from '../validators/registry';\n\nconst {\n  register,\n  getItem,\n  hasItem,\n  getNames,\n  getValues,\n} = staticRegister('cellTypes');\n\n/**\n * Retrieve cell type object.\n *\n * @param {string} name Cell type identification.\n * @returns {object} Returns cell type object.\n */\nfunction _getItem(name) {\n  if (!hasItem(name)) {\n    throw Error(`You declared cell type \"${name}\" as a string that is not mapped to a known object.\n                 Cell type must be an object or a string mapped to an object registered by\n                 \"Handsontable.cellTypes.registerCellType\" method`);\n  }\n\n  return getItem(name);\n}\n\n/**\n * Register cell type under specified name.\n *\n * @param {string} name Cell type identification.\n * @param {object} type An object with contains keys (eq: `editor`, `renderer`, `validator`) which describes specified behaviour of the cell.\n */\nfunction _register(name, type) {\n  if (typeof name !== 'string') {\n    type = name;\n    name = type.CELL_TYPE;\n  }\n\n  const { editor, renderer, validator } = type;\n\n  if (editor) {\n    registerEditor(name, editor);\n  }\n  if (renderer) {\n    registerRenderer(name, renderer);\n  }\n  if (validator) {\n    registerValidator(name, validator);\n  }\n\n  register(name, type);\n}\n\nexport {\n  _register as registerCellType,\n  _getItem as getCellType,\n  hasItem as hasCellType,\n  getNames as getRegisteredCellTypeNames,\n  getValues as getRegisteredCellTypes,\n};\n","import { isEmpty } from '../../helpers/mixed';\nimport { isObjectEqual } from '../../helpers/object';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @alias Options\n * @class Options\n * @description\n *\n * [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md) let you heavily customize your Handsontable instance. For example, you can:\n *\n * - Enable and disable built-in features\n * - Enable and configure additional [plugins](@/api/plugins.md)\n * - Personalize Handsontable's look\n * - Adjust Handsontable's behavior\n * - Implement your own custom features\n *\n * ::: only-for javascript\n *\n * To apply [configuration options](@/guides/getting-started/configuration-options/configuration-options.md), pass them as\n * a second argument of the [Handsontable constructor](@/guides/getting-started/installation/installation.md#initialize-handsontable),\n * using the [object literal notation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer):\n *\n * Read more on the [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md) page.\n *\n * ```js\n * const container = document.getElementById('example');\n *\n * const hot = new Handsontable(container, {\n *   // configuration options, in the object literal notation\n *   licenseKey: 'non-commercial-and-evaluation',\n *   data: [\n *     ['A1', 'B1', 'C1', 'D1', 'E1'],\n *     ['A2', 'B2', 'C2', 'D2', 'E2'],\n *     ['A3', 'B3', 'C3', 'D3', 'E3'],\n *     ['A4', 'B4', 'C4', 'D4', 'E4'],\n *     ['A5', 'B5', 'C5', 'D5', 'E5'],\n *   ],\n *   width: 400,\n *   height: 300,\n *   colHeaders: true,\n *   rowHeaders: true,\n *   customBorders: true,\n *   dropdownMenu: true,\n *   multiColumnSorting: true,\n *   filters: true,\n *   manualRowMove: true,\n * });\n * ```\n * :::\n *\n * ::: only-for react\n *\n * To apply configuration options, pass them as individual props\n * of the [`HotTable`](@/guides/getting-started/installation/installation.md#_4-use-the-hottable-component)\n * or [`HotColumn`](@/guides/columns/react-hot-column/react-hot-column.md) components.\n *\n * Read more on the [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md) page.\n *\n * ```jsx\n * <HotTable\n *   // configuration options, in the object literal notation\n *   licenseKey='non-commercial-and-evaluation'\n *   data={[\n *     ['A1', 'B1', 'C1', 'D1', 'E1'],\n *     ['A2', 'B2', 'C2', 'D2', 'E2'],\n *     ['A3', 'B3', 'C3', 'D3', 'E3'],\n *     ['A4', 'B4', 'C4', 'D4', 'E4'],\n *     ['A5', 'B5', 'C5', 'D5', 'E5'],\n *   ]}\n *   width={400}\n *   height={300}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   customBorders={true}\n *   dropdownMenu={true}\n *   multiColumnSorting={true}\n *   filters={true}\n *   manualRowMove={true}\n * />\n * ```\n * :::\n *\n * Depending on your needs, you can apply [configuration options](@/api/options.md) to different elements of your grid:\n * - [The entire grid](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options)\n * - [Individual columns](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)\n * - [Individual rows](@/guides/getting-started/configuration-options/configuration-options.md#set-row-options)\n * - [Individual cells](@/guides/getting-started/configuration-options/configuration-options.md#set-cell-options)\n * - [Individual grid elements, based on any logic you implement](@/guides/getting-started/configuration-options/configuration-options.md#implementing-custom-logic)\n *\n * Read more:\n * - [Configuration options](@/guides/getting-started/configuration-options/configuration-options.md)\n */\nexport default () => {\n  return {\n\n    /* eslint-disable jsdoc/require-description-complete-sentence */\n\n    /**\n     * Information on which of the meta properties were added automatically.\n     * For example: setting the `renderer` property directly won't extend the `_automaticallyAssignedMetaProps`\n     * entry, but setting a `type` will modify it to `Set(3) {'renderer', 'editor', 'validator', ...}`.\n     *\n     * @private\n     * @type {Set}\n     * @default undefined\n     */\n    _automaticallyAssignedMetaProps: undefined,\n\n    /**\n     * The `activeHeaderClassName` option lets you add a CSS class name\n     * to every currently-active, currently-selected header (when a whole column or row is selected).\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @since 0.38.2\n     * @default 'ht__active_highlight'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `ht__active_highlight` CSS class name\n     * // to every currently-active, currently-selected header\n     * activeHeaderClassName: 'ht__active_highlight',\n     * ```\n     */\n    activeHeaderClassName: 'ht__active_highlight',\n\n    /**\n     * The `allowEmpty` option determines whether Handsontable accepts the following values:\n     * - `null`\n     * - `undefined`\n     * - `''`\n     *\n     * You can set the `allowEmpty` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                          |\n     * | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `true` (default) | - Accept `null`, `undefined` and `''` values<br>- Mark cells that contain `null`, `undefined` or `''` values as `valid`              |\n     * | `false`          | - Don't accept `null`, `undefined` and `''` values<br>- Mark cells that contain `null`, `undefined` or `''` values with as `invalid` |\n     *\n     * ::: tip\n     * To use the [`allowEmpty`](#allowempty) option, you need to set the [`validator`](#validator) option (or the [`type`](#type) option).\n     * :::\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // allow empty values in each cell of the entire grid\n     * allowEmpty: true,\n     *\n     * // or\n     * columns: [\n     *   {\n     *     type: 'date',\n     *     dateFormat: 'DD/MM/YYYY',\n     *     // allow empty values in each cell of the 'date' column\n     *     allowEmpty: true\n     *   }\n     * ],\n     * ```\n     */\n    allowEmpty: true,\n\n    /**\n     * The `allowHtml` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) cells' [`source`](#source) data\n     * is treated as HTML.\n     *\n     * You can set the `allowHtml` option to one of the following:\n     *\n     * | Setting           | Description                                         |\n     * | ----------------- | --------------------------------------------------- |\n     * | `false` (default) | The [`source`](#source) data is not treated as HTML |\n     * | `true`            | The [`source`](#source) data is treated as HTML     |\n     *\n     * __Warning:__ Setting the `allowHtml` option to `true` can cause serious XSS vulnerabilities.\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     * - [`source`](#source)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['<strong>foo</strong>', '<strong>bar</strong>']\n     *   // use HTML in the `source` list\n     *   allowHtml: true,\n     *   },\n     * ],\n     * ```\n     */\n    allowHtml: false,\n\n    /**\n     * If set to `true`, the `allowInsertColumn` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Insert column left**\n     * - **Insert column right**\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Insert column left' and 'Insert column right' menu items from the context menu\n     * allowInsertColumn: false,\n     * ```\n     */\n    allowInsertColumn: true,\n\n    /**\n     * If set to `true`, the `allowInsertRow` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Insert row above**\n     * - **Insert row below**\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Insert row above' and 'Insert row below' menu items from the context menu\n     * allowInsertRow: false,\n     * ```\n     */\n    allowInsertRow: true,\n\n    /**\n     * The `allowInvalid` option determines whether Handsontable accepts values\n     * that were marked as `invalid` by the [cell validator](@/guides/cell-functions/cell-validator/cell-validator.md).\n     *\n     * You can set the `allowInvalid` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                        |\n     * | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | - Accept `invalid` values<br>- Allow the user to close the [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) with `invalid` values<br>- Save `invalid` values into the data source                   |\n     * | `false`          | - Don't accept `invalid` values<br>- Don't allow the user to close the [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) with `invalid` values<br>- Don't save `invalid` values into the data source |\n     *\n     * Setting the `allowInvalid` option to `false` can be useful when used with the [Autocomplete strict mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-strict-mode).\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [Autocomplete strict mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-strict-mode)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't accept `invalid` values\n     * // don't allow the user to close the cell editor\n     * // don't save `invalid` values into the data source\n     * allowInvalid: false,\n     * ```\n     */\n    allowInvalid: true,\n\n    /**\n     * If set to `true`, the `allowRemoveColumn` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Remove column**\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Remove column' menu item from the context menu\n     * allowRemoveColumn: false,\n     * ```\n     */\n    allowRemoveColumn: true,\n\n    /**\n     * If set to `true`, the `allowRemoveRow` option adds the following menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md):\n     * - **Remove row**\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // hide the 'Remove row' menu item from the context menu\n     * allowRemoveRow: false,\n     * ```\n     */\n    allowRemoveRow: true,\n\n    /**\n     * If set to `true`, the accessibility-related ARIA tags will be added to the table. If set to `false`, they\n     * will be omitted.\n     * Defaults to `true`.\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     * @since 14.0.0\n     */\n    ariaTags: true,\n\n    /**\n     * The `autoColumnSize` option configures the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin.\n     *\n     * You can set the `autoColumnSize` option to one of the following:\n     *\n     * | Setting   | Description                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin                               |\n     * | `true`    | Enable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin with the default configuration |\n     * | An object | Enable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin and modify the plugin options  |\n     *\n     * If you set the `autoColumnSize` option to an object, you can set the following [`AutoColumnSize`](@/api/autoColumnSize.md) plugin options:\n     *\n     * | Property                | Possible values                 | Description                                                                                                    |\n     * | ----------------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n     * | `syncLimit`             | A number \\| A percentage string | The number/percentage of columns to keep in sync<br>(default: `50`)                                            |\n     * | `useHeaders`            | `true` \\| `false`               | When calculating column widths:<br>`true`: use column headers<br>`false`: don't use column headers          |\n     * | `samplingRatio`         | A number                        | The number of samples of the same length to be used in column width calculations                               |\n     * | `allowSampleDuplicates` | `true` \\| `false`               | When calculating column widths:<br>`true`: Allow duplicate samples<br>`false`: Don't allow duplicate samples |\n     *\n     * By default, the `autoColumnSize` option is set to `undefined`,\n     * but the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin acts as enabled.\n     * To disable the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin completely,\n     * set the `autoColumnSize` option to `false`.\n     *\n     * Using the [`colWidths`](#colWidths) option forcibly disables the [`AutoColumnSize`](@/api/autoColumnSize.md) plugin.\n     *\n     * Read more:\n     * - [Plugins: `AutoColumnSize`](@/api/autoColumnSize.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default undefined\n     * @category AutoColumnSize\n     *\n     * @example\n     * ```js\n     * autoColumnSize: {\n     *   // keep 40% of columns in sync (the rest of columns: async)\n     *   syncLimit: '40%',\n     *   // when calculating column widths, use column headers\n     *   useHeaders: true,\n     *   // when calculating column widths, use 10 samples of the same length\n     *   samplingRatio: 10,\n     *   // when calculating column widths, allow duplicate samples\n     *   allowSampleDuplicates: true\n     * },\n     * ```\n     */\n    autoColumnSize: undefined,\n\n    /**\n     * The `autoRowSize` option configures the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n     *\n     * You can set the `autoRowSize` option to one of the following:\n     *\n     * | Setting   | Description                                                                            |\n     * | --------- | -------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`AutoRowSize`](@/api/autoRowSize.md) plugin                               |\n     * | `true`    | Enable the [`AutoRowSize`](@/api/autoRowSize.md) plugin with the default configuration |\n     * | An object | Enable the [`AutoRowSize`](@/api/autoRowSize.md) plugin and modify the plugin options  |\n     *\n     * To give Handsontable's scrollbar a proper size, set the `autoRowSize` option to `true`.\n     *\n     * If you set the `autoRowSize` option to an object, you can set the following [`AutoRowSize`](@/api/autoRowSize.md) plugin options:\n     *\n     * | Property    | Possible values                 | Description                                                       |\n     * | ----------- | ------------------------------- | ----------------------------------------------------------------- |\n     * | `syncLimit` | A number \\| A percentage string | The number/percentage of rows to keep in sync<br>(default: `500`) |\n     *\n     * Using the [`rowHeights`](#rowHeights) option forcibly disables the [`AutoRowSize`](@/api/autoRowSize.md) plugin.\n     *\n     * Read more:\n     * - [Plugins: `AutoRowSize`](@/api/autoRowSize.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default undefined\n     * @category AutoRowSize\n     *\n     * @example\n     * ```js\n     * autoRowSize: {\n     *   // keep 40% of rows in sync (the rest of rows: async)\n     *   syncLimit: '40%'\n     * },\n     * ```\n     */\n    autoRowSize: undefined,\n\n    /**\n     * | Setting           | Description                                                                                                                                                                                                                                  |\n     * | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | When you select a bottom-most cell, pressing <kbd>**↓**</kbd> doesn't do anything.<br><br>When you select a top-most cell, pressing <kbd>**↑**</kbd> doesn't do anything.                                                                    |\n     * | `true`            | When you select a bottom-most cell, pressing <kbd>**↓**</kbd> takes you to the top-most cell of the next column.<br><br>When you select a top-most cell, pressing <kbd>**↑**</kbd> takes you to the bottom-most cell of the previous column. |\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // when you select a bottom-most cell, pressing ⬇ doesn't do anything\n     * // when you select a top-most cell, pressing ⬆ doesn't do anything\n     * autoWrapCol: false, // default setting\n     *\n     * // when you select a bottom-most cell, pressing ⬇ takes you to the top-most cell of the next column\n     * // when you select a top-most cell, pressing ⬆ takes you to the bottom-most cell of the previous column\n     * autoWrapCol: true,\n     * ```\n     */\n    autoWrapCol: false,\n\n    /**\n     * | Setting           | Description                                                                                                                                                                                                                                                                                                        |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `false` (default) | When you select the first cell of a row, pressing <kbd>**←**</kbd>* (or <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>\\*\\*) doesn't do anything.<br><br>When you select the last cell of a row, pressing <kbd>**→**</kbd>* (or <kbd>**Tab**</kbd>**) doesn't do anything.                                                  |\n     * | `true`            | When you select the first cell of a row, pressing <kbd>**←**</kbd>* (or <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>\\*\\*) takes you to the last cell of the row above.<br><br>When you select the last cell of a row, pressing <kbd>**→**</kbd>* (or <kbd>**Tab**</kbd>**) takes you to the first cell of the row below. |\n     *\n     * \\* The exact key depends on your [`layoutDirection`](#layoutdirection) configuration.<br>\n     * \\*\\* Unless [`tabNavigation`](#tabnavigation) is set to `false`.\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // when you select the first cell of a row, pressing ⬅ (or Shift+Tab) doesn't do anything\n     * // when you select the last cell of a row, pressing ➡ (or Tab) doesn't do anything\n     * autoWrapRow: false, // default setting\n     *\n     * // when you select the first cell of a row, pressing ⬅ (or Shift+Tab) takes you to the last cell of the row above\n     * // when you select the last cell of a row, pressing ➡ (or Tab) takes you to the first cell of the row below\n     * autoWrapRow: true,\n     * ```\n     */\n    autoWrapRow: false,\n\n    /**\n     * @description\n     * The `bindRowsWithHeaders` option configures the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin.\n     *\n     * You can set the `bindRowsWithHeaders` option to one of the following:\n     *\n     * | Setting | Description                                                                  |\n     * | ------- | ---------------------------------------------------------------------------- |\n     * | `false` | Disable the the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin |\n     * | `true`  | Enable the the [`BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md) plugin  |\n     *\n     * Read more:\n     * - [Plugins: `BindRowsWithHeaders`](@/api/bindRowsWithHeaders.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string}\n     * @default undefined\n     * @category BindRowsWithHeaders\n     *\n     * @example\n     * ```js\n     * // enable the `BindRowsWithHeaders` plugin\n     * bindRowsWithHeaders: true\n     * ```\n     */\n    bindRowsWithHeaders: undefined,\n\n    /**\n     * The `cell` option lets you apply [configuration options](@/guides/getting-started/configuration-options/configuration-options.md) to individual cells.\n     *\n     * The `cell` option overwrites the [top-level grid options](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options),\n     * and the [`columns`](#columns) options.\n     *\n     * Read more:\n     * - [Configuration options: Setting cell options](@/guides/getting-started/configuration-options/configuration-options.md#set-cell-options)\n     * - [`columns`](#columns)\n     *\n     * @memberof Options#\n     * @type {Array[]}\n     * @default []\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `cell` option to an array of objects\n     * cell: [\n     *   // make the cell with coordinates (0, 0) read-only\n     *   {\n     *     row: 0,\n     *     col: 0,\n     *     readOnly: true\n     *   }\n     * ],\n     * ```\n     */\n    cell: [],\n\n    /**\n     * @description\n     * The `cells` option lets you apply any other [configuration options](@/guides/getting-started/configuration-options/configuration-options.md) to\n     * individual grid elements (columns, rows, cells), based on any logic you implement.\n     *\n     * The `cells` option overwrites all other options (including options set by [`columns`](#columns) and [`cell`](#cell)).\n     * It takes the following parameters:\n     *\n     * | Parameter | Required | Type             | Description                                                                                                                                                                                                                                                                                                                             |\n     * | --------- | -------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `row`     | Yes      | Number           | A physical row index                                                                                                                                                                                                                                                                                                                    |\n     * | `column`  | Yes      | Number           | A physical column index                                                                                                                                                                                                                                                                                                                 |\n     * | `prop`    | No       | String \\| Number | If [`data`](#data) is set to an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays), `prop` is the same number as `column`.<br><br>If [`data`](#data) is set to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects), `prop` is a property name for the column's data object. |\n     *\n     * Read more:\n     * - [Configuration options: Implementing custom logic](@/guides/getting-started/configuration-options/configuration-options.md#implement-custom-logic)\n     * - [Configuration options: Setting row options](@/guides/getting-started/configuration-options/configuration-options.md#set-row-options)\n     * - [`columns`](#columns)\n     * - [`cell`](#cell)\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `cells` option to your custom function\n     * cells(row, column, prop) {\n     *   const cellProperties = { readOnly: false };\n     *   const visualRowIndex = this.instance.toVisualRow(row);\n     *   const visualColIndex = this.instance.toVisualColumn(column);\n     *\n     *   if (visualRowIndex === 0 && visualColIndex === 0) {\n     *     cellProperties.readOnly = true;\n     *   }\n     *\n     *   return cellProperties;\n     * },\n     * ```\n     */\n    cells: undefined,\n\n    /**\n     * The `checkedTemplate` option lets you configure what value\n     * a checked [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell has.\n     *\n     * You can set the `checkedTemplate` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                              |\n     * | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is checked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns `true`                  |\n     * | A string         | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is checked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns a string of your choice |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox template](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md#checkbox-template)\n     * - [`getDataAtCell()`](@/api/core.md#getDataAtCell)\n     * - [`uncheckedTemplate`](#uncheckedTemplate)\n     *\n     * @memberof Options#\n     * @type {boolean|string|number}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     // when checked, the cell's value is `true`\n     *     // when unchecked, the cell's value is `false`\n     *     type: 'checkbox',\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     type: 'checkbox',\n     *     // when checked, the cell's value is `'Yes'`\n     *     checkedTemplate: 'Yes',\n     *     // when unchecked, the cell's value is `'No'`\n     *     uncheckedTemplate: 'No'\n     *  }\n     * ],\n     * ```\n     */\n    checkedTemplate: undefined,\n\n    /**\n     * The `className` option lets you add CSS class names to every currently-selected element.\n     *\n     * You can set the `className` option to one of the following:\n     *\n     * | Setting             | Description                                                      |\n     * | ------------------- | ---------------------------------------------------------------- |\n     * | A string            | Add a single CSS class name to every currently-selected element  |\n     * | An array of strings | Add multiple CSS class names to every currently-selected element |\n     *\n     * ::: tip\n     * Don't change the `className` metadata of the [column summary](@/guides/columns/column-summary/column-summary.md) row.\n     * To style the summary row, use the class name assigned automatically by the [`ColumnSummary`](@/api/columnSummary.md) plugin: `columnSummaryResult`.\n     * :::\n     *\n     * To apply different CSS class names on different levels, use Handsontable's [cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration).\n     *\n     * Read more:\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`TableClassName`](#TableClassName)\n     *\n     * @memberof Options#\n     * @type {string|string[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every currently-selected element\n     * className: 'your-class-name',\n     *\n     * // add `first-class-name` and `second-class-name` CSS class names\n     * // to every currently-selected element\n     * className: ['first-class-name', 'second-class-name'],\n     * ```\n     */\n    className: undefined,\n\n    /**\n     * The `colHeaders` option configures your grid's column headers.\n     *\n     * You can set the `colHeaders` option to one of the following:\n     *\n     * | Setting  | Description                                                          |\n     * | -------- | -------------------------------------------------------------------- |\n     * | `true`   | Enable the default column headers ('A', 'B', 'C', ...)               |\n     * | `false`  | Disable column headers                                               |\n     * | An array | Define your own column headers (e.g. `['One', 'Two', 'Three', ...]`) |\n     * | A function | Define your own column headers, using a function                     |\n     *\n     * Read more:\n     * - [Column header](@/guides/columns/column-header/column-header.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|Function}\n     * @default null\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable the default column headers\n     * colHeaders: true,\n     *\n     * // set your own column headers\n     * colHeaders: ['One', 'Two', 'Three'],\n     *\n     * // set your own column headers, using a function\n     * colHeaders: function(visualColumnIndex) {\n     *   return `${visualColumnIndex} + : AB`;\n     * },\n     * ```\n     */\n    colHeaders: null,\n\n    /**\n     * @description\n     * The `collapsibleColumns` option configures the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin.\n     *\n     * You can set the `collapsibleColumns` option to one of the following:\n     *\n     * | Setting              | Description                                                                                       |\n     * | -------------------- | ------------------------------------------------------------------------------------------------- |\n     * | `false`              | Disable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin                            |\n     * | `true`               | Enable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin                             |\n     * | An array of objects  | Enable the [`CollapsibleColumns`](@/api/collapsibleColumns.md) plugin for selected column headers |\n     *\n     * Read more:\n     * - [Plugins: `CollapsibleColumns`](@/api/collapsibleColumns.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default undefined\n     * @category CollapsibleColumns\n     *\n     * @example\n     * ```js\n     * // enable column collapsing for all headers\n     * collapsibleColumns: true,\n     *\n     * // enable column collapsing for selected headers\n     * collapsibleColumns: [\n     *   {row: -4, col: 1, collapsible: true},\n     *   {row: -3, col: 5, collapsible: true}\n     * ],\n     * ```\n     */\n    collapsibleColumns: undefined,\n\n    /**\n     * @description\n     * The `columnHeaderHeight` option configures the height of column headers.\n     *\n     * You can set the `columnHeaderHeight` option to one of the following:\n     *\n     * | Setting  | Description                                         |\n     * | -------- | --------------------------------------------------- |\n     * | A number | Set the same height for every column header         |\n     * | An array | Set different heights for individual column headers |\n     *\n     * @memberof Options#\n     * @type {number|number[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the same height for every column header\n     * columnHeaderHeight: 25,\n     *\n     * // set different heights for individual column headers\n     * columnHeaderHeight: [25, 30, 55],\n     * ```\n     */\n    columnHeaderHeight: undefined,\n\n    /**\n     * @description\n     * The `columns` option lets you apply any other [configuration options](@/guides/getting-started/configuration-options/configuration-options.md) to individual columns (or ranges of columns).\n     *\n     * You can set the `columns` option to one of the following:\n     * - An array of objects (each object represents one column)\n     * - A function that returns an array of objects\n     *\n     * The `columns` option overwrites the [top-level grid options](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options).\n     *\n     * When you use `columns`, the [`startCols`](#startCols), [`minCols`](#minCols), and [`maxCols`](#maxCols) options are ignored.\n     *\n     * Read more:\n     * - [Configuration options: Setting column options](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)\n     * - [`startCols`](#startCols)\n     * - [`minCols`](#minCols)\n     * - [`maxCols`](#maxCols)\n     * - [`data`](#data)\n     *\n     * @memberof Options#\n     * @type {object[]|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `columns` option to an array of objects\n     * // each object represents one column\n     * columns: [\n     *   {\n     *     // column options for the first (by physical index) column\n     *     type: 'numeric',\n     *     numericFormat: {\n     *       pattern: '0,0.00 $'\n     *     }\n     *   },\n     *   {\n     *     // column options for the second (by physical index) column\n     *     type: 'text',\n     *     readOnly: true\n     *   }\n     * ],\n     *\n     * // or set the `columns` option to a function, based on physical indexes\n     * columns(index) {\n     *   return {\n     *     type: index > 0 ? 'numeric' : 'text',\n     *     readOnly: index < 1\n     *   }\n     * }\n     * ```\n     */\n    columns: undefined,\n\n    /**\n     * @description\n     * The `columnSorting` option configures the [`ColumnSorting`](@/api/columnSorting.md) plugin.\n     *\n     * You can set the `columnSorting` option to one of the following:\n     *\n     * | Setting    | Description                                                                                                                            |\n     * | ---------- | -------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`     | Enable the [`ColumnSorting`](@/api/columnSorting.md) plugin with the default configuration                                             |\n     * | `false`    | Disable the [`ColumnSorting`](@/api/columnSorting.md) plugin                                                                           |\n     * | An object  | - Enable the [`ColumnSorting`](@/api/columnSorting.md) plugin<br>- Modify the [`ColumnSorting`](@/api/columnSorting.md) plugin options |\n     *\n     * If you set the `columnSorting` option to an object,\n     * you can set the following [`ColumnSorting`](@/api/columnSorting.md) plugin options:\n     *\n     * | Option                   | Possible settings                                                                                                                                |\n     * | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `indicator`              | `true`: Display the arrow icon in the column header, to indicate a sortable column<br>`false`: Don't display the arrow icon in the column header  |\n     * | `headerAction`           | `true`: Enable clicking on the column header to sort the column<br>`false`: Disable clicking on the column header to sort the column             |\n     * | `sortEmptyCells`         | `true`: Sort empty cells as well<br>`false`: Place empty cells at the end                                                                        |\n     * | `compareFunctionFactory` | A [custom compare function](@/guides/rows/rows-sorting/rows-sorting.md#add-a-custom-comparator)                                                                |\n     *\n     * If you set the `columnSorting` option to an object,\n     * you can also sort individual columns at Handsontable's initialization.\n     * In the `columnSorting` object, add an object named `initialConfig`,\n     * with the following properties:\n     *\n     * | Option      | Possible settings   | Description                                                      |\n     * | ----------- | ------------------- | ---------------------------------------------------------------- |\n     * | `column`    | A number            | The index of the column that you want to sort at initialization  |\n     * | `sortOrder` | `'asc'` \\| `'desc'` | The sorting order:<br>`'asc'`: ascending<br>`'desc'`: descending |\n     *\n     * Read more:\n     * - [Rows sorting](@/guides/rows/rows-sorting/rows-sorting.md)\n     * - [Rows sorting: Custom compare functions](@/guides/rows/rows-sorting/rows-sorting.md#add-a-custom-comparator)\n     * - [`multiColumnSorting`](#multiColumnSorting)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category ColumnSorting\n     *\n     * @example\n     * ```js\n     * // enable the `ColumnSorting` plugin\n     * columnSorting: true\n     *\n     * // enable the `ColumnSorting` plugin with custom configuration\n     * columnSorting: {\n     *   // sort empty cells as well\n     *   sortEmptyCells: true,\n     *   // display the arrow icon in the column header\n     *   indicator: true,\n     *   // disable clicking on the column header to sort the column\n     *   headerAction: false,\n     *   // add a custom compare function\n     *   compareFunctionFactory(sortOrder, columnMeta) {\n     *     return function(value, nextValue) {\n     *       // some value comparisons which will return -1, 0 or 1...\n     *     }\n     *   }\n     * }\n     *\n     * // enable the `ColumnSorting` plugin\n     * columnSorting: {\n     *   // at initialization, sort column 1 in ascending order\n     *   initialConfig: {\n     *     column: 1,\n     *     sortOrder: 'asc'\n     *   },\n     *   // at initialization, sort column 2 in descending order\n     *   initialConfig: {\n     *     column: 2,\n     *     sortOrder: 'desc'\n     *   }\n     * }\n     * ```\n     */\n    columnSorting: undefined,\n\n    /**\n     * @description\n     * The `columnSummary` option configures the [`ColumnSummary`](@/api/columnSummary.md) plugin.\n     *\n     * You can set the `columnSummary` option to an array of objects.\n     * Each object configures a single column summary, using the following properties:\n     *\n     * | Property                 | Possible values                                                         | Description                                                                                                                  |\n     * | ------------------------ | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |\n     * | `sourceColumn`           | A number                                                                | [Column to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize)                     |\n     * | `ranges`                 | An array                                                                | [Ranges of rows to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize)             |\n     * | `type`                   | `'sum'` \\| `'min'` \\| `'max'` \\| `'count'` \\| `'average'` \\| `'custom'` | [Summary function](@/guides/columns/column-summary/column-summary.md#step-3-calculate-your-summary)                                         |\n     * | `destinationRow`         | A number                                                                | [Destination cell's row coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates)    |\n     * | `destinationColumn`      | A number                                                                | [Destination cell's column coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n     * | `forceNumeric`           | `true`  \\| `false`                                                      | [Treat non-numerics as numerics](@/guides/columns/column-summary/column-summary.md#force-numeric-values)                                  |\n     * | `reversedRowCoords`      | `true`  \\| `false`                                                      | [Reverse row coordinates](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell)                      |\n     * | `suppressDataTypeErrors` | `true`  \\| `false`                                                      | [Suppress data type errors](@/guides/columns/column-summary/column-summary.md#throw-data-type-errors)                                    |\n     * | `readOnly`               | `true`  \\| `false`                                                      | Make summary cell read-only                                                                                                  |\n     * | `roundFloat`             | `true`  \\| `false`  \\| A number                                         | [Round summary result](@/guides/columns/column-summary/column-summary.md#round-a-column-summary-result)                                  |\n     * | `customFunction`         | A function                                                              | [Custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function)                         |\n     *\n     * Read more:\n     * - [Column summary](@/guides/columns/column-summary/column-summary.md)\n     * - [Plugins: `ColumnSummary`](@/api/columnSummary.md)\n     *\n     * @memberof Options#\n     * @type {object[]|Function}\n     * @default undefined\n     * @category ColumnSummary\n     *\n     * @example\n     * ```js\n     * columnSummary: [\n     *   {\n     *     sourceColumn: 0,\n     *     ranges: [\n     *       [0, 2], [4], [6, 8]\n     *     ],\n     *     type: 'custom',\n     *     destinationRow: 4,\n     *     destinationColumn: 1,\n     *     forceNumeric: true,\n     *     reversedRowCoords: true,\n     *     suppressDataTypeErrors: false,\n     *     readOnly: true,\n     *     roundFloat: false,\n     *     customFunction(endpoint) {\n     *        return 100;\n     *     }\n     *   }\n     * ],\n     * ```\n     */\n    columnSummary: undefined,\n\n    /**\n     * The `colWidths` option sets columns' widths, in pixels.\n     *\n     * The default column width is 50px. To change it, set the `colWidths` option to one of the following:\n     *\n     * | Setting     | Description                                                                                          | Example                                                           |\n     * | ----------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |\n     * | A number    | Set the same width for every column                                                                  | `colWidths: 100`                                                  |\n     * | A string    | Set the same width for every column                                                                  | `colWidths: '100px'`                                              |\n     * | An array    | Set widths separately for each column                                                                | `colWidths: [100, 120, undefined]`                                |\n     * | A function  | Set column widths dynamically,<br>on each render                                                     | `colWidths(visualColumnIndex) { return visualColumnIndex * 10; }` |\n     * | `undefined` | Used by the [modifyColWidth](@/api/hooks.md#modifyColWidth) hook,<br>to detect column width changes. | `colWidths: undefined`                                            |\n     *\n     * Setting `colWidths` even for a single column disables the {@link AutoColumnSize} plugin\n     * for all columns. For this reason, if you use `colWidths`, we recommend you set a width for each one\n     * of your columns. Otherwise, every column with an undefined width defaults back to 50px,\n     * which may cut longer columns names.\n     *\n     * Read more:\n     * - [Column width](@/guides/columns/column-width/column-width.md)\n     * - [Hooks: `modifyColWidth`](@/api/hooks.md#modifyColWidth)\n     * - [`autoColumnSize`](#autoColumnSize)\n     *\n     * @memberof Options#\n     * @type {number|number[]|string|string[]|Array<undefined>|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set every column's width to 100px\n     * colWidths: 100,\n     *\n     * // set every column's width to 100px\n     * colWidths: '100px',\n     *\n     * // set the first (by visual index) column's width to 100\n     * // set the second (by visual index) column's width to 120\n     * // set the third (by visual index) column's width to `undefined`, so that it defaults to 50px\n     * // set any other column's width to the default 50px (note that longer cell values and column names can get cut)\n     * colWidths: [100, 120, undefined],\n     *\n     * // set each column's width individually, using a function\n     * colWidths(visualColumnIndex) {\n     *   return visualColumnIndex * 10;\n     * },\n     * ```\n     */\n    colWidths: undefined,\n\n    /**\n     * The `commentedCellClassName` option lets you add a CSS class name to cells\n     * that have comments.\n     *\n     * Read more:\n     * - [Comments](@/guides/cell-features/comments/comments.md)\n     * - [`comments`](#comments)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htCommentCell'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `has-comment` CSS class name\n     * // to each cell that has a comment\n     * commentedCellClassName: 'has-comment',\n     * ```\n     */\n    commentedCellClassName: 'htCommentCell',\n\n    /**\n     * @description\n     * The `comments` option configures the [`Comments`](@/api/comments.md) plugin.\n     *\n     * You can set the `comments` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                           |\n     * | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`    | - Enable the [`Comments`](@/api/comments.md) plugin<br>- Add comment menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)                                 |\n     * | `false`   | Disable the [`Comments`](@/api/comments.md) plugin                                                                                                                                    |\n     * | An object | - Enable the [`Comments`](@/api/comments.md) plugin<br>- Add comment menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)<br>- Configure comment settings |\n     *\n     * If you set the `comments` option to an object, you can configure the following comment options:\n     *\n     * | Option         | Possible settings           | Description                                         |\n     * | -------------- | --------------------------- | --------------------------------------------------- |\n     * | `displayDelay` | A number (default: `250`)   | Display comments after a delay (in milliseconds)    |\n     * | `readOnly`     | `true` \\| `false` (default) | `true`: Make comments read-only                     |\n     * | `style`        | An object                   | Set comment boxes' `width` and `height` (in pixels) |\n     *\n     * Read more:\n     * - [Comments](@/guides/cell-features/comments/comments.md)\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [`width`](#width)\n     * - [`height`](#height)\n     * - [`readOnly`](#readOnly)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category Comments\n     *\n     * @example\n     * ```js\n     * // enable the `Comments` plugin\n     * comments: true,\n     *\n     * // enable the `Comments` plugin\n     * // and configure its settings\n     * comments: {\n     *   // display all comments with a 1-second delay\n     *   displayDelay: 1000,\n     *   // make all comments read-only\n     *   readOnly: true,\n     *   // set the default size of all comment boxes\n     *   style: {\n     *     width: 300,\n     *     height: 100\n     *   }\n     * }\n     * ```\n     */\n    comments: false,\n\n    /**\n     * @description\n     * The `contextMenu` option configures the [`ContextMenu`](@/api/contextMenu.md) plugin.\n     *\n     * You can set the `contextMenu` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                                             |\n     * | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`ContextMenu`](@/api/contextMenu.md) plugin                                                                                                                                                |\n     * | `true`    | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Use the [default context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-default-options)                 |\n     * | An array  | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Modify [individual context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options)              |\n     * | An object | - Enable the [`ContextMenu`](@/api/contextMenu.md) plugin<br>- Apply a [custom context menu configuration](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-a-fully-custom-configuration) |\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [Context menu: Context menu with default options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-default-options)\n     * - [Context menu: Context menu with specific options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options)\n     * - [Context menu: Context menu with fully custom configuration options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-a-fully-custom-configuration)\n     * - [Plugins: `ContextMenu`](@/api/contextMenu.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|object}\n     * @default undefined\n     * @category ContextMenu\n     *\n     * @example\n     * ```js\n     * // enable the `ContextMenu` plugin\n     * // use the default context menu options\n     * contextMenu: true,\n     *\n     * // enable the `ContextMenu` plugin\n     * // and modify individual context menu options\n     * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo'],\n     *\n     * // enable the `ContextMenu` plugin\n     * // and apply a custom context menu configuration\n     * contextMenu: {\n     *   items: {\n     *     'option1': {\n     *       name: 'Option 1'\n     *     },\n     *     'option2': {\n     *       name: 'Option 2',\n     *       submenu: {\n     *         items: [\n     *           {\n     *             key: 'option2:suboption1',\n     *             name: 'Suboption 1',\n     *             callback: function(key, options) {\n     *               ...\n     *             }\n     *           },\n     *           ...\n     *         ]\n     *       }\n     *     }\n     *   }\n     * },\n     * ```\n     */\n    contextMenu: undefined,\n\n    /**\n     * @description\n     * The `copyable` option determines whether a cell's value can be copied to the clipboard or not.\n     *\n     * You can set the `copyable` option to one of the following:\n     *\n     * | Setting                                                                                                        | Description                                                                                                            |\n     * | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default)                                                                                               | - On pressing <kbd>**Ctrl**</kbd>/<kbd>**Cmd**</kbd>+<kbd>**C**</kbd>, add the cell's value to the clipboard         |\n     * | `false`<br>(default for the [`password`](@/guides/cell-types/password-cell-type/password-cell-type.md) [cell type](#type))        | - On pressing <kbd>**Ctrl**</kbd>/<kbd>**Cmd**</kbd>+<kbd>**C**</kbd>, add an empty string (`\"\"`) to the clipboard   |\n     *\n     * Read more:\n     * - [Clipboard](@/guides/cell-features/clipboard/clipboard.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [Password cell type](@/guides/cell-types/password-cell-type/password-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable copying for each cell of the entire grid\n     * copyable: true,\n     *\n     * // enable copying for individual columns\n     * columns: [\n     *   {\n     *     // enable copying for each cell of this column\n     *     copyable: true\n     *   },\n     *   {\n     *     // disable copying for each cell of this column\n     *     copyable: false\n     *   }\n     * ]\n     *\n     * // enable copying for specific cells\n     * cell: [\n     *   {\n     *     col: 0,\n     *     row: 0,\n     *     // disable copying for cell (0, 0)\n     *     copyable: false,\n     *   }\n     * ],\n     * ```\n     */\n    copyable: true,\n\n    /**\n     * The `copyPaste` option configures the [`CopyPaste`](@/api/copyPaste.md) plugin.\n     *\n     * You can set the `copyPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                            |\n     * | ----------------- | ---------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default)  | Enable the [`CopyPaste`](@/api/copyPaste.md) plugin with the default configuration                                     |\n     * | `false`           | Disable the [`CopyPaste`](@/api/copyPaste.md) plugin                                                                   |\n     * | An object         | - Enable the [`CopyPaste`](@/api/copyPaste.md) plugin<br>- Modify the [`CopyPaste`](@/api/copyPaste.md) plugin options |\n     *\n     * ##### copyPaste: Additional options\n     *\n     * If you set the `copyPaste` option to an object, you can set the following `CopyPaste` plugin options:\n     *\n     * | Option                   | Possible settings                                  | Description                                                                                                                                                                                         |\n     * | ------------------------ | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `columnsLimit`           | A number (default: `Infinity`)                     | The maximum number of columns that can be copied                                                                                                                                                    |\n     * | `rowsLimit`              | A number (default: `Infinity`)                     | The maximum number of columns that can be copied                                                                                                                                                    |\n     * | `pasteMode`              | `'overwrite'` \\| `'shift_down'` \\| `'shift_right'` | When pasting:<br>`'overwrite'`: overwrite the currently-selected cells<br>`'shift_down'`: move the currently-selected cells down<br>`'shift_right'`: move the currently-selected cells to the right |\n     * | `copyColumnHeaders`      | Boolean (default: `false`)                         | `true`: add a context menu option for copying cells along with their nearest column headers                                                                                                         |\n     * | `copyColumnGroupHeaders` | Boolean (default: `false`)                         | `true`: add a context menu option for copying cells along with all their related columns headers                                                                                                    |\n     * | `copyColumnHeadersOnly`  | Boolean (default: `false`)                         | `true`: add a context menu option for copying column headers nearest to the selected cells (without copying cells)                                                                    |\n     * | `uiContainer`            | An HTML element                                    | The UI container for the secondary focusable element                                                                                                                                                |\n     *\n     * Read more:\n     * - [Plugins: `CopyPaste`](@/api/copyPaste.md)\n     * - [Guides: Clipboard](@/guides/cell-features/clipboard/clipboard.md)\n     *\n     * @memberof Options#\n     * @type {object|boolean}\n     * @default true\n     * @category CopyPaste\n     *\n     * @example\n     * ```js\n     * // enable the plugin with the default configuration\n     * copyPaste: true // set by default\n     *\n     * // disable the plugin\n     * copyPaste: false,\n     *\n     * // enable the plugin with a custom configuration\n     * copyPaste: {\n     *   // set a maximum number of columns that can be copied\n     *   columnsLimit: 25,\n     *\n     *   // set a maximum number of rows that can be copied\n     *   rowsLimit: 50,\n     *\n     *   // set the paste behavior\n     *   pasteMode: 'shift_down',\n     *\n     *   // add the option to copy cells along with their nearest column headers\n     *   copyColumnHeaders: true,\n     *\n     *   // add the option to copy cells along with all their related columns headers\n     *   copyColumnGroupHeaders: true,\n     *\n     *   // add the option to copy just column headers (without copying cells)\n     *   copyColumnHeadersOnly: true,\n     *\n     *   // set a UI container\n     *   uiContainer: document.body,\n     * },\n     * ```\n     */\n    copyPaste: true,\n\n    /**\n     * The `correctFormat` option configures whether incorrectly-formatted times and dates are amended or not.\n     *\n     * When the user enters dates and times, Handsontable can automatically adjust their format\n     * to match the [`dateFormat`](#dateFormat) and [`timeFormat`](@/guides/cell-types/time-cell-type/time-cell-type.md) settings.\n     *\n     * You can set the `correctFormat` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                                               |\n     * | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Don't correct the format of the entered date or time (treat the entered date or time as invalid)                                                          |\n     * | `true`            | Correct the format of the entered date or time to match the [`dateFormat`](#dateFormat) or [`timeFormat`](@/guides/cell-types/time-cell-type/time-cell-type.md) settings |\n     *\n     * Read more:\n     * - [Date cell type](@/guides/cell-types/date-cell-type/date-cell-type.md)\n     * - [Time cell type](@/guides/cell-types/time-cell-type/time-cell-type.md)\n     * - [`dateFormat`](#dateFormat)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `date`\n     *   type: 'date',\n     *   // for every `date` cell of this column, set the date format to `YYYY-MM-DD`\n     *   dateFormat: 'YYYY-MM-DD',\n     *   // enforce the `YYYY-MM-DD` date format\n     *   correctFormat: true\n     *   },\n     *\n     *   {\n     *   // set the `type` of each cell in this column to `time`\n     *   type: 'time',\n     *   // for every `time` cell of this column, set the time format to `h:mm:ss a`\n     *   timeFormat: 'h:mm:ss a',\n     *   // enforce the `h:mm:ss a` time format\n     *   correctFormat: true\n     *   },\n     * ],\n     * ```\n     */\n    correctFormat: false,\n\n    /**\n     * The `currentColClassName` option lets you add a CSS class name\n     * to each cell of the currently-visible, currently-selected columns.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to each cell of the currently-visible, currently-selected columns\n     * currentColClassName: 'your-class-name',\n     * ```\n     */\n    currentColClassName: undefined,\n\n    /**\n     * The `currentHeaderClassName` option lets you add a CSS class name\n     * to every currently-visible, currently-selected header.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'ht__highlight'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `ht__highlight` CSS class name\n     * // to every currently-visible, currently-selected header\n     * currentHeaderClassName: 'ht__highlight',\n     * ```\n     */\n    currentHeaderClassName: 'ht__highlight',\n\n    /**\n     * The `currentRowClassName` option lets you add a CSS class name\n     * to each cell of the currently-visible, currently-selected rows.\n     *\n     * Read more:\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to each cell of the currently-visible, currently-selected rows\n     * currentRowClassName: 'your-class-name',\n     * ```\n     */\n    currentRowClassName: undefined,\n\n    /**\n     * @description\n     * The `customBorders` option configures the [`CustomBorders`](@/api/customBorders.md) plugin.\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * (and add its menu items to the [context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)),\n     * set the `customBorders` option to `true`.\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * and add a predefined border around a particular cell,\n     * set the `customBorders` option to an array of objects.\n     * Each object represents a border configuration for one cell, and has the following properties:\n     *\n     * | Property | Sub-properties     | Types                              | Description                                                       |\n     * | -------- | ------------------ | ---------------------------------- | ----------------------------------------------------------------- |\n     * | `row`    | -                  | `row`: Number                      | The cell's row coordinate.                                        |\n     * | `col`    | -                  | `col`: Number                      | The cell's column coordinate.                                     |\n     * | `start`  | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `start` sets the width (`width`) and color (`color`) of the left-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `start` sets the width (`width`) and color (`color`) of the right-hand border. |\n     * | `end`    | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `end` sets the width (`width`) and color (`color`) of the right-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `end` sets the width (`width`) and color (`color`) of the left-hand border. |\n     * | `top`    | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the width (`width`) and color (`color`) of the top border. |\n     * | `bottom` | `width`<br>`color` | `width`: Number<br>`color`: String | Sets the width (`width`) and color (`color`) of the bottom border. |\n     *\n     * To enable the [`CustomBorders`](@/api/customBorders.md) plugin\n     * and add a predefined border around a range of cells,\n     * set the `customBorders` option to an array of objects.\n     * Each object represents a border configuration for a single range of cells, and has the following properties:\n     *\n     * | Property | Sub-properties                               | Types                                                            | Description                                                                                  |\n     * | -------- | -------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |\n     * | `range`  | `from` {`row`, `col`}<br>`to` {`row`, `col`} | `from`: Object<br>`to`: Object<br>`row`: Number<br>`col`: Number | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default):<br>- `from` selects the range's top-left corner.<br>- `to` selects the range's bottom-right corner.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: <br>- `from` selects the range's top-right corner.<br>- `to` selects the range's bottom-left corner. |\n     * | `start`  | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `start` sets the width (`width`) and color (`color`) of the left-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `start` sets the width (`width`) and color (`color`) of the right-hand border. |\n     * | `end`    | `width`<br>`color` | `width`: Number<br>`color`: String | If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default): `end` sets the width (`width`) and color (`color`) of the right-hand border.<br><br>If the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL: `end` sets the width (`width`) and color (`color`) of the left-hand border. |\n     * | `top`    | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the width (`width`) and color (`color`) of the top border. |\n     * | `bottom` | `width`<br>`color`                           | `width`: Number<br>`color`: String                               | Sets the width (`width`) and color (`color`) of the bottom border. |\n     *\n     * Read more:\n     * - [Formatting cells: Custom cell borders](@/guides/cell-features/formatting-cells/formatting-cells.md#custom-cell-borders)\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [Plugins: `CustomBorders`](@/api/customBorders.md)\n     * - [Layout direction](@/guides/internationalization/layout-direction/layout-direction.md)\n     * - [`layoutDirection`](#layoutDirection)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category CustomBorders\n     *\n     * @example\n     * ```js\n     * // enable the `CustomBorders` plugin\n     * customBorders: true,\n     *\n     * // enable the `CustomBorders` plugin\n     * // and add a predefined border for a particular cell\n     * customBorders: [\n     *   // add an object with a border configuration for one cell\n     *   {\n     *     // set the cell's row coordinate\n     *     row: 2,\n     *     // set the cell's column coordinate\n     *     col: 2,\n     *     // set the left/right border's width and color\n     *     start: {\n     *       width: 2,\n     *       color: 'red'\n     *     },\n     *     // set the right/left border's width and color\n     *     end: {\n     *       width: 1,\n     *       color: 'green'\n     *     },\n     *     // set the top border's width and color\n     *     top: '',\n     *     // set the bottom border's width and color\n     *     bottom: ''\n     *   }\n     * ],\n     *\n     * // enable the `CustomBorders` plugin\n     * // and add a predefined border for a range of cells\n     * customBorders: [\n     *   // add an object with a border configuration for one range of cells\n     *   {\n     *     // select a range of cells\n     *     range: {\n     *       // set the range's top-left corner\n     *       from: {\n     *         row: 1,\n     *         col: 1\n     *       },\n     *       // set the range's bottom-right corner\n     *       to: {\n     *         row: 3,\n     *         col: 4\n     *       }\n     *     },\n     *     // set the left/right border's width and color\n     *     start: {\n     *       width: 2,\n     *       color: 'red'\n     *     },\n     *     // set the right/left border's width and color\n     *     end: {},\n     *     // set the top border's width and color\n     *     top: {},\n     *     // set the bottom border's width and color\n     *     bottom: {}\n     *   }\n     * ],\n     * ```\n     */\n    customBorders: false,\n\n    /**\n     * @description\n     * The `data` option sets the initial [data](@/guides/getting-started/binding-to-data/binding-to-data.md) of your Handsontable instance.\n     *\n     * Handsontable's data is bound to your source data by reference (i.e. when you edit Handsontable's data, your source data alters as well).\n     *\n     * You can set the `data` option:\n     * - Either to an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).\n     * - Or to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects).\n     *\n     * If you don't set the `data` option (or set it to `null`), Handsontable renders as an empty 5x5 grid by default.\n     *\n     * Read more:\n     * - [Binding to data](@/guides/getting-started/binding-to-data/binding-to-data.md)\n     * - [`dataSchema`](#dataSchema)\n     * - [`startRows`](#startRows)\n     * - [`startCols`](#startCols)\n     *\n     * @memberof Options#\n     * @type {Array[]|object[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // as an array of arrays\n     * data: [\n     *   ['A', 'B', 'C'],\n     *   ['D', 'E', 'F'],\n     *   ['G', 'H', 'J']\n     * ]\n     *\n     * // as an array of objects\n     * data: [\n     *   {id: 1, name: 'Ted Right'},\n     *   {id: 2, name: 'Frank Honest'},\n     *   {id: 3, name: 'Joan Well'},\n     *   {id: 4, name: 'Gail Polite'},\n     *   {id: 5, name: 'Michael Fair'},\n     * ]\n     * ```\n     */\n    data: undefined,\n\n    /**\n     * @description\n     * If `true`, Handsontable will interpret the dots in the columns mapping as a nested object path. If your dataset contains\n     * the dots in the object keys and you don't want Handsontable to interpret them as a nested object path, set this option to `false`.\n     *\n     * The option only works when defined in the global table settings.\n     *\n     * @since 14.4.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // All dots are interpreted as nested object paths\n     * dataDotNotation: true,\n     * data: [\n     *   { id: 1, name: { first: 'Ted', last: 'Right' }, user: { address: '1234 Any Street' } },\n     * ],\n     * columns={[\n     *   { data: 'name.first' },\n     *   { data: 'user.address' },\n     * ]},\n     * ```\n     * ```js\n     * // All dots are interpreted as simple object keys\n     * dataDotNotation: false,\n     * data: [\n     *   { id: 1, 'name.first': 'Ted', 'user.address': '1234 Any Street' },\n     * ],\n     * columns={[\n     *   { data: 'name.first' },\n     *   { data: 'user.address' },\n     * ]},\n     * ```\n     */\n    dataDotNotation: true,\n\n    /**\n     * @description\n     * When the [`data`](#data) option is set to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects)\n     * (or is empty), the `dataSchema` option defines the structure of new rows.\n     *\n     * Using the `dataSchema` option, you can start out with an empty grid.\n     *\n     * You can set the `dataSchema` option to one of the following:\n     * - An object\n     * - A function\n     *\n     * Read more:\n     * - [Binding to data: Array of objects with custom data schema](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects-with-custom-data-schema)\n     * - [Binding to data: Function data source and schema](@/guides/getting-started/binding-to-data/binding-to-data.md#function-data-source-and-schema)\n     * - [`data`](#data)\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // with `dataSchema`, you can start with an empty grid\n     * data: null,\n     * dataSchema: {id: null, name: {first: null, last: null}, address: null},\n     * colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],\n     * columns: [\n     *   {data: 'id'},\n     *   {data: 'name.first'},\n     *   {data: 'name.last'},\n     *   {data: 'address'}\n     * ],\n     * startRows: 5,\n     * minSpareRows: 1\n     * ```\n     */\n    dataSchema: undefined,\n\n    /**\n     * The `dateFormat` option configures the date format accepted by [`date`](@/guides/cell-types/date-cell-type/date-cell-type.md) cells.\n     *\n     * You can set the `dateFormat` option to a string with a proper date format. The default value is: `'DD/MM/YYYY'`.\n     *\n     * To automatically correct dates whose format doesn't match the `dateFormat` setting, use the [`correctFormat`](#correctFormat) option.\n     *\n     * Read more:\n     * - [Date cell type](@/guides/cell-types/date-cell-type/date-cell-type.md)\n     * - [`correctFormat`](#correctFormat)\n     * - [`defaultDate`](#defaultDate)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'DD/MM/YYYY'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `date`\n     *   type: 'date',\n     *   // for every `date` cell of this column, set the date format to `YYYY-MM-DD`\n     *   dateFormat: 'YYYY-MM-DD',\n     *   },\n     * ],\n     * ```\n     */\n    dateFormat: 'DD/MM/YYYY',\n\n    /**\n     * The `timeFormat` option configures the time format accepted by [`time`](@/guides/cell-types/time-cell-type/time-cell-type.md) cells.\n     *\n     * You can set the `timeFormat` option to a string with a proper time format. The default value is: `'h:mm:ss a'`.\n     *\n     * To automatically correct times whose format doesn't match the `timeFormat` setting, use the [`correctFormat`](#correctFormat) option.\n     *\n     * Read more:\n     * - [Time cell type](@/guides/cell-types/time-cell-type/time-cell-type.md)\n     * - [`correctFormat`](#correctFormat)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'h:mm:ss a'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `time`\n     *   type: 'time',\n     *   // for every `time` cell of this column, set the time format to `h:mm:ss a`\n     *   timeFormat: 'h:mm:ss a',\n     *   },\n     * ],\n     * ```\n     */\n    timeFormat: 'h:mm:ss a',\n\n    /**\n     * The `datePickerConfig` option configures the `date` [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)'s date picker, which uses an external dependency: [Pikaday](https://github.com/Pikaday/Pikaday/tree/1.8.2).\n     *\n     * You can set the `datePickerConfig` option to an object with any of the available [Pikaday options](https://github.com/Pikaday/Pikaday/tree/1.8.2#configuration),\n     * except for the following, which are always overwritten by the `date` [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md):\n     * - `bound`\n     * - `container`\n     * - `field`\n     * - `trigger`\n     *\n     * If the `datePickerConfig` option is not defined, the `date` [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) overwrites the following [Pikaday options](https://github.com/Pikaday/Pikaday/tree/1.8.2#configuration) as well:\n     *\n     * | Pikaday option       | Handsontable's setting |\n     * | -------------------- | ---------------------- |\n     * | `format`             | `'DD/MM/YYYY'`         |\n     * | `reposition`         | `false`                |\n     *\n     * Read more:\n     * - [`editor`](#editor)\n     * - [`dateFormat`](#dateFormat)\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [All Pikaday options &#8594;](https://github.com/Pikaday/Pikaday/tree/1.8.2#configuration)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Core\n     */\n    datePickerConfig: undefined,\n\n    /**\n     * The `defaultDate` option configures the date displayed\n     * in empty [`date`](@/guides/cell-types/date-cell-type/date-cell-type.md) cells.\n     *\n     * You can set the `defaultDate` option to a string.\n     *\n     * Read more:\n     * - [Date cell type](@/guides/cell-types/date-cell-type/date-cell-type.md)\n     * - [`dateFormat`](#dateFormat)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `date`\n     *     type: 'date',\n     *     // in every empty `date` cell of this column, display `2015-02-02`\n     *     defaultDate: '2015-02-02'\n     *   }\n     * ],\n     * ```\n     */\n    defaultDate: undefined,\n\n    /**\n     * @description\n     * The `disableVisualSelection` option configures how\n     * [selection](@/guides/cell-features/selection/selection.md) is shown.\n     *\n     * You can set the `disableVisualSelection` option to one of the following:\n     *\n     * | Setting           | Description                                                                                         |\n     * | ----------------- | --------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | - Show single-cell selection<br>- Show range selection<br>- Show header selection                   |\n     * | `true`            | - Don't show single-cell selection<br>- Don't show range selection<br>- Don't show header selection |\n     * | `'current'`       | - Don't show single-cell selection<br>- Show range selection<br>- Show header selection             |\n     * | `'area'`          | - Show single-cell selection<br>- Don't show range selection<br>- Show header selection             |\n     * | `'header'`        | - Show single-cell selection<br>- Show range selection<br>- Don't show header selection             |\n     * | An array          | A combination of `'current'`, `'area'`, and/or `'header'`                                           |\n     *\n     * Read more:\n     * - [Selection](@/guides/cell-features/selection/selection.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string|string[]}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't show single-cell selection\n     * // don't show range selection\n     * // don't show header selection\n     * disableVisualSelection: true,\n     *\n     * // don't show single-cell selection\n     * // show range selection\n     * // show header selection\n     * disableVisualSelection: 'current',\n     *\n     * // don't show single-cell selection\n     * // don't show range selection\n     * // show header selection\n     * disableVisualSelection: ['current', 'area'],\n     * ```\n     */\n    disableVisualSelection: false,\n\n    /**\n     * @description\n     * The `dragToScroll` option configures the [`DragToScroll`](@/api/dragToScroll.md) plugin.\n     *\n     * You can set the `dragToScroll` option to one of the following:\n     *\n     * | Setting          | Description                                                                 |\n     * | ---------------- | --------------------------------------------------------------------------- |\n     * | `true` (default) | When selection reaches the edge of the grid's viewport, scroll the viewport |\n     * | `false`          | Don't scroll the viewport                                                   |\n     *\n     * Read more:\n     * - [Plugins: `DragToScroll`](@/api/dragToScroll.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category DragToScroll\n     *\n     * @example\n     * ```js\n     * // when selection reaches the edge of the grid's viewport, scroll the viewport\n     * dragToScroll: true,\n     * ```\n     */\n    dragToScroll: true,\n\n    /**\n     * The `dropdownMenu` option configures the [`DropdownMenu`](@/api/dropdownMenu.md) plugin.\n     *\n     * You can set the `dropdownMenu` option to one of the following:\n     *\n     * | Setting   | Description                                                                                                                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin                                                                                                                                   |\n     * | `true`    | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Use the [default context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-default-options)    |\n     * | An array  | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Modify [individual context menu options](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options) |\n     * | An object | - Enable the [`DropdownMenu`](@/api/dropdownMenu.md) plugin<br>- Apply a custom dropdown menu configuration                                                                                  |\n     *\n     * Read more:\n     * - [Context menu](@/guides/accessories-and-menus/context-menu/context-menu.md)\n     * - [Plugins: `DropdownMenu`](@/api/dropdownMenu.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object|string[]}\n     * @default undefined\n     * @category DropdownMenu\n     *\n     * @example\n     * ```js\n     * // enable the `DropdownMenu` plugin\n     * // use the default context menu options\n     * dropdownMenu: true,\n     *\n     * // enable the `DropdownMenu` plugin\n     * // and modify individual context menu options\n     * dropdownMenu: ['---------', 'undo', 'redo'],\n     *\n     * // enable the `DropdownMenu` plugin\n     * // and apply a custom dropdown menu configuration\n     * dropdownMenu: {\n     *   items: {\n     *     'option1': {\n     *       name: 'Option 1'\n     *     },\n     *     'option2': {\n     *       name: 'Option 2',\n     *       submenu: {\n     *         items: [\n     *           {\n     *             key: 'option2:suboption1',\n     *             name: 'Suboption 1',\n     *             callback(key, options) {\n     *               ...\n     *             }\n     *           },\n     *           ...\n     *         ]\n     *       }\n     *     }\n     *   }\n     * },\n     * ```\n     */\n    dropdownMenu: undefined,\n\n    /**\n     * The `editor` option sets a [cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) for a cell.\n     *\n     * You can set the `editor` option to one of the following [cell editor aliases](@/guides/cell-functions/cell-editor/cell-editor.md):\n     *\n     * | Alias               | Cell editor function                                                       |\n     * | ------------------- | -------------------------------------------------------------------------- |\n     * | A custom alias      | Your [custom cell editor](@/guides/cell-functions/cell-editor/cell-editor.md) function |\n     * | `'autocomplete'`    | `AutocompleteEditor`                                                       |\n     * | `'base'`            | `BaseEditor`                                                               |\n     * | `'checkbox'`        | `CheckboxEditor`                                                           |\n     * | `'date'`            | `DateEditor`                                                               |\n     * | `'dropdown'`        | `DropdownEditor`                                                           |\n     * | `'handsontable'`    | `HandsontableEditor`                                                       |\n     * | `'numeric'`         | `NumericEditor`                                                            |\n     * | `'password'`        | `PasswordEditor`                                                           |\n     * | `'select'`          | `SelectEditor`                                                             |\n     * | `'text'`            | `TextEditor`                                                               |\n     * | `'time'`            | `TimeEditor`                                                               |\n     *\n     * To disable editing cells through cell editors,\n     * set the `editor` option to `false`.\n     * You'll still be able to change cells' content through Handsontable's API\n     * or through plugins (e.g. [`CopyPaste`](@/api/copyPaste.md)), though.\n     *\n     * To set the [`editor`](#editor), [`renderer`](#renderer), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {string|Function|boolean}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // use the `numeric` editor for each cell of the entire grid\n     * editor: 'numeric',\n     *\n     * // apply the `editor` option to individual columns\n     * columns: [\n     *   {\n     *     // use the `autocomplete` editor for each cell of this column\n     *     editor: 'autocomplete'\n     *   },\n     *   {\n     *     // disable editing cells through cell editors for each cell of this column\n     *     editor: false\n     *   }\n     * ]\n     * ```\n     */\n    editor: undefined,\n\n    /**\n     * The `enterBeginsEditing` option configures the action of the <kbd>**Enter**</kbd> key.\n     *\n     * You can set the `enterBeginsEditing` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                                                                                                               |\n     * | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | - On pressing <kbd>**Enter**</kbd> once, enter the editing mode of the active cell<br>- On pressing <kbd>**Enter**</kbd> twice, move to another cell,<br>as configured by the [`enterMoves`](#enterMoves) setting |\n     * | `false`          | - On pressing <kbd>**Enter**</kbd> once, move to another cell,<br>as configured by the [`enterMoves`](#enterMoves) setting                                                                                    |\n     *\n     * Read more:\n     * - [`enterMoves`](#enterMoves)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // press Enter once to start editing\n     * // press Enter twice to move to another cell\n     * enterBeginsEditing: true,\n     *\n     * // press Enter once to move to another cell\n     * enterBeginsEditing: false,\n     * ```\n     */\n    enterBeginsEditing: true,\n\n    /**\n     * The `enterMoves` option configures the action of the <kbd>**Enter**</kbd> key.\n     *\n     * If the [`enterBeginsEditing`](#enterBeginsEditing) option is set to `true`,\n     * the `enterMoves` setting applies to the **second** pressing of the <kbd>**Enter**</kbd> key.\n     *\n     * If the [`enterBeginsEditing`](#enterBeginsEditing) option is set to `false`,\n     * the `enterMoves` setting applies to the **first** pressing of the <kbd>**Enter**</kbd> key.\n     *\n     * You can set the `enterMoves` option to an object with the following properties\n     * (or to a function that returns such an object):\n     *\n     * | Property | Type   | Description                                                                                                                                              |\n     * | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `col`    | Number | - On pressing <kbd>**Enter**</kbd>, move selection `col` columns right<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Enter**</kbd>, move selection `col` columns left |\n     * | `row`    | Number | - On pressing <kbd>**Enter**</kbd>, move selection `row` rows down<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Enter**</kbd>, move selection `row` rows up          |\n     *\n     * Read more:\n     * - [`enterBeginsEditing`](#enterBeginsEditing)\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default {col: 0, row: 1}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on pressing Enter, move selection 1 column right and 1 row down\n     * // on pressing Shift+Enter, move selection 1 column left and 1 row up\n     * enterMoves: {col: 1, row: 1},\n     *\n     * // the same setting, as a function\n     * // `event` is a DOM Event object received on pressing Enter\n     * // you can use it to check whether the user pressed Enter or Shift+Enter\n     * enterMoves(event) {\n     *   return {col: 1, row: 1};\n     * },\n     * ```\n     */\n    enterMoves: { col: 0, row: 1 },\n\n    /**\n     * The `fillHandle` option configures the [Autofill](@/api/autofill.md) plugin.\n     *\n     * You can set the `fillHandle` option to one the following:\n     *\n     * | Setting        | Description                                                                |\n     * | -------------- | -------------------------------------------------------------------------- |\n     * | `true`         | - Enable autofill in all directions<br>- Add the fill handle               |\n     * | `false`        | Disable autofill                                                           |\n     * | `'vertical'`   | - Enable vertical autofill<br>- Add the fill handle                        |\n     * | `'horizontal'` | - Enable horizontal autofill<br>- Add the fill handle                      |\n     * | An object      | - Enable autofill<br>- Add the fill handle<br>- Configure autofill options |\n     *\n     * If you set the `fillHandle` option to an object, you can configure the following autofill options:\n     *\n     * | Option          | Possible settings              | Description                                                                                               |\n     * | --------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------- |\n     * | `autoInsertRow` | `true` (default) \\| `false`    | `true`: When you reach the grid's bottom, add new rows<br>`false`: When you reach the grid's bottom, stop |\n     * | `direction`     | `'vertical'` \\| `'horizontal'` | `'vertical'`: Enable vertical autofill<br>`'horizontal'`: Enable horizontal autofill                      |\n     *\n     * Read more:\n     * - [AutoFill values](@/guides/cell-features/autofill-values/autofill-values.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string|object}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable autofill in all directions\n     * // with `autoInsertRow` enabled\n     * fillHandle: true,\n     *\n     * // enable vertical autofill\n     * // with `autoInsertRow` enabled\n     * fillHandle: 'vertical',\n     *\n     * // enable horizontal autofill\n     * // with `autoInsertRow` enabled\n     * fillHandle: 'horizontal',\n     *\n     * // enable autofill in all directions\n     * // with `autoInsertRow` disabled\n     * fillHandle: {\n     *   autoInsertRow: false,\n     * },\n     *\n     * // enable vertical autofill\n     * // with `autoInsertRow` disabled\n     * fillHandle: {\n     *   autoInsertRow: false,\n     *   direction: 'vertical'\n     * },\n     * ```\n     */\n    fillHandle: {\n      autoInsertRow: false,\n    },\n\n    /**\n     * The `filter` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells'\n     * lists are updated by the end user's input.\n     *\n     * You can set the `filter` option to one of the following:\n     *\n     * | Setting          | Description                                                                                                           |\n     * | ---------------- | --------------------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | When the end user types into the input area, only options matching the input are displayed                            |\n     * | `false`          | When the end user types into the input area, all options are displayed<br>(options matching the input are put in bold |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     * - [`filteringCaseSensitive`](#filteringCaseSensitive)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C'],\n     *   // when the end user types in `A`, display only the A option\n     *   // when the end user types in `B`, display only the B option\n     *   // when the end user types in `C`, display only the C option\n     *   filter: true\n     * }],\n     * ```\n     */\n    filter: true,\n\n    /**\n     * The `filteringCaseSensitive` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells'\n     * input is case-sensitive.\n     *\n     * You can set the `filteringCaseSensitive` option to one of the following:\n     *\n     * | Setting           | Description                                                                                        |\n     * | ----------------- | -------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells' input is not case-sensitive |\n     * | `true`            | [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells' input is case-sensitive     |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     * - [`filter`](#filter)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     source: [ ... ],\n     *     // match case while searching autocomplete options\n     *     filteringCaseSensitive: true\n     *   }\n     * ],\n     * ```\n     */\n    filteringCaseSensitive: false,\n\n    /**\n     * The `filters` option configures the [`Filters`](@/api/filters.md) plugin.\n     *\n     * You can set the `filters` option to one of the following:\n     *\n     * | Setting | Description                                      |\n     * | ------- | ------------------------------------------------ |\n     * | `false` | Disable the [`Filters`](@/api/filters.md) plugin |\n     * | `true`  | Enable the [`Filters`](@/api/filters.md) plugin  |\n     *\n     * Read more:\n     * - [Column filter](@/guides/columns/column-filter/column-filter.md)\n     * - [Plugins: `Filters`](@/api/filters.md)\n     * - [`dropdownMenu`](#dropdownMenu)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category Filters\n     *\n     * @example\n     * ```js\n     * // enable the `Filters` plugin\n     * filters: true,\n     * ```\n     */\n    filters: undefined,\n\n    /**\n     * `fixedColumnsLeft` is a legacy option.\n     *\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default), `fixedColumnsLeft` acts like the [`fixedColumnsStart`](#fixedColumnsStart) option.\n     *\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL, using `fixedColumnsLeft` throws an error.\n     *\n     * Use [`fixedColumnsStart`](#fixedColumnsStart), which works in any layout direction.\n     *\n     * Read more:\n     * - [`fixedColumnsStart`](#fixedcolumnsstart)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the first 3 columns from the left\n     * fixedColumnsLeft: 3,\n     * ```\n     */\n    fixedColumnsLeft: 0,\n\n    /**\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is LTR (default), the `fixedColumnsStart` option sets the number of [frozen columns](@/guides/columns/column-freezing/column-freezing.md) at the left-hand edge of the grid.\n     *\n     * If your grid's [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) is RTL, the `fixedColumnsStart` option sets the number of [frozen columns](@/guides/columns/column-freezing/column-freezing.md) at the right-hand edge of the grid.\n     *\n     * Read more:\n     * - [Column freezing](@/guides/columns/column-freezing/column-freezing.md)\n     * - [Layout direction](@/guides/internationalization/layout-direction/layout-direction.md)\n     * - [`fixedColumnsLeft`](#fixedcolumnsleft)\n     * - [`layoutDirection`](#layoutDirection)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // when `layoutDirection` is set to `inherit` (default)\n     * // freeze the first 3 columns from the left or from the right\n     * // depending on your HTML document's `dir` attribute\n     * layoutDirection: 'inherit',\n     * fixedColumnsStart: 3,\n     *\n     * // when `layoutDirection` is set to `rtl`\n     * // freeze the first 3 columns from the right\n     * // regardless of your HTML document's `dir` attribute\n     * layoutDirection: 'rtl',\n     * fixedColumnsStart: 3,\n     *\n     * // when `layoutDirection` is set to `ltr`\n     * // freeze the first 3 columns from the left\n     * // regardless of your HTML document's `dir` attribute\n     * layoutDirection: 'ltr',\n     * fixedColumnsStart: 3,\n     * ```\n     */\n    fixedColumnsStart: 0,\n\n    /**\n     * The `fixedRowsBottom` option sets the number of [frozen rows](@/guides/rows/row-freezing/row-freezing.md)\n     * at the bottom of the grid.\n     *\n     * Read more:\n     * - [Row freezing](@/guides/rows/row-freezing/row-freezing.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the bottom 3 rows\n     * fixedRowsBottom: 3,\n     * ```\n     */\n    fixedRowsBottom: 0,\n\n    /**\n     * The `fixedRowsTop` option sets the number of [frozen rows](@/guides/rows/row-freezing/row-freezing.md) at the top of the grid.\n     *\n     * Read more:\n     * - [Row freezing](@/guides/rows/row-freezing/row-freezing.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // freeze the top 3 rows\n     * fixedRowsTop: 3,\n     * ```\n     */\n    fixedRowsTop: 0,\n\n    /**\n     * The `formulas` option configures the [`Formulas`](@/api/formulas.md) plugin.\n     *\n     * The [`Formulas`](@/api/formulas.md) plugin uses the [HyperFormula](https://handsontable.github.io/hyperformula/) calculation engine.\n     * To install [HyperFormula](https://handsontable.github.io/hyperformula/), read the following:\n     * - [Formula calculation: Initialization methods](@/guides/formulas/formula-calculation/formula-calculation.md#initialization-methods)\n     *\n     * You can set the `formulas` option to an object with the following properties:\n     *\n     * | Property    | Possible values                                                                                                                                                                                                        |\n     * | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `engine`    | `HyperFormula` \\|<br>A [HyperFormula](https://handsontable.github.io/hyperformula/) instance \\|<br>A [HyperFormula configuration](https://handsontable.github.io/hyperformula/api/interfaces/configparams.html) object |\n     * | `sheetId`   | A number                                                                                                                                                                                                               |\n     * | `sheetName` | A string                                                                                                                                                                                                               |\n     *\n     * Read more:\n     * - [Plugins: `Formulas`](@/api/formulas.md)\n     * - [Formula calculation](@/guides/formulas/formula-calculation/formula-calculation.md)\n     * - [HyperFormula documentation: Client-side installation](https://handsontable.github.io/hyperformula/guide/client-side-installation)\n     * - [HyperFormula documentation: Configuration options](https://handsontable.github.io/hyperformula/api/interfaces/configparams.html)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Formulas\n     *\n     * @example\n     * ```js\n     * // either add the `HyperFormula` class\n     * formulas: {\n     *   // set `engine` to `HyperFormula`\n     *   engine: HyperFormula,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // or, add a HyperFormula instance\n     * // initialized with the `'internal-use-in-handsontable'` license key\n     * const hyperformulaInstance = HyperFormula.buildEmpty({\n     *   licenseKey: 'internal-use-in-handsontable',\n     * });\n     *\n     * formulas: {\n     *   // set `engine` to a HyperFormula instance\n     *   engine: hyperformulaInstance,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // or, add a HyperFormula configuration object\n     * formulas: {\n     *   // set `engine` to a HyperFormula configuration object\n     *   engine: {\n     *     hyperformula: HyperFormula // or `engine: hyperformulaInstance`\n     *     leapYear1900: false,       // this option comes from HyperFormula\n     *     // add more HyperFormula configuration options\n     *   },\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // use the same HyperFormula instance in multiple Handsontable instances\n     *\n     * // a Handsontable instance `hot1`\n     * formulas: {\n     *   engine: HyperFormula,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     *\n     * // a Handsontable instance `hot2`\n     * formulas: {\n     *   engine: hot1.getPlugin('formulas').engine,\n     *   sheetId: 1,\n     *   sheetName: 'Sheet 1'\n     * }\n     * ```\n     */\n    formulas: undefined,\n\n    /**\n     * The `fragmentSelection` option configures text selection settings.\n     *\n     * You can set the `fragmentSelection` option to one of the following:\n     *\n     * | Setting           | Description                                        |\n     * | ----------------- | ------------------------------------------------- |\n     * | `false` (default) | Disable text selection                            |\n     * | `true`            | Enable text selection in multiple cells at a time |\n     * | `'cell'`          | Enable text selection in one cell at a time       |\n     *\n     * @memberof Options#\n     * @type {boolean|string}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable text selection in multiple cells at a time\n     * fragmentSelection: true,\n     *\n     * // enable text selection in one cell a time\n     * fragmentSelection: 'cell',\n     * ```\n     */\n    fragmentSelection: false,\n\n    /**\n     * The `headerClassName` option allows adding one or more class names to the column headers' inner `div` element.\n     * It can be used to align the labels in the column headers to left, center or right by setting this option to\n     * `htLeft`, `htCenter`, or `htRight` respectively.\n     *\n     * @since 14.5.0\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // Adding class names to all column headers\n     * headerClassName: 'htRight my-class',\n     *\n     * columns: [\n     *  {\n     *    // Adding class names to the column header of a single column\n     *    headerClassName: 'htRight my-class',\n     *  }\n     * ]\n     * ```\n     */\n    headerClassName: undefined,\n\n    /**\n     * The `height` option configures the height of your grid.\n     *\n     * You can set `height` option to one of the following:\n     *\n     * | Setting                                                                    | Example                    |\n     * | -------------------------------------------------------------------------- | -------------------------- |\n     * | A number of pixels                                                         | `height: 500`              |\n     * | A string with a [CSS unit](https://www.w3schools.com/cssref/css_units.asp) | `height: '75vw'`           |\n     * | A function that returns a valid number or string                           | `height() { return 500; }` |\n     *\n     * Read more:\n     * - [Grid size](@/guides/getting-started/grid-size/grid-size.md)\n     *\n     * @memberof Options#\n     * @type {number|string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the grid's height to 500px\n     * height: 500,\n     *\n     * // set the grid's height to 75vh\n     * height: '75vh',\n     *\n     * // set the grid's height to 500px, using a function\n     * height() {\n     *   return 500;\n     * },\n     * ```\n     */\n    height: undefined,\n\n    /**\n     * The `hiddenColumns` option configures the [`HiddenColumns`](@/api/hiddenColumns.md) plugin.\n     *\n     * You can set the `hiddenColumns` option to one of the following:\n     *\n     * | Setting   | Description                                                                                  |\n     * | --------- | -------------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin                                 |\n     * | `true`    | Enable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin with the default plugin options  |\n     * | An object | - Enable the [`HiddenColumns`](@/api/hiddenColumns.md) plugin<br>- Modify the plugin options |\n     *\n     * If you set the `hiddenColumns` to an object, you can set the following [`HiddenColumns`](@/api/hiddenColumns.md) plugin options:\n     *\n     * | Property           | Possible values     | Description                                                                                                                                             |\n     * | ------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `columns`          | An array of indexes | An array of indexes of columns that are hidden at initialization                                                                                        |\n     * | `copyPasteEnabled` | `true` \\| `false`   | `true`: when copying or pasting data, take hidden columns into account<br>`false`: when copying or pasting data, don't take hidden columns into account |\n     * | `indicators`       | `true` \\| `false`   | `true`: display UI markers to indicate the presence of hidden columns<br>`false`: display UI markers                                                    |\n     *\n     * Read more:\n     * - [Plugins: `HiddenColumns`](@/api/hiddenColumns.md)\n     * - [Column hiding](@/guides/columns/column-hiding/column-hiding.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category HiddenColumns\n     *\n     * @example\n     * ```js\n     * // enable the `HiddenColumns` plugin\n     * hiddenColumns: true,\n     *\n     * // enable `HiddenColumns` plugin, and modify the plugin options\n     * hiddenColumns: {\n     *   // set columns that are hidden by default\n     *   columns: [5, 10, 15],\n     *   // when copying or pasting data, take hidden columns into account\n     *   copyPasteEnabled: true,\n     *   // show where hidden columns are\n     *   indicators: true\n     * }\n     * ```\n     */\n    hiddenColumns: undefined,\n\n    /**\n     * The `hiddenRows` option configures the [`HiddenRows`](@/api/hiddenRows.md) plugin.\n     *\n     * You can set the `hiddenRows` option to one of the following:\n     *\n     * | Setting   | Description                                                                            |\n     * | --------- | -------------------------------------------------------------------------------------- |\n     * | `false`   | Disable the [`HiddenRows`](@/api/hiddenRows.md) plugin                                 |\n     * | `true`    | Enable the [`HiddenRows`](@/api/hiddenRows.md) plugin with the default plugin options  |\n     * | An object | - Enable the [`HiddenRows`](@/api/hiddenRows.md) plugin<br>- Modify the plugin options |\n     *\n     * If you set the `hiddenRows` to an object, you can set the following [`HiddenRows`](@/api/hiddenRows.md) plugin options:\n     *\n     * | Property           | Possible values     | Description                                                                                                                                       |\n     * | ------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `rows   `          | An array of indexes | An array of indexes of rows that are hidden at initialization                                                                                     |\n     * | `copyPasteEnabled` | `true` \\| `false`   | `true`: when copying or pasting data, take hidden rows into account<br>`false`: when copying or pasting data, don't take hidden rows into account |\n     * | `indicators`       | `true` \\| `false`   | `true`: display UI markers to indicate the presence of hidden rows<br>`false`: display UI markers                                                 |\n     *\n     * Read more:\n     * - [Plugins: `HiddenRows`](@/api/hiddenRows.md)\n     * - [Row hiding](@/guides/rows/row-hiding/row-hiding.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category HiddenRows\n     *\n     * @example\n     * ```js\n     * // enable the `HiddenRows` plugin\n     * hiddenRows: true,\n     *\n     * // enable `HiddenRows` plugin, and modify the plugin options\n     * hiddenRows: {\n     *   // set rows that are hidden by default\n     *   rows: [5, 10, 15],\n     *   // when copying or pasting data, take hidden rows into account\n     *   copyPasteEnabled: true,\n     *   // show where hidden rows are\n     *   indicators: true\n     * }\n     * ```\n     */\n    hiddenRows: undefined,\n\n    /**\n     * The `invalidCellClassName` option lets you add a CSS class name to cells\n     * that were marked as `invalid` by the [cell validator](@/guides/cell-functions/cell-validator/cell-validator.md).\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htInvalid'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `highlight-error` CSS class name\n     * // to every `invalid` cell`\n     * invalidCellClassName: 'highlight-error',\n     * ```\n     */\n    invalidCellClassName: 'htInvalid',\n\n    /**\n     * The `imeFastEdit` option allows using the \"fast edit\" feature for the IME users. It's disabled by default\n     * because of its incompatibility with some of the accessibility features.\n     *\n     * Enabling this option can make a negative impact on how some screen readers handle reading the table cells.\n     *\n     * @since 14.0.0\n     * @memberof Options#\n     * @type {boolean}\n     * @category Core\n     */\n    imeFastEdit: false,\n\n    /**\n     * The `isEmptyCol` option lets you define your own custom method\n     * for checking if a column at a given visual index is empty.\n     *\n     * The `isEmptyCol` setting overwrites the built-in [`isEmptyCol`](@/api/core.md#isEmptyCol) method.\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @param {number} col Visual column index.\n     * @returns {boolean}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // overwrite the built-in `isEmptyCol` method\n     * isEmptyCol(visualColumnIndex) {\n     *    // your custom method\n     *    ...\n     * },\n     * ```\n     */\n    isEmptyCol(col) {\n      let row;\n      let rowLen;\n      let value;\n\n      for (row = 0, rowLen = this.countRows(); row < rowLen; row++) {\n        value = this.getDataAtCell(row, col);\n\n        if (isEmpty(value) === false) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * The `isEmptyRow` option lets you define your own custom method\n     * for checking if a row at a given visual index is empty.\n     *\n     * The `isEmptyRow` setting overwrites the built-in [`isEmptyRow`](@/api/core.md#isEmptyRow) method.\n     *\n     * @memberof Options#\n     * @type {Function}\n     * @param {number} row Visual row index.\n     * @returns {boolean}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // overwrite the built-in `isEmptyRow` method\n     * isEmptyRow(visualRowIndex) {\n     *    // your custom method\n     *    ...\n     * },\n     * ```\n     */\n    isEmptyRow(row) {\n      let col;\n      let colLen;\n      let value;\n      let meta;\n\n      for (col = 0, colLen = this.countCols(); col < colLen; col++) {\n        value = this.getDataAtCell(row, col);\n\n        if (isEmpty(value) === false) {\n          if (typeof value === 'object') {\n            meta = this.getCellMeta(row, col);\n\n            return isObjectEqual(this.getSchema()[meta.prop], value);\n          }\n\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    /**\n     * @description\n     * The `label` option configures [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cells` labels.\n     *\n     * You can set the `label` option to an object with the following properties:\n     *\n     * | Property    | Possible values                   | Description                                                                                                                                                                                                             |\n     * | ----------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `position`  | `'after'` (default) \\| `'before'` | `'after'`: place the label to the right of the checkbox<br>`'before'`: place the label to the left of the checkbox                                                                                                      |\n     * | `value`     | A string \\| A function            | The label's text                                                                                                                                                                                                        |\n     * | `separated` | `false` (default) \\| `true`       | `false`: don't separate the label from the checkbox<br>`true`: separate the label from the checkbox                                                                                                                     |\n     * | `property`  | A string                          | - A [`data`](#data) object property name that's used as the label's text <br>- Works only when the [`data`](#data) option is set to an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects) |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox labels](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md#checkbox-labels)\n     *\n     * @memberof Options#\n     * @type {object}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   type: 'checkbox',\n     *   // add 'My label:' after the checkbox\n     *   label: { position: 'after', value: 'My label: ', separated: true }\n     * }],\n     * ```\n     */\n    label: undefined,\n\n    /**\n     * The `language` option configures Handsontable's [language](@/guides/internationalization/language/language.md) settings.\n     *\n     * You can set the `language` option to one of the following:\n     *\n     * | Setting             | Description                 |\n     * | ------------------- | --------------------------- |\n     * | `'en-US'` (default) | English - United States     |\n     * | `'ar-AR'`           | Arabic - Global<br><br>To properly render this language, set the [layout direction](@/guides/internationalization/layout-direction/layout-direction.md) to RTL. |\n     * | `'cs-CZ'`           | Czech - Czech Republic      |\n     * | `'de-CH'`           | German - Switzerland        |\n     * | `'de-DE'`           | German - Germany            |\n     * | `'es-MX'`           | Spanish - Mexico            |\n     * | `'fr-FR'`           | French - France             |\n     * | `'hr-HR'`           | Croatian - Croatia          |\n     * | `'it-IT'`           | Italian - Italy             |\n     * | `'ja-JP'`           | Japanese - Japan            |\n     * | `'ko-KR'`           | Korean - Korea              |\n     * | `'lv-LV'`           | Latvian - Latvia            |\n     * | `'nb-NO'`           | Norwegian (Bokmål) - Norway |\n     * | `'nl-NL'`           | Dutch - Netherlands         |\n     * | `'pl-PL'`           | Polish - Poland             |\n     * | `'pt-BR'`           | Portuguese - Brazil         |\n     * | `'ru-RU'`           | Russian - Russia            |\n     * | `'sr-SP'`           | Serbian (Latin) - Serbia    |\n     * | `'zh-CN'`           | Chinese - China             |\n     * | `'zh-TW'`           | Chinese - Taiwan            |\n     *\n     * Read more:\n     * - [Language](@/guides/internationalization/language/language.md)\n     * - [`locale`](#locale)\n     * - [`layoutDirection`](#layoutdirection)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'en-US'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set Handsontable's language to Polish\n     * language: 'pl-PL',\n     * ```\n     */\n    language: 'en-US',\n\n    /**\n     * The `layoutDirection` option configures whether Handsontable renders from the left to the right, or from the right to the left.\n     *\n     * You can set the layout direction only at Handsontable's [initialization](@/guides/getting-started/installation/installation.md#initialize-handsontable). Any change of the `layoutDirection` option after the initialization (e.g. using the [`updateSettings()`](@/api/core.md#updatesettings) method) is ignored.\n     *\n     * You can set the `layoutDirection` option only [for the entire grid](@/guides/getting-started/configuration-options/configuration-options.md#set-grid-options).\n     * You can't set it for individual columns, rows, or cells.\n     *\n     * You can set the `layoutDirection` option to one of the following strings:\n     *\n     * | Setting             | Description                                                                                                                                                                                  |\n     * | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `inherit` (default) | Set Handsontable's layout direction automatically,<br>based on the value of your HTML document's [`dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) attribute  |\n     * | `rtl`               | Render Handsontable from the right to the left,<br>even when your HTML document's [`dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) attribute is set to `ltr` |\n     * | `ltr`               | Render Handsontable from the left to the right,<br>even when your HTML document's [`dir`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/dir) attribute is set to `rtl` |\n     *\n     * Read more:\n     * - [Layout direction](@/guides/internationalization/layout-direction/layout-direction.md)\n     * - [Language](@/guides/internationalization/language/language.md)\n     * - [`language`](#language)\n     * - [`locale`](#locale)\n     * - [`fixedColumnsStart`](#fixedcolumnsstart)\n     * - [`customBorders`](#customBorders)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'inherit'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // inherit Handsontable's layout direction\n     * // from the value of your HTML document's `dir` attribute\n     * layoutDirection: 'inherit',\n     *\n     * // render Handsontable from the right to the left\n     * // regardless of your HTML document's `dir`\n     * layoutDirection: 'rtl',\n     *\n     * // render Handsontable from the left to the right\n     * // regardless of your HTML document's `dir`\n     * layoutDirection: 'ltr',\n     * ```\n     */\n    layoutDirection: 'inherit',\n\n    /**\n     * The `licenseKey` option sets your Handsontable license key.\n     *\n     * You can set the `licenseKey` option to one of the following:\n     *\n     * | Setting                                                                                                 | Description                                                                                       |\n     * | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |\n     * | A string with your [commercial license key](@/guides/getting-started/license-key/license-key.md#commercial-license) | For [commercial use](@/guides/technical-specification/software-license/software-license.md#commercial-use)         |\n     * | `'non-commercial-and-evaluation'`                                                                       | For [non-commercial use](@/guides/technical-specification/software-license/software-license.md#non-commercial-use) |\n     *\n     * Read more:\n     * - [License key](@/guides/getting-started/license-key/license-key.md)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // for commercial use\n     * licenseKey: 'xxxxx-xxxxx-xxxxx-xxxxx-xxxxx', // your commercial license key\n     *\n     * // for non-commercial use\n     * licenseKey: 'non-commercial-and-evaluation',\n     * ```\n     */\n    licenseKey: undefined,\n\n    /**\n     * The `locale` option configures Handsontable's [locale](@/guides/internationalization/locale/locale.md) settings.\n     *\n     * You can set the `locale` option to any valid and canonicalized Unicode BCP 47 locale tag,\n     * both for the [entire grid](@/guides/internationalization/locale/locale.md#set-the-grid-s-locale),\n     * and for [individual columns](@/guides/internationalization/locale/locale.md#set-a-column-s-locale).\n     *\n     * Read more:\n     * - [Locale](@/guides/internationalization/locale/locale.md)\n     * - [`language`](#language)\n     * - [`layoutDirection`](#layoutdirection)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'en-US'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the entire grid's locale to Polish\n     * locale: 'pl-PL',\n     *\n     * // set individual columns' locales\n     * columns: [\n     *   {\n     *     // set the first column's locale to Polish\n     *     locale: 'pl-PL',\n     *   },\n     *   {\n     *     // set the second column's locale to German\n     *     locale: 'de-DE',\n     *   },\n     * ],\n     * ```\n     */\n    locale: 'en-US',\n\n    /**\n     * The `manualColumnFreeze` option configures the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin.\n     *\n     * You can set the `manualColumnFreeze` option to one of the following:\n     *\n     * | Setting  | Description                                                            |\n     * | -------- | ---------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin  |\n     * | `false`  | Disable the [`ManualColumnFreeze`](@/api/manualColumnFreeze.md) plugin |\n     *\n     * Read more:\n     * - [Column freezing](@/guides/columns/column-freezing/column-freezing.md#user-triggered-freeze)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category ManualColumnFreeze\n     *\n     * @example\n     * ```js\n     * // enable the `ManualColumnFreeze` plugin\n     * manualColumnFreeze: true,\n     * ```\n     */\n    manualColumnFreeze: undefined,\n\n    /**\n     * The `manualColumnMove` option configures the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin.\n     *\n     * You can set the `manualColumnMove` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                        |\n     * | -------- | ------------------------------------------------------------------------------------------------------------------ |\n     * | `true`   | Enable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin                                                  |\n     * | `false`  | Disable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin                                                 |\n     * | An array | - Enable the [`ManualColumnMove`](@/api/manualColumnMove.md) plugin<br>- Move individual columns at initialization |\n     *\n     * Read more:\n     * - [Column moving](@/guides/columns/column-moving/column-moving.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualColumnMove\n     *\n     * @example\n     * ```js\n     * // enable the `ManualColumnMove` plugin\n     * manualColumnMove: true,\n     *\n     * // enable the `ManualColumnMove` plugin\n     * // at initialization, move column 0 to 1\n     * // at initialization, move column 1 to 4\n     * // at initialization, move column 2 to 6\n     * manualColumnMove: [1, 4, 6],\n     * ```\n     */\n    manualColumnMove: undefined,\n\n    /**\n     * @description\n     * The `manualColumnResize` option configures the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin.\n     *\n     * You can set the `manualColumnResize` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                           |\n     * | -------- | --------------------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin                                                 |\n     * | `false`  | Disable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin                                                |\n     * | An array | - Enable the [`ManualColumnResize`](@/api/manualColumnResize.md) plugin<br>- Set initial widths of individual columns |\n     *\n     * Read more:\n     * - [Column width: Column stretching](@/guides/columns/column-width/column-width.md#column-stretching)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualColumnResize\n     *\n     * @example\n     * ```js\n     * // enable the `manualColumnResize` plugin\n     * manualColumnResize: true,\n     *\n     * // enable the `manualColumnResize` plugin\n     * // set the initial width of column 0 to 40 pixels\n     * // set the initial width of column 1 to 50 pixels\n     * // set the initial width of column 2 to 60 pixels\n     * manualColumnResize: [40, 50, 60],\n     * ```\n     */\n    manualColumnResize: undefined,\n\n    /**\n     * @description\n     * The `manualRowMove` option configures the [`ManualRowMove`](@/api/manualRowMove.md) plugin.\n     *\n     * You can set the `manualRowMove` option to one of the following:\n     *\n     * | Setting  | Description                                                                                               |\n     * | -------- | --------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualRowMove`](@/api/manualRowMove.md) plugin                                               |\n     * | `false`  | Disable the [`ManualRowMove`](@/api/manualRowMove.md) plugin                                              |\n     * | An array | - Enable the [`ManualRowMove`](@/api/manualRowMove.md) plugin<br>- Move individual rows at initialization |\n     *\n     * Read more:\n     * - [Row moving](@/guides/rows/row-moving/row-moving.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualRowMove\n     *\n     * @example\n     * ```js\n     * // enable the `ManualRowMove` plugin\n     * manualRowMove: true,\n     *\n     * // enable the `ManualRowMove` plugin\n     * // at initialization, move row 1 to 0\n     * // at initialization, move row 4 to 1\n     * // at initialization, move row 6 to 2\n     * manualRowMove: [1, 4, 6],\n     * ```\n     */\n    manualRowMove: undefined,\n\n    /**\n     * @description\n     * The `manualRowResize` option configures the [`ManualRowResize`](@/api/manualRowResize.md) plugin.\n     *\n     * You can set the `manualRowResize` option to one of the following:\n     *\n     * | Setting  | Description                                                                                                   |\n     * | -------- | ------------------------------------------------------------------------------------------------------------- |\n     * | `true`   | Enable the [`ManualRowResize`](@/api/manualRowResize.md) plugin                                               |\n     * | `false`  | Disable the [`ManualRowResize`](@/api/manualRowResize.md) plugin                                              |\n     * | An array | - Enable the [`ManualRowResize`](@/api/manualRowResize.md) plugin<br>- Set initial heights of individual rows |\n     *\n     * Read more:\n     * - [Row height: Adjust the row height manually](@/guides/rows/row-height/row-height.md#adjust-the-row-height-manually)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category ManualRowResize\n     *\n     * @example\n     * ```js\n     * // enable the `ManualRowResize` plugin\n     * manualRowResize: true,\n     *\n     * // enable the `ManualRowResize` plugin\n     * // set the initial height of row 0 to 40 pixels\n     * // set the initial height of row 1 to 50 pixels\n     * // set the initial height of row 2 to 60 pixels\n     * manualRowResize: [40, 50, 60],\n     * ```\n     */\n    manualRowResize: undefined,\n\n    /**\n     * The `maxCols` option sets a maximum number of columns.\n     *\n     * The `maxCols` option is used:\n     * - At initialization: if the `maxCols` value is lower than the initial number of columns,\n     * Handsontable trims columns from the right.\n     * - At runtime: for example, when inserting columns.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default Infinity\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the maximum number of columns to 300\n     * maxCols: 300,\n     * ```\n     */\n    maxCols: Infinity,\n\n    /**\n     * The `maxRows` option sets a maximum number of rows.\n     *\n     * The `maxRows` option is used:\n     * - At initialization: if the `maxRows` value is lower than the initial number of rows,\n     * Handsontable trims rows from the bottom.\n     * - At runtime: for example, when inserting rows.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default Infinity\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the maximum number of rows to 300\n     * maxRows: 300,\n     * ```\n     */\n    maxRows: Infinity,\n\n    /**\n     * @description\n     * The `mergeCells` option configures the [`MergeCells`](@/api/mergeCells.md) plugin.\n     *\n     * You can set the `mergeCells` option to one of the following:\n     *\n     * | Setting             | Description                                                                                         |\n     * | ------------------- | --------------------------------------------------------------------------------------------------- |\n     * | `true`              | Enable the [`MergeCells`](@/api/mergeCells.md) plugin                                               |\n     * | `false`             | Disable the [`MergeCells`](@/api/mergeCells.md) plugin                                              |\n     * | An array of objects | - Enable the [`MergeCells`](@/api/mergeCells.md) plugin<br>- Merge specific cells at initialization |\n     *\n     * To merge specific cells at Handsontable's initialization,\n     * set the `mergeCells` option to an array of objects, with the following properties:\n     *\n     * | Property  | Description                                                |\n     * | --------- | ---------------------------------------------------------- |\n     * | `row`     | The row index of the merged section's beginning            |\n     * | `col`     | The column index of the merged section's beginning         |\n     * | `rowspan` | The width (as a number of rows) of the merged section      |\n     * | `colspan` | The height (as a number of columns ) of the merged section |\n     *\n     * Read more:\n     * - [Merge cells](@/guides/cell-features/merge-cells/merge-cells.md)\n     *\n     * @memberof Options#\n     * @type {boolean|object[]}\n     * @default false\n     * @category MergeCells\n     *\n     * @example\n     * ```js\n     * // enable the `MergeCells` plugin\n     * mergeCells: true,\n     *\n     * // enable the `MergeCells` plugin\n     * // and merge specific cells at initialization\n     * mergeCells: [\n     *   // merge cells from cell (1,1) to cell (3,3)\n     *   {row: 1, col: 1, rowspan: 3, colspan: 3},\n     *   // merge cells from cell (3,4) to cell (2,2)\n     *   {row: 3, col: 4, rowspan: 2, colspan: 2},\n     *   // merge cells from cell (5,6) to cell (3,3)\n     *   {row: 5, col: 6, rowspan: 3, colspan: 3}\n     * ],\n     * ```\n     */\n    mergeCells: false,\n\n    /**\n     * The `minCols` option sets a minimum number of columns.\n     *\n     * The `minCols` option is used:\n     * - At initialization: if the `minCols` value is higher than the initial number of columns,\n     * Handsontable adds empty columns to the right.\n     * - At runtime: for example, when removing columns.\n     *\n     * The `minCols` option works only when your [`data`](#data) is an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).\n     * When your [`data`](#data) is an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects),\n     * you can only have as many columns as defined in:\n     * - The first data row\n     * - The [`dataSchema`](#dataSchema) option\n     * - The [`columns`](#columns) option\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the minimum number of columns to 10\n     * minCols: 10,\n     * ```\n     */\n    minCols: 0,\n\n    /**\n     * The `minRows` option sets a minimum number of rows.\n     *\n     * The `minRows` option is used:\n     * - At initialization: if the `minRows` value is higher than the initial number of rows,\n     * Handsontable adds empty rows at the bottom.\n     * - At runtime: for example, when removing rows.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the minimum number of rows to 10\n     * minRows: 10,\n     * ```\n     */\n    minRows: 0,\n\n    /**\n     * The `minSpareCols` option sets a minimum number of empty columns\n     * at the grid's right-hand end.\n     *\n     * If there already are other empty columns at the grid's right-hand end,\n     * they are counted into the `minSpareCols` value.\n     *\n     * The total number of columns can't exceed the [`maxCols`](#maxCols) value.\n     *\n     * The `minSpareCols` option works only when your [`data`](#data) is an [array of arrays](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-arrays).\n     * When your [`data`](#data) is an [array of objects](@/guides/getting-started/binding-to-data/binding-to-data.md#array-of-objects),\n     * you can only have as many columns as defined in:\n     * - The first data row\n     * - The [`dataSchema`](#dataSchema) option\n     * - The [`columns`](#columns) option\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // at Handsontable's initialization, add at least 3 empty columns on the right\n     * minSpareCols: 3,\n     * ```\n     */\n    minSpareCols: 0,\n\n    /**\n     * The `minSpareRows` option sets a minimum number of empty rows\n     * at the bottom of the grid.\n     *\n     * If there already are other empty rows at the bottom,\n     * they are counted into the `minSpareRows` value.\n     *\n     * The total number of rows can't exceed the [`maxRows`](#maxRows) value.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 0\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // at Handsontable's initialization, add at least 3 empty rows at the bottom\n     * minSpareRows: 3,\n     * ```\n     */\n    minSpareRows: 0,\n\n    /**\n     * @description\n     * The `multiColumnSorting` option configures the [`MultiColumnSorting`](@/api/columnSorting.md) plugin.\n     *\n     * You can set the `multiColumnSorting` option to one of the following:\n     *\n     * | Setting    | Description                                                                                                                                                |\n     * | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `true`     | Enable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin with the default configuration                                                       |\n     * | `false`    | Disable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin                                                                                     |\n     * | An object  | - Enable the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin<br>- Modify the [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin options |\n     *\n     * If you set the `multiColumnSorting` option to an object,\n     * you can set the following [`MultiColumnSorting`](@/api/multiColumnSorting.md) plugin options:\n     *\n     * | Option                   | Possible settings                                                                                                                                |\n     * | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `indicator`              | `true`: Display the arrow icon in the column header, to indicate a sortable column<br>`false`: Don't display the arrow icon in the column header |\n     * | `headerAction`           | `true`: Enable clicking on the column header to sort the column<br>`false`: Disable clicking on the column header to sort the column             |\n     * | `sortEmptyCells`         | `true`: Sort empty cells as well<br>`false`: Place empty cells at the end                                                                        |\n     * | `compareFunctionFactory` | A [custom compare function](@/guides/rows/rows-sorting/rows-sorting.md#add-a-custom-comparator)                                                               |\n     *\n     * If you set the `multiColumnSorting` option to an object,\n     * you can also sort individual columns at Handsontable's initialization.\n     * In the `multiColumnSorting` object, add an object named `initialConfig`,\n     * with the following properties:\n     *\n     * | Option      | Possible settings   | Description                                                      |\n     * | ----------- | ------------------- | ---------------------------------------------------------------- |\n     * | `column`    | A number            | The index of the column that you want to sort at initialization  |\n     * | `sortOrder` | `'asc'` \\| `'desc'` | The sorting order:<br>`'asc'`: ascending<br>`'desc'`: descending |\n     *\n     * Read more:\n     * - [Rows sorting](@/guides/rows/rows-sorting/rows-sorting.md)\n     * - [`columnSorting`](#columnSorting)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default undefined\n     * @category MultiColumnSorting\n     *\n     * @example\n     * ```js\n     * // enable the `MultiColumnSorting` plugin\n     * multiColumnSorting: true\n     *\n     * // enable the `MultiColumnSorting` plugin with custom configuration\n     * multiColumnSorting: {\n     *   // sort empty cells as well\n     *   sortEmptyCells: true,\n     *   // display the arrow icon in the column header\n     *   indicator: true,\n     *   // disable clicking on the column header to sort the column\n     *   headerAction: false,\n     *   // add a custom compare function\n     *   compareFunctionFactory(sortOrder, columnMeta) {\n     *     return function(value, nextValue) {\n     *       // some value comparisons which will return -1, 0 or 1...\n     *     }\n     *   }\n     * }\n     *\n     * // enable the `MultiColumnSorting` plugin\n     * multiColumnSorting: {\n     *   // at initialization, sort column 1 in ascending order\n     *   initialConfig: {\n     *     column: 1,\n     *     sortOrder: 'asc'\n     *   },\n     *   // at initialization, sort column 2 in descending order\n     *   initialConfig: {\n     *     column: 2,\n     *     sortOrder: 'desc'\n     *   }\n     * }\n     * ```\n     */\n    multiColumnSorting: undefined,\n\n    /**\n     * When set to `true`, the `navigableHeaders` option lets you navigate [row headers](@/guides/rows/row-header/row-header.md) and [column headers](@/guides/columns/column-header/column-header.md), using the arrow keys or the <kbd>**Tab**</kbd> key (if the [`tabNavigation`](#tabNavigation) option is set to `true`).\n     *\n     * @since 14.0.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // you can navigate row and column headers with the keyboard\n     * navigableHeaders: true,\n     *\n     * // default behavior: you can't navigate row and column headers with the keyboard\n     * navigableHeaders: false,\n     * ```\n     */\n    navigableHeaders: false,\n\n    /**\n     * When set to `false`, the `tabNavigation` option changes the behavior of the\n     * <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts. The Handsontable\n     * no more captures that shortcuts to make the grid navigation available (`tabNavigation: true`)\n     * but returns control to the browser so the native page navigation is possible.\n     *\n     * @since 14.0.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // you can't navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts\n     * tabNavigation: false,\n     *\n     * // default behavior: you can navigate row and column headers using <kbd>Tab</kbd> or <kbd>Shift</kbd>+<kbd>Tab</kbd> keyboard shortcuts\n     * tabNavigation: true,\n     * ```\n     */\n    tabNavigation: true,\n\n    /**\n     * @description\n     * The `nestedHeaders` option configures the [`NestedHeaders`](@/api/nestedHeaders.md) plugin.\n     *\n     * You can set the `nestedHeaders` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                           |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Disable the [`NestedHeaders`](@/api/nestedHeaders.md) plugin                                                                          |\n     * | `true`            | - Enable the [`NestedHeaders`](@/api/nestedHeaders.md) plugin<br>- Don't configure any nested headers                                 |\n     * | Array of arrays   | - Enable the [`NestedHeaders`](@/api/nestedHeaders.md) plugin<br>- Configure headers that are nested on Handsontable's initialization |\n     *\n     * If you set the `nestedHeaders` option to an array of arrays, each array configures one set of nested headers.\n     *\n     * Each array element configures one header, and can be one of the following:\n     *\n     * | Array element | Description                                                                                  |\n     * | ------------- | -------------------------------------------------------------------------------------------- |\n     * | A string      | The header's label                                                                           |\n     * | An object     | Properties:<br>`label` (string): the header's label<br>`colspan` (integer): the column width |\n     *\n     * Read more:\n     * - [Plugins: `NestedHeaders`](@/api/nestedHeaders.md)\n     * - [Column groups: Nested headers](@/guides/columns/column-groups/column-groups.md#nested-headers)\n     *\n     * @memberof Options#\n     * @type {boolean|Array[]}\n     * @default undefined\n     * @category NestedHeaders\n     *\n     * @example\n     * ```js\n     * nestedHeaders: [\n     *   ['A', {label: 'B', colspan: 8}, 'C'],\n     *   ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n     *   ['H', 'I', 'J', 'K', 'L', 'M', 'N', 'R', 'S', 'T']\n     * ],\n     * ```\n     */\n    nestedHeaders: undefined,\n\n    /**\n     * @description\n     * The `nestedRows` option configures the [`NestedRows`](@/api/nestedRows.md) plugin.\n     *\n     * You can set the `nestedRows` option to one of the following:\n     *\n     * | Setting           | Description                                            |\n     * | ----------------- | ------------------------------------------------------ |\n     * | `false` (default) | Disable the [`NestedRows`](@/api/nestedRows.md) plugin |\n     * | `true`            | Enable the [`NestedRows`](@/api/nestedRows.md) plugin  |\n     *\n     * Read more:\n     * - [Plugins: `NestedRows`](@/guides/rows/row-parent-child/row-parent-child.md)\n     *\n     * @example\n     * ```js\n     * // enable the `NestedRows` plugin\n     * nestedRows: true,\n     * ```\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category NestedRows\n     */\n    nestedRows: undefined,\n\n    /**\n     * The `noWordWrapClassName` option lets you add a CSS class name\n     * to each cell that has the [`wordWrap`](#wordWrap) option set to `false`.\n     *\n     * Read more:\n     * - [`wordWrap`](#wordWrap)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htNoWrap'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add an `is-noWrapCell` CSS class name\n     * // to each cell that doesn't wrap content\n     * noWordWrapClassName: 'is-noWrapCell',\n     * ```\n     */\n    noWordWrapClassName: 'htNoWrap',\n\n    /**\n     * The `numericFormat` option configures the number format and the currency format\n     * of [`numeric`](@/guides/cell-types/numeric-cell-type/numeric-cell-type.md) cells` displayed output\n     * in the numeric cell renderer.\n     *\n     * You can set the `numericFormat` option to an object with the following properties:\n     *\n     * | Property    | Possible values                                                               | Description     |\n     * | ----------- | ----------------------------------------------------------------------------- | --------------- |\n     * | `pattern`   | All [`numbro.js` number formats](https://numbrojs.com/format.html#numbers)    | Number format   |\n     * | `culture`   | All [`numbro.js` currency formats](https://numbrojs.com/format.html#currency) | Currency format |\n     *\n     * The `numericFormat` option as no effect on the numeric cell editor.\n     *\n     * In the source data, numeric data is stored as JavaScript numbers.\n     *\n     * Read more:\n     * - [Numeric cell type](@/guides/cell-types/numeric-cell-type/numeric-cell-type.md)\n     * - [Third-party licenses](@/guides/technical-specification/third-party-licenses/third-party-licenses.md)\n     *\n     * @memberof Options#\n     * @since 0.35.0\n     * @type {object}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `numeric`\n     *     type: 'numeric',\n     *     // set the `numericFormat` option for every `numeric` cell of this column\n     *     numericFormat: {\n     *       // set the number format\n     *       pattern: '0,00',\n     *       // set the currency format\n     *       culture: 'en-US'\n     *     }\n     *   }\n     * ],\n     * ```\n     */\n    numericFormat: undefined,\n\n    /**\n     * If the `observeDOMVisibility` option is set to `true`,\n     * Handsontable rerenders every time it detects that the grid was made visible in the DOM.\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't rerender the grid on visibility changes\n     * observeDOMVisibility: false,\n     * ```\n     */\n    observeDOMVisibility: true,\n\n    /**\n     * The `outsideClickDeselects` option determines what happens to the current [selection](@/guides/cell-features/selection/selection.md)\n     * when you click outside of the grid.\n     *\n     * You can set the `outsideClickDeselects` option to one of the following:\n     *\n     * | Setting          | Description                                                                                              |\n     * | ---------------- | -------------------------------------------------------------------------------------------------------- |\n     * | `true` (default) | On a mouse click outside of the grid, clear the current [selection](@/guides/cell-features/selection/selection.md) |\n     * | `false`          | On a mouse click outside of the grid, keep the current [selection](@/guides/cell-features/selection/selection.md)  |\n     * | A function       | A function that takes the click event target and returns a boolean                                       |\n     *\n     * @memberof Options#\n     * @type {boolean|Function}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on a mouse click outside of the grid, clear the current selection\n     * outsideClickDeselects: true,\n     *\n     * // on a mouse click outside of the grid, keep the current selection\n     * outsideClickDeselects: false,\n     *\n     * // take the click event target and return `false`\n     * outsideClickDeselects(event) {\n     *   return false;\n     * }\n     *\n     * // take the click event target and return `true`\n     * outsideClickDeselects(event) {\n     *   return false;\n     * }\n     * ```\n     */\n    outsideClickDeselects: true,\n\n    /**\n     * @description\n     * The `persistentState` option configures the [`PersistentState`](@/api/persistentState.md) plugin.\n     *\n     * You can set the `persistentState` to one of the following:\n     *\n     * | Setting           | Description                                                      |\n     * | ----------------- | ---------------------------------------------------------------- |\n     * | `false` (default) | Disable the [`PersistentState`](@/api/persistentState.md) plugin |\n     * | `true`            | Enable the [`PersistentState`](@/api/persistentState.md) plugin  |\n     *\n     * Read more:\n     * - [Saving data: Saving data locally](@/guides/getting-started/saving-data/saving-data.md#save-data-locally)\n     * - [Plugins: `PersistentState`](@/api/persistentState.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category PersistentState\n     *\n     * @example\n     * ```js\n     * // enable the `PersistentState` plugin\n     * persistentState: true,\n     * ```\n     */\n    persistentState: undefined,\n\n    /**\n     * The `placeholder` option lets you display placeholder text in every empty cell.\n     *\n     * You can set the `placeholder` option to one of the following:\n     *\n     * | Setting            | Example        | Description                                                           |\n     * | ------------------ | -------------- | --------------------------------------------------------------------- |\n     * | A non-empty string | `'Empty cell'` | Display `Empty cell` text in empty cells                              |\n     * | A non-string value | `000`          | Display `000` text in empty cells (non-string values get stringified) |\n     *\n     * Read more:\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // display 'Empty cell' text\n     * // in every empty cell of the entire grid\n     * placeholder: 'Empty cell',\n     *\n     * // or\n     * columns: [\n     *   {\n     *     data: 'date',\n     *     dateFormat: 'DD/MM/YYYY',\n     *     // display 'Empty date cell' text\n     *     // in every empty cell of the `date` column\n     *     placeholder: 'Empty date cell'\n     *   }\n     * ],\n     * ```\n     */\n    placeholder: undefined,\n\n    /**\n     * The `placeholderCellClassName` option lets you add a CSS class name to cells\n     * that contain [`placeholder`](#placeholder) text.\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [`placeholder`](#placeholder)\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`TableClassName`](#TableClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htPlaceholder'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `has-placeholder` CSS class name\n     * // to each cell that contains `placeholder` text\n     * placeholderCellClassName: 'has-placeholder',\n     * ```\n     */\n    placeholderCellClassName: 'htPlaceholder',\n\n    /**\n     * The `preventOverflow` option configures preventing Handsontable\n     * from overflowing outside of its parent element.\n     *\n     * You can set the `preventOverflow` option to one of the following:\n     *\n     * | Setting           | Description                      |\n     * | ----------------- | -------------------------------- |\n     * | `false` (default) | Don't prevent overflowing        |\n     * | `'horizontal'`      | Prevent horizontal overflowing |\n     * | `'vertical'`        | Prevent vertical overflowing   |\n     *\n     * @memberof Options#\n     * @type {string|boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // prevent horizontal overflowing\n     * preventOverflow: 'horizontal',\n     * ```\n     */\n    preventOverflow: false,\n\n    /**\n     * The `preventWheel` option configures preventing the `wheel` event's default action\n     * on overlays.\n     *\n     * You can set the `preventWheel` option to one of the following:\n     *\n     * | Setting           | Description                                      |\n     * | ----------------- | ------------------------------------------------ |\n     * | `false` (default) | Don't prevent the `wheel` event's default action |\n     * | `true`            | Prevent the `wheel` event's default action       |\n     *\n     * @memberof Options#\n     * @private\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // don't prevent the `wheel` event's default action\n     * preventWheel: false,\n     * ```\n     */\n    preventWheel: false,\n\n    /**\n     * @description\n     * The `readOnly` option determines whether a [cell](@/guides/cell-features/disabled-cells/disabled-cells.md#read-only-specific-cells),\n     * [comment](@/guides/cell-features/comments/comments.md#make-a-comment-read-only), [column](@/guides/cell-features/disabled-cells/disabled-cells.md#read-only-columns)\n     * or the [entire grid](@/guides/cell-features/disabled-cells/disabled-cells.md#read-only-grid) is editable or not. You can configure it as follows:\n     *\n     * | Setting           | Description                                                                                                                |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Set as editable                                                                                                           |\n     * | `true`            | - Set as read-only<br>- Add the [`readOnlyCellClassName`](#readOnlyCellClassName) CSS class name (by default: `htDimmed`) |\n     *\n     * `readOnly` cells can't be changed by the [`populateFromArray()`](@/api/core.md#populatefromarray) method.\n     *\n     * Read more:\n     * - [Disabled cells](@/guides/cell-features/disabled-cells/disabled-cells.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // make the entire grid read-only\n     * const configurationOptions = {\n     *   columnSorting: true,\n     * };\n     *\n     * // make the third column read-only\n     * const configurationOptions = {\n     *   columns: [\n     *     {},\n     *     {},\n     *     {\n     *       readOnly: true,\n     *     },\n     *   ],\n     * };\n     *\n     * // make a specific cell read-only\n     * const configurationOptions = {\n     *   cell: [\n     *     {\n     *       row: 0,\n     *       col: 0,\n     *       readOnly: true,\n     *     },\n     * };\n     * ```\n     */\n    readOnly: false,\n\n    /**\n     * The `readOnlyCellClassName` option lets you add a CSS class name to [read-only](#readOnly) cells.\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`TableClassName`](#TableClassName)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'htDimmed'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `is-readOnly` CSS class name\n     * // to every read-only cell\n     * readOnlyCellClassName: 'is-readOnly',\n     * ```\n     */\n    readOnlyCellClassName: 'htDimmed',\n\n    /**\n     * The `renderAllRows` option controls Handsontable's [row virtualization](@/guides/rows/row-virtualization/row-virtualization.md).\n     * You can configure it as follows:\n     *\n     * | Setting           | Description                                                                                                                                                                                     |\n     * | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable [row virtualization](@/guides/rows/row-virtualization/row-virtualization.md), rendering only the visible rows for optimal performance with large datasets.                                                  |\n     * | `true`            | Disable [row virtualization](@/guides/rows/row-virtualization/row-virtualization.md)<br>(render all rows of the grid), rendering all rows in the dataset for consistent rendering and screen reader accessibility. |\n     *\n     * Setting `renderAllRows` to `true` overwrites the [`viewportRowRenderingOffset`](#viewportRowRenderingOffset) setting.\n     *\n     * Read more:\n     * - [Row virtualization](@/guides/rows/row-virtualization/row-virtualization.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // disable row virtualization\n     * renderAllRows: true,\n     * ```\n     */\n    renderAllRows: false,\n\n    /**\n     * The `renderAllColumns` option configures Handsontable's [column virtualization](@/guides/columns/column-virtualization/column-virtualization.md).\n     *\n     * You can set the `renderAllColumns` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                                                                                                                      |\n     * | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable [column virtualization](@/guides/columns/column-virtualization/column-virtualization.md), rendering only visible columns for better performance with many columns.                                                                              |\n     * | `true`            | Disable [column virtualization](@/guides/columns/column-virtualization/column-virtualization.md)<br>(render all columns of the grid), rendering all columns in the dataset, and ensuring all columns are available regardless of horizontal scrolling. |\n     *\n     * Setting `renderAllColumns` to `true` overwrites the [`viewportColumnRenderingOffset`](#viewportColumnRenderingOffset) setting.\n     *\n     * Read more:\n     * - [Column virtualization](@/guides/columns/column-virtualization/column-virtualization.md)\n     *\n     * @since 14.1.0\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // disable column virtualization\n     * renderAllColumns: true,\n     * ```\n     */\n    renderAllColumns: false,\n\n    /**\n     * @description\n     * The `renderer` option sets a [cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md) for a cell.\n     *\n     * You can set the `renderer` option to one of the following:\n     * - A custom renderer function\n     * - One of the following [cell renderer aliases](@/guides/cell-functions/cell-renderer/cell-renderer.md):\n     *\n     * | Alias               | Cell renderer function                                                         |\n     * | ------------------- | ------------------------------------------------------------------------------ |\n     * | A custom alias      | Your [custom cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md) function |\n     * | `'autocomplete'`    | `AutocompleteRenderer`                                                         |\n     * | `'base'`            | `BaseRenderer`                                                                 |\n     * | `'checkbox'`        | `CheckboxRenderer`                                                             |\n     * | `'date'`            | `DateRenderer`                                                                 |\n     * | `'dropdown'`        | `DropdownRenderer`                                                             |\n     * | `'html'`            | `HtmlRenderer`                                                                 |\n     * | `'numeric'`         | `NumericRenderer`                                                              |\n     * | `'password'`        | `PasswordRenderer`                                                             |\n     * | `'text'`            | `TextRenderer`                                                                 |\n     * | `'time'`            | `TimeRenderer`                                                                 |\n     *\n     * To set the [`renderer`](#renderer), [`editor`](#editor), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md)\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // use the `numeric` renderer for each cell of the entire grid\n     * renderer: `'numeric'`,\n     *\n     * // add a custom renderer function\n     * renderer(hotInstance, td, row, column, prop, value, cellProperties) {\n     *   // your custom renderer's logic\n     *   ...\n     * }\n     *\n     * // apply the `renderer` option to individual columns\n     * columns: [\n     *   {\n     *     // use the `autocomplete` renderer for each cell of this column\n     *     renderer: 'autocomplete'\n     *   },\n     *   {\n     *     // use the `myCustomRenderer` renderer for each cell of this column\n     *     renderer: 'myCustomRenderer'\n     *   }\n     * ]\n     * ```\n     */\n    renderer: undefined,\n\n    /**\n     * The `rowHeaders` option configures your grid's row headers.\n     *\n     * You can set the `rowHeaders` option to one of the following:\n     *\n     * | Setting    | Description                                                       |\n     * | ---------- | ----------------------------------------------------------------- |\n     * | `true`     | Enable the default row headers ('1', '2', '3', ...)               |\n     * | `false`    | Disable row headers                                               |\n     * | An array   | Define your own row headers (e.g. `['One', 'Two', 'Three', ...]`) |\n     * | A function | Define your own row headers, using a function                     |\n     *\n     * Read more:\n     * - [Row header](@/guides/rows/row-header/row-header.md)\n     *\n     * @memberof Options#\n     * @type {boolean|string[]|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // enable the default row headers\n     * rowHeaders: true,\n     *\n     * // set your own row headers\n     * rowHeaders: ['One', 'Two', 'Three'],\n     *\n     * // set your own row headers, using a function\n     * rowHeaders: function(visualRowIndex) {\n     *   return `${visualRowIndex}: AB`;\n     * },\n     * ```\n     */\n    rowHeaders: undefined,\n\n    /**\n     * @description\n     * The `rowHeaderWidth` option configures the width of row headers.\n     *\n     * You can set the `rowHeaderWidth` option to one of the following:\n     *\n     * | Setting  | Description                                     |\n     * | -------- | ----------------------------------------------- |\n     * | A number | Set the same width for every row header         |\n     * | An array | Set different widths for individual row headers |\n     *\n     * @memberof Options#\n     * @type {number|number[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the same width for every row header\n     * rowHeaderWidth: 25,\n     *\n     * // set different widths for individual row headers\n     * rowHeaderWidth: [25, 30, 55],\n     * ```\n     */\n    rowHeaderWidth: undefined,\n\n    /**\n     * The `rowHeights` option sets rows' heights, in pixels.\n     *\n     * In the rendering process, the default row height is 23 px (22 px + 1 px of the row's bottom border).\n     * You can change it to equal or greater than 23px, by setting the `rowHeights` option to one of the following:\n     *\n     * | Setting     | Description                                                                                         | Example                                                      |\n     * | ----------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |\n     * | A number    | Set the same height for every row                                                                   | `rowHeights: 100`                                            |\n     * | A string    | Set the same height for every row                                                                   | `rowHeights: '100px'`                                        |\n     * | An array    | Set heights separately for each row                                                                 | `rowHeights: [100, 120, undefined]`                          |\n     * | A function  | Set row heights dynamically,<br>on each render                                                      | `rowHeights(visualRowIndex) { return visualRowIndex * 10; }` |\n     * | `undefined` | Used by the [modifyRowHeight](@/api/hooks.md#modifyRowHeight) hook,<br>to detect row height changes | `rowHeights: undefined`                                      |\n     *\n     * The `rowHeights` option also sets the minimum row height that can be set\n     * via the {@link ManualRowResize} and {@link AutoRowSize} plugins (if they are enabled).\n     *\n     * Read more:\n     * - [Row height](@/guides/rows/row-height/row-height.md)\n     *\n     * @memberof Options#\n     * @type {number|number[]|string|string[]|Array<undefined>|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set every row's height to 100px\n     * rowHeights: 100,\n     *\n     * // set every row's height to 100px\n     * rowHeights: '100px',\n     *\n     * // set the first (by visual index) row's height to 100\n     * // set the second (by visual index) row's height to 120\n     * // set the third (by visual index) row's height to `undefined`\n     * // set any other row's height to the default 23px\n     * rowHeights: [100, 120, undefined],\n     *\n     * // set each row's height individually, using a function\n     * rowHeights(visualRowIndex) {\n     *   return visualRowIndex * 10;\n     * },\n     * ```\n     */\n    rowHeights: undefined,\n\n    /**\n     * @description\n     * The `search` option configures the [`Search`](@/api/search.md) plugin.\n     *\n     * You can set the `search` option to one of the following:\n     *\n     * | Setting           | Description                                                                          |\n     * | ----------------- | ------------------------------------------------------------------------------------ |\n     * | `false` (default) | Disable the [`Search`](@/api/search.md) plugin                                       |\n     * | `true`            | Enable the [`Search`](@/api/search.md) plugin with the default configuration         |\n     * | An object         | - Enable the [`Search`](@/api/search.md) plugin<br>- Apply your custom configuration |\n     *\n     * If you set the `search` option to an object, you can configure the following search options:\n     *\n     * | Option              | Possible settings | Description                                                                                          |\n     * | ------------------- | ----------------- | ---------------------------------------------------------------------------------------------------- |\n     * | `searchResultClass` | A string          | Add a custom CSS class name to search results                                                        |\n     * | `queryMethod`       | A function        | Add a [custom query method](@/guides/navigation/searching-values/searching-values.md#custom-query-method)  |\n     * | `callback`          | A function        | Add a [custom callback function](@/guides/navigation/searching-values/searching-values.md#custom-callback) |\n     *\n     * Read more:\n     * - [Searching values](@/guides/navigation/searching-values/searching-values.md)\n     * - [Searching values: Custom query method](@/guides/navigation/searching-values/searching-values.md#custom-query-method)\n     * - [Searching values: Custom callback](@/guides/navigation/searching-values/searching-values.md#custom-callback)\n     *\n     * @memberof Options#\n     * @type {boolean|object}\n     * @default false\n     * @category Search\n     *\n     * @example\n     * ```js\n     * // enable the `Search` plugin with the default configuration\n     * search: true,\n     *\n     * // enable the `Search` plugin with a custom configuration\n     * search: {\n     *   // add a `customClass` CSS class name to search results\n     *   searchResultClass: 'customClass',\n     *   // add a custom query method\n     *   queryMethod(queryStr, value) {\n     *     ...\n     *   },\n     *   // add a custom callback function\n     *   callback(instance, row, column, value, result) {\n     *     ...\n     *   }\n     * }\n     * ```\n     */\n    search: false,\n\n    /**\n     * @description\n     * The `selectionMode` option configures how [selection](@/guides/cell-features/selection/selection.md) works.\n     *\n     * You can set the `selectionMode` option to one of the following:\n     *\n     * | Setting      | Description                                                  |\n     * | ------------ | ------------------------------------------------------------ |\n     * | `'single'`   | Allow the user to select only one cell at a time.            |\n     * | `'range'`    | Allow the user to select one range of cells at a time.       |\n     * | `'multiple'` | Allow the user to select multiple ranges of cells at a time. |\n     *\n     * Read more:\n     * - [Selection: Selecting ranges](@/guides/cell-features/selection/selection.md#select-ranges)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'multiple'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // you can only select one cell at at a time\n     * selectionMode: 'single',\n     *\n     * // you can select one range of cells at a time\n     * selectionMode: 'range',\n     *\n     * // you can select multiple ranges of cells at a time\n     * selectionMode: 'multiple',\n     * ```\n     */\n    selectionMode: 'multiple',\n\n    /**\n     * The `selectOptions` option configures options that the end user can choose from in [`select`](@/guides/cell-types/select-cell-type/select-cell-type.md) cells.\n     *\n     * You can set the `selectOptions` option to one of the following:\n     *\n     * | Setting                         | Description                                                                   |\n     * | ------------------------------- | ----------------------------------------------------------------------------- |\n     * | An array of strings             | Each string is one option's value and label                                   |\n     * | An object with key-string pairs | - Each key is one option's value<br>- The key's string is that option's label |\n     * | A function                      | A function that returns an object with key-string pairs                       |\n     *\n     * Read more:\n     * - [Select cell type](@/guides/cell-types/select-cell-type/select-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {string[]|object|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `select`\n     *     type: 'select',\n     *     // set the first option's value and label to `A`\n     *     // set the second option's value and label to `B`\n     *     // set the third option's value and label to `C`\n     *     selectOptions: ['A', 'B', 'C'],\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `select`\n     *     type: 'select',\n     *     selectOptions: {\n     *       // set the first option's value to `value1` and label to `Label 1`\n     *       value1: 'Label 1',\n     *       // set the second option's value to `value2` and label to `Label 2`\n     *       value2: 'Label 2',\n     *       // set the third option's value to `value3` and label to `Label 3`\n     *       value3: 'Label 3',\n     *     },\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `select`\n     *     type: 'select',\n     *     // set `selectOption` to a function that returns available options as an object\n     *     selectOptions(visualRow, visualColumn, prop) {\n     *       return {\n     *         value1: 'Label 1',\n     *         value2: 'Label 2',\n     *         value3: 'Label 3',\n     *       };\n     *   },\n     * ],\n     * ```\n     */\n    selectOptions: undefined,\n\n    /**\n     * @description\n     * The `skipColumnOnPaste` option determines whether you can paste data into a given column.\n     *\n     * You can only apply the `skipColumnOnPaste` option to an entire column, using the [`columns`](#columns) option.\n     *\n     * You can set the `skipColumnOnPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                                           |\n     * | ----------------- | ----------------------------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable pasting data into this column                                                                  |\n     * | `true`            | - Disable pasting data into this column<br>- On pasting, paste data into the next column to the right |\n     *\n     * Read more:\n     * - [Configuration options: Setting column options](@/guides/getting-started/configuration-options/configuration-options.md#set-column-options)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // disable pasting data into this column\n     *     skipColumnOnPaste: true\n     *   }\n     * ],\n     * ```\n     */\n    skipColumnOnPaste: false,\n\n    /**\n     * @description\n     *\n     * The `skipRowOnPaste` option determines whether you can paste data into a given row.\n     *\n     * You can only apply the `skipRowOnPaste` option to an entire row, using the [`cells`](#cells) option.\n     *\n     * You can set the `skipRowOnPaste` option to one of the following:\n     *\n     * | Setting           | Description                                                                         |\n     * | ----------------- | ----------------------------------------------------------------------------------- |\n     * | `false` (default) | Enable pasting data into this row                                                   |\n     * | `true`            | - Disable pasting data into this row<br>- On pasting, paste data into the row below |\n     *\n     * Read more:\n     * - [Configuration options: Setting row options](@/guides/getting-started/configuration-options/configuration-options.md#set-row-options)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * cells(row, column) {\n     *  const cellProperties = {};\n     *\n     *  // disable pasting data into row 1\n     *  if (row === 1) {\n     *    cellProperties.skipRowOnPaste = true;\n     *  }\n     *\n     *  return cellProperties;\n     * }\n     * ```\n     */\n    skipRowOnPaste: false,\n\n    /**\n     * The `sortByRelevance` option configures whether [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells'\n     * lists are sorted in the same order as provided in the [`source`](#source) option.\n     *\n     * You can set the `sortByRelevance` option to one of the following:\n     *\n     * | Setting          | Description                                                                  |\n     * | ---------------- | ---------------------------------------------------------------------------- |\n     * | `true` (default) | Sort options in the same order as provided in the [`source`](#source) option |\n     * | `false`          | Sort options alphabetically                                                  |\n     *\n     * Read more:\n     * - [`source`](#source)\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['D', 'C', 'B', 'A'],\n     *   // sort the `autocomplete` option in this order: D, C, B, A\n     *   sortByRelevance: true\n     * }],\n     * ```\n     */\n    sortByRelevance: true,\n\n    /**\n     * The `source` option sets options available in [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) cells.\n     *\n     * You can set the `source` option to one of the following:\n     *\n     * - An array\n     * - A function\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     * - [`strict`](#strict)\n     * - [`allowHtml`](#allowHtml)\n     * - [`filter`](#filter)\n     * - [`sortByRelevance`](#sortByRelevance)\n     *\n     * @memberof Options#\n     * @type {Array|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set `source` to an array\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C', 'D']\n     * }],\n     *\n     * // set `source` to a function\n     * columns: [{\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // for every `autocomplete` cell in this column, fetch data from an external source\n     *   source(query, callback) {\n     *     fetch('https://example.com/query?q=' + query, function(response) {\n     *       callback(response.items);\n     *     })\n     *   }\n     * }],\n     * ```\n     */\n    source: undefined,\n\n    /**\n     * @description\n     * If the [`data`](#data) option is not set, the `startCols` option sets the initial number of empty columns.\n     *\n     * The `startCols` option works only in Handsontable's constructor.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 5\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // start with 15 empty columns\n     * startCols: 15,\n     * ```\n     */\n    startCols: 5,\n\n    /**\n     * @description\n     * If the [`data`](#data) option is not set, the `startRows` option sets the initial number of empty rows.\n     *\n     * The `startRows` option works only in Handsontable's constructor.\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 5\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // start with 15 empty rows\n     * startRows: 15,\n     * ```\n     */\n    startRows: 5,\n\n    /**\n     * @description\n     * The `stretchH` option determines what happens when the declared grid width\n     * is different from the calculated sum of all column widths.\n     *\n     * You can set the `stretchH` option to one of the following:\n     *\n     * | Setting            | Description                                                       |\n     * | ------------------ | ----------------------------------------------------------------- |\n     * | `'none'` (default) | Don't fit the grid to the container (disable column stretching)   |\n     * | `'last'`           | Fit the grid to the container, by stretching only the last column |\n     * | `'all'`            | Fit the grid to the container, by stretching all columns evenly   |\n     *\n     * Read more:\n     * - [Column width: Column stretching](@/guides/columns/column-width/column-width.md#column-stretching)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'none'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // fit the grid to the container\n     * // by stretching all columns evenly\n     * stretchH: 'all',\n     * ```\n     */\n    stretchH: 'none',\n\n    /**\n     * The `strict` option configures the behavior of [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) cells.\n     *\n     * You can set the `strict` option to one of the following:\n     *\n     * | Setting | Mode                                                                                          | Description                                                                                |\n     * | ------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |\n     * | `true`  | [Strict mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-strict-mode)         | The end user:<br>- Can only choose one of suggested values<br>- Can't enter a custom value |\n     * | `false` | [Flexible mode](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md#autocomplete-flexible-mode)     | The end user:<br>- Can choose one of suggested values<br>- Can enter a custom value        |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [`source`](#source)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *   // set the `type` of each cell in this column to `autocomplete`\n     *   type: 'autocomplete',\n     *   // set options available in every `autocomplete` cell of this column\n     *   source: ['A', 'B', 'C'],\n     *   // values entered must match `A`, `B`, or `C`\n     *   strict: true\n     *   },\n     * ],\n     * ```\n     */\n    strict: undefined,\n\n    /**\n     * The `tableClassName` option lets you add CSS class names\n     * to every Handsontable instance inside the `container` element.\n     *\n     * You can set the `tableClassName` option to one of the following:\n     *\n     * | Setting             | Description                                                                                |\n     * | ------------------- | ------------------------------------------------------------------------------------------ |\n     * | A string            | Add a single CSS class name to every Handsontable instance inside the `container` element  |\n     * | An array of strings | Add multiple CSS class names to every Handsontable instance inside the `container` element |\n     *\n     * Read more:\n     * - [`currentRowClassName`](#currentRowClassName)\n     * - [`currentColClassName`](#currentColClassName)\n     * - [`currentHeaderClassName`](#currentHeaderClassName)\n     * - [`activeHeaderClassName`](#activeHeaderClassName)\n     * - [`invalidCellClassName`](#invalidCellClassName)\n     * - [`placeholderCellClassName`](#placeholderCellClassName)\n     * - [`readOnlyCellClassName`](#readOnlyCellClassName)\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     * - [`commentedCellClassName`](#commentedCellClassName)\n     * - [`className`](#className)\n     *\n     * @memberof Options#\n     * @type {string|string[]}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // add a `your-class-name` CSS class name\n     * // to every Handsontable instance inside the `container` element\n     * tableClassName: 'your-class-name',\n     *\n     * // add `first-class-name` and `second-class-name` CSS class names\n     * // to every Handsontable instance inside the `container` element\n     * tableClassName: ['first-class-name', 'second-class-name'],\n     * ```\n     */\n    tableClassName: undefined,\n\n    /**\n     * The `tabMoves` option configures the action of the <kbd>**Tab**</kbd> key.\n     *\n     * You can set the `tabMoves` option to an object with the following properties\n     * (or to a function that returns such an object):\n     *\n     * | Property | Type   | Description                                                                                                                                              |\n     * | -------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | `row`    | Number | - On pressing <kbd>**Tab**</kbd>, move selection `row` rows down<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>, move selection `row` rows up              |\n     * | `col`    | Number | - On pressing <kbd>**Tab**</kbd>, move selection `col` columns right<br>- On pressing <kbd>**Shift**</kbd>+<kbd>**Tab**</kbd>, move selection `col` columns left     |\n     *\n     * @memberof Options#\n     * @type {object|Function}\n     * @default {row: 0, col: 1}\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // on pressing Tab, move selection 2 rows down and 2 columns right\n     * // on pressing Shift+Tab, move selection 2 rows up and 2 columns left\n     * tabMoves: {row: 2, col: 2},\n     *\n     * // the same setting, as a function\n     * // `event` is a DOM Event object received on pressing Tab\n     * // you can use it to check whether the user pressed Tab or Shift+Tab\n     * tabMoves(event) {\n     *   return {row: 2, col: 2};\n     * },\n     * ```\n     */\n    tabMoves: { row: 0, col: 1 },\n\n    /**\n     * @description\n     * The `title` option configures [column header](@/guides/columns/column-header/column-header.md) names.\n     *\n     * You can set the `title` option to a string.\n     *\n     * Read more:\n     * - [Column header](@/guides/columns/column-header/column-header.md)\n     * - [`columns`](#columns)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the first column header name to `First name`\n     *     title: 'First name',\n     *     type: 'text',\n     *   },\n     *   {\n     *     // set the second column header name to `Last name`\n     *     title: 'Last name',\n     *     type: 'text',\n     *   }\n     * ],\n     * ```\n     */\n    title: undefined,\n\n    /**\n     * The `trimDropdown` option configures the width of the [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) lists.\n     *\n     * You can set the `trimDropdown` option to one of the following:\n     *\n     * | Setting          | Description                                                                     |\n     * | ---------------- | ------------------------------------------------------------------------------- |\n     * | `true` (default) | Make the dropdown/autocomplete list's width the same as the edited cell's width |\n     * | `false`          | Scale the dropdown/autocomplete list's width to the list's content              |\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     // for each cell of this column\n     *     // make the `autocomplete` list's width the same as the edited cell's width\n     *     trimDropdown: true,\n     *   },\n     *   {\n     *     type: 'dropdown',\n     *     // for each cell of this column\n     *     // scale the `dropdown` list's width to the list's content\n     *     trimDropdown: false,\n     *   }\n     * ],\n     * ```\n     */\n    trimDropdown: true,\n\n    /**\n     * @description\n     * The `trimRows` option configures the [`TrimRows`](@/api/trimRows.md) plugin.\n     *\n     * You can set the `trimRows` option to one of the following:\n     *\n     * | Setting                          | Description                                                                                   |\n     * | -------------------------------- | --------------------------------------------------------------------------------------------- |\n     * | `false`                          | Disable the [`TrimRows`](@/api/trimRows.md) plugin                                            |\n     * | `true`                           | Enable the [`TrimRows`](@/api/trimRows.md) plugin                                             |\n     * | An array of physical row indexes | - Enable the [`TrimRows`](@/api/trimRows.md) plugin<br>- Trim selected rows at initialization |\n     *\n     * Read more:\n     * - [Plugins: `TrimRows`](@/api/trimRows.md)\n     * - [Row trimming](@/guides/rows/row-trimming/row-trimming.md)\n     *\n     * @memberof Options#\n     * @type {boolean|number[]}\n     * @default undefined\n     * @category TrimRows\n     *\n     * @example\n     * ```js\n     * // enable the `TrimRows` plugin\n     * trimRows: true,\n     *\n     * // enable the `TrimRows` plugin\n     * // at Handsontable's initialization, trim rows 5, 10, and 15\n     * trimRows: [5, 10, 15],\n     * ```\n     */\n    trimRows: undefined,\n\n    /**\n     * The `trimWhitespace` option configures automatic whitespace removal. This option\n     * affects the cell renderer and the cell editor.\n     *\n     * You can set the `trimWhitespace` option to one of the following:\n     *\n     * | Setting          | Description                                                     |\n     * | ---------------- | --------------------------------------------------------------- |\n     * | `true` (default) | Remove whitespace at the beginning and at the end of each cell |\n     * | `false`          | Don't remove whitespace                                         |\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // don't remove whitespace\n     *     // from any cell of this column\n     *     trimWhitespace: false\n     *   }\n     * ]\n     * ```\n     */\n    trimWhitespace: true,\n\n    /**\n     * @description\n     * The `type` option lets you set the [`renderer`](#renderer), [`editor`](#editor), and [`validator`](#validator)\n     * options all at once, by selecting a [cell type](@/guides/cell-types/cell-type/cell-type.md).\n     *\n     * You can set the `type` option to one of the following:\n     *\n     * | Cell type                                                         | Renderer, editor & validator                                                                                                                                                                                                                       |\n     * | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n     * | A [custom cell type](@/guides/cell-types/cell-type/cell-type.md)            | Renderer: your [custom cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md)<br>Editor: your [custom cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)<br>Validator: your [custom cell validator](@/guides/cell-functions/cell-validator/cell-validator.md) |\n     * | [`'autocomplete'`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md) | Renderer: `AutocompleteRenderer`<br>Editor: `AutocompleteEditor`<br>Validator: `AutocompleteValidator`                                                                         |\n     * | [`'checkbox'`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md)         | Renderer: `CheckboxRenderer`<br>Editor: `CheckboxEditor`<br>Validator: -                                                                                                                               |\n     * | [`'date'`](@/guides/cell-types/date-cell-type/date-cell-type.md)                 | Renderer: `DateRenderer`<br>Editor: `DateEditor`<br>Validator: `DateValidator`                                                                                                 |\n     * | [`'dropdown'`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)         | Renderer: `DropdownRenderer`<br>Editor: `DropdownEditor`<br>Validator: `DropdownValidator`                                                                                     |\n     * | [`'handsontable'`](@/guides/cell-types/handsontable-cell-type/handsontable-cell-type.md) | Renderer: `AutocompleteRenderer`<br>Editor: `HandsontableEditor`<br>Validator: -                                                                                                                       |\n     * | [`'numeric'`](@/guides/cell-types/numeric-cell-type/numeric-cell-type.md)           | Renderer: `NumericRenderer`<br>Editor: `NumericEditor`<br>Validator: `NumericValidator`                                                                                        |\n     * | [`'password'`](@/guides/cell-types/password-cell-type/password-cell-type.md)         | Renderer: `PasswordRenderer`<br>Editor: `PasswordEditor`<br>Validator: -                                                                                                                               |\n     * | `'text'`                                                          | Renderer: `TextRenderer`<br>Editor: `TextEditor`<br>Validator: -                                                                                                                                       |\n     * | [`'time`'](@/guides/cell-types/time-cell-type/time-cell-type.md)                 | Renderer: `TimeRenderer`<br>Editor: `TimeEditor`<br>Validator: `TimeValidator`                                                                                                 |\n     *\n     * Read more:\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Cell renderer](@/guides/cell-functions/cell-renderer/cell-renderer.md)\n     * - [Cell editor](@/guides/cell-functions/cell-editor/cell-editor.md)\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`renderer`](#renderer)\n     * - [`editor`](#editor)\n     * - [`validator`](#validator)\n     *\n     * @memberof Options#\n     * @type {string}\n     * @default 'text'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the `numeric` cell type for each cell of the entire grid\n     * type: `'numeric'`,\n     *\n     * // apply the `type` option to individual columns\n     * columns: [\n     *   {\n     *     // set the `autocomplete` cell type for each cell of this column\n     *     type: 'autocomplete'\n     *   },\n     *   {\n     *     // set the `myCustomCellType` cell type for each cell of this column\n     *     type: 'myCustomCellType'\n     *   }\n     * ]\n     * ```\n     */\n    type: 'text',\n\n    /**\n     * The `uncheckedTemplate` option lets you configure what value\n     * an unchecked [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell has.\n     *\n     * You can set the `uncheckedTemplate` option to one of the following:\n     *\n     * | Setting           | Description                                                                                                                                                                                |\n     * | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n     * | `false` (default) | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is unchecked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns `false`                 |\n     * | A string          | If a [`checkbox`](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md) cell is unchecked,<br>the [`getDataAtCell`](@/api/core.md#getDataAtCell) method for this cell returns a string of your choice |\n     *\n     * Read more:\n     * - [Checkbox cell type: Checkbox template](@/guides/cell-types/checkbox-cell-type/checkbox-cell-type.md#checkbox-template)\n     * - [`getDataAtCell()`](@/api/core.md#getDataAtCell)\n     * - [`checkedTemplate`](#checkedTemplate)\n     *\n     * @memberof Options#\n     * @type {boolean|string|number}\n     * @default false\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     // when unchecked, the cell's value is `false`\n     *     // when checked, the cell's value is `true`\n     *     type: 'checkbox',\n     *   },\n     *   {\n     *     // set the `type` of each cell in this column to `checkbox`\n     *     // when unchecked, the cell's value is `'No'`\n     *     // when checked, the cell's value is `'Yes'`\n     *     type: 'checkbox',\n     *     uncheckedTemplate: 'No'\n     *     checkedTemplate: 'Yes',\n     *  }\n     * ],\n     * ```\n     */\n    uncheckedTemplate: undefined,\n\n    /**\n     * The `undo` option configures the [`UndoRedo`](@/api/undoRedo.md) plugin.\n     *\n     * You can set the `undo` option to one of the following:\n     *\n     * | Setting | Description                                        |\n     * | ------- | -------------------------------------------------- |\n     * | `true`  | Enable the [`UndoRedo`](@/api/undoRedo.md) plugin  |\n     * | `false` | Disable the [`UndoRedo`](@/api/undoRedo.md) plugin |\n     *\n     * By default, the `undo` option is set to `undefined`,\n     * but the [`UndoRedo`](@/api/undoRedo.md) plugin acts as enabled.\n     * To disable the [`UndoRedo`](@/api/undoRedo.md) plugin completely,\n     * set the `undo` option to `false`.\n     *\n     * Read more:\n     * - [Undo and redo](@/guides/accessories-and-menus/undo-redo/undo-redo.md)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default undefined\n     * @category UndoRedo\n     *\n     * @example\n     * ```js\n     * // enable the `UndoRedo` plugin\n     * undo: true,\n     * ```\n     */\n    undo: undefined,\n\n    /**\n     * @description\n     * The `validator` option sets a [cell validator](@/guides/cell-functions/cell-validator/cell-validator.md) for a cell.\n     *\n     * You can set the `validator` option to one of the following:\n     *\n     * | Setting              | Description                                                                      |\n     * | -------------------- | -------------------------------------------------------------------------------- |\n     * | A string             | A [cell validator alias](@/guides/cell-functions/cell-validator/cell-validator.md)              |\n     * | A function           | Your [custom cell validator function](@/guides/cell-functions/cell-validator/cell-validator.md) |\n     * | A regular expression | A regular expression used for cell validation                                    |\n     *\n     * By setting the `validator` option to a string,\n     * you can use one of the following [cell validator aliases](@/guides/cell-functions/cell-validator/cell-validator.md):\n     *\n     * | Alias               | Cell validator function                                                 |\n     * | ------------------- | ----------------------------------------------------------------------- |\n     * | A custom alias      | Your [custom cell validator](@/guides/cell-functions/cell-validator/cell-validator.md) |\n     * | `'autocomplete'`    | `AutocompleteValidator`                                                 |\n     * | `'date'`            | `DateValidator`                                                         |\n     * | `'dropdown'`        | `DropdownValidator`                                                     |\n     * | `'numeric'`         | `NumericValidator`                                                      |\n     * | `'time'`            | `TimeValidator`                                                         |\n     *\n     * To set the [`editor`](#editor), [`renderer`](#renderer), and [`validator`](#validator)\n     * options all at once, use the [`type`](#type) option.\n     *\n     * Read more:\n     * - [Cell validator](@/guides/cell-functions/cell-validator/cell-validator.md)\n     * - [Cell type](@/guides/cell-types/cell-type/cell-type.md)\n     * - [Configuration options: Cascading configuration](@/guides/getting-started/configuration-options/configuration-options.md#cascading-configuration)\n     * - [`type`](#type)\n     *\n     * @memberof Options#\n     * @type {Function|RegExp|string}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *    {\n     *      // use a built-in `numeric` cell validator\n     *      validator: 'numeric'\n     *    },\n     *    {\n     *      // validate against a regular expression\n     *      validator: /^[0-9]$/\n     *    },\n     *    {\n     *      // add a custom cell validator function\n     *      validator(value, callback) {\n     *          ...\n     *      }\n     *    },\n     * ],\n     * ```\n     */\n    validator: undefined,\n\n    /**\n     * @description\n     * The `viewportColumnRenderingOffset` option configures the number of columns\n     * to be rendered outside of the grid's viewport.\n     *\n     * You can set the `viewportColumnRenderingOffset` option to one of the following:\n     *\n     * | Setting            | Description                                             |\n     * | ------------------ | ------------------------------------------------------- |\n     * | `auto` (default)   | Use the offset calculated automatically by Handsontable |\n     * | A number           | Set the offset manually                                 |\n     *\n     * The `viewportColumnRenderingOffset` setting is ignored when [`renderAllColumns`](#renderAllColumns) is set to `true`.\n     *\n     * Read more:\n     * - [Performance: Define the number of pre-rendered rows and columns](@/guides/optimization/performance/performance.md#define-the-number-of-pre-rendered-rows-and-columns)\n     *\n     * @memberof Options#\n     * @type {number|string}\n     * @default 'auto'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // render 70 columns outside of the grid's viewport\n     * viewportColumnRenderingOffset: 70,\n     * ```\n     */\n    viewportColumnRenderingOffset: 'auto',\n\n    /**\n     * @description\n     * The `viewportRowRenderingOffset` option configures the number of rows\n     * to be rendered outside of the grid's viewport.\n     *\n     * You can set the `viewportRowRenderingOffset` option to one of the following:\n     *\n     * | Setting            | Description                                             |\n     * | ------------------ | ------------------------------------------------------- |\n     * | `auto` (default)   | Use the offset calculated automatically by Handsontable |\n     * | A number           | Set the offset manually                                 |\n     *\n     * The `viewportRowRenderingOffset` setting is ignored when [`renderAllRows`](#renderAllRows) is set to `true`.\n     *\n     * Read more:\n     * - [Performance: Define the number of pre-rendered rows and columns](@/guides/optimization/performance/performance.md#define-the-number-of-pre-rendered-rows-and-columns)\n     * - [Column virtualization](@/guides/columns/column-virtualization/column-virtualization.md)\n     *\n     * @memberof Options#\n     * @type {number|string}\n     * @default 'auto'\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // render 70 rows outside of the grid's viewport\n     * viewportRowRenderingOffset: 70,\n     * ```\n     */\n    viewportRowRenderingOffset: 'auto',\n\n    /**\n     * The `visibleRows` option sets the height of the [`autocomplete`](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * and [`dropdown`](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md) lists.\n     *\n     * When the number of list options exceeds the `visibleRows` number, a scrollbar appears.\n     *\n     * Read more:\n     * - [Autocomplete cell type](@/guides/cell-types/autocomplete-cell-type/autocomplete-cell-type.md)\n     * - [Dropdown cell type](@/guides/cell-types/dropdown-cell-type/dropdown-cell-type.md)\n     *\n     * @memberof Options#\n     * @type {number}\n     * @default 10\n     * @category Core\n     *\n     * @example\n     * ```js\n     * columns: [\n     *   {\n     *     type: 'autocomplete',\n     *     // set the `autocomplete` list's height to 15 options\n     *     // for each cell of this column\n     *     visibleRows: 15,\n     *   },\n     *   {\n     *     type: 'dropdown',\n     *     // set the `dropdown` list's height to 5 options\n     *     // for each cell of this column\n     *     visibleRows: 5,\n     *   }\n     * ],\n     * ```\n     */\n    visibleRows: 10,\n\n    /**\n     * The `width` option configures the width of your grid.\n     *\n     * You can set the `width` option to one of the following:\n     *\n     * | Setting                                                                    | Example                   |\n     * | -------------------------------------------------------------------------- | ------------------------- |\n     * | A number of pixels                                                         | `width: 500`              |\n     * | A string with a [CSS unit](https://www.w3schools.com/cssref/css_units.asp) | `width: '75vw'`           |\n     * | A function that returns a valid number or string                           | `width() { return 500; }` |\n     *\n     * Read more:\n     * - [Grid size](@/guides/getting-started/grid-size/grid-size.md)\n     *\n     * @memberof Options#\n     * @type {number|string|Function}\n     * @default undefined\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set the grid's width to 500px\n     * width: 500,\n     *\n     * // set the grid's width to 75vw\n     * width: '75vw',\n     *\n     * // set the grid's width to 500px, using a function\n     * width() {\n     *   return 500;\n     * },\n     * ```\n     */\n    width: undefined,\n\n    /**\n     * The `wordWrap` option configures whether content that exceeds a column's width is wrapped or not.\n     *\n     * You can set the `wordWrap` option to one of the following:\n     *\n     * | Setting          | Description                                             |\n     * | ---------------- | ------------------------------------------------------- |\n     * | `true` (default) | If content exceeds the column's width, wrap the content |\n     * | `false`          | Don't wrap content                                      |\n     *\n     * To style cells that don't wrap content, use the [`noWordWrapClassName`](#noWordWrapClassName) option.\n     *\n     * Read more:\n     * - [`noWordWrapClassName`](#noWordWrapClassName)\n     *\n     * @memberof Options#\n     * @type {boolean}\n     * @default true\n     * @category Core\n     *\n     * @example\n     * ```js\n     * // set column width for every column of the entire grid\n     * colWidths: 100,\n     *\n     * columns: [\n     *   {\n     *     // don't wrap content in this column\n     *     wordWrap: false,\n     *   },\n     *   {\n     *     // if content exceeds this column's width, wrap the content\n     *     wordWrap: true,\n     *   }\n     * ],\n     * ```\n     */\n    wordWrap: true,\n\n    /* eslint-enable jsdoc/require-description-complete-sentence */\n  };\n};\n","import { extend } from '../../../helpers/object';\nimport { extendByMetaType } from '../utils';\n\n/**\n * The table meta object is a layer that keeps all settings of the Handsontable that was passed in\n * the constructor. That layer contains all default settings inherited from the GlobalMeta layer\n * merged with settings passed by the developer. Adding, removing, or changing property in that\n * object has no direct reflection on any other layers.\n *\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n */\nexport default class TableMeta {\n  /**\n   * Main object (instance of the internal TableMeta class from GlobalMeta), holder for all settings defined in the table scope.\n   *\n   * @type {TableMeta}\n   */\n  meta;\n\n  constructor(globalMeta) {\n    const MetaCtor = globalMeta.getMetaConstructor();\n\n    this.meta = new MetaCtor();\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @returns {TableMeta}\n   */\n  getMeta() {\n    return this.meta;\n  }\n\n  /**\n   * Updates table settings object by merging settings with the current state.\n   *\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(settings) {\n    extend(this.meta, settings);\n    extendByMetaType(this.meta, settings, settings);\n  }\n}\n","import { extend } from '../../../helpers/object';\nimport { columnFactory, extendByMetaType } from '../utils';\nimport LazyFactoryMap from '../lazyFactoryMap';\n\n/**\n * List of props which have to be cleared in the column meta-layer. That props have a\n * different meaning when using in column meta.\n *\n * @type {string[]}\n */\nconst COLUMNS_PROPS_CONFLICTS = ['data', 'width'];\n\n/**\n * The column meta object is a root of all settings defined in the column property of the Handsontable\n * settings. Each column in the Handsontable is associated with a unique meta object which is managed by\n * this layer. Adding, removing, or changing property in that object has a direct reflection only for\n * the CellMeta layer. The reflection will be visible only if the property doesn't exist in the lower\n * layers (prototype lookup).\n *\n * +-------------+.\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+.\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+.\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+.\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+.\n */\nexport default class ColumnMeta {\n  /**\n   * Reference to the GlobalMeta layer. While creating new column meta objects, all new objects\n   * inherit properties from the GlobalMeta layer.\n   *\n   * @type {GlobalMeta}\n   */\n  globalMeta;\n  /**\n   * The LazyFactoryMap structure, holder for column meta objects where each column meta is\n   * stored under the physical column index.\n   *\n   * @type {LazyFactoryMap}\n   */\n  metas = new LazyFactoryMap(() => this._createMeta());\n\n  constructor(globalMeta) {\n    this.globalMeta = globalMeta;\n    this.metas = new LazyFactoryMap(() => this._createMeta());\n  }\n\n  /**\n   * Updates column meta object by merging settings with the current state.\n   *\n   * @param {number} physicalColumn The physical column index which points what column meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(physicalColumn, settings) {\n    const meta = this.getMeta(physicalColumn);\n\n    extend(meta, settings);\n    extendByMetaType(meta, settings);\n  }\n\n  /**\n   * Creates one or more columns at specific position.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is added.\n   * @param {number} amount An amount of columns to add.\n   */\n  createColumn(physicalColumn, amount) {\n    this.metas.insert(physicalColumn, amount);\n  }\n\n  /**\n   * Removes one or more columns from the collection.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n   * @param {number} amount An amount columns to remove.\n   */\n  removeColumn(physicalColumn, amount) {\n    this.metas.remove(physicalColumn, amount);\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @param {number} physicalColumn The physical column index.\n   * @returns {object}\n   */\n  getMeta(physicalColumn) {\n    return this.metas.obtain(physicalColumn);\n  }\n\n  /**\n   * Gets constructor of the column meta object. Necessary for inheritance - creating the next meta layers.\n   *\n   * @param {number} physicalColumn The physical column index.\n   * @returns {Function}\n   */\n  getMetaConstructor(physicalColumn) {\n    return this.metas.obtain(physicalColumn).constructor;\n  }\n\n  /**\n   * Clears all saved column meta objects.\n   */\n  clearCache() {\n    this.metas.clear();\n  }\n\n  /**\n   * Creates and returns new column meta object with properties inherited from the global meta layer.\n   *\n   * @private\n   * @returns {object}\n   */\n  _createMeta() {\n    return columnFactory(this.globalMeta.getMetaConstructor(), COLUMNS_PROPS_CONFLICTS).prototype;\n  }\n}\n","import { arrayFilter } from '../../helpers/array';\nimport { assert, isUnsignedNumber, isNullish } from './utils';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @class LazyFactoryMap\n *\n * The LazyFactoryMap object holds key-value pairs in the structure similar to the\n * regular Map. Once created, items can be moved around a grid depending on the operations\n * performed on that grid - adding or removing rows. The collection requires \"key\"\n * to be a zero-based index.\n *\n * It's essential to notice that the \"key\" index under which the item was created\n * is volatile. After altering the grid, the \"key\" index can change.\n *\n * Having created N items with corresponding example data where the data has 10\n * holes (`undefined` values) within (that's why internal storage index counts from 10).\n * +------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/12 | 3/13 | 4/14 |  Keys (volatile zero-based index / internal storage index)\n * +------+------+------+------+------+.\n *    │      │      │      │      │\n * +------+------+------+------+------+.\n * | AAA  | BBB  | CCC  | DDD  | EEE  |  Data\n * +------+------+------+------+------+.\n *\n * Map.obtain(0) // returns \"AAA\"\n * map.obtain(2) // returns \"CCC\".\n *\n * After inserting 2 new rows, keys that hold the data positioned after the place\n * where the new rows are added are upshifted by 2.\n *               │\n *               │ Insert 2 rows\n *              \\│/\n * +------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/12 | 3/13 | 4/14 |  Keys before\n * +------+------+------+------+------+.\n *\n *                / 2 new rows \\\n * +------+------+------+------+------+------+------+.\n * | 0/10 | 1/11 | 2/15 | 3/16 | 4/12 | 5/13 | 6/14 |  Keys after\n * +------+------+------+------+------+------+------+.\n *    │       │      │      │      │      │     │\n *    │       │      └──────┼──────┼──────┼┐    │\n *    │       │             └──────┼──────┼┼────┼┐\n *    │       │      ┌─────────────┘      ││    ││\n *    │       │      │      ┌─────────────┘│    ││\n *    │       │      │      │      ┌───────┼────┘│\n *    │       │      │      │      │       │     │\n * +------+------+------+------+------+------+------+.\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *\n * Now at index 2 and 3 we have access to new items.\n *\n * map.obtain(2) // returns new value \"FFF\" for newly created row.\n * map.obtain(4) // index shifted by 2 has access to the old \"CCC\" value, as before inserting.\n *\n * after removing 4 rows, keys that hold the data positioned after the place where the\n * rows are removed are downshifted by 4.\n *        │\n *        │ Remove 4 rows\n *        ├───────────────────────────┐\n *       \\│/                          │\n * +------+------+------+------+------+------+------+\n * | 0/10 | 1/11 | 2/15 | 3/16 | 4/12 | 5/13 | 6/14 |  Keys after\n * +------+------+------+------+------+------+------+\n *    │       │      │      │      │      │     │\n *    │       │      └──────┼──────┼──────┼┐    │\n *    │       │             └──────┼──────┼┼────┼┐\n *    │       │      ┌─────────────┘      ││    ││\n *    │       │      │      ┌─────────────┘│    ││\n *    │       │      │      │      ┌───────┼────┘│\n *    │       │      │      │      │       │     │\n * +------+------+------+------+------+------+------+\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *\n * +------+------+------+\n * | 0/10 | 1/13 | 2/14 |  Keys after\n * +------+------+------+\n *    │       │      │\n *    │       │      └─────────────┐\n *    │       └────────────┐       │\n *    │                    │       │\n *    │                    │       │\n *    │                    │       │\n *    │                    │       │\n * +------+------+------+------+------+------+------+\n * | AAA  | BBB  | CCC  | DDD  | EEE  | FFF  | GGG  |  Data\n * +------+------+------+------+------+------+------+\n *           /│\\   /│\\                   /│\\   /│\\\n *            └──┬──┘                     └──┬──┘\n *           This data is marked as \"hole\" which\n *           means that can be replaced by new item\n *           when that will be created.\n *\n * map.obtain(2) // returns the value (\"EEE\") as it should. Access to the value is\n *               // changed (the key was downshifted). However, the internal index has not changed,\n *               // which means that the data does not need to be changed (spliced) too.\n *\n * After previous remove operation which creates some \"holes\" obtaining new\n * items replaces that \"holes\" as follows:\n *\n * // Obtains new item\n * map.obtain(90) // Returns \"NEW\" value\n *\n * +------+------+------+...+------+\n * | 0/10 | 1/13 | 2/14 |   | 90/0 |  Keys after\n * +------+------+------+...+------+\n *    │       │      │          │\n *    │       │      └──────────┼────────────┐\n *    │       └─────────────────┼─────┐      │\n *    └──────────┐              │     │      │\n *               │              │     │      │\n *    ┌──────────┼──────────────┘     │      │\n *    │          │                    │      │\n * +------+...+------+------+------+------+------+-----+\n * | NEW  |   | AAA  | BBB  | CCC  | DDD  | EEE  | FFF |  Data\n * +------+...+------+------+------+------+------+-----+\n *   /│\\\n *    │\n * The first \"hole\" (at index 0) item is permanently removed and replaced by a new item.\n * The hole index is taken from the hole collection which act as FIFO (First In First Out).\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport default class LazyFactoryMap {\n  /**\n   * The data factory function.\n   *\n   * @type {Function}\n   */\n  valueFactory;\n  /**\n   * An array which contains data.\n   *\n   * @type {Array}\n   */\n  data = [];\n  /**\n   * An array of indexes where the key of the array is mapped to the value which points to the\n   * specific position of the data array.\n   *\n   * @type {number[]}\n   */\n  index = [];\n  /**\n   * The collection of indexes that points to the data items which can be replaced by obtaining new\n   * ones. The \"holes\" are an intended effect of deleting entries.\n   *\n   * The idea of \"holes\" generally allows us to not modify the \"data\" structure while removing\n   * items from the collection.\n   *\n   * @type {Set<number>}\n   */\n  holes = new Set();\n\n  constructor(valueFactory) {\n    this.valueFactory = valueFactory;\n  }\n\n  /**\n   * Gets or if data not exist creates and returns new data.\n   *\n   * @param {number} key The item key as zero-based index.\n   * @returns {*}\n   */\n  obtain(key) {\n    assert(() => isUnsignedNumber(key), 'Expecting an unsigned number.');\n\n    const dataIndex = this._getStorageIndexByKey(key);\n    let result;\n\n    if (dataIndex >= 0) {\n      result = this.data[dataIndex];\n\n      if (result === undefined) {\n        result = this.valueFactory(key);\n        this.data[dataIndex] = result;\n      }\n    } else {\n      result = this.valueFactory(key);\n\n      if (this.holes.size > 0) {\n        const reuseIndex = this.holes.values().next().value; // Gets first item from the collection\n\n        this.holes.delete(reuseIndex);\n\n        this.data[reuseIndex] = result;\n        this.index[key] = reuseIndex;\n      } else {\n        this.data.push(result);\n        this.index[key] = this.data.length - 1;\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Inserts an empty data to the map. This method creates an empty space for obtaining\n   * new data.\n   *\n   * @param {number} key The key as volatile zero-based index at which to begin inserting space for new data.\n   * @param {number} [amount=1] Ammount of data to insert.\n   */\n  insert(key, amount = 1) {\n    assert(() => (isUnsignedNumber(key) || isNullish(key)), 'Expecting an unsigned number or null/undefined argument.');\n\n    const newIndexes = [];\n    const dataLength = this.data.length;\n\n    for (let i = 0; i < amount; i++) {\n      newIndexes.push(dataLength + i);\n      this.data.push(undefined);\n    }\n\n    const insertionIndex = isNullish(key) ? this.index.length : key;\n\n    this.index = [...this.index.slice(0, insertionIndex), ...newIndexes, ...this.index.slice(insertionIndex)];\n  }\n\n  /**\n   * Removes (soft remove) data from \"index\" and according to the amount of data.\n   *\n   * @param {number} key The key as volatile zero-based index at which to begin removing the data.\n   * @param {number} [amount=1] Ammount data to remove.\n   */\n  remove(key, amount = 1) {\n    assert(() => (isUnsignedNumber(key) || isNullish(key)), 'Expecting an unsigned number or null/undefined argument.');\n\n    const removed = this.index.splice(isNullish(key) ? this.index.length - amount : key, amount);\n\n    for (let i = 0; i < removed.length; i++) {\n      const removedIndex = removed[i];\n\n      if (typeof removedIndex === 'number') {\n        this.holes.add(removedIndex);\n      }\n    }\n  }\n\n  /**\n   * Returns the size of the data which this map holds.\n   *\n   * @returns {number}\n   */\n  size() {\n    return this.data.length - this.holes.size;\n  }\n\n  /**\n   * Returns a new Iterator object that contains the values for each item in the LazyMap object.\n   *\n   * @returns {Iterator}\n   */\n  values() {\n    return arrayFilter(this.data, (_, index) => !this.holes.has(index))[Symbol.iterator]();\n  }\n\n  /**\n   * Returns a new Iterator object that contains an array of `[index, value]` for each item in the LazyMap object.\n   *\n   * @returns {Iterator}\n   */\n  entries() {\n    const validEntries = [];\n\n    for (let i = 0; i < this.data.length; i++) {\n      const keyIndex = this._getKeyByStorageIndex(i);\n\n      if (keyIndex !== -1) {\n        validEntries.push([keyIndex, this.data[i]]);\n      }\n    }\n\n    let dataIndex = 0;\n\n    return {\n      next: () => {\n        if (dataIndex < validEntries.length) {\n          const value = validEntries[dataIndex];\n\n          dataIndex += 1;\n\n          return { value, done: false };\n        }\n\n        return { done: true };\n      }\n    };\n  }\n\n  /**\n   * Clears the map.\n   */\n  clear() {\n    this.data = [];\n    this.index = [];\n    this.holes.clear();\n  }\n\n  /**\n   * Gets storage index calculated from the key associated with the specified value.\n   *\n   * @param {number} key Volatile zero-based index.\n   * @returns {number} Returns index 0-N or -1 if no storage index found.\n   */\n  _getStorageIndexByKey(key) {\n    return this.index.length > key ? this.index[key] : -1;\n  }\n\n  /**\n   * Gets the key associated with the specified value calculated from storage index.\n   *\n   * @param {number} dataIndex Zero-based storage index.\n   * @returns {number} Returns index 0-N or -1 if no key found.\n   */\n  _getKeyByStorageIndex(dataIndex) {\n    return this.index.indexOf(dataIndex);\n  }\n\n  /**\n   * Makes this object iterable.\n   *\n   * @returns {Iterator}\n   */\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n}\n","import { extend } from '../../../helpers/object';\nimport { extendByMetaType, assert, isUnsignedNumber } from '../utils';\nimport LazyFactoryMap from '../lazyFactoryMap';\nimport { isDefined } from '../../../helpers/mixed';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @class CellMeta\n *\n * The cell meta object is a root of all settings defined for the specific cell rendered by the\n * Handsontable. Each cell meta inherits settings from higher layers. When a property doesn't\n * exist in that layer, it is looked up through a prototype to the highest layer. Starting\n * from CellMeta -> ColumnMeta and ending to GlobalMeta, which stores default settings. Adding,\n * removing, or changing property in that object has no direct reflection on any other layers.\n *\n * +-------------+\n * │ GlobalMeta  │\n * │ (prototype) │\n * +-------------+\\\n *       │         \\\n *       │          \\\n *      \\│/         _\\|\n * +-------------+    +-------------+\n * │ TableMeta   │    │ ColumnMeta  │\n * │ (instance)  │    │ (prototype) │\n * +-------------+    +-------------+\n *                         │\n *                         │\n *                        \\│/\n *                    +-------------+\n *                    │  CellMeta   │\n *                    │ (instance)  │\n *                    +-------------+\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport default class CellMeta {\n  /**\n   * Reference to the ColumnMeta layer. While creating new cell meta objects, all new objects\n   * inherit properties from the ColumnMeta layer.\n   *\n   * @type {ColumnMeta}\n   */\n  columnMeta;\n  /**\n   * Holder for cell meta objects, organized as a grid of LazyFactoryMap of LazyFactoryMaps.\n   * The access to the cell meta object is done through access to the row defined by the physical\n   * row index and then by accessing the second LazyFactory Map under the physical column index.\n   *\n   * @type {LazyFactoryMap<number, LazyFactoryMap<number, object>>}\n   */\n  metas = new LazyFactoryMap(() => this._createRow());\n\n  constructor(columnMeta) {\n    this.columnMeta = columnMeta;\n  }\n\n  /**\n   * Updates cell meta object by merging settings with the current state.\n   *\n   * @param {number} physicalRow The physical row index which points what cell meta object is updated.\n   * @param {number} physicalColumn The physical column index which points what cell meta object is updated.\n   * @param {object} settings An object to merge with.\n   */\n  updateMeta(physicalRow, physicalColumn, settings) {\n    const meta = this.getMeta(physicalRow, physicalColumn);\n\n    extend(meta, settings);\n    extendByMetaType(meta, settings);\n  }\n\n  /**\n   * Creates one or more rows at specific position.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is added.\n   * @param {number} amount An amount of rows to add.\n   */\n  createRow(physicalRow, amount) {\n    this.metas.insert(physicalRow, amount);\n  }\n\n  /**\n   * Creates one or more columns at specific position.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is added.\n   * @param {number} amount An amount of columns to add.\n   */\n  createColumn(physicalColumn, amount) {\n    for (let i = 0; i < this.metas.size(); i++) {\n      this.metas.obtain(i).insert(physicalColumn, amount);\n    }\n  }\n\n  /**\n   * Removes one or more rows from the collection.\n   *\n   * @param {number} physicalRow The physical row index which points from what position the row is removed.\n   * @param {number} amount An amount of rows to remove.\n   */\n  removeRow(physicalRow, amount) {\n    this.metas.remove(physicalRow, amount);\n  }\n\n  /**\n   * Removes one or more columns from the collection.\n   *\n   * @param {number} physicalColumn The physical column index which points from what position the column is removed.\n   * @param {number} amount An amount of columns to remove.\n   */\n  removeColumn(physicalColumn, amount) {\n    for (let i = 0; i < this.metas.size(); i++) {\n      this.metas.obtain(i).remove(physicalColumn, amount);\n    }\n  }\n\n  /**\n   * Gets settings object for this layer.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} [key] If the key exists its value will be returned, otherwise the whole cell meta object.\n   * @returns {object}\n   */\n  getMeta(physicalRow, physicalColumn, key) {\n    const cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n\n    if (key === undefined) {\n      return cellMeta;\n    }\n\n    return cellMeta[key];\n  }\n\n  /**\n   * Sets settings object for this layer defined by \"key\" property.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to set.\n   * @param {*} value Value to save.\n   */\n  setMeta(physicalRow, physicalColumn, key, value) {\n    const cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n\n    cellMeta._automaticallyAssignedMetaProps?.delete(key);\n    cellMeta[key] = value;\n  }\n\n  /**\n   * Removes a property defined by the \"key\" argument from the cell meta object.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @param {number} physicalColumn The physical column index.\n   * @param {string} key The property name to remove.\n   */\n  removeMeta(physicalRow, physicalColumn, key) {\n    const cellMeta = this.metas.obtain(physicalRow).obtain(physicalColumn);\n\n    delete cellMeta[key];\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation. As cell meta\n   * objects are created lazy, the length of the returned collection depends on how and when the\n   * table has asked for access to that meta objects.\n   *\n   * @returns {object[]}\n   */\n  getMetas() {\n    const metas = [];\n    const rows = Array.from(this.metas.values());\n\n    for (let row = 0; row < rows.length; row++) {\n      // Getting a meta for already added row (new row already exist - it has been added using `createRow` method).\n      // However, is not ready until the first `getMeta` call (lazy loading).\n      if (isDefined(rows[row])) {\n        metas.push(...rows[row].values());\n      }\n    }\n\n    return metas;\n  }\n\n  /**\n   * Returns all cell meta objects that were created during the Handsontable operation but for\n   * specific row index.\n   *\n   * @param {number} physicalRow The physical row index.\n   * @returns {object[]}\n   */\n  getMetasAtRow(physicalRow) {\n    assert(() => isUnsignedNumber(physicalRow), 'Expecting an unsigned number.');\n\n    const rowsMeta = new Map(this.metas);\n\n    return rowsMeta.has(physicalRow) ? Array.from(rowsMeta.get(physicalRow).values()) : [];\n  }\n\n  /**\n   * Clears all saved cell meta objects.\n   */\n  clearCache() {\n    this.metas.clear();\n  }\n\n  /**\n   * Creates and returns new structure for cell meta objects stored in columnar axis.\n   *\n   * @private\n   * @returns {object}\n   */\n  _createRow() {\n    return new LazyFactoryMap(physicalColumn => this._createMeta(physicalColumn));\n  }\n\n  /**\n   * Creates and returns new cell meta object with properties inherited from the column meta layer.\n   *\n   * @private\n   * @param {number} physicalColumn The physical column index.\n   * @returns {object}\n   */\n  _createMeta(physicalColumn) {\n    const ColumnMeta = this.columnMeta.getMetaConstructor(physicalColumn);\n\n    return new ColumnMeta();\n  }\n}\n","import { toUpperCaseFirst } from '../helpers/string';\nimport { isFunction } from '../helpers/function';\nimport DataMap from './dataMap';\nimport { deepClone } from '../helpers/object';\nimport { setAttribute } from '../helpers/dom/element';\nimport { A11Y_COLCOUNT, A11Y_ROWCOUNT } from '../helpers/a11y';\n\n/**\n * Loads new data to Handsontable.\n *\n * @private\n * @param {Array} data Array of arrays or array of objects containing data.\n * @param {Function} setDataMapFunction Function that updates the datamap instance.\n * @param {Function} callbackFunction Function that takes care of updating Handsontable to the new dataset. Called\n * right before the `after-` hooks.\n * @param {object} config The configuration object containing all the needed dependency references and information.\n * @param {Handsontable.Core} config.hotInstance The Handsontable instance.\n * @param {DataMap} config.dataMap The current `dataMap` instance.\n * @param {DataSource} config.dataSource The current `dataSource` instance.\n * @param {string} config.internalSource The immediate internal source of the `replaceData` call.\n * @param {string} config.source The source of the call.\n * @param {boolean} config.firstRun `true` if it's a first call in the Handsontable lifecycle, `false` otherwise.\n * @fires Hooks#beforeLoadData\n * @fires Hooks#beforeUpdateData\n * @fires Hooks#afterLoadData\n * @fires Hooks#afterUpdateData\n * @fires Hooks#afterChange\n */\nfunction replaceData(data, setDataMapFunction, callbackFunction, config) {\n  const {\n    hotInstance,\n    dataMap,\n    dataSource,\n    internalSource,\n    source,\n    metaManager,\n    firstRun\n  } = config;\n  const capitalizedInternalSource = toUpperCaseFirst(internalSource);\n  const tableMeta = hotInstance.getSettings();\n\n  if (Array.isArray(tableMeta.dataSchema)) {\n    hotInstance.dataType = 'array';\n  } else if (isFunction(tableMeta.dataSchema)) {\n    hotInstance.dataType = 'function';\n  } else {\n    hotInstance.dataType = 'object';\n  }\n\n  if (dataMap) {\n    dataMap.destroy();\n  }\n\n  data = hotInstance.runHooks(`before${capitalizedInternalSource}`, data, firstRun, source);\n\n  const newDataMap = new DataMap(hotInstance, data, metaManager);\n\n  // We need to apply the new dataMap immediately, because of some asynchronous logic in the\n  // `autoRowSize`/`autoColumnSize` plugins.\n  setDataMapFunction(newDataMap);\n\n  if (typeof data === 'object' && data !== null) {\n    if (!(data.push && data.splice)) { // check if data is array. Must use duck-type check so Backbone Collections also pass it\n      // when data is not an array, attempt to make a single-row array of it\n      // eslint-disable-next-line no-param-reassign\n      data = [data];\n    }\n\n  } else if (data === null) {\n    const dataSchema = newDataMap.getSchema();\n\n    // eslint-disable-next-line no-param-reassign\n    data = [];\n    let row;\n    let r = 0;\n    let rlen = 0;\n\n    for (r = 0, rlen = tableMeta.startRows; r < rlen; r++) {\n      if ((hotInstance.dataType === 'object' || hotInstance.dataType === 'function') && tableMeta.dataSchema) {\n        row = deepClone(dataSchema);\n        data.push(row);\n\n      } else if (hotInstance.dataType === 'array') {\n        row = deepClone(dataSchema[0]);\n        data.push(row);\n\n      } else {\n        row = [];\n\n        for (let c = 0, clen = tableMeta.startCols; c < clen; c++) {\n          row.push(null);\n        }\n\n        data.push(row);\n      }\n    }\n\n  } else {\n    throw new Error(`${internalSource} only accepts array of objects or array of arrays (${typeof data} given)`);\n  }\n\n  if (Array.isArray(data[0])) {\n    hotInstance.dataType = 'array';\n  }\n\n  tableMeta.data = data;\n\n  newDataMap.dataSource = data;\n  dataSource.data = data;\n  dataSource.dataType = hotInstance.dataType;\n  dataSource.colToProp = newDataMap.colToProp.bind(newDataMap);\n  dataSource.propToCol = newDataMap.propToCol.bind(newDataMap);\n  dataSource.countCachedColumns = newDataMap.countCachedColumns.bind(newDataMap);\n\n  // Run the logic for reassuring that the table structure fits the new dataset.\n  callbackFunction(newDataMap);\n\n  hotInstance.runHooks(`after${capitalizedInternalSource}`, data, firstRun, source);\n\n  // TODO: rethink the way the `afterChange` hook is being run here in the core `init` method.\n  if (!firstRun) {\n    hotInstance.runHooks('afterChange', null, internalSource);\n    hotInstance.render();\n  }\n\n  if (hotInstance.getSettings().ariaTags) {\n    setAttribute(hotInstance.rootElement, [\n      A11Y_ROWCOUNT(-1),\n      // If run after initialization, add the number of row headers.\n      A11Y_COLCOUNT(hotInstance.countCols() + (hotInstance.view ? hotInstance.countRowHeaders() : 0)),\n    ]);\n  }\n}\n\nexport {\n  replaceData\n};\n","import Hooks from '../../../pluginHooks';\nimport { hasOwnProperty } from '../../../helpers/object';\nimport { isFunction } from '../../../helpers/function';\n\n/**\n * @class DynamicCellMetaMod\n *\n * The `DynamicCellMetaMod` modifier allows for extending cell meta objects\n * (returned by `getCellMeta()` from `MetaManager`)\n * by user-specific properties.\n *\n * The user-specific properties can be added and changed dynamically,\n * either by Handsontable's hooks (`beforeGetCellMeta` and`afterGetCellMeta`),\n * or by Handsontable's `cells` option.\n *\n * The `getCellMeta()` method is used widely throughout the source code.\n * To boost the method's execution time,\n * the logic is triggered only once per one Handsontable slow render cycle.\n */\nexport class DynamicCellMetaMod {\n  /**\n   * @type {MetaManager}\n   */\n  metaManager;\n  /**\n   * @type {Map}\n   */\n  metaSyncMemo = new Map();\n\n  constructor(metaManager) {\n    this.metaManager = metaManager;\n\n    metaManager.addLocalHook('afterGetCellMeta', cellMeta => this.extendCellMeta(cellMeta));\n\n    Hooks.getSingleton().add('beforeRender', (forceFullRender) => {\n      if (forceFullRender) {\n        this.metaSyncMemo.clear();\n      }\n    }, this.metaManager.hot);\n  }\n\n  /**\n   * Extends the cell meta object by user-specific properties.\n   *\n   * The cell meta object can be extended dynamically,\n   * either by Handsontable's hooks (`beforeGetCellMeta` and`afterGetCellMeta`),\n   * or by Handsontable's `cells` option.\n   *\n   * To boost performance, the extending process is triggered only once per one slow Handsontable render cycle.\n   *\n   * @param {object} cellMeta The cell meta object.\n   */\n  extendCellMeta(cellMeta) {\n    const {\n      row: physicalRow,\n      col: physicalColumn,\n    } = cellMeta;\n\n    if (this.metaSyncMemo.get(physicalRow)?.has(physicalColumn)) {\n      return;\n    }\n\n    const {\n      visualRow,\n      visualCol,\n    } = cellMeta;\n    const hot = this.metaManager.hot;\n    const prop = hot.colToProp(visualCol);\n\n    cellMeta.prop = prop;\n\n    hot.runHooks('beforeGetCellMeta', visualRow, visualCol, cellMeta);\n\n    // extend a `type` value, added or changed in the `beforeGetCellMeta` hook\n    const cellType = hasOwnProperty(cellMeta, 'type') ? cellMeta.type : null;\n    let cellSettings = isFunction(cellMeta.cells) ? cellMeta.cells(physicalRow, physicalColumn, prop) : null;\n\n    if (cellType) {\n      if (cellSettings) {\n        cellSettings.type = cellSettings.type ?? cellType;\n      } else {\n        cellSettings = {\n          type: cellType,\n        };\n      }\n    }\n\n    if (cellSettings) {\n      this.metaManager.updateCellMeta(physicalRow, physicalColumn, cellSettings);\n    }\n\n    hot.runHooks('afterGetCellMeta', visualRow, visualCol, cellMeta);\n\n    if (!this.metaSyncMemo.has(physicalRow)) {\n      this.metaSyncMemo.set(physicalRow, new Set());\n    }\n\n    this.metaSyncMemo.get(physicalRow).add(physicalColumn);\n  }\n}\n","/**\n * @class ExtendMetaPropertiesMod\n */\nexport class ExtendMetaPropertiesMod {\n  /**\n   * @type {MetaManager}\n   */\n  metaManager;\n  /**\n   * @type {Set}\n   */\n  usageTracker = new Set();\n  /**\n   * @type {Map}\n   */\n  propDescriptors = new Map([\n    [\n      'ariaTags', {\n        initOnly: true,\n      }],\n    ['fixedColumnsLeft', {\n      target: 'fixedColumnsStart',\n      onChange(propName) {\n        const isRtl = this.metaManager.hot.isRtl();\n\n        if (isRtl && propName === 'fixedColumnsLeft') {\n          throw new Error('The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.');\n        }\n\n        if (this.usageTracker.has('fixedColumnsLeft') && this.usageTracker.has('fixedColumnsStart')) {\n          throw new Error('The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. ' +\n            'Please use only the option `fixedColumnsStart`.');\n        }\n      }\n    }],\n    ['layoutDirection', {\n      initOnly: true,\n    }],\n    ['renderAllColumns', {\n      initOnly: true,\n    }],\n    ['renderAllRows', {\n      initOnly: true,\n    }],\n  ]);\n\n  constructor(metaManager) {\n    this.metaManager = metaManager;\n\n    this.extendMetaProps();\n  }\n\n  /**\n   * Callback called when the prop is marked as `initOnly`.\n   *\n   * @param {string} propName The property name.\n   * @param {*} value The new value.\n   * @param {boolean} isInitialChange Is the change initial.\n   */\n  #initOnlyCallback = (propName, value, isInitialChange) => {\n    if (!isInitialChange) {\n      throw new Error(`The \\`${propName}\\` option can not be updated after the Handsontable is initialized.`);\n    }\n  }\n\n  /**\n   * Extends the meta options based on the object descriptors from the `propDescriptors` list.\n   */\n  extendMetaProps() {\n    this.propDescriptors.forEach((descriptor, alias) => {\n      const { initOnly, target, onChange } = descriptor;\n      const hasTarget = typeof target === 'string';\n      const targetProp = hasTarget ? target : alias;\n      const origProp = `_${targetProp}`;\n\n      this.metaManager.globalMeta.meta[origProp] = this.metaManager.globalMeta.meta[targetProp];\n\n      if (onChange) {\n        this.installPropWatcher(alias, origProp, onChange);\n\n        if (hasTarget) {\n          this.installPropWatcher(target, origProp, onChange);\n        }\n\n      } else if (initOnly) {\n        this.installPropWatcher(alias, origProp, this.#initOnlyCallback);\n\n        if (!this.metaManager.globalMeta.meta._initOnlySettings) {\n          this.metaManager.globalMeta.meta._initOnlySettings = [];\n        }\n\n        this.metaManager.globalMeta.meta._initOnlySettings.push(alias);\n      }\n    });\n  }\n\n  /**\n   * Installs the property watcher to the `propName` option and forwards getter and setter to\n   * the new one.\n   *\n   * @param {string} propName The property to watch.\n   * @param {string} origProp The property from/to the value is forwarded.\n   * @param {Function} onChange The callback.\n   */\n  installPropWatcher(propName, origProp, onChange) {\n    const self = this;\n\n    Object.defineProperty(this.metaManager.globalMeta.meta, propName, {\n      get() {\n        return this[origProp];\n      },\n      set(value) {\n        const isInitialChange = !self.usageTracker.has(propName);\n\n        self.usageTracker.add(propName);\n\n        onChange.call(self, propName, value, isInitialChange);\n\n        this[origProp] = value;\n      },\n      enumerable: true,\n      configurable: true\n    });\n  }\n}\n","export * from './focusCatcher';\nexport * from './viewportScroll';\n","import { GRID_GROUP } from '../../shortcutContexts';\nimport { installFocusDetector } from './focusDetector';\n\n/**\n * Installs a focus catcher module. The module observes when the table is focused and depending on\n * from the which side it was focused on it selects a specified cell or releases the TAB navigation\n * to the browser.\n *\n * @param {Core} hot The Handsontable instance.\n */\nexport function installFocusCatcher(hot) {\n  const clampCoordsIfNeeded = normalizeCoordsIfNeeded(hot);\n  let recentlyAddedFocusCoords;\n\n  const { activate, deactivate } = installFocusDetector(hot, {\n    onFocusFromTop() {\n      const mostTopStartCoords = clampCoordsIfNeeded(recentlyAddedFocusCoords) ?? getMostTopStartPosition(hot);\n\n      if (mostTopStartCoords) {\n        hot.runHooks('modifyFocusOnTabNavigation', 'from_above', mostTopStartCoords);\n        hot.selectCell(mostTopStartCoords.row, mostTopStartCoords.col);\n      }\n\n      hot.listen();\n    },\n    onFocusFromBottom() {\n      const mostBottomEndCoords = clampCoordsIfNeeded(recentlyAddedFocusCoords) ?? getMostBottomEndPosition(hot);\n\n      if (mostBottomEndCoords) {\n        hot.runHooks('modifyFocusOnTabNavigation', 'from_below', mostBottomEndCoords);\n        hot.selectCell(mostBottomEndCoords.row, mostBottomEndCoords.col);\n      }\n\n      hot.listen();\n    },\n  });\n\n  const rowWrapState = {\n    wrapped: false,\n    flipped: false,\n  };\n  let isSavingCoordsEnabled = true;\n  let isTabOrShiftTabPressed = false;\n  let preventViewportScroll = false;\n\n  hot.addHook('afterListen', () => deactivate());\n  hot.addHook('afterUnlisten', () => activate());\n  hot.addHook('afterSelection', (row, column, row2, column2, preventScrolling) => {\n    if (isTabOrShiftTabPressed && (rowWrapState.wrapped && rowWrapState.flipped || preventViewportScroll)) {\n      preventViewportScroll = false;\n      preventScrolling.value = true;\n    }\n\n    if (isSavingCoordsEnabled) {\n      recentlyAddedFocusCoords = hot.getSelectedRangeLast()?.highlight;\n    }\n  });\n  hot.addHook('beforeRowWrap', (interruptedByAutoInsertMode, newCoords, isFlipped) => {\n    rowWrapState.wrapped = true;\n    rowWrapState.flipped = isFlipped;\n  });\n\n  /**\n   * Unselects the cell and deactivates the table.\n   */\n  function deactivateTable() {\n    rowWrapState.wrapped = false;\n    rowWrapState.flipped = false;\n    hot.deselectCell();\n    hot.unlisten();\n  }\n\n  const shortcutOptions = {\n    keys: [['Tab'], ['Shift', 'Tab']],\n    preventDefault: false,\n    stopPropagation: false,\n    relativeToGroup: GRID_GROUP,\n    group: 'focusCatcher',\n  };\n\n  hot.getShortcutManager()\n    .getContext('grid')\n    .addShortcuts([\n      {\n        ...shortcutOptions,\n        callback: () => {\n          const { tabNavigation } = hot.getSettings();\n\n          isTabOrShiftTabPressed = true;\n\n          if (hot.getSelectedRangeLast() && !tabNavigation) {\n            isSavingCoordsEnabled = false;\n          }\n\n          if (!tabNavigation) {\n            preventViewportScroll = true;\n          }\n        },\n        position: 'before',\n      },\n      {\n        ...shortcutOptions,\n        callback: (event) => {\n          const { tabNavigation, autoWrapRow } = hot.getSettings();\n\n          isTabOrShiftTabPressed = false;\n          isSavingCoordsEnabled = true;\n\n          if (\n            !tabNavigation ||\n            !hot.selection.isSelected() ||\n            autoWrapRow && rowWrapState.wrapped && rowWrapState.flipped ||\n            !autoWrapRow && rowWrapState.wrapped\n          ) {\n            if (autoWrapRow && rowWrapState.wrapped && rowWrapState.flipped) {\n              recentlyAddedFocusCoords = event.shiftKey\n                ? getMostTopStartPosition(hot) : getMostBottomEndPosition(hot);\n            }\n\n            deactivateTable();\n\n            return false;\n          }\n\n          // if the selection is still within the table's range then prevent default action\n          event.preventDefault();\n        },\n        position: 'after',\n      }\n    ]);\n}\n\n/**\n * Gets the coordinates of the most top-start cell or header (depends on the table settings and its size).\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {CellCoords|null}\n */\nfunction getMostTopStartPosition(hot) {\n  const { rowIndexMapper, columnIndexMapper } = hot;\n  const { navigableHeaders } = hot.getSettings();\n  let topRow = navigableHeaders && hot.countColHeaders() > 0 ? -hot.countColHeaders() : 0;\n  let startColumn = navigableHeaders && hot.countRowHeaders() > 0 ? -hot.countRowHeaders() : 0;\n\n  if (topRow === 0) {\n    topRow = rowIndexMapper.getVisualFromRenderableIndex(topRow);\n  }\n\n  if (startColumn === 0) {\n    startColumn = columnIndexMapper.getVisualFromRenderableIndex(startColumn);\n  }\n\n  if (topRow === null || startColumn === null) {\n    return null;\n  }\n\n  return hot._createCellCoords(topRow, startColumn);\n}\n\n/**\n * Gets the coordinates of the most bottom-end cell or header (depends on the table settings and its size).\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {CellCoords|null}\n */\nfunction getMostBottomEndPosition(hot) {\n  const { rowIndexMapper, columnIndexMapper } = hot;\n  const { navigableHeaders } = hot.getSettings();\n  let bottomRow = rowIndexMapper.getRenderableIndexesLength() - 1;\n  let endColumn = columnIndexMapper.getRenderableIndexesLength() - 1;\n\n  if (bottomRow < 0) {\n    if (!navigableHeaders || hot.countColHeaders() === 0) {\n      return null;\n    }\n\n    bottomRow = -1;\n  }\n\n  if (endColumn < 0) {\n    if (!navigableHeaders || hot.countColHeaders() === 0) {\n      return null;\n    }\n\n    endColumn = -1;\n  }\n\n  return hot._createCellCoords(\n    rowIndexMapper.getVisualFromRenderableIndex(bottomRow) ?? bottomRow,\n    columnIndexMapper.getVisualFromRenderableIndex(endColumn) ?? endColumn,\n  );\n}\n\n/**\n * Normalizes the coordinates (clamps to nearest visible cell position within dataset range).\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {function(Coords | undefined): Coords | null}\n */\nfunction normalizeCoordsIfNeeded(hot) {\n  return (coords) => {\n    if (!coords) {\n      return null;\n    }\n\n    const mostTopStartCoords = getMostTopStartPosition(hot);\n    const mostBottomEndCoords = getMostBottomEndPosition(hot);\n\n    if (coords.col < mostTopStartCoords.col) {\n      coords.col = mostTopStartCoords.col;\n    }\n    if (coords.col > mostBottomEndCoords.col) {\n      coords.col = mostBottomEndCoords.col;\n    }\n\n    if (coords.row < mostTopStartCoords.row) {\n      coords.row = mostTopStartCoords.row;\n    }\n    if (coords.row > mostBottomEndCoords.row) {\n      coords.row = mostBottomEndCoords.row;\n    }\n\n    return coords;\n  };\n}\n","import { shortcutsEditorContext } from './editor';\nimport { shortcutsGridContext } from './grid';\n\nexport * from './constants';\n\n/**\n * Register all shortcut contexts.\n *\n * @param {Handsontable} hotInstance The Handsontable instance.\n */\nexport function registerAllShortcutContexts(hotInstance) {\n  [\n    shortcutsGridContext,\n    shortcutsEditorContext,\n  ].forEach(context => context(hotInstance));\n}\n","import { EDITOR_EDIT_GROUP } from './constants';\nimport { createKeyboardShortcutCommandsPool } from './commands';\n\n/**\n * The context that defines a base shortcut list available for cells editors.\n *\n * @param {Handsontable} hot The Handsontable instance.\n */\nexport function shortcutsEditorContext(hot) {\n  const context = hot.getShortcutManager().addContext('editor');\n  const commandsPool = createKeyboardShortcutCommandsPool(hot);\n  const config = { group: EDITOR_EDIT_GROUP };\n\n  context.addShortcuts([{\n    keys: [['Enter'], ['Enter', 'Shift']],\n    callback: (event, keys) => commandsPool.editorCloseAndSaveByEnter(event, keys),\n  }, {\n    keys: [['Enter', 'Control/Meta'], ['Enter', 'Control/Meta', 'Shift']],\n    captureCtrl: true,\n    callback: (event, keys) => commandsPool.editorCloseAndSaveByEnter(event, keys),\n  }, {\n    keys: [['Tab'], ['Tab', 'Shift'], ['PageDown'], ['PageUp']],\n    forwardToContext: hot.getShortcutManager().getContext('grid'),\n    callback: (event, keys) => commandsPool.editorCloseAndSave(event, keys),\n  }, {\n    keys: [['ArrowDown'], ['ArrowUp'], ['ArrowLeft'], ['ArrowRight']],\n    preventDefault: false,\n    callback: (event, keys) => commandsPool.editorCloseAndSaveByArrowKeys(event, keys),\n  }, {\n    keys: [['Escape'], ['Escape', 'Control/Meta']],\n    callback: () => commandsPool.editorCloseWithoutSaving(),\n  }], config);\n}\n","/**\n * Group name for keyboard shortcuts that are active when the cell is selected.\n */\nexport const GRID_GROUP = 'gridDefault';\n/**\n * Group name for keyboard shortcuts that are active when the cell editor is active.\n */\nexport const EDITOR_EDIT_GROUP = 'editorManager.handlingEditor';\n","import { getAllCommands as getAllEditorCommands } from './editor';\nimport { getAllCommands as getAllSelectionExtendCommands } from './extendCellsSelection';\nimport { getAllCommands as getAllSelectionMoveCommands } from './moveCellSelection';\nimport { command as emptySelectedCells } from './emptySelectedCells';\nimport { command as scrollToFocusedCell } from './scrollToFocusedCell';\nimport { command as selectAllCells } from './selectAllCells';\nimport { command as selectAllCellsAndHeaders } from './selectAllCellsAndHeaders';\nimport { command as populateSelectedCellsData } from './populateSelectedCellsData';\n\nconst allCommands = [\n  ...getAllEditorCommands(),\n  ...getAllSelectionExtendCommands(),\n  ...getAllSelectionMoveCommands(),\n  emptySelectedCells,\n  scrollToFocusedCell,\n  selectAllCells,\n  selectAllCellsAndHeaders,\n  populateSelectedCellsData,\n];\n\n/**\n * Prepares and creates an object with all available commands to trigger.\n *\n * @param {Handsontable} hot The Handsontable instance.\n * @returns {object}\n */\nexport function createKeyboardShortcutCommandsPool(hot) {\n  const commands = {};\n\n  allCommands.forEach(({ name, callback }) => {\n    commands[name] = (...args) => callback(hot, ...args);\n  });\n\n  return commands;\n}\n","import { command as closeAndSave } from './closeAndSave';\nimport { command as closeAndSaveByArrowKeys } from './closeAndSaveByArrowKeys';\nimport { command as closeAndSaveByEnter } from './closeAndSaveByEnter';\nimport { command as closeWithoutSaving } from './closeWithoutSaving';\nimport { command as fastOpen } from './fastOpen';\nimport { command as open } from './open';\n\n/**\n * Returns complete list of the shortcut commands for the cells editing feature.\n *\n * @returns {Function[]}\n */\nexport function getAllCommands() {\n  return [\n    closeAndSave,\n    closeAndSaveByArrowKeys,\n    closeAndSaveByEnter,\n    closeWithoutSaving,\n    fastOpen,\n    open,\n  ];\n}\n","export const command = {\n  name: 'editorCloseAndSave',\n  callback(hot) {\n    const editorManager = hot._getEditorManager();\n\n    editorManager.closeEditorAndSaveChanges();\n  },\n};\n","import { EDITOR_STATE } from '../../../editors/baseEditor';\n\nexport const command = {\n  name: 'editorCloseAndSaveByArrowKeys',\n  callback(hot, event, keys) {\n    const editorManager = hot._getEditorManager();\n    const activeEditor = editorManager.getActiveEditor();\n\n    if (activeEditor.isInFullEditMode() && activeEditor.state === EDITOR_STATE.EDITING) {\n      return;\n    }\n\n    editorManager.closeEditorAndSaveChanges();\n\n    if (hot.getSelected()) {\n      if (keys.includes('arrowdown')) {\n        hot.selection.transformStart(1, 0);\n\n      } else if (keys.includes('arrowup')) {\n        hot.selection.transformStart(-1, 0);\n\n      } else if (keys.includes('arrowleft')) {\n        hot.selection.transformStart(0, -1 * hot.getDirectionFactor());\n\n      } else if (keys.includes('arrowright')) {\n        hot.selection.transformStart(0, hot.getDirectionFactor());\n      }\n    }\n\n    event.preventDefault();\n  },\n};\n","export {\n  EDITOR_STATE,\n  EDITOR_TYPE,\n  BaseEditor,\n} from './baseEditor';\n","import { stringify } from '../../helpers/mixed';\nimport { mixin } from '../../helpers/object';\nimport hooksRefRegisterer from '../../mixins/hooksRefRegisterer';\nimport {\n  getScrollbarWidth,\n  offset,\n  hasVerticalScrollbar,\n  hasHorizontalScrollbar,\n  outerWidth,\n  outerHeight,\n  getComputedStyle,\n} from '../../helpers/dom/element';\n\nexport const EDITOR_TYPE = 'base';\nexport const EDITOR_STATE = Object.freeze({\n  VIRGIN: 'STATE_VIRGIN', // before editing\n  EDITING: 'STATE_EDITING',\n  WAITING: 'STATE_WAITING', // waiting for async validation\n  FINISHED: 'STATE_FINISHED'\n});\n\n/**\n * @class BaseEditor\n */\nexport class BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * A reference to the source instance of the Handsontable.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Editor's state.\n   *\n   * @type {string}\n   */\n  state = EDITOR_STATE.VIRGIN;\n  /**\n   * Flag to store information about editor's opening status.\n   *\n   * @private\n   *\n   * @type {boolean}\n   */\n  _opened = false;\n  /**\n   * Defines the editor's editing mode. When false, then an editor works in fast editing mode.\n   *\n   * @private\n   *\n   * @type {boolean}\n   */\n  _fullEditMode = false;\n  /**\n   * Callback to call after closing editor.\n   *\n   * @type {Function}\n   */\n  _closeCallback = null;\n  /**\n   * Currently rendered cell's TD element.\n   *\n   * @type {HTMLTableCellElement}\n   */\n  TD = null;\n  /**\n   * Visual row index.\n   *\n   * @type {number}\n   */\n  row = null;\n  /**\n   * Visual column index.\n   *\n   * @type {number}\n   */\n  col = null;\n  /**\n   * Column property name or a column index, if datasource is an array of arrays.\n   *\n   * @type {number|string}\n   */\n  prop = null;\n  /**\n   * Original cell's value.\n   *\n   * @type {*}\n   */\n  originalValue = null;\n  /**\n   * Object containing the cell's properties.\n   *\n   * @type {object}\n   */\n  cellProperties = null;\n\n  /**\n   * @param {Handsontable} hotInstance A reference to the source instance of the Handsontable.\n   */\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n    this.init();\n  }\n\n  /**\n   * Fires callback after closing editor.\n   *\n   * @private\n   * @param {boolean} result The editor value.\n   */\n  _fireCallbacks(result) {\n    if (this._closeCallback) {\n      this._closeCallback(result);\n      this._closeCallback = null;\n    }\n  }\n\n  /**\n   * Initializes an editor's intance.\n   */\n  init() {}\n\n  /**\n   * Required method to get current value from editable element.\n   */\n  getValue() {\n    throw Error('Editor getValue() method unimplemented');\n  }\n\n  /**\n   * Required method to set new value into editable element.\n   */\n  setValue() {\n    throw Error('Editor setValue() method unimplemented');\n  }\n\n  /**\n   * Required method to open editor.\n   */\n  open() {\n    throw Error('Editor open() method unimplemented');\n  }\n\n  /**\n   * Required method to close editor.\n   */\n  close() {\n    throw Error('Editor close() method unimplemented');\n  }\n\n  /**\n   * Prepares editor's meta data.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    this.TD = td;\n    this.row = row;\n    this.col = col;\n    this.prop = prop;\n    this.originalValue = value;\n    this.cellProperties = cellProperties;\n    this.state = this.isOpened() ? this.state : EDITOR_STATE.VIRGIN;\n  }\n\n  /**\n   * Fallback method to provide extendable editors in ES5.\n   *\n   * @returns {Function}\n   */\n  extend() {\n    return (class Editor extends this.constructor {});\n  }\n\n  /**\n   * Saves value from editor into data storage.\n   *\n   * @param {*} value The editor value.\n   * @param {boolean} ctrlDown If `true`, applies value to each cell in the last selected range.\n   */\n  saveValue(value, ctrlDown) {\n    let visualRowFrom;\n    let visualColumnFrom;\n    let visualRowTo;\n    let visualColumnTo;\n\n    // if ctrl+enter and multiple cells selected, behave like Excel (finish editing and apply to all cells)\n    if (ctrlDown) {\n      const selectedLast = this.hot.getSelectedLast();\n\n      visualRowFrom = Math.max(Math.min(selectedLast[0], selectedLast[2]), 0); // Math.max eliminate headers coords.\n      visualColumnFrom = Math.max(Math.min(selectedLast[1], selectedLast[3]), 0); // Math.max eliminate headers coords.\n      visualRowTo = Math.max(selectedLast[0], selectedLast[2]);\n      visualColumnTo = Math.max(selectedLast[1], selectedLast[3]);\n\n    } else {\n      [visualRowFrom, visualColumnFrom, visualRowTo, visualColumnTo] = [this.row, this.col, null, null];\n    }\n\n    const modifiedCellCoords = this.hot.runHooks('modifyGetCellCoords', visualRowFrom, visualColumnFrom);\n\n    if (Array.isArray(modifiedCellCoords)) {\n      [visualRowFrom, visualColumnFrom] = modifiedCellCoords;\n    }\n\n    // Saving values using the modified coordinates.\n    this.hot.populateFromArray(visualRowFrom, visualColumnFrom, value, visualRowTo, visualColumnTo, 'edit');\n  }\n\n  /**\n   * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n   *\n   * @param {*} newInitialValue The initial editor value.\n   * @param {Event} event The keyboard event object.\n   */\n  beginEditing(newInitialValue, event) {\n    if (this.state !== EDITOR_STATE.VIRGIN) {\n      return;\n    }\n\n    const hotInstance = this.hot;\n    // We have to convert visual indexes into renderable indexes\n    // due to hidden columns don't participate in the rendering process\n    const renderableRowIndex = hotInstance.rowIndexMapper.getRenderableFromVisualIndex(this.row);\n    const renderableColumnIndex = hotInstance.columnIndexMapper.getRenderableFromVisualIndex(this.col);\n\n    hotInstance.view.scrollViewport(hotInstance._createCellCoords(renderableRowIndex, renderableColumnIndex));\n    this.state = EDITOR_STATE.EDITING;\n\n    // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,\n    // otherwise IME (editor for Asia users) doesn't work.\n    if (this.isInFullEditMode()) {\n      const stringifiedInitialValue = typeof newInitialValue === 'string' ?\n        newInitialValue : stringify(this.originalValue);\n\n      this.setValue(stringifiedInitialValue);\n    }\n\n    this.open(event);\n    this._opened = true;\n    this.focus();\n\n    // only rerender the selections (FillHandle should disappear when beginEditing is triggered)\n    hotInstance.view.render();\n\n    hotInstance.runHooks('afterBeginEditing', this.row, this.col);\n  }\n\n  /**\n   * Finishes editing and start saving or restoring process for editing cell or last selected range.\n   *\n   * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n   * @param {Function} callback The callback function, fired after editor closing.\n   */\n  finishEditing(restoreOriginalValue, ctrlDown, callback) {\n    let val;\n\n    if (callback) {\n      const previousCloseCallback = this._closeCallback;\n\n      this._closeCallback = (result) => {\n        if (previousCloseCallback) {\n          previousCloseCallback(result);\n        }\n\n        callback(result);\n        this.hot.view.render();\n      };\n    }\n\n    if (this.isWaiting()) {\n      return;\n    }\n\n    if (this.state === EDITOR_STATE.VIRGIN) {\n      this.hot._registerTimeout(() => {\n        this._fireCallbacks(true);\n      });\n\n      return;\n    }\n\n    if (this.state === EDITOR_STATE.EDITING) {\n      if (restoreOriginalValue) {\n        this.cancelChanges();\n        this.hot.view.render();\n\n        return;\n      }\n\n      const value = this.getValue();\n\n      if (this.cellProperties.trimWhitespace) {\n        // We trim only string values\n        val = [\n          [typeof value === 'string' ? String.prototype.trim.call(value || '') : value]\n        ];\n      } else {\n        val = [\n          [value]\n        ];\n      }\n\n      this.state = EDITOR_STATE.WAITING;\n      this.saveValue(val, ctrlDown);\n\n      if (this.hot.getCellValidator(this.cellProperties)) {\n        this.hot.addHookOnce('postAfterValidate', (result) => {\n          this.state = EDITOR_STATE.FINISHED;\n          this.discardEditor(result);\n        });\n      } else {\n        this.state = EDITOR_STATE.FINISHED;\n        this.discardEditor(true);\n      }\n    }\n  }\n\n  /**\n   * Finishes editing without singout saving value.\n   */\n  cancelChanges() {\n    this.state = EDITOR_STATE.FINISHED;\n    this.discardEditor();\n  }\n\n  /**\n   * Verifies result of validation or closes editor if user's cancelled changes.\n   *\n   * @param {boolean|undefined} result If `false` and the cell using allowInvalid option,\n   *                                   then an editor won't be closed until validation is passed.\n   */\n  discardEditor(result) {\n    if (this.state !== EDITOR_STATE.FINISHED) {\n      return;\n    }\n\n    // validator was defined and failed\n    if (result === false && this.cellProperties.allowInvalid !== true) {\n      this.hot.selectCell(this.row, this.col);\n      this.focus();\n      this.state = EDITOR_STATE.EDITING;\n      this._fireCallbacks(false);\n\n    } else {\n      this.close();\n      this._opened = false;\n      this._fullEditMode = false;\n      this.state = EDITOR_STATE.VIRGIN;\n      this._fireCallbacks(true);\n\n      const shortcutManager = this.hot.getShortcutManager();\n\n      shortcutManager.setActiveContextName('grid');\n    }\n  }\n\n  /**\n   * Switch editor into full edit mode. In this state navigation keys don't close editor. This mode is activated\n   * automatically after hit ENTER or F2 key on the cell or while editing cell press F2 key.\n   */\n  enableFullEditMode() {\n    this._fullEditMode = true;\n  }\n\n  /**\n   * Checks if editor is in full edit mode.\n   *\n   * @returns {boolean}\n   */\n  isInFullEditMode() {\n    return this._fullEditMode;\n  }\n\n  /**\n   * Returns information whether the editor is open.\n   *\n   * @returns {boolean}\n   */\n  isOpened() {\n    return this._opened;\n  }\n\n  /**\n   * Returns information whether the editor is waiting, eg.: for async validation.\n   *\n   * @returns {boolean}\n   */\n  isWaiting() {\n    return this.state === EDITOR_STATE.WAITING;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * Gets the object that provides information about the edited cell size and its position\n   * relative to the table viewport.\n   *\n   * The rectangle has six integer properties:\n   *  - `top` The top position relative to the table viewport\n   *  - `start` The left (or right in RTL) position relative to the table viewport\n   *  - `width` The cell's current width;\n   *  - `maxWidth` The maximum cell's width after which the editor goes out of the table viewport\n   *  - `height` The cell's current height;\n   *  - `maxHeight` The maximum cell's height after which the editor goes out of the table viewport\n   *\n   * @returns {{top: number, start: number, width: number, maxWidth: number, height: number, maxHeight: number} | undefined}\n   */\n  getEditedCellRect() {\n    const TD = this.getEditedCell();\n\n    // TD is outside of the viewport.\n    if (!TD) {\n      return;\n    }\n\n    const { wtOverlays, wtViewport } = this.hot.view._wt;\n    const rootWindow = this.hot.rootWindow;\n    const currentOffset = offset(TD);\n    const cellWidth = outerWidth(TD);\n    const containerOffset = offset(this.hot.rootElement);\n    const containerWidth = outerWidth(this.hot.rootElement);\n    const scrollableContainerTop = wtOverlays.topOverlay.holder;\n    const scrollableContainerLeft = wtOverlays.inlineStartOverlay.holder;\n    const containerScrollTop = scrollableContainerTop !== rootWindow ?\n      scrollableContainerTop.scrollTop : 0;\n    const containerScrollLeft = scrollableContainerLeft !== rootWindow ?\n      scrollableContainerLeft.scrollLeft : 0;\n    const gridMostRightPos = rootWindow.innerWidth - containerOffset.left - containerWidth;\n    const { wtTable: overlayTable } = wtOverlays.getParentOverlay(TD) ?? this.hot.view._wt;\n    const overlayName = overlayTable.name;\n\n    const scrollTop = ['master', 'inline_start'].includes(overlayName) ? containerScrollTop : 0;\n    const scrollLeft = ['master', 'top', 'bottom'].includes(overlayName) ? containerScrollLeft : 0;\n\n    // If colHeaders is disabled, cells in the first row have border-top\n    const editTopModifier = currentOffset.top === containerOffset.top ? 0 : 1;\n\n    let topPos = currentOffset.top - containerOffset.top - editTopModifier - scrollTop;\n    let inlineStartPos = 0;\n\n    if (this.hot.isRtl()) {\n      inlineStartPos = rootWindow.innerWidth - currentOffset.left - cellWidth - gridMostRightPos - 1 + scrollLeft;\n    } else {\n      inlineStartPos = currentOffset.left - containerOffset.left - 1 - scrollLeft;\n    }\n\n    // When the scrollable element is Window object then the editor position needs to be compensated\n    // by the overlays' position (position relative to the table viewport). In other cases, the overlay's\n    // position always returns 0.\n    if (['top', 'top_inline_start_corner'].includes(overlayName)) {\n      topPos += wtOverlays.topOverlay.getOverlayOffset();\n    }\n\n    if (['inline_start', 'top_inline_start_corner'].includes(overlayName)) {\n      inlineStartPos += Math.abs(wtOverlays.inlineStartOverlay.getOverlayOffset());\n    }\n\n    const hasColumnHeaders = this.hot.hasColHeaders();\n    const renderableRow = this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row);\n    const renderableColumn = this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col);\n    const nrOfRenderableRowIndexes = this.hot.rowIndexMapper.getRenderableIndexesLength();\n    const firstRowIndexOfTheBottomOverlay = nrOfRenderableRowIndexes - this.hot.view._wt.getSetting('fixedRowsBottom');\n\n    if (hasColumnHeaders && renderableRow <= 0 || renderableRow === firstRowIndexOfTheBottomOverlay) {\n      topPos += 1;\n    }\n\n    if (renderableColumn <= 0) {\n      inlineStartPos += 1;\n    }\n\n    const firstRowOffset = wtViewport.rowsRenderCalculator.startPosition;\n    const firstColumnOffset = wtViewport.columnsRenderCalculator.startPosition;\n    const horizontalScrollPosition = Math.abs(wtOverlays.inlineStartOverlay.getScrollPosition());\n    const verticalScrollPosition = wtOverlays.topOverlay.getScrollPosition();\n    const scrollbarWidth = getScrollbarWidth(this.hot.rootDocument);\n    let cellTopOffset = TD.offsetTop;\n\n    if (['inline_start', 'master'].includes(overlayName)) {\n      cellTopOffset += firstRowOffset - verticalScrollPosition;\n    }\n\n    if (['bottom', 'bottom_inline_start_corner'].includes(overlayName)) {\n      const {\n        wtViewport: bottomWtViewport,\n        wtTable: bottomWtTable,\n      } = wtOverlays.bottomOverlay.clone;\n\n      cellTopOffset += bottomWtViewport.getWorkspaceHeight() - bottomWtTable.getHeight() - scrollbarWidth;\n    }\n\n    let cellStartOffset = TD.offsetLeft;\n\n    if (this.hot.isRtl()) {\n      if (cellStartOffset >= 0) {\n        cellStartOffset = overlayTable.getWidth() - TD.offsetLeft;\n      } else {\n        // The `offsetLeft` returns negative values when the parent offset element has position relative\n        // (it happens when on the cell the selection is applied - the `area` CSS class).\n        // When it happens the `offsetLeft` value is calculated from the right edge of the parent element.\n        cellStartOffset = Math.abs(cellStartOffset);\n      }\n\n      cellStartOffset += firstColumnOffset - horizontalScrollPosition - cellWidth;\n\n    } else if (['top', 'master', 'bottom'].includes(overlayName)) {\n      cellStartOffset += firstColumnOffset - horizontalScrollPosition;\n    }\n\n    const cellComputedStyle = getComputedStyle(this.TD, this.hot.rootWindow);\n    const borderPhysicalWidthProp = this.hot.isRtl() ? 'borderRightWidth' : 'borderLeftWidth';\n    const inlineStartBorderCompensation = parseInt(cellComputedStyle[borderPhysicalWidthProp], 10) > 0 ? 0 : 1;\n    const topBorderCompensation = parseInt(cellComputedStyle.borderTopWidth, 10) > 0 ? 0 : 1;\n    const width = outerWidth(TD) + inlineStartBorderCompensation;\n    const height = outerHeight(TD) + topBorderCompensation;\n    const actualVerticalScrollbarWidth = hasVerticalScrollbar(scrollableContainerTop) ? scrollbarWidth : 0;\n    const actualHorizontalScrollbarWidth = hasHorizontalScrollbar(scrollableContainerLeft) ? scrollbarWidth : 0;\n    const maxWidth = this.hot.view.maximumVisibleElementWidth(cellStartOffset) -\n      actualVerticalScrollbarWidth + inlineStartBorderCompensation;\n    const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) -\n      actualHorizontalScrollbarWidth + topBorderCompensation, 23);\n\n    return {\n      top: topPos,\n      start: inlineStartPos,\n      height,\n      maxHeight,\n      width,\n      maxWidth,\n    };\n  }\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  /**\n   * Gets className of the edited cell if exist.\n   *\n   * @returns {string}\n   */\n  getEditedCellsLayerClass() {\n    const editorSection = this.checkEditorSection();\n\n    switch (editorSection) {\n      case 'inline-start':\n        return 'ht_clone_left ht_clone_inline_start';\n      case 'bottom':\n        return 'ht_clone_bottom';\n      case 'bottom-inline-start-corner':\n        return 'ht_clone_bottom_left_corner ht_clone_bottom_inline_start_corner';\n      case 'top':\n        return 'ht_clone_top';\n      case 'top-inline-start-corner':\n        return 'ht_clone_top_left_corner ht_clone_top_inline_start_corner';\n      default:\n        return 'ht_clone_master';\n    }\n  }\n\n  /**\n   * Gets HTMLTableCellElement of the edited cell if exist.\n   *\n   * @returns {HTMLTableCellElement|null}\n   */\n  getEditedCell() {\n    return this.hot.getCell(this.row, this.col, true);\n  }\n\n  /**\n   * Returns name of the overlay, where editor is placed.\n   *\n   * @private\n   * @returns {string}\n   */\n  checkEditorSection() {\n    const totalRows = this.hot.countRows();\n    let section = '';\n\n    if (this.row < this.hot.getSettings().fixedRowsTop) {\n      if (this.col < this.hot.getSettings().fixedColumnsStart) {\n        section = 'top-inline-start-corner';\n      } else {\n        section = 'top';\n      }\n    } else if (this.hot.getSettings().fixedRowsBottom &&\n               this.row >= totalRows - this.hot.getSettings().fixedRowsBottom) {\n      if (this.col < this.hot.getSettings().fixedColumnsStart) {\n        section = 'bottom-inline-start-corner';\n      } else {\n        section = 'bottom';\n      }\n    } else if (this.col < this.hot.getSettings().fixedColumnsStart) {\n      section = 'inline-start';\n    }\n\n    return section;\n  }\n}\n\nmixin(BaseEditor, hooksRefRegisterer);\n","import { arrayEach } from './../helpers/array';\nimport { defineGetter, objectEach } from './../helpers/object';\n\nconst MIXIN_NAME = 'hooksRefRegisterer';\n\n/**\n * Mixin object to extend objects functionality for auto registering hooks in an Handsontable instance.\n *\n * @type {object}\n */\nconst hooksRefRegisterer = {\n  /**\n   * Internal hooks storage.\n   */\n  _hooksStorage: Object.create(null),\n\n  /**\n   * Add hook to the collection.\n   *\n   * @param {string} key The hook name.\n   * @param {Function} callback The hook callback.\n   * @returns {object}\n   */\n  addHook(key, callback) {\n    if (!this._hooksStorage[key]) {\n      this._hooksStorage[key] = [];\n    }\n\n    this.hot.addHook(key, callback);\n    this._hooksStorage[key].push(callback);\n\n    return this;\n  },\n\n  /**\n   * Remove all hooks listeners by hook name.\n   *\n   * @param {string} key The hook name.\n   */\n  removeHooksByKey(key) {\n    arrayEach(this._hooksStorage[key] || [], (callback) => {\n      this.hot.removeHook(key, callback);\n    });\n  },\n\n  /**\n   * Clear all added hooks.\n   */\n  clearHooks() {\n    objectEach(this._hooksStorage, (callbacks, name) => this.removeHooksByKey(name));\n\n    this._hooksStorage = {};\n  },\n};\n\ndefineGetter(hooksRefRegisterer, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false,\n});\n\nexport default hooksRefRegisterer;\n","export const command = {\n  name: 'editorCloseAndSaveByEnter',\n  callback(hot, event) {\n    const editorManager = hot._getEditorManager();\n\n    editorManager.closeEditorAndSaveChanges(event.ctrlKey || event.metaKey);\n    editorManager.moveSelectionAfterEnter(event);\n  },\n};\n","export const command = {\n  name: 'editorCloseWithoutSaving',\n  callback(hot) {\n    const editorManager = hot._getEditorManager();\n\n    editorManager.closeEditorAndRestoreOriginalValue(hot.getShortcutManager().isCtrlPressed());\n    editorManager.activeEditor.focus();\n  },\n};\n","export const command = {\n  name: 'editorFastOpen',\n  callback(hot, event) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (highlight.isHeader()) {\n      return;\n    }\n\n    hot._getEditorManager().openEditor(null, event, true);\n  },\n};\n","import { stopImmediatePropagation } from '../../../helpers/dom/event';\n\nexport const command = {\n  name: 'editorOpen',\n  callback(hot, event, keys) {\n    const editorManager = hot._getEditorManager();\n    const selectedRange = hot.getSelectedRangeLast();\n    const { highlight } = selectedRange;\n\n    // supports for navigating with enter key when multiple cells are selected\n    if (\n      hot.selection.isMultiple() &&\n      !selectedRange.isHeader() &&\n      hot.countRenderedCols() > 0 &&\n      hot.countRenderedRows() > 0\n    ) {\n      const settings = hot.getSettings();\n      const enterMoves = typeof settings.enterMoves === 'function'\n        ? settings.enterMoves(event)\n        : settings.enterMoves;\n\n      if (keys.includes('shift')) {\n        hot.selection.transformFocus(-enterMoves.row, -enterMoves.col);\n      } else {\n        hot.selection.transformFocus(enterMoves.row, enterMoves.col);\n      }\n\n      return;\n    }\n\n    if (highlight.isHeader()) {\n      return;\n    }\n\n    // supports editor opening with enter key\n    if (hot.getSettings().enterBeginsEditing) {\n      if (editorManager.cellProperties.readOnly) {\n        editorManager.moveSelectionAfterEnter(event);\n\n      } else {\n        editorManager.openEditor(null, event, true);\n      }\n\n    } else {\n      editorManager.moveSelectionAfterEnter(event);\n    }\n\n    stopImmediatePropagation(event); // required by HandsontableEditor\n  },\n};\n","import { command as down } from './down';\nimport { command as downByViewportHeight } from './downByViewportHeight';\nimport { command as left } from './left';\nimport { command as right } from './right';\nimport { command as toColumns } from './toColumns';\nimport { command as toMostBottom } from './toMostBottom';\nimport { command as toMostInlineEnd } from './toMostInlineEnd';\nimport { command as toMostInlineStart } from './toMostInlineStart';\nimport { command as toMostLeft } from './toMostLeft';\nimport { command as toMostRight } from './toMostRight';\nimport { command as toMostTop } from './toMostTop';\nimport { command as toRows } from './toRows';\nimport { command as up } from './up';\nimport { command as upByViewportHeight } from './upByViewportHeight';\n\n/**\n * Returns complete list of the shortcut commands for the cells selection extending feature.\n *\n * @returns {Function[]}\n */\nexport function getAllCommands() {\n  return [\n    down,\n    downByViewportHeight,\n    left,\n    right,\n    toColumns,\n    toMostBottom,\n    toMostInlineEnd,\n    toMostInlineStart,\n    toMostLeft,\n    toMostRight,\n    toMostTop,\n    toRows,\n    up,\n    upByViewportHeight,\n  ];\n}\n","export const command = {\n  name: 'extendCellsSelectionDown',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByColumnHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByRowHeader())\n    ) {\n      hot.selection.transformEnd(1, 0);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionDownByViewportHeight',\n  callback(hot) {\n    const { to } = hot.getSelectedRangeLast();\n    const nextRowIndexToSelect = Math.min(to.row + hot.countVisibleRows(), hot.countRows() - 1);\n    const row = hot.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, -1);\n\n    if (row !== null) {\n      const coords = hot._createCellCoords(row, to.col);\n      const scrollPadding = to.row - hot.view.getFirstFullyVisibleRow();\n      const nextVerticalScroll = Math.min(coords.row - scrollPadding, hot.countRows() - 1);\n\n      hot.selection.setRangeEnd(coords);\n      hot.scrollViewportTo({\n        row: nextVerticalScroll,\n        verticalSnap: 'top',\n        horizontalSnap: 'start',\n      });\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionLeft',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByColumnHeader())\n    ) {\n      hot.selection.transformEnd(0, -1 * hot.getDirectionFactor());\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionRight',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByColumnHeader())\n    ) {\n      hot.selection.transformEnd(0, hot.getDirectionFactor());\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToColumns',\n  callback(hot) {\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (hot.selection.isSelectedByRowHeader()) {\n      hot.selection.selectAll(true, true);\n    } else {\n      hot.selectColumns(from.col, to.col, highlight);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostBottom',\n  callback(hot) {\n    const { selection, rowIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByRowHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const row = rowIndexMapper.getNearestNotHiddenIndex(hot.countRows() - 1, -1);\n      const newFrom = from.clone();\n\n      newFrom.row = highlight.row;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the row highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByRowHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(row, to.col));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostInlineEnd',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      highlight.isCell()\n    ) {\n      const column = columnIndexMapper.getNearestNotHiddenIndex(hot.countCols() - 1, -1);\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostInlineStart',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByRowHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      highlight.isCell()\n    ) {\n      const fixedColumns = parseInt(hot.getSettings().fixedColumnsStart, 10);\n      const column = columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostLeft',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByColumnHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const column = columnIndexMapper.getNearestNotHiddenIndex(\n        ...(hot.isRtl() ? [hot.countCols() - 1, -1] : [0, 1])\n      );\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the column highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByColumnHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostRight',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByColumnHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const column = columnIndexMapper.getNearestNotHiddenIndex(\n        ...(hot.isRtl() ? [0, 1] : [hot.countCols() - 1, -1])\n      );\n      const newFrom = from.clone();\n\n      newFrom.col = highlight.col;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the column highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByColumnHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(to.row, column));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToMostTop',\n  callback(hot) {\n    const { selection, rowIndexMapper } = hot;\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n    const isFocusHighlightedByHeader = highlight.isHeader() && hot.selection.isSelectedByRowHeader();\n\n    if (highlight.isCell() || isFocusHighlightedByHeader) {\n      const row = rowIndexMapper.getNearestNotHiddenIndex(0, 1);\n      const newFrom = from.clone();\n\n      newFrom.row = highlight.row;\n      selection.setRangeStart(newFrom, undefined, false, highlight.clone());\n\n      // Restore the row highlight by header flag after setting up a new selection.\n      if (isFocusHighlightedByHeader) {\n        selection.selectedByRowHeader.add(selection.getLayerLevel());\n      }\n\n      selection.setRangeEnd(hot._createCellCoords(row, to.col));\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionToRows',\n  callback(hot) {\n    const { highlight, from, to } = hot.getSelectedRangeLast();\n\n    if (hot.selection.isSelectedByColumnHeader()) {\n      hot.selection.selectAll(true, true);\n    } else {\n      hot.selectRows(from.row, to.row, highlight);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionUp',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n\n    if (\n      !hot.selection.isSelectedByColumnHeader() &&\n      !hot.selection.isSelectedByCorner() &&\n      (highlight.isCell() || highlight.isHeader() && hot.selection.isSelectedByRowHeader())\n    ) {\n      hot.selection.transformEnd(-1, 0);\n    }\n  },\n};\n","export const command = {\n  name: 'extendCellsSelectionUpByViewportHeight',\n  callback(hot) {\n    const { to } = hot.getSelectedRangeLast();\n    const nextRowIndexToSelect = Math.max(to.row - hot.countVisibleRows(), 0);\n    const row = hot.rowIndexMapper.getNearestNotHiddenIndex(nextRowIndexToSelect, 1);\n\n    if (row !== null) {\n      const coords = hot._createCellCoords(row, to.col);\n      const scrollPadding = to.row - hot.view.getFirstFullyVisibleRow();\n      const nextVerticalScroll = Math.max(coords.row - scrollPadding, 0);\n\n      hot.selection.setRangeEnd(coords);\n      hot.scrollViewportTo({\n        row: nextVerticalScroll,\n        verticalSnap: 'top',\n        horizontalSnap: 'start',\n      });\n    }\n  },\n};\n","import { command as down } from './down';\nimport { command as downByViewportHeight } from './downByViewportHeight';\nimport { command as inlineEnd } from './inlineEnd';\nimport { command as inlineStart } from './inlineStart';\nimport { command as left } from './left';\nimport { command as right } from './right';\nimport { command as toMostBottom } from './toMostBottom';\nimport { command as toMostBottomInlineEnd } from './toMostBottomInlineEnd';\nimport { command as toMostInlineEnd } from './toMostInlineEnd';\nimport { command as toMostInlineStart } from './toMostInlineStart';\nimport { command as toMostLeft } from './toMostLeft';\nimport { command as toMostRight } from './toMostRight';\nimport { command as toMostTop } from './toMostTop';\nimport { command as toMostTopInlineStart } from './toMostTopInlineStart';\nimport { command as up } from './up';\nimport { command as upByViewportHeight } from './upByViewportHeight';\n\n/**\n * Returns complete list of the shortcut commands for the cells moving feature.\n *\n * @returns {Function[]}\n */\nexport function getAllCommands() {\n  return [\n    down,\n    downByViewportHeight,\n    inlineEnd,\n    inlineStart,\n    left,\n    right,\n    toMostBottom,\n    toMostBottomInlineEnd,\n    toMostInlineEnd,\n    toMostInlineStart,\n    toMostLeft,\n    toMostRight,\n    toMostTop,\n    toMostTopInlineStart,\n    up,\n    upByViewportHeight,\n  ];\n}\n","export const command = {\n  name: 'moveCellSelectionDown',\n  callback({ selection }) {\n    selection.transformStart(1, 0);\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionDownByViewportHeight',\n  callback(hot) {\n    const { navigableHeaders } = hot.getSettings();\n    const columnHeadersCount = (navigableHeaders ? hot.countColHeaders() : 0);\n    const { row } = hot.getSelectedRangeLast().highlight;\n    let rowsStep = hot.countVisibleRows() + columnHeadersCount;\n\n    // if the last row is currently selected move the focus to the first row (if autoWrap is enabled)\n    if (row === hot.countRows() - 1) {\n      rowsStep = 1;\n\n    // if the next move would move the focus off the table calculate the delta to move the selection to\n    // the last row\n    } else if (row + rowsStep > hot.countRows()) {\n      rowsStep = hot.countRows() - row - 1;\n    }\n\n    hot.selection.transformStart(rowsStep, 0);\n\n    if (hot.getSelectedRangeLast().highlight.row < 0) {\n      hot.scrollViewportTo({ row: 0 });\n    }\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionInlineEnd',\n  callback(hot, event) {\n    const settings = hot.getSettings();\n    const selectedRange = hot.getSelectedRangeLast();\n    const tabMoves = typeof settings.tabMoves === 'function'\n      ? settings.tabMoves(event)\n      : settings.tabMoves;\n\n    if (\n      hot.selection.isMultiple() &&\n      !selectedRange.isHeader() &&\n      hot.countRenderedCols() > 0 &&\n      hot.countRenderedRows() > 0\n    ) {\n      hot.selection.transformFocus(-tabMoves.row, -tabMoves.col);\n    } else {\n      hot.selection.transformStart(-tabMoves.row, -tabMoves.col);\n    }\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionInlineStart',\n  callback(hot, event) {\n    const settings = hot.getSettings();\n    const selectedRange = hot.getSelectedRangeLast();\n    const tabMoves = typeof settings.tabMoves === 'function'\n      ? settings.tabMoves(event)\n      : settings.tabMoves;\n\n    if (\n      hot.selection.isMultiple() &&\n      !selectedRange.isHeader() &&\n      hot.countRenderedCols() > 0 &&\n      hot.countRenderedRows() > 0\n    ) {\n      hot.selection.transformFocus(tabMoves.row, tabMoves.col);\n    } else {\n      hot.selection.transformStart(tabMoves.row, tabMoves.col);\n    }\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionLeft',\n  callback(hot) {\n    hot.selection.transformStart(0, -1 * hot.getDirectionFactor());\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionRight',\n  callback(hot) {\n    hot.selection.transformStart(0, hot.getDirectionFactor());\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostBottom',\n  callback(hot) {\n    const { col } = hot.getSelectedRangeLast().highlight;\n    let row = hot.rowIndexMapper.getNearestNotHiddenIndex(hot.countRows() - 1, -1);\n\n    if (row === null) {\n      row = -1;\n    }\n\n    hot.selection.setRangeStart(hot._createCellCoords(row, col));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostBottomInlineEnd',\n  callback(hot) {\n    const { selection, rowIndexMapper, columnIndexMapper } = hot;\n    const fixedRows = parseInt(hot.getSettings().fixedRowsBottom, 10);\n    const row = rowIndexMapper.getNearestNotHiddenIndex(hot.countRows() - fixedRows - 1, -1);\n    const column = columnIndexMapper.getNearestNotHiddenIndex(hot.countCols() - 1, -1);\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostInlineEnd',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n\n    selection.setRangeStart(hot._createCellCoords(\n      hot.getSelectedRangeLast().highlight.row,\n      columnIndexMapper.getNearestNotHiddenIndex(hot.countCols() - 1, -1),\n    ));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostInlineStart',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const fixedColumns = parseInt(hot.getSettings().fixedColumnsStart, 10);\n    const row = hot.getSelectedRangeLast().highlight.row;\n    const column = columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostLeft',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const row = hot.getSelectedRangeLast().highlight.row;\n    let column = columnIndexMapper.getNearestNotHiddenIndex(\n      ...(hot.isRtl() ? [hot.countCols() - 1, -1] : [0, 1])\n    );\n\n    if (column === null) {\n      column = hot.isRtl() ? -1 : -hot.countRowHeaders();\n    }\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostRight',\n  callback(hot) {\n    const { selection, columnIndexMapper } = hot;\n    const { row } = hot.getSelectedRangeLast().highlight;\n    let column = columnIndexMapper.getNearestNotHiddenIndex(\n      ...(hot.isRtl() ? [0, 1] : [hot.countCols() - 1, -1])\n    );\n\n    if (column === null) {\n      column = hot.isRtl() ? -hot.countRowHeaders() : -1;\n    }\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostTop',\n  callback(hot) {\n    const { col } = hot.getSelectedRangeLast().highlight;\n    let row = hot.rowIndexMapper.getNearestNotHiddenIndex(0, 1);\n\n    if (row === null) {\n      row = -hot.countColHeaders();\n    }\n\n    hot.selection.setRangeStart(hot._createCellCoords(row, col));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionToMostTopInlineStart',\n  callback(hot) {\n    const { selection, rowIndexMapper, columnIndexMapper } = hot;\n    const fixedRows = parseInt(hot.getSettings().fixedRowsTop, 10);\n    const fixedColumns = parseInt(hot.getSettings().fixedColumnsStart, 10);\n    const row = rowIndexMapper.getNearestNotHiddenIndex(fixedRows, 1);\n    const column = columnIndexMapper.getNearestNotHiddenIndex(fixedColumns, 1);\n\n    selection.setRangeStart(hot._createCellCoords(row, column));\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionUp',\n  callback({ selection }) {\n    selection.transformStart(-1, 0);\n  },\n};\n","export const command = {\n  name: 'moveCellSelectionUpByViewportHight',\n  callback(hot) {\n    const { navigableHeaders } = hot.getSettings();\n    const columnHeadersCount = (navigableHeaders ? hot.countColHeaders() : 0);\n    const { row } = hot.getSelectedRangeLast().highlight;\n    let rowsStep = -(hot.countVisibleRows() + columnHeadersCount);\n\n    // if the first row is currently selected move the focus to the last row (if autoWrap is enabled)\n    if (row === -columnHeadersCount) {\n      rowsStep = -1;\n\n    // if the next move would move the focus off the table calculate the delta to move the selection to\n    // the first row\n    } else if (row + rowsStep < columnHeadersCount) {\n      rowsStep = -(row + columnHeadersCount);\n    }\n\n    hot.selection.transformStart(rowsStep, 0);\n\n    if (hot.getSelectedRangeLast().highlight.row < 0) {\n      hot.scrollViewportTo({ row: 0 });\n    }\n  },\n};\n","export const command = {\n  name: 'emptySelectedCells',\n  callback(hot) {\n    hot.emptySelectedCells();\n    hot._getEditorManager().prepareEditor();\n  },\n};\n","export const command = {\n  name: 'scrollToFocusedCell',\n  callback(hot) {\n    const { highlight } = hot.getSelectedRangeLast();\n    const firstVisibleRow = hot.view.getFirstFullyVisibleRow() - 1;\n    const firstVisibleColumn = hot.view.getFirstFullyVisibleColumn() - 1;\n    const lastVisibleRow = hot.view.getLastFullyVisibleRow() + 1;\n    const lastVisibleColumn = hot.view.getLastFullyVisibleColumn() + 1;\n\n    const visibleCoordsFrom = hot._createCellCoords(firstVisibleRow, firstVisibleColumn);\n    const visibleCoordsTo = hot._createCellCoords(lastVisibleRow, lastVisibleColumn);\n    const visibleRange = hot._createCellRange(visibleCoordsFrom, visibleCoordsFrom, visibleCoordsTo);\n\n    if (!visibleRange.includes(highlight) && (highlight.row >= 0 || highlight.col >= 0)) {\n      const scrollCoords = {};\n\n      if (highlight.col >= 0) {\n        const offsetColumns = Math.floor(hot.countVisibleCols() / 2);\n\n        scrollCoords.col = Math.max(highlight.col - offsetColumns, 0);\n      }\n\n      if (highlight.row >= 0) {\n        const offsetRows = Math.floor(hot.countVisibleRows() / 2);\n\n        scrollCoords.row = Math.max(highlight.row - offsetRows, 0);\n      }\n\n      hot.scrollViewportTo({\n        ...scrollCoords,\n        verticalSnap: 'top',\n        horizontalSnap: 'start',\n      });\n    }\n  },\n};\n","export const command = {\n  name: 'selectAllCells',\n  callback(hot) {\n    hot.selection.selectAll(true, true, {\n      disableHeadersHighlight: true,\n    });\n  },\n};\n","export const command = {\n  name: 'selectAllCellsAndHeaders',\n  callback(hot) {\n    hot.selection.selectAll(true, true, {\n      disableHeadersHighlight: false,\n    });\n  },\n};\n","export const command = {\n  name: 'populateSelectedCellsData',\n  callback(hot) {\n    const selectedRange = hot.getSelectedRange();\n    const {\n      row: highlightRow,\n      col: highlightColumn,\n    } = selectedRange[selectedRange.length - 1].highlight.normalize();\n    const valueToPopulate = hot.getDataAtCell(highlightRow, highlightColumn);\n    const cellValues = new Map();\n\n    for (let i = 0; i < selectedRange.length; i++) {\n      selectedRange[i].forAll((row, column) => {\n        if (row >= 0 && column >= 0 && (row !== highlightRow || column !== highlightColumn)) {\n          const { readOnly } = hot.getCellMeta(row, column);\n\n          if (!readOnly) {\n            cellValues.set(`${row}x${column}`, [row, column, valueToPopulate]);\n          }\n        }\n      });\n    }\n\n    hot.setDataAtCell(Array.from(cellValues.values()));\n  },\n};\n","import { isDefined } from '../helpers/mixed';\nimport { GRID_GROUP, EDITOR_EDIT_GROUP } from './constants';\nimport { createKeyboardShortcutCommandsPool } from './commands';\n\n/**\n * The context that defines shortcut list available for selected cell or cells.\n *\n * @param {Handsontable} hot The Handsontable instance.\n */\nexport function shortcutsGridContext(hot) {\n  const context = hot.getShortcutManager().addContext('grid');\n  const commandsPool = createKeyboardShortcutCommandsPool(hot);\n  const config = {\n    runOnlyIf: () => {\n      const { navigableHeaders } = hot.getSettings();\n\n      return isDefined(hot.getSelected()) &&\n        (navigableHeaders || !navigableHeaders && hot.countRenderedRows() > 0 && hot.countRenderedCols() > 0);\n    },\n    group: GRID_GROUP,\n  };\n\n  context.addShortcuts([{\n    keys: [['F2']],\n    callback: event => commandsPool.editorFastOpen(event),\n  }, {\n    keys: [['Enter'], ['Enter', 'Shift']],\n    callback: (event, keys) => commandsPool.editorOpen(event, keys),\n  }, {\n    keys: [['Backspace'], ['Delete']],\n    callback: () => commandsPool.emptySelectedCells(),\n  }], {\n    group: EDITOR_EDIT_GROUP,\n    runOnlyIf: () => isDefined(hot.getSelected()),\n  });\n\n  context.addShortcuts([{\n    keys: [['Control/Meta', 'A']],\n    callback: () => commandsPool.selectAllCells(),\n    runOnlyIf: () => !hot.getSelectedRangeLast()?.highlight.isHeader(),\n  }, {\n    keys: [['Control/Meta', 'A']],\n    callback: () => {},\n    runOnlyIf: () => hot.getSelectedRangeLast()?.highlight.isHeader(),\n    preventDefault: true,\n  }, {\n    keys: [['Control/Meta', 'Shift', 'Space']],\n    callback: () => commandsPool.selectAllCellsAndHeaders(),\n  }, {\n    keys: [['Control/Meta', 'Enter']],\n    callback: () => commandsPool.populateSelectedCellsData(),\n    runOnlyIf: () => {\n      return !hot.getSelectedRangeLast()?.highlight.isHeader() && hot.getSelectedRangeLast()?.getCellsCount() > 1;\n    },\n  }, {\n    keys: [['Control', 'Space']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToColumns(),\n  }, {\n    keys: [['Shift', 'Space']],\n    stopPropagation: true,\n    callback: () => commandsPool.extendCellsSelectionToRows(),\n  }, {\n    keys: [['ArrowUp']],\n    callback: () => commandsPool.moveCellSelectionUp(),\n  }, {\n    keys: [['ArrowUp', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostTop(),\n  }, {\n    keys: [['ArrowUp', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionUp(),\n  }, {\n    keys: [['ArrowUp', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostTop(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByColumnHeader()),\n  }, {\n    keys: [['ArrowDown']],\n    callback: () => commandsPool.moveCellSelectionDown(),\n  }, {\n    keys: [['ArrowDown', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostBottom(),\n  }, {\n    keys: [['ArrowDown', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionDown(),\n  }, {\n    keys: [['ArrowDown', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostBottom(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByColumnHeader()),\n  }, {\n    keys: [['ArrowLeft']],\n    callback: () => commandsPool.moveCellSelectionLeft(),\n  }, {\n    keys: [['ArrowLeft', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostLeft(),\n  }, {\n    keys: [['ArrowLeft', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionLeft(),\n  }, {\n    keys: [['ArrowLeft', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostLeft(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByRowHeader()),\n  }, {\n    keys: [['ArrowRight']],\n    callback: () => commandsPool.moveCellSelectionRight(),\n  }, {\n    keys: [['ArrowRight', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostRight(),\n  }, {\n    keys: [['ArrowRight', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionRight(),\n  }, {\n    keys: [['ArrowRight', 'Shift', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.extendCellsSelectionToMostRight(),\n    runOnlyIf: () => !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByRowHeader()),\n  }, {\n    keys: [['Home']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostInlineStart(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['Home', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionToMostInlineStart(),\n  }, {\n    keys: [['Home', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostTopInlineStart(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['End']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostInlineEnd(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['End', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionToMostInlineEnd(),\n  }, {\n    keys: [['End', 'Control/Meta']],\n    captureCtrl: true,\n    callback: () => commandsPool.moveCellSelectionToMostBottomInlineEnd(),\n    runOnlyIf: () => hot.view.isMainTableNotFullyCoveredByOverlays(),\n  }, {\n    keys: [['PageUp']],\n    callback: () => commandsPool.moveCellSelectionUpByViewportHight(),\n  }, {\n    keys: [['PageUp', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionUpByViewportHeight(),\n  }, {\n    keys: [['PageDown']],\n    callback: () => commandsPool.moveCellSelectionDownByViewportHeight(),\n  }, {\n    keys: [['PageDown', 'Shift']],\n    callback: () => commandsPool.extendCellsSelectionDownByViewportHeight(),\n  }, {\n    keys: [['Tab']],\n    // The property value is controlled by focusCatcher module (https://github.com/handsontable/handsontable/blob/master/handsontable/src/core/focusCatcher/index.js)\n    preventDefault: false,\n    callback: event => commandsPool.moveCellSelectionInlineStart(event),\n  }, {\n    keys: [['Shift', 'Tab']],\n    // The property value is controlled by focusCatcher module (https://github.com/handsontable/handsontable/blob/master/handsontable/src/core/focusCatcher/index.js)\n    preventDefault: false,\n    callback: event => commandsPool.moveCellSelectionInlineEnd(event),\n  }, {\n    keys: [['Control/Meta', 'Backspace']],\n    callback: () => commandsPool.scrollToFocusedCell(),\n  }], config);\n}\n","import { setAttribute } from '../../helpers/dom/element';\nimport { A11Y_PRESENTATION, A11Y_HIDDEN } from '../../helpers/a11y';\n\n/**\n * Installs a focus detector module. The module appends two input elements into the DOM side by side.\n * When the first input is focused, then it means that a user entered to the component using the TAB key\n * from the element above. When the second input is focused, a user enters to the component from\n * the element below the table. Each action, once detected, triggers the specific hook.\n *\n * @param {Handsontable} hot The Handsontable instance.\n * @param {{ onFocusFromTop: Function, onFocusFromBottom: Function }} hooks An object with defined callbacks to call.\n * @returns {{ activate: Function, deactivate: Function }}\n */\nexport function installFocusDetector(hot, hooks = {}) {\n  const rootElement = hot.rootElement;\n  const inputTrapTop = createInputElement(hot);\n  const inputTrapBottom = createInputElement(hot);\n\n  inputTrapTop.addEventListener('focus', () => hooks?.onFocusFromTop());\n  inputTrapBottom.addEventListener('focus', () => hooks?.onFocusFromBottom());\n\n  rootElement.firstChild.before(inputTrapTop);\n  rootElement.lastChild.after(inputTrapBottom);\n\n  return {\n    /**\n     * Activates the detector by resetting the tabIndex of the input elements.\n     */\n    activate() {\n      hot._registerTimeout(() => {\n        inputTrapTop.tabIndex = 0;\n        inputTrapBottom.tabIndex = 0;\n      }, 10);\n    },\n    /**\n     * Deactivates the detector by setting tabIndex to -1.\n     */\n    deactivate() {\n      hot._registerTimeout(() => {\n        inputTrapTop.tabIndex = -1;\n        inputTrapBottom.tabIndex = -1;\n      }, 10);\n    },\n  };\n}\n\n/**\n * Creates a new HTML input element.\n *\n * @param {Handsontable} hot The Handsontable instance.\n * @returns {HTMLInputElement}\n */\nfunction createInputElement(hot) {\n  const rootDocument = hot.rootDocument;\n  const input = rootDocument.createElement('input');\n\n  input.type = 'text';\n  input.classList.add('htFocusCatcher');\n\n  if (hot.getSettings().ariaTags) {\n    setAttribute(input, [\n      A11Y_PRESENTATION(),\n      A11Y_HIDDEN(),\n    ]);\n  }\n\n  return input;\n}\n","import { columnHeaderScrollStrategy } from './scrollStrategies/columnHeaderScroll';\nimport { cornerHeaderScrollStrategy } from './scrollStrategies/cornerHeaderScroll';\nimport { focusScrollStrategy } from './scrollStrategies/focusScroll';\nimport { multipleScrollStrategy } from './scrollStrategies/multipleScroll';\nimport { noncontiguousScrollStrategy } from './scrollStrategies/noncontiguousScroll';\nimport { rowHeaderScrollStrategy } from './scrollStrategies/rowHeaderScroll';\nimport { singleScrollStrategy } from './scrollStrategies/singleScroll';\n\n/**\n * @typedef ViewportScroller\n * @property {function(): void} resume Resumes the viewport scroller.\n * @property {function(): void} suspend Suspends the viewport scroller until the `resume` method is called.\n * @property {function(): void} skipNextScrollCycle Skip the next scroll cycle.\n * @property {function(CellCoords): void} scrollTo Scroll the viewport to a given cell.\n */\n/**\n * Installs a viewport scroller module. The module is responsible for scrolling the viewport to a given cell\n * based on the selection type (single cell selection, multiple cells selection, header selection etc.).\n * It's triggered by the selection module via the `afterSetRangeEnd` hook every time the selection changes.\n *\n * @param {Core} hot The Handsontable instance.\n * @returns {ViewportScroller} The viewport scroller module.\n */\nexport function createViewportScroller(hot) {\n  const { selection } = hot;\n  let skipNextCall = false;\n  let isSuspended = false;\n\n  return {\n    resume() {\n      isSuspended = false;\n    },\n    suspend() {\n      isSuspended = true;\n    },\n    skipNextScrollCycle() {\n      skipNextCall = true;\n    },\n    scrollTo(cellCoords) {\n      if (skipNextCall || isSuspended) {\n        skipNextCall = false;\n\n        return;\n      }\n\n      let scrollStrategy;\n\n      if (selection.isFocusSelectionChanged()) {\n        scrollStrategy = focusScrollStrategy(hot);\n\n      } else if (selection.isSelectedByCorner()) {\n        scrollStrategy = cornerHeaderScrollStrategy(hot);\n\n      } else if (selection.isSelectedByRowHeader()) {\n        scrollStrategy = rowHeaderScrollStrategy(hot);\n\n      } else if (selection.isSelectedByColumnHeader()) {\n        scrollStrategy = columnHeaderScrollStrategy(hot);\n\n      } else if (selection.getSelectedRange().size() === 1 && selection.isMultiple()) {\n        scrollStrategy = multipleScrollStrategy(hot);\n\n      } else if (selection.getSelectedRange().size() === 1 && !selection.isMultiple()) {\n        scrollStrategy = singleScrollStrategy(hot);\n\n      } else if (selection.getSelectedRange().size() > 1) {\n        scrollStrategy = noncontiguousScrollStrategy(hot);\n      }\n\n      scrollStrategy?.(cellCoords);\n    },\n  };\n}\n","/**\n * Scroll strategy for column header selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function columnHeaderScrollStrategy(hot) {\n  return ({ col }) => {\n    hot.scrollViewportTo({ col });\n  };\n}\n","/**\n * Scroll strategy for corner header selection.\n *\n * @returns {function(): function(CellCoords): void}\n */\nexport function cornerHeaderScrollStrategy() {\n  return () => {\n    // do not scroll the viewport when the corner is clicked\n  };\n}\n","/**\n * Scroll strategy for changed the focus position of the selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function focusScrollStrategy(hot) {\n  return (cellCoords) => {\n    hot.scrollViewportTo(cellCoords.toObject());\n  };\n}\n","/**\n * Scroll strategy for multiple selections.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function multipleScrollStrategy(hot) {\n  return (cellCoords) => {\n    hot.scrollViewportTo(cellCoords.toObject());\n  };\n}\n","/**\n * Scroll strategy for non-contiguous selections.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function noncontiguousScrollStrategy(hot) {\n  return (cellCoords) => {\n    hot.scrollViewportTo(cellCoords.toObject());\n  };\n}\n","/**\n * Scroll strategy for row header selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): void}\n */\nexport function rowHeaderScrollStrategy(hot) {\n  return ({ row }) => {\n    hot.scrollViewportTo({ row });\n  };\n}\n","/**\n * Scroll strategy for single cell selection.\n *\n * @param {Core} hot Handsontable instance.\n * @returns {function(): function(CellCoords): { row: number, col: number } | void }\n */\nexport function singleScrollStrategy(hot) {\n  return (cellCoords) => {\n    const selectionSource = hot.selection.getSelectionSource();\n    const { row, col } = cellCoords;\n\n    // navigating through the column headers (when `navigableHeaders` is enabled)\n    // scrolls the viewport horizontally only\n    if (row < 0 && col >= 0) {\n      hot.scrollViewportTo({ col });\n\n    // navigating through the row headers (when `navigableHeaders` is enabled)\n    // scrolls the viewport vertically only\n    } else if (col < 0 && row >= 0) {\n      hot.scrollViewportTo({ row });\n\n    // navigating through the cells\n    } else {\n      if (selectionSource === 'mouse') {\n        if (\n          col === hot.view.getLastPartiallyVisibleColumn() ||\n          row === hot.view.getLastPartiallyVisibleRow()\n        ) {\n          return;\n        }\n      }\n\n      hot.scrollViewportTo({ row, col });\n    }\n  };\n}\n","export { createShortcutManager } from './manager';\n","import { createUniqueMap } from '../utils/dataStructures/uniqueMap';\nimport { stopImmediatePropagation } from '../helpers/dom/event';\nimport { createContext, isContextObject } from './context';\nimport { useRecorder } from './recorder';\nimport { toSingleLine } from '../helpers/templateLiteralTag';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * The `ShortcutManager` API lets you store and manage [keyboard shortcut contexts](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md#keyboard-shortcut-contexts) ([`ShortcutContext`](@/api/shortcutContext.md)).\n *\n * Each `ShortcutManager` object:\n * - Stores and manages its own set of keyboard shortcut contexts.\n * - Listens to the [`KeyboardEvent`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) events and runs actions for them.\n *\n * @alias ShortcutManager\n * @class ShortcutManager\n * @param {object} options The manager's options\n * @param {EventTarget} options.ownerWindow A starting `window` element\n * @param {Function} options.handleEvent A condition on which `event` is handled.\n * @param {Function} options.beforeKeyDown A hook fired before the `keydown` event is handled. You can use it to [block a keyboard shortcut's actions](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md#block-a-keyboard-shortcut-s-actions).\n * @param {Function} options.afterKeyDown A hook fired after the `keydown` event is handled\n */\nexport const createShortcutManager = ({ ownerWindow, handleEvent, beforeKeyDown, afterKeyDown }) => {\n  /**\n   * A unique map that stores keyboard shortcut contexts.\n   *\n   * @type {UniqueMap}\n   */\n  const CONTEXTS = createUniqueMap({\n    errorIdExists: keys => `The \"${keys}\" context name is already registered.`\n  });\n  /**\n   * The name of the active [`ShortcutContext`](@/api/shortcutContext.md).\n   *\n   * @type {string}\n   */\n  let activeContextName = 'grid';\n\n  /**\n   * Create a new [`ShortcutContext`](@/api/shortcutContext.md) object.\n   *\n   * @memberof ShortcutManager#\n   * @param {string} contextName The name of the new shortcut context\n   * @returns {object}\n   */\n  const addContext = (contextName) => {\n    const context = createContext(contextName);\n\n    CONTEXTS.addItem(contextName, context);\n\n    return context;\n  };\n\n  /**\n   * Get the ID of the active [`ShortcutContext`](@/api/shortcutContext.md).\n   *\n   * @memberof ShortcutManager#\n   * @returns {string}\n   */\n  const getActiveContextName = () => {\n    return activeContextName;\n  };\n\n  /**\n   * Get a keyboard shortcut context by its name.\n   *\n   * @memberof ShortcutManager#\n   * @param {string} contextName The name of the shortcut context\n   * @returns {object|undefined} A [`ShortcutContext`](@/api/shortcutContext.md) object that stores registered shortcuts\n   */\n  const getContext = (contextName) => {\n    return CONTEXTS.getItem(contextName);\n  };\n\n  /**\n   * Start listening to keyboard shortcuts within a given [`ShortcutContext`](@/api/shortcutContext.md).\n   *\n   * @memberof ShortcutManager#\n   * @param {string} contextName The name of the shortcut context\n   */\n  const setActiveContextName = (contextName) => {\n    if (!CONTEXTS.hasItem(contextName)) {\n      throw new Error(toSingleLine`You've tried to activate the \"${contextName}\" shortcut context\\x20\n        that does not exist. Before activation, register the context using the \"addContext\" method.`);\n    }\n\n    activeContextName = contextName;\n  };\n\n  /**\n   * This variable relates to the `captureCtrl` shortcut option,\n   * which allows for capturing the state of the Control/Meta modifier key.\n   * Some of the default keyboard shortcuts related to cell selection need this feature for working properly.\n   *\n   * @type {boolean}\n   */\n  let isCtrlKeySilenced = false;\n\n  /**\n   * A callback function for listening events from the recorder.\n   *\n   * @param {KeyboardEvent} event The keyboard event.\n   * @param {string[]} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers.\n   * @param {object | string} context The context object or name.\n   * @returns {boolean}\n   */\n  const recorderCallback = (event, keys, context = getActiveContextName()) => {\n    const activeContext = isContextObject(context) ? context : getContext(context);\n    let isExecutionCancelled = false;\n\n    if (!activeContext.hasShortcut(keys)) {\n      return isExecutionCancelled;\n    }\n\n    // Processing just actions being in stack at the moment of shortcut pressing (without respecting additions/removals performed dynamically).\n    const shortcuts = activeContext.getShortcuts(keys);\n\n    for (let index = 0; index < shortcuts.length; index++) {\n      const {\n        callback,\n        runOnlyIf,\n        preventDefault,\n        stopPropagation,\n        captureCtrl,\n        forwardToContext,\n      } = shortcuts[index];\n\n      if (runOnlyIf(event) === true) {\n        isCtrlKeySilenced = captureCtrl;\n        isExecutionCancelled = callback(event, keys) === false;\n        isCtrlKeySilenced = false;\n\n        if (preventDefault) {\n          event.preventDefault();\n        }\n\n        if (stopPropagation) {\n          stopImmediatePropagation(event);\n          event.stopPropagation();\n        }\n\n        if (isExecutionCancelled) {\n          break;\n        }\n\n        if (forwardToContext) {\n          recorderCallback(event, keys, forwardToContext);\n        }\n      }\n    }\n\n    return isExecutionCancelled;\n  };\n\n  /**\n   * Internal key recorder.\n   *\n   * @private\n   */\n  const keyRecorder = useRecorder(\n    ownerWindow,\n    handleEvent,\n    beforeKeyDown,\n    afterKeyDown,\n    recorderCallback,\n  );\n\n  keyRecorder.mount();\n\n  return {\n    addContext,\n    getActiveContextName,\n    getContext,\n    setActiveContextName,\n    /**\n     * Returns whether `control` or `meta` keys are pressed.\n     *\n     * @memberof ShortcutManager#\n     * @type {Function}\n     * @returns {boolean}\n     */\n    isCtrlPressed: () => !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta')),\n    /**\n     * Release every previously pressed key.\n     *\n     * @type {Function}\n     * @memberof ShortcutManager#\n     */\n    releasePressedKeys: () => keyRecorder.releasePressedKeys(),\n    /**\n     * Destroy a context manager instance.\n     *\n     * @type {Function}\n     * @memberof ShortcutManager#\n     */\n    destroy: () => keyRecorder.unmount(),\n  };\n};\n","import { createUniqueMap } from '../utils/dataStructures/uniqueMap';\nimport { normalizeKeys, getKeysList } from './utils';\nimport { isUndefined, isDefined } from '../helpers/mixed';\nimport { isFunction } from '../helpers/function';\nimport { objectEach, isObject } from '../helpers/object';\nimport { toSingleLine } from '../helpers/templateLiteralTag';\n\nconst __kindOf = Symbol('shortcut-context');\n\n/**\n * Checks if the provided object is a context object.\n *\n * @param {*} objectToCheck An object to check.\n * @returns {boolean}\n */\nexport function isContextObject(objectToCheck) {\n  return isObject(objectToCheck) && objectToCheck.__kindOf === __kindOf;\n}\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * The `ShortcutContext` API lets you store and manage [keyboard shortcuts](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md) in a given [context](@/guides/navigation/keyboard-shortcuts/keyboard-shortcuts.md#keyboard-shortcut-contexts).\n *\n * Each `ShortcutContext` object stores and manages its own set of keyboard shortcuts.\n *\n * @alias ShortcutContext\n * @class ShortcutContext\n * @param {string} name The name of the keyboard shortcut context\n * @returns {object}\n */\nexport const createContext = (name) => {\n  const SHORTCUTS = createUniqueMap({\n    errorIdExists: keys => `The \"${keys}\" shortcut is already registered in the \"${name}\" context.`\n  });\n\n  /**\n   * Add a keyboard shortcut to this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {object} options The shortcut's options\n   * @param {Array<Array<string>>} options.keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   * @param {Function} options.callback The shortcut's action\n   * @param {object} options.group A group of shortcuts to which the shortcut belongs\n   * @param {object} [options.runOnlyIf] A condition on which the shortcut's action runs\n   * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation\n   * @param {object} [options.captureCtrl=false] If set to `true`: captures the state of the Control/Meta modifier key\n   * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior\n   * @param {object} [options.position='after'] The order in which the shortcut's action runs:\n   * `'before'` or `'after'` the `relativeToGroup` group of actions\n   * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`\n   * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.\n   */\n  const addShortcut = (\n    {\n      keys,\n      callback,\n      group,\n      runOnlyIf = () => true,\n      captureCtrl = false,\n      preventDefault = true,\n      stopPropagation = false,\n      relativeToGroup,\n      position,\n      forwardToContext,\n    } = {}) => {\n\n    if (isUndefined(group)) {\n      throw new Error('You need to define the shortcut\\'s group.');\n    }\n\n    if (isFunction(callback) === false) {\n      throw new Error('The shortcut\\'s callback needs to be a function.');\n    }\n\n    if (Array.isArray(keys) === false) {\n      throw new Error(toSingleLine`Pass the shortcut\\'s keys as an array of arrays,\\x20\n      using the KeyboardEvent.key properties:\\x20\n      https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.`);\n    }\n\n    const newShortcut = {\n      callback,\n      group,\n      runOnlyIf,\n      captureCtrl,\n      preventDefault,\n      stopPropagation,\n    };\n\n    if (isDefined(relativeToGroup)) {\n      newShortcut.relativeToGroup = relativeToGroup;\n      newShortcut.position = position;\n    }\n\n    if (isContextObject(forwardToContext)) {\n      newShortcut.forwardToContext = forwardToContext;\n    }\n\n    keys.forEach((keyCombination) => {\n      const normalizedKeys = normalizeKeys(keyCombination);\n      const hasKeyCombination = SHORTCUTS.hasItem(normalizedKeys);\n\n      if (hasKeyCombination) {\n        const shortcuts = SHORTCUTS.getItem(normalizedKeys);\n        let insertionIndex = shortcuts.findIndex(shortcut => shortcut.group === relativeToGroup);\n\n        if (insertionIndex !== -1) {\n          if (position === 'before') {\n            insertionIndex -= 1;\n\n          } else {\n            insertionIndex += 1;\n          }\n\n        } else {\n          insertionIndex = shortcuts.length;\n        }\n\n        shortcuts.splice(insertionIndex, 0, newShortcut);\n\n      } else {\n        SHORTCUTS.addItem(normalizedKeys, [newShortcut]);\n      }\n    });\n  };\n\n  /**\n   * Add multiple keyboard shortcuts to this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<object>} shortcuts List of shortcuts to add to this shortcut context\n   * @param {object} [options] A shortcut's options\n   * @param {Function} [options.callback] A shortcut's action\n   * @param {object} [options.group] A group of shortcuts to which a shortcut belongs\n   * @param {object} [options.runOnlyIf] A condition on which a shortcut's action runs\n   * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation\n   * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior\n   * @param {object} [options.position='after'] The order in which a shortcut's action runs:\n   * `'before'` or `'after'` a `relativeToGroup` group of actions\n   * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`\n   * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.\n   */\n  const addShortcuts = (shortcuts, options = {}) => {\n    shortcuts.forEach((shortcut) => {\n      objectEach(options, (value, key) => {\n        if (Object.prototype.hasOwnProperty.call(shortcut, key) === false) {\n          shortcut[key] = options[key];\n        }\n      });\n\n      addShortcut(shortcut);\n    });\n  };\n\n  /**\n   * Remove a shortcut from this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<string>} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   */\n  const removeShortcutsByKeys = (keys) => {\n    const normalizedKeys = normalizeKeys(keys);\n\n    SHORTCUTS.removeItem(normalizedKeys);\n  };\n\n  /**\n   * Remove a group of shortcuts from this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {string} group The name of the group of shortcuts\n   */\n  const removeShortcutsByGroup = (group) => {\n    const shortcuts = SHORTCUTS.getItems();\n\n    shortcuts.forEach(([normalizedKeys, shortcutOptions]) => {\n      const leftOptions = shortcutOptions.filter(option => option.group !== group);\n\n      if (leftOptions.length === 0) {\n        removeShortcutsByKeys(getKeysList(normalizedKeys));\n\n      } else {\n        shortcutOptions.length = 0;\n\n        shortcutOptions.push(...leftOptions);\n      }\n    });\n  };\n\n  /**\n   * Get a shortcut's details.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<string>} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   * @returns {Array}\n   */\n  const getShortcuts = (keys) => {\n    const normalizedKeys = normalizeKeys(keys);\n    const shortcuts = SHORTCUTS.getItem(normalizedKeys);\n\n    return isDefined(shortcuts) ? shortcuts.slice() : [];\n  };\n\n  /**\n   * Check if a shortcut exists in this context.\n   *\n   * @memberof ShortcutContext#\n   * @param {Array<string>} keys Names of the shortcut's keys,\n   * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n   * in lowercase or uppercase, unified across browsers\n   * @returns {boolean}\n   */\n  const hasShortcut = (keys) => {\n    const normalizedKeys = normalizeKeys(keys);\n\n    return SHORTCUTS.hasItem(normalizedKeys);\n  };\n\n  return {\n    __kindOf,\n    addShortcut,\n    addShortcuts,\n    getShortcuts,\n    hasShortcut,\n    removeShortcutsByKeys,\n    removeShortcutsByGroup,\n  };\n};\n","// This file handles key-name discrepancies between browsers.\n// For the list of discrepancies, go to: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.\nconst mappings = new Map([\n  [' ', 'space'], // custom mapping\n  ['spacebar', 'space'],\n  ['scroll', 'scrolllock'],\n  ['del', 'delete'],\n  ['esc', 'escape'],\n  ['medianexttrack', 'mediatracknext'],\n  ['mediaprevioustrack', 'mediatrackprevious'],\n  ['volumeup', 'audiovolumeup'],\n  ['volumedown', 'audiovolumedown'],\n  ['volumemute', 'audiovolumemute'],\n  ['multiply', '*'],\n  ['add', '+'],\n  ['divide', '/'],\n  ['subtract', '-'],\n  ['left', 'arrowleft'],\n  ['right', 'arrowright'],\n  ['up', 'arrowup'],\n  ['down', 'arrowdown'],\n]);\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * Get a single, normalized string from the list of the `KeyboardEvent.key` properties.\n *\n * @param {Array<string>} keys The list of the `KeyboardEvent.key` properties\n * @returns {string}\n */\nexport const normalizeKeys = (keys) => {\n  return keys.map((key) => {\n    const lowercaseKey = key.toLowerCase();\n\n    if (mappings.has(lowercaseKey)) {\n      return mappings.get(lowercaseKey);\n    }\n\n    return lowercaseKey;\n  }).sort().join('+');\n};\n\n/**\n * Get the list of the `KeyboardEvent.key` properties from a single, normalized string.\n *\n * @param {string} normalizedKeys A single, normalized string that contains the list of the `KeyboardEvent.key` properties\n * @returns {Array<string>}\n */\nexport const getKeysList = (normalizedKeys) => {\n  return normalizedKeys.split('+');\n};\n\nconst specialCharactersSet = new Map([\n  [96, 'numpad0'],\n  [97, 'numpad1'],\n  [98, 'numpad2'],\n  [99, 'numpad3'],\n  [100, 'numpad4'],\n  [101, 'numpad5'],\n  [102, 'numpad6'],\n  [103, 'numpad7'],\n  [104, 'numpad8'],\n  [105, 'numpad9'],\n  [106, 'multiply'],\n  [107, 'add'],\n  [108, 'decimal'], // firefox\n  [109, 'subtract'],\n  [110, 'decimal'],\n  [111, 'divide'],\n  [112, 'f1'],\n  [113, 'f2'],\n  [114, 'f3'],\n  [115, 'f4'],\n  [116, 'f5'],\n  [117, 'f6'],\n  [118, 'f7'],\n  [119, 'f8'],\n  [120, 'f9'],\n  [121, 'f10'],\n  [122, 'f11'],\n  [123, 'f12'],\n  [186, 'semicolon'],\n  [187, 'equal'],\n  [188, 'comma'],\n  [189, 'minus'],\n  [190, 'period'],\n  [191, 'slash'],\n  [192, 'backquote'],\n  [219, 'bracketleft'],\n  [220, 'backslash'],\n  [221, 'bracketright'],\n  [222, 'quote'],\n]);\n\n/**\n * Normalizes a keyboard event key value to a key before its modification.\n *\n * Keep in mind that there is difference between `key` and `code` properties of the KeyboardEvent object.\n * The `key` property represents the logical key on the keyboard (after applying modifiers and taking\n * the keyboard layout into account), where the `code` property represents the physical key\n * (regardless of what is printed on the key). Using the `keyCode` for alphanumeric keys,\n * solves the problem and allows to get the correct key value. The value that takes the keyboard layout\n * into account but is not modified by the modifiers (e.g. Alt + L would give polish \"ł\" we want \"l\").\n *\n * @param {Event} event The KeyboardEvent object.\n * @returns {string}\n */\nexport const normalizeEventKey = ({ which, key }) => {\n  if (specialCharactersSet.has(which)) {\n    return specialCharactersSet.get(which);\n  }\n\n  const normalizedKey = String.fromCharCode(which).toLowerCase();\n\n  if (/^[a-z0-9]$/.test(normalizedKey)) {\n    return normalizedKey;\n  }\n\n  return key.toLowerCase();\n};\n","import { createKeysObserver } from './keyObserver';\nimport { normalizeEventKey } from './utils';\nimport { isImmediatePropagationStopped } from '../helpers/dom/event';\nimport { getParentWindow } from '../helpers/dom/element';\nimport { isMacOS } from '../helpers/browser';\n\nconst MODIFIER_KEYS = ['meta', 'alt', 'shift', 'control'];\nconst modifierKeysObserver = createKeysObserver();\nconst modKeyListeners = [];\nlet instanceCounter = 0;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * A key recorder, used for tracking key events.\n *\n * @param {EventTarget} ownerWindow A starting `window` element\n * @param {Function} handleEvent A condition on which event is handled.\n * @param {Function} beforeKeyDown A hook fired before the `keydown` event is handled.\n * @param {Function} afterKeyDown A hook fired after the `keydown` event is handled\n * @param {Function} callback `KeyEvent`'s listener's callback function\n * @returns {object}\n */\nexport function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, callback) {\n  /**\n   * Check if a pressed key is tracked or not.\n   *\n   * @param {string} pressedKey A pressed key\n   * @returns {boolean}\n   */\n  const isModifierKey = (pressedKey) => {\n    return MODIFIER_KEYS.includes(pressedKey);\n  };\n\n  /**\n   * Get every pressed modifier key from the performed `KeyboardEvent`.\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object.\n   * @param {boolean} [mergeMetaKeys=false] If `true,` the function will return the \"control\" and \"meta\"\n   *                                        modifiers keys as the \"control/meta\" name. This allows creating\n   *                                        keyboard shortcuts with modifier key that trigger the shortcut\n   *                                        actions depend on the OS keyboard layout (the Meta key for macOS\n   *                                        and Control for non macOS system).\n   * @returns {string[]}\n   */\n  const getPressedModifierKeys = (event, mergeMetaKeys = false) => {\n    const pressedModifierKeys = [];\n\n    if (event.altKey) {\n      pressedModifierKeys.push('alt');\n    }\n\n    if (mergeMetaKeys && (event.ctrlKey || event.metaKey)) {\n      pressedModifierKeys.push('control/meta');\n\n    } else {\n      if (event.ctrlKey) {\n        pressedModifierKeys.push('control');\n      }\n\n      if (event.metaKey) {\n        pressedModifierKeys.push('meta');\n      }\n    }\n\n    if (event.shiftKey) {\n      pressedModifierKeys.push('shift');\n    }\n\n    return pressedModifierKeys;\n  };\n\n  /**\n   * `KeyboardEvent`'s callback function\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object\n   */\n  const onkeydown = (event) => {\n    if (handleEvent(event) === false) {\n      return;\n    }\n\n    const result = beforeKeyDown(event);\n\n    // keyCode 229 aka 'uninitialized' doesn't take into account with editors. This key code is\n    // produced when unfinished character is entering using the IME editor. It is fired on macOS,\n    // Windows and linux (ubuntu) with installed ibus-pinyin package.\n    if (event.keyCode === 229 || result === false || isImmediatePropagationStopped(event)) {\n      return;\n    }\n\n    const pressedKey = normalizeEventKey(event);\n    let extraModifierKeys = [];\n\n    if (!isModifierKey(pressedKey)) {\n      extraModifierKeys = getPressedModifierKeys(event);\n    }\n\n    const pressedKeys = [pressedKey].concat(extraModifierKeys);\n    const isExecutionCancelled = callback(event, pressedKeys);\n\n    if (!isExecutionCancelled &&\n      (isMacOS() && extraModifierKeys.includes('meta') || !isMacOS() && extraModifierKeys.includes('control'))) {\n      // Trigger the callback for the virtual OS-dependent \"control/meta\" key\n      callback(event, [pressedKey].concat(getPressedModifierKeys(event, true)));\n    }\n\n    afterKeyDown(event);\n  };\n\n  /**\n   * `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object\n   */\n  const onkeydownForModKeys = (event) => {\n    if (event.key) {\n      const pressedKey = normalizeEventKey(event);\n\n      if (isModifierKey(pressedKey)) {\n        modifierKeysObserver.press(pressedKey);\n      }\n    }\n  };\n\n  /**\n   * `KeyboardEvent`'s callback function for observing the pressed state of the mod keys.\n   *\n   * @private\n   * @param {KeyboardEvent} event The event object\n   */\n  const onkeyupForModKeys = (event) => {\n    if (event.key) {\n      const pressedKey = normalizeEventKey(event);\n\n      if (isModifierKey(pressedKey)) {\n        modifierKeysObserver.release(pressedKey);\n      }\n    }\n  };\n\n  /**\n   * `FocusEvent`'s callback function\n   *\n   * @private\n   */\n  const onblur = () => {\n    modifierKeysObserver.releaseAll();\n  };\n\n  /**\n   * Add event listeners to the starting window and its parents' windows.\n   */\n  const mount = () => {\n    let eventTarget = ownerWindow;\n\n    instanceCounter += 1;\n\n    while (eventTarget) {\n      if (instanceCounter === 1) {\n        eventTarget.document.documentElement.addEventListener('keydown', onkeydownForModKeys);\n        modKeyListeners.push({ event: 'keydown', listener: onkeydownForModKeys });\n\n        eventTarget.document.documentElement.addEventListener('keyup', onkeyupForModKeys);\n        modKeyListeners.push({ event: 'keyup', listener: onkeyupForModKeys });\n      }\n\n      eventTarget.document.documentElement.addEventListener('keydown', onkeydown);\n      eventTarget.document.documentElement.addEventListener('blur', onblur);\n\n      eventTarget = getParentWindow(eventTarget);\n    }\n  };\n\n  /**\n   * Remove event listeners from the starting window and its parents' windows.\n   */\n  const unmount = () => {\n    let eventTarget = ownerWindow;\n\n    instanceCounter -= 1;\n\n    while (eventTarget) {\n      if (instanceCounter === 0) {\n        for (let i = 0; i < modKeyListeners.length; i++) {\n          const { event, listener } = modKeyListeners[i];\n\n          eventTarget.document.documentElement.removeEventListener(event, listener);\n        }\n\n        modKeyListeners.length = 0;\n      }\n\n      eventTarget.document.documentElement.removeEventListener('keydown', onkeydown);\n      eventTarget.document.documentElement.removeEventListener('blur', onblur);\n\n      eventTarget = getParentWindow(eventTarget);\n    }\n  };\n\n  return {\n    mount,\n    unmount,\n    isPressed: key => modifierKeysObserver.isPressed(key),\n    releasePressedKeys: () => modifierKeysObserver.releaseAll(),\n  };\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * Create a key observer.\n *\n * @returns {object}\n */\nexport function createKeysObserver() {\n  const PRESSED_KEYS = new Set();\n\n  return {\n    /**\n     * Press a key.\n     *\n     * @param {string} key Names of the shortcut's keys,\n     * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n     * in lowercase or uppercase, unified across browsers\n     */\n    press(key) {\n      PRESSED_KEYS.add(key);\n    },\n    /**\n     * Release a pressed key.\n     *\n     * @param {string} key Names of the shortcut's keys,\n     * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n     * in lowercase or uppercase, unified across browsers\n     */\n    release(key) {\n      PRESSED_KEYS.delete(key);\n    },\n    /**\n     * Release all pressed keys.\n     */\n    releaseAll() {\n      PRESSED_KEYS.clear();\n    },\n    /**\n     * Check if a key is pressed.\n     *\n     * @param {string} key Names of the shortcut's keys,\n     * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),\n     * in lowercase or uppercase, unified across browsers\n     * @returns {boolean}\n     */\n    isPressed(key) {\n      return PRESSED_KEYS.has(key);\n    },\n  };\n}\n","export {\n  CELL_TYPE,\n  TextCellType,\n} from './textType';\n","import { TextEditor } from '../../editors/textEditor';\nimport { textRenderer } from '../../renderers/textRenderer';\n\nexport const CELL_TYPE = 'text';\nexport const TextCellType = {\n  CELL_TYPE,\n  editor: TextEditor,\n  renderer: textRenderer,\n};\n","export {\n  EDITOR_TYPE,\n  TextEditor,\n} from './textEditor';\n","import { BaseEditor, EDITOR_STATE } from '../baseEditor';\nimport EventManager from '../../eventManager';\nimport { isEdge, isIOS } from '../../helpers/browser';\nimport {\n  addClass,\n  getComputedStyle,\n  isThisHotChild,\n  setCaretPosition,\n  hasClass,\n  removeClass,\n  setAttribute,\n} from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport { createInputElementResizer } from '../../utils/autoResize';\nimport { isDefined } from '../../helpers/mixed';\nimport { updateCaretPosition } from './caretPositioner';\nimport {\n  A11Y_TABINDEX,\n} from '../../helpers/a11y';\n\nconst EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';\nconst EDITOR_HIDDEN_CLASS_NAME = 'ht_editor_hidden';\nconst SHORTCUTS_GROUP = 'textEditor';\n\nexport const EDITOR_TYPE = 'text';\n\n/**\n * @private\n * @class TextEditor\n */\nexport class TextEditor extends BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Instance of {@link EventManager}.\n   *\n   * @private\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * Autoresize instance. Automagically resizes editor after changes.\n   *\n   * @private\n   * @type {Function}\n   */\n  autoResize = createInputElementResizer(this.hot.rootDocument);\n  /**\n   * An TEXTAREA element.\n   *\n   * @private\n   * @type {HTMLTextAreaElement}\n   */\n  TEXTAREA;\n  /**\n   * Style declaration object of the TEXTAREA element.\n   *\n   * @private\n   * @type {CSSStyleDeclaration}\n   */\n  textareaStyle;\n  /**\n   * Parent element of the TEXTAREA.\n   *\n   * @private\n   * @type {HTMLDivElement}\n   */\n  TEXTAREA_PARENT;\n  /**\n   * Style declaration object of the TEXTAREA_PARENT element.\n   *\n   * @private\n   * @type {CSSStyleDeclaration}\n   */\n  textareaParentStyle;\n  /**\n   * Z-index class style for the editor.\n   *\n   * @private\n   * @type {string}\n   */\n  layerClass;\n\n  /**\n   * @param {Core} hotInstance The Handsontable instance.\n   */\n  constructor(hotInstance) {\n    super(hotInstance);\n    this.eventManager = new EventManager(this);\n\n    this.createElements();\n    this.bindEvents();\n\n    this.hot.addHookOnce('afterDestroy', () => this.destroy());\n  }\n\n  /**\n   * Gets current value from editable element.\n   *\n   * @returns {number}\n   */\n  getValue() {\n    return this.TEXTAREA.value;\n  }\n\n  /**\n   * Sets new value into editable element.\n   *\n   * @param {*} newValue The editor value.\n   */\n  setValue(newValue) {\n    this.TEXTAREA.value = newValue;\n  }\n\n  /**\n   * Opens the editor and adjust its size.\n   */\n  open() {\n    this.refreshDimensions(); // need it instantly, to prevent https://github.com/handsontable/handsontable/issues/348\n    this.showEditableElement();\n    this.hot.getShortcutManager().setActiveContextName('editor');\n    this.registerShortcuts();\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    this.autoResize.unObserve();\n\n    if (isThisHotChild(this.hot.rootDocument.activeElement, this.hot.rootElement)) {\n      this.hot.listen(); // don't refocus the table if user focused some cell outside of HT on purpose\n    }\n\n    this.hideEditableElement();\n    this.unregisterShortcuts();\n  }\n\n  /**\n   * Prepares editor's meta data.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    const previousState = this.state;\n\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    if (!cellProperties.readOnly) {\n      this.refreshDimensions(true);\n\n      const {\n        allowInvalid,\n      } = cellProperties;\n\n      if (allowInvalid && !this.isOpened()) {\n        // Remove an empty space from textarea (added by copyPaste plugin to make copy/paste\n        // functionality work with IME)\n        this.TEXTAREA.value = '';\n      }\n\n      if (previousState !== EDITOR_STATE.FINISHED && !this.isOpened()) {\n        this.hideEditableElement();\n      }\n    }\n  }\n\n  /**\n   * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n   *\n   * @param {*} newInitialValue The editor initial value.\n   * @param {Event} event The keyboard event object.\n   */\n  beginEditing(newInitialValue, event) {\n    if (this.state !== EDITOR_STATE.VIRGIN) {\n      return;\n    }\n\n    this.TEXTAREA.value = ''; // Remove an empty space from textarea (added by copyPaste plugin to make copy/paste functionality work with IME).\n    super.beginEditing(newInitialValue, event);\n  }\n\n  /**\n   * Sets focus state on the select element.\n   */\n  focus() {\n    // For IME editor textarea element must be focused using \".select\" method.\n    // Using \".focus\" browser automatically scroll into the focused element which\n    // is undesired effect.\n    this.TEXTAREA.select();\n    setCaretPosition(this.TEXTAREA, this.TEXTAREA.value.length);\n  }\n\n  /**\n   * Creates an editor's elements and adds necessary CSS classnames.\n   */\n  createElements() {\n    const { rootDocument } = this.hot;\n\n    this.TEXTAREA = rootDocument.createElement('TEXTAREA');\n\n    // Makes the element recognizable by Hot as its own\n    // component's element.\n    setAttribute(this.TEXTAREA, [\n      ['data-hot-input', ''],\n      A11Y_TABINDEX(-1),\n    ]);\n\n    addClass(this.TEXTAREA, 'handsontableInput');\n\n    this.textareaStyle = this.TEXTAREA.style;\n    this.textareaStyle.width = 0;\n    this.textareaStyle.height = 0;\n    this.textareaStyle.overflowY = 'visible';\n\n    this.TEXTAREA_PARENT = rootDocument.createElement('DIV');\n    addClass(this.TEXTAREA_PARENT, 'handsontableInputHolder');\n\n    if (hasClass(this.TEXTAREA_PARENT, this.layerClass)) {\n      removeClass(this.TEXTAREA_PARENT, this.layerClass);\n    }\n\n    addClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n\n    this.textareaParentStyle = this.TEXTAREA_PARENT.style;\n\n    this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n\n    this.hot.rootElement.appendChild(this.TEXTAREA_PARENT);\n  }\n\n  /**\n   * Moves an editable element out of the viewport, but element must be able to hold focus for IME support.\n   *\n   * @private\n   */\n  hideEditableElement() {\n    if (isEdge()) {\n      this.textareaStyle.textIndent = '-99999px';\n    }\n    this.textareaStyle.overflowY = 'visible';\n\n    this.textareaParentStyle.opacity = '0';\n    this.textareaParentStyle.height = '1px';\n\n    removeClass(this.TEXTAREA_PARENT, this.layerClass);\n    addClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n  }\n\n  /**\n   * Resets an editable element position.\n   *\n   * @private\n   */\n  showEditableElement() {\n    this.textareaParentStyle.height = '';\n    this.textareaParentStyle.overflow = '';\n    this.textareaParentStyle.position = '';\n    this.textareaParentStyle[this.hot.isRtl() ? 'left' : 'right'] = 'auto';\n    this.textareaParentStyle.opacity = '1';\n\n    this.textareaStyle.textIndent = '';\n\n    const childNodes = this.TEXTAREA_PARENT.childNodes;\n    let hasClassHandsontableEditor = false;\n\n    rangeEach(childNodes.length - 1, (index) => {\n      const childNode = childNodes[index];\n\n      if (hasClass(childNode, 'handsontableEditor')) {\n        hasClassHandsontableEditor = true;\n\n        return false;\n      }\n    });\n\n    if (hasClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME)) {\n      removeClass(this.TEXTAREA_PARENT, EDITOR_HIDDEN_CLASS_NAME);\n    }\n\n    if (hasClassHandsontableEditor) {\n      this.layerClass = EDITOR_VISIBLE_CLASS_NAME;\n\n      addClass(this.TEXTAREA_PARENT, this.layerClass);\n\n    } else {\n      this.layerClass = this.getEditedCellsLayerClass();\n\n      addClass(this.TEXTAREA_PARENT, this.layerClass);\n    }\n  }\n\n  /**\n   * Refreshes editor's value using source data.\n   *\n   * @private\n   */\n  refreshValue() {\n    const physicalRow = this.hot.toPhysicalRow(this.row);\n    const sourceData = this.hot.getSourceDataAtCell(physicalRow, this.col);\n\n    this.originalValue = sourceData;\n\n    this.setValue(sourceData);\n    this.refreshDimensions();\n  }\n\n  /**\n   * Refreshes editor's size and position.\n   *\n   * @private\n   * @param {boolean} force Indicates if the refreshing editor dimensions should be triggered.\n   */\n  refreshDimensions(force = false) {\n    if (this.state !== EDITOR_STATE.EDITING && !force) {\n      return;\n    }\n    this.TD = this.getEditedCell();\n\n    // TD is outside of the viewport.\n    if (!this.TD) {\n      if (!force) {\n        this.close(); // TODO shouldn't it be this.finishEditing() ?\n      }\n\n      return;\n    }\n\n    const {\n      top,\n      start,\n      width,\n      maxWidth,\n      height,\n      maxHeight\n    } = this.getEditedCellRect();\n\n    this.textareaParentStyle.top = `${top}px`;\n    this.textareaParentStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;\n    this.showEditableElement();\n\n    const cellComputedStyle = getComputedStyle(this.TD, this.hot.rootWindow);\n\n    this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;\n    this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;\n    this.TEXTAREA.style.backgroundColor = this.TD.style.backgroundColor;\n\n    const textareaComputedStyle = getComputedStyle(this.TEXTAREA);\n\n    const horizontalPadding = parseInt(textareaComputedStyle.paddingLeft, 10) +\n      parseInt(textareaComputedStyle.paddingRight, 10);\n    const verticalPadding = parseInt(textareaComputedStyle.paddingTop, 10) +\n      parseInt(textareaComputedStyle.paddingBottom, 10);\n\n    const finalWidth = width - horizontalPadding;\n    const finalHeight = height - verticalPadding;\n    const finalMaxWidth = maxWidth - horizontalPadding;\n    const finalMaxHeight = maxHeight - verticalPadding;\n\n    this.autoResize.init(this.TEXTAREA, {\n      minWidth: Math.min(finalWidth, finalMaxWidth),\n      minHeight: Math.min(finalHeight, finalMaxHeight),\n      // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)\n      maxWidth: finalMaxWidth,\n      maxHeight: finalMaxHeight,\n    }, true);\n  }\n\n  /**\n   * Binds events and hooks.\n   *\n   * @private\n   */\n  bindEvents() {\n    if (isIOS()) {\n      // on iOS after click \"Done\" the edit isn't hidden by default, so we need to handle it manually.\n      this.eventManager.addEventListener(this.TEXTAREA, 'focusout', () => this.finishEditing(false));\n    }\n\n    this.addHook('afterScrollHorizontally', () => this.refreshDimensions());\n    this.addHook('afterScrollVertically', () => this.refreshDimensions());\n\n    this.addHook('afterColumnResize', () => {\n      this.refreshDimensions();\n\n      if (this.state === EDITOR_STATE.EDITING) {\n        this.focus();\n      }\n    });\n\n    this.addHook('afterRowResize', () => {\n      this.refreshDimensions();\n\n      if (this.state === EDITOR_STATE.EDITING) {\n        this.focus();\n      }\n    });\n  }\n\n  /**\n   * Ugly hack for autocompleteEditor.\n   *\n   * @private\n   */\n  allowKeyEventPropagation() {}\n\n  /**\n   * Destroys the internal event manager and clears attached hooks.\n   *\n   * @private\n   */\n  destroy() {\n    this.eventManager.destroy();\n    this.clearHooks();\n  }\n\n  /**\n   * Register shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n    const contextConfig = {\n      runOnlyIf: () => isDefined(this.hot.getSelected()),\n      group: SHORTCUTS_GROUP,\n    };\n\n    const insertNewLine = () => {\n      this.hot.rootDocument.execCommand('insertText', false, '\\n');\n    };\n\n    editorContext.addShortcuts([{\n      keys: [['Control', 'Enter']],\n      callback: () => {\n        insertNewLine();\n\n        return false; // Will block closing editor.\n      },\n      runOnlyIf: event => !this.hot.selection.isMultiple() && // We trigger a data population for multiple selection.\n        // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n        !event.altKey,\n    }, {\n      keys: [['Meta', 'Enter']],\n      callback: () => {\n        insertNewLine();\n\n        return false; // Will block closing editor.\n      },\n      runOnlyIf: () => !this.hot.selection.isMultiple(), // We trigger a data population for multiple selection.\n    }, {\n      keys: [['Alt', 'Enter']],\n      callback: () => {\n        insertNewLine();\n\n        return false; // Will block closing editor.\n      },\n    }, {\n      keys: [['Home']],\n      callback: (event, [keyName]) => {\n        updateCaretPosition(keyName, this.TEXTAREA);\n      },\n    }, {\n      keys: [['End']],\n      callback: (event, [keyName]) => {\n        updateCaretPosition(keyName, this.TEXTAREA);\n      },\n    }], contextConfig);\n  }\n\n  /**\n   * Unregister shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * autoResize - resizes a DOM element to the width and height of another DOM element\n *\n * Copyright 2014, Marcin Warpechowski\n * Licensed under the MIT license\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\n/**\n * Attaches an event listener to the given element.\n *\n * @param {HTMLElement} element The element to observe.\n * @param {string} eventName The name of the event to listen for.\n * @param {Function} handler The function to call when the event is triggered.\n */\nfunction observe(element, eventName, handler) {\n  element.addEventListener(eventName, handler, false);\n}\n\n/**\n * Removes an event listener from an element.\n *\n * @param {HTMLElement} element The element to remove the event listener from.\n * @param {string} eventName The name of the event to remove.\n * @param {Function} handler The function to remove as a listener.\n */\nfunction unObserve(element, eventName, handler) {\n  element.removeEventListener(eventName, handler, false);\n}\n\n/**\n * Returns the computed style of an element.\n *\n * @param {Element} element The element to get the computed style from.\n * @returns {CSSStyleDeclaration} The computed style of the element.\n */\nfunction getComputedStyle(element) {\n  return element.ownerDocument.defaultView.getComputedStyle(element);\n}\n\n/**\n * @typedef InputElementResizerConfig\n * @property {number} minWidth The minimum width of the element.\n * @property {number} maxWidth The maximum width of the element.\n * @property {number} minHeight The minimum height of the element.\n * @property {number} maxHeight The maximum height of the element.\n */\n/**\n * @typedef InputElementResizer\n * @property {function(HTMLElement, InputElementResizerConfig, boolean): void} init Initializes the resizer.\n * @property {function(): void} resize Resizes the element.\n * @property {function(): void} unObserve Removes the event listeners.\n */\n/**\n * Creates an input element resizer.\n *\n * @param {Document} ownerDocument The document to create the resizer for.\n * @returns {InputElementResizer}\n */\nexport function createInputElementResizer(ownerDocument) {\n  const defaults = {\n    minHeight: 200,\n    maxHeight: 300,\n    minWidth: 100,\n    maxWidth: 300,\n  };\n  const body = ownerDocument.body;\n  const textHolder = ownerDocument.createTextNode('');\n  const textContainer = ownerDocument.createElement('span');\n  let observedElement;\n\n  /**\n   * Resizes the element.\n   */\n  function resize() {\n    textHolder.textContent = observedElement.value;\n    // Won't expand the element size for displaying body as for example, `grid`, `inline-grid` or `flex` with\n    // `flex-direction` set as `column`.\n    textContainer.style.position = 'absolute';\n    textContainer.style.fontSize = getComputedStyle(observedElement).fontSize;\n    textContainer.style.fontFamily = getComputedStyle(observedElement).fontFamily;\n    textContainer.style.whiteSpace = 'pre';\n\n    body.appendChild(textContainer);\n\n    const width = textContainer.clientWidth + 2;\n\n    body.removeChild(textContainer);\n\n    const elementStyle = observedElement.style;\n\n    elementStyle.height = `${defaults.minHeight}px`;\n\n    if (defaults.minWidth > width) {\n      elementStyle.width = `${defaults.minWidth}px`;\n\n    } else if (width > defaults.maxWidth) {\n      elementStyle.width = `${defaults.maxWidth}px`;\n\n    } else {\n      elementStyle.width = `${width}px`;\n    }\n\n    const scrollHeight = observedElement.scrollHeight ? observedElement.scrollHeight - 1 : 0;\n\n    if (defaults.minHeight > scrollHeight) {\n      elementStyle.height = `${defaults.minHeight}px`;\n\n    } else if (defaults.maxHeight < scrollHeight) {\n      elementStyle.height = `${defaults.maxHeight}px`;\n      elementStyle.overflowY = 'visible';\n\n    } else {\n      elementStyle.height = `${scrollHeight}px`;\n    }\n  }\n\n  /**\n   * Resizes the element after a delay.\n   */\n  function delayedResize() {\n    ownerDocument.defaultView.setTimeout(resize, 0);\n  }\n\n  /**\n   * Extends the default configuration.\n   *\n   * @param {InputElementResizerConfig} config The configuration to extend the defaults with.\n   */\n  function extendDefaults(config) {\n    if (config && config.minHeight) {\n      if (config.minHeight === 'inherit') {\n        defaults.minHeight = observedElement.clientHeight;\n      } else {\n        const minHeight = parseInt(config.minHeight, 10);\n\n        if (!isNaN(minHeight)) {\n          defaults.minHeight = minHeight;\n        }\n      }\n    }\n\n    if (config && config.maxHeight) {\n      if (config.maxHeight === 'inherit') {\n        defaults.maxHeight = observedElement.clientHeight;\n      } else {\n        const maxHeight = parseInt(config.maxHeight, 10);\n\n        if (!isNaN(maxHeight)) {\n          defaults.maxHeight = maxHeight;\n        }\n      }\n    }\n\n    if (config && config.minWidth) {\n      if (config.minWidth === 'inherit') {\n        defaults.minWidth = observedElement.clientWidth;\n      } else {\n        const minWidth = parseInt(config.minWidth, 10);\n\n        if (!isNaN(minWidth)) {\n          defaults.minWidth = minWidth;\n        }\n      }\n    }\n\n    if (config && config.maxWidth) {\n      if (config.maxWidth === 'inherit') {\n        defaults.maxWidth = observedElement.clientWidth;\n      } else {\n        const maxWidth = parseInt(config.maxWidth, 10);\n\n        if (!isNaN(maxWidth)) {\n          defaults.maxWidth = maxWidth;\n        }\n      }\n    }\n\n    if (!textContainer.firstChild) {\n      textContainer.className = 'autoResize';\n      textContainer.style.display = 'inline-block';\n      textContainer.appendChild(textHolder);\n    }\n  }\n\n  /**\n   * Initializes the resizer.\n   *\n   * @param {HTMLElement} elementToObserve The element to observe.\n   * @param {InputElementResizerConfig} config The configuration to extend the defaults with.\n   * @param {boolean} [doObserve=false] Whether to observe the element and resize it on every input change.\n   */\n  function init(elementToObserve, config, doObserve = false) {\n    observedElement = elementToObserve;\n\n    extendDefaults(config);\n\n    if (observedElement.nodeName === 'TEXTAREA') {\n      observedElement.style.resize = 'none';\n      observedElement.style.height = `${defaults.minHeight}px`;\n      observedElement.style.minWidth = `${defaults.minWidth}px`;\n      observedElement.style.maxWidth = `${defaults.maxWidth}px`;\n      observedElement.style.overflowY = 'hidden';\n    }\n\n    if (doObserve) {\n      observe(observedElement, 'input', resize);\n      // the keydown event is necessary for undo stack to work properly\n      observe(observedElement, 'keydown', delayedResize);\n    }\n\n    resize();\n  }\n\n  return {\n    init,\n    resize,\n    unObserve() {\n      unObserve(observedElement, 'input', resize);\n      unObserve(observedElement, 'keydown', delayedResize);\n    },\n  };\n}\n","import {\n  getCaretPosition,\n  setCaretPosition,\n} from '../../helpers/dom/element';\n\n/**\n * Updates the textarea caret position depends on the action executed on that element.\n *\n * The following actions are supported:\n *  - 'home': Move the caret to the beginning of the current line;\n *  - 'end': Move the caret to the end of the current line.\n *\n * @param {'home'|'end'} actionName The action to perform that modifies the caret behavior.\n * @param {HTMLTextAreaElement} textareaElement The textarea element where the action is supposed to happen.\n */\nexport function updateCaretPosition(actionName, textareaElement) {\n  const caretPosition = getCaretPosition(textareaElement);\n  const textLines = textareaElement.value.split('\\n');\n  let newCaretPosition = caretPosition;\n  let lineStartIndex = 0;\n\n  for (let i = 0; i < textLines.length; i++) {\n    const textLine = textLines[i];\n\n    if (i !== 0) {\n      lineStartIndex += textLines[i - 1].length + 1;\n    }\n\n    const lineEndIndex = lineStartIndex + textLine.length;\n\n    if (actionName === 'home') {\n      newCaretPosition = lineStartIndex;\n\n    } else if (actionName === 'end') {\n      newCaretPosition = lineEndIndex;\n    }\n\n    if (caretPosition <= lineEndIndex) {\n      break;\n    }\n  }\n\n  setCaretPosition(textareaElement, newCaretPosition);\n}\n","export {\n  RENDERER_TYPE,\n  textRenderer,\n} from './textRenderer';\n","import { baseRenderer } from '../baseRenderer';\nimport { empty, fastInnerText } from '../../helpers/dom/element';\nimport { stringify } from '../../helpers/mixed';\n\nexport const RENDERER_TYPE = 'text';\n\n/**\n * Default text renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function textRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  baseRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n  let escaped = value;\n\n  if (!escaped && cellProperties.placeholder) {\n    escaped = cellProperties.placeholder;\n  }\n\n  escaped = stringify(escaped);\n\n  if (cellProperties.trimWhitespace) {\n    escaped = escaped.trim();\n  }\n\n  if (cellProperties.rendererTemplate) {\n    empty(TD);\n    const TEMPLATE = hotInstance.rootDocument.createElement('TEMPLATE');\n\n    TEMPLATE.setAttribute('bind', '{{}}');\n    TEMPLATE.innerHTML = cellProperties.rendererTemplate;\n    HTMLTemplateElement.decorate(TEMPLATE);\n    TEMPLATE.model = hotInstance.getSourceDataAtRow(row);\n    TD.appendChild(TEMPLATE);\n\n  } else {\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n    fastInnerText(TD, escaped);\n  }\n}\n\ntextRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  baseRenderer,\n} from './baseRenderer';\n","/**\n * Adds appropriate CSS class to table cell, based on cellProperties.\n */\nimport {\n  addClass,\n  removeAttribute,\n  removeClass,\n  setAttribute\n} from '../../helpers/dom/element';\nimport { A11Y_INVALID, A11Y_READONLY } from '../../helpers/a11y';\n\nexport const RENDERER_TYPE = 'base';\n\n/**\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function baseRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  const ariaEnabled = cellProperties.ariaTags;\n  const classesToAdd = [];\n  const classesToRemove = [];\n  const attributesToRemove = [];\n  const attributesToAdd = [];\n\n  if (cellProperties.className) {\n    addClass(TD, cellProperties.className);\n  }\n\n  if (cellProperties.readOnly) {\n    classesToAdd.push(cellProperties.readOnlyCellClassName);\n\n    if (ariaEnabled) {\n      attributesToAdd.push(A11Y_READONLY());\n    }\n\n  } else if (ariaEnabled) {\n    attributesToRemove.push(A11Y_READONLY()[0]);\n  }\n\n  if (cellProperties.valid === false && cellProperties.invalidCellClassName) {\n    classesToAdd.push(cellProperties.invalidCellClassName);\n\n    if (ariaEnabled) {\n      attributesToAdd.push(A11Y_INVALID());\n    }\n\n  } else {\n    classesToRemove.push(cellProperties.invalidCellClassName);\n\n    if (ariaEnabled) {\n      attributesToRemove.push(A11Y_INVALID()[0]);\n    }\n  }\n\n  if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) {\n    classesToAdd.push(cellProperties.noWordWrapClassName);\n  }\n\n  if (!value && cellProperties.placeholder) {\n    classesToAdd.push(cellProperties.placeholderCellClassName);\n  }\n\n  removeClass(TD, classesToRemove);\n  addClass(TD, classesToAdd);\n\n  removeAttribute(TD, attributesToRemove);\n  setAttribute(TD, attributesToAdd);\n}\n\nbaseRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","/* eslint-disable handsontable/restricted-module-imports */\n// Since the Handsontable was modularized, importing some submodules is\n// restricted. Importing the main entry of the submodule can make the\n// \"dead\" code elimination process more difficult or even impossible.\n// The \"handsontable/restricted-module-imports\" rule is on guard.\n// This file exports the functions that allow include packages to\n// the Base version of the Handsontable, so that's why the rule is\n// disabled here (see more #7506).\nimport { registerAllEditors } from './editors';\nimport { registerAllRenderers } from './renderers';\nimport { registerAllValidators } from './validators';\nimport { registerAllCellTypes } from './cellTypes';\nimport { registerAllPlugins } from './plugins';\n/* eslint-enable handsontable/restricted-module-imports */\n\nexport {\n  registerAllEditors,\n  registerAllRenderers,\n  registerAllValidators,\n  registerAllCellTypes,\n  registerAllPlugins,\n};\n\n/**\n * Registers all available Handsontable modules.\n */\nexport function registerAllModules() {\n  registerAllEditors();\n  registerAllRenderers();\n  registerAllValidators();\n  registerAllCellTypes();\n  registerAllPlugins();\n}\n","import { AutocompleteEditor, EDITOR_TYPE as AUTOCOMPLETE_EDITOR } from './autocompleteEditor';\nimport { BaseEditor, EDITOR_TYPE as BASE_EDITOR } from './baseEditor';\nimport { CheckboxEditor, EDITOR_TYPE as CHECKBOX_EDITOR } from './checkboxEditor';\nimport { DateEditor, EDITOR_TYPE as DATE_EDITOR } from './dateEditor';\nimport { DropdownEditor, EDITOR_TYPE as DROPDOWN_EDITOR } from './dropdownEditor';\nimport { HandsontableEditor, EDITOR_TYPE as HANDSONTABLE_EDITOR } from './handsontableEditor';\nimport { NumericEditor, EDITOR_TYPE as NUMERIC_EDITOR } from './numericEditor';\nimport { PasswordEditor, EDITOR_TYPE as PASSWORD_EDITOR } from './passwordEditor';\nimport { SelectEditor, EDITOR_TYPE as SELECT_EDITOR } from './selectEditor';\nimport { TextEditor, EDITOR_TYPE as TEXT_EDITOR } from './textEditor';\nimport { TimeEditor, EDITOR_TYPE as TIME_EDITOR } from './timeEditor';\nimport {\n  registerEditor,\n} from './registry';\n\n/**\n * Registers all available editors.\n */\nexport function registerAllEditors() {\n  registerEditor(BaseEditor);\n  registerEditor(AutocompleteEditor);\n  registerEditor(CheckboxEditor);\n  registerEditor(DateEditor);\n  registerEditor(DropdownEditor);\n  registerEditor(HandsontableEditor);\n  registerEditor(NumericEditor);\n  registerEditor(PasswordEditor);\n  registerEditor(SelectEditor);\n  registerEditor(TextEditor);\n  registerEditor(TimeEditor);\n}\n\nexport {\n  AutocompleteEditor, AUTOCOMPLETE_EDITOR,\n  BaseEditor, BASE_EDITOR,\n  CheckboxEditor, CHECKBOX_EDITOR,\n  DateEditor, DATE_EDITOR,\n  DropdownEditor, DROPDOWN_EDITOR,\n  HandsontableEditor, HANDSONTABLE_EDITOR,\n  NumericEditor, NUMERIC_EDITOR,\n  PasswordEditor, PASSWORD_EDITOR,\n  SelectEditor, SELECT_EDITOR,\n  TextEditor, TEXT_EDITOR,\n  TimeEditor, TIME_EDITOR,\n};\n\nexport {\n  RegisteredEditor,\n  _getEditorInstance,\n  getEditor,\n  getEditorInstance,\n  getRegisteredEditorNames,\n  getRegisteredEditors,\n  hasEditor,\n  registerEditor,\n} from './registry';\n","export {\n  EDITOR_TYPE,\n  AutocompleteEditor,\n} from './autocompleteEditor';\n","import { HandsontableEditor } from '../handsontableEditor';\nimport { arrayMap, pivot } from '../../helpers/array';\nimport {\n  addClass,\n  getCaretPosition,\n  getScrollbarWidth,\n  getSelectionEndPosition,\n  getTrimmingContainer,\n  offset,\n  outerHeight,\n  outerWidth,\n  setAttribute,\n  setCaretPosition,\n} from '../../helpers/dom/element';\nimport { isDefined, stringify } from '../../helpers/mixed';\nimport { stripTags } from '../../helpers/string';\nimport { KEY_CODES, isPrintableChar } from '../../helpers/unicode';\nimport { isMacOS } from '../../helpers/browser';\nimport { textRenderer } from '../../renderers/textRenderer';\nimport {\n  A11Y_ACTIVEDESCENDANT,\n  A11Y_AUTOCOMPLETE,\n  A11Y_COMBOBOX,\n  A11Y_CONTROLS,\n  A11Y_EXPANDED,\n  A11Y_HASPOPUP,\n  A11Y_LISTBOX,\n  A11Y_LIVE,\n  A11Y_OPTION,\n  A11Y_POSINSET,\n  A11Y_PRESENTATION,\n  A11Y_RELEVANT,\n  A11Y_SELECTED,\n  A11Y_SETSIZE,\n  A11Y_TEXT\n} from '../../helpers/a11y';\n\nexport const EDITOR_TYPE = 'autocomplete';\n\n/**\n * @private\n * @class AutocompleteEditor\n */\nexport class AutocompleteEditor extends HandsontableEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Query string to turn available values over.\n   *\n   * @type {string}\n   */\n  query = null;\n  /**\n   * Contains stripped choices.\n   *\n   * @type {string[]}\n   */\n  strippedChoices = [];\n  /**\n   * Contains raw choices.\n   *\n   * @type {Array}\n   */\n  rawChoices = [];\n  /**\n   * Holds the prefix of the editor's id.\n   *\n   * @type {string}\n   */\n  #idPrefix = this.hot.guid.slice(0, 9);\n\n  /**\n   * Gets current value from editable element.\n   *\n   * @returns {string}\n   */\n  getValue() {\n    const selectedValue = this.rawChoices.find((value) => {\n      const strippedValue = this.stripValueIfNeeded(value);\n\n      return strippedValue === this.TEXTAREA.value;\n    });\n\n    if (isDefined(selectedValue)) {\n      return selectedValue;\n    }\n\n    return this.TEXTAREA.value;\n  }\n\n  /**\n   * Creates an editor's elements and adds necessary CSS classnames.\n   */\n  createElements() {\n    super.createElements();\n\n    addClass(this.htContainer, 'autocompleteEditor');\n    addClass(this.htContainer, this.hot.rootWindow.navigator.platform.indexOf('Mac') === -1 ? '' : 'htMacScroll');\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_TEXT(),\n        A11Y_COMBOBOX(),\n        A11Y_HASPOPUP('listbox'),\n        A11Y_AUTOCOMPLETE(),\n      ]);\n    }\n  }\n\n  /**\n   * Prepares editor's metadata and configuration of the internal Handsontable's instance.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_EXPANDED('false'),\n        A11Y_CONTROLS(`${this.#idPrefix}-listbox-${row}-${col}`),\n      ]);\n    }\n  }\n\n  /**\n   * Opens the editor and adjust its size and internal Handsontable's instance.\n   */\n  open() {\n    super.open();\n\n    const trimDropdown = this.cellProperties.trimDropdown === undefined ? true : this.cellProperties.trimDropdown;\n    const rootInstanceAriaTagsEnabled = this.hot.getSettings().ariaTags;\n    const sourceArray = Array.isArray(this.cellProperties.source) ? this.cellProperties.source : null;\n    const sourceSize = sourceArray?.length;\n    const { row: rowIndex, col: colIndex } = this;\n\n    this.showEditableElement();\n    this.focus();\n    let scrollbarWidth = getScrollbarWidth();\n\n    if (scrollbarWidth === 0 && isMacOS()) {\n      scrollbarWidth += 15; // default scroll bar width if scroll bars are visible only when scrolling\n    }\n\n    this.addHook('beforeKeyDown', event => this.onBeforeKeyDown(event));\n\n    this.htEditor.updateSettings({\n      colWidths: trimDropdown ? [outerWidth(this.TEXTAREA) - 2] : undefined,\n      width: trimDropdown ? outerWidth(this.TEXTAREA) + scrollbarWidth : undefined,\n      autoColumnSize: true,\n      renderer: (hotInstance, TD, row, col, prop, value, cellProperties) => {\n        textRenderer(hotInstance, TD, row, col, prop, value, cellProperties);\n\n        const { filteringCaseSensitive, allowHtml, locale } = this.cellProperties;\n        const query = this.query;\n        let cellValue = stringify(value);\n        let indexOfMatch;\n        let match;\n\n        if (cellValue && !allowHtml) {\n          indexOfMatch = filteringCaseSensitive === true ?\n            cellValue.indexOf(query) : cellValue.toLocaleLowerCase(locale).indexOf(query.toLocaleLowerCase(locale));\n\n          if (indexOfMatch !== -1) {\n            match = cellValue.substr(indexOfMatch, query.length);\n            cellValue = cellValue.replace(match, `<strong>${match}</strong>`);\n          }\n        }\n\n        if (rootInstanceAriaTagsEnabled) {\n          setAttribute(TD, [\n            A11Y_OPTION(),\n            // Add `setsize` and `posinset` only if the source is an array.\n            ...(sourceArray ? [A11Y_SETSIZE(sourceSize)] : []),\n            ...(sourceArray ? [A11Y_POSINSET(sourceArray.indexOf(value) + 1)] : []),\n            ['id', `${this.htEditor.rootElement.id}_${row}-${col}`],\n          ]);\n        }\n\n        TD.innerHTML = cellValue;\n      },\n      afterSelectionEnd: (startRow, startCol) => {\n        if (rootInstanceAriaTagsEnabled) {\n          const TD = this.htEditor.getCell(startRow, startCol, true);\n\n          setAttribute(TD, [\n            A11Y_SELECTED(),\n          ]);\n\n          setAttribute(this.TEXTAREA, ...A11Y_ACTIVEDESCENDANT(TD.id));\n        }\n      },\n    });\n\n    if (rootInstanceAriaTagsEnabled) {\n      // Add `role=presentation` to the main table to prevent the readers from treating the option list as a table.\n      setAttribute(this.htEditor.view._wt.wtOverlays.wtTable.TABLE, ...A11Y_PRESENTATION());\n\n      setAttribute(this.htEditor.rootElement, [\n        A11Y_LISTBOX(),\n        A11Y_LIVE('polite'),\n        A11Y_RELEVANT('text'),\n        ['id', `${this.#idPrefix}-listbox-${rowIndex}-${colIndex}`],\n      ]);\n\n      setAttribute(this.TEXTAREA, ...A11Y_EXPANDED('true'));\n    }\n\n    this.hot._registerTimeout(() => {\n      this.queryChoices(this.TEXTAREA.value);\n    });\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    this.removeHooksByKey('beforeKeyDown');\n    super.close();\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.TEXTAREA, [\n        A11Y_EXPANDED('false'),\n      ]);\n    }\n  }\n\n  /**\n   * Verifies result of validation or closes editor if user's cancelled changes.\n   *\n   * @param {boolean|undefined} result If `false` and the cell using allowInvalid option,\n   *                                   then an editor won't be closed until validation is passed.\n   */\n  discardEditor(result) {\n    super.discardEditor(result);\n\n    this.hot.view.render();\n  }\n\n  /**\n   * Prepares choices list based on applied argument.\n   *\n   * @private\n   * @param {string} query The query.\n   */\n  queryChoices(query) {\n    const source = this.cellProperties.source;\n\n    this.query = query;\n\n    if (typeof source === 'function') {\n      source.call(this.cellProperties, query, (choices) => {\n        this.rawChoices = choices;\n        this.updateChoicesList(this.stripValuesIfNeeded(choices));\n      });\n\n    } else if (Array.isArray(source)) {\n      this.rawChoices = source;\n      this.updateChoicesList(this.stripValuesIfNeeded(source));\n\n    } else {\n      this.updateChoicesList([]);\n    }\n  }\n\n  /**\n   * Updates list of the possible completions to choose.\n   *\n   * @private\n   * @param {Array} choicesList The choices list to process.\n   */\n  updateChoicesList(choicesList) {\n    const pos = getCaretPosition(this.TEXTAREA);\n    const endPos = getSelectionEndPosition(this.TEXTAREA);\n    const sortByRelevanceSetting = this.cellProperties.sortByRelevance;\n    const filterSetting = this.cellProperties.filter;\n    let orderByRelevance = null;\n    let highlightIndex = null;\n    let choices = choicesList;\n\n    if (sortByRelevanceSetting) {\n      orderByRelevance = this.sortByRelevance(\n        this.stripValueIfNeeded(this.getValue()),\n        choices,\n        this.cellProperties.filteringCaseSensitive\n      );\n    }\n    const orderByRelevanceLength = Array.isArray(orderByRelevance) ? orderByRelevance.length : 0;\n\n    if (filterSetting === false) {\n      if (orderByRelevanceLength) {\n        highlightIndex = orderByRelevance[0];\n      }\n\n    } else {\n      const sorted = [];\n\n      for (let i = 0, choicesCount = choices.length; i < choicesCount; i++) {\n        if (sortByRelevanceSetting && orderByRelevanceLength <= i) {\n          break;\n        }\n        if (orderByRelevanceLength) {\n          sorted.push(choices[orderByRelevance[i]]);\n        } else {\n          sorted.push(choices[i]);\n        }\n      }\n\n      highlightIndex = 0;\n      choices = sorted;\n    }\n\n    this.strippedChoices = choices;\n\n    if (choices.length === 0) {\n      this.htEditor.rootElement.style.display = 'none';\n\n    } else {\n      this.htEditor.rootElement.style.display = '';\n    }\n\n    this.htEditor.loadData(pivot([choices]));\n\n    if (choices.length > 0) {\n      this.updateDropdownDimensions();\n      this.flipDropdownIfNeeded();\n\n      if (this.cellProperties.strict === true) {\n        this.highlightBestMatchingChoice(highlightIndex);\n      }\n    }\n\n    this.hot.listen();\n\n    setCaretPosition(this.TEXTAREA, pos, (pos === endPos ? undefined : endPos));\n  }\n\n  /**\n   * Checks where is enough place to open editor.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  flipDropdownIfNeeded() {\n    const trimmingContainer = getTrimmingContainer(this.hot.view._wt.wtTable.TABLE);\n    const isWindowAsScrollableElement = trimmingContainer === this.hot.rootWindow;\n    const preventOverflow = this.cellProperties.preventOverflow;\n\n    if (isWindowAsScrollableElement ||\n        !isWindowAsScrollableElement && (preventOverflow || preventOverflow === 'horizontal')) {\n      return false;\n    }\n\n    const textareaOffset = offset(this.TEXTAREA);\n    const textareaHeight = outerHeight(this.TEXTAREA);\n    const dropdownHeight = this.getDropdownHeight();\n    const trimmingContainerScrollTop = trimmingContainer.scrollTop;\n    const headersHeight = outerHeight(this.hot.view._wt.wtTable.THEAD);\n    const containerOffset = offset(trimmingContainer);\n    const spaceAbove = textareaOffset.top - containerOffset.top - headersHeight + trimmingContainerScrollTop;\n    const spaceBelow = trimmingContainer.scrollHeight - spaceAbove - headersHeight - textareaHeight;\n    const flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow;\n\n    if (flipNeeded) {\n      this.flipDropdown(dropdownHeight);\n    } else {\n      this.unflipDropdown();\n    }\n\n    this.limitDropdownIfNeeded(flipNeeded ? spaceAbove : spaceBelow, dropdownHeight);\n\n    return flipNeeded;\n  }\n\n  /**\n   * Checks if the internal table should generate scrollbar or could be rendered without it.\n   *\n   * @private\n   * @param {number} spaceAvailable The free space as height defined in px available for dropdown list.\n   * @param {number} dropdownHeight The dropdown height.\n   */\n  limitDropdownIfNeeded(spaceAvailable, dropdownHeight) {\n    if (dropdownHeight > spaceAvailable) {\n      let tempHeight = 0;\n      let i = 0;\n      let lastRowHeight = 0;\n      let height = null;\n\n      do {\n        lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view._wt.getSetting('defaultRowHeight');\n        tempHeight += lastRowHeight;\n        i += 1;\n      } while (tempHeight < spaceAvailable);\n\n      height = tempHeight - lastRowHeight;\n\n      if (this.htEditor.flipped) {\n        this.htEditor.rootElement.style.top =\n        `${parseInt(this.htEditor.rootElement.style.top, 10) + dropdownHeight - height}px`;\n      }\n\n      this.setDropdownHeight(tempHeight - lastRowHeight);\n    }\n  }\n\n  /**\n   * Configures editor to open it at the top.\n   *\n   * @private\n   * @param {number} dropdownHeight The dropdown height.\n   */\n  flipDropdown(dropdownHeight) {\n    const dropdownStyle = this.htEditor.rootElement.style;\n\n    dropdownStyle.position = 'absolute';\n    dropdownStyle.top = `${-dropdownHeight}px`;\n\n    this.htEditor.flipped = true;\n  }\n\n  /**\n   * Configures editor to open it at the bottom.\n   *\n   * @private\n   */\n  unflipDropdown() {\n    const dropdownStyle = this.htEditor.rootElement.style;\n\n    dropdownStyle.position = 'absolute';\n    dropdownStyle.top = '';\n\n    this.htEditor.flipped = undefined;\n  }\n\n  /**\n   * Updates width and height of the internal Handsontable's instance.\n   *\n   * @private\n   */\n  updateDropdownDimensions() {\n    const currentDropdownWidth = this.htEditor.getColWidth(0) + getScrollbarWidth(this.hot.rootDocument) + 2;\n    const trimDropdown = this.cellProperties.trimDropdown;\n\n    this.htEditor.updateSettings({\n      height: this.getDropdownHeight(),\n      width: trimDropdown ? undefined : currentDropdownWidth\n    });\n\n    this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer();\n  }\n\n  /**\n   * Sets new height of the internal Handsontable's instance.\n   *\n   * @private\n   * @param {number} height The new dropdown height.\n   */\n  setDropdownHeight(height) {\n    this.htEditor.updateSettings({\n      height\n    });\n  }\n\n  /**\n   * Creates new selection on specified row index, or deselects selected cells.\n   *\n   * @private\n   * @param {number|undefined} index The visual row index.\n   */\n  highlightBestMatchingChoice(index) {\n    if (typeof index === 'number') {\n      this.htEditor.selectCell(index, 0, undefined, undefined, undefined, false);\n    } else {\n      this.htEditor.deselectCell();\n    }\n  }\n\n  /**\n   * Calculates and return the internal Handsontable's height.\n   *\n   * @private\n   * @returns {number}\n   */\n  getDropdownHeight() {\n    const firstRowHeight = this.htEditor.getRowHeight(0) || 23;\n    const visibleRows = this.cellProperties.visibleRows;\n\n    return this.strippedChoices.length >= visibleRows ? (visibleRows * firstRowHeight) : (this.strippedChoices.length * firstRowHeight) + 8; // eslint-disable-line max-len\n  }\n\n  /**\n   * Sanitizes value from potential dangerous tags.\n   *\n   * @private\n   * @param {string} value The value to sanitize.\n   * @returns {string}\n   */\n  stripValueIfNeeded(value) {\n    return this.stripValuesIfNeeded([value])[0];\n  }\n\n  /**\n   * Sanitizes an array of the values from potential dangerous tags.\n   *\n   * @private\n   * @param {string[]} values The value to sanitize.\n   * @returns {string[]}\n   */\n  stripValuesIfNeeded(values) {\n    const { allowHtml } = this.cellProperties;\n\n    const stringifiedValues = arrayMap(values, value => stringify(value));\n    const strippedValues = arrayMap(stringifiedValues, value => (allowHtml ? value : stripTags(value)));\n\n    return strippedValues;\n  }\n\n  /**\n   * Captures use of arrow down and up to control their behaviour.\n   *\n   * @private\n   * @param {number} keyCode The keyboard keycode.\n   * @returns {boolean}\n   */\n  allowKeyEventPropagation(keyCode) {\n    const selectedRange = this.htEditor.getSelectedRangeLast();\n    const selected = { row: selectedRange ? selectedRange.from.row : -1 };\n    let allowed = false;\n\n    if (keyCode === KEY_CODES.ARROW_DOWN && selected.row > 0 && selected.row < this.htEditor.countRows() - 1) {\n      allowed = true;\n    }\n    if (keyCode === KEY_CODES.ARROW_UP && selected.row > -1) {\n      allowed = true;\n    }\n\n    return allowed;\n  }\n\n  /**\n   * OnBeforeKeyDown callback.\n   *\n   * @private\n   * @param {KeyboardEvent} event The keyboard event object.\n   */\n  onBeforeKeyDown(event) {\n    if (isPrintableChar(event.keyCode) || event.keyCode === KEY_CODES.BACKSPACE ||\n      event.keyCode === KEY_CODES.DELETE || event.keyCode === KEY_CODES.INSERT) {\n      // for Windows 10 + FF86 there is need to add delay to make sure that the value taken from\n      // the textarea is the freshest value. Otherwise the list of choices does not update correctly (see #7570).\n      // On the more modern version of the FF (~ >=91) it seems that the issue is not present or it is\n      // more difficult to induce.\n      let timeOffset = 10;\n\n      // on ctl+c / cmd+c don't update suggestion list\n      if (event.keyCode === KEY_CODES.C && (event.ctrlKey || event.metaKey)) {\n        return;\n      }\n      if (!this.isOpened()) {\n        timeOffset += 10;\n      }\n\n      if (this.htEditor) {\n        this.hot._registerTimeout(() => {\n          this.queryChoices(this.TEXTAREA.value);\n        }, timeOffset);\n      }\n    }\n  }\n\n  /**\n   * Filters and sorts by relevance.\n   *\n   * @param {*} value The selected value.\n   * @param {string[]} choices The list of available choices.\n   * @param {boolean} caseSensitive Indicates if it's sorted by case.\n   * @returns {number[]} Array of indexes in original choices array.\n   */\n  sortByRelevance = function(value, choices, caseSensitive) {\n    const choicesRelevance = [];\n    const result = [];\n    const valueLength = value.length;\n    let choicesCount = choices.length;\n    let charsLeft;\n    let currentItem;\n    let i;\n    let valueIndex;\n\n    if (valueLength === 0) {\n      for (i = 0; i < choicesCount; i++) {\n        result.push(i);\n      }\n\n      return result;\n    }\n\n    for (i = 0; i < choicesCount; i++) {\n      currentItem = stripTags(stringify(choices[i]));\n\n      if (caseSensitive) {\n        valueIndex = currentItem.indexOf(value);\n      } else {\n        const locale = this.cellProperties.locale;\n\n        valueIndex = currentItem.toLocaleLowerCase(locale).indexOf(value.toLocaleLowerCase(locale));\n      }\n\n      if (valueIndex !== -1) {\n        charsLeft = currentItem.length - valueIndex - valueLength;\n\n        choicesRelevance.push({\n          baseIndex: i,\n          index: valueIndex,\n          charsLeft,\n          value: currentItem\n        });\n      }\n    }\n\n    choicesRelevance.sort((a, b) => {\n\n      if (b.index === -1) {\n        return -1;\n      }\n      if (a.index === -1) {\n        return 1;\n      }\n\n      if (a.index < b.index) {\n        return -1;\n      } else if (b.index < a.index) {\n        return 1;\n      } else if (a.index === b.index) {\n        if (a.charsLeft < b.charsLeft) {\n          return -1;\n        } else if (a.charsLeft > b.charsLeft) {\n          return 1;\n        }\n      }\n\n      return 0;\n    });\n\n    for (i = 0, choicesCount = choicesRelevance.length; i < choicesCount; i++) {\n      result.push(choicesRelevance[i].baseIndex);\n    }\n\n    return result;\n  }\n}\n","export {\n  EDITOR_TYPE,\n  HandsontableEditor,\n} from './handsontableEditor';\n","import { TextEditor } from '../textEditor';\nimport { setCaretPosition } from '../../helpers/dom/element';\nimport {\n  stopImmediatePropagation,\n} from '../../helpers/dom/event';\nimport { extend } from '../../helpers/object';\nimport { EDITOR_EDIT_GROUP } from '../../shortcutContexts';\n\nconst SHORTCUTS_GROUP = 'handsontableEditor';\n\nexport const EDITOR_TYPE = 'handsontable';\n\n/**\n * @private\n * @class HandsontableEditor\n */\nexport class HandsontableEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Opens the editor and adjust its size.\n   */\n  open() {\n    super.open();\n\n    if (this.htEditor) {\n      this.htEditor.destroy();\n    }\n\n    if (this.htContainer.style.display === 'none') {\n      this.htContainer.style.display = '';\n    }\n\n    // Constructs and initializes a new Handsontable instance\n    this.htEditor = new this.hot.constructor(this.htContainer, this.htOptions);\n    this.htEditor.init();\n    this.htEditor.rootElement.style.display = '';\n\n    if (this.cellProperties.strict) {\n      this.htEditor.selectCell(0, 0);\n    } else {\n      this.htEditor.deselectCell();\n    }\n\n    setCaretPosition(this.TEXTAREA, 0, this.TEXTAREA.value.length);\n    this.refreshDimensions();\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    if (this.htEditor) {\n      this.htEditor.rootElement.style.display = 'none';\n    }\n\n    this.removeHooksByKey('beforeKeyDown');\n    super.close();\n  }\n\n  /**\n   * Prepares editor's meta data and configuration of the internal Handsontable's instance.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    const parent = this;\n    const options = {\n      startRows: 0,\n      startCols: 0,\n      minRows: 0,\n      minCols: 0,\n      className: 'listbox',\n      copyPaste: false,\n      autoColumnSize: false,\n      autoRowSize: false,\n      readOnly: true,\n      fillHandle: false,\n      autoWrapCol: false,\n      autoWrapRow: false,\n      ariaTags: false,\n      afterOnCellMouseDown(_, coords) {\n        const sourceValue = this.getSourceData(coords.row, coords.col);\n\n        // if the value is undefined then it means we don't want to set the value\n        if (sourceValue !== undefined) {\n          parent.setValue(sourceValue);\n        }\n        parent.hot.destroyEditor();\n      },\n      preventWheel: true,\n      layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',\n    };\n\n    if (this.cellProperties.handsontable) {\n      extend(options, cellProperties.handsontable);\n    }\n    this.htOptions = options;\n  }\n\n  /**\n   * Begins editing on a highlighted cell and hides fillHandle corner if was present.\n   *\n   * @param {*} newInitialValue The editor initial value.\n   * @param {*} event The keyboard event object.\n   */\n  beginEditing(newInitialValue, event) {\n    const onBeginEditing = this.hot.getSettings().onBeginEditing;\n\n    if (onBeginEditing && onBeginEditing() === false) {\n      return;\n    }\n\n    super.beginEditing(newInitialValue, event);\n  }\n\n  /**\n   * Creates an editor's elements and adds necessary CSS classnames.\n   */\n  createElements() {\n    super.createElements();\n\n    const DIV = this.hot.rootDocument.createElement('DIV');\n\n    DIV.className = 'handsontableEditor';\n    this.TEXTAREA_PARENT.appendChild(DIV);\n\n    this.htContainer = DIV;\n    this.assignHooks();\n  }\n\n  /**\n   * Finishes editing and start saving or restoring process for editing cell or last selected range.\n   *\n   * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n   * @param {Function} callback The callback function, fired after editor closing.\n   */\n  finishEditing(restoreOriginalValue, ctrlDown, callback) {\n    if (this.htEditor && this.htEditor.isListening()) { // if focus is still in the HOT editor\n      this.hot.listen(); // return the focus to the parent HOT instance\n    }\n\n    if (this.htEditor && this.htEditor.getSelectedLast()) {\n      const value = this.htEditor.getValue();\n\n      if (value !== undefined) { // if the value is undefined then it means we don't want to set the value\n        this.setValue(value);\n      }\n    }\n\n    super.finishEditing(restoreOriginalValue, ctrlDown, callback);\n  }\n\n  /**\n   * Assigns afterDestroy callback to prevent memory leaks.\n   *\n   * @private\n   */\n  assignHooks() {\n    this.hot.addHook('afterDestroy', () => {\n      if (this.htEditor) {\n        this.htEditor.destroy();\n      }\n    });\n  }\n\n  /**\n   * Register shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    super.registerShortcuts();\n\n    const contextConfig = {\n      group: SHORTCUTS_GROUP,\n      relativeToGroup: EDITOR_EDIT_GROUP,\n      position: 'before',\n    };\n\n    const action = (rowToSelect, event) => {\n      const innerHOT = this.htEditor;\n\n      if (rowToSelect !== undefined) {\n        if (rowToSelect < 0 || (innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1)) {\n          innerHOT.deselectCell();\n        } else {\n          innerHOT.selectCell(rowToSelect, 0);\n        }\n        if (innerHOT.getData().length) {\n          event.preventDefault();\n          stopImmediatePropagation(event);\n\n          this.hot.listen();\n          this.TEXTAREA.focus();\n\n          return false;\n        }\n      }\n    };\n\n    editorContext.addShortcuts([{\n      keys: [['ArrowUp']],\n      callback: (event) => {\n        const innerHOT = this.htEditor;\n        let rowToSelect;\n        let selectedRow;\n\n        if (!innerHOT.getSelectedLast() && innerHOT.flipped) {\n          rowToSelect = innerHOT.countRows() - 1;\n\n        } else if (innerHOT.getSelectedLast()) {\n          if (innerHOT.flipped) {\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = Math.max(0, selectedRow - 1);\n          } else {\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = selectedRow - 1;\n          }\n        }\n\n        return action(rowToSelect, event);\n      },\n      preventDefault: false, // Doesn't block default behaviour (navigation) for a `textArea` HTMLElement.\n    }, {\n      keys: [['ArrowDown']],\n      callback: (event) => {\n        const innerHOT = this.htEditor;\n        let rowToSelect;\n        let selectedRow;\n\n        if (!innerHOT.getSelectedLast() && !innerHOT.flipped) {\n          rowToSelect = 0;\n\n        } else if (innerHOT.getSelectedLast()) {\n          if (innerHOT.flipped) {\n            rowToSelect = innerHOT.getSelectedLast()[0] + 1;\n\n          } else if (!innerHOT.flipped) {\n            const lastRow = innerHOT.countRows() - 1;\n\n            selectedRow = innerHOT.getSelectedLast()[0];\n            rowToSelect = Math.min(lastRow, selectedRow + 1);\n          }\n        }\n\n        return action(rowToSelect, event);\n      },\n      preventDefault: false, // Doesn't block default behaviour (navigation) for a `textArea` HTMLElement.\n    }], contextConfig);\n  }\n\n  /**\n   * Unregister shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    super.unregisterShortcuts();\n\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n}\n","export {\n  EDITOR_TYPE,\n  CheckboxEditor,\n} from './checkboxEditor';\n","import { BaseEditor } from '../baseEditor';\nimport { hasClass } from '../../helpers/dom/element';\n\nexport const EDITOR_TYPE = 'checkbox';\n\n/**\n * @private\n * @class CheckboxEditor\n */\nexport class CheckboxEditor extends BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  beginEditing(initialValue, event) {\n    // Just some events connected with the checkbox editor are delegated here. Some `keydown` events like `enter` and\n    // `space` key presses are handled inside `checkboxRenderer`. Some events come here from `editorManager`. The below\n    // `if` statement was created by the author for the purpose of handling only the `doubleclick` event on the TD\n    // element with a checkbox.\n\n    if (event && event.type === 'mouseup' && event.target.nodeName === 'TD') {\n      const checkbox = this.TD.querySelector('input[type=\"checkbox\"]');\n\n      if (!hasClass(checkbox, 'htBadValue')) {\n        checkbox.click();\n      }\n    }\n  }\n\n  finishEditing() {}\n  init() {}\n  open() {}\n  close() {}\n  getValue() {}\n  setValue() {}\n  focus() {}\n}\n","export {\n  EDITOR_TYPE,\n  DateEditor,\n} from './dateEditor';\n","import moment from 'moment';\nimport Pikaday from '@handsontable/pikaday';\nimport { EDITOR_STATE } from '../baseEditor';\nimport { TextEditor } from '../textEditor';\nimport { addClass, hasClass, outerHeight, outerWidth } from '../../helpers/dom/element';\nimport { deepExtend } from '../../helpers/object';\nimport { isFunctionKey } from '../../helpers/unicode';\n\nimport '@handsontable/pikaday/css/pikaday.css';\n\nexport const EDITOR_TYPE = 'date';\nconst SHORTCUTS_GROUP_EDITOR = 'dateEditor';\n\n/**\n * @private\n * @class DateEditor\n */\nexport class DateEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  // TODO: Move this option to general settings\n  /**\n   * @type {string}\n   */\n  defaultDateFormat = 'DD/MM/YYYY';\n  /**\n   * @type {boolean}\n   */\n  parentDestroyed = false;\n  /**\n   * @type {Pikaday}\n   */\n  $datePicker = null;\n\n  init() {\n    if (typeof moment !== 'function') {\n      throw new Error('You need to include moment.js to your project.');\n    }\n\n    if (typeof Pikaday !== 'function') {\n      throw new Error('You need to include Pikaday to your project.');\n    }\n    super.init();\n    this.hot.addHook('afterDestroy', () => {\n      this.parentDestroyed = true;\n      this.destroyElements();\n    });\n  }\n\n  /**\n   * Create data picker instance.\n   */\n  createElements() {\n    super.createElements();\n\n    this.datePicker = this.hot.rootDocument.createElement('DIV');\n    this.datePickerStyle = this.datePicker.style;\n    this.datePickerStyle.position = 'absolute';\n    this.datePickerStyle.top = 0;\n    this.datePickerStyle.left = 0;\n    this.datePickerStyle.zIndex = 9999;\n\n    this.datePicker.setAttribute('dir', this.hot.isRtl() ? 'rtl' : 'ltr');\n\n    addClass(this.datePicker, 'htDatepickerHolder');\n    this.hot.rootDocument.body.appendChild(this.datePicker);\n\n    /**\n     * Prevent recognizing clicking on datepicker as clicking outside of table.\n     */\n    this.eventManager.addEventListener(this.datePicker, 'mousedown', (event) => {\n      if (hasClass(event.target, 'pika-day')) {\n        this.hideDatepicker();\n      }\n\n      event.stopPropagation();\n    });\n  }\n\n  /**\n   * Destroy data picker instance.\n   */\n  destroyElements() {\n    const datePickerParentElement = this.datePicker.parentNode;\n\n    if (this.$datePicker) {\n      this.$datePicker.destroy();\n    }\n\n    if (datePickerParentElement) {\n      datePickerParentElement.removeChild(this.datePicker);\n    }\n  }\n\n  /**\n   * Prepare editor to appear.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n  }\n\n  /**\n   * Open editor.\n   *\n   * @param {Event} [event=null] The event object.\n   */\n  open(event = null) {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    this.showDatepicker(event);\n    super.open();\n\n    editorContext.addShortcuts([{\n      keys: [['ArrowLeft']],\n      callback: () => {\n        this.$datePicker.adjustDate('subtract', 1);\n      },\n    }, {\n      keys: [['ArrowRight']],\n      callback: () => {\n        this.$datePicker.adjustDate('add', 1);\n      },\n    }, {\n      keys: [['ArrowUp']],\n      callback: () => {\n        this.$datePicker.adjustDate('subtract', 7);\n      },\n    }, {\n      keys: [['ArrowDown']],\n      callback: () => {\n        this.$datePicker.adjustDate('add', 7);\n      },\n    }], {\n      group: SHORTCUTS_GROUP_EDITOR,\n    });\n  }\n\n  /**\n   * Close editor.\n   */\n  close() {\n    this._opened = false;\n\n    // If the date picker was never initialized (e.g. during autofill), there's nothing to destroy.\n    if (this.$datePicker?.destroy) {\n      this.$datePicker.destroy();\n    }\n\n    this.hot._registerTimeout(() => {\n      const editorManager = this.hot._getEditorManager();\n\n      editorManager.closeEditor();\n      this.hot.view.render();\n      editorManager.prepareEditor();\n    });\n\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP_EDITOR);\n\n    super.close();\n  }\n\n  /**\n   * Finishes editing and start saving or restoring process for editing cell or last selected range.\n   *\n   * @param {boolean} restoreOriginalValue If true, then closes editor without saving value from the editor into a cell.\n   * @param {boolean} ctrlDown If true, then saveValue will save editor's value to each cell in the last selected range.\n   */\n  finishEditing(restoreOriginalValue = false, ctrlDown = false) {\n    super.finishEditing(restoreOriginalValue, ctrlDown);\n  }\n\n  /**\n   * Show data picker.\n   *\n   * @param {Event} event The event object.\n   */\n  showDatepicker(event) {\n    const dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;\n    const isMouseDown = this.hot.view.isMouseDown();\n    const isMeta = event ? isFunctionKey(event.keyCode) : false;\n    let dateStr;\n\n    this.datePicker.style.display = 'block';\n\n    this.$datePicker = new Pikaday(this.getDatePickerConfig());\n\n    if (typeof this.$datePicker.useMoment === 'function') {\n      this.$datePicker.useMoment(moment);\n    }\n\n    this.$datePicker._onInputFocus = function() {};\n\n    if (this.originalValue) {\n      dateStr = this.originalValue;\n\n      if (moment(dateStr, dateFormat, true).isValid()) {\n        this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n      }\n\n      // workaround for date/time cells - pikaday resets the cell value to 12:00 AM by default, this will overwrite the value.\n      if (this.getValue() !== this.originalValue) {\n        this.setValue(this.originalValue);\n      }\n\n      if (!isMeta && !isMouseDown) {\n        this.setValue('');\n      }\n\n    } else if (this.cellProperties.defaultDate) {\n      dateStr = this.cellProperties.defaultDate;\n\n      if (moment(dateStr, dateFormat, true).isValid()) {\n        this.$datePicker.setMoment(moment(dateStr, dateFormat), true);\n      }\n\n      if (!isMeta && !isMouseDown) {\n        this.setValue('');\n      }\n    } else {\n      // if a default date is not defined, set a soft-default-date: display the current day and month in the\n      // datepicker, but don't fill the editor input\n      this.$datePicker.gotoToday();\n    }\n  }\n\n  /**\n   * Hide data picker.\n   */\n  hideDatepicker() {\n    this.datePickerStyle.display = 'none';\n    this.$datePicker.hide();\n  }\n\n  /**\n   * Get date picker options.\n   *\n   * @returns {object}\n   */\n  getDatePickerConfig() {\n    const htInput = this.TEXTAREA;\n    const options = {};\n\n    if (this.cellProperties && this.cellProperties.datePickerConfig) {\n      deepExtend(options, this.cellProperties.datePickerConfig);\n    }\n    const origOnSelect = options.onSelect;\n    const origOnClose = options.onClose;\n\n    options.field = htInput;\n    options.trigger = htInput;\n    options.container = this.datePicker;\n    options.bound = false;\n    options.keyboardInput = false;\n    options.format = options.format || this.defaultDateFormat;\n    options.reposition = options.reposition || false;\n    // Set the RTL to `false`. Due to the https://github.com/Pikaday/Pikaday/issues/647 bug, the layout direction\n    // of the date picker is controlled by juggling the \"dir\" attribute of the root date picker element.\n    // See line @64 of this file.\n    options.isRTL = false;\n    options.onSelect = (value) => {\n      let dateStr = value;\n\n      if (!isNaN(dateStr.getTime())) {\n        dateStr = moment(dateStr).format(this.cellProperties.dateFormat || this.defaultDateFormat);\n      }\n\n      this.setValue(dateStr);\n\n      if (origOnSelect) {\n        origOnSelect();\n      }\n    };\n    options.onClose = () => {\n      if (!this.parentDestroyed) {\n        this.finishEditing(false);\n      }\n      if (origOnClose) {\n        origOnClose();\n      }\n    };\n\n    return options;\n  }\n\n  /**\n   * Refreshes datepicker's size and position. The method is called internally by Handsontable.\n   *\n   * @private\n   * @param {boolean} force Indicates if the refreshing editor dimensions should be triggered.\n   */\n  refreshDimensions(force) {\n    super.refreshDimensions(force);\n\n    if (this.state !== EDITOR_STATE.EDITING) {\n      return;\n    }\n\n    this.TD = this.getEditedCell();\n\n    if (!this.TD) {\n      this.hideDatepicker();\n\n      return;\n    }\n\n    const { rowIndexMapper, columnIndexMapper } = this.hot;\n    const { wtOverlays } = this.hot.view._wt;\n    const { wtTable } = wtOverlays.getParentOverlay(this.TD) ?? this.hot.view._wt;\n\n    const firstVisibleRow = rowIndexMapper.getVisualFromRenderableIndex(wtTable.getFirstPartiallyVisibleRow());\n    const lastVisibleRow = rowIndexMapper.getVisualFromRenderableIndex(wtTable.getLastPartiallyVisibleRow());\n    const firstVisibleColumn = columnIndexMapper.getVisualFromRenderableIndex(wtTable.getFirstPartiallyVisibleColumn());\n    const lastVisibleColumn = columnIndexMapper.getVisualFromRenderableIndex(wtTable.getLastPartiallyVisibleColumn());\n\n    if (\n      this.row >= firstVisibleRow && this.row <= lastVisibleRow &&\n      this.col >= firstVisibleColumn && this.col <= lastVisibleColumn\n    ) {\n      const offset = this.TD.getBoundingClientRect();\n\n      this.datePickerStyle.top = `${this.hot.rootWindow.pageYOffset + offset.top + outerHeight(this.TD)}px`;\n\n      let pickerLeftPosition = this.hot.rootWindow.pageXOffset;\n\n      if (this.hot.isRtl()) {\n        pickerLeftPosition += offset.right - outerWidth(this.datePicker);\n      } else {\n        pickerLeftPosition += offset.left;\n      }\n\n      this.datePickerStyle.left = `${pickerLeftPosition}px`;\n\n    } else {\n      this.hideDatepicker();\n    }\n  }\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__402__;","","export {\n  EDITOR_TYPE,\n  DropdownEditor,\n} from './dropdownEditor';\n","import { AutocompleteEditor } from '../autocompleteEditor';\nimport Hooks from '../../pluginHooks';\n\nexport const EDITOR_TYPE = 'dropdown';\n\n/**\n * @private\n * @class DropdownEditor\n */\nexport class DropdownEditor extends AutocompleteEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n    this.cellProperties.filter = false;\n    this.cellProperties.strict = true;\n  }\n}\n\nHooks.getSingleton().add('beforeValidate', function(value, row, col) {\n  const visualColumnIndex = this.propToCol(col);\n\n  if (Number.isInteger(visualColumnIndex)) {\n    const cellMeta = this.getCellMeta(row, visualColumnIndex);\n\n    if (cellMeta.editor === DropdownEditor) {\n      if (cellMeta.strict === undefined) {\n        cellMeta.filter = false;\n        cellMeta.strict = true;\n      }\n    }\n  }\n});\n","export {\n  EDITOR_TYPE,\n  NumericEditor,\n} from './numericEditor';\n","import { TextEditor } from '../textEditor';\n\nexport const EDITOR_TYPE = 'numeric';\n\n/**\n * @private\n * @class NumericEditor\n */\nexport class NumericEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n}\n","export {\n  EDITOR_TYPE,\n  PasswordEditor,\n} from './passwordEditor';\n","import { TextEditor } from '../textEditor';\nimport { empty } from '../../helpers/dom/element';\n\nexport const EDITOR_TYPE = 'password';\n\n/**\n * @private\n * @class PasswordEditor\n */\nexport class PasswordEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  createElements() {\n    super.createElements();\n\n    this.TEXTAREA = this.hot.rootDocument.createElement('input');\n    this.TEXTAREA.setAttribute('type', 'password');\n    this.TEXTAREA.setAttribute('data-hot-input', ''); // Makes the element recognizable by Hot as its own component's element.\n    this.TEXTAREA.className = 'handsontableInput';\n    this.textareaStyle = this.TEXTAREA.style;\n    this.textareaStyle.width = 0;\n    this.textareaStyle.height = 0;\n\n    empty(this.TEXTAREA_PARENT);\n    this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n  }\n}\n","export {\n  EDITOR_TYPE,\n  SelectEditor,\n} from './selectEditor';\n","import { BaseEditor, EDITOR_STATE } from '../baseEditor';\nimport {\n  addClass,\n  empty,\n  fastInnerHTML,\n  hasClass,\n  removeClass,\n} from '../../helpers/dom/element';\nimport { objectEach } from '../../helpers/object';\n\nconst EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';\nconst SHORTCUTS_GROUP = 'selectEditor';\n\nexport const EDITOR_TYPE = 'select';\n\n/**\n * @private\n * @class SelectEditor\n */\nexport class SelectEditor extends BaseEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Initializes editor instance, DOM Element and mount hooks.\n   */\n  init() {\n    this.select = this.hot.rootDocument.createElement('select');\n    this.select.setAttribute('data-hot-input', 'true');\n    this.select.style.display = 'none';\n\n    addClass(this.select, 'htSelectEditor');\n\n    this.hot.rootElement.appendChild(this.select);\n    this.registerHooks();\n  }\n\n  /**\n   * Returns select's value.\n   *\n   * @returns {*}\n   */\n  getValue() {\n    return this.select.value;\n  }\n\n  /**\n   * Sets value in the select element.\n   *\n   * @param {*} value A new select's value.\n   */\n  setValue(value) {\n    this.select.value = value;\n  }\n\n  /**\n   * Opens the editor and adjust its size.\n   */\n  open() {\n    this._opened = true;\n    this.refreshDimensions();\n    this.select.style.display = '';\n\n    const shortcutManager = this.hot.getShortcutManager();\n\n    shortcutManager.setActiveContextName('editor');\n\n    this.registerShortcuts();\n  }\n\n  /**\n   * Closes the editor.\n   */\n  close() {\n    this._opened = false;\n    this.select.style.display = 'none';\n\n    if (hasClass(this.select, EDITOR_VISIBLE_CLASS_NAME)) {\n      removeClass(this.select, EDITOR_VISIBLE_CLASS_NAME);\n    }\n\n    this.unregisterShortcuts();\n    this.clearHooks();\n  }\n\n  /**\n   * Sets focus state on the select element.\n   */\n  focus() {\n    this.select.focus();\n  }\n\n  /**\n   * Binds hooks to refresh editor's size after scrolling of the viewport or resizing of columns/rows.\n   *\n   * @private\n   */\n  registerHooks() {\n    this.addHook('afterScrollHorizontally', () => this.refreshDimensions());\n    this.addHook('afterScrollVertically', () => this.refreshDimensions());\n    this.addHook('afterColumnResize', () => this.refreshDimensions());\n    this.addHook('afterRowResize', () => this.refreshDimensions());\n  }\n\n  /**\n   * Prepares editor's meta data and a list of available options.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    const selectOptions = this.cellProperties.selectOptions;\n    let options;\n\n    if (typeof selectOptions === 'function') {\n      options = this.prepareOptions(selectOptions(this.row, this.col, this.prop));\n    } else {\n      options = this.prepareOptions(selectOptions);\n    }\n\n    empty(this.select);\n\n    objectEach(options, (optionValue, key) => {\n      const optionElement = this.hot.rootDocument.createElement('OPTION');\n\n      optionElement.value = key;\n\n      fastInnerHTML(optionElement, optionValue);\n      this.select.appendChild(optionElement);\n    });\n  }\n\n  /**\n   * Creates consistent list of available options.\n   *\n   * @private\n   * @param {Array|object} optionsToPrepare The list of the values to render in the select eleemnt.\n   * @returns {object}\n   */\n  prepareOptions(optionsToPrepare) {\n    let preparedOptions = {};\n\n    if (Array.isArray(optionsToPrepare)) {\n      for (let i = 0, len = optionsToPrepare.length; i < len; i++) {\n        preparedOptions[optionsToPrepare[i]] = optionsToPrepare[i];\n      }\n\n    } else if (typeof optionsToPrepare === 'object') {\n      preparedOptions = optionsToPrepare;\n    }\n\n    return preparedOptions;\n  }\n\n  /**\n   * Refreshes editor's value using source data.\n   *\n   * @private\n   */\n  refreshValue() {\n    const sourceData = this.hot.getSourceDataAtCell(this.row, this.prop);\n\n    this.originalValue = sourceData;\n\n    this.setValue(sourceData);\n    this.refreshDimensions();\n  }\n\n  /**\n   * Refreshes editor's size and position.\n   *\n   * @private\n   */\n  refreshDimensions() {\n    if (this.state !== EDITOR_STATE.EDITING) {\n      return;\n    }\n\n    this.TD = this.getEditedCell();\n\n    // TD is outside of the viewport.\n    if (!this.TD) {\n      this.close();\n\n      return;\n    }\n\n    const {\n      top,\n      start,\n      width,\n      height,\n    } = this.getEditedCellRect();\n    const selectStyle = this.select.style;\n\n    selectStyle.height = `${height}px`;\n    selectStyle.width = `${width}px`;\n    selectStyle.top = `${top}px`;\n    selectStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;\n    selectStyle.margin = '0px';\n\n    addClass(this.select, EDITOR_VISIBLE_CLASS_NAME);\n  }\n\n  /**\n   * Register shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n    const contextConfig = {\n      group: SHORTCUTS_GROUP,\n    };\n\n    if (this.isInFullEditMode()) {\n      // The arrow-related shortcuts should work only in full edit mode.\n      editorContext.addShortcuts([{\n        keys: [['ArrowUp']],\n        callback: () => {\n          const previousOptionIndex = this.select.selectedIndex - 1;\n\n          if (previousOptionIndex >= 0) {\n            this.select[previousOptionIndex].selected = true;\n          }\n        },\n      }, {\n        keys: [['ArrowDown']],\n        callback: () => {\n          const nextOptionIndex = this.select.selectedIndex + 1;\n\n          if (nextOptionIndex <= this.select.length - 1) {\n            this.select[nextOptionIndex].selected = true;\n          }\n        }\n      }], contextConfig);\n    }\n  }\n\n  /**\n   * Unregister shortcuts responsible for handling editor.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const editorContext = shortcutManager.getContext('editor');\n\n    editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n}\n","export {\n  EDITOR_TYPE,\n  TimeEditor,\n} from './timeEditor';\n","import { TextEditor } from '../textEditor';\n\nexport const EDITOR_TYPE = 'time';\n\n/**\n * @private\n * @class TimeEditor\n */\nexport class TimeEditor extends TextEditor {\n  static get EDITOR_TYPE() {\n    return EDITOR_TYPE;\n  }\n\n  /**\n   * Prepares editor's meta data.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} col The visual column index.\n   * @param {number|string} prop The column property (passed when datasource is an array of objects).\n   * @param {HTMLTableCellElement} td The rendered cell element.\n   * @param {*} value The rendered value.\n   * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n   */\n  prepare(row, col, prop, td, value, cellProperties) {\n    super.prepare(row, col, prop, td, value, cellProperties);\n\n    this.TEXTAREA.dir = 'ltr';\n  }\n}\n","import { autocompleteRenderer, RENDERER_TYPE as AUTOCOMPLETE_RENDERER } from './autocompleteRenderer';\nimport { baseRenderer, RENDERER_TYPE as BASE_RENDERER } from './baseRenderer';\nimport { dropdownRenderer, RENDERER_TYPE as DROPDOWN_RENDERER } from './dropdownRenderer';\nimport { checkboxRenderer, RENDERER_TYPE as CHECKBOX_RENDERER } from './checkboxRenderer';\nimport { handsontableRenderer, RENDERER_TYPE as HANDSONTABLE_RENDERER } from './handsontableRenderer';\nimport { htmlRenderer, RENDERER_TYPE as HTML_RENDERER } from './htmlRenderer';\nimport { numericRenderer, RENDERER_TYPE as NUMERIC_RENDERER } from './numericRenderer';\nimport { passwordRenderer, RENDERER_TYPE as PASSWORD_RENDERER } from './passwordRenderer';\nimport { selectRenderer, RENDERER_TYPE as SELECT_RENDERER } from './selectRenderer';\nimport { textRenderer, RENDERER_TYPE as TEXT_RENDERER } from './textRenderer';\nimport { timeRenderer, RENDERER_TYPE as TIME_RENDERER } from './timeRenderer';\nimport {\n  registerRenderer,\n} from './registry';\n\n/**\n * Registers all available renderers.\n */\nexport function registerAllRenderers() {\n  registerRenderer(autocompleteRenderer);\n  registerRenderer(baseRenderer);\n  registerRenderer(checkboxRenderer);\n  registerRenderer(dropdownRenderer);\n  registerRenderer(handsontableRenderer);\n  registerRenderer(htmlRenderer);\n  registerRenderer(numericRenderer);\n  registerRenderer(passwordRenderer);\n  registerRenderer(selectRenderer);\n  registerRenderer(textRenderer);\n  registerRenderer(timeRenderer);\n}\n\nexport {\n  autocompleteRenderer, AUTOCOMPLETE_RENDERER,\n  baseRenderer, BASE_RENDERER,\n  dropdownRenderer, DROPDOWN_RENDERER,\n  checkboxRenderer, CHECKBOX_RENDERER,\n  handsontableRenderer, HANDSONTABLE_RENDERER,\n  htmlRenderer, HTML_RENDERER,\n  numericRenderer, NUMERIC_RENDERER,\n  passwordRenderer, PASSWORD_RENDERER,\n  selectRenderer, SELECT_RENDERER,\n  textRenderer, TEXT_RENDERER,\n  timeRenderer, TIME_RENDERER,\n};\n\nexport {\n  getRegisteredRendererNames,\n  getRegisteredRenderers,\n  getRenderer,\n  hasRenderer,\n  registerRenderer,\n} from './registry';\n","export {\n  RENDERER_TYPE,\n  autocompleteRenderer\n} from './autocompleteRenderer';\n","import { htmlRenderer } from '../htmlRenderer';\nimport { textRenderer } from '../textRenderer';\nimport EventManager from '../../eventManager';\nimport { addClass, hasClass } from '../../helpers/dom/element';\n\nimport './autocompleteRenderer.scss';\nimport { A11Y_HIDDEN } from '../../helpers/a11y';\n\nexport const RENDERER_TYPE = 'autocomplete';\n\n/**\n * Autocomplete renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function autocompleteRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  const { rootDocument } = hotInstance;\n  const rendererFunc = cellProperties.allowHtml ? htmlRenderer : textRenderer;\n  const ARROW = rootDocument.createElement('DIV');\n  const isAriaEnabled = hotInstance.getSettings().ariaTags;\n\n  ARROW.className = 'htAutocompleteArrow';\n\n  if (isAriaEnabled) {\n    ARROW.setAttribute(...A11Y_HIDDEN());\n  }\n\n  ARROW.appendChild(rootDocument.createTextNode(String.fromCharCode(9660)));\n\n  rendererFunc.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  if (!TD.firstChild) { // http://jsperf.com/empty-node-if-needed\n    // otherwise empty fields appear borderless in demo/renderers.html (IE)\n    TD.appendChild(rootDocument.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n  }\n\n  TD.insertBefore(ARROW, TD.firstChild);\n\n  addClass(TD, 'htAutocomplete');\n\n  if (!hotInstance.acArrowListener) {\n    const eventManager = new EventManager(hotInstance);\n\n    // not very elegant but easy and fast\n    hotInstance.acArrowListener = function(event) {\n      if (hasClass(event.target, 'htAutocompleteArrow')) {\n        hotInstance.view._wt.getSetting('onCellDblClick', null, hotInstance._createCellCoords(row, col), TD);\n      }\n    };\n\n    eventManager.addEventListener(hotInstance.rootElement, 'mousedown', hotInstance.acArrowListener);\n\n    // We need to unbind the listener after the table has been destroyed\n    hotInstance.addHookOnce('afterDestroy', () => {\n      eventManager.destroy();\n    });\n  }\n}\n\nautocompleteRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  htmlRenderer,\n} from './htmlRenderer';\n","import { baseRenderer } from '../baseRenderer';\nimport { fastInnerHTML } from '../../helpers/dom/element';\n\nexport const RENDERER_TYPE = 'html';\n\n/**\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function htmlRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  baseRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  fastInnerHTML(TD, value === null || value === undefined ? '' : value, false);\n}\n\nhtmlRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  RENDERER_TYPE,\n  dropdownRenderer\n} from './dropdownRenderer';\n","import { autocompleteRenderer } from '../autocompleteRenderer';\n\nexport const RENDERER_TYPE = 'dropdown';\n\n/**\n * Dropdown renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function dropdownRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\ndropdownRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  checkboxRenderer\n} from './checkboxRenderer';\n","import { baseRenderer } from '../baseRenderer';\nimport EventManager from '../../eventManager';\nimport { empty, addClass, setAttribute } from '../../helpers/dom/element';\nimport { isEmpty, stringify } from '../../helpers/mixed';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport Hooks from '../../pluginHooks';\nimport { A11Y_CHECKBOX, A11Y_CHECKED, A11Y_LABEL } from '../../helpers/a11y';\nimport { CHECKBOX_CHECKED, CHECKBOX_UNCHECKED } from '../../i18n/constants';\n\nimport './checkboxRenderer.css';\n\nconst isListeningKeyDownEvent = new WeakMap();\nconst isCheckboxListenerAdded = new WeakMap();\nconst BAD_VALUE_CLASS = 'htBadValue';\nconst ATTR_ROW = 'data-row';\nconst ATTR_COLUMN = 'data-col';\nconst SHORTCUTS_GROUP = 'checkboxRenderer';\n\nexport const RENDERER_TYPE = 'checkbox';\n\nHooks.getSingleton().add('modifyAutoColumnSizeSeed', function(bundleSeed, cellMeta, cellValue) {\n  const { label, type, row, column, prop } = cellMeta;\n\n  if (type !== RENDERER_TYPE) {\n    return;\n  }\n\n  if (label) {\n    const { value: labelValue, property: labelProperty } = label;\n    let labelText = cellValue;\n\n    if (labelValue) {\n      labelText = typeof labelValue === 'function' ?\n        labelValue(row, column, prop, cellValue) : labelValue;\n\n    } else if (labelProperty) {\n      const labelData = this.getDataAtRowProp(row, labelProperty);\n\n      labelText = labelData !== null ? labelData : cellValue;\n    }\n\n    bundleSeed = labelText;\n  }\n\n  return bundleSeed;\n});\n/**\n * Checkbox renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  const { rootDocument } = hotInstance;\n  const ariaEnabled = hotInstance.getSettings().ariaTags;\n\n  baseRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n  registerEvents(hotInstance);\n\n  let input = createInput(rootDocument);\n  const labelOptions = cellProperties.label;\n  let badValue = false;\n\n  if (typeof cellProperties.checkedTemplate === 'undefined') {\n    cellProperties.checkedTemplate = true;\n  }\n  if (typeof cellProperties.uncheckedTemplate === 'undefined') {\n    cellProperties.uncheckedTemplate = false;\n  }\n\n  empty(TD); // TODO identify under what circumstances this line can be removed\n\n  if (value === cellProperties.checkedTemplate ||\n    stringify(value).toLocaleLowerCase(cellProperties.locale) ===\n    stringify(cellProperties.checkedTemplate).toLocaleLowerCase(cellProperties.locale)) {\n    input.checked = true;\n\n  } else if (value === cellProperties.uncheckedTemplate ||\n    stringify(value).toLocaleLowerCase(cellProperties.locale) ===\n    stringify(cellProperties.uncheckedTemplate).toLocaleLowerCase(cellProperties.locale)) {\n    input.checked = false;\n\n  } else if (isEmpty(value)) { // default value\n    addClass(input, 'noValue');\n\n  } else {\n    input.style.display = 'none';\n    addClass(input, BAD_VALUE_CLASS);\n    badValue = true;\n  }\n\n  setAttribute(input, [\n    [ATTR_ROW, row],\n    [ATTR_COLUMN, col],\n  ]);\n\n  if (ariaEnabled) {\n    setAttribute(input, [\n      A11Y_LABEL(input.checked ?\n        hotInstance.getTranslatedPhrase(CHECKBOX_CHECKED) :\n        hotInstance.getTranslatedPhrase(CHECKBOX_UNCHECKED)\n      ),\n      A11Y_CHECKED(input.checked),\n      A11Y_CHECKBOX(),\n    ]);\n  }\n\n  if (!badValue && labelOptions) {\n    let labelText = '';\n\n    if (labelOptions.value) {\n      labelText = typeof labelOptions.value === 'function' ?\n        labelOptions.value.call(this, row, col, prop, value) : labelOptions.value;\n\n    } else if (labelOptions.property) {\n      const labelValue = hotInstance.getDataAtRowProp(row, labelOptions.property);\n\n      labelText = labelValue !== null ? labelValue : '';\n    }\n\n    const label = createLabel(rootDocument, labelText, labelOptions.separated !== true);\n\n    if (labelOptions.position === 'before') {\n      if (labelOptions.separated) {\n        TD.appendChild(label);\n        TD.appendChild(input);\n\n      } else {\n        label.appendChild(input);\n        input = label;\n      }\n    } else if (!labelOptions.position || labelOptions.position === 'after') {\n      if (labelOptions.separated) {\n        TD.appendChild(input);\n        TD.appendChild(label);\n\n      } else {\n        label.insertBefore(input, label.firstChild);\n        input = label;\n      }\n    }\n  }\n\n  if (!labelOptions || (labelOptions && !labelOptions.separated)) {\n    TD.appendChild(input);\n  }\n\n  if (badValue) {\n    TD.appendChild(rootDocument.createTextNode('#bad-value#'));\n  }\n\n  if (!isListeningKeyDownEvent.has(hotInstance)) {\n    isListeningKeyDownEvent.set(hotInstance, true);\n    registerShortcuts();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling checkbox state.\n   *\n   * @private\n   */\n  function registerShortcuts() {\n    const shortcutManager = hotInstance.getShortcutManager();\n    const gridContext = shortcutManager.getContext('grid');\n    const config = {\n      group: SHORTCUTS_GROUP,\n      relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n      position: 'before',\n    };\n\n    gridContext.addShortcuts([{\n      keys: [['space']],\n      callback: () => {\n        changeSelectedCheckboxesState();\n\n        return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.\n      },\n      runOnlyIf: () => hotInstance.getSelectedRangeLast()?.highlight.isCell(),\n    }, {\n      keys: [['enter']],\n      callback: () => {\n        changeSelectedCheckboxesState();\n\n        return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.\n      },\n      runOnlyIf: () => {\n        const range = hotInstance.getSelectedRangeLast();\n\n        return hotInstance.getSettings().enterBeginsEditing && range?.isSingle() && range.highlight.isCell();\n      },\n    }, {\n      keys: [['delete'], ['backspace']],\n      callback: () => {\n        changeSelectedCheckboxesState(true);\n\n        return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.\n      },\n      runOnlyIf: () => hotInstance.getSelectedRangeLast()?.highlight.isCell(),\n    }], config);\n  }\n\n  /**\n   * Change checkbox checked property.\n   *\n   * @private\n   * @param {boolean} [uncheckCheckbox=false] The new \"checked\" state for the checkbox elements.\n   */\n  function changeSelectedCheckboxesState(uncheckCheckbox = false) {\n    const selRange = hotInstance.getSelectedRange();\n    const changesPerSubSelection = [];\n    const nonCheckboxChanges = new Map();\n    let changes = [];\n    let changeCounter = 0;\n\n    if (!selRange) {\n      return;\n    }\n\n    for (let key = 0; key < selRange.length; key++) {\n      const { row: startRow, col: startColumn } = selRange[key].getTopStartCorner();\n      const { row: endRow, col: endColumn } = selRange[key].getBottomEndCorner();\n\n      for (let visualRow = startRow; visualRow <= endRow; visualRow += 1) {\n        for (let visualColumn = startColumn; visualColumn <= endColumn; visualColumn += 1) {\n          const cachedCellProperties = hotInstance.getCellMeta(visualRow, visualColumn);\n          const templates = {\n            checkedTemplate: cachedCellProperties.checkedTemplate,\n            uncheckedTemplate: cachedCellProperties.uncheckedTemplate,\n          };\n\n          // TODO: In the future it'd be better if non-checkbox changes were handled by the non-checkbox\n          //  `delete` keypress logic.\n          /* eslint-disable no-continue */\n          if (cachedCellProperties.type !== 'checkbox') {\n            if (uncheckCheckbox === true && !cachedCellProperties.readOnly) {\n              if (nonCheckboxChanges.has(changesPerSubSelection.length)) {\n                nonCheckboxChanges.set(changesPerSubSelection.length, [\n                  ...nonCheckboxChanges.get(changesPerSubSelection.length),\n                  [visualRow, visualColumn, null]\n                ]);\n\n              } else {\n                nonCheckboxChanges.set(changesPerSubSelection.length, [[visualRow, visualColumn, null]]);\n              }\n            }\n\n            continue;\n          }\n\n          /* eslint-disable no-continue */\n          if (cachedCellProperties.readOnly === true) {\n            continue;\n          }\n\n          if (typeof cachedCellProperties.checkedTemplate === 'undefined') {\n            cachedCellProperties.checkedTemplate = true;\n          }\n          if (typeof cachedCellProperties.uncheckedTemplate === 'undefined') {\n            cachedCellProperties.uncheckedTemplate = false;\n          }\n\n          const dataAtCell = hotInstance.getDataAtCell(visualRow, visualColumn);\n\n          if (uncheckCheckbox === false) {\n            if ([cachedCellProperties.checkedTemplate, cachedCellProperties.checkedTemplate.toString()].includes(dataAtCell)) { // eslint-disable-line max-len\n              changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate, templates]);\n\n            } else if ([cachedCellProperties.uncheckedTemplate, cachedCellProperties.uncheckedTemplate.toString(), null, undefined].includes(dataAtCell)) { // eslint-disable-line max-len\n              changes.push([visualRow, visualColumn, cachedCellProperties.checkedTemplate, templates]);\n            }\n\n          } else {\n            changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate, templates]);\n          }\n\n          changeCounter += 1;\n        }\n      }\n\n      changesPerSubSelection.push(changeCounter);\n      changeCounter = 0;\n    }\n\n    if (!changes.every(([, , cellValue]) => cellValue === changes[0][2])) {\n      changes = changes.map(\n        ([visualRow, visualColumn, , templates]) => [visualRow, visualColumn, templates.checkedTemplate]\n      );\n    } else {\n      changes = changes.map(([visualRow, visualColumn, cellValue]) => [visualRow, visualColumn, cellValue]);\n    }\n\n    if (changes.length > 0) {\n      // TODO: This is workaround for handsontable/dev-handsontable#1747 not being a breaking change.\n      // Technically, the changes don't need to be split into chunks when sent to `setDataAtCell`.\n      changesPerSubSelection.forEach((changesCount, sectionCount) => {\n        let changesChunk = changes.splice(0, changesCount);\n\n        if (nonCheckboxChanges.size && nonCheckboxChanges.has(sectionCount)) {\n          changesChunk = [\n            ...changesChunk,\n            ...nonCheckboxChanges.get(sectionCount)\n          ];\n        }\n\n        hotInstance.setDataAtCell(changesChunk);\n      });\n    }\n  }\n\n  /**\n   * Check whether all selected cells are with checkbox type.\n   *\n   * @returns {boolean}\n   * @private\n   */\n  function areSelectedCheckboxCells() {\n    const selRange = hotInstance.getSelectedRange();\n\n    if (!selRange) {\n      return;\n    }\n\n    for (let key = 0; key < selRange.length; key++) {\n      const topLeft = selRange[key].getTopStartCorner();\n      const bottomRight = selRange[key].getBottomEndCorner();\n\n      for (let visualRow = topLeft.row; visualRow <= bottomRight.row; visualRow++) {\n        for (let visualColumn = topLeft.col; visualColumn <= bottomRight.col; visualColumn++) {\n          const cachedCellProperties = hotInstance.getCellMeta(visualRow, visualColumn);\n\n          const cell = hotInstance.getCell(visualRow, visualColumn);\n\n          if (cell === null || cell === undefined) {\n            return true;\n\n          } else {\n            const checkboxes = cell.querySelectorAll('input[type=checkbox]');\n\n            if (checkboxes.length > 0 && !cachedCellProperties.readOnly) {\n              return true;\n            }\n          }\n        }\n      }\n    }\n\n    return false;\n  }\n}\n\ncheckboxRenderer.RENDERER_TYPE = RENDERER_TYPE;\n\n/**\n * Register checkbox listeners.\n *\n * @param {Core} instance The Handsontable instance.\n * @returns {EventManager}\n */\nfunction registerEvents(instance) {\n  let eventManager = isCheckboxListenerAdded.get(instance);\n\n  if (!eventManager) {\n    const { rootElement } = instance;\n\n    eventManager = new EventManager(instance);\n\n    eventManager.addEventListener(rootElement, 'click', event => onClick(event, instance));\n    eventManager.addEventListener(rootElement, 'mouseup', event => onMouseUp(event, instance));\n    eventManager.addEventListener(rootElement, 'change', event => onChange(event, instance));\n\n    isCheckboxListenerAdded.set(instance, eventManager);\n  }\n\n  return eventManager;\n}\n\n/**\n * Create input element.\n *\n * @param {Document} rootDocument The document owner.\n * @returns {Node}\n */\nfunction createInput(rootDocument) {\n  const input = rootDocument.createElement('input');\n\n  input.className = 'htCheckboxRendererInput';\n  input.type = 'checkbox';\n  input.setAttribute('tabindex', '-1');\n\n  return input.cloneNode(false);\n}\n\n/**\n * Create label element.\n *\n * @param {Document} rootDocument The document owner.\n * @param {string} text The label text.\n * @param {boolean} fullWidth Determines whether label should have full width.\n * @returns {Node}\n */\nfunction createLabel(rootDocument, text, fullWidth) {\n  const label = rootDocument.createElement('label');\n\n  label.className = `htCheckboxRendererLabel ${fullWidth ? 'fullWidth' : ''}`;\n  label.appendChild(rootDocument.createTextNode(text));\n\n  return label.cloneNode(true);\n}\n\n/**\n * `mouseup` callback.\n *\n * @private\n * @param {Event} event `mouseup` event.\n * @param {Core} instance The Handsontable instance.\n */\nfunction onMouseUp(event, instance) {\n  const { target } = event;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  setTimeout(instance.listen, 10);\n}\n\n/**\n * `click` callback.\n *\n * @private\n * @param {MouseEvent} event `click` event.\n * @param {Core} instance The Handsontable instance.\n */\nfunction onClick(event, instance) {\n  const { target } = event;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  const row = parseInt(target.getAttribute(ATTR_ROW), 10);\n  const col = parseInt(target.getAttribute(ATTR_COLUMN), 10);\n  const cellProperties = instance.getCellMeta(row, col);\n\n  if (cellProperties.readOnly) {\n    event.preventDefault();\n  }\n}\n\n/**\n * `change` callback.\n *\n * @param {Event} event `change` event.\n * @param {Core} instance The Handsontable instance.\n */\nfunction onChange(event, instance) {\n  const { target } = event;\n\n  if (!isCheckboxInput(target)) {\n    return;\n  }\n\n  if (!target.hasAttribute(ATTR_ROW) || !target.hasAttribute(ATTR_COLUMN)) {\n    return;\n  }\n\n  const row = parseInt(target.getAttribute(ATTR_ROW), 10);\n  const col = parseInt(target.getAttribute(ATTR_COLUMN), 10);\n  const cellProperties = instance.getCellMeta(row, col);\n\n  if (!cellProperties.readOnly) {\n    let newCheckboxValue = null;\n\n    if (event.target.checked) {\n      newCheckboxValue = cellProperties.uncheckedTemplate === undefined ? true : cellProperties.checkedTemplate;\n    } else {\n      newCheckboxValue = cellProperties.uncheckedTemplate === undefined ? false : cellProperties.uncheckedTemplate;\n    }\n\n    instance.setDataAtCell(row, col, newCheckboxValue);\n  }\n}\n\n/**\n * Check if the provided element is the checkbox input.\n *\n * @private\n * @param {HTMLElement} element The element in question.\n * @returns {boolean}\n */\nfunction isCheckboxInput(element) {\n  return element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox';\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  RENDERER_TYPE,\n  handsontableRenderer\n} from './handsontableRenderer';\n","import { autocompleteRenderer } from '../autocompleteRenderer';\n\nexport const RENDERER_TYPE = 'handsontable';\n\n/**\n * Handsontable renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function handsontableRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\nhandsontableRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  numericRenderer,\n  getRenderedValue,\n} from './numericRenderer';\n","import numbro from 'numbro';\nimport { textRenderer } from '../textRenderer';\nimport { isNumeric } from '../../helpers/number';\n\nexport const RENDERER_TYPE = 'numeric';\n\n/**\n * Get the rendered value.\n *\n * @param {*} value Value to be rendered.\n * @param {CellMeta} cellProperties Cell meta object.\n * @returns {*} Returns the rendered value.\n */\nexport function getRenderedValue(value, cellProperties) {\n  if (isNumeric(value)) {\n    const numericFormat = cellProperties.numericFormat;\n    const cellCulture = numericFormat && numericFormat.culture || '-';\n    const cellFormatPattern = numericFormat && numericFormat.pattern;\n\n    if (typeof cellCulture !== 'undefined' && !numbro.languages()[cellCulture]) {\n      const shortTag = cellCulture.replace('-', '');\n      const langData = numbro.allLanguages ? numbro.allLanguages[cellCulture] : numbro[shortTag];\n\n      if (langData) {\n        numbro.registerLanguage(langData);\n      }\n    }\n\n    numbro.setLanguage(cellCulture);\n\n    value = numbro(value).format(cellFormatPattern || '0');\n  }\n\n  return value;\n}\n\n/**\n * Numeric cell renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function numericRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  let newValue = value;\n\n  if (isNumeric(newValue)) {\n    const className = cellProperties.className || '';\n    const classArr = className.length ? className.split(' ') : [];\n\n    newValue = getRenderedValue(newValue, cellProperties);\n\n    if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 &&\n      classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {\n      classArr.push('htRight');\n    }\n\n    if (classArr.indexOf('htNumeric') < 0) {\n      classArr.push('htNumeric');\n    }\n\n    cellProperties.className = classArr.join(' ');\n\n    TD.dir = 'ltr';\n  }\n\n  textRenderer(hotInstance, TD, row, col, prop, newValue, cellProperties);\n}\n\nnumericRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__429__;","export {\n  RENDERER_TYPE,\n  passwordRenderer,\n} from './passwordRenderer';\n","import { textRenderer } from '../textRenderer';\nimport { fastInnerHTML } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\n\nexport const RENDERER_TYPE = 'password';\n\n/**\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function passwordRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  const hashLength = cellProperties.hashLength || TD.innerHTML.length;\n  const hashSymbol = cellProperties.hashSymbol || '*';\n\n  let hash = '';\n\n  rangeEach(hashLength - 1, () => {\n    hash += hashSymbol;\n  });\n  fastInnerHTML(TD, hash);\n}\n\npasswordRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  selectRenderer,\n} from './selectRenderer';\n","import { textRenderer } from '../textRenderer';\n\nexport const RENDERER_TYPE = 'select';\n\n/**\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function selectRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\nselectRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  RENDERER_TYPE,\n  timeRenderer,\n} from './timeRenderer';\n","import { textRenderer } from '../textRenderer';\n\nexport const RENDERER_TYPE = 'time';\n\n/**\n * Default time renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function timeRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  textRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n\n  TD.dir = 'ltr';\n}\n\ntimeRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","import { autocompleteValidator, VALIDATOR_TYPE as AUTOCOMPLETE_VALIDATOR } from './autocompleteValidator';\nimport { dateValidator, VALIDATOR_TYPE as DATE_VALIDATOR } from './dateValidator';\nimport { dropdownValidator, VALIDATOR_TYPE as DROPDOWN_VALIDATOR } from './dropdownValidator';\nimport { numericValidator, VALIDATOR_TYPE as NUMERIC_VALIDATOR } from './numericValidator';\nimport { timeValidator, VALIDATOR_TYPE as TIME_VALIDATOR } from './timeValidator';\nimport {\n  registerValidator,\n} from './registry';\n\n/**\n * Registers all available validators.\n */\nexport function registerAllValidators() {\n  registerValidator(autocompleteValidator);\n  registerValidator(dropdownValidator);\n  registerValidator(dateValidator);\n  registerValidator(numericValidator);\n  registerValidator(timeValidator);\n}\n\nexport {\n  autocompleteValidator, AUTOCOMPLETE_VALIDATOR,\n  dropdownValidator, DROPDOWN_VALIDATOR,\n  dateValidator, DATE_VALIDATOR,\n  numericValidator, NUMERIC_VALIDATOR,\n  timeValidator, TIME_VALIDATOR,\n};\n\nexport {\n  getRegisteredValidatorNames,\n  getRegisteredValidators,\n  getValidator,\n  hasValidator,\n  registerValidator,\n} from './registry';\n","export {\n  VALIDATOR_TYPE,\n  autocompleteValidator,\n} from './autocompleteValidator';\n","export const VALIDATOR_TYPE = 'autocomplete';\n\n/**\n * The Autocomplete cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function autocompleteValidator(value, callback) {\n  let valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === undefined) {\n    valueToValidate = '';\n  }\n\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n\n    return;\n  }\n\n  if (this.strict && this.source) {\n    if (typeof this.source === 'function') {\n      this.source(valueToValidate, process(valueToValidate, callback));\n    } else {\n      process(valueToValidate, callback)(this.source);\n    }\n  } else {\n    callback(true);\n  }\n}\n\nautocompleteValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n\n/**\n * Function responsible for validation of autocomplete value.\n *\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n * @returns {Function}\n */\nfunction process(value, callback) {\n  const originalVal = value;\n\n  return function(source) {\n    let found = false;\n\n    for (let s = 0, slen = source.length; s < slen; s++) {\n      if (originalVal === source[s]) {\n        found = true; // perfect match\n        break;\n      }\n    }\n\n    callback(found);\n  };\n}\n","export {\n  VALIDATOR_TYPE,\n  correctFormat,\n  dateValidator,\n} from './dateValidator';\n","import moment from 'moment';\nimport { getEditorInstance } from '../../editors/registry';\nimport { EDITOR_TYPE as DATE_EDITOR_TYPE } from '../../editors/dateEditor';\nimport { getNormalizedDate } from '../../helpers/date';\n\nexport const VALIDATOR_TYPE = 'date';\n\n/**\n * The Date cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function dateValidator(value, callback) {\n  const dateEditor = getEditorInstance(DATE_EDITOR_TYPE, this.instance);\n  let valueToValidate = value;\n  let valid = true;\n\n  if (valueToValidate === null || valueToValidate === undefined) {\n    valueToValidate = '';\n  }\n\n  let isValidFormat = moment(valueToValidate, this.dateFormat || dateEditor.defaultDateFormat, true).isValid();\n  let isValidDate = moment(new Date(valueToValidate)).isValid() || isValidFormat;\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidDate = true;\n    isValidFormat = true;\n  }\n  if (!isValidDate) {\n    valid = false;\n  }\n  if (!isValidDate && isValidFormat) {\n    valid = true;\n  }\n\n  if (isValidDate && !isValidFormat) {\n    if (this.correctFormat === true) { // if format correction is enabled\n      const correctedValue = correctFormat(valueToValidate, this.dateFormat);\n\n      this.instance.setDataAtCell(this.visualRow, this.visualCol, correctedValue, 'dateValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\n\ndateValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n\n/**\n * Format the given string using moment.js' format feature.\n *\n * @param {string} value The value to format.\n * @param {string} dateFormat The date pattern to format to.\n * @returns {string}\n */\nexport function correctFormat(value, dateFormat) {\n  const dateFromDate = moment(getNormalizedDate(value));\n  const dateFromMoment = moment(value, dateFormat);\n  const isAlphanumeric = value.search(/[A-z]/g) > -1;\n  let date;\n\n  if ((dateFromDate.isValid() && dateFromDate.format('x') === dateFromMoment.format('x')) ||\n      !dateFromMoment.isValid() ||\n      isAlphanumeric) {\n    date = dateFromDate;\n\n  } else {\n    date = dateFromMoment;\n  }\n\n  return date.format(dateFormat);\n}\n","/**\n * Get normalized Date object for the ISO formatted date strings.\n * Natively, the date object parsed from a ISO 8601 string will be offsetted by the timezone difference, which may result in returning a wrong date.\n * See: Github issue #3338.\n *\n * @param {string} dateString String representing the date.\n * @returns {Date} The proper Date object.\n */\nexport function getNormalizedDate(dateString) {\n  const nativeDate = new Date(dateString);\n\n  // NaN if dateString is not in ISO format\n  if (!isNaN(new Date(`${dateString}T00:00`).getDate())) {\n\n    // Compensate timezone offset\n    return new Date(nativeDate.getTime() + (nativeDate.getTimezoneOffset() * 60000));\n  }\n\n  return nativeDate;\n}\n","export {\n  VALIDATOR_TYPE,\n  dropdownValidator,\n} from './dropdownValidator';\n","import { autocompleteValidator } from '../autocompleteValidator/autocompleteValidator';\n\nexport const VALIDATOR_TYPE = 'dropdown';\n\n/**\n * The Dropdown cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function dropdownValidator(value, callback) {\n  autocompleteValidator.apply(this, [value, callback]);\n}\n\ndropdownValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n","export {\n  VALIDATOR_TYPE,\n  numericValidator,\n} from './numericValidator';\n","import { isNumeric } from '../../helpers/number';\n\nexport const VALIDATOR_TYPE = 'numeric';\n\n/**\n * The Numeric cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function numericValidator(value, callback) {\n  let valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === undefined) {\n    valueToValidate = '';\n  }\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n\n  } else if (valueToValidate === '') {\n    callback(false);\n\n  } else {\n    callback(isNumeric(value));\n  }\n}\n\nnumericValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n","export {\n  VALIDATOR_TYPE,\n  timeValidator,\n} from './timeValidator';\n","import moment from 'moment';\n\n// Formats which are correctly parsed to time (supported by momentjs)\nconst STRICT_FORMATS = [\n  'YYYY-MM-DDTHH:mm:ss.SSSZ',\n  'X', // Unix timestamp\n  'x' // Unix ms timestamp\n];\n\nexport const VALIDATOR_TYPE = 'time';\n\n/**\n * The Time cell validator.\n *\n * @private\n * @param {*} value Value of edited cell.\n * @param {Function} callback Callback called with validation result.\n */\nexport function timeValidator(value, callback) {\n  const timeFormat = this.timeFormat || 'h:mm:ss a';\n  let valid = true;\n  let valueToValidate = value;\n\n  if (valueToValidate === null) {\n    valueToValidate = '';\n  }\n\n  valueToValidate = /^\\d{3,}$/.test(valueToValidate) ? parseInt(valueToValidate, 10) : valueToValidate;\n\n  const twoDigitValue = /^\\d{1,2}$/.test(valueToValidate);\n\n  if (twoDigitValue) {\n    valueToValidate += ':00';\n  }\n\n  const date = moment(valueToValidate, STRICT_FORMATS, true).isValid() ?\n    moment(valueToValidate) : moment(valueToValidate, timeFormat);\n  let isValidTime = date.isValid();\n\n  // is it in the specified format\n  let isValidFormat = moment(valueToValidate, timeFormat, true).isValid() && !twoDigitValue;\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidTime = true;\n    isValidFormat = true;\n  }\n  if (!isValidTime) {\n    valid = false;\n  }\n  if (!isValidTime && isValidFormat) {\n    valid = true;\n  }\n  if (isValidTime && !isValidFormat) {\n    if (this.correctFormat === true) { // if format correction is enabled\n      const correctedValue = date.format(timeFormat);\n\n      this.instance.setDataAtCell(this.visualRow, this.visualCol, correctedValue, 'timeValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\n\ntimeValidator.VALIDATOR_TYPE = VALIDATOR_TYPE;\n","import { AutocompleteCellType, CELL_TYPE as AUTOCOMPLETE_TYPE } from './autocompleteType';\nimport { CheckboxCellType, CELL_TYPE as CHECKBOX_TYPE } from './checkboxType';\nimport { DateCellType, CELL_TYPE as DATE_TYPE } from './dateType';\nimport { DropdownCellType, CELL_TYPE as DROPDOWN_TYPE } from './dropdownType';\nimport { HandsontableCellType, CELL_TYPE as HANDSONTABLE_TYPE } from './handsontableType';\nimport { NumericCellType, CELL_TYPE as NUMERIC_TYPE } from './numericType';\nimport { PasswordCellType, CELL_TYPE as PASSWORD_TYPE } from './passwordType';\nimport { SelectCellType, CELL_TYPE as SELECT_TYPE } from './selectType';\nimport { TextCellType, CELL_TYPE as TEXT_TYPE } from './textType';\nimport { TimeCellType, CELL_TYPE as TIME_TYPE } from './timeType';\nimport {\n  registerCellType,\n} from './registry';\n\n/**\n * Registers all available cell types.\n */\nexport function registerAllCellTypes() {\n  registerCellType(AutocompleteCellType);\n  registerCellType(CheckboxCellType);\n  registerCellType(DateCellType);\n  registerCellType(DropdownCellType);\n  registerCellType(HandsontableCellType);\n  registerCellType(NumericCellType);\n  registerCellType(PasswordCellType);\n  registerCellType(SelectCellType);\n  registerCellType(TextCellType);\n  registerCellType(TimeCellType);\n}\n\nexport {\n  AutocompleteCellType, AUTOCOMPLETE_TYPE,\n  CheckboxCellType, CHECKBOX_TYPE,\n  DateCellType, DATE_TYPE,\n  DropdownCellType, DROPDOWN_TYPE,\n  HandsontableCellType, HANDSONTABLE_TYPE,\n  NumericCellType, NUMERIC_TYPE,\n  PasswordCellType, PASSWORD_TYPE,\n  SelectCellType, SELECT_TYPE,\n  TextCellType, TEXT_TYPE,\n  TimeCellType, TIME_TYPE,\n};\n\nexport {\n  getCellType,\n  getRegisteredCellTypeNames,\n  getRegisteredCellTypes,\n  hasCellType,\n  registerCellType,\n} from './registry';\n","export {\n  AutocompleteCellType,\n  CELL_TYPE,\n} from './autocompleteType';\n","import { AutocompleteEditor } from '../../editors/autocompleteEditor';\nimport { autocompleteRenderer } from '../../renderers/autocompleteRenderer';\nimport { autocompleteValidator } from '../../validators/autocompleteValidator';\n\nexport const CELL_TYPE = 'autocomplete';\nexport const AutocompleteCellType = {\n  CELL_TYPE,\n  editor: AutocompleteEditor,\n  renderer: autocompleteRenderer,\n  validator: autocompleteValidator,\n};\n","export {\n  CELL_TYPE,\n  CheckboxCellType,\n} from './checkboxType';\n","import { CheckboxEditor } from '../../editors/checkboxEditor';\nimport { checkboxRenderer } from '../../renderers/checkboxRenderer';\n\nexport const CELL_TYPE = 'checkbox';\nexport const CheckboxCellType = {\n  CELL_TYPE,\n  editor: CheckboxEditor,\n  renderer: checkboxRenderer,\n};\n","export {\n  CELL_TYPE,\n  DateCellType,\n} from './dateType';\n","import { DateEditor } from '../../editors/dateEditor';\nimport { dateRenderer } from '../../renderers/dateRenderer';\nimport { dateValidator } from '../../validators/dateValidator';\n\nexport const CELL_TYPE = 'date';\nexport const DateCellType = {\n  CELL_TYPE,\n  editor: DateEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: dateRenderer,\n  validator: dateValidator,\n};\n","export {\n  RENDERER_TYPE,\n  dateRenderer\n} from './dateRenderer';\n","import { autocompleteRenderer } from '../autocompleteRenderer';\n\nexport const RENDERER_TYPE = 'date';\n\n/**\n * Handsontable renderer.\n *\n * @private\n * @param {Core} hotInstance The Handsontable instance.\n * @param {HTMLTableCellElement} TD The rendered cell element.\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {number|string} prop The column property (passed when datasource is an array of objects).\n * @param {*} value The rendered value.\n * @param {object} cellProperties The cell meta object (see {@link Core#getCellMeta}).\n */\nexport function dateRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {\n  autocompleteRenderer.apply(this, [hotInstance, TD, row, col, prop, value, cellProperties]);\n}\n\ndateRenderer.RENDERER_TYPE = RENDERER_TYPE;\n","export {\n  CELL_TYPE,\n  DropdownCellType,\n} from './dropdownType';\n","import { DropdownEditor } from '../../editors/dropdownEditor';\nimport { dropdownRenderer } from '../../renderers/dropdownRenderer';\nimport { dropdownValidator } from '../../validators/dropdownValidator';\n\nexport const CELL_TYPE = 'dropdown';\nexport const DropdownCellType = {\n  CELL_TYPE,\n  editor: DropdownEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: dropdownRenderer,\n  validator: dropdownValidator,\n};\n","export {\n  CELL_TYPE,\n  HandsontableCellType,\n} from './handsontableType';\n","import { HandsontableEditor } from '../../editors/handsontableEditor';\nimport { handsontableRenderer } from '../../renderers/handsontableRenderer';\n\nexport const CELL_TYPE = 'handsontable';\nexport const HandsontableCellType = {\n  CELL_TYPE,\n  editor: HandsontableEditor,\n  // displays small gray arrow on right side of the cell\n  renderer: handsontableRenderer,\n};\n","export {\n  CELL_TYPE,\n  NumericCellType,\n} from './numericType';\n\n","import { NumericEditor } from '../../editors/numericEditor';\nimport { numericRenderer } from '../../renderers/numericRenderer';\nimport { numericValidator } from '../../validators/numericValidator';\n\nexport const CELL_TYPE = 'numeric';\nexport const NumericCellType = {\n  CELL_TYPE,\n  editor: NumericEditor,\n  renderer: numericRenderer,\n  validator: numericValidator,\n  dataType: 'number',\n};\n","export {\n  CELL_TYPE,\n  PasswordCellType,\n} from './passwordType';\n","import { PasswordEditor } from '../../editors/passwordEditor';\nimport { passwordRenderer } from '../../renderers/passwordRenderer';\n\nexport const CELL_TYPE = 'password';\nexport const PasswordCellType = {\n  CELL_TYPE,\n  editor: PasswordEditor,\n  renderer: passwordRenderer,\n  copyable: false,\n};\n","export {\n  CELL_TYPE,\n  SelectCellType,\n} from './selectType';\n","import { SelectEditor } from '../../editors/selectEditor';\nimport { selectRenderer } from '../../renderers/selectRenderer';\n\nexport const CELL_TYPE = 'select';\nexport const SelectCellType = {\n  CELL_TYPE,\n  editor: SelectEditor,\n  renderer: selectRenderer,\n};\n","export {\n  CELL_TYPE,\n  TimeCellType,\n} from './timeType';\n","import { TimeEditor } from '../../editors/timeEditor';\nimport { timeRenderer } from '../../renderers/timeRenderer';\nimport { timeValidator } from '../../validators/timeValidator';\n\nexport const CELL_TYPE = 'time';\nexport const TimeCellType = {\n  CELL_TYPE,\n  editor: TimeEditor,\n  renderer: timeRenderer,\n  validator: timeValidator,\n};\n","import { AutoColumnSize } from './autoColumnSize';\nimport { Autofill } from './autofill';\nimport { AutoRowSize } from './autoRowSize';\nimport { BasePlugin } from './base';\nimport { BindRowsWithHeaders } from './bindRowsWithHeaders';\nimport { CollapsibleColumns } from './collapsibleColumns';\nimport { ColumnSorting } from './columnSorting';\nimport { ColumnSummary } from './columnSummary';\nimport { Comments } from './comments';\nimport { ContextMenu } from './contextMenu';\nimport { CopyPaste } from './copyPaste';\nimport { CustomBorders } from './customBorders';\nimport { DragToScroll } from './dragToScroll';\nimport { DropdownMenu } from './dropdownMenu';\nimport { ExportFile } from './exportFile';\nimport { Filters } from './filters';\nimport { Formulas } from './formulas';\nimport { HiddenColumns } from './hiddenColumns';\nimport { HiddenRows } from './hiddenRows';\nimport { ManualColumnFreeze } from './manualColumnFreeze';\nimport { ManualColumnMove } from './manualColumnMove';\nimport { ManualColumnResize } from './manualColumnResize';\nimport { ManualRowMove } from './manualRowMove';\nimport { ManualRowResize } from './manualRowResize';\nimport { MergeCells } from './mergeCells';\nimport { MultiColumnSorting } from './multiColumnSorting';\nimport { MultipleSelectionHandles } from './multipleSelectionHandles';\nimport { NestedHeaders } from './nestedHeaders';\nimport { NestedRows } from './nestedRows';\nimport { PersistentState } from './persistentState';\nimport { Search } from './search';\nimport { TouchScroll } from './touchScroll';\nimport { TrimRows } from './trimRows';\nimport { UndoRedo } from './undoRedo';\nimport {\n  registerPlugin,\n} from './registry';\n\n/**\n * Registers all available plugins.\n */\nexport function registerAllPlugins() {\n  registerPlugin(AutoColumnSize);\n  registerPlugin(Autofill);\n  registerPlugin(AutoRowSize);\n  registerPlugin(BindRowsWithHeaders);\n  registerPlugin(CollapsibleColumns);\n  registerPlugin(ColumnSorting);\n  registerPlugin(ColumnSummary);\n  registerPlugin(Comments);\n  registerPlugin(ContextMenu);\n  registerPlugin(CopyPaste);\n  registerPlugin(CustomBorders);\n  registerPlugin(DragToScroll);\n  registerPlugin(DropdownMenu);\n  registerPlugin(ExportFile);\n  registerPlugin(Filters);\n  registerPlugin(Formulas);\n  registerPlugin(HiddenColumns);\n  registerPlugin(HiddenRows);\n  registerPlugin(ManualColumnFreeze);\n  registerPlugin(ManualColumnMove);\n  registerPlugin(ManualColumnResize);\n  registerPlugin(ManualRowMove);\n  registerPlugin(ManualRowResize);\n  registerPlugin(MergeCells);\n  registerPlugin(MultiColumnSorting);\n  registerPlugin(MultipleSelectionHandles);\n  registerPlugin(NestedHeaders);\n  registerPlugin(NestedRows);\n  registerPlugin(PersistentState);\n  registerPlugin(Search);\n  registerPlugin(TouchScroll);\n  registerPlugin(TrimRows);\n  registerPlugin(UndoRedo);\n}\n\nexport {\n  AutoColumnSize,\n  Autofill,\n  AutoRowSize,\n  BasePlugin,\n  BindRowsWithHeaders,\n  CollapsibleColumns,\n  ColumnSorting,\n  ColumnSummary,\n  Comments,\n  ContextMenu,\n  CopyPaste,\n  CustomBorders,\n  DragToScroll,\n  DropdownMenu,\n  ExportFile,\n  Filters,\n  Formulas,\n  HiddenColumns,\n  HiddenRows,\n  ManualColumnFreeze,\n  ManualColumnMove,\n  ManualColumnResize,\n  ManualRowMove,\n  ManualRowResize,\n  MergeCells,\n  MultiColumnSorting,\n  MultipleSelectionHandles,\n  NestedHeaders,\n  NestedRows,\n  PersistentState,\n  Search,\n  TouchScroll,\n  TrimRows,\n  UndoRedo,\n};\n\nexport {\n  getPlugin,\n  getPluginsNames,\n  registerPlugin,\n} from './registry';\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  AutoColumnSize,\n} from './autoColumnSize';\n","import { BasePlugin } from '../base';\nimport { cancelAnimationFrame, requestAnimationFrame } from '../../helpers/feature';\nimport GhostTable from '../../utils/ghostTable';\nimport Hooks from '../../pluginHooks';\nimport { isObject, hasOwnProperty } from '../../helpers/object';\nimport { valueAccordingPercent, rangeEach } from '../../helpers/number';\nimport SamplesGenerator from '../../utils/samplesGenerator';\nimport { isPercentValue } from '../../helpers/string';\nimport { DEFAULT_COLUMN_WIDTH } from '../../3rdparty/walkontable/src';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\nHooks.getSingleton().register('modifyAutoColumnSizeSeed');\n\nexport const PLUGIN_KEY = 'autoColumnSize';\nexport const PLUGIN_PRIORITY = 10;\nconst COLUMN_SIZE_MAP_NAME = 'autoColumnSize';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin AutoColumnSize\n * @class AutoColumnSize\n *\n * @description\n * This plugin allows to set column widths based on their widest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it enabled (same as if it was declared as `true`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the widths of all cells to\n * resize the columns accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the column widths manually.\n *\n * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object:\n *\n * ```js\n * // as a number (300 columns in sync, rest async)\n * autoColumnSize: {syncLimit: 300},\n *\n * // as a string (percent)\n * autoColumnSize: {syncLimit: '40%'},\n * ```\n *\n * The plugin uses {@link GhostTable} and {@link SamplesGenerator} for calculations.\n * First, {@link SamplesGenerator} prepares samples of data with its coordinates.\n * Next {@link GhostTable} uses coordinates to get cells' renderers and append all to the DOM through DocumentFragment.\n *\n * Sampling accepts additional options:\n * - *samplingRatio* - Defines how many samples for the same length will be used to calculate. Default is `3`.\n *\n * ```js\n *   autoColumnSize: {\n *     samplingRatio: 10,\n *   }\n * ```\n *\n * - *allowSampleDuplicates* - Defines if duplicated values might be used in sampling. Default is `false`.\n *\n * ```js\n *   autoColumnSize: {\n *     allowSampleDuplicates: true,\n *   }\n * ```\n *\n * To configure this plugin see {@link Options#autoColumnSize}.\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   autoColumnSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoColumnSize');\n *\n * plugin.getColumnWidth(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * // First, let's contruct Handsontable\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   autoColumnSize={true}\n * />\n *\n * ...\n *\n * // Access to plugin instance:\n * const hot = hotRef.current.hotInstance;\n * const plugin = hot.getPlugin('autoColumnSize');\n *\n * plugin.getColumnWidth(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport class AutoColumnSize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return true;\n  }\n\n  static get CALCULATION_STEP() {\n    return 50;\n  }\n\n  static get SYNC_CALCULATION_LIMIT() {\n    return 50;\n  }\n\n  /**\n   * Instance of {@link GhostTable} for rows and columns size calculations.\n   *\n   * @private\n   * @type {GhostTable}\n   */\n  ghostTable = new GhostTable(this.hot);\n  /**\n   * Instance of {@link SamplesGenerator} for generating samples necessary for columns width calculations.\n   *\n   * @private\n   * @type {SamplesGenerator}\n   * @fires Hooks#modifyAutoColumnSizeSeed\n   */\n  samplesGenerator = new SamplesGenerator((row, column) => {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    if (this.hot.rowIndexMapper.isHidden(physicalRow) || this.hot.columnIndexMapper.isHidden(physicalColumn)) {\n      return false;\n    }\n\n    const cellMeta = this.hot.getCellMeta(row, column);\n    let cellValue = '';\n\n    if (!cellMeta.spanned) {\n      cellValue = this.hot.getDataAtCell(row, column);\n    }\n\n    let bundleSeed = '';\n\n    if (this.hot.hasHook('modifyAutoColumnSizeSeed')) {\n      bundleSeed = this.hot.runHooks('modifyAutoColumnSizeSeed', bundleSeed, cellMeta, cellValue);\n    }\n\n    return { value: cellValue, bundleSeed };\n  });\n  /**\n   * `true` if the size calculation is in progress.\n   *\n   * @type {boolean}\n   */\n  inProgress = false;\n  /**\n   * Number of already measured columns (we already know their sizes).\n   *\n   * @type {number}\n   */\n  measuredColumns = 0;\n  /**\n   * PhysicalIndexToValueMap to keep and track widths for physical column indexes.\n   *\n   * @private\n   * @type {PhysicalIndexToValueMap}\n   */\n  columnWidthsMap = new IndexToValueMap();\n\n  /**\n   * Cached column header names. It is used to diff current column headers with previous state and detect which\n   * columns width should be updated.\n   *\n   * @type {Array}\n   */\n  #cachedColumnHeaders = [];\n  /**\n   * An array of column indexes whose width will be recalculated.\n   *\n   * @type {number[]}\n   */\n  #visualColumnsToRefresh = [];\n\n  constructor(hotInstance) {\n    super(hotInstance);\n    this.hot.columnIndexMapper.registerMap(COLUMN_SIZE_MAP_NAME, this.columnWidthsMap);\n\n    // Leave the listener active to allow auto-sizing the columns when the plugin is disabled.\n    // This is necessary for width recalculation for resize handler doubleclick (ManualColumnResize).\n    this.addHook('beforeColumnResize',\n      (size, column, isDblClick) => this.#onBeforeColumnResize(size, column, isDblClick));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link #enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY] !== false && !this.hot.getSettings().colWidths;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const setting = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (setting && setting.useHeaders !== null && setting.useHeaders !== undefined) {\n      this.ghostTable.setSetting('useHeaders', setting.useHeaders);\n    }\n\n    this.setSamplingOptions();\n\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('beforeChangeRender', (...args) => this.#onBeforeChange(...args));\n    this.addHook('afterFormulasValuesUpdate', (...args) => this.#onAfterFormulasValuesUpdate(...args));\n    this.addHook('beforeRender', () => this.#onBeforeRender());\n    this.addHook('modifyColWidth', (width, col) => this.getColumnWidth(col, width));\n    this.addHook('init', () => this.#onInit());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state. This method is executed when {@link Core#updateSettings} is invoked.\n   */\n  updatePlugin() {\n    this.#visualColumnsToRefresh = this.findColumnsWhereHeaderWasChanged();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n\n    // Leave the listener active to allow auto-sizing the columns when the plugin is disabled.\n    // This is necessary for width recalculation for resize handler doubleclick (ManualColumnResize).\n    this.addHook('beforeColumnResize',\n      (size, column, isDblClick) => this.#onBeforeColumnResize(size, column, isDblClick));\n  }\n\n  /**\n   * Calculates widths for visible columns in the viewport only.\n   */\n  calculateVisibleColumnsWidth() {\n    // Keep last column widths unchanged for situation when all rows was deleted or trimmed (pro #6)\n    if (!this.hot.countRows()) {\n      return;\n    }\n\n    const firstVisibleColumn = this.getFirstVisibleColumn();\n    const lastVisibleColumn = this.getLastVisibleColumn();\n\n    if (firstVisibleColumn === -1 || lastVisibleColumn === -1) {\n      return;\n    }\n\n    const overwriteCache = this.hot.renderCall;\n\n    this.calculateColumnsWidth({ from: firstVisibleColumn, to: lastVisibleColumn }, undefined, overwriteCache);\n  }\n\n  /**\n   * Calculates a columns width.\n   *\n   * @param {number|object} colRange Visual column index or an object with `from` and `to` visual indexes as a range.\n   * @param {number|object} rowRange Visual row index or an object with `from` and `to` visual indexes as a range.\n   * @param {boolean} [overwriteCache=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateColumnsWidth(\n    colRange = { from: 0, to: this.hot.countCols() - 1 },\n    rowRange = { from: 0, to: this.hot.countRows() - 1 },\n    overwriteCache = false\n  ) {\n    const columnsRange = typeof colRange === 'number' ? { from: colRange, to: colRange } : colRange;\n    const rowsRange = typeof rowRange === 'number' ? { from: rowRange, to: rowRange } : rowRange;\n\n    rangeEach(columnsRange.from, columnsRange.to, (visualColumn) => {\n      let physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n      if (physicalColumn === null) {\n        physicalColumn = visualColumn;\n      }\n\n      if (overwriteCache || (this.columnWidthsMap.getValueAtIndex(physicalColumn) === null &&\n          !this.hot._getColWidthFromSettings(physicalColumn))) {\n        const samples = this.samplesGenerator.generateColumnSamples(visualColumn, rowsRange);\n\n        samples.forEach((sample, column) => this.ghostTable.addColumn(column, sample));\n      }\n    });\n\n    if (this.ghostTable.columns.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getWidths((visualColumn, width) => {\n          const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n          this.columnWidthsMap.setValueAtIndex(physicalColumn, width);\n        });\n      }, true);\n\n      this.measuredColumns = columnsRange.to + 1;\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Calculates all columns width. The calculated column will be cached in the {@link AutoColumnSize#widths} property.\n   * To retrieve width for specified column use {@link AutoColumnSize#getColumnWidth} method.\n   *\n   * @param {object|number} rowRange Row index or an object with `from` and `to` properties which define row range.\n   * @param {boolean} [overwriteCache] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateAllColumnsWidth(rowRange = { from: 0, to: this.hot.countRows() - 1 }, overwriteCache = false) {\n    let current = 0;\n    const length = this.hot.countCols() - 1;\n    let timer = null;\n\n    this.inProgress = true;\n\n    const loop = () => {\n      // When hot was destroyed after calculating finished cancel frame\n      if (!this.hot) {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        return;\n      }\n\n      this.calculateColumnsWidth({\n        from: current,\n        to: Math.min(current + AutoColumnSize.CALCULATION_STEP, length)\n      }, rowRange, overwriteCache);\n\n      current = current + AutoColumnSize.CALCULATION_STEP + 1;\n\n      if (current < length) {\n        timer = requestAnimationFrame(loop);\n\n      } else {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        // @TODO Should call once per render cycle, currently fired separately in different plugins\n        this.hot.view.adjustElementsSize();\n      }\n    };\n\n    const syncLimit = this.getSyncCalculationLimit();\n\n    // sync\n    if (syncLimit >= 0) {\n      this.calculateColumnsWidth({ from: 0, to: syncLimit }, rowRange, overwriteCache);\n      current = syncLimit + 1;\n    }\n    // async\n    if (current < length) {\n      loop();\n    } else {\n      this.inProgress = false;\n    }\n  }\n\n  /**\n   * Calculates specific columns width (overwrite cache values).\n   *\n   * @param {number[]} visualColumns List of visual columns to calculate.\n   */\n  #calculateSpecificColumnsWidth(visualColumns) {\n    const rowsRange = {\n      from: 0,\n      to: this.hot.countRows() - 1,\n    };\n\n    visualColumns.forEach((visualColumn) => {\n      const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n      if (physicalColumn === null) {\n        return;\n      }\n\n      if (!this.hot._getColWidthFromSettings(physicalColumn)) {\n        const samples = this.samplesGenerator.generateColumnSamples(visualColumn, rowsRange);\n\n        samples.forEach((sample, column) => this.ghostTable.addColumn(column, sample));\n      }\n    });\n\n    if (this.ghostTable.columns.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getWidths((visualColumn, width) => {\n          const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n\n          this.columnWidthsMap.setValueAtIndex(physicalColumn, width);\n        });\n      }, true);\n\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Sets the sampling options.\n   *\n   * @private\n   */\n  setSamplingOptions() {\n    const setting = this.hot.getSettings()[PLUGIN_KEY];\n    const samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ?\n      setting.samplingRatio : undefined;\n    const allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ?\n      setting.allowSampleDuplicates : undefined;\n\n    if (samplingRatio && !isNaN(samplingRatio)) {\n      this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n    }\n\n    if (allowSampleDuplicates) {\n      this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n    }\n  }\n\n  /**\n   * Recalculates all columns width (overwrite cache values).\n   */\n  recalculateAllColumnsWidth() {\n    if (this.hot.view.isVisible()) {\n      this.calculateAllColumnsWidth({ from: 0, to: this.hot.countRows() - 1 }, true);\n    }\n  }\n\n  /**\n   * Gets value which tells how many columns should be calculated synchronously (rest of the columns will be calculated\n   * asynchronously). The limit is calculated based on `syncLimit` set to `autoColumnSize` option (see {@link Options#autoColumnSize}).\n   *\n   * @returns {number}\n   */\n  getSyncCalculationLimit() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    /* eslint-disable no-bitwise */\n    let limit = AutoColumnSize.SYNC_CALCULATION_LIMIT;\n    const colsLimit = this.hot.countCols() - 1;\n\n    if (isObject(settings)) {\n      limit = settings.syncLimit;\n\n      if (isPercentValue(limit)) {\n        limit = valueAccordingPercent(colsLimit, limit);\n      } else {\n        // Force to Number\n        limit >>= 0;\n      }\n    }\n\n    return Math.min(limit, colsLimit);\n  }\n\n  /**\n   * Gets the calculated column width.\n   *\n   * @param {number} column Visual column index.\n   * @param {number} [defaultWidth] Default column width. It will be picked up if no calculated width found.\n   * @param {boolean} [keepMinimum=true] If `true` then returned value won't be smaller then 50 (default column width).\n   * @returns {number}\n   */\n  getColumnWidth(column, defaultWidth, keepMinimum = true) {\n    let width = defaultWidth;\n\n    if (width === undefined) {\n      width = this.columnWidthsMap.getValueAtIndex(this.hot.toPhysicalColumn(column));\n\n      if (keepMinimum && typeof width === 'number') {\n        width = Math.max(width, DEFAULT_COLUMN_WIDTH);\n      }\n    }\n\n    return width;\n  }\n\n  /**\n   * Gets the first visible column.\n   *\n   * @returns {number} Returns visual column index, -1 if table is not rendered or if there are no columns to base the the calculations on.\n   */\n  getFirstVisibleColumn() {\n    return this.hot.view.getFirstRenderedVisibleColumn() ?? -1;\n  }\n\n  /**\n   * Gets the last visible column.\n   *\n   * @returns {number} Returns visual column index or -1 if table is not rendered.\n   */\n  getLastVisibleColumn() {\n    return this.hot.view.getLastRenderedVisibleColumn() ?? -1;\n  }\n\n  /**\n   * Collects all columns which titles has been changed in comparison to the previous state.\n   *\n   * @private\n   * @returns {Array} It returns an array of visual column indexes.\n   */\n  findColumnsWhereHeaderWasChanged() {\n    const columnHeaders = this.hot.getColHeader();\n\n    const changedColumns = columnHeaders.reduce((acc, columnTitle, physicalColumn) => {\n      const cachedColumnsLength = this.#cachedColumnHeaders.length;\n\n      if (cachedColumnsLength - 1 < physicalColumn || this.#cachedColumnHeaders[physicalColumn] !== columnTitle) {\n        acc.push(this.hot.toVisualColumn(physicalColumn));\n      }\n      if (cachedColumnsLength - 1 < physicalColumn) {\n        this.#cachedColumnHeaders.push(columnTitle);\n      } else {\n        this.#cachedColumnHeaders[physicalColumn] = columnTitle;\n      }\n\n      return acc;\n    }, []);\n\n    return changedColumns;\n  }\n\n  /**\n   * Clears cache of calculated column widths. If you want to clear only selected columns pass an array with their indexes.\n   * Otherwise whole cache will be cleared.\n   *\n   * @param {number[]} [physicalColumns] List of physical column indexes to clear.\n   */\n  clearCache(physicalColumns) {\n    if (Array.isArray(physicalColumns)) {\n      this.hot.batchExecution(() => {\n        physicalColumns.forEach((physicalIndex) => {\n          this.columnWidthsMap.setValueAtIndex(physicalIndex, null);\n        });\n      }, true);\n\n    } else {\n      this.columnWidthsMap.clear();\n    }\n  }\n\n  /**\n   * Checks if all widths were calculated. If not then return `true` (need recalculate).\n   *\n   * @returns {boolean}\n   */\n  isNeedRecalculate() {\n    return !!this.columnWidthsMap.getValues()\n      .slice(0, this.measuredColumns).filter(item => (item === null)).length;\n  }\n\n  /**\n   * On before view render listener.\n   */\n  #onBeforeRender() {\n    this.calculateVisibleColumnsWidth();\n\n    if (!this.inProgress) {\n      this.#calculateSpecificColumnsWidth(this.#visualColumnsToRefresh);\n      this.#visualColumnsToRefresh = [];\n    }\n  }\n\n  /**\n   * On after load data listener.\n   *\n   * @param {Array} sourceData Source data.\n   * @param {boolean} isFirstLoad `true` if this is the first load.\n   */\n  #onAfterLoadData(sourceData, isFirstLoad) {\n    if (!isFirstLoad) {\n      this.recalculateAllColumnsWidth();\n    }\n  }\n\n  /**\n   * On before change listener.\n   *\n   * @param {Array} changes An array of modified data.\n   */\n  #onBeforeChange(changes) {\n    const changedColumns = changes.reduce((acc, [, columnProperty]) => {\n      const visualColumn = this.hot.propToCol(columnProperty);\n\n      if (Number.isInteger(visualColumn) && acc.indexOf(visualColumn) === -1) {\n        acc.push(visualColumn);\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualColumnsToRefresh.push(...changedColumns);\n  }\n\n  /**\n   * On before column resize listener.\n   *\n   * @param {number} size Calculated new column width.\n   * @param {number} column Visual index of the resized column.\n   * @param {boolean} isDblClick  Flag that determines whether there was a double-click.\n   * @returns {number}\n   */\n  #onBeforeColumnResize(size, column, isDblClick) {\n    let newSize = size;\n\n    if (isDblClick) {\n      this.calculateColumnsWidth(column, undefined, true);\n\n      newSize = this.getColumnWidth(column, undefined, false);\n    }\n\n    return newSize;\n  }\n\n  /**\n   * On after Handsontable init fill plugin with all necessary values.\n   */\n  #onInit() {\n    this.#cachedColumnHeaders = this.hot.getColHeader();\n    this.recalculateAllColumnsWidth();\n  }\n\n  /**\n   * After formulas values updated listener.\n   *\n   * @param {Array} changes An array of modified data.\n   */\n  #onAfterFormulasValuesUpdate(changes) {\n    const changedColumns = changes.reduce((acc, change) => {\n      const physicalColumn = change.address?.col;\n\n      if (Number.isInteger(physicalColumn)) {\n        const visualColumn = this.hot.toVisualColumn(physicalColumn);\n\n        if (acc.indexOf(visualColumn) === -1) {\n          acc.push(visualColumn);\n        }\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualColumnsToRefresh.push(...changedColumns);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.ghostTable.clean();\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  BasePlugin,\n} from './base';\n","import { defineGetter, objectEach } from '../../helpers/object';\nimport { arrayEach } from '../../helpers/array';\nimport { getPluginsNames, hasPlugin } from '../registry';\nimport { hasCellType } from '../../cellTypes/registry';\nimport { hasEditor } from '../../editors/registry';\nimport { hasRenderer } from '../../renderers/registry';\nimport { hasValidator } from '../../validators/registry';\nimport EventManager from '../../eventManager';\n\nconst DEPS_TYPE_CHECKERS = new Map([\n  ['plugin', hasPlugin],\n  ['cell-type', hasCellType],\n  ['editor', hasEditor],\n  ['renderer', hasRenderer],\n  ['validator', hasValidator],\n]);\n\nexport const PLUGIN_KEY = 'base';\nconst missingDepsMsgs = [];\nlet initializedPlugins = null;\n\n/**\n * @util\n * @property {Core} hot Handsontable instance.\n */\nexport class BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  /**\n   * The `SETTING_KEYS` getter defines the keys that, when present in the config object, trigger the plugin update\n   * after the `updateSettings` calls.\n   * - When it returns `true`, the plugin updates after all `updateSettings` calls, regardless of the contents of the\n   * config object.\n   * - When it returns `false`, the plugin never updates on `updateSettings` calls.\n   *\n   * @returns {string[] | boolean}\n   */\n  static get SETTING_KEYS() {\n    return [\n      this.PLUGIN_KEY\n    ];\n  }\n\n  /**\n   * The instance of the {@link EventManager} class.\n   *\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * @type {string}\n   */\n  pluginName = null;\n  /**\n   * @type {Function[]}\n   */\n  pluginsInitializedCallbacks = [];\n  /**\n   * @type {boolean}\n   */\n  isPluginsReady = false;\n  /**\n   * @type {boolean}\n   */\n  enabled = false;\n  /**\n   * @type {boolean}\n   */\n  initialized = false;\n  /**\n   * Collection of the reference to the plugins hooks.\n   */\n  #hooks = {};\n\n  /**\n   * @param {object} hotInstance Handsontable instance.\n   */\n  constructor(hotInstance) {\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    defineGetter(this, 'hot', hotInstance, {\n      writable: false\n    });\n\n    initializedPlugins = null;\n\n    this.hot.addHook('afterPluginsInitialized', () => this.onAfterPluginsInitialized());\n    this.hot.addHook('afterUpdateSettings', newSettings => this.onUpdateSettings(newSettings));\n    this.hot.addHook('beforeInit', () => this.init());\n  }\n\n  init() {\n    this.pluginName = this.hot.getPluginName(this);\n\n    const pluginDeps = this.constructor.PLUGIN_DEPS;\n    const deps = Array.isArray(pluginDeps) ? pluginDeps : [];\n\n    if (deps.length > 0) {\n      const missingDependencies = [];\n\n      deps.forEach((dependency) => {\n        const [type, moduleName] = dependency.split(':');\n\n        if (!DEPS_TYPE_CHECKERS.has(type)) {\n          throw new Error(`Unknown plugin dependency type \"${type}\" was found.`);\n        }\n\n        if (!DEPS_TYPE_CHECKERS.get(type)(moduleName)) {\n          missingDependencies.push(` - ${moduleName} (${type})`);\n        }\n      });\n\n      if (missingDependencies.length > 0) {\n        const errorMsg = [\n          `The ${this.pluginName} plugin requires the following modules:\\n`,\n          `${missingDependencies.join('\\n')}\\n`,\n        ].join('');\n\n        missingDepsMsgs.push(errorMsg);\n      }\n    }\n\n    if (!initializedPlugins) {\n      initializedPlugins = getPluginsNames();\n    }\n\n    // Workaround for the UndoRedo plugin which, currently doesn't follow the plugin architecture.\n    // Without this line the `callOnPluginsReady` callback won't be triggered after all plugin\n    // initialization.\n    if (initializedPlugins.indexOf('UndoRedo') >= 0) {\n      initializedPlugins.splice(initializedPlugins.indexOf('UndoRedo'), 1);\n    }\n\n    if (initializedPlugins.indexOf(this.pluginName) >= 0) {\n      initializedPlugins.splice(initializedPlugins.indexOf(this.pluginName), 1);\n    }\n\n    this.hot.addHookOnce('afterPluginsInitialized', () => {\n      if (this.isEnabled && this.isEnabled()) {\n        this.enablePlugin();\n      }\n    });\n\n    const isAllPluginsAreInitialized = initializedPlugins.length === 0;\n\n    if (isAllPluginsAreInitialized) {\n      if (missingDepsMsgs.length > 0) {\n        const errorMsg = [\n          `${missingDepsMsgs.join('\\n')}\\n`,\n          'You have to import and register them manually.',\n        ].join('');\n\n        throw new Error(errorMsg);\n      }\n\n      this.hot.runHooks('afterPluginsInitialized');\n    }\n\n    this.initialized = true;\n  }\n\n  /**\n   * Enable plugin for this Handsontable instance.\n   */\n  enablePlugin() {\n    this.enabled = true;\n  }\n\n  /**\n   * Disable plugin for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.eventManager?.clear();\n    this.clearHooks();\n    this.enabled = false;\n  }\n\n  /**\n   * Add listener to plugin hooks system.\n   *\n   * @param {string} name The hook name.\n   * @param {Function} callback The listener function to add.\n   * @param {number} [orderIndex] Order index of the callback.\n   *                              If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.\n   *                              If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.\n   *                              If 0 or no order index is provided, the callback will be added between the \"negative\" and \"positive\" indexes.\n   */\n  addHook(name, callback, orderIndex) {\n    this.#hooks[name] = (this.#hooks[name] || []);\n\n    const hooks = this.#hooks[name];\n\n    this.hot.addHook(name, callback, orderIndex);\n    hooks.push(callback);\n    this.#hooks[name] = hooks;\n  }\n\n  /**\n   * Remove all hooks listeners by hook name.\n   *\n   * @param {string} name The hook name.\n   */\n  removeHooks(name) {\n    arrayEach(this.#hooks[name] || [], (callback) => {\n      this.hot.removeHook(name, callback);\n    });\n  }\n\n  /**\n   * Clear all hooks.\n   */\n  clearHooks() {\n    const hooks = this.#hooks;\n\n    objectEach(hooks, (callbacks, name) => this.removeHooks(name));\n    hooks.length = 0;\n  }\n\n  /**\n   * Register function which will be immediately called after all plugins initialized.\n   *\n   * @param {Function} callback The listener function to call.\n   */\n  callOnPluginsReady(callback) {\n    if (this.isPluginsReady) {\n      callback();\n    } else {\n      this.pluginsInitializedCallbacks.push(callback);\n    }\n  }\n\n  /**\n   * Check if any of the keys defined in `SETTING_KEYS` configuration of the plugin is present in the provided\n   * config object, or if the `SETTING_KEYS` configuration states that the plugin is relevant to the config object\n   * regardless of its contents.\n   *\n   * @private\n   * @param {Handsontable.DefaultSettings} settings The config object passed to `updateSettings`.\n   * @returns {boolean}\n   */\n  #isRelevantToSettings(settings) {\n    if (!settings) {\n      return false;\n    }\n\n    const settingKeys = this.constructor.SETTING_KEYS;\n\n    // If SETTING_KEYS is declared as `true` -> update the plugin regardless of the settings declared in\n    // `updateSettings`.\n    // If SETTING_KEYS is declared as `false` -> DON'T update the plugin regardless of the settings declared in\n    // `updateSettings`.\n    if (typeof settingKeys === 'boolean') {\n      return settingKeys;\n    }\n\n    for (let i = 0; i < settingKeys.length; i++) {\n      if (settings[settingKeys[i]] !== undefined) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * On after plugins initialized listener.\n   *\n   * @private\n   */\n  onAfterPluginsInitialized() {\n    arrayEach(this.pluginsInitializedCallbacks, callback => callback());\n    this.pluginsInitializedCallbacks.length = 0;\n    this.isPluginsReady = true;\n  }\n\n  /**\n   * On update settings listener.\n   *\n   * @private\n   * @param {object} newSettings New set of settings passed to the `updateSettings` method.\n   */\n  onUpdateSettings(newSettings) {\n    const relevantToSettings = this.#isRelevantToSettings(newSettings);\n\n    if (this.isEnabled) {\n      if (this.enabled && !this.isEnabled()) {\n        this.disablePlugin();\n      }\n\n      if (!this.enabled && this.isEnabled()) {\n        this.enablePlugin();\n      }\n\n      if (\n        this.enabled &&\n        this.isEnabled() &&\n        relevantToSettings\n      ) {\n        this.updatePlugin(newSettings);\n      }\n    }\n  }\n\n  /**\n   * Updates the plugin to use the latest options you have specified.\n   *\n   * @private\n   */\n  updatePlugin() {\n\n  }\n\n  /**\n   * Destroy plugin.\n   */\n  destroy() {\n    this.eventManager?.destroy();\n    this.clearHooks();\n\n    objectEach(this, (value, property) => {\n      if (property !== 'hot') {\n        this[property] = null;\n      }\n    });\n    delete this.t;\n    delete this.hot;\n  }\n}\n","import { addClass } from './../helpers/dom/element';\nimport { arrayEach } from './../helpers/array';\n\n/**\n * @class GhostTable\n */\nclass GhostTable {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot = null;\n  /**\n   * Container element where every table will be injected.\n   *\n   * @type {HTMLElement|null}\n   */\n  container = null;\n  /**\n   * Flag which determine is table was injected to DOM.\n   *\n   * @type {boolean}\n   */\n  injected = false;\n  /**\n   * Added rows collection.\n   *\n   * @type {Array}\n   */\n  rows = [];\n  /**\n   * Added columns collection.\n   *\n   * @type {Array}\n   */\n  columns = [];\n  /**\n   * Samples prepared for calculations.\n   *\n   * @type {Map}\n   * @default {null}\n   */\n  samples = null;\n  /**\n   * Ghost table settings.\n   *\n   * @type {object}\n   * @default {Object}\n   */\n  settings = {\n    useHeaders: true\n  };\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Add row.\n   *\n   * @param {number} row Visual row index.\n   * @param {Map} samples Samples Map object.\n   */\n  addRow(row, samples) {\n    if (this.columns.length) {\n      throw new Error('Doesn\\'t support multi-dimensional table');\n    }\n    if (!this.rows.length) {\n      this.container = this.createContainer(this.hot.rootElement.className);\n    }\n    const rowObject = { row };\n\n    this.rows.push(rowObject);\n\n    this.samples = samples;\n    this.table = this.createTable(this.hot.table.className);\n    this.table.colGroup.appendChild(this.createColGroupsCol(row));\n    this.table.tr.appendChild(this.createRow(row));\n    this.container.container.appendChild(this.table.fragment);\n\n    rowObject.table = this.table.table;\n  }\n\n  /**\n   * Add a row consisting of the column headers.\n   *\n   * @param {Map} samples A map with sampled table values.\n   */\n  addColumnHeadersRow(samples) {\n    const colHeader = this.hot.getColHeader(0);\n\n    if (colHeader !== null && colHeader !== undefined) {\n      const rowObject = { row: -1 };\n\n      this.rows.push(rowObject);\n\n      this.container = this.createContainer(this.hot.rootElement.className);\n      this.samples = samples;\n      this.table = this.createTable(this.hot.table.className);\n\n      this.table.colGroup.appendChild(this.createColGroupsCol());\n\n      this.appendColumnHeadersRow();\n\n      this.container.container.appendChild(this.table.fragment);\n\n      rowObject.table = this.table.table;\n    }\n  }\n\n  /**\n   * Add column.\n   *\n   * @param {number} column Visual column index.\n   * @param {Map} samples A map with sampled table values.\n   */\n  addColumn(column, samples) {\n    if (this.rows.length) {\n      throw new Error('Doesn\\'t support multi-dimensional table');\n    }\n    if (!this.columns.length) {\n      this.container = this.createContainer(this.hot.rootElement.className);\n    }\n    const columnObject = { col: column };\n\n    this.columns.push(columnObject);\n\n    this.samples = samples;\n    this.table = this.createTable(this.hot.table.className);\n\n    if (this.getSetting('useHeaders') && this.hot.getColHeader(column) !== null) {\n      // Please keep in mind that the renderable column index equal to the visual columns index for the GhostTable.\n      // We render all columns.\n      this.hot.view.appendColHeader(column, this.table.th);\n    }\n    this.table.tBody.appendChild(this.createCol(column));\n    this.container.container.appendChild(this.table.fragment);\n\n    columnObject.table = this.table.table;\n  }\n\n  /**\n   * Get calculated heights.\n   *\n   * @param {Function} callback Callback which will be fired for each calculated row.\n   */\n  getHeights(callback) {\n    if (!this.injected) {\n      this.injectTable();\n    }\n    arrayEach(this.rows, (row) => {\n      // In cases when the cell's content produces the height with a decimal point, the height\n      // needs to be rounded up to make sure that there will be a space for the cell's content.\n      // The `.offsetHeight` always returns the rounded number (floored), so it's not suitable for this case.\n      const { height } = row.table.getBoundingClientRect();\n\n      // -1 <- reduce border-top from table\n      callback(row.row, Math.ceil(height) - 1);\n    });\n  }\n\n  /**\n   * Get calculated widths.\n   *\n   * @param {Function} callback Callback which will be fired for each calculated column.\n   */\n  getWidths(callback) {\n    if (!this.injected) {\n      this.injectTable();\n    }\n    arrayEach(this.columns, (column) => {\n      // In cases when the cell's content produces the width with a decimal point, the width\n      // needs to be rounded up to make sure that there will be a space for the cell's content.\n      // The `.offsetWidth` always returns the rounded number (floored), so it's not suitable for this case.\n      const { width } = column.table.getBoundingClientRect();\n\n      callback(column.col, Math.ceil(width));\n    });\n  }\n\n  /**\n   * Set the Ghost Table settings to the provided object.\n   *\n   * @param {object} settings New Ghost Table Settings.\n   */\n  setSettings(settings) {\n    this.settings = settings;\n  }\n\n  /**\n   * Set a single setting of the Ghost Table.\n   *\n   * @param {string} name Setting name.\n   * @param {*} value Setting value.\n   */\n  setSetting(name, value) {\n    if (!this.settings) {\n      this.settings = {};\n    }\n\n    this.settings[name] = value;\n  }\n\n  /**\n   * Get the Ghost Table settings.\n   *\n   * @returns {object|null}\n   */\n  getSettings() {\n    return this.settings;\n  }\n\n  /**\n   * Get a single Ghost Table setting.\n   *\n   * @param {string} name The setting name to get.\n   * @returns {boolean|null}\n   */\n  getSetting(name) {\n    if (this.settings) {\n      return this.settings[name];\n    }\n\n    return null;\n\n  }\n\n  /**\n   * Create colgroup col elements.\n   *\n   * @param {number} row Visual row index.\n   * @returns {DocumentFragment}\n   */\n  createColGroupsCol(row) {\n    const fragment = this.hot.rootDocument.createDocumentFragment();\n\n    if (this.hot.hasRowHeaders()) {\n      fragment.appendChild(this.createColElement(-1, -1));\n    }\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        fragment.appendChild(this.createColElement(string.col, row));\n      });\n    });\n\n    return fragment;\n  }\n\n  /**\n   * Create table row element.\n   *\n   * @param {number} row Visual row index.\n   * @returns {DocumentFragment} Returns created table row elements.\n   */\n  createRow(row) {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const th = rootDocument.createElement('th');\n\n    if (this.hot.hasRowHeaders()) {\n      this.hot.view.appendRowHeader(row, th);\n\n      fragment.appendChild(th);\n    }\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        const column = string.col;\n        const cellProperties = this.hot.getCellMeta(row, column);\n        const renderer = this.hot.getCellRenderer(cellProperties);\n        const td = rootDocument.createElement('td');\n\n        // Indicate that this element is created and supported by GhostTable. It can be useful to\n        // exclude rendering performance costly logic or exclude logic which doesn't work within a hidden table.\n        td.setAttribute('ghost-table', 1);\n        renderer(this.hot, td, row, column, this.hot.colToProp(column), string.value, cellProperties);\n        fragment.appendChild(td);\n      });\n    });\n\n    return fragment;\n  }\n\n  /**\n   * Creates DOM elements for headers and appends them to the THEAD element of the table.\n   */\n  appendColumnHeadersRow() {\n    const { rootDocument } = this.hot;\n    const domFragment = rootDocument.createDocumentFragment();\n    const columnHeaders = [];\n\n    if (this.hot.hasRowHeaders()) {\n      const th = rootDocument.createElement('th');\n\n      columnHeaders.push([-1, th]);\n      domFragment.appendChild(th);\n    }\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        const column = string.col;\n        const th = rootDocument.createElement('th');\n\n        columnHeaders.push([column, th]);\n        domFragment.appendChild(th);\n      });\n    });\n\n    // Appending DOM elements for headers\n    this.table.tHead.appendChild(domFragment);\n\n    arrayEach(columnHeaders, (columnHeader) => {\n      const [column, th] = columnHeader;\n\n      // Using source method for filling a header with value.\n      this.hot.view.appendColHeader(column, th);\n    });\n  }\n\n  /**\n   * Create table column elements.\n   *\n   * @param {number} column Visual column index.\n   * @returns {DocumentFragment} Returns created column table column elements.\n   */\n  createCol(column) {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n\n    this.samples.forEach((sample) => {\n      arrayEach(sample.strings, (string) => {\n        const row = string.row;\n        const cellProperties = this.hot.getCellMeta(row, column);\n        const renderer = this.hot.getCellRenderer(cellProperties);\n        const td = rootDocument.createElement('td');\n        const tr = rootDocument.createElement('tr');\n\n        // Indicate that this element is created and supported by GhostTable. It can be useful to\n        // exclude rendering performance costly logic or exclude logic which doesn't work within a hidden table.\n        td.setAttribute('ghost-table', 1);\n        renderer(this.hot, td, row, column, this.hot.colToProp(column), string.value, cellProperties);\n        tr.appendChild(td);\n        fragment.appendChild(tr);\n      });\n    });\n\n    return fragment;\n  }\n\n  /**\n   * Remove table from document and reset internal state.\n   */\n  clean() {\n    this.rows.length = 0;\n    this.rows[-1] = undefined;\n    this.columns.length = 0;\n\n    if (this.samples) {\n      this.samples.clear();\n    }\n    this.samples = null;\n    this.removeTable();\n  }\n\n  /**\n   * Inject generated table into document.\n   *\n   * @param {HTMLElement} [parent=null] The element to which the ghost table is injected.\n   */\n  injectTable(parent = null) {\n    if (!this.injected) {\n      (parent || this.hot.rootElement).appendChild(this.container.fragment);\n      this.injected = true;\n    }\n  }\n\n  /**\n   * Remove table from document.\n   */\n  removeTable() {\n    if (this.injected && this.container.container.parentNode) {\n      this.container.container.parentNode.removeChild(this.container.container);\n      this.container = null;\n      this.injected = false;\n    }\n  }\n\n  /**\n   * Create col element.\n   *\n   * @param {number} column Visual column index.\n   * @param {number} row Visual row index.\n   * @returns {HTMLElement}\n   */\n  createColElement(column, row) {\n    const col = this.hot.rootDocument.createElement('col');\n    let colspan = 0;\n\n    if (row >= 0 && column >= 0) {\n      colspan = this.hot.getCellMeta(row, column).colspan;\n    }\n\n    let width = this.hot.getColWidth(column);\n\n    if (colspan > 1) {\n      for (let nextColumn = column + 1; nextColumn < column + colspan; nextColumn++) {\n        width += this.hot.getColWidth(nextColumn);\n      }\n    }\n\n    col.style.width = `${width}px`;\n\n    return col;\n  }\n\n  /**\n   * Create table element.\n   *\n   * @param {string} className The CSS classes to add.\n   * @returns {object}\n   */\n  createTable(className = '') {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const table = rootDocument.createElement('table');\n    const tHead = rootDocument.createElement('thead');\n    const tBody = rootDocument.createElement('tbody');\n    const colGroup = rootDocument.createElement('colgroup');\n    const tr = rootDocument.createElement('tr');\n    const th = rootDocument.createElement('th');\n\n    if (this.isVertical()) {\n      table.appendChild(colGroup);\n    }\n    if (this.isHorizontal()) {\n      tr.appendChild(th);\n      tHead.appendChild(tr);\n      table.style.tableLayout = 'auto';\n      table.style.width = 'auto';\n    }\n    table.appendChild(tHead);\n\n    if (this.isVertical()) {\n      tBody.appendChild(tr);\n    }\n    table.appendChild(tBody);\n    addClass(table, className);\n    fragment.appendChild(table);\n\n    return { fragment, table, tHead, tBody, colGroup, tr, th };\n  }\n\n  /**\n   * Create container for tables.\n   *\n   * @param {string} className The CSS classes to add.\n   * @returns {object}\n   */\n  createContainer(className = '') {\n    const { rootDocument } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const container = rootDocument.createElement('div');\n    const containerClassName = `htGhostTable htAutoSize ${className.trim()}`;\n\n    addClass(container, containerClassName);\n    fragment.appendChild(container);\n\n    return { fragment, container };\n  }\n\n  /**\n   * Checks if table is raised vertically (checking rows).\n   *\n   * @returns {boolean}\n   */\n  isVertical() {\n    return !!(this.rows.length && !this.columns.length);\n  }\n\n  /**\n   * Checks if table is raised horizontally (checking columns).\n   *\n   * @returns {boolean}\n   */\n  isHorizontal() {\n    return !!(this.columns.length && !this.rows.length);\n  }\n}\n\nexport default GhostTable;\n","import { isObject } from './../helpers/object';\nimport { rangeEach } from './../helpers/number';\nimport { stringify } from './../helpers/mixed';\n\n/**\n * @class SamplesGenerator\n */\nclass SamplesGenerator {\n  /**\n   * Number of samples to take of each value length.\n   *\n   * @type {number}\n   */\n  static get SAMPLE_COUNT() {\n    return 3;\n  }\n  /**\n   * Samples prepared for calculations.\n   *\n   * @type {Map}\n   * @default {null}\n   */\n  samples = null;\n  /**\n   * Function which give the data to collect samples.\n   *\n   * @type {Function}\n   */\n  dataFactory = null;\n  /**\n   * Custom number of samples to take of each value length.\n   *\n   * @type {number}\n   * @default {null}\n   */\n  customSampleCount = null;\n  /**\n   * `true` if duplicate samples collection should be allowed, `false` otherwise.\n   *\n   * @type {boolean}\n   * @default {false}\n   */\n  allowDuplicates = false;\n\n  constructor(dataFactory) {\n    this.dataFactory = dataFactory;\n  }\n\n  /**\n   * Get the sample count for this instance.\n   *\n   * @returns {number}\n   */\n  getSampleCount() {\n    if (this.customSampleCount) {\n      return this.customSampleCount;\n    }\n\n    return SamplesGenerator.SAMPLE_COUNT;\n  }\n\n  /**\n   * Set the sample count.\n   *\n   * @param {number} sampleCount Number of samples to be collected.\n   */\n  setSampleCount(sampleCount) {\n    this.customSampleCount = sampleCount;\n  }\n\n  /**\n   * Set if the generator should accept duplicate values.\n   *\n   * @param {boolean} allowDuplicates `true` to allow duplicate values.\n   */\n  setAllowDuplicates(allowDuplicates) {\n    this.allowDuplicates = allowDuplicates;\n  }\n\n  /**\n   * Generate samples for row. You can control which area should be sampled by passing `rowRange` object and `colRange` object.\n   *\n   * @param {object|number} rowRange The rows range to generate the samples.\n   * @param {object} colRange The column range to generate the samples.\n   * @returns {object}\n   */\n  generateRowSamples(rowRange, colRange) {\n    return this.generateSamples('row', colRange, rowRange);\n  }\n\n  /**\n   * Generate samples for column. You can control which area should be sampled by passing `colRange` object and `rowRange` object.\n   *\n   * @param {object} colRange Column index.\n   * @param {object} rowRange Column index.\n   * @returns {object}\n   */\n  generateColumnSamples(colRange, rowRange) {\n    return this.generateSamples('col', rowRange, colRange);\n  }\n\n  /**\n   * Generate collection of samples.\n   *\n   * @param {string} type Type to generate. Can be `col` or `row`.\n   * @param {object} range The range to generate the samples.\n   * @param {object|number} specifierRange The range to generate the samples.\n   * @returns {Map}\n   */\n  generateSamples(type, range, specifierRange) {\n    const samples = new Map();\n    const { from, to } = typeof specifierRange === 'number' ?\n      { from: specifierRange, to: specifierRange } : specifierRange;\n\n    rangeEach(from, to, (index) => {\n      const sample = this.generateSample(type, range, index);\n\n      samples.set(index, sample);\n    });\n\n    return samples;\n  }\n\n  /**\n   * Generate sample for specified type (`row` or `col`).\n   *\n   * @param {string} type Samples type `row` or `col`.\n   * @param {object} range The range to generate the samples.\n   * @param {number} specifierValue The range to generate the samples.\n   * @returns {Map}\n   */\n  generateSample(type, range, specifierValue) {\n    if (type !== 'row' && type !== 'col') {\n      throw new Error('Unsupported sample type');\n    }\n\n    const samples = new Map();\n    const computedKey = type === 'row' ? 'col' : 'row';\n    const sampledValues = [];\n\n    rangeEach(range.from, range.to, (index) => {\n      const data = type === 'row' ?\n        this.dataFactory(specifierValue, index) : this.dataFactory(index, specifierValue);\n\n      if (data === false) {\n        return;\n      }\n\n      const { value, bundleSeed } = data;\n      const hasCustomBundleSeed = typeof bundleSeed === 'string' && bundleSeed.length > 0;\n      let seed;\n\n      if (hasCustomBundleSeed) {\n        seed = bundleSeed;\n\n      } else if (isObject(value)) {\n        seed = `${Object.keys(value).length}`;\n\n      } else if (Array.isArray(value)) {\n        seed = `${value.length}`;\n\n      } else {\n        seed = `${stringify(value).length}`;\n      }\n\n      if (!samples.has(seed)) {\n        samples.set(seed, {\n          needed: this.getSampleCount(),\n          strings: [],\n        });\n      }\n      const sample = samples.get(seed);\n\n      if (sample.needed) {\n        const duplicate = sampledValues.indexOf(value) > -1;\n\n        if (!duplicate || this.allowDuplicates || hasCustomBundleSeed) {\n          sample.strings.push({ value, [computedKey]: index });\n          sampledValues.push(value);\n          sample.needed -= 1;\n        }\n      }\n    });\n\n    return samples;\n  }\n}\n\nexport default SamplesGenerator;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Autofill,\n} from './autofill';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { offset, outerHeight, outerWidth } from '../../helpers/dom/element';\nimport { arrayEach, arrayMap } from '../../helpers/array';\nimport { isEmpty } from '../../helpers/mixed';\nimport { getDragDirectionAndRange, DIRECTIONS, getMappedFillHandleSetting } from './utils';\n\nHooks.getSingleton().register('modifyAutofillRange');\nHooks.getSingleton().register('beforeAutofill');\nHooks.getSingleton().register('afterAutofill');\n\nexport const PLUGIN_KEY = 'autofill';\nexport const PLUGIN_PRIORITY = 20;\nconst SETTING_KEYS = ['fillHandle'];\nconst INSERT_ROW_ALTER_ACTION_NAME = 'insert_row_below';\nconst INTERVAL_FOR_ADDING_ROW = 200;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * This plugin provides \"drag-down\" and \"copy-down\" functionalities, both operated using the small square in the right\n * bottom of the cell selection.\n *\n * \"Drag-down\" expands the value of the selected cells to the neighbouring cells when you drag the small\n * square in the corner.\n *\n * \"Copy-down\" copies the value of the selection to all empty cells below when you double click the small square.\n *\n * @class Autofill\n * @plugin Autofill\n */\n\nexport class Autofill extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  /**\n   * Specifies if adding new row started.\n   *\n   * @private\n   * @type {boolean}\n   */\n  addingStarted = false;\n  /**\n   * Specifies if there was mouse down on the cell corner.\n   *\n   * @private\n   * @type {boolean}\n   */\n  mouseDownOnCellCorner = false;\n  /**\n   * Specifies if mouse was dragged outside Handsontable.\n   *\n   * @private\n   * @type {boolean}\n   */\n  mouseDragOutside = false;\n  /**\n   * Specifies how many cell levels were dragged using the handle.\n   *\n   * @private\n   * @type {boolean}\n   */\n  handleDraggedCells = 0;\n  /**\n   * Specifies allowed directions of drag (`'horizontal'` or '`vertical`').\n   *\n   * @private\n   * @type {string[]}\n   */\n  directions = [];\n  /**\n   * Specifies if can insert new rows if needed.\n   *\n   * @private\n   * @type {boolean}\n   */\n  autoInsertRow = false;\n\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings().fillHandle;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.mapSettings();\n    this.registerEvents();\n\n    this.addHook('afterOnCellCornerMouseDown', event => this.#onAfterCellCornerMouseDown(event));\n    this.addHook('afterOnCellCornerDblClick', event => this.#onCellCornerDblClick(event));\n    this.addHook('beforeOnCellMouseOver', (_, coords) => this.#onBeforeCellMouseOver(coords));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - `autofill`\n   *  - [`fillHandle`](@/api/options.md#fillhandle)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.clearMappedSettings();\n    super.disablePlugin();\n  }\n\n  /**\n   * Gets selection data.\n   *\n   * @private\n   * @returns {object[]} Ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n   */\n  getSelectionData() {\n    const selection = this.hot.getSelectedRangeLast();\n    const { row: startRow, col: startCol } = selection.getTopStartCorner();\n    const { row: endRow, col: endCol } = selection.getBottomEndCorner();\n\n    const copyableRanges = this.hot.runHooks('modifyCopyableRange', [{\n      startRow,\n      startCol,\n      endRow,\n      endCol\n    }]);\n    const copyableRows = [];\n    const copyableColumns = [];\n    const data = [];\n\n    arrayEach(copyableRanges, (range) => {\n      for (let visualRow = range.startRow; visualRow <= range.endRow; visualRow += 1) {\n        if (copyableRows.indexOf(visualRow) === -1) {\n          copyableRows.push(visualRow);\n        }\n      }\n\n      for (let visualColumn = range.startCol; visualColumn <= range.endCol; visualColumn += 1) {\n        if (copyableColumns.indexOf(visualColumn) === -1) {\n          copyableColumns.push(visualColumn);\n        }\n      }\n    });\n\n    arrayEach(copyableRows, (row) => {\n      const rowSet = [];\n\n      arrayEach(copyableColumns, (column) => {\n        rowSet.push(this.hot.getCopyableData(row, column));\n      });\n\n      data.push(rowSet);\n    });\n\n    return data;\n  }\n\n  /**\n   * Try to apply fill values to the area in fill border, omitting the selection border.\n   *\n   * @private\n   * @returns {boolean} Reports if fill was applied.\n   *\n   * @fires Hooks#modifyAutofillRange\n   * @fires Hooks#beforeAutofill\n   * @fires Hooks#afterAutofill\n   */\n  fillIn() {\n    if (this.hot.selection.highlight.getFill().isEmpty()) {\n      return false;\n    }\n\n    // Fill area may starts or ends with invisible cell. There won't be any information about it as highlighted\n    // selection store just renderable indexes (It's part of Walkontable). I extrapolate where the start or/and\n    // the end is.\n    const [fillStartRow, fillStartColumn, fillEndRow, fillEndColumn] =\n      this.hot.selection.highlight.getFill().getVisualCorners();\n    const selectionRangeLast = this.hot.getSelectedRangeLast();\n    const topStartCorner = selectionRangeLast.getTopStartCorner();\n    const bottomEndCorner = selectionRangeLast.getBottomEndCorner();\n\n    this.resetSelectionOfDraggedArea();\n\n    const cornersOfSelectedCells = [\n      topStartCorner.row,\n      topStartCorner.col,\n      bottomEndCorner.row,\n      bottomEndCorner.col,\n    ];\n\n    const cornersOfSelectionAndDragAreas = this.hot\n      .runHooks(\n        'modifyAutofillRange',\n        [\n          Math.min(topStartCorner.row, fillStartRow),\n          Math.min(topStartCorner.col, fillStartColumn),\n          Math.max(bottomEndCorner.row, fillEndRow),\n          Math.max(bottomEndCorner.col, fillEndColumn),\n        ],\n        cornersOfSelectedCells\n      );\n\n    const {\n      directionOfDrag,\n      startOfDragCoords,\n      endOfDragCoords\n    } = getDragDirectionAndRange(\n      cornersOfSelectedCells,\n      cornersOfSelectionAndDragAreas,\n      (row, column) => this.hot._createCellCoords(row, column),\n    );\n\n    if (startOfDragCoords && startOfDragCoords.row > -1 && startOfDragCoords.col > -1) {\n      const selectionData = this.getSelectionData();\n      const sourceRange = selectionRangeLast.clone();\n      const targetRange = this.hot._createCellRange(startOfDragCoords, startOfDragCoords, endOfDragCoords);\n\n      const beforeAutofillHookResult = this.hot.runHooks(\n        'beforeAutofill',\n        selectionData,\n        sourceRange,\n        targetRange,\n        directionOfDrag\n      );\n\n      if (beforeAutofillHookResult === false) {\n        this.hot.selection.highlight.getFill().clear();\n        this.hot.render();\n\n        return false;\n      }\n\n      let fillData = beforeAutofillHookResult;\n      const res = beforeAutofillHookResult;\n\n      if (\n        ['up', 'left'].indexOf(directionOfDrag) > -1 &&\n        !(res.length === 1 && res[0].length === 0)\n      ) {\n        fillData = [];\n\n        if (directionOfDrag === 'up') {\n          const dragLength = endOfDragCoords.row - startOfDragCoords.row + 1;\n          const fillOffset = dragLength % res.length;\n\n          for (let i = 0; i < dragLength; i++) {\n            fillData.push(res[(i + (res.length - fillOffset)) % res.length]);\n          }\n\n        } else {\n          const dragLength = endOfDragCoords.col - startOfDragCoords.col + 1;\n          const fillOffset = dragLength % res[0].length;\n\n          for (let i = 0; i < res.length; i++) {\n            fillData.push([]);\n\n            for (let j = 0; j < dragLength; j++) {\n              fillData[i]\n                .push(res[i][(j + (res[i].length - fillOffset)) % res[i].length]);\n            }\n          }\n        }\n      }\n\n      this.hot.populateFromArray(\n        startOfDragCoords.row,\n        startOfDragCoords.col,\n        fillData,\n        endOfDragCoords.row,\n        endOfDragCoords.col,\n        `${this.pluginName}.fill`,\n        null\n      );\n\n      this.setSelection(cornersOfSelectionAndDragAreas);\n      this.hot.runHooks('afterAutofill', fillData, sourceRange, targetRange, directionOfDrag);\n      this.hot.render();\n\n    } else {\n      // reset to avoid some range bug\n      this.hot.view.render();\n    }\n\n    return true;\n  }\n\n  /**\n   * Reduces the selection area if the handle was dragged outside of the table or on headers.\n   *\n   * @private\n   * @param {CellCoords} coords Indexes of selection corners.\n   * @returns {CellCoords}\n   */\n  reduceSelectionAreaIfNeeded(coords) {\n    if (coords.row < 0) {\n      coords.row = 0;\n    }\n\n    if (coords.col < 0) {\n      coords.col = 0;\n    }\n\n    return coords;\n  }\n\n  /**\n   * Gets the coordinates of the drag & drop borders.\n   *\n   * @private\n   * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n   * @returns {CellCoords}\n   */\n  getCoordsOfDragAndDropBorders(coordsOfSelection) {\n    const currentSelection = this.hot.getSelectedRangeLast();\n    const bottomRightCorner = currentSelection.getBottomEndCorner();\n    let coords = coordsOfSelection;\n\n    if (this.directions.includes(DIRECTIONS.vertical) && this.directions.includes(DIRECTIONS.horizontal)) {\n      const topStartCorner = currentSelection.getTopStartCorner();\n\n      if (bottomRightCorner.col <= coordsOfSelection.col || topStartCorner.col >= coordsOfSelection.col) {\n        coords = this.hot._createCellCoords(bottomRightCorner.row, coordsOfSelection.col);\n      }\n\n      if (bottomRightCorner.row < coordsOfSelection.row || topStartCorner.row > coordsOfSelection.row) {\n        coords = this.hot._createCellCoords(coordsOfSelection.row, bottomRightCorner.col);\n      }\n\n    } else if (this.directions.includes(DIRECTIONS.vertical)) {\n      coords = this.hot._createCellCoords(coordsOfSelection.row, bottomRightCorner.col);\n\n    } else if (this.directions.includes(DIRECTIONS.horizontal)) {\n      coords = this.hot._createCellCoords(bottomRightCorner.row, coordsOfSelection.col);\n\n    } else {\n      // wrong direction\n      return;\n    }\n\n    return this.reduceSelectionAreaIfNeeded(coords);\n  }\n\n  /**\n   * Show the fill border.\n   *\n   * @private\n   * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n   */\n  showBorder(coordsOfSelection) {\n    const coordsOfDragAndDropBorders = this.getCoordsOfDragAndDropBorders(coordsOfSelection);\n\n    if (coordsOfDragAndDropBorders) {\n      this.redrawBorders(coordsOfDragAndDropBorders);\n    }\n  }\n\n  /**\n   * Add new row.\n   *\n   * @private\n   */\n  addRow() {\n    this.hot._registerTimeout(() => {\n      this.hot.alter(INSERT_ROW_ALTER_ACTION_NAME, undefined, 1, `${this.pluginName}.fill`);\n\n      this.addingStarted = false;\n    }, INTERVAL_FOR_ADDING_ROW);\n  }\n\n  /**\n   * Add new rows if they are needed to continue auto-filling values.\n   *\n   * @private\n   */\n  addNewRowIfNeeded() {\n    if (!this.hot.selection.highlight.getFill().isEmpty() && this.addingStarted === false && this.autoInsertRow) {\n      const cornersOfSelectedCells = this.hot.getSelectedLast();\n      const cornersOfSelectedDragArea = this.hot.selection.highlight.getFill().getVisualCorners();\n      const nrOfTableRows = this.hot.countRows();\n\n      if (cornersOfSelectedCells[2] < nrOfTableRows - 1 && cornersOfSelectedDragArea[2] === nrOfTableRows - 1) {\n        this.addingStarted = true;\n\n        this.addRow();\n      }\n    }\n  }\n\n  /**\n   * Get index of last adjacent filled in row.\n   *\n   * @private\n   * @param {Array} cornersOfSelectedCells Indexes of selection corners.\n   * @returns {number} Gives number greater than or equal to zero when selection adjacent can be applied.\n   *                   Or -1 when selection adjacent can't be applied.\n   */\n  getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells) {\n    const data = this.hot.getData();\n    const nrOfTableRows = this.hot.countRows();\n    let lastFilledInRowIndex;\n\n    for (let rowIndex = cornersOfSelectedCells[2] + 1; rowIndex < nrOfTableRows; rowIndex++) {\n      for (let columnIndex = cornersOfSelectedCells[1]; columnIndex <= cornersOfSelectedCells[3]; columnIndex++) {\n        const dataInCell = data[rowIndex][columnIndex];\n\n        if (!isEmpty(dataInCell)) {\n          return -1;\n        }\n      }\n\n      const dataInNextLeftCell = data[rowIndex][cornersOfSelectedCells[1] - 1];\n      const dataInNextRightCell = data[rowIndex][cornersOfSelectedCells[3] + 1];\n\n      if (!isEmpty(dataInNextLeftCell) || !isEmpty(dataInNextRightCell)) {\n        lastFilledInRowIndex = rowIndex;\n      }\n    }\n\n    return lastFilledInRowIndex;\n  }\n\n  /**\n   * Adds a selection from the start area to the specific row index.\n   *\n   * @private\n   * @param {Array} selectStartArea Selection area from which we start to create more comprehensive selection.\n   * @param {number} rowIndex The row index into the selection will be added.\n   */\n  addSelectionFromStartAreaToSpecificRowIndex(selectStartArea, rowIndex) {\n    this.hot.selection.highlight.getFill()\n      .clear()\n      .add(this.hot._createCellCoords(selectStartArea[0], selectStartArea[1]))\n      .add(this.hot._createCellCoords(rowIndex, selectStartArea[3]))\n      .commit();\n  }\n\n  /**\n   * Sets selection based on passed corners.\n   *\n   * @private\n   * @param {Array} cornersOfArea An array witch defines selection.\n   */\n  setSelection(cornersOfArea) {\n    this.hot.selectCell(...arrayMap(cornersOfArea, index => Math.max(index, 0)), false, false);\n  }\n\n  /**\n   * Try to select cells down to the last row in the left column and then returns if selection was applied.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  selectAdjacent() {\n    const cornersOfSelectedCells = this.hot.getSelectedLast();\n    const lastFilledInRowIndex = this.getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells);\n\n    if (lastFilledInRowIndex === -1 || lastFilledInRowIndex === undefined) {\n      return false;\n    }\n\n    this.addSelectionFromStartAreaToSpecificRowIndex(cornersOfSelectedCells, lastFilledInRowIndex);\n\n    return true;\n\n  }\n\n  /**\n   * Resets selection of dragged area.\n   *\n   * @private\n   */\n  resetSelectionOfDraggedArea() {\n    this.handleDraggedCells = 0;\n\n    this.hot.selection.highlight.getFill().clear();\n  }\n\n  /**\n   * Redraws borders.\n   *\n   * @private\n   * @param {CellCoords} coords `CellCoords` coord object.\n   */\n  redrawBorders(coords) {\n    this.hot.selection.highlight.getFill()\n      .clear()\n      .add(this.hot.getSelectedRangeLast().from)\n      .add(this.hot.getSelectedRangeLast().to)\n      .add(coords)\n      .commit();\n\n    this.hot.view.render();\n  }\n\n  /**\n   * Get if mouse was dragged outside.\n   *\n   * @private\n   * @param {MouseEvent} event `mousemove` event properties.\n   * @returns {boolean}\n   */\n  getIfMouseWasDraggedOutside(event) {\n    const { documentElement } = this.hot.rootDocument;\n    const tableBottom = offset(this.hot.table).top - (this.hot.rootWindow.pageYOffset ||\n      documentElement.scrollTop) + outerHeight(this.hot.table);\n    const tableRight = offset(this.hot.table).left - (this.hot.rootWindow.pageXOffset ||\n      documentElement.scrollLeft) + outerWidth(this.hot.table);\n\n    return event.clientY > tableBottom && event.clientX <= tableRight;\n  }\n\n  /**\n   * Bind the events used by the plugin.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { documentElement } = this.hot.rootDocument;\n\n    this.eventManager.addEventListener(documentElement, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(documentElement, 'mousemove', event => this.#onMouseMove(event));\n  }\n\n  /**\n   * On cell corner double click callback.\n   *\n   * @private\n   */\n  #onCellCornerDblClick() {\n    const selectionApplied = this.selectAdjacent();\n\n    if (selectionApplied) {\n      this.fillIn();\n    }\n  }\n\n  /**\n   * On after cell corner mouse down listener.\n   */\n  #onAfterCellCornerMouseDown() {\n    this.handleDraggedCells = 1;\n    this.mouseDownOnCellCorner = true;\n  }\n\n  /**\n   * On before cell mouse over listener.\n   *\n   * @param {CellCoords} coords `CellCoords` coord object.\n   */\n  #onBeforeCellMouseOver(coords) {\n    if (this.mouseDownOnCellCorner && !this.hot.view.isMouseDown() && this.handleDraggedCells) {\n      this.handleDraggedCells += 1;\n\n      this.showBorder(coords);\n      this.addNewRowIfNeeded();\n    }\n  }\n\n  /**\n   * On mouse up listener.\n   */\n  #onMouseUp() {\n    if (this.handleDraggedCells) {\n      if (this.handleDraggedCells > 1) {\n        this.fillIn();\n      }\n\n      this.handleDraggedCells = 0;\n      this.mouseDownOnCellCorner = false;\n    }\n  }\n\n  /**\n   * On mouse move listener.\n   *\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  #onMouseMove(event) {\n    const mouseWasDraggedOutside = this.getIfMouseWasDraggedOutside(event);\n\n    if (this.addingStarted === false && this.handleDraggedCells > 0 && mouseWasDraggedOutside) {\n      this.mouseDragOutside = true;\n      this.addingStarted = true;\n\n    } else {\n      this.mouseDragOutside = false;\n    }\n\n    if (this.mouseDragOutside && this.autoInsertRow) {\n      this.addRow();\n    }\n  }\n\n  /**\n   * Clears mapped settings.\n   *\n   * @private\n   */\n  clearMappedSettings() {\n    this.directions.length = 0;\n    this.autoInsertRow = false;\n  }\n\n  /**\n   * Map settings.\n   *\n   * @private\n   */\n  mapSettings() {\n    const mappedSettings = getMappedFillHandleSetting(this.hot.getSettings().fillHandle);\n\n    this.directions = mappedSettings.directions;\n    this.autoInsertRow = mappedSettings.autoInsertRow;\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { isObject } from '../../helpers/object';\nimport { isDefined } from '../../helpers/mixed';\n\nexport const DIRECTIONS = {\n  horizontal: 'horizontal',\n  vertical: 'vertical'\n};\n\n/**\n * Get direction between positions and cords of selections difference (drag area).\n *\n * @param {Array} startSelection The coordinates where the selection starts.\n * @param {Array} endSelection The coordinates where the selection ends.\n * @param {Function} cellCoordsFactory The function factory for CellCoords objects.\n * @returns {{direction: string, start: CellCoords, end: CellCoords}}\n */\nexport function getDragDirectionAndRange(startSelection, endSelection, cellCoordsFactory) {\n  let startOfDragCoords;\n  let endOfDragCoords;\n  let directionOfDrag;\n\n  if (endSelection[0] === startSelection[0] && endSelection[1] < startSelection[1]) {\n    directionOfDrag = 'left';\n\n    startOfDragCoords = cellCoordsFactory(endSelection[0], endSelection[1]);\n    endOfDragCoords = cellCoordsFactory(endSelection[2], startSelection[1] - 1);\n\n  } else if (endSelection[2] === startSelection[2] && endSelection[0] === startSelection[0] &&\n      endSelection[3] > startSelection[3]) {\n    directionOfDrag = 'right';\n\n    startOfDragCoords = cellCoordsFactory(endSelection[0], startSelection[3] + 1);\n    endOfDragCoords = cellCoordsFactory(endSelection[2], endSelection[3]);\n\n  } else if (endSelection[0] < startSelection[0] && endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'up';\n\n    startOfDragCoords = cellCoordsFactory(endSelection[0], endSelection[1]);\n    endOfDragCoords = cellCoordsFactory(startSelection[0] - 1, endSelection[3]);\n\n  } else if (endSelection[2] > startSelection[2] &&\n    endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'down';\n\n    startOfDragCoords = cellCoordsFactory(startSelection[2] + 1, endSelection[1]);\n    endOfDragCoords = cellCoordsFactory(endSelection[2], endSelection[3]);\n  }\n\n  if (startOfDragCoords) {\n    startOfDragCoords.normalize();\n  }\n\n  if (endOfDragCoords) {\n    endOfDragCoords.normalize();\n  }\n\n  return {\n    directionOfDrag,\n    startOfDragCoords,\n    endOfDragCoords,\n  };\n}\n\n/**\n * Get mapped FillHandle setting containing information about\n * allowed FillHandle directions and if allowed is automatic insertion of rows on drag.\n *\n * @param {boolean|object} fillHandle Property of Handsontable settings.\n * @returns {{directions: Array, autoInsertRow: boolean}} Object allowing access to information\n * about FillHandle in more useful way.\n */\nexport function getMappedFillHandleSetting(fillHandle) {\n  const mappedSettings = {};\n\n  if (fillHandle === true) {\n    mappedSettings.directions = Object.keys(DIRECTIONS);\n    mappedSettings.autoInsertRow = true;\n\n  } else if (isObject(fillHandle)) {\n    if (isDefined(fillHandle.autoInsertRow)) {\n\n      // autoInsertRow for horizontal direction will be always false\n\n      if (fillHandle.direction === DIRECTIONS.horizontal) {\n        mappedSettings.autoInsertRow = false;\n\n      } else {\n        mappedSettings.autoInsertRow = fillHandle.autoInsertRow;\n      }\n\n    } else {\n      mappedSettings.autoInsertRow = false;\n    }\n\n    if (isDefined(fillHandle.direction)) {\n      mappedSettings.directions = [fillHandle.direction];\n\n    } else {\n      mappedSettings.directions = Object.keys(DIRECTIONS);\n    }\n\n  } else if (typeof fillHandle === 'string') {\n    mappedSettings.directions = [fillHandle];\n    mappedSettings.autoInsertRow = true;\n\n  } else {\n    mappedSettings.directions = [];\n    mappedSettings.autoInsertRow = false;\n  }\n\n  return mappedSettings;\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  AutoRowSize,\n} from './autoRowSize';\n","import { BasePlugin } from '../base';\nimport { cancelAnimationFrame, requestAnimationFrame } from '../../helpers/feature';\nimport GhostTable from '../../utils/ghostTable';\nimport { isObject, hasOwnProperty } from '../../helpers/object';\nimport { valueAccordingPercent, rangeEach } from '../../helpers/number';\nimport SamplesGenerator from '../../utils/samplesGenerator';\nimport { isPercentValue } from '../../helpers/string';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\nexport const PLUGIN_KEY = 'autoRowSize';\nexport const PLUGIN_PRIORITY = 40;\nconst ROW_WIDTHS_MAP_NAME = 'autoRowSize';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin AutoRowSize\n * @class AutoRowSize\n * @description\n * The `AutoRowSize` plugin allows you to set row heights based on their highest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it disabled (same as if it was declared as `false`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the heights of all cells to\n * resize the rows accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the row heights manually.\n *\n * But, to display Handsontable's scrollbar in a proper size, you need to enable the `AutoRowSize` plugin,\n * by setting the [`autoRowSize`](@/api/options.md#autoRowSize) option to `true`.\n *\n * Row height calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of rows) or a percentage value to a config object:\n * ```js\n * // as a number (300 rows in sync, rest async)\n * autoRowSize: {syncLimit: 300},\n *\n * // as a string (percent)\n * autoRowSize: {syncLimit: '40%'},\n *\n * // allow sample duplication\n * autoRowSize: {syncLimit: '40%', allowSampleDuplicates: true},\n * ```\n *\n * You can also use the `allowSampleDuplicates` option to allow sampling duplicate values when calculating the row\n * height. __Note__, that this might have a negative impact on performance.\n *\n * To configure this plugin see {@link Options#autoRowSize}.\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   autoRowSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoRowSize');\n *\n * plugin.getRowHeight(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * // First, let's contruct Handsontable\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   autoRowSize={true}\n * />\n *\n * ...\n *\n * // Access to plugin instance:\n * const hot = hotRef.current.hotInstance;\n * const plugin = hot.getPlugin('autoRowSize');\n *\n * plugin.getRowHeight(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n * :::\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport class AutoRowSize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return true;\n  }\n\n  static get CALCULATION_STEP() {\n    return 50;\n  }\n\n  static get SYNC_CALCULATION_LIMIT() {\n    return 500;\n  }\n\n  /**\n   * Columns header's height cache.\n   *\n   * @private\n   * @type {number}\n   */\n  headerHeight = null;\n  /**\n   * Instance of {@link GhostTable} for rows and columns size calculations.\n   *\n   * @private\n   * @type {GhostTable}\n   */\n  ghostTable = new GhostTable(this.hot);\n  /**\n   * Instance of {@link SamplesGenerator} for generating samples necessary for rows height calculations.\n   *\n   * @private\n   * @type {SamplesGenerator}\n   */\n  samplesGenerator = new SamplesGenerator((row, column) => {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    if (this.hot.rowIndexMapper.isHidden(physicalRow) || this.hot.columnIndexMapper.isHidden(physicalColumn)) {\n      return false;\n    }\n\n    if (row >= 0 && column >= 0) {\n      const cellMeta = this.hot.getCellMeta(row, column);\n\n      if (cellMeta.hidden) {\n        // do not generate samples for cells that are covered by merged cell (null values)\n        return false;\n      }\n    }\n\n    let cellValue;\n\n    if (row >= 0) {\n      cellValue = this.hot.getDataAtCell(row, column);\n\n    } else if (row === -1) {\n      cellValue = this.hot.getColHeader(column);\n    }\n\n    return { value: cellValue };\n  });\n  /**\n   * `true` if the size calculation is in progress.\n   *\n   * @type {boolean}\n   */\n  inProgress = false;\n  /**\n   * Number of already measured rows (we already know their sizes).\n   *\n   * @type {number}\n   */\n  measuredRows = 0;\n  /**\n   * PhysicalIndexToValueMap to keep and track heights for physical row indexes.\n   *\n   * @private\n   * @type {PhysicalIndexToValueMap}\n   */\n  rowHeightsMap = new IndexToValueMap();\n  /**\n   * An array of row indexes whose height will be recalculated.\n   *\n   * @type {number[]}\n   */\n  #visualRowsToRefresh = [];\n\n  constructor(hotInstance) {\n    super(hotInstance);\n    this.hot.rowIndexMapper.registerMap(ROW_WIDTHS_MAP_NAME, this.rowHeightsMap);\n\n    // Leave the listener active to allow auto-sizing the rows when the plugin is disabled.\n    // This is necessary for height recalculation for resize handler doubleclick (ManualRowResize).\n    this.addHook('beforeRowResize', (size, row, isDblClick) => this.#onBeforeRowResize(size, row, isDblClick));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n\n    return settings === true || isObject(settings);\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.setSamplingOptions();\n\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('beforeChangeRender', (...args) => this.#onBeforeChange(...args));\n    this.addHook('beforeColumnResize', () => this.recalculateAllRowsHeight());\n    this.addHook('afterFormulasValuesUpdate', (...args) => this.#onAfterFormulasValuesUpdate(...args));\n    this.addHook('beforeRender', () => this.#onBeforeRender());\n    this.addHook('modifyRowHeight', (height, row) => this.getRowHeight(row, height));\n    this.addHook('init', () => this.#onInit());\n    this.addHook('modifyColumnHeaderHeight', () => this.getColumnHeaderHeight());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.headerHeight = null;\n\n    super.disablePlugin();\n\n    // Leave the listener active to allow auto-sizing the rows when the plugin is disabled.\n    // This is necessary for height recalculation for resize handler doubleclick (ManualRowResize).\n    this.addHook('beforeRowResize', (size, row, isDblClick) => this.#onBeforeRowResize(size, row, isDblClick));\n  }\n\n  /**\n   * Calculates heights for visible rows in the viewport only.\n   */\n  calculateVisibleRowsHeight() {\n    // Keep last row heights unchanged for situation when all columns was deleted or trimmed\n    if (!this.hot.countCols()) {\n      return;\n    }\n\n    const firstVisibleRow = this.getFirstVisibleRow();\n    const lastVisibleRow = this.getLastVisibleRow();\n\n    if (firstVisibleRow === -1 || lastVisibleRow === -1) {\n      return;\n    }\n\n    const overwriteCache = this.hot.renderCall;\n\n    this.calculateRowsHeight({ from: firstVisibleRow, to: lastVisibleRow }, undefined, overwriteCache);\n  }\n\n  /**\n   * Calculate a given rows height.\n   *\n   * @param {number|object} rowRange Row index or an object with `from` and `to` indexes as a range.\n   * @param {number|object} colRange Column index or an object with `from` and `to` indexes as a range.\n   * @param {boolean} [overwriteCache=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateRowsHeight(\n    rowRange = { from: 0, to: this.hot.countRows() - 1 },\n    colRange = { from: 0, to: this.hot.countCols() - 1 },\n    overwriteCache = false\n  ) {\n    const rowsRange = typeof rowRange === 'number' ? { from: rowRange, to: rowRange } : rowRange;\n    const columnsRange = typeof colRange === 'number' ? { from: colRange, to: colRange } : colRange;\n\n    if (this.hot.getColHeader(0) !== null) {\n      const samples = this.samplesGenerator.generateRowSamples(-1, columnsRange);\n\n      this.ghostTable.addColumnHeadersRow(samples.get(-1));\n    }\n\n    rangeEach(rowsRange.from, rowsRange.to, (visualRow) => {\n      let physicalRow = this.hot.toPhysicalRow(visualRow);\n\n      if (physicalRow === null) {\n        physicalRow = visualRow;\n      }\n\n      // For rows we must calculate row height even when user had set height value manually.\n      // We can shrink column but cannot shrink rows!\n      if (overwriteCache || this.rowHeightsMap.getValueAtIndex(physicalRow) === null) {\n        const samples = this.samplesGenerator.generateRowSamples(visualRow, columnsRange);\n\n        samples.forEach((sample, row) => this.ghostTable.addRow(row, sample));\n      }\n    });\n\n    if (this.ghostTable.rows.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getHeights((row, height) => {\n          if (row < 0) {\n            this.headerHeight = height;\n          } else {\n            this.rowHeightsMap.setValueAtIndex(this.hot.toPhysicalRow(row), height);\n          }\n        });\n      }, true);\n\n      this.measuredRows = rowsRange.to + 1;\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Calculate all rows heights. The calculated row will be cached in the {@link AutoRowSize#heights} property.\n   * To retrieve height for specified row use {@link AutoRowSize#getRowHeight} method.\n   *\n   * @param {object|number} colRange Row index or an object with `from` and `to` properties which define row range.\n   * @param {boolean} [overwriteCache] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n   */\n  calculateAllRowsHeight(colRange = { from: 0, to: this.hot.countCols() - 1 }, overwriteCache = false) {\n    let current = 0;\n    const length = this.hot.countRows() - 1;\n    let timer = null;\n\n    this.inProgress = true;\n\n    const loop = () => {\n      // When hot was destroyed after calculating finished cancel frame\n      if (!this.hot) {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        return;\n      }\n\n      this.calculateRowsHeight({\n        from: current,\n        to: Math.min(current + AutoRowSize.CALCULATION_STEP, length)\n      }, colRange, overwriteCache);\n\n      current = current + AutoRowSize.CALCULATION_STEP + 1;\n\n      if (current < length) {\n        timer = requestAnimationFrame(loop);\n      } else {\n        cancelAnimationFrame(timer);\n        this.inProgress = false;\n\n        // @TODO Should call once per render cycle, currently fired separately in different plugins\n        this.hot.view.adjustElementsSize();\n\n        // tmp\n        if (this.hot.view._wt.wtOverlays.inlineStartOverlay.needFullRender) {\n          this.hot.view._wt.wtOverlays.inlineStartOverlay.clone.draw();\n        }\n      }\n    };\n\n    const syncLimit = this.getSyncCalculationLimit();\n\n    // sync\n    if (syncLimit >= 0) {\n      this.calculateRowsHeight({ from: 0, to: syncLimit }, colRange, overwriteCache);\n      current = syncLimit + 1;\n    }\n    // async\n    if (current < length) {\n      loop();\n    } else {\n      this.inProgress = false;\n      this.hot.view.adjustElementsSize();\n    }\n  }\n\n  /**\n   * Calculates specific rows height (overwrite cache values).\n   *\n   * @param {number[]} visualRows List of visual rows to calculate.\n   */\n  #calculateSpecificRowsHeight(visualRows) {\n    const columnsRange = {\n      from: 0,\n      to: this.hot.countCols() - 1,\n    };\n\n    visualRows.forEach((visualRow) => {\n      // For rows we must calculate row height even when user had set height value manually.\n      // We can shrink column but cannot shrink rows!\n      const samples = this.samplesGenerator.generateRowSamples(visualRow, columnsRange);\n\n      samples.forEach((sample, row) => this.ghostTable.addRow(row, sample));\n    });\n\n    if (this.ghostTable.rows.length) {\n      this.hot.batchExecution(() => {\n        this.ghostTable.getHeights((visualRow, height) => {\n          const physicalRow = this.hot.toPhysicalRow(visualRow);\n\n          this.rowHeightsMap.setValueAtIndex(physicalRow, height);\n        });\n      }, true);\n\n      this.ghostTable.clean();\n    }\n  }\n\n  /**\n   * Sets the sampling options.\n   *\n   * @private\n   */\n  setSamplingOptions() {\n    const setting = this.hot.getSettings()[PLUGIN_KEY];\n    const samplingRatio = setting && hasOwnProperty(setting, 'samplingRatio') ?\n      setting.samplingRatio : undefined;\n    const allowSampleDuplicates = setting && hasOwnProperty(setting, 'allowSampleDuplicates') ?\n      setting.allowSampleDuplicates : undefined;\n\n    if (samplingRatio && !isNaN(samplingRatio)) {\n      this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n    }\n\n    if (allowSampleDuplicates) {\n      this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n    }\n  }\n\n  /**\n   * Recalculates all rows height (overwrite cache values).\n   */\n  recalculateAllRowsHeight() {\n    if (this.hot.view.isVisible()) {\n      this.calculateAllRowsHeight({ from: 0, to: this.hot.countCols() - 1 }, true);\n    }\n  }\n\n  /**\n   * Gets value which tells how many rows should be calculated synchronously (rest of the rows will be calculated\n   * asynchronously). The limit is calculated based on `syncLimit` set to autoRowSize option (see {@link Options#autoRowSize}).\n   *\n   * @returns {number}\n   */\n  getSyncCalculationLimit() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    /* eslint-disable no-bitwise */\n    let limit = AutoRowSize.SYNC_CALCULATION_LIMIT;\n    const rowsLimit = this.hot.countRows() - 1;\n\n    if (isObject(settings)) {\n      limit = settings.syncLimit;\n\n      if (isPercentValue(limit)) {\n        limit = valueAccordingPercent(rowsLimit, limit);\n      } else {\n        // Force to Number\n        limit >>= 0;\n      }\n    }\n\n    return Math.min(limit, rowsLimit);\n  }\n\n  /**\n   * Get a row's height, as measured in the DOM.\n   *\n   * The height returned includes 1 px of the row's bottom border.\n   *\n   * Mind that this method is different from the\n   * [`getRowHeight()`](@/api/core.md#getrowheight) method\n   * of Handsontable's [Core](@/api/core.md).\n   *\n   * @param {number} row A visual row index.\n   * @param {number} [defaultHeight] If no height is found, `defaultHeight` is returned instead.\n   * @returns {number} The height of the specified row, in pixels.\n   */\n  getRowHeight(row, defaultHeight) {\n    const cachedHeight = row < 0 ? this.headerHeight : this.rowHeightsMap.getValueAtIndex(this.hot.toPhysicalRow(row));\n    let height = defaultHeight;\n\n    if (cachedHeight !== null && cachedHeight > (defaultHeight || 0)) {\n      height = cachedHeight;\n    }\n\n    return height;\n  }\n\n  /**\n   * Get the calculated column header height.\n   *\n   * @returns {number|undefined}\n   */\n  getColumnHeaderHeight() {\n    return this.headerHeight;\n  }\n\n  /**\n   * Get the first visible row.\n   *\n   * @returns {number} Returns row index, -1 if table is not rendered or if there are no rows to base the the calculations on.\n   */\n  getFirstVisibleRow() {\n    return this.hot.view.getFirstRenderedVisibleRow() ?? -1;\n  }\n\n  /**\n   * Gets the last visible row.\n   *\n   * @returns {number} Returns row index or -1 if table is not rendered.\n   */\n  getLastVisibleRow() {\n    return this.hot.view.getLastRenderedVisibleRow() ?? -1;\n  }\n\n  /**\n   * Clears cache of calculated row heights. If you want to clear only selected rows pass an array with their indexes.\n   * Otherwise whole cache will be cleared.\n   *\n   * @param {number[]} [physicalRows] List of physical row indexes to clear.\n   */\n  clearCache(physicalRows) {\n    this.headerHeight = null;\n\n    if (Array.isArray(physicalRows)) {\n      this.hot.batchExecution(() => {\n        physicalRows.forEach((physicalIndex) => {\n          this.rowHeightsMap.setValueAtIndex(physicalIndex, null);\n        });\n      }, true);\n\n    } else {\n      this.rowHeightsMap.clear();\n    }\n  }\n\n  /**\n   * Clears cache by range.\n   *\n   * @param {object|number} range Row index or an object with `from` and `to` properties which define row range.\n   */\n  clearCacheByRange(range) {\n    const { from, to } = typeof range === 'number' ? { from: range, to: range } : range;\n\n    this.hot.batchExecution(() => {\n      rangeEach(Math.min(from, to), Math.max(from, to), (row) => {\n        this.rowHeightsMap.setValueAtIndex(row, null);\n      });\n    }, true);\n  }\n\n  /**\n   * Checks if all heights were calculated. If not then return `true` (need recalculate).\n   *\n   * @returns {boolean}\n   */\n  isNeedRecalculate() {\n    return !!this.rowHeightsMap.getValues()\n      .slice(0, this.measuredRows).filter(item => (item === null)).length;\n  }\n\n  /**\n   * On before view render listener.\n   */\n  #onBeforeRender() {\n    this.calculateVisibleRowsHeight();\n\n    if (!this.inProgress) {\n      this.#calculateSpecificRowsHeight(this.#visualRowsToRefresh);\n      this.#visualRowsToRefresh = [];\n    }\n  }\n\n  /**\n   * On before row resize listener.\n   *\n   * @param {number} size The size of the current row index.\n   * @param {number} row Current row index.\n   * @param {boolean} isDblClick Indicates if the resize was triggered by doubleclick.\n   * @returns {number}\n   */\n  #onBeforeRowResize(size, row, isDblClick) {\n    let newSize = size;\n\n    if (isDblClick) {\n      this.calculateRowsHeight(row, undefined, true);\n\n      newSize = this.getRowHeight(row);\n    }\n\n    return newSize;\n  }\n\n  /**\n   * On after load data listener.\n   *\n   * @param {Array} sourceData Source data.\n   * @param {boolean} isFirstLoad `true` if this is the first load.\n   */\n  #onAfterLoadData(sourceData, isFirstLoad) {\n    if (!isFirstLoad) {\n      this.recalculateAllRowsHeight();\n    }\n  }\n\n  /**\n   * On before change listener.\n   *\n   * @param {Array} changes 2D array containing information about each of the edited cells.\n   */\n  #onBeforeChange(changes) {\n    const changedRows = changes.reduce((acc, [row]) => {\n      if (acc.indexOf(row) === -1) {\n        acc.push(row);\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualRowsToRefresh.push(...changedRows);\n  }\n\n  /**\n   * On after Handsontable init plugin with all necessary values.\n   */\n  #onInit() {\n    this.recalculateAllRowsHeight();\n  }\n\n  /**\n   * After formulas values updated listener.\n   *\n   * @param {Array} changes An array of modified data.\n   */\n  #onAfterFormulasValuesUpdate(changes) {\n    const changedRows = changes.reduce((acc, change) => {\n      const physicalRow = change.address?.row;\n\n      if (Number.isInteger(physicalRow)) {\n        const visualRow = this.hot.toVisualRow(physicalRow);\n\n        if (acc.indexOf(visualRow) === -1) {\n          acc.push(visualRow);\n        }\n      }\n\n      return acc;\n    }, []);\n\n    this.#visualRowsToRefresh.push(...changedRows);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.ghostTable.clean();\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  BindRowsWithHeaders,\n} from './bindRowsWithHeaders';\n","import { BasePlugin } from '../base';\nimport LooseBindsMap from './maps/looseBindsMap';\nimport StrictBindsMap from './maps/strictBindsMap';\n\nexport const PLUGIN_KEY = 'bindRowsWithHeaders';\nexport const PLUGIN_PRIORITY = 210;\n\nconst DEFAULT_BIND = 'loose';\n\nconst bindTypeToMapStrategy = new Map([\n  ['loose', LooseBindsMap],\n  ['strict', StrictBindsMap]\n]);\n\n/**\n * @plugin BindRowsWithHeaders\n * @class BindRowsWithHeaders\n *\n * @description\n * Plugin allows binding the table rows with their headers.\n *\n * If the plugin is enabled, the table row headers will \"stick\" to the rows, when they are hidden/moved. Basically, if\n * at the initialization row 0 has a header titled \"A\", it will have it no matter what you do with the table.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   // enable plugin\n *   bindRowsWithHeaders: true\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   // enable plugin\n *   bindRowsWithHeaders={true}\n * />\n * ```\n * :::\n */\nexport class BindRowsWithHeaders extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Plugin indexes cache.\n   *\n   * @private\n   * @type {null|IndexMap}\n   */\n  headerIndexes = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link BindRowsWithHeaders#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    let bindType = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (typeof bindType !== 'string') {\n      bindType = DEFAULT_BIND;\n    }\n\n    const MapStrategy = bindTypeToMapStrategy.get(bindType);\n\n    this.headerIndexes = this.hot.rowIndexMapper.registerMap('bindRowsWithHeaders', new MapStrategy());\n\n    this.addHook('modifyRowHeader', row => this.#onModifyRowHeader(row));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap('bindRowsWithHeaders');\n\n    super.disablePlugin();\n  }\n\n  /**\n   * On modify row header listener.\n   *\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  #onModifyRowHeader(row) {\n    return this.headerIndexes.getValueAtIndex(this.hot.toPhysicalRow(row));\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { IndexMap, alterUtilsFactory, getDecreasedIndexes, getIncreasedIndexes } from '../../../translations';\n\nconst { getListWithInsertedItems, getListWithRemovedItems } = alterUtilsFactory('physicallyIndexed');\n\n/**\n * Map from physical index to another index.\n */\nclass LooseBindsMap extends IndexMap {\n  constructor() {\n    super(index => index);\n  }\n\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    const listAfterUpdate = getIncreasedIndexes(this.indexedValues, insertedIndexes);\n\n    this.indexedValues = getListWithInsertedItems(listAfterUpdate, insertionIndex, insertedIndexes, this.initValueOrFn);\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    const listAfterUpdate = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    this.indexedValues = getDecreasedIndexes(listAfterUpdate, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n}\n\nexport default LooseBindsMap;\n","import { IndexMap, alterUtilsFactory } from '../../../translations';\n\nconst { getListWithInsertedItems, getListWithRemovedItems } = alterUtilsFactory('physicallyIndexed');\n\n/**\n * Map from physical index to another index.\n */\nclass StrictBindsMap extends IndexMap {\n  constructor() {\n    super(index => index);\n  }\n\n  /**\n   * Add values to list and reorganize.\n   *\n   * @private\n   * @param {number} insertionIndex Position inside the list.\n   * @param {Array} insertedIndexes List of inserted indexes.\n   */\n  insert(insertionIndex, insertedIndexes) {\n    this.indexedValues = getListWithInsertedItems(this.indexedValues, insertionIndex, insertedIndexes,\n      (_, ordinalNumber) => this.getNextValue(ordinalNumber));\n\n    super.insert(insertionIndex, insertedIndexes);\n  }\n\n  /**\n   * Remove values from the list and reorganize.\n   *\n   * @private\n   * @param {Array} removedIndexes List of removed indexes.\n   */\n  remove(removedIndexes) {\n    this.indexedValues = getListWithRemovedItems(this.indexedValues, removedIndexes);\n\n    super.remove(removedIndexes);\n  }\n\n  /**\n   * Get next values, which should be greater than actual maximum value in the list.\n   *\n   * @param {number} ordinalNumber Position in the list.\n   * @returns {number}\n   */\n  getNextValue(ordinalNumber) {\n    return Math.max(...this.getValues()) + 1 + ordinalNumber;\n  }\n}\n\nexport default StrictBindsMap;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  CollapsibleColumns,\n} from './collapsibleColumns';\n","import { BasePlugin } from '../base';\nimport { arrayEach, arrayFilter, arrayUnique } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { warn } from '../../helpers/console';\nimport {\n  addClass,\n  hasClass,\n  removeClass,\n  fastInnerText,\n  removeAttribute,\n  setAttribute\n} from '../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../helpers/dom/event';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport {\n  A11Y_EXPANDED,\n  A11Y_HIDDEN\n} from '../../helpers/a11y';\n\nimport './collapsibleColumns.scss';\n\nexport const PLUGIN_KEY = 'collapsibleColumns';\nexport const PLUGIN_PRIORITY = 290;\nconst SETTING_KEYS = ['nestedHeaders'];\nconst COLLAPSIBLE_ELEMENT_CLASS = 'collapsibleIndicator';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nconst actionDictionary = new Map([\n  ['collapse', {\n    hideColumn: true,\n    beforeHook: 'beforeColumnCollapse',\n    afterHook: 'afterColumnCollapse',\n  }],\n  ['expand', {\n    hideColumn: false,\n    beforeHook: 'beforeColumnExpand',\n    afterHook: 'afterColumnExpand',\n  }],\n]);\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin CollapsibleColumns\n * @class CollapsibleColumns\n *\n * @description\n * The _CollapsibleColumns_ plugin allows collapsing of columns, covered by a header with the `colspan` property defined.\n *\n * Clicking the \"collapse/expand\" button collapses (or expands) all \"child\" headers except the first one.\n *\n * Setting the {@link Options#collapsiblecolumns} property to `true` will display a \"collapse/expand\" button in every header\n * with a defined `colspan` property.\n *\n * To limit this functionality to a smaller group of headers, define the `collapsibleColumns` property as an array\n * of objects, as in the example below.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: generateDataObj(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   nestedHeaders: true,\n *   // enable plugin\n *   collapsibleColumns: true,\n * });\n *\n * // or\n * const hot = new Handsontable(container, {\n *   data: generateDataObj(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   nestedHeaders: true,\n *   // enable and configure which columns can be collapsed\n *   collapsibleColumns: [\n *     {row: -4, col: 1, collapsible: true},\n *     {row: -3, col: 5, collapsible: true}\n *   ],\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={generateDataObj()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   nestedHeaders={true}\n *   // enable plugin\n *   collapsibleColumns={true}\n * />\n *\n * // or\n * <HotTable\n *   data={generateDataObj()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   nestedHeaders={true}\n *   // enable and configure which columns can be collapsed\n *   collapsibleColumns={[\n *     {row: -4, col: 1, collapsible: true},\n *     {row: -3, col: 5, collapsible: true}\n *   ]}\n * />\n * ```\n * :::\n */\nexport class CollapsibleColumns extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:NestedHeaders',\n    ];\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  /**\n   * Cached reference to the NestedHeaders plugin.\n   *\n   * @private\n   * @type {NestedHeaders}\n   */\n  nestedHeadersPlugin = null;\n  /**\n   * The NestedHeaders plugin StateManager instance.\n   *\n   * @private\n   * @type {StateManager}\n   */\n  headerStateManager = null;\n  /**\n   * Map of collapsed columns by the plugin.\n   *\n   * @private\n   * @type {HidingMap|null}\n   */\n  #collapsedColumnsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link CollapsibleColumns#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const { nestedHeaders } = this.hot.getSettings();\n\n    if (!nestedHeaders) {\n      warn('You need to configure the Nested Headers plugin in order to use collapsible headers.');\n    }\n\n    this.#collapsedColumnsMap = this.hot.columnIndexMapper.createAndRegisterIndexMap(this.pluginName, 'hiding');\n    this.nestedHeadersPlugin = this.hot.getPlugin('nestedHeaders');\n    this.headerStateManager = this.nestedHeadersPlugin.getStateManager();\n\n    this.addHook('init', () => this.#onInit());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('afterGetColHeader', (...args) => this.#onAfterGetColHeader(...args));\n    this.addHook('beforeOnCellMouseDown', (event, coords, TD) => this.#onBeforeOnCellMouseDown(event, coords, TD));\n\n    this.registerShortcuts();\n    super.enablePlugin();\n    // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n    this.updatePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *   - [`collapsibleColumns`](@/api/options.md#collapsiblecolumns)\n   *   - [`nestedHeaders`](@/api/options.md#nestedheaders)\n   */\n  updatePlugin() {\n    // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n    if (!this.hot.view) {\n      return;\n    }\n\n    if (!this.nestedHeadersPlugin.detectedOverlappedHeaders) {\n      const { collapsibleColumns } = this.hot.getSettings();\n\n      if (typeof collapsibleColumns === 'boolean') {\n        // Add `collapsible: true` attribute to all headers with colspan higher than 1.\n        this.headerStateManager.mapState((headerSettings) => {\n          return { collapsible: headerSettings.origColspan > 1 };\n        });\n\n      } else if (Array.isArray(collapsibleColumns)) {\n\n        this.headerStateManager.mapState(() => {\n          return { collapsible: false };\n        });\n\n        this.headerStateManager.mergeStateWith(collapsibleColumns);\n      }\n    }\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n    this.#collapsedColumnsMap = null;\n    this.nestedHeadersPlugin = null;\n\n    this.unregisterShortcuts();\n    this.clearButtons();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Enter']],\n        callback: () => {\n          const { row, col } = this.hot.getSelectedRangeLast().highlight;\n          const {\n            collapsible,\n            isCollapsed,\n            columnIndex,\n          } = this.headerStateManager.getHeaderTreeNodeData(row, col) ?? {};\n\n          if (!collapsible) {\n            return;\n          }\n\n          if (isCollapsed) {\n            this.expandSection({ row, col: columnIndex });\n          } else {\n            this.collapseSection({ row, col: columnIndex });\n          }\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => this.hot.getSelectedRangeLast()?.isSingle() &&\n          this.hot.getSelectedRangeLast()?.highlight.isHeader(),\n        group: SHORTCUTS_GROUP,\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Clears the expand/collapse buttons.\n   *\n   * @private\n   */\n  clearButtons() {\n    if (!this.hot.view) {\n      return;\n    }\n\n    const headerLevels = this.hot.view._wt.getSetting('columnHeaders').length;\n    const mainHeaders = this.hot.view._wt.wtTable.THEAD;\n    const topHeaders = this.hot.view._wt.wtOverlays.topOverlay.clone.wtTable.THEAD;\n    const topLeftCornerHeaders = this.hot.view._wt.wtOverlays.topInlineStartCornerOverlay ?\n      this.hot.view._wt.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.THEAD : null;\n\n    const removeButton = function(button) {\n      if (button) {\n        button.parentNode.removeChild(button);\n      }\n    };\n\n    rangeEach(0, headerLevels - 1, (i) => {\n      const masterLevel = mainHeaders.childNodes[i];\n      const topLevel = topHeaders.childNodes[i];\n      const topLeftCornerLevel = topLeftCornerHeaders ? topLeftCornerHeaders.childNodes[i] : null;\n\n      rangeEach(0, masterLevel.childNodes.length - 1, (j) => {\n        let button = masterLevel.childNodes[j].querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n        removeButton(button);\n\n        if (topLevel && topLevel.childNodes[j]) {\n          button = topLevel.childNodes[j].querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n          removeButton(button);\n        }\n\n        if (topLeftCornerHeaders && topLeftCornerLevel && topLeftCornerLevel.childNodes[j]) {\n          button = topLeftCornerLevel.childNodes[j].querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n          removeButton(button);\n        }\n      });\n    }, true);\n  }\n\n  /**\n   * Expands section at the provided coords.\n   *\n   * @param {object} coords Contains coordinates information. (`coords.row`, `coords.col`).\n   */\n  expandSection(coords) {\n    this.toggleCollapsibleSection([coords], 'expand');\n  }\n\n  /**\n   * Collapses section at the provided coords.\n   *\n   * @param {object} coords Contains coordinates information. (`coords.row`, `coords.col`).\n   */\n  collapseSection(coords) {\n    this.toggleCollapsibleSection([coords], 'collapse');\n  }\n\n  /**\n   * Collapses or expand all collapsible sections, depending on the action parameter.\n   *\n   * @param {string} action 'collapse' or 'expand'.\n   */\n  toggleAllCollapsibleSections(action) {\n    const coords = this.headerStateManager.mapNodes((headerSettings) => {\n      const {\n        collapsible,\n        origColspan,\n        headerLevel,\n        columnIndex,\n        isCollapsed,\n      } = headerSettings;\n\n      if (collapsible === true && origColspan > 1\n          && (isCollapsed && action === 'expand' || !isCollapsed && action === 'collapse')) {\n        return {\n          row: this.headerStateManager.levelToRowCoords(headerLevel),\n          col: columnIndex,\n        };\n      }\n    });\n\n    this.toggleCollapsibleSection(coords, action);\n  }\n\n  /**\n   * Collapses all collapsible sections.\n   */\n  collapseAll() {\n    this.toggleAllCollapsibleSections('collapse');\n  }\n\n  /**\n   * Expands all collapsible sections.\n   */\n  expandAll() {\n    this.toggleAllCollapsibleSections('expand');\n  }\n\n  /**\n   * Collapses/Expands a section.\n   *\n   * @param {Array} coords Array of coords - section coordinates.\n   * @param {string} [action] Action definition ('collapse' or 'expand').\n   * @fires Hooks#beforeColumnCollapse\n   * @fires Hooks#beforeColumnExpand\n   * @fires Hooks#afterColumnCollapse\n   * @fires Hooks#afterColumnExpand\n   */\n  toggleCollapsibleSection(coords, action) {\n    if (!actionDictionary.has(action)) {\n      throw new Error(`Unsupported action is passed (${action}).`);\n    }\n    if (!Array.isArray(coords)) {\n      return;\n    }\n\n    // Ignore coordinates which points to the cells range.\n    const filteredCoords = arrayFilter(coords, ({ row }) => row < 0);\n    let isActionPossible = filteredCoords.length > 0;\n\n    arrayEach(filteredCoords, ({ row, col: column }) => {\n      const { collapsible, isCollapsed } = this.headerStateManager.getHeaderSettings(row, column) ?? {};\n\n      if (!collapsible || isCollapsed && action === 'collapse' || !isCollapsed && action === 'expand') {\n        isActionPossible = false;\n\n        return false;\n      }\n    });\n\n    const nodeModRollbacks = [];\n    const affectedColumnsIndexes = [];\n\n    if (isActionPossible) {\n      arrayEach(filteredCoords, ({ row, col: column }) => {\n        const {\n          colspanCompensation,\n          affectedColumns,\n          rollbackModification,\n        } = this.headerStateManager.triggerNodeModification(action, row, column);\n\n        if (colspanCompensation > 0) {\n          affectedColumnsIndexes.push(...affectedColumns);\n          nodeModRollbacks.push(rollbackModification);\n        }\n      });\n    }\n\n    const currentCollapsedColumns = this.getCollapsedColumns();\n    let destinationCollapsedColumns = [];\n\n    if (action === 'collapse') {\n      destinationCollapsedColumns = arrayUnique([...currentCollapsedColumns, ...affectedColumnsIndexes]);\n\n    } else if (action === 'expand') {\n      destinationCollapsedColumns = arrayFilter(currentCollapsedColumns,\n        index => !affectedColumnsIndexes.includes(index));\n    }\n\n    const actionTranslator = actionDictionary.get(action);\n    const isActionAllowed = this.hot.runHooks(\n      actionTranslator.beforeHook,\n      currentCollapsedColumns,\n      destinationCollapsedColumns,\n      isActionPossible,\n    );\n\n    if (isActionAllowed === false) {\n      // Rollback all header nodes modification (collapse or expand).\n      arrayEach(nodeModRollbacks, (nodeModRollback) => {\n        nodeModRollback();\n      });\n\n      return;\n    }\n\n    this.hot.batchExecution(() => {\n      arrayEach(affectedColumnsIndexes, (visualColumn) => {\n        this.#collapsedColumnsMap\n          .setValueAtIndex(this.hot.toPhysicalColumn(visualColumn), actionTranslator.hideColumn);\n      });\n    }, true);\n\n    const isActionPerformed = this.getCollapsedColumns().length !== currentCollapsedColumns.length;\n    const selectionRange = this.hot.getSelectedRangeLast();\n\n    if (action === 'collapse' && isActionPerformed && selectionRange) {\n      const { row, col } = selectionRange.highlight;\n      const isHidden = this.hot.rowIndexMapper.isHidden(row) || this.hot.columnIndexMapper.isHidden(col);\n\n      if (isHidden && affectedColumnsIndexes.includes(col)) {\n        const nextRow = row >= 0 ? this.hot.rowIndexMapper.getNearestNotHiddenIndex(row, 1, true) : row;\n        const nextColumn = col >= 0 ? this.hot.columnIndexMapper.getNearestNotHiddenIndex(col, 1, true) : col;\n\n        if (nextRow !== null && nextColumn !== null) {\n          this.hot.selectCell(nextRow, nextColumn);\n        }\n      }\n    }\n\n    this.hot.runHooks(\n      actionTranslator.afterHook,\n      currentCollapsedColumns,\n      destinationCollapsedColumns,\n      isActionPossible,\n      isActionPerformed,\n    );\n\n    this.hot.render();\n    this.hot.view.adjustElementsSize();\n  }\n\n  /**\n   * Gets an array of physical indexes of collapsed columns.\n   *\n   * @private\n   * @returns {number[]}\n   */\n  getCollapsedColumns() {\n    return this.#collapsedColumnsMap.getHiddenIndexes();\n  }\n\n  /**\n   * Adds the indicator to the headers.\n   *\n   * @param {number} column Column index.\n   * @param {HTMLElement} TH TH element.\n   * @param {number} headerLevel The index of header level counting from the top (positive\n   *                             values counting from 0 to N).\n   */\n  #onAfterGetColHeader(column, TH, headerLevel) {\n    const {\n      collapsible,\n      origColspan,\n      isCollapsed,\n    } = this.headerStateManager.getHeaderSettings(headerLevel, column) ?? {};\n    const isNodeCollapsible = collapsible && origColspan > 1 && column >= this.hot.getSettings().fixedColumnsStart;\n    const isAriaTagsEnabled = this.hot.getSettings().ariaTags;\n    let collapsibleElement = TH.querySelector(`.${COLLAPSIBLE_ELEMENT_CLASS}`);\n\n    removeAttribute(TH, [\n      A11Y_EXPANDED('')[0]\n    ]);\n\n    if (isNodeCollapsible) {\n      if (!collapsibleElement) {\n        collapsibleElement = this.hot.rootDocument.createElement('div');\n\n        addClass(collapsibleElement, COLLAPSIBLE_ELEMENT_CLASS);\n        TH.querySelector('div:first-child').appendChild(collapsibleElement);\n      }\n\n      removeClass(collapsibleElement, ['collapsed', 'expanded']);\n\n      if (isCollapsed) {\n        addClass(collapsibleElement, 'collapsed');\n\n        fastInnerText(collapsibleElement, '+');\n\n        // Add ARIA tags\n        if (isAriaTagsEnabled) {\n          setAttribute(TH, ...A11Y_EXPANDED(false));\n        }\n\n      } else {\n        addClass(collapsibleElement, 'expanded');\n\n        fastInnerText(collapsibleElement, '-');\n\n        // Add ARIA tags\n        if (isAriaTagsEnabled) {\n          setAttribute(TH, ...A11Y_EXPANDED(true));\n        }\n      }\n\n      if (isAriaTagsEnabled) {\n        setAttribute(collapsibleElement, ...A11Y_HIDDEN());\n      }\n\n    } else {\n      collapsibleElement?.remove();\n    }\n  }\n\n  /**\n   * Indicator mouse event callback.\n   *\n   * @param {object} event Mouse event.\n   * @param {object} coords Event coordinates.\n   */\n  #onBeforeOnCellMouseDown(event, coords) {\n    if (hasClass(event.target, COLLAPSIBLE_ELEMENT_CLASS)) {\n      if (hasClass(event.target, 'expanded')) {\n        this.eventManager.fireEvent(event.target, 'mouseup');\n        this.toggleCollapsibleSection([coords], 'collapse');\n\n      } else if (hasClass(event.target, 'collapsed')) {\n        this.eventManager.fireEvent(event.target, 'mouseup');\n        this.toggleCollapsibleSection([coords], 'expand');\n      }\n\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Updates the plugin state after HoT initialization.\n   */\n  #onInit() {\n    // @TODO: Workaround for broken plugin initialization abstraction (#6806).\n    this.updatePlugin();\n  }\n\n  /**\n   * Updates the plugin state after new dataset load.\n   *\n   * @param {Array[]} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded\n   *                              during the initialization.\n   */\n  #onAfterLoadData(sourceData, initialLoad) {\n    if (!initialLoad) {\n      this.updatePlugin();\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#collapsedColumnsMap = null;\n\n    super.destroy();\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ColumnSorting,\n  APPEND_COLUMN_CONFIG_STRATEGY,\n  REPLACE_COLUMN_CONFIG_STRATEGY\n} from './columnSorting';\n","import {\n  addClass,\n  hasClass,\n  removeClass,\n  setAttribute,\n} from '../../helpers/dom/element';\nimport { isUndefined, isDefined } from '../../helpers/mixed';\nimport { isObject } from '../../helpers/object';\nimport { isFunction } from '../../helpers/function';\nimport { arrayMap } from '../../helpers/array';\nimport { BasePlugin } from '../base';\nimport { IndexesSequence, PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\nimport Hooks from '../../pluginHooks';\nimport { ColumnStatesManager } from './columnStatesManager';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport {\n  HEADER_SPAN_CLASS,\n  getNextSortOrder,\n  areValidSortStates,\n  getHeaderSpanElement,\n  isFirstLevelColumnHeader,\n  wasHeaderClickedProperly\n} from './utils';\nimport {\n  getClassesToRemove,\n  getClassesToAdd\n} from './domHelpers';\nimport { rootComparator } from './rootComparator';\nimport { registerRootComparator, sort } from './sortService';\nimport { A11Y_SORT } from '../../helpers/a11y';\n\nimport './columnSorting.scss';\n\nexport const PLUGIN_KEY = 'columnSorting';\nexport const PLUGIN_PRIORITY = 50;\nexport const APPEND_COLUMN_CONFIG_STRATEGY = 'append';\nexport const REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nregisterRootComparator(PLUGIN_KEY, rootComparator);\n\nHooks.getSingleton().register('beforeColumnSort');\nHooks.getSingleton().register('afterColumnSort');\n\n// DIFF - MultiColumnSorting & ColumnSorting: changed configuration documentation.\n/**\n * @plugin ColumnSorting\n * @class ColumnSorting\n *\n * @description\n * This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the\n * {@link Options#columnSorting} property to the correct value (see the examples below).\n *\n * @example\n * ```js\n * // as boolean\n * columnSorting: true\n *\n * // as an object with initial sort config (sort ascending for column at index 1)\n * columnSorting: {\n *   initialConfig: {\n *     column: 1,\n *     sortOrder: 'asc'\n *   }\n * }\n *\n * // as an object which define specific sorting options for all columns\n * columnSorting: {\n *   sortEmptyCells: true, // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table (by default)\n *   indicator: true, // true = shows indicator for all columns (by default), false = don't show indicator for columns\n *   headerAction: true, // true = allow to click on the headers to sort (by default), false = turn off possibility to click on the headers to sort\n *   compareFunctionFactory: function(sortOrder, columnMeta) {\n *     return function(value, nextValue) {\n *       // Some value comparisons which will return -1, 0 or 1...\n *     }\n *   }\n * }\n *\n * // as an object passed to the `column` property, allows specifying a custom options for the desired column.\n * // please take a look at documentation of `column` property: https://handsontable.com/docs/Options.html#columns\n * columns: [{\n *   columnSorting: {\n *     indicator: false, // disable indicator for the first column,\n *     sortEmptyCells: true,\n *     headerAction: false, // clicks on the first column won't sort\n *     compareFunctionFactory: function(sortOrder, columnMeta) {\n *       return function(value, nextValue) {\n *         return 0; // Custom compare function for the first column (don't sort)\n *       }\n *     }\n *   }\n * }]\n * ```\n */\nexport class ColumnSorting extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Instance of column state manager.\n   *\n   * @private\n   * @type {null|ColumnStatesManager}\n   */\n  columnStatesManager = null;\n  /**\n   * Cached column properties from plugin like i.e. `indicator`, `headerAction`.\n   *\n   * @private\n   * @type {null|PhysicalIndexToValueMap}\n   */\n  columnMetaCache = null;\n  /**\n   * Main settings key designed for the plugin.\n   *\n   * @private\n   * @type {string}\n   */\n  pluginKey = PLUGIN_KEY;\n  /**\n   * Plugin indexes cache.\n   *\n   * @private\n   * @type {null|IndexesSequence}\n   */\n  indexesSequenceCache = null;\n\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ColumnSorting#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!(this.hot.getSettings()[this.pluginKey]);\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.columnStatesManager = new ColumnStatesManager(this.hot, `${this.pluginKey}.sortingStates`);\n\n    this.columnMetaCache = new IndexToValueMap((physicalIndex) => {\n      let visualIndex = this.hot.toVisualColumn(physicalIndex);\n\n      if (visualIndex === null) {\n        visualIndex = physicalIndex;\n      }\n\n      return this.getMergedPluginSettings(visualIndex);\n    });\n    this.hot.columnIndexMapper.registerMap(`${this.pluginKey}.columnMeta`, this.columnMetaCache);\n\n    this.addHook('afterGetColHeader', (column, TH) => this.#onAfterGetColHeader(column, TH));\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('afterOnCellMouseDown', (event, target) => this.onAfterOnCellMouseDown(event, target));\n    this.addHook('afterInit', () => this.#loadOrSortBySettings());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    // TODO: Workaround? It should be refactored / described.\n    if (this.hot.view) {\n      this.#loadOrSortBySettings();\n    }\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    const clearColHeader = (column, TH) => {\n      const headerSpanElement = getHeaderSpanElement(TH);\n\n      if (isFirstLevelColumnHeader(column, TH) === false || headerSpanElement === null) {\n        return;\n      }\n\n      this.updateHeaderClasses(headerSpanElement);\n    };\n\n    // Changing header width and removing indicator.\n    this.hot.addHook('afterGetColHeader', clearColHeader);\n    this.hot.addHookOnce('afterViewRender', () => {\n      this.hot.removeHook('afterGetColHeader', clearColHeader);\n    });\n\n    this.hot.batchExecution(() => {\n      if (this.indexesSequenceCache !== null) {\n        this.hot.rowIndexMapper.setIndexesSequence(this.indexesSequenceCache.getValues());\n        this.hot.rowIndexMapper.unregisterMap(this.pluginKey);\n\n        this.indexesSequenceCache = null;\n      }\n    }, true);\n\n    this.hot.columnIndexMapper.unregisterMap(`${this.pluginKey}.columnMeta`);\n    this.columnStatesManager.destroy();\n    this.columnMetaCache = null;\n    this.columnStatesManager = null;\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Enter']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n\n          this.sort(this.getColumnNextConfig(highlight.col));\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.getSelectedRangeLast()?.isSingle() &&\n            this.hot.selection.isCellVisible(highlight) && highlight.row === -1 && highlight.col >= 0;\n        },\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  // DIFF - MultiColumnSorting & ColumnSorting: changed function documentation.\n  /**\n   * Sorts the table by chosen columns and orders.\n   *\n   * @param {undefined|object} sortConfig Single column sort configuration. The configuration object contains `column` and `sortOrder` properties.\n   * First of them contains visual column index, the second one contains sort order (`asc` for ascending, `desc` for descending).\n   *\n   * **Note**: Please keep in mind that every call of `sort` function set an entirely new sort order. Previous sort configs aren't preserved.\n   *\n   * @example\n   * ```js\n   * // sort ascending first visual column\n   * hot.getPlugin('columnSorting').sort({ column: 0, sortOrder: 'asc' });\n   * ```\n   *\n   * @fires Hooks#beforeColumnSort\n   * @fires Hooks#afterColumnSort\n   */\n  sort(sortConfig) {\n    const currentSortConfig = this.getSortConfig();\n\n    // We always pass configs defined as an array to `beforeColumnSort` and `afterColumnSort` hooks.\n    const destinationSortConfigs = this.getNormalizedSortConfigs(sortConfig);\n\n    const sortPossible = this.areValidSortConfigs(destinationSortConfigs);\n    const allowSort = this.hot.runHooks('beforeColumnSort', currentSortConfig, destinationSortConfigs, sortPossible);\n\n    if (allowSort === false) {\n      return;\n    }\n\n    if (currentSortConfig.length === 0 && this.indexesSequenceCache === null) {\n      this.indexesSequenceCache = this.hot.rowIndexMapper.registerMap(this.pluginKey, new IndexesSequence());\n      this.indexesSequenceCache.setValues(this.hot.rowIndexMapper.getIndexesSequence());\n    }\n\n    if (sortPossible) {\n      this.columnStatesManager.setSortStates(destinationSortConfigs);\n      this.sortByPresetSortStates(destinationSortConfigs);\n      this.saveAllSortSettings(destinationSortConfigs);\n    }\n\n    this.hot.runHooks('afterColumnSort',\n      currentSortConfig, sortPossible ? destinationSortConfigs : currentSortConfig, sortPossible);\n\n    if (sortPossible) {\n      this.hot.render();\n      // TODO: Workaround? This triggers fast redraw. One test won't pass after removal.\n      // It should be refactored / described.\n      this.hot.forceFullRender = false;\n      this.hot.view.render();\n    }\n  }\n\n  /**\n   * Clear the sort performed on the table.\n   */\n  clearSort() {\n    this.sort([]);\n  }\n\n  /**\n   * Checks if the table is sorted (any column have to be sorted).\n   *\n   * @returns {boolean}\n   */\n  isSorted() {\n    return this.enabled && !this.columnStatesManager.isListOfSortedColumnsEmpty();\n  }\n\n  /**\n   * Get sort configuration for particular column or for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key. They are handled by the `sort` function.\n   *\n   * @param {number} [column] Visual column index.\n   * @returns {undefined|object|Array}\n   */\n  getSortConfig(column) {\n    if (isDefined(column)) {\n      return this.columnStatesManager.getColumnSortState(column);\n    }\n\n    return this.columnStatesManager.getSortStates();\n  }\n\n  /**\n   * @description\n   * Warn: Useful mainly for providing server side sort implementation (see in the example below). It doesn't sort the data set. It just sets sort configuration for all sorted columns.\n   * Note: Please keep in mind that this method doesn't re-render the table.\n   *\n   * @example\n   * ```js\n   * beforeColumnSort: function(currentSortConfig, destinationSortConfigs) {\n   *   const columnSortPlugin = this.getPlugin('columnSorting');\n   *\n   *   columnSortPlugin.setSortConfig(destinationSortConfigs);\n   *\n   *   // const newData = ... // Calculated data set, ie. from an AJAX call.\n   *\n   *   this.loadData(newData); // Load new data set and re-render the table.\n   *\n   *   return false; // The blockade for the default sort action.\n   * }\n   * ```\n   *\n   * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   */\n  setSortConfig(sortConfig) {\n    // We always set configs defined as an array.\n    const destinationSortConfigs = this.getNormalizedSortConfigs(sortConfig);\n\n    if (this.areValidSortConfigs(destinationSortConfigs)) {\n      this.columnStatesManager.setSortStates(destinationSortConfigs);\n    }\n  }\n\n  /**\n   * Get normalized sort configs.\n   *\n   * @private\n   * @param {object|Array} [sortConfig=[]] Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   * @returns {Array}\n   */\n  getNormalizedSortConfigs(sortConfig = []) {\n    if (Array.isArray(sortConfig)) {\n      return sortConfig.slice(0, 1);\n    }\n\n    return [sortConfig];\n  }\n\n  /**\n   * Get if sort configs are valid.\n   *\n   * @private\n   * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   * @returns {boolean}\n   */\n  areValidSortConfigs(sortConfigs) {\n    const numberOfColumns = this.hot.countCols();\n\n    // We don't translate visual indexes to physical indexes.\n    return areValidSortStates(sortConfigs) && sortConfigs.every(({ column }) =>\n      column <= numberOfColumns && column >= 0);\n  }\n\n  /**\n   * Saves all sorting settings. Saving works only when {@link Options#persistentState} option is enabled.\n   *\n   * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   *\n   * @private\n   * @fires Hooks#persistentStateSave\n   */\n  saveAllSortSettings(sortConfigs) {\n    const allSortSettings = this.columnStatesManager.getAllColumnsProperties();\n    const translateColumnToPhysical = ({ column: visualColumn, ...restOfProperties }) =>\n      ({ column: this.hot.toPhysicalColumn(visualColumn), ...restOfProperties });\n\n    allSortSettings.initialConfig = arrayMap(sortConfigs, translateColumnToPhysical);\n\n    this.hot.runHooks('persistentStateSave', 'columnSorting', allSortSettings);\n  }\n\n  /**\n   * Get all saved sorting settings. Loading works only when {@link Options#persistentState} option is enabled.\n   *\n   * @private\n   * @returns {object} Previously saved sort settings.\n   *\n   * @fires Hooks#persistentStateLoad\n   */\n  getAllSavedSortSettings() {\n    const storedAllSortSettings = {};\n\n    this.hot.runHooks('persistentStateLoad', 'columnSorting', storedAllSortSettings);\n\n    const allSortSettings = storedAllSortSettings.value;\n    const translateColumnToVisual = ({ column: physicalColumn, ...restOfProperties }) =>\n      ({ column: this.hot.toVisualColumn(physicalColumn), ...restOfProperties });\n\n    if (isDefined(allSortSettings) && Array.isArray(allSortSettings.initialConfig)) {\n      allSortSettings.initialConfig = arrayMap(allSortSettings.initialConfig, translateColumnToVisual);\n    }\n\n    return allSortSettings;\n  }\n\n  /**\n   * Get next sort configuration for particular column. Object contain `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned object expose **visual** column index under the `column` key.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {undefined|object}\n   */\n  getColumnNextConfig(column) {\n    const sortOrder = this.columnStatesManager.getSortOrderOfColumn(column);\n\n    if (isDefined(sortOrder)) {\n      const nextSortOrder = getNextSortOrder(sortOrder);\n\n      if (isDefined(nextSortOrder)) {\n        return {\n          column,\n          sortOrder: nextSortOrder,\n        };\n      }\n\n      return;\n    }\n\n    const nrOfColumns = this.hot.countCols();\n\n    if (Number.isInteger(column) && column >= 0 && column < nrOfColumns) {\n      return {\n        column,\n        sortOrder: getNextSortOrder()\n      };\n    }\n  }\n\n  /**\n   * Get sort configuration with \"next order\" for particular column.\n   *\n   * @private\n   * @param {number} columnToChange Visual column index of column which order will be changed.\n   * @param {string} strategyId ID of strategy. Possible values: 'append' and 'replace'. The first one\n   * change order of particular column and change it's position in the sort queue to the last one. The second one\n   * just change order of particular column.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n   *\n   * @returns {Array}\n   */\n  getNextSortConfig(columnToChange, strategyId = APPEND_COLUMN_CONFIG_STRATEGY) {\n    const indexOfColumnToChange = this.columnStatesManager.getIndexOfColumnInSortQueue(columnToChange);\n    const isColumnSorted = indexOfColumnToChange !== -1;\n    const currentSortConfig = this.getSortConfig();\n    const nextColumnConfig = this.getColumnNextConfig(columnToChange);\n\n    if (isColumnSorted) {\n      if (isUndefined(nextColumnConfig)) {\n        return [\n          ...currentSortConfig.slice(0, indexOfColumnToChange),\n          ...currentSortConfig.slice(indexOfColumnToChange + 1)\n        ];\n      }\n\n      if (strategyId === APPEND_COLUMN_CONFIG_STRATEGY) {\n        return [\n          ...currentSortConfig.slice(0, indexOfColumnToChange),\n          ...currentSortConfig.slice(indexOfColumnToChange + 1),\n          nextColumnConfig\n        ];\n\n      } else if (strategyId === REPLACE_COLUMN_CONFIG_STRATEGY) {\n        return [\n          ...currentSortConfig.slice(0, indexOfColumnToChange),\n          nextColumnConfig,\n          ...currentSortConfig.slice(indexOfColumnToChange + 1)\n        ];\n      }\n    }\n\n    if (isDefined(nextColumnConfig)) {\n      return currentSortConfig.concat(nextColumnConfig);\n    }\n\n    return currentSortConfig;\n  }\n\n  /**\n   * Get plugin's column config for the specified column index.\n   *\n   * @private\n   * @param {object} columnConfig Configuration inside `columns` property for the specified column index.\n   * @returns {object}\n   */\n  getPluginColumnConfig(columnConfig) {\n    if (isObject(columnConfig)) {\n      const pluginColumnConfig = columnConfig[this.pluginKey];\n\n      if (isObject(pluginColumnConfig)) {\n        return pluginColumnConfig;\n      }\n    }\n\n    return {};\n  }\n\n  /**\n   * Get plugin settings related properties, properly merged from cascade settings.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {object}\n   */\n  getMergedPluginSettings(column) {\n    const pluginMainSettings = this.hot.getSettings()[this.pluginKey];\n    const storedColumnProperties = this.columnStatesManager.getAllColumnsProperties();\n    const cellMeta = this.hot.getCellMeta(0, column);\n    const columnMeta = Object.getPrototypeOf(cellMeta);\n\n    if (Array.isArray(columnMeta.columns)) {\n      return Object\n        .assign(storedColumnProperties, pluginMainSettings, this.getPluginColumnConfig(columnMeta.columns[column]));\n\n    } else if (isFunction(columnMeta.columns)) {\n      return Object\n        .assign(storedColumnProperties, pluginMainSettings, this.getPluginColumnConfig(columnMeta.columns(column)));\n    }\n\n    return Object.assign(storedColumnProperties, pluginMainSettings);\n  }\n\n  /**\n   * Get copy of settings for first cell in the column.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {object}\n   */\n  // TODO: Workaround. Inheriting of non-primitive cell meta values doesn't work. Instead of getting properties from column meta we call this function.\n  // TODO: Remove test named: \"should not break the dataset when inserted new row\" (#5431).\n  getFirstCellSettings(column) {\n    const cellMeta = this.hot.getCellMeta(0, column);\n\n    const cellMetaCopy = Object.create(cellMeta);\n\n    cellMetaCopy[this.pluginKey] = this.columnMetaCache.getValueAtIndex(this.hot.toPhysicalColumn(column));\n\n    return cellMetaCopy;\n  }\n\n  /**\n   * Get number of rows which should be sorted.\n   *\n   * @private\n   * @param {number} numberOfRows Total number of displayed rows.\n   * @returns {number}\n   */\n  getNumberOfRowsToSort(numberOfRows) {\n    const settings = this.hot.getSettings();\n\n    // `maxRows` option doesn't take into account `minSpareRows` option in this case.\n    if (settings.maxRows <= numberOfRows) {\n      return settings.maxRows;\n    }\n\n    return numberOfRows - settings.minSpareRows;\n  }\n\n  /**\n   * Performs the sorting using a stable sort function basing on internal state of sorting.\n   *\n   * @param {Array} sortConfigs Sort configuration for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   * @private\n   */\n  sortByPresetSortStates(sortConfigs) {\n    this.hot.rowIndexMapper.setIndexesSequence(this.indexesSequenceCache.getValues());\n\n    if (sortConfigs.length === 0) {\n      return;\n    }\n\n    const indexesWithData = [];\n    const numberOfRows = this.hot.countRows();\n\n    const getDataForSortedColumns = visualRowIndex =>\n      arrayMap(sortConfigs, sortConfig => this.hot.getDataAtCell(visualRowIndex, sortConfig.column));\n\n    for (let visualRowIndex = 0; visualRowIndex < this.getNumberOfRowsToSort(numberOfRows); visualRowIndex += 1) {\n      indexesWithData.push([this.hot.toPhysicalRow(visualRowIndex)].concat(getDataForSortedColumns(visualRowIndex)));\n    }\n\n    const indexesBefore = arrayMap(indexesWithData, indexWithData => indexWithData[0]);\n\n    sort(\n      indexesWithData,\n      this.pluginKey,\n      arrayMap(sortConfigs, sortConfig => sortConfig.sortOrder),\n      arrayMap(sortConfigs, sortConfig => this.getFirstCellSettings(sortConfig.column))\n    );\n\n    // Append spareRows\n    for (let visualRowIndex = indexesWithData.length; visualRowIndex < numberOfRows; visualRowIndex += 1) {\n      indexesWithData.push([visualRowIndex].concat(getDataForSortedColumns(visualRowIndex)));\n    }\n\n    const indexesAfter = arrayMap(indexesWithData, indexWithData => indexWithData[0]);\n\n    const indexMapping = new Map(\n      arrayMap(indexesBefore, (indexBefore, indexInsideArray) => [indexBefore, indexesAfter[indexInsideArray]])\n    );\n\n    const newIndexesSequence = arrayMap(this.hot.rowIndexMapper.getIndexesSequence(), (physicalIndex) => {\n      if (indexMapping.has(physicalIndex)) {\n        return indexMapping.get(physicalIndex);\n      }\n\n      return physicalIndex;\n    });\n\n    this.hot.rowIndexMapper.setIndexesSequence(newIndexesSequence);\n  }\n\n  /**\n   * Load saved settings or sort by predefined plugin configuration.\n   */\n  #loadOrSortBySettings() {\n    const storedAllSortSettings = this.getAllSavedSortSettings();\n\n    if (isObject(storedAllSortSettings)) {\n      this.sortBySettings(storedAllSortSettings);\n\n    } else {\n      const allSortSettings = this.hot.getSettings()[this.pluginKey];\n\n      this.sortBySettings(allSortSettings);\n    }\n  }\n\n  /**\n   * Sort the table by provided configuration.\n   *\n   * @private\n   * @param {object} allSortSettings All sort config settings. Object may contain `initialConfig`, `indicator`,\n   * `sortEmptyCells`, `headerAction` and `compareFunctionFactory` properties.\n   */\n  sortBySettings(allSortSettings) {\n    if (isObject(allSortSettings)) {\n      this.columnStatesManager.updateAllColumnsProperties(allSortSettings);\n\n      const initialConfig = allSortSettings.initialConfig;\n\n      if (Array.isArray(initialConfig) || isObject(initialConfig)) {\n        this.sort(initialConfig);\n      }\n\n    } else {\n      // Extra render for headers. Their width may change.\n      this.hot.render();\n    }\n  }\n\n  /**\n   * Callback for the `onAfterGetColHeader` hook. Adds column sorting CSS classes.\n   *\n   * @param {number} column Visual column index.\n   * @param {Element} TH TH HTML element.\n   */\n  #onAfterGetColHeader(column, TH) {\n    const headerSpanElement = getHeaderSpanElement(TH);\n\n    if (isFirstLevelColumnHeader(column, TH) === false || headerSpanElement === null) {\n      return;\n    }\n\n    const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];\n    const showSortIndicator = pluginSettingsForColumn.indicator;\n    const headerActionEnabled = pluginSettingsForColumn.headerAction;\n\n    this.updateHeaderClasses(\n      headerSpanElement,\n      this.columnStatesManager,\n      column,\n      showSortIndicator,\n      headerActionEnabled\n    );\n\n    if (this.hot.getSettings().ariaTags) {\n      const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);\n\n      setAttribute(TH, ...A11Y_SORT(currentSortState ? `${currentSortState}ending` : 'none'));\n    }\n  }\n\n  /**\n   * Update header classes.\n   *\n   * @private\n   * @param {HTMLElement} headerSpanElement Header span element.\n   * @param {...*} args Extra arguments for helpers.\n   */\n  updateHeaderClasses(headerSpanElement, ...args) {\n    removeClass(headerSpanElement, getClassesToRemove(headerSpanElement));\n\n    if (this.enabled !== false) {\n      addClass(headerSpanElement, getClassesToAdd(...args));\n    }\n  }\n\n  /**\n   * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called\n   * for `updateSettings` in specific situations.\n   *\n   * @private\n   * @param {object} newSettings New settings object.\n   */\n  onUpdateSettings(newSettings) {\n    super.onUpdateSettings();\n\n    if (this.columnMetaCache !== null) {\n      // Column meta cache base on settings, thus we should re-init the map.\n      this.columnMetaCache.init(this.hot.columnIndexMapper.getNumberOfIndexes());\n    }\n\n    if (isDefined(newSettings[this.pluginKey])) {\n      this.sortBySettings(newSettings[this.pluginKey]);\n    }\n  }\n\n  /**\n   * Callback for the `afterLoadData` hook.\n   *\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n   */\n  #onAfterLoadData(initialLoad) {\n    if (initialLoad === true) {\n      // TODO: Workaround? It should be refactored / described.\n      if (this.hot.view) {\n        this.#loadOrSortBySettings();\n      }\n    }\n  }\n\n  /**\n   * Indicates if clickable header was clicked.\n   *\n   * @private\n   * @param {MouseEvent} event The `mousedown` event.\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  wasClickableHeaderClicked(event, column) {\n    const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];\n    const headerActionEnabled = pluginSettingsForColumn.headerAction;\n\n    return (\n      headerActionEnabled && hasClass(event.target, HEADER_SPAN_CLASS)\n    );\n  }\n\n  /**\n   * Changes the behavior of selection / dragging.\n   *\n   * @param {MouseEvent} event The `mousedown` event.\n   * @param {CellCoords} coords Visual coordinates.\n   * @param {HTMLElement} TD The cell element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n      return;\n    }\n\n    if (this.wasClickableHeaderClicked(event, coords.col) && this.hot.getShortcutManager().isCtrlPressed()) {\n      controller.column = true;\n    }\n  }\n\n  /**\n   * Callback for the `onAfterOnCellMouseDown` hook.\n   *\n   * @private\n   * @param {Event} event Event which are provided by hook.\n   * @param {CellCoords} coords Visual coords of the selected cell.\n   */\n  onAfterOnCellMouseDown(event, coords) {\n    if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n      return;\n    }\n\n    if (this.wasClickableHeaderClicked(event, coords.col)) {\n      if (this.hot.getShortcutManager().isCtrlPressed()) {\n        this.hot.deselectCell();\n        this.hot.selectColumns(coords.col);\n      }\n\n      const activeEditor = this.hot.getActiveEditor();\n      const nextConfig = this.getColumnNextConfig(coords.col);\n\n      if (\n        activeEditor?.isOpened() &&\n        this.hot.getCellValidator(activeEditor.row, activeEditor.col)\n      ) {\n        // Postpone sorting until the cell's value is validated and saved.\n        this.hot.addHookOnce('postAfterValidate', () => {\n          this.sort(nextConfig);\n        });\n\n      } else {\n        this.sort(nextConfig);\n      }\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    // TODO: Probably not supported yet by ESLint: https://github.com/eslint/eslint/issues/11045\n    // eslint-disable-next-line no-unused-expressions\n    this.columnStatesManager?.destroy();\n\n    super.destroy();\n  }\n}\n","import { isObject, objectEach } from '../../helpers/object';\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\nimport { isDefined } from '../../helpers/mixed';\n\nconst inheritedColumnProperties = ['sortEmptyCells', 'indicator', 'headerAction', 'compareFunctionFactory'];\n\nconst SORT_EMPTY_CELLS_DEFAULT = false;\nconst SHOW_SORT_INDICATOR_DEFAULT = true;\nconst HEADER_ACTION_DEFAULT = true;\n\n/**\n * Store and manages states of sorted columns.\n *\n * @private\n * @class ColumnStatesManager\n */\nexport class ColumnStatesManager {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Index map storing sorting states for every column. ColumnStatesManager write and read to/from this element.\n   *\n   * @type {LinkedPhysicalIndexToValueMap}\n   */\n  sortingStates = new IndexToValueMap();\n  /**\n   * Determines whether we should sort empty cells.\n   *\n   * @type {boolean}\n   */\n  sortEmptyCells = SORT_EMPTY_CELLS_DEFAULT;\n  /**\n   * Determines whether indicator should be visible (for sorted columns).\n   *\n   * @type {boolean}\n   */\n  indicator = SHOW_SORT_INDICATOR_DEFAULT;\n  /**\n   * Determines whether click on the header perform sorting.\n   *\n   * @type {boolean}\n   */\n  headerAction = HEADER_ACTION_DEFAULT;\n  /**\n   * Determines compare function factory. Method get as parameters `sortOder` and `columnMeta` and return compare function.\n   */\n  compareFunctionFactory;\n  /**\n   * Name of map storing sorting states. Required for unique name (PR #7440 introduced it). It's needed as\n   * both ColumnSorting and MultiColumnSorting plugins create state manager and as a consequence register maps.\n   * Objects are destroyed in strange order as the updateSettings doesn't work well.\n   */\n  mapName;\n\n  constructor(hot, mapName) {\n    this.hot = hot;\n    this.mapName = mapName;\n    this.hot.columnIndexMapper.registerMap(mapName, this.sortingStates);\n  }\n\n  /**\n   * Update column properties which affect the sorting result.\n   *\n   * **Note**: All column properties can be overwritten by {@link Options#columns} option.\n   *\n   * @param {object} allSortSettings Column sorting plugin's configuration object.\n   */\n  updateAllColumnsProperties(allSortSettings) {\n    if (!isObject(allSortSettings)) {\n      return;\n    }\n\n    objectEach(allSortSettings, (newValue, propertyName) => {\n      if (inheritedColumnProperties.includes(propertyName)) {\n        this[propertyName] = newValue;\n      }\n    });\n  }\n\n  /**\n   * Get all column properties which affect the sorting result.\n   *\n   * @returns {object}\n   */\n  getAllColumnsProperties() {\n    const columnProperties = {\n      sortEmptyCells: this.sortEmptyCells,\n      indicator: this.indicator,\n      headerAction: this.headerAction\n    };\n\n    if (typeof this.compareFunctionFactory === 'function') {\n      columnProperties.compareFunctionFactory = this.compareFunctionFactory;\n    }\n\n    return columnProperties;\n  }\n\n  /**\n   * Get sort order of column.\n   *\n   * @param {number} searchedColumn Visual column index.\n   * @returns {string|undefined} Sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n   */\n  getSortOrderOfColumn(searchedColumn) {\n    return this.sortingStates.getValueAtIndex(this.hot.toPhysicalColumn(searchedColumn))?.sortOrder;\n  }\n\n  /**\n   * Get order of particular column in the states queue.\n   *\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  getIndexOfColumnInSortQueue(column) {\n    column = this.hot.toPhysicalColumn(column);\n\n    return this.sortingStates.getEntries().findIndex(([physicalColumn]) => physicalColumn === column);\n  }\n\n  /**\n   * Get number of sorted columns.\n   *\n   * @returns {number}\n   */\n  getNumberOfSortedColumns() {\n    return this.sortingStates.getLength();\n  }\n\n  /**\n   * Get if list of sorted columns is empty.\n   *\n   * @returns {boolean}\n   */\n  isListOfSortedColumnsEmpty() {\n    return this.getNumberOfSortedColumns() === 0;\n  }\n\n  /**\n   * Get if particular column is sorted.\n   *\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  isColumnSorted(column) {\n    return isObject(this.sortingStates.getValueAtIndex(this.hot.toPhysicalColumn(column)));\n  }\n\n  /**\n   * Queue of sort states containing sorted columns and their orders (Array of objects containing `column` and `sortOrder` properties).\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n   *\n   * @returns {Array<object>}\n   */\n  getSortStates() {\n    if (this.sortingStates === null) {\n      return [];\n    }\n\n    const sortingStatesQueue = this.sortingStates.getEntries();\n\n    return sortingStatesQueue.map(\n      ([physicalColumn, value]) => ({ column: this.hot.toVisualColumn(physicalColumn), ...value }));\n  }\n\n  /**\n   * Get sort state for particular column. Object contains `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key.\n   *\n   * @param {number} column Visual column index.\n   * @returns {object|undefined}\n   */\n  getColumnSortState(column) {\n    const sortOrder = this.getSortOrderOfColumn(column);\n\n    if (isDefined(sortOrder)) {\n      return {\n        column,\n        sortOrder,\n      };\n    }\n  }\n\n  /**\n   * Set all column states.\n   *\n   * @param {Array} sortStates Sort states.\n   */\n  setSortStates(sortStates) {\n    this.sortingStates.clear();\n\n    for (let i = 0; i < sortStates.length; i += 1) {\n      this.sortingStates.setValueAtIndex(this.hot.toPhysicalColumn(sortStates[i].column), {\n        sortOrder: sortStates[i].sortOrder\n      });\n    }\n  }\n\n  /**\n   * Destroy the state manager.\n   */\n  destroy() {\n    this.hot.columnIndexMapper.unregisterMap(this.mapName);\n    this.sortingStates = null;\n  }\n}\n","import moment from 'moment';\nimport { isObject } from '../../helpers/object';\nimport { isRightClick } from '../../helpers/dom/event';\nimport { isEmpty } from '../../helpers/mixed';\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from './sortService';\n\nexport const ASC_SORT_STATE = 'asc';\nexport const DESC_SORT_STATE = 'desc';\nexport const HEADER_SPAN_CLASS = 'colHeader';\n\n/**\n * Get if column state is valid.\n *\n * @param {number} columnState Particular column state.\n * @returns {boolean}\n */\nfunction isValidColumnState(columnState) {\n  if (isObject(columnState) === false) {\n    return false;\n  }\n\n  const { column, sortOrder } = columnState;\n\n  return Number.isInteger(column) && [ASC_SORT_STATE, DESC_SORT_STATE].includes(sortOrder);\n}\n\n/**\n * Get if all sorted columns states are valid.\n *\n * @param {Array} sortStates The sort state collection.\n * @returns {boolean}\n */\nexport function areValidSortStates(sortStates) {\n  if (sortStates.some(columnState => isValidColumnState(columnState) === false)) {\n    return false;\n  }\n\n  const sortedColumns = sortStates.map(({ column }) => column);\n\n  // Indexes occurs only once.\n  return new Set(sortedColumns).size === sortedColumns.length;\n}\n\n/**\n * Get next sort order for particular column. The order sequence looks as follows: 'asc' -> 'desc' -> undefined -> 'asc'.\n *\n * @param {string|undefined} sortOrder Sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n * @returns {string|undefined} Next sort order (`asc` for ascending, `desc` for descending and undefined for not sorted).\n */\nexport function getNextSortOrder(sortOrder) {\n  if (sortOrder === DESC_SORT_STATE) {\n    return;\n\n  } else if (sortOrder === ASC_SORT_STATE) {\n    return DESC_SORT_STATE;\n  }\n\n  return ASC_SORT_STATE;\n}\n\n/**\n * Get `span` DOM element inside `th` DOM element.\n *\n * @param {Element} TH Th HTML element.\n * @returns {Element | null}\n */\nexport function getHeaderSpanElement(TH) {\n  const headerSpanElement = TH.querySelector(`.${HEADER_SPAN_CLASS}`);\n\n  return headerSpanElement;\n}\n\n/**\n *\n * Get if handled header is first level column header.\n *\n * @param {number} column Visual column index.\n * @param {Element} TH Th HTML element.\n * @returns {boolean}\n */\nexport function isFirstLevelColumnHeader(column, TH) {\n  if (column < 0 || !TH.parentNode) {\n    return false;\n  }\n\n  const TRs = TH.parentNode.parentNode.childNodes;\n  const headerLevel = Array.from(TRs).indexOf(TH.parentNode) - TRs.length;\n\n  if (headerLevel !== -1) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n *  Get if header was clicked properly. Click on column header and NOT done by right click return `true`.\n *\n * @param {number} row Visual row index.\n * @param {number} column Visual column index.\n * @param {Event} clickEvent Click event.\n * @returns {boolean}\n */\nexport function wasHeaderClickedProperly(row, column, clickEvent) {\n  return row === -1 && column >= 0 && isRightClick(clickEvent) === false;\n}\n\n/**\n * Creates date or time sorting compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {string} format Date or time format.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function createDateTimeCompareFunction(sortOrder, format, columnPluginSettings) {\n  return function(value, nextValue) {\n    const { sortEmptyCells } = columnPluginSettings;\n\n    if (value === nextValue) {\n      return DO_NOT_SWAP;\n    }\n\n    if (isEmpty(value)) {\n      if (isEmpty(nextValue)) {\n        return DO_NOT_SWAP;\n      }\n\n      // Just fist value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isEmpty(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n\n      return FIRST_BEFORE_SECOND;\n    }\n\n    const firstDate = moment(value, format);\n    const nextDate = moment(nextValue, format);\n\n    if (!firstDate.isValid()) {\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (!nextDate.isValid()) {\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (nextDate.isAfter(firstDate)) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (nextDate.isBefore(firstDate)) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n","import {\n  registerRootComparator,\n  getRootComparator,\n  getCompareFunctionFactory\n} from './registry';\n\nimport {\n  FIRST_AFTER_SECOND,\n  FIRST_BEFORE_SECOND,\n  DO_NOT_SWAP,\n  sort\n} from './engine';\n\nexport {\n  registerRootComparator,\n  getRootComparator,\n  getCompareFunctionFactory,\n  FIRST_AFTER_SECOND,\n  FIRST_BEFORE_SECOND,\n  DO_NOT_SWAP,\n  sort\n};\n","import { compareFunctionFactory as defaultSort, COLUMN_DATA_TYPE as DEFAULT_DATA_TYPE } from '../sortFunction/default';\nimport { compareFunctionFactory as numericSort, COLUMN_DATA_TYPE as NUMERIC_DATA_TYPE } from '../sortFunction/numeric';\nimport {\n  compareFunctionFactory as checkboxSort,\n  COLUMN_DATA_TYPE as CHECKBOX_DATA_TYPE\n} from '../sortFunction/checkbox';\nimport { compareFunctionFactory as dateSort, COLUMN_DATA_TYPE as DATE_DATA_TYPE } from '../sortFunction/date';\nimport { compareFunctionFactory as timeSort, COLUMN_DATA_TYPE as TIME_DATA_TYPE } from '../sortFunction/time';\nimport staticRegister from '../../../utils/staticRegister';\n\nconst {\n  register: registerCompareFunctionFactory,\n  getItem: getGloballyCompareFunctionFactory,\n  hasItem: hasGloballyCompareFunctionFactory,\n} = staticRegister('sorting.compareFunctionFactory');\n\nconst {\n  register: registerRootComparator,\n  getItem: getRootComparator,\n} = staticRegister('sorting.mainSortComparator');\n\n/**\n * Gets sort function for the particular column basing on it's data type.\n *\n * @param {string} type The data type.\n * @returns {Function}\n */\nexport function getCompareFunctionFactory(type) {\n  if (hasGloballyCompareFunctionFactory(type)) {\n    return getGloballyCompareFunctionFactory(type);\n  }\n\n  return getGloballyCompareFunctionFactory(DEFAULT_DATA_TYPE);\n}\n\nregisterCompareFunctionFactory(CHECKBOX_DATA_TYPE, checkboxSort);\nregisterCompareFunctionFactory(DATE_DATA_TYPE, dateSort);\nregisterCompareFunctionFactory(DEFAULT_DATA_TYPE, defaultSort);\nregisterCompareFunctionFactory(NUMERIC_DATA_TYPE, numericSort);\nregisterCompareFunctionFactory(TIME_DATA_TYPE, timeSort);\n\nexport {\n  registerRootComparator,\n  getRootComparator\n};\n","import { isEmpty } from '../../../helpers/mixed';\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from '../sortService';\n\n/**\n * Default sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  const locale = columnMeta.locale;\n\n  return function(value, nextValue) {\n    const { sortEmptyCells } = columnPluginSettings;\n\n    if (typeof value === 'string') {\n      value = value.toLocaleLowerCase(locale);\n    }\n\n    if (typeof nextValue === 'string') {\n      nextValue = nextValue.toLocaleLowerCase(locale);\n    }\n\n    if (value === nextValue) {\n      return DO_NOT_SWAP;\n    }\n\n    if (isEmpty(value)) {\n      if (isEmpty(nextValue)) {\n        return DO_NOT_SWAP;\n      }\n\n      // Just fist value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isEmpty(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (isNaN(value) && !isNaN(nextValue)) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n\n    } else if (!isNaN(value) && isNaN(nextValue)) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n\n    } else if (!(isNaN(value) || isNaN(nextValue))) {\n      value = parseFloat(value);\n      nextValue = parseFloat(nextValue);\n    }\n\n    if (value < nextValue) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (value > nextValue) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n\nexport const COLUMN_DATA_TYPE = 'default';\n","import { isEmpty } from '../../../helpers/mixed';\nimport { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from '../sortService';\n\n/**\n * Numeric sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return function(value, nextValue) {\n    const parsedFirstValue = parseFloat(value);\n    const parsedSecondValue = parseFloat(nextValue);\n    const { sortEmptyCells } = columnPluginSettings;\n\n    // Watch out when changing this part of code! Check below returns 0 (as expected) when comparing empty string, null, undefined\n    if (parsedFirstValue === parsedSecondValue || (isNaN(parsedFirstValue) && isNaN(parsedSecondValue))) {\n      return DO_NOT_SWAP;\n    }\n\n    if (sortEmptyCells) {\n      if (isEmpty(value)) {\n        return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n      }\n\n      if (isEmpty(nextValue)) {\n        return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n      }\n    }\n\n    if (isNaN(parsedFirstValue)) {\n      return FIRST_AFTER_SECOND;\n    }\n\n    if (isNaN(parsedSecondValue)) {\n      return FIRST_BEFORE_SECOND;\n    }\n\n    if (parsedFirstValue < parsedSecondValue) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n\n    } else if (parsedFirstValue > parsedSecondValue) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n\nexport const COLUMN_DATA_TYPE = 'numeric';\n","import { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from '../sortService';\nimport { compareFunctionFactory as defaultCompareFunctionFactory } from '../sortFunction/default';\nimport { isEmpty } from '../../../helpers/mixed';\n\n/**\n * Checkbox sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  const checkedTemplate = columnMeta.checkedTemplate;\n  const uncheckedTemplate = columnMeta.uncheckedTemplate;\n  const { sortEmptyCells } = columnPluginSettings;\n\n  return function(value, nextValue) {\n    const isEmptyValue = isEmpty(value);\n    const isEmptyNextValue = isEmpty(nextValue);\n    const unifiedValue = isEmptyValue ? uncheckedTemplate : value;\n    const unifiedNextValue = isEmptyNextValue ? uncheckedTemplate : nextValue;\n    const isValueFromTemplate = unifiedValue === uncheckedTemplate || unifiedValue === checkedTemplate;\n    const isNextValueFromTemplate = unifiedNextValue === uncheckedTemplate || unifiedNextValue === checkedTemplate;\n\n    // As an empty cell we recognize cells with undefined, null and '' values.\n    if (sortEmptyCells === false) {\n      if (isEmptyValue && isEmptyNextValue === false) {\n        return FIRST_AFTER_SECOND;\n      }\n\n      if (isEmptyValue === false && isEmptyNextValue) {\n        return FIRST_BEFORE_SECOND;\n      }\n    }\n\n    // 1st value === #BAD_VALUE#\n    if (isValueFromTemplate === false && isNextValueFromTemplate) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    // 2nd value === #BAD_VALUE#\n    if (isValueFromTemplate && isNextValueFromTemplate === false) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    // 1st value === #BAD_VALUE# && 2nd value === #BAD_VALUE#\n    if (isValueFromTemplate === false && isNextValueFromTemplate === false) {\n      // Sorting by values (not just by visual representation).\n      return defaultCompareFunctionFactory(sortOrder, columnMeta, columnPluginSettings)(value, nextValue);\n    }\n\n    if (unifiedValue === uncheckedTemplate && unifiedNextValue === checkedTemplate) {\n      return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;\n    }\n\n    if (unifiedValue === checkedTemplate && unifiedNextValue === uncheckedTemplate) {\n      return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;\n    }\n\n    return DO_NOT_SWAP;\n  };\n}\n\nexport const COLUMN_DATA_TYPE = 'checkbox';\n","import { createDateTimeCompareFunction } from '../utils';\n\n/**\n * Date sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return createDateTimeCompareFunction(sortOrder, columnMeta.dateFormat, columnPluginSettings);\n}\n\nexport const COLUMN_DATA_TYPE = 'date';\n","import { createDateTimeCompareFunction } from '../utils';\n\n/**\n * Date sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.\n *\n * @param {string} sortOrder Sort order (`asc` for ascending, `desc` for descending).\n * @param {object} columnMeta Column meta object.\n * @param {object} columnPluginSettings Plugin settings for the column.\n * @returns {Function} The compare function.\n */\nexport function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {\n  return createDateTimeCompareFunction(sortOrder, columnMeta.timeFormat, columnPluginSettings);\n}\n\nexport const COLUMN_DATA_TYPE = 'time';\n","import { getRootComparator } from './registry';\n\nexport const DO_NOT_SWAP = 0;\nexport const FIRST_BEFORE_SECOND = -1;\nexport const FIRST_AFTER_SECOND = 1;\n\n/**\n * @param {Array} indexesWithData The data to sort.\n * @param {string} rootComparatorId The comparator logic to use.\n * @param {Array} argsForRootComparator Additional arguments for comparator function.\n */\nexport function sort(indexesWithData, rootComparatorId, ...argsForRootComparator) {\n  const rootComparator = getRootComparator(rootComparatorId);\n\n  indexesWithData.sort(rootComparator(...argsForRootComparator));\n}\n","import { isDefined } from '../../helpers/mixed';\nimport { ASC_SORT_STATE, DESC_SORT_STATE } from './utils';\n\nconst HEADER_CLASS_ASC_SORT = 'ascending';\nconst HEADER_CLASS_DESC_SORT = 'descending';\nconst HEADER_CLASS_INDICATOR_DISABLED = 'indicatorDisabled';\nconst HEADER_SORT_CLASS = 'columnSorting';\nconst HEADER_ACTION_CLASS = 'sortAction';\n\nconst orderToCssClass = new Map([\n  [ASC_SORT_STATE, HEADER_CLASS_ASC_SORT],\n  [DESC_SORT_STATE, HEADER_CLASS_DESC_SORT]\n]);\n\n/**\n * Get CSS classes which should be added to particular column header.\n *\n * @param {object} columnStatesManager Instance of column state manager.\n * @param {number} column Visual column index.\n * @param {boolean} showSortIndicator Indicates if indicator should be shown for the particular column.\n * @param {boolean} headerAction Indicates if header click to sort should be possible.\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToAdd(columnStatesManager, column, showSortIndicator, headerAction) {\n  const cssClasses = [HEADER_SORT_CLASS];\n\n  if (headerAction) {\n    cssClasses.push(HEADER_ACTION_CLASS);\n  }\n\n  if (showSortIndicator === false) {\n    cssClasses.push(HEADER_CLASS_INDICATOR_DISABLED);\n\n    return cssClasses;\n  }\n\n  const columnOrder = columnStatesManager.getSortOrderOfColumn(column);\n\n  if (isDefined(columnOrder)) {\n    cssClasses.push(orderToCssClass.get(columnOrder));\n  }\n\n  return cssClasses;\n}\n\n/**\n * Get CSS classes which should be removed from column header.\n *\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToRemove() {\n  return Array.from(orderToCssClass.values())\n    .concat(HEADER_ACTION_CLASS, HEADER_CLASS_INDICATOR_DISABLED, HEADER_SORT_CLASS);\n}\n","import { getCompareFunctionFactory } from './sortService';\n\n/**\n * Sort comparator handled by conventional sort algorithm.\n *\n * @param {Array} sortingOrders Sort orders (`asc` for ascending, `desc` for descending).\n * @param {Array} columnMetas Column meta objects.\n * @returns {Function}\n */\nexport function rootComparator(sortingOrders, columnMetas) {\n  return function(rowIndexWithValues, nextRowIndexWithValues) {\n    // We sort array of arrays. Single array is in form [rowIndex, ...values].\n    // We compare just values, stored at second index of array.\n    const [, ...values] = rowIndexWithValues;\n    const [, ...nextValues] = nextRowIndexWithValues;\n\n    return (function getCompareResult(column) {\n      const sortingOrder = sortingOrders[column];\n      const columnMeta = columnMetas[column];\n      const value = values[column];\n      const nextValue = nextValues[column];\n      const pluginSettings = columnMeta.columnSorting;\n      const compareFunctionFactory = pluginSettings.compareFunctionFactory ?\n        pluginSettings.compareFunctionFactory : getCompareFunctionFactory(columnMeta.type);\n      const compareResult = compareFunctionFactory(sortingOrder, columnMeta, pluginSettings)(value, nextValue);\n\n      // DIFF - MultiColumnSorting & ColumnSorting: removed iteration through next sorted columns.\n\n      return compareResult;\n    }(0));\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ColumnSummary,\n} from './columnSummary';\n","import { BasePlugin } from '../base';\nimport { objectEach } from '../../helpers/object';\nimport Endpoints from './endpoints';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport { isNullishOrNaN } from './utils';\n\nexport const PLUGIN_KEY = 'columnSummary';\nexport const PLUGIN_PRIORITY = 220;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ColumnSummary\n * @class ColumnSummary\n *\n * @description\n * The `ColumnSummary` plugin lets you [easily summarize your columns](@/guides/columns/column-summary/column-summary.md).\n *\n * You can use the [built-in summary functions](@/guides/columns/column-summary/column-summary.md#built-in-summary-functions),\n * or implement a [custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function).\n *\n * For each column summary, you can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `sourceColumn` | No | Number | Same as `destinationColumn` | [Selects a column to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize) |\n * | `ranges` | No | Array | - | [Selects ranges of rows to summarize](@/guides/columns/column-summary/column-summary.md#step-2-select-cells-that-you-want-to-summarize) |\n * | `type` | Yes | String | - | [Sets a summary function](@/guides/columns/column-summary/column-summary.md#step-3-calculate-your-summary) |\n * | `destinationRow` | Yes | Number | - | [Sets the destination cell's row coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n * | `destinationColumn` | Yes | Number | - | [Sets the destination cell's column coordinate](@/guides/columns/column-summary/column-summary.md#step-4-provide-the-destination-cell-s-coordinates) |\n * | `forceNumeric` | No | Boolean | `false` | [Forces the summary to treat non-numerics as numerics](@/guides/columns/column-summary/column-summary.md#force-numeric-values) |\n * | `reversedRowCoords` | No | Boolean | `false` | [Reverses row coordinates](@/guides/columns/column-summary/column-summary.md#step-5-make-room-for-the-destination-cell) |\n * | `suppressDataTypeErrors` | No | Boolean | `true` | [Suppresses data type errors](@/guides/columns/column-summary/column-summary.md#throw-data-type-errors) |\n * | `readOnly` | No | Boolean | `true` | Makes summary cell read-only |\n * | `roundFloat` | No | Number/<br>Boolean | - | [Rounds summary result](@/guides/columns/column-summary/column-summary.md#round-a-column-summary-result) |\n * | `customFunction` | No | Function | - | [Lets you add a custom summary function](@/guides/columns/column-summary/column-summary.md#implement-a-custom-summary-function) |\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   columnSummary: [\n *     {\n *       type: 'min',\n *       destinationRow: 4,\n *       destinationColumn: 1,\n *     },\n *     {\n *       type: 'max',\n *       destinationRow: 0,\n *       destinationColumn: 3,\n *       reversedRowCoords: true\n *     },\n *     {\n *       type: 'sum',\n *       destinationRow: 4,\n *       destinationColumn: 5,\n *       forceNumeric: true\n *     }\n *   ]\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   columnSummary={[\n *     {\n *       type: 'min',\n *       destinationRow: 4,\n *       destinationColumn: 1,\n *     },\n *     {\n *       type: 'max',\n *       destinationRow: 0,\n *       destinationColumn: 3,\n *       reversedRowCoords: true\n *     },\n *     {\n *       type: 'sum',\n *       destinationRow: 4,\n *       destinationColumn: 5,\n *       forceNumeric: true\n *     }\n *   ]}\n * />\n * ```\n * :::\n */\nexport class ColumnSummary extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * The Endpoints class instance. Used to make all endpoint-related operations.\n   *\n   * @private\n   * @type {null|Endpoints}\n   */\n  endpoints = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ColumnSummary#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.settings = this.hot.getSettings()[PLUGIN_KEY];\n    this.endpoints = new Endpoints(this, this.settings);\n\n    this.addHook('afterInit', (...args) => this.#onAfterInit(...args));\n    this.addHook('afterChange', (...args) => this.#onAfterChange(...args));\n    this.addHook('afterUpdateSettings', (...args) => this.#onAfterUpdateSettings(...args));\n\n    this.addHook('beforeCreateRow', (index, amount, source) => this.endpoints.resetSetupBeforeStructureAlteration('insert_row', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('beforeCreateCol', (index, amount, source) => this.endpoints.resetSetupBeforeStructureAlteration('insert_col', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('beforeRemoveRow',\n      (...args) => this.endpoints.resetSetupBeforeStructureAlteration('remove_row', ...args));\n    this.addHook('beforeRemoveCol',\n      (...args) => this.endpoints.resetSetupBeforeStructureAlteration('remove_col', ...args));\n\n    this.addHook('afterCreateRow', (index, amount, source) => this.endpoints.resetSetupAfterStructureAlteration('insert_row', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('afterCreateCol', (index, amount, source) => this.endpoints.resetSetupAfterStructureAlteration('insert_col', index, amount, null, source)); // eslint-disable-line max-len\n    this.addHook('afterRemoveRow',\n      (...args) => this.endpoints.resetSetupAfterStructureAlteration('remove_row', ...args));\n    this.addHook('afterRemoveCol',\n      (...args) => this.endpoints.resetSetupAfterStructureAlteration('remove_col', ...args));\n    this.addHook('afterRowMove', (...args) => this.#onAfterRowMove(...args));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.endpoints = null;\n    this.settings = null;\n    this.currentEndpoint = null;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`columnSummary`](@/api/options.md#columnsummary)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.endpoints.initEndpoints();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Calculates math for a single endpoint.\n   *\n   * @private\n   * @param {object} endpoint Contains information about the endpoint.\n   */\n  calculate(endpoint) {\n    switch (endpoint.type.toLowerCase()) {\n      case 'sum':\n        endpoint.result = this.calculateSum(endpoint);\n        break;\n      case 'min':\n        endpoint.result = this.calculateMinMax(endpoint, endpoint.type);\n        break;\n      case 'max':\n        endpoint.result = this.calculateMinMax(endpoint, endpoint.type);\n        break;\n      case 'count':\n        endpoint.result = this.countEntries(endpoint);\n        break;\n      case 'average':\n        endpoint.result = this.calculateAverage(endpoint);\n        break;\n      case 'custom':\n        endpoint.result = endpoint.customFunction.call(this, endpoint);\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Calculates sum of the values contained in ranges provided in the plugin config.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @returns {number} Sum for the selected range.\n   */\n  calculateSum(endpoint) {\n    let sum = 0;\n\n    objectEach(endpoint.ranges, (range) => {\n      sum += this.getPartialSum(range, endpoint.sourceColumn);\n    });\n\n    return sum;\n  }\n\n  /**\n   * Returns partial sum of values from a single row range.\n   *\n   * @private\n   * @param {Array} rowRange Range for the sum.\n   * @param {number} col Column index.\n   * @returns {number} The partial sum.\n   */\n  getPartialSum(rowRange, col) {\n    let sum = 0;\n    let i = rowRange[1] || rowRange[0];\n    let cellValue = null;\n    let biggestDecimalPlacesCount = 0;\n\n    do {\n      cellValue = this.getCellValue(i, col);\n      cellValue = isNullishOrNaN(cellValue) ? null : cellValue;\n\n      if (cellValue !== null) {\n        const decimalPlaces = (((`${cellValue}`).split('.')[1] || []).length) || 1;\n\n        if (decimalPlaces > biggestDecimalPlacesCount) {\n          biggestDecimalPlacesCount = decimalPlaces;\n        }\n      }\n\n      sum += cellValue || 0;\n      i -= 1;\n    } while (i >= rowRange[0]);\n\n    // Workaround for e.g. 802.2 + 1.1 = 803.3000000000001\n    return Math.round(sum * (10 ** biggestDecimalPlacesCount)) / (10 ** biggestDecimalPlacesCount);\n  }\n\n  /**\n   * Calculates the minimal value for the selected ranges.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @param {string} type `'min'` or `'max'`.\n   * @returns {number} Min or Max value.\n   */\n  calculateMinMax(endpoint, type) {\n    let result = null;\n\n    objectEach(endpoint.ranges, (range) => {\n      const partialResult = this.getPartialMinMax(range, endpoint.sourceColumn, type);\n\n      if (result === null && partialResult !== null) {\n        result = partialResult;\n      }\n\n      if (partialResult !== null) {\n        switch (type) {\n          case 'min':\n            result = Math.min(result, partialResult);\n            break;\n          case 'max':\n            result = Math.max(result, partialResult);\n            break;\n          default:\n            break;\n        }\n      }\n    });\n\n    return result === null ? 'Not enough data' : result;\n  }\n\n  /**\n   * Returns a local minimum of the provided sub-range.\n   *\n   * @private\n   * @param {Array} rowRange Range for the calculation.\n   * @param {number} col Column index.\n   * @param {string} type `'min'` or `'max'`.\n   * @returns {number|null} Min or max value.\n   */\n  getPartialMinMax(rowRange, col, type) {\n    let result = null;\n    let i = rowRange[1] || rowRange[0];\n    let cellValue;\n\n    do {\n      cellValue = this.getCellValue(i, col);\n      cellValue = isNullishOrNaN(cellValue) ? null : cellValue;\n\n      if (result === null) {\n        result = cellValue;\n      } else if (cellValue !== null) {\n        switch (type) {\n          case 'min':\n            result = Math.min(result, cellValue);\n            break;\n          case 'max':\n            result = Math.max(result, cellValue);\n            break;\n          default:\n            break;\n        }\n\n      }\n\n      i -= 1;\n    } while (i >= rowRange[0]);\n\n    return result;\n  }\n\n  /**\n   * Counts empty cells in the provided row range.\n   *\n   * @private\n   * @param {Array} rowRange Row range for the calculation.\n   * @param {number} col Column index.\n   * @returns {number} Empty cells count.\n   */\n  countEmpty(rowRange, col) {\n    let cellValue;\n    let counter = 0;\n    let i = rowRange[1] || rowRange[0];\n\n    do {\n      cellValue = this.getCellValue(i, col);\n      cellValue = isNullishOrNaN(cellValue) ? null : cellValue;\n\n      if (cellValue === null) {\n        counter += 1;\n      }\n\n      i -= 1;\n    } while (i >= rowRange[0]);\n\n    return counter;\n  }\n\n  /**\n   * Counts non-empty cells in the provided row range.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @returns {number} Entry count.\n   */\n  countEntries(endpoint) {\n    let result = 0;\n    const ranges = endpoint.ranges;\n\n    objectEach(ranges, (range) => {\n      const partial = range[1] === undefined ? 1 : range[1] - range[0] + 1;\n      const emptyCount = this.countEmpty(range, endpoint.sourceColumn);\n\n      result += partial;\n      result -= emptyCount;\n    });\n\n    return result;\n  }\n\n  /**\n   * Calculates the average value from the cells in the range.\n   *\n   * @private\n   * @param {object} endpoint Contains the endpoint information.\n   * @returns {number} Avarage value.\n   */\n  calculateAverage(endpoint) {\n    const sum = this.calculateSum(endpoint);\n    const entriesCount = this.countEntries(endpoint);\n\n    return sum / entriesCount;\n  }\n\n  /**\n   * Returns a cell value, taking into consideration a basic validation.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @param {number} col Column index.\n   * @returns {string} The cell value.\n   */\n  getCellValue(row, col) {\n    const visualRowIndex = this.hot.toVisualRow(row);\n    const visualColumnIndex = this.hot.toVisualColumn(col);\n\n    let cellValue = this.hot.getSourceDataAtCell(row, col);\n    let cellClassName = '';\n\n    if (visualRowIndex !== null && visualColumnIndex !== null) {\n      cellClassName = this.hot.getCellMeta(visualRowIndex, visualColumnIndex).className || '';\n    }\n\n    if (cellClassName.indexOf('columnSummaryResult') > -1) {\n      return null;\n    }\n\n    if (this.endpoints.currentEndpoint.forceNumeric) {\n      if (typeof cellValue === 'string') {\n        cellValue = cellValue.replace(/,/, '.');\n      }\n\n      cellValue = parseFloat(cellValue);\n    }\n\n    if (isNaN(cellValue)) {\n      if (!this.endpoints.currentEndpoint.suppressDataTypeErrors) {\n        throw new Error(toSingleLine`ColumnSummary plugin: cell at (${row}, ${col}) is not in a\\x20\n          numeric format. Cannot do the calculation.`);\n      }\n    }\n\n    return cellValue;\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.endpoints.initEndpoints();\n  }\n\n  /**\n   * Called after the settings were updated. There is a need to refresh cell metas after the settings update with\n   * the `columns` property as the Core resets the cell metas to their initial state.\n   *\n   * @param {object} settings The settings object.\n   */\n  #onAfterUpdateSettings(settings) {\n    if (settings.columns !== undefined) {\n      this.endpoints.refreshCellMetas();\n    }\n  }\n\n  /**\n   * `afterChange` hook callback.\n   *\n   * @param {Array} changes 2D array containing information about each of the edited cells.\n   * @param {string} source The string that identifies source of changes.\n   */\n  #onAfterChange(changes, source) {\n    if (changes && source !== 'ColumnSummary.reset' && source !== 'ColumnSummary.set' && source !== 'loadData') {\n      this.endpoints.refreshChangedEndpoints(changes);\n    }\n  }\n\n  /**\n   * `beforeRowMove` hook callback.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md).\n   */\n  #onAfterRowMove(rows, finalIndex) {\n    this.endpoints.resetSetupBeforeStructureAlteration('move_row', rows[0], rows.length, rows, this.pluginName);\n    this.endpoints.resetSetupAfterStructureAlteration('move_row', finalIndex, rows.length, rows, this.pluginName);\n  }\n}\n","import { arrayEach } from '../../helpers/array';\nimport { warn } from '../../helpers/console';\n\n/**\n * Class used to make all endpoint-related operations.\n *\n * @private\n * @class Endpoints\n */\nclass Endpoints {\n  /**\n   * The main plugin instance.\n   */\n  plugin;\n  /**\n   * Handsontable instance.\n   *\n   * @type {object}\n   */\n  hot;\n  /**\n   * Array of declared plugin endpoints (calculation destination points).\n   *\n   * @type {Array}\n   * @default {Array} Empty array.\n   */\n  endpoints = [];\n  /**\n   * The plugin settings, taken from Handsontable configuration.\n   *\n   * @type {object|Function}\n   * @default null\n   */\n  settings;\n  /**\n   * Settings type. Can be either 'array' or 'function'.\n   *\n   * @type {string}\n   * @default {'array'}\n   */\n  settingsType = 'array';\n  /**\n   * The current endpoint (calculation destination point) in question.\n   *\n   * @type {object}\n   * @default null\n   */\n  currentEndpoint = null;\n  /**\n   * Array containing a list of changes to be applied.\n   *\n   * @private\n   * @type {Array}\n   * @default {[]}\n   */\n  cellsToSetCache = [];\n\n  constructor(plugin, settings) {\n    this.plugin = plugin;\n    this.hot = this.plugin.hot;\n    this.settings = settings;\n  }\n\n  /**\n   * Initialize the endpoints provided in the settings.\n   */\n  initEndpoints() {\n    this.endpoints = this.parseSettings();\n    this.refreshAllEndpoints();\n  }\n\n  /**\n   * Get a single endpoint object.\n   *\n   * @param {number} index Index of the endpoint.\n   * @returns {object}\n   */\n  getEndpoint(index) {\n    if (this.settingsType === 'function') {\n      return this.fillMissingEndpointData(this.settings)[index];\n    }\n\n    return this.endpoints[index];\n  }\n\n  /**\n   * Get an array with all the endpoints.\n   *\n   * @returns {Array}\n   */\n  getAllEndpoints() {\n    if (this.settingsType === 'function') {\n      return this.fillMissingEndpointData(this.settings);\n    }\n\n    return this.endpoints;\n  }\n\n  /**\n   * Used to fill the blanks in the endpoint data provided by a settings function.\n   *\n   * @private\n   * @param {Function} func Function provided in the HOT settings.\n   * @returns {Array} An array of endpoints.\n   */\n  fillMissingEndpointData(func) {\n    return this.parseSettings(func.call(this));\n  }\n\n  /**\n   * Parse plugin's settings.\n   *\n   * @param {Array} settings The settings array.\n   * @returns {object[]}\n   */\n  parseSettings(settings) {\n    const endpointsArray = [];\n    let settingsArray = settings;\n\n    if (!settingsArray && typeof this.settings === 'function') {\n      this.settingsType = 'function';\n\n      return;\n    }\n\n    if (!settingsArray) {\n      settingsArray = this.settings;\n    }\n\n    arrayEach(settingsArray, (val) => {\n      const newEndpoint = {};\n\n      this.assignSetting(val, newEndpoint, 'ranges', [[0, this.hot.countRows() - 1]]);\n      this.assignSetting(val, newEndpoint, 'reversedRowCoords', false);\n      this.assignSetting(val, newEndpoint, 'destinationRow', new Error(`\n        You must provide a destination row for the Column Summary plugin in order to work properly!\n      `));\n      this.assignSetting(val, newEndpoint, 'destinationColumn', new Error(`\n        You must provide a destination column for the Column Summary plugin in order to work properly!\n      `));\n      this.assignSetting(val, newEndpoint, 'sourceColumn', val.destinationColumn);\n      this.assignSetting(val, newEndpoint, 'type', 'sum');\n      this.assignSetting(val, newEndpoint, 'forceNumeric', false);\n      this.assignSetting(val, newEndpoint, 'suppressDataTypeErrors', true);\n      this.assignSetting(val, newEndpoint, 'customFunction', null);\n      this.assignSetting(val, newEndpoint, 'readOnly', true);\n      this.assignSetting(val, newEndpoint, 'roundFloat', false);\n\n      endpointsArray.push(newEndpoint);\n    });\n\n    return endpointsArray;\n  }\n\n  /**\n   * Setter for the internal setting objects.\n   *\n   * @param {object} settings Object with the settings.\n   * @param {object} endpoint Contains information about the endpoint for the the calculation.\n   * @param {string} name Settings name.\n   * @param {object} defaultValue Default value for the settings.\n   */\n  assignSetting(settings, endpoint, name, defaultValue) {\n    if (name === 'ranges' && settings[name] === undefined) {\n      endpoint[name] = defaultValue;\n\n      return;\n    } else if (name === 'ranges' && settings[name].length === 0) {\n      return;\n    }\n\n    if (settings[name] === undefined) {\n      if (defaultValue instanceof Error) {\n        throw defaultValue;\n\n      }\n\n      endpoint[name] = defaultValue;\n\n    } else {\n      /* eslint-disable no-lonely-if */\n      if (name === 'destinationRow' && endpoint.reversedRowCoords) {\n        endpoint[name] = this.hot.countRows() - settings[name] - 1;\n\n      } else {\n        endpoint[name] = settings[name];\n      }\n    }\n  }\n\n  /**\n   * Resets the endpoint setup before the structure alteration (like inserting or removing rows/columns). Used for settings provided as a function.\n   *\n   * @private\n   * @param {string} action Type of the action performed.\n   * @param {number} index Row/column index.\n   * @param {number} number Number of rows/columns added/removed.\n   */\n  resetSetupBeforeStructureAlteration(action, index, number) {\n    if (this.settingsType !== 'function') {\n      return;\n    }\n\n    const type = action.indexOf('row') > -1 ? 'row' : 'col';\n    const endpoints = this.getAllEndpoints();\n\n    arrayEach(endpoints, (val) => {\n      if (type === 'row' && val.destinationRow >= index) {\n        if (action === 'insert_row') {\n          val.alterRowOffset = number;\n        } else if (action === 'remove_row') {\n          val.alterRowOffset = (-1) * number;\n        }\n      }\n\n      if (type === 'col' && val.destinationColumn >= index) {\n        if (action === 'insert_col') {\n          val.alterColumnOffset = number;\n        } else if (action === 'remove_col') {\n          val.alterColumnOffset = (-1) * number;\n        }\n      }\n    });\n\n    this.resetAllEndpoints(endpoints, false);\n  }\n\n  /**\n   * AfterCreateRow/afterCreateRow/afterRemoveRow/afterRemoveCol hook callback. Reset and reenables the summary functionality\n   * after changing the table structure.\n   *\n   * @private\n   * @param {string} action Type of the action performed.\n   * @param {number} index Row/column index.\n   * @param {number} number Number of rows/columns added/removed.\n   * @param {Array} [logicRows] Array of the logical indexes.\n   * @param {string} [source] Source of change.\n   * @param {boolean} [forceRefresh] `true` of the endpoints should refresh after completing the function.\n   */\n  resetSetupAfterStructureAlteration(action, index, number, logicRows, source, forceRefresh = true) {\n    if (this.settingsType === 'function') {\n\n      // We need to run it on a next avaiable hook, because the TrimRows' `afterCreateRow` hook triggers after this one,\n      // and it needs to be run to properly calculate the endpoint value.\n      const beforeViewRenderCallback = () => {\n        this.hot.removeHook('beforeViewRender', beforeViewRenderCallback);\n\n        return this.refreshAllEndpoints();\n      };\n\n      this.hot.addHookOnce('beforeViewRender', beforeViewRenderCallback);\n\n      return;\n    }\n\n    const type = action.indexOf('row') > -1 ? 'row' : 'col';\n    const multiplier = action.indexOf('remove') > -1 ? -1 : 1;\n    const endpoints = this.getAllEndpoints();\n    const rowMoving = action.indexOf('move_row') === 0;\n    const placeOfAlteration = index;\n\n    arrayEach(endpoints, (val) => {\n      if (type === 'row' && val.destinationRow >= placeOfAlteration) {\n        val.alterRowOffset = multiplier * number;\n      }\n\n      if (type === 'col' && val.destinationColumn >= placeOfAlteration) {\n        val.alterColumnOffset = multiplier * number;\n      }\n    });\n\n    this.resetAllEndpoints(endpoints, !rowMoving);\n\n    if (rowMoving) {\n      arrayEach(endpoints, (endpoint) => {\n        this.extendEndpointRanges(endpoint, placeOfAlteration, logicRows[0], logicRows.length);\n        this.recreatePhysicalRanges(endpoint);\n        this.clearOffsetInformation(endpoint);\n      });\n\n    } else {\n      arrayEach(endpoints, (endpoint) => {\n        this.shiftEndpointCoordinates(endpoint, placeOfAlteration);\n      });\n    }\n\n    if (forceRefresh) {\n      this.refreshAllEndpoints();\n    }\n  }\n\n  /**\n   * Clear the offset information from the endpoint object.\n   *\n   * @private\n   * @param {object} endpoint And endpoint object.\n   */\n  clearOffsetInformation(endpoint) {\n    endpoint.alterRowOffset = undefined;\n    endpoint.alterColumnOffset = undefined;\n  }\n\n  /**\n   * Extend the row ranges for the provided endpoint.\n   *\n   * @private\n   * @param {object} endpoint The endpoint object.\n   * @param {number} placeOfAlteration Index of the row where the alteration takes place.\n   * @param {number} previousPosition Previous endpoint result position.\n   * @param {number} offset Offset generated by the alteration.\n   */\n  extendEndpointRanges(endpoint, placeOfAlteration, previousPosition, offset) {\n    arrayEach(endpoint.ranges, (range) => {\n      // is a range, not a single row\n      if (range[1]) {\n\n        if (placeOfAlteration >= range[0] && placeOfAlteration <= range[1]) {\n          if (previousPosition > range[1]) {\n            range[1] += offset;\n          } else if (previousPosition < range[0]) {\n            range[0] -= offset;\n          }\n        } else if (previousPosition >= range[0] && previousPosition <= range[1]) {\n          range[1] -= offset;\n\n          if (placeOfAlteration <= range[0]) {\n            range[0] += 1;\n            range[1] += 1;\n          }\n        }\n      }\n    });\n  }\n\n  /**\n   * Recreate the physical ranges for the provided endpoint. Used (for example) when a row gets moved and extends an existing range.\n   *\n   * @private\n   * @param {object} endpoint An endpoint object.\n   */\n  recreatePhysicalRanges(endpoint) {\n    const ranges = endpoint.ranges;\n    const newRanges = [];\n    const allIndexes = [];\n\n    arrayEach(ranges, (range) => {\n      const newRange = [];\n\n      if (range[1]) {\n        for (let i = range[0]; i <= range[1]; i++) {\n          newRange.push(this.hot.toPhysicalRow(i));\n        }\n      } else {\n        newRange.push(this.hot.toPhysicalRow(range[0]));\n      }\n\n      allIndexes.push(newRange);\n    });\n\n    arrayEach(allIndexes, (range) => {\n      let newRange = [];\n\n      arrayEach(range, (coord, index) => {\n        if (index === 0) {\n          newRange.push(coord);\n\n        } else if (range[index] !== range[index - 1] + 1) {\n          newRange.push(range[index - 1]);\n          newRanges.push(newRange);\n          newRange = [];\n          newRange.push(coord);\n        }\n\n        if (index === range.length - 1) {\n          newRange.push(coord);\n          newRanges.push(newRange);\n        }\n      });\n    });\n\n    endpoint.ranges = newRanges;\n  }\n\n  /**\n   * Shifts the endpoint coordinates by the defined offset.\n   *\n   * @private\n   * @param {object} endpoint Endpoint object.\n   * @param {number} offsetStartIndex Index of the performed change (if the change is located after the endpoint, nothing about the endpoint has to be changed.\n   */\n  shiftEndpointCoordinates(endpoint, offsetStartIndex) {\n    if (endpoint.alterRowOffset && endpoint.alterRowOffset !== 0) {\n      endpoint.destinationRow += endpoint.alterRowOffset || 0;\n\n      arrayEach(endpoint.ranges, (element) => {\n        arrayEach(element, (subElement, j) => {\n          if (subElement >= offsetStartIndex) {\n            element[j] += endpoint.alterRowOffset || 0;\n          }\n        });\n      });\n\n    } else if (endpoint.alterColumnOffset && endpoint.alterColumnOffset !== 0) {\n      endpoint.destinationColumn += endpoint.alterColumnOffset || 0;\n      endpoint.sourceColumn += endpoint.alterColumnOffset || 0;\n    }\n  }\n\n  /**\n   * Resets (removes) the endpoints from the table.\n   *\n   * @param {Array} [endpoints] Array containing the endpoints.\n   * @param {boolean} [useOffset=true] Use the cell offset value.\n   */\n  resetAllEndpoints(endpoints = this.getAllEndpoints(), useOffset = true) {\n    const anyEndpointOutOfRange = endpoints.some((endpoint) => {\n      const alterRowOffset = endpoint.alterRowOffset || 0;\n      const alterColOffset = endpoint.alterColumnOffset || 0;\n\n      if (endpoint.destinationRow + alterRowOffset >= this.hot.countRows() ||\n          endpoint.destinationColumn + alterColOffset >= this.hot.countCols()) {\n        return true;\n      }\n\n      return false;\n    });\n\n    if (anyEndpointOutOfRange) {\n      return;\n    }\n\n    this.cellsToSetCache = [];\n\n    arrayEach(endpoints, (endpoint) => {\n      this.resetEndpointValue(endpoint, useOffset);\n    });\n\n    this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n\n    this.cellsToSetCache = [];\n  }\n\n  /**\n   * Calculate and refresh all defined endpoints.\n   */\n  refreshAllEndpoints() {\n    this.cellsToSetCache = [];\n\n    arrayEach(this.getAllEndpoints(), (value) => {\n      this.currentEndpoint = value;\n      this.plugin.calculate(value);\n      this.setEndpointValue(value, 'init');\n    });\n    this.currentEndpoint = null;\n\n    this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n\n    this.cellsToSetCache = [];\n  }\n\n  /**\n   * Calculate and refresh endpoints only in the changed columns.\n   *\n   * @param {Array} changes Array of changes from the `afterChange` hook.\n   */\n  refreshChangedEndpoints(changes) {\n    const needToRefresh = [];\n\n    this.cellsToSetCache = [];\n\n    arrayEach(changes, (value, key, changesObj) => {\n      // if nothing changed, dont update anything\n      if (`${value[2] || ''}` === `${value[3]}`) {\n        return;\n      }\n\n      arrayEach(this.getAllEndpoints(), (endpoint, j) => {\n        if (this.hot.propToCol(changesObj[key][1]) === endpoint.sourceColumn && needToRefresh.indexOf(j) === -1) {\n          needToRefresh.push(j);\n        }\n      });\n    });\n\n    arrayEach(needToRefresh, (value) => {\n      this.refreshEndpoint(this.getEndpoint(value));\n    });\n\n    this.hot.setDataAtCell(this.cellsToSetCache, 'ColumnSummary.reset');\n    this.cellsToSetCache = [];\n  }\n\n  /**\n   * Refreshes the cell meta information for the all endpoints after the `updateSettings` method call which in some\n   * cases (call with `columns` option) can reset the cell metas to the initial state.\n   */\n  refreshCellMetas() {\n    this.endpoints.forEach((endpoint) => {\n      const destinationVisualRow = this.hot.toVisualRow(endpoint.destinationRow);\n\n      if (destinationVisualRow !== null) {\n        const cellMeta = this.hot.getCellMeta(\n          destinationVisualRow,\n          endpoint.destinationColumn\n        );\n\n        cellMeta.readOnly = endpoint.readOnly;\n        cellMeta.className = 'columnSummaryResult';\n      }\n    });\n  }\n\n  /**\n   * Calculate and refresh a single endpoint.\n   *\n   * @param {object} endpoint Contains the endpoint information.\n   */\n  refreshEndpoint(endpoint) {\n    this.currentEndpoint = endpoint;\n    this.plugin.calculate(endpoint);\n    this.setEndpointValue(endpoint);\n    this.currentEndpoint = null;\n  }\n\n  /**\n   * Reset the endpoint value.\n   *\n   * @param {object} endpoint Contains the endpoint information.\n   * @param {boolean} [useOffset=true] Use the cell offset value.\n   */\n  resetEndpointValue(endpoint, useOffset = true) {\n    const alterRowOffset = endpoint.alterRowOffset || 0;\n    const alterColOffset = endpoint.alterColumnOffset || 0;\n\n    this.cellsToSetCache.push([\n      this.hot.toVisualRow(endpoint.destinationRow + (useOffset ? alterRowOffset : 0)),\n      this.hot.toVisualColumn(endpoint.destinationColumn + (useOffset ? alterColOffset : 0)),\n      ''\n    ]);\n  }\n\n  /**\n   * Set the endpoint value.\n   *\n   * @param {object} endpoint Contains the endpoint information.\n   * @param {string} [source] Source of the call information.\n   * @param {boolean} [render=false] `true` if it needs to render the table afterwards.\n   */\n  setEndpointValue(endpoint, source, render = false) {\n    const visualEndpointRowIndex = this.hot.toVisualRow(endpoint.destinationRow);\n\n    if (endpoint.destinationRow >= this.hot.countRows() || endpoint.destinationColumn >= this.hot.countCols()) {\n      this.throwOutOfBoundsWarning();\n\n      return;\n    }\n\n    const destinationVisualRow = this.hot.toVisualRow(endpoint.destinationRow);\n\n    if (destinationVisualRow !== null) {\n      const cellMeta = this.hot.getCellMeta(\n        destinationVisualRow,\n        endpoint.destinationColumn\n      );\n\n      if (source === 'init' || cellMeta.readOnly !== endpoint.readOnly) {\n        cellMeta.readOnly = endpoint.readOnly;\n        cellMeta.className = 'columnSummaryResult';\n      }\n    }\n\n    if (\n      (\n        endpoint.roundFloat === true ||\n        Number.isInteger(endpoint.roundFloat)\n      ) &&\n      !isNaN(endpoint.result)\n    ) {\n      const roundFloatValue = endpoint.roundFloat;\n      let decimalPlacesCount = 0;\n\n      // `toFixed` method accepts only values between 0 and 100\n      if (Number.isInteger(roundFloatValue)) {\n        decimalPlacesCount = Math.min(Math.max(0, roundFloatValue), 100);\n      }\n\n      endpoint.result = endpoint.result.toFixed(decimalPlacesCount);\n    }\n\n    if (render) {\n      this.hot.setDataAtCell(visualEndpointRowIndex, endpoint.destinationColumn, endpoint.result, 'ColumnSummary.set');\n    } else {\n      this.cellsToSetCache.push([visualEndpointRowIndex, endpoint.destinationColumn, endpoint.result]);\n    }\n\n    endpoint.alterRowOffset = undefined;\n    endpoint.alterColumnOffset = undefined;\n  }\n\n  /**\n   * Throw an error for the calculation range being out of boundaries.\n   *\n   * @private\n   */\n  throwOutOfBoundsWarning() {\n    warn('One of the Column Summary plugins\\' destination points you provided is beyond the table boundaries!');\n  }\n}\n\nexport default Endpoints;\n","/**\n * Returns `true` if the value is one of the type: `null`, `undefined` or `NaN`.\n *\n * @param {*} value The value to check.\n * @returns {boolean}\n */\nexport function isNullishOrNaN(value) {\n  return value === null || value === undefined || isNaN(value);\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Comments,\n} from './comments';\n","import {\n  addClass,\n  closest,\n  isChildOf,\n  hasClass,\n  outerHeight\n} from '../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../helpers/dom/event';\nimport { deepClone, deepExtend, isObject } from '../../helpers/object';\nimport { BasePlugin } from '../base';\nimport CommentEditor from './commentEditor';\nimport DisplaySwitch from './displaySwitch';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport addEditCommentItem from './contextMenuItem/addEditComment';\nimport removeCommentItem from './contextMenuItem/removeComment';\nimport readOnlyCommentItem from './contextMenuItem/readOnlyComment';\n\nimport './comments.scss';\n\nexport const PLUGIN_KEY = 'comments';\nexport const PLUGIN_PRIORITY = 60;\nexport const META_COMMENT = 'comment';\nexport const META_COMMENT_VALUE = 'value';\nexport const META_STYLE = 'style';\nexport const META_READONLY = 'readOnly';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\nconst SHORTCUTS_CONTEXT_NAME = `plugin:${PLUGIN_KEY}`;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin Comments\n * @class Comments\n *\n * @description\n * This plugin allows setting and managing cell comments by either an option in the context menu or with the use of\n * the API.\n *\n * To enable the plugin, you'll need to set the comments property of the config object to `true`:\n * ```js\n * comments: true\n * ```\n *\n * or an object with extra predefined plugin config:\n *\n * ```js\n * comments: {\n *   displayDelay: 1000,\n *   readOnly: true,\n *   style: {\n *     width: 300,\n *     height: 100\n *   }\n * }\n * ```\n *\n * To add comments at the table initialization, define the `comment` property in the `cell` config array as in an example below.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   data: getData(),\n *   comments: true,\n *   cell: [\n *     {row: 1, col: 1, comment: {value: 'Foo'}},\n *     {row: 2, col: 2, comment: {value: 'Bar'}}\n *   ]\n * });\n *\n * // Access to the Comments plugin instance:\n * const commentsPlugin = hot.getPlugin('comments');\n *\n * // Manage comments programmatically:\n * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents');\n * commentsPlugin.showAtCell(1, 6);\n * commentsPlugin.removeCommentAtCell(1, 6);\n *\n * // You can also set range once and use proper methods:\n * commentsPlugin.setRange({from: {row: 1, col: 6}});\n * commentsPlugin.setComment('Comment contents');\n * commentsPlugin.show();\n * commentsPlugin.removeComment();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   comments={true}\n *   cell={[\n *     {row: 1, col: 1, comment: {value: 'Foo'}},\n *     {row: 2, col: 2, comment: {value: 'Bar'}}\n *   ]}\n * />\n *\n * // Access to the Comments plugin instance:\n * const hot = hotRef.current.hotInstance;\n * const commentsPlugin = hot.getPlugin('comments');\n *\n * // Manage comments programmatically:\n * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents');\n * commentsPlugin.showAtCell(1, 6);\n * commentsPlugin.removeCommentAtCell(1, 6);\n *\n * // You can also set range once and use proper methods:\n * commentsPlugin.setRange({from: {row: 1, col: 6}});\n * commentsPlugin.setComment('Comment contents');\n * commentsPlugin.show();\n * commentsPlugin.removeComment();\n * ```\n * :::\n */\nexport class Comments extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Current cell range, an object with `from` property, with `row` and `col` properties (e.q. `{from: {row: 1, col: 6}}`).\n   *\n   * @type {object}\n   */\n  range = {};\n  /**\n   * Instance of {@link CommentEditor}.\n   *\n   * @private\n   * @type {CommentEditor}\n   */\n  #editor = null;\n  /**\n   * Instance of {@link DisplaySwitch}.\n   *\n   * @private\n   * @type {DisplaySwitch}\n   */\n  #displaySwitch = null;\n  /**\n   * Prevents showing/hiding editor that reacts on the logic triggered by the \"mouseover\" events.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #preventEditorAutoSwitch = false;\n  /**\n   * Prevents hiding editor when the table viewport is scrolled and that scroll is triggered by the\n   * keyboard shortcut that insert or edits the comment.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #preventEditorHiding = false;\n  /**\n   * The flag that allows processing mousedown event correctly when comments editor is triggered.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #cellBelowCursor = null;\n  /**\n   * Holds the comment value before it's actually saved to the cell meta.\n   *\n   * @private\n   * @type {string}\n   */\n  #commentValueBeforeSave = '';\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link Comments#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    if (!this.#editor) {\n      this.#editor = new CommentEditor(this.hot.rootDocument, this.hot.isRtl());\n      this.#editor.addLocalHook('resize', (...args) => this.#onEditorResize(...args));\n    }\n\n    if (!this.#displaySwitch) {\n      this.#displaySwitch = new DisplaySwitch(this.getDisplayDelaySetting());\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.addToContextMenu(options));\n    this.addHook('afterRenderer',\n      (TD, row, col, prop, value, cellProperties) => this.#onAfterRenderer(TD, cellProperties));\n    this.addHook('afterScroll', () => this.#onAfterScroll());\n    this.addHook('afterBeginEditing', () => this.hide());\n    this.addHook('afterDocumentKeyDown', event => this.#onAfterDocumentKeyDown(event));\n\n    this.#displaySwitch.addLocalHook('hide', () => this.hide());\n    this.#displaySwitch.addLocalHook('show', (row, col) => this.showAtCell(row, col));\n\n    this.registerShortcuts();\n    this.registerListeners();\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *   - [`comments`](@/api/options.md#comments)\n   */\n  updatePlugin() {\n    this.#displaySwitch.updateDelay(this.getDisplayDelaySetting());\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const manager = this.hot.getShortcutManager();\n    const gridContext = manager.getContext('grid');\n    const pluginContext = manager.addContext(SHORTCUTS_CONTEXT_NAME);\n\n    gridContext.addShortcut({\n      keys: [['Control', 'Alt', 'M']],\n      callback: () => {\n        const range = this.hot.getSelectedRangeLast();\n\n        this.#preventEditorHiding = true;\n        this.hot.scrollToFocusedCell(() => {\n          this.setRange(range);\n          this.show();\n          this.focusEditor();\n          manager.setActiveContextName(SHORTCUTS_CONTEXT_NAME);\n\n          this.hot._registerTimeout(() => {\n            this.#preventEditorHiding = false;\n          });\n        });\n      },\n      stopPropagation: true,\n      runOnlyIf: () => this.hot.getSelectedRangeLast()?.highlight.isCell() && !this.#editor.isVisible(),\n      group: SHORTCUTS_GROUP,\n    });\n\n    pluginContext.addShortcut({\n      keys: [['Escape']],\n      callback: () => {\n        this.#editor.setValue(this.#commentValueBeforeSave);\n        this.hide();\n        manager.setActiveContextName('grid');\n      },\n      runOnlyIf: () => this.#editor.isVisible() && this.#editor.isFocused(),\n      group: SHORTCUTS_GROUP,\n    });\n\n    pluginContext.addShortcut({\n      keys: [['Control/Meta', 'Enter']],\n      callback: () => {\n        this.hide();\n        manager.setActiveContextName('grid');\n      },\n      runOnlyIf: () => this.#editor.isVisible() && this.#editor.isFocused(),\n      group: SHORTCUTS_GROUP,\n    });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Registers all necessary DOM listeners.\n   *\n   * @private\n   */\n  registerListeners() {\n    const { rootDocument } = this.hot;\n    const editorElement = this.getEditorInputElement();\n\n    this.eventManager.addEventListener(rootDocument, 'mouseover', event => this.#onMouseOver(event));\n    this.eventManager.addEventListener(rootDocument, 'mousedown', event => this.#onMouseDown(event));\n    this.eventManager.addEventListener(rootDocument, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(editorElement, 'focus', () => this.#onEditorFocus());\n    this.eventManager.addEventListener(editorElement, 'blur', () => this.#onEditorBlur());\n  }\n\n  /**\n   * Sets the current cell range to be able to use general methods like {@link Comments#setComment}, {@link Comments#removeComment}, {@link Comments#show}.\n   *\n   * @param {object} range Object with `from` property, each with `row` and `col` properties.\n   */\n  setRange(range) {\n    this.range = range;\n  }\n\n  /**\n   * Clears the currently selected cell.\n   */\n  clearRange() {\n    this.range = {};\n  }\n\n  /**\n   * Checks if the event target is a cell containing a comment.\n   *\n   * @private\n   * @param {Event} event DOM event.\n   * @returns {boolean}\n   */\n  targetIsCellWithComment(event) {\n    const closestCell = closest(event.target, 'TD', 'TBODY');\n\n    return !!(closestCell && hasClass(closestCell, 'htCommentCell') && closest(closestCell, [this.hot.rootElement]));\n  }\n\n  /**\n   * Checks if the event target is a comment textarea.\n   *\n   * @private\n   * @param {Event} event DOM event.\n   * @returns {boolean}\n   */\n  targetIsCommentTextArea(event) {\n    return this.getEditorInputElement() === event.target;\n  }\n\n  /**\n   * Sets a comment for a cell according to the previously set range (see {@link Comments#setRange}).\n   *\n   * @param {string} value Comment contents.\n   */\n  setComment(value) {\n    if (!this.range.from) {\n      throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n    }\n    const editorValue = this.#editor.getValue();\n    let comment = '';\n\n    if (value !== null && value !== undefined) {\n      comment = value;\n    } else if (editorValue !== null && editorValue !== undefined) {\n      comment = editorValue;\n    }\n\n    const row = this.range.from.row;\n    const col = this.range.from.col;\n\n    this.updateCommentMeta(row, col, { [META_COMMENT_VALUE]: comment });\n    this.hot.render();\n  }\n\n  /**\n   * Sets a comment for a specified cell.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} value Comment contents.\n   */\n  setCommentAtCell(row, column, value) {\n    this.setRange({\n      from: this.hot._createCellCoords(row, column)\n    });\n    this.setComment(value);\n  }\n\n  /**\n   * Removes a comment from a cell according to previously set range (see {@link Comments#setRange}).\n   *\n   * @param {boolean} [forceRender=true] If set to `true`, the table will be re-rendered at the end of the operation.\n   */\n  removeComment(forceRender = true) {\n    if (!this.range.from) {\n      throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n    }\n\n    this.hot.setCellMeta(this.range.from.row, this.range.from.col, META_COMMENT);\n\n    if (forceRender) {\n      this.hot.render();\n    }\n\n    this.hide();\n  }\n\n  /**\n   * Removes a comment from a specified cell.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {boolean} [forceRender=true] If `true`, the table will be re-rendered at the end of the operation.\n   */\n  removeCommentAtCell(row, column, forceRender = true) {\n    this.setRange({\n      from: this.hot._createCellCoords(row, column)\n    });\n    this.removeComment(forceRender);\n  }\n\n  /**\n   * Gets comment from a cell according to previously set range (see {@link Comments#setRange}).\n   *\n   * @returns {string|undefined} Returns a content of the comment.\n   */\n  getComment() {\n    const row = this.range.from.row;\n    const column = this.range.from.col;\n\n    return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n  }\n\n  /**\n   * Gets comment from a cell at the provided coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {string|undefined} Returns a content of the comment.\n   */\n  getCommentAtCell(row, column) {\n    return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n  }\n\n  /**\n   * Shows the comment editor accordingly to the previously set range (see {@link Comments#setRange}).\n   *\n   * @returns {boolean} Returns `true` if comment editor was shown.\n   */\n  show() {\n    if (!this.range.from) {\n      throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n    }\n\n    const { from: { row, col } } = this.range;\n\n    if (row < 0 || row > this.hot.countSourceRows() - 1 || col < 0 || col > this.hot.countSourceCols() - 1) {\n      return false;\n    }\n\n    const meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col);\n\n    this.#displaySwitch.cancelHiding();\n    this.#editor.setValue((meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null) ?? '');\n    this.#editor.show();\n    this.refreshEditor(true);\n\n    return true;\n  }\n\n  /**\n   * Shows comment editor according to cell coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {boolean} Returns `true` if comment editor was shown.\n   */\n  showAtCell(row, column) {\n    this.setRange({\n      from: this.hot._createCellCoords(row, column)\n    });\n\n    return this.show();\n  }\n\n  /**\n   * Hides the comment editor.\n   */\n  hide() {\n    this.#editor.hide();\n  }\n\n  /**\n   * Refreshes comment editor position and styling.\n   *\n   * @param {boolean} [force=false] If `true` then recalculation will be forced.\n   */\n  refreshEditor(force = false) {\n    if (!force && (!this.range.from || !this.#editor.isVisible())) {\n      return;\n    }\n\n    const { rowIndexMapper, columnIndexMapper } = this.hot;\n    const { row: visualRow, col: visualColumn } = this.range.from;\n\n    let renderableRow = rowIndexMapper.getRenderableFromVisualIndex(visualRow);\n    let renderableColumn = columnIndexMapper.getRenderableFromVisualIndex(visualColumn);\n    // Used when the requested row is hidden, and the editor needs to be positioned on the previous row's coords.\n    const targetingPreviousRow = renderableRow === null;\n\n    // Reset the editor position to (0, 0) so the opening direction calculation wouldn't be influenced by its\n    // previous position\n    this.#editor.setPosition(0, 0);\n\n    if (renderableRow === null) {\n      renderableRow = rowIndexMapper\n        .getRenderableFromVisualIndex(rowIndexMapper.getNearestNotHiddenIndex(visualRow, -1));\n    }\n\n    if (renderableColumn === null) {\n      renderableColumn = columnIndexMapper\n        .getRenderableFromVisualIndex(columnIndexMapper.getNearestNotHiddenIndex(visualColumn, -1));\n    }\n\n    const isBeforeRenderedRows = renderableRow === null;\n    const isBeforeRenderedColumns = renderableColumn === null;\n\n    renderableRow = renderableRow ?? 0;\n    renderableColumn = renderableColumn ?? 0;\n\n    const { rootWindow, view: { _wt: wt } } = this.hot;\n    const { wtTable } = wt;\n    // TODO: Probably using `hot.getCell` would be the best. However, case for showing comment editor for hidden cell\n    // potentially should be removed with that change (currently a test for it is passing).\n    const TD = wt.getCell({ row: renderableRow, col: renderableColumn }, true);\n    const commentStyle = this.getCommentMeta(visualRow, visualColumn, META_STYLE);\n\n    if (commentStyle) {\n      this.#editor.setSize(commentStyle.width, commentStyle.height);\n\n    } else {\n      this.#editor.resetSize();\n    }\n\n    const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getStretchedColumnWidth(renderableColumn);\n    const lastRowHeight = targetingPreviousRow && !isBeforeRenderedRows ? outerHeight(TD) : 0;\n\n    const {\n      left,\n      top,\n      width: cellWidth,\n      height: cellHeight,\n    } = TD.getBoundingClientRect();\n    const {\n      width: editorWidth,\n      height: editorHeight,\n    } = this.#editor.getSize();\n\n    const { innerWidth, innerHeight } = this.hot.rootWindow;\n    const documentElement = this.hot.rootDocument.documentElement;\n    let x = left + rootWindow.scrollX + lastColWidth;\n    let y = top + rootWindow.scrollY + lastRowHeight;\n\n    if (this.hot.isRtl()) {\n      x -= (editorWidth + lastColWidth);\n    }\n\n    // flip to the right or left the comments editor position when it goes out of browser viewport\n    if (this.hot.isLtr() && left + cellWidth + editorWidth > innerWidth) {\n      x = left + rootWindow.scrollX - editorWidth - 1;\n\n    } else if (this.hot.isRtl() && x < -(documentElement.scrollWidth - documentElement.clientWidth)) {\n      x = left + rootWindow.scrollX + lastColWidth + 1;\n    }\n\n    if (top + editorHeight > innerHeight) {\n      y -= (editorHeight - cellHeight + 1);\n    }\n\n    this.#editor.setPosition(x, y);\n    this.#editor.setReadOnlyState(this.getCommentMeta(visualRow, visualColumn, META_READONLY));\n    this.#editor.observeSize();\n  }\n\n  /**\n   * Focuses the comments editor element.\n   */\n  focusEditor() {\n    this.#editor.focus();\n  }\n\n  /**\n   * Sets or update the comment-related cell meta.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} metaObject Object defining all the comment-related meta information.\n   */\n  updateCommentMeta(row, column, metaObject) {\n    const oldComment = this.hot.getCellMeta(row, column)[META_COMMENT];\n    let newComment;\n\n    if (oldComment) {\n      newComment = deepClone(oldComment);\n      deepExtend(newComment, metaObject);\n    } else {\n      newComment = metaObject;\n    }\n\n    this.hot.setCellMeta(row, column, META_COMMENT, newComment);\n  }\n\n  /**\n   * Gets the comment related meta information.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} property Cell meta property.\n   * @returns {Mixed}\n   */\n  getCommentMeta(row, column, property) {\n    const cellMeta = this.hot.getCellMeta(row, column);\n\n    if (!cellMeta[META_COMMENT]) {\n      return undefined;\n    }\n\n    return cellMeta[META_COMMENT][property];\n  }\n\n  /**\n   * `mousedown` event callback.\n   *\n   * @param {MouseEvent} event The `mousedown` event.\n   */\n  #onMouseDown(event) {\n    if (!this.hot.view || !this.hot.view._wt) {\n      return;\n    }\n\n    if (!this.#preventEditorAutoSwitch && !this.targetIsCommentTextArea(event)) {\n      const eventCell = closest(event.target, 'TD', 'TBODY');\n      let coordinates = null;\n\n      if (eventCell) {\n        coordinates = this.hot.getCoords(eventCell);\n      }\n\n      if (!eventCell || ((this.range.from && coordinates) &&\n          (this.range.from.row !== coordinates.row || this.range.from.col !== coordinates.col))) {\n        this.hide();\n      }\n    }\n  }\n\n  /**\n   * `mouseover` event callback.\n   *\n   * @param {MouseEvent} event The `mouseover` event.\n   */\n  #onMouseOver(event) {\n    const { rootDocument } = this.hot;\n\n    if (this.#preventEditorAutoSwitch || this.#editor.isFocused() || hasClass(event.target, 'wtBorder')\n        || this.#cellBelowCursor === event.target || !this.#editor) {\n      return;\n    }\n\n    this.#cellBelowCursor = rootDocument.elementFromPoint(event.clientX, event.clientY);\n\n    if (this.targetIsCellWithComment(event)) {\n      const range = this.hot._createCellRange(this.hot.getCoords(event.target));\n\n      this.#displaySwitch.show(range);\n\n    } else if (isChildOf(event.target, rootDocument) && !this.targetIsCommentTextArea(event)) {\n      this.#displaySwitch.hide();\n    }\n  }\n\n  /**\n   * `mouseup` event callback.\n   */\n  #onMouseUp() {\n    this.#preventEditorAutoSwitch = false;\n  }\n\n  /**\n   * The `afterRenderer` hook callback.\n   *\n   * @param {HTMLTableCellElement} TD The rendered `TD` element.\n   * @param {object} cellProperties The rendered cell's property object.\n   */\n  #onAfterRenderer(TD, cellProperties) {\n    if (cellProperties[META_COMMENT] && cellProperties[META_COMMENT][META_COMMENT_VALUE]) {\n      addClass(TD, cellProperties.commentedCellClassName);\n    }\n  }\n\n  /**\n   * Hook observer the \"blur\" event from the comments editor element. The hook clears the\n   * editor content and gives back the keyboard shortcuts control by switching to the \"grid\" context.\n   */\n  #onEditorBlur() {\n    this.#commentValueBeforeSave = '';\n    this.hot.getShortcutManager().setActiveContextName('grid');\n    this.setComment();\n  }\n\n  /**\n   * Hook observer the \"focus\" event from the comments editor element. The hook takes the control of\n   * the keyboard shortcuts by switching the context to plugins one.\n   */\n  #onEditorFocus() {\n    this.#commentValueBeforeSave = this.getComment();\n    this.hot.listen();\n    this.hot.getShortcutManager().setActiveContextName(SHORTCUTS_CONTEXT_NAME);\n  }\n\n  /**\n   * Saves the comments editor size to the cell meta.\n   *\n   * @param {number} width The new width of the editor.\n   * @param {number} height The new height of the editor.\n   */\n  #onEditorResize(width, height) {\n    this.updateCommentMeta(this.range.from.row, this.range.from.col, {\n      [META_STYLE]: { width, height }\n    });\n  }\n\n  /**\n   * Observes the pressed keys and if there is already opened the comment editor prevents open\n   * the table editor into the fast edit mode.\n   *\n   * @param {Event} event The keydown event.\n   */\n  #onAfterDocumentKeyDown(event) {\n    if (this.#editor.isVisible()) {\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Observes the changes in the scroll position if triggered it hides the comment editor.\n   */\n  #onAfterScroll() {\n    if (!this.#preventEditorHiding) {\n      this.hide();\n    }\n  }\n\n  /**\n   * Add Comments plugin options to the Context Menu.\n   *\n   * @private\n   * @param {object} options The menu options.\n   */\n  addToContextMenu(options) {\n    options.items.push(\n      { name: SEPARATOR },\n      addEditCommentItem(this),\n      removeCommentItem(this),\n      readOnlyCommentItem(this),\n    );\n  }\n\n  /**\n   * Get `displayDelay` setting of comment plugin.\n   *\n   * @private\n   * @returns {number|undefined}\n   */\n  getDisplayDelaySetting() {\n    const commentSetting = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (isObject(commentSetting)) {\n      return commentSetting.displayDelay;\n    }\n  }\n\n  /**\n   * Gets the editors input element.\n   *\n   * @private\n   * @returns {HTMLTextAreaElement}\n   */\n  getEditorInputElement() {\n    return this.#editor.getInputElement();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#editor?.destroy();\n    this.#displaySwitch?.destroy();\n\n    super.destroy();\n  }\n}\n","import { addClass, outerWidth, outerHeight } from '../../helpers/dom/element';\nimport { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\nimport { EditorResizeObserver } from './editorResizeObserver';\n\n/**\n * Comment editor for the Comments plugin.\n *\n * @private\n * @class CommentEditor\n */\nclass CommentEditor {\n  static get CLASS_EDITOR_CONTAINER() {\n    return 'htCommentsContainer';\n  }\n\n  static get CLASS_EDITOR() {\n    return 'htComments';\n  }\n\n  static get CLASS_INPUT() {\n    return 'htCommentTextArea';\n  }\n\n  static get CLASS_CELL() {\n    return 'htCommentCell';\n  }\n\n  /**\n   * @type {Document}\n   */\n  #rootDocument;\n  /**\n   * @type {boolean}\n   */\n  #isRtl = false;\n  /**\n   * @type {HTMLElement}\n   */\n  #container = null;\n  /**\n   * @type {HTMLElement}\n   */\n  #editor;\n  /**\n   * @type {CSSStyleDeclaration}\n   */\n  #editorStyle;\n  /**\n   * @type {boolean}\n   */\n  #hidden = true;\n  /**\n   * @type {EditorResizeObserver}\n   */\n  #resizeObserver = new EditorResizeObserver();\n\n  constructor(rootDocument, isRtl) {\n    this.#rootDocument = rootDocument;\n    this.#isRtl = isRtl;\n    this.#editor = this.createEditor();\n    this.#editorStyle = this.#editor.style;\n    this.#resizeObserver.setObservedElement(this.getInputElement());\n    this.#resizeObserver.addLocalHook('resize', (...args) => this.runLocalHooks('resize', ...args));\n\n    this.hide();\n  }\n\n  /**\n   * Set position of the comments editor according to the  provided x and y coordinates.\n   *\n   * @param {number} x X position (in pixels).\n   * @param {number} y Y position (in pixels).\n   */\n  setPosition(x, y) {\n    this.#editorStyle.left = `${x}px`;\n    this.#editorStyle.top = `${y}px`;\n  }\n\n  /**\n   * Set the editor size according to the provided arguments.\n   *\n   * @param {number} width Width in pixels.\n   * @param {number} height Height in pixels.\n   */\n  setSize(width, height) {\n    if (width && height) {\n      const input = this.getInputElement();\n\n      input.style.width = `${width}px`;\n      input.style.height = `${height}px`;\n    }\n  }\n\n  /**\n   * Returns the size of the comments editor.\n   *\n   * @returns {{ width: number, height: number }}\n   */\n  getSize() {\n    return {\n      width: outerWidth(this.getInputElement()),\n      height: outerHeight(this.getInputElement()),\n    };\n  }\n\n  /**\n   * Starts observing the editor size.\n   */\n  observeSize() {\n    this.#resizeObserver.observe();\n  }\n\n  /**\n   * Reset the editor size to its initial state.\n   */\n  resetSize() {\n    const input = this.getInputElement();\n\n    input.style.width = '';\n    input.style.height = '';\n  }\n\n  /**\n   * Set the read-only state for the comments editor.\n   *\n   * @param {boolean} state The new read only state.\n   */\n  setReadOnlyState(state) {\n    const input = this.getInputElement();\n\n    input.readOnly = state;\n  }\n\n  /**\n   * Show the comments editor.\n   */\n  show() {\n    this.#editorStyle.display = 'block';\n    this.#hidden = false;\n  }\n\n  /**\n   * Hide the comments editor.\n   */\n  hide() {\n    this.#resizeObserver.unobserve();\n\n    if (!this.#hidden) {\n      this.#editorStyle.display = 'none';\n    }\n\n    this.#hidden = true;\n  }\n\n  /**\n   * Checks if the editor is visible.\n   *\n   * @returns {boolean}\n   */\n  isVisible() {\n    return this.#editorStyle.display === 'block';\n  }\n\n  /**\n   * Set the comment value.\n   *\n   * @param {string} [value] The value to use.\n   */\n  setValue(value = '') {\n    const comment = value || '';\n\n    this.getInputElement().value = comment;\n  }\n\n  /**\n   * Get the comment value.\n   *\n   * @returns {string}\n   */\n  getValue() {\n    return this.getInputElement().value;\n  }\n\n  /**\n   * Checks if the comment input element is focused.\n   *\n   * @returns {boolean}\n   */\n  isFocused() {\n    return this.#rootDocument.activeElement === this.getInputElement();\n  }\n\n  /**\n   * Focus the comments input element.\n   */\n  focus() {\n    this.getInputElement().focus();\n  }\n\n  /**\n   * Create the `textarea` to be used as a comments editor.\n   *\n   * @returns {HTMLElement}\n   */\n  createEditor() {\n    const editor = this.#rootDocument.createElement('div');\n    const textarea = this.#rootDocument.createElement('textarea');\n\n    editor.style.display = 'none';\n\n    this.#container = this.#rootDocument.createElement('div');\n    this.#container.setAttribute('dir', this.#isRtl ? 'rtl' : 'ltr');\n\n    addClass(this.#container, CommentEditor.CLASS_EDITOR_CONTAINER);\n\n    this.#rootDocument.body.appendChild(this.#container);\n\n    addClass(editor, CommentEditor.CLASS_EDITOR);\n    addClass(textarea, CommentEditor.CLASS_INPUT);\n    textarea.setAttribute('data-hot-input', true);\n\n    editor.appendChild(textarea);\n    this.#container.appendChild(editor);\n\n    return editor;\n  }\n\n  /**\n   * Get the input element.\n   *\n   * @returns {HTMLElement}\n   */\n  getInputElement() {\n    return this.#editor.querySelector(`.${CommentEditor.CLASS_INPUT}`);\n  }\n\n  /**\n   * Destroy the comments editor.\n   */\n  destroy() {\n    const containerParentElement = this.#container ? this.#container.parentNode : null;\n\n    this.#editor.parentNode.removeChild(this.#editor);\n    this.#editor = null;\n    this.#editorStyle = null;\n    this.#resizeObserver.destroy();\n\n    if (containerParentElement) {\n      containerParentElement.removeChild(this.#container);\n    }\n  }\n}\n\nmixin(CommentEditor, localHooks);\n\nexport default CommentEditor;\n","import { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\n/**\n * Module that observes the editor size after it has been resized by the user.\n *\n * @private\n * @class EditorResizeObserver\n */\nexport class EditorResizeObserver {\n  /**\n   * The flag that indicates if the initial call should be ignored. It is used to prevent the initial call\n   * that happens after the observer is attached to the element.\n   *\n   * @type {boolean}\n   */\n  #ignoreInitialCall = true;\n  /**\n   * The element that is observed by the observer.\n   *\n   * @type {HTMLElement}\n   */\n  #observedElement = null;\n  /**\n   * The ResizeObserver instance.\n   *\n   * @type {ResizeObserver}\n   */\n  #observer = new ResizeObserver(entries => this.#onResize(entries));\n\n  /**\n   * Sets the observed element.\n   *\n   * @param {HTMLElement} element The element to observe.\n   */\n  setObservedElement(element) {\n    this.#observedElement = element;\n  }\n\n  /**\n   * Stops observing the element.\n   */\n  unobserve() {\n    this.#observer.unobserve(this.#observedElement);\n  }\n\n  /**\n   * Starts observing the element.\n   */\n  observe() {\n    this.#ignoreInitialCall = true;\n    this.#observer.observe(this.#observedElement);\n  }\n\n  /**\n   * Destroys the observer.\n   */\n  destroy() {\n    this.#observer.disconnect();\n  }\n\n  /**\n   * Listens for event from the ResizeObserver and forwards the through the local hooks.\n   *\n   * @param {*} entries The entries from the ResizeObserver.\n   */\n  #onResize(entries) {\n    if (this.#ignoreInitialCall || !Array.isArray(entries) || !entries.length) {\n      this.#ignoreInitialCall = false;\n\n      return;\n    }\n\n    entries.forEach(({ borderBoxSize }) => {\n      const { inlineSize, blockSize } = borderBoxSize[0];\n\n      this.runLocalHooks('resize', inlineSize, blockSize);\n    });\n  }\n}\n\nmixin(EditorResizeObserver, localHooks);\n","import { debounce } from '../../helpers/function';\nimport { mixin } from '../../helpers/object';\nimport localHooks from '../../mixins/localHooks';\n\nconst DEFAULT_DISPLAY_DELAY = 250;\nconst DEFAULT_HIDE_DELAY = 250;\n\n/**\n * Display switch for the Comments plugin. Manages the time of delayed displaying / hiding comments.\n *\n * @private\n * @class DisplaySwitch\n */\nclass DisplaySwitch {\n  /**\n   * Flag to determine if comment can be showed or hidden. State `true` mean that last performed action\n   * was an attempt to show comment element. State `false` mean that it was attempt to hide comment element.\n   *\n   * @type {boolean}\n   */\n  wasLastActionShow = true;\n  /**\n   * Show comment after predefined delay. It keeps reference to immutable `debounce` function.\n   *\n   * @type {Function}\n   */\n  showDebounced = null;\n  /**\n   * Reference to timer, run by `setTimeout`, which is hiding comment.\n   *\n   * @type {number}\n   */\n  hidingTimer = null;\n\n  constructor(displayDelay) {\n    this.updateDelay(displayDelay);\n  }\n\n  /**\n   * Responsible for hiding comment after proper delay.\n   */\n  hide() {\n    this.wasLastActionShow = false;\n\n    this.hidingTimer = setTimeout(() => {\n      if (this.wasLastActionShow === false) {\n        this.runLocalHooks('hide');\n      }\n    }, DEFAULT_HIDE_DELAY);\n  }\n\n  /**\n   * Responsible for showing comment after proper delay.\n   *\n   * @param {object} range Coordinates of selected cell.\n   */\n  show(range) {\n    this.wasLastActionShow = true;\n    this.showDebounced(range);\n  }\n\n  /**\n   * Cancel hiding comment.\n   */\n  cancelHiding() {\n    this.wasLastActionShow = true;\n\n    clearTimeout(this.hidingTimer);\n    this.hidingTimer = null;\n  }\n\n  /**\n   * Update the switch settings.\n   *\n   * @param {number} displayDelay Delay of showing the comments (in milliseconds).\n   */\n  updateDelay(displayDelay = DEFAULT_DISPLAY_DELAY) {\n    this.showDebounced = debounce((range) => {\n      if (this.wasLastActionShow) {\n        this.runLocalHooks('show', range.from.row, range.from.col);\n      }\n    }, displayDelay);\n  }\n\n  /**\n   * Destroy the switcher.\n   */\n  destroy() {\n    this.clearLocalHooks();\n  }\n}\n\nmixin(DisplaySwitch, localHooks);\n\nexport default DisplaySwitch;\n","import { objectEach } from '../../../helpers/object';\nimport alignmentItem, { KEY as ALIGNMENT } from './alignment';\nimport clearColumnItem, { KEY as CLEAR_COLUMN } from './clearColumn';\nimport columnLeftItem, { KEY as COLUMN_LEFT } from './columnLeft';\nimport columnRightItem, { KEY as COLUMN_RIGHT } from './columnRight';\nimport readOnlyItem, { KEY as READ_ONLY } from './readOnly';\nimport redoItem, { KEY as REDO } from './redo';\nimport removeColumnItem, { KEY as REMOVE_COLUMN } from './removeColumn';\nimport removeRowItem, { KEY as REMOVE_ROW } from './removeRow';\nimport rowAboveItem, { KEY as ROW_ABOVE } from './rowAbove';\nimport rowBelowItem, { KEY as ROW_BELOW } from './rowBelow';\nimport separatorItem, { KEY as SEPARATOR } from './separator';\nimport noItemsItem, { KEY as NO_ITEMS } from './noItems';\nimport undoItem, { KEY as UNDO } from './undo';\n\nexport { KEY as ALIGNMENT } from './alignment';\nexport { KEY as CLEAR_COLUMN } from './clearColumn';\nexport { KEY as COLUMN_LEFT } from './columnLeft';\nexport { KEY as COLUMN_RIGHT } from './columnRight';\nexport { KEY as READ_ONLY } from './readOnly';\nexport { KEY as REDO } from './redo';\nexport { KEY as REMOVE_COLUMN } from './removeColumn';\nexport { KEY as REMOVE_ROW } from './removeRow';\nexport { KEY as ROW_ABOVE } from './rowAbove';\nexport { KEY as ROW_BELOW } from './rowBelow';\nexport { KEY as SEPARATOR } from './separator';\nexport { KEY as NO_ITEMS } from './noItems';\nexport { KEY as UNDO } from './undo';\n\nexport const ITEMS = [\n  ROW_ABOVE, ROW_BELOW, COLUMN_LEFT, COLUMN_RIGHT, CLEAR_COLUMN, REMOVE_ROW, REMOVE_COLUMN, UNDO, REDO, READ_ONLY,\n  ALIGNMENT, SEPARATOR, NO_ITEMS\n];\n\nconst _predefinedItems = {\n  [SEPARATOR]: separatorItem,\n  [NO_ITEMS]: noItemsItem,\n  [ROW_ABOVE]: rowAboveItem,\n  [ROW_BELOW]: rowBelowItem,\n  [COLUMN_LEFT]: columnLeftItem,\n  [COLUMN_RIGHT]: columnRightItem,\n  [CLEAR_COLUMN]: clearColumnItem,\n  [REMOVE_ROW]: removeRowItem,\n  [REMOVE_COLUMN]: removeColumnItem,\n  [UNDO]: undoItem,\n  [REDO]: redoItem,\n  [READ_ONLY]: readOnlyItem,\n  [ALIGNMENT]: alignmentItem,\n};\n\n/**\n * Gets new object with all predefined menu items.\n *\n * @returns {object}\n */\nexport function predefinedItems() {\n  const items = {};\n\n  objectEach(_predefinedItems, (itemFactory, key) => {\n    items[key] = itemFactory();\n  });\n\n  return items;\n}\n\n/**\n * Add new predefined menu item to the collection.\n *\n * @param {string} key Menu command id.\n * @param {object} item Object command descriptor.\n */\nexport function addItem(key, item) {\n  if (ITEMS.indexOf(key) === -1) {\n    _predefinedItems[key] = item;\n  }\n}\n","import {\n  align,\n  getAlignmentClasses,\n  markLabelAsSelected,\n  hasSelectionAClass\n} from '../utils';\nimport { KEY as SEPARATOR } from './separator';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'alignment';\n\n/**\n * @returns {object}\n */\nexport default function alignmentItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT);\n    },\n    disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());\n    },\n    submenu: {\n      items: [\n        {\n          key: `${KEY}:left`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htLeft');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT);\n\n            if (hasSelectionAClass(this, 'htLeft')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htLeft';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:center`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htCenter');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER);\n\n            if (hasSelectionAClass(this, 'htCenter')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htCenter';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:right`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htRight');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT);\n\n            if (hasSelectionAClass(this, 'htRight')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htRight';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:justify`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htJustify');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY);\n\n            if (hasSelectionAClass(this, 'htJustify')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'horizontal';\n            const alignment = 'htJustify';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          name: SEPARATOR\n        },\n        {\n          key: `${KEY}:top`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htTop');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP);\n\n            if (hasSelectionAClass(this, 'htTop')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'vertical';\n            const alignment = 'htTop';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:middle`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htMiddle');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE);\n\n            if (hasSelectionAClass(this, 'htMiddle')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'vertical';\n            const alignment = 'htMiddle';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        },\n        {\n          key: `${KEY}:bottom`,\n          checkable: true,\n          ariaLabel() {\n            return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM);\n          },\n          ariaChecked() {\n            return hasSelectionAClass(this, 'htBottom');\n          },\n          name() {\n            let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM);\n\n            if (hasSelectionAClass(this, 'htBottom')) {\n              label = markLabelAsSelected(label);\n            }\n\n            return label;\n          },\n          callback() {\n            const selectedRange = this.getSelectedRange();\n            const stateBefore = getAlignmentClasses(selectedRange, (row, col) => this.getCellMeta(row, col).className);\n            const type = 'vertical';\n            const alignment = 'htBottom';\n\n            this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n            align(selectedRange, type, alignment, (row, col) => this.getCellMeta(row, col),\n              (row, col, key, value) => this.setCellMeta(row, col, key, value));\n            this.render();\n          },\n          disabled: false\n        }\n      ]\n    }\n  };\n}\n","import { arrayEach } from '../../helpers/array';\n\n/**\n * @param {string} className The full element class name to process.\n * @param {string} alignment The alignment class name to compare with.\n * @returns {string}\n */\nexport function prepareVerticalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n\n  const replacedClassName = className\n    .replace('htTop', '')\n    .replace('htMiddle', '')\n    .replace('htBottom', '')\n    .replace('  ', '');\n\n  return `${replacedClassName} ${alignment}`;\n}\n\n/**\n * @param {string} className The full element class name to process.\n * @param {string} alignment The alignment class name to compare with.\n * @returns {string}\n */\nexport function prepareHorizontalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n  const replacedClassName = className\n    .replace('htLeft', '')\n    .replace('htCenter', '')\n    .replace('htRight', '')\n    .replace('htJustify', '')\n    .replace('  ', '');\n\n  return `${replacedClassName} ${alignment}`;\n}\n\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {Function} callback The callback function.\n * @returns {object}\n */\nexport function getAlignmentClasses(ranges, callback) {\n  const classes = {};\n\n  arrayEach(ranges, (range) => {\n    range.forAll((row, col) => {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        if (!classes[row]) {\n          classes[row] = [];\n        }\n\n        classes[row][col] = callback(row, col);\n      }\n    });\n  });\n\n  return classes;\n}\n\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {string} type The type of the alignment axis ('horizontal' or 'vertical').\n * @param {string} alignment CSS class name to add.\n * @param {Function} cellDescriptor The function which fetches the cell meta object based in passed coordinates.\n * @param {Function} propertySetter The function which contains logic for added/removed alignment.\n */\nexport function align(ranges, type, alignment, cellDescriptor, propertySetter) {\n  arrayEach(ranges, (range) => {\n    range.forAll((row, col) => {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter);\n      }\n    });\n  });\n}\n\n/**\n * @param {number} row The visual row index.\n * @param {number} col The visual column index.\n * @param {string} type The type of the alignment axis ('horizontal' or 'vertical').\n * @param {string} alignment CSS class name to add.\n * @param {Function} cellDescriptor The function which fetches the cell meta object based in passed coordinates.\n * @param {Function} propertySetter The function which contains logic for added/removed alignment.\n */\nfunction applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter) {\n  const cellMeta = cellDescriptor(row, col);\n  let className = alignment;\n\n  if (cellMeta.className) {\n    if (type === 'vertical') {\n      className = prepareVerticalAlignClass(cellMeta.className, alignment);\n    } else {\n      className = prepareHorizontalAlignClass(cellMeta.className, alignment);\n    }\n  }\n\n  propertySetter(row, col, 'className', className);\n}\n\n/**\n * @param {string} label The label text.\n * @returns {string}\n */\nexport function markLabelAsSelected(label) {\n  // workaround for https://github.com/handsontable/handsontable/issues/1946\n  return `<span class=\"selected\">${String.fromCharCode(10003)}</span>${label}`;\n}\n\n/**\n * @param {CellRange[]} ranges An array of the cell ranges.\n * @param {Function} comparator The comparator function.\n * @returns {boolean}\n */\nexport function checkSelectionConsistency(ranges, comparator) {\n  let result = false;\n\n  if (Array.isArray(ranges)) {\n    arrayEach(ranges, (range) => {\n      range.forAll((row, col) => {\n        // Selection consistency should only check within cell ranges. We skip header coordinates.\n        if (row >= 0 && col >= 0 && comparator(row, col)) {\n          result = true;\n\n          return false;\n        }\n      });\n\n      return result;\n    });\n  }\n\n  return result;\n}\n\n/**\n * Returns document offset based on the passed element. If the document objects between element and the\n * base document are not the same the offset as top and left properties will be returned.\n *\n * @param {Element} elementToCheck The element to compare with Document object.\n * @param {Document} baseDocument The base Document object.\n * @returns {{ top: number, left: number }}\n */\nexport function getDocumentOffsetByElement(elementToCheck, baseDocument) {\n  const offset = { top: 0, left: 0 };\n\n  if (baseDocument !== elementToCheck.ownerDocument) {\n    const { frameElement } = baseDocument.defaultView;\n    const { top, left } = frameElement.getBoundingClientRect();\n\n    offset.top = top;\n    offset.left = left;\n  }\n\n  return offset;\n}\n\n/**\n * Prepares comparator function consumable by checkSelectionConsistency\n * Comparator function checks if the cell has the provided class name.\n *\n * @param  {string} htClassName The class name to check.\n * @returns {Function} Returns the comparator function.\n * Use with .bind, .call or .apply to pass the Handsontable instance.\n */\nexport function getAlignmentComparatorByClass(htClassName) {\n  return function(row, col) {\n    const className = this.getCellMeta(row, col).className;\n\n    return (className && className.indexOf(htClassName) !== -1);\n  };\n}\n\n/**\n * @param {object} hot Handsontable instance.\n * @param {string} htClassName The class name to check.\n * @returns {boolean} Returns true if at least one cell has the provided class name.\n */\nexport function hasSelectionAClass(hot, htClassName) {\n  return checkSelectionConsistency(\n    hot.getSelectedRange(),\n    getAlignmentComparatorByClass(htClassName).bind(hot)\n  );\n}\n","export const KEY = '---------';\n\n/**\n * @returns {object}\n */\nexport default function separatorItem() {\n  return {\n    name: KEY\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'clear_column';\n\n/**\n * @returns {object}\n */\nexport default function clearColumnItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CLEAR_COLUMN);\n    },\n    callback(key, selection) {\n      const startColumn = selection[0].start.col;\n      const endColumn = selection[0].end.col;\n\n      if (this.countRows()) {\n        this.populateFromArray(0, startColumn, [[null]],\n          Math.max(selection[0].start.row, selection[0].end.row), endColumn, 'ContextMenu.clearColumn');\n      }\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      return !this.selection.isSelectedByColumnHeader();\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'col_left';\n\n/**\n * @returns {object}\n */\nexport default function columnLeftItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_LEFT);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getTopLeftCorner();\n      const alterAction = this.isRtl() ? 'insert_col_end' : 'insert_col_start';\n\n      this.alter(alterAction, latestSelection.col, 1, 'ContextMenu.columnLeft');\n    },\n    disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        const totalColumns = this.countCols();\n\n        // Enable \"Insert column left\" only when there is at least one column.\n        return totalColumns === 0;\n      }\n\n      return this.selection.isSelectedByRowHeader() ||\n        this.countCols() >= this.getSettings().maxCols;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'col_right';\n\n/**\n * @returns {object}\n */\nexport default function columnRightItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_RIGHT);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getTopRightCorner();\n      const alterAction = this.isRtl() ? 'insert_col_start' : 'insert_col_end';\n\n      this.alter(alterAction, latestSelection.col, 1, 'ContextMenu.columnRight');\n    },\n    disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Insert column right\" always when the menu is triggered by corner click.\n        return false;\n      }\n\n      return this.selection.isSelectedByRowHeader() ||\n        this.countCols() >= this.getSettings().maxCols;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}\n","import { checkSelectionConsistency, markLabelAsSelected } from '../utils';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'make_read_only';\n\n/**\n * @returns {object}\n */\nexport default function readOnlyItem() {\n  return {\n    key: KEY,\n    checkable: true,\n    ariaChecked() {\n      const atLeastOneReadOnly = checkSelectionConsistency(\n        this.getSelectedRange(),\n        (row, col) => this.getCellMeta(row, col).readOnly\n      );\n\n      return atLeastOneReadOnly;\n    },\n\n    ariaLabel() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY);\n    },\n\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY);\n      const atLeastOneReadOnly = checkSelectionConsistency(\n        this.getSelectedRange(),\n        (row, col) => this.getCellMeta(row, col).readOnly\n      );\n\n      if (atLeastOneReadOnly) {\n        label = markLabelAsSelected(label);\n      }\n\n      return label;\n    },\n    callback() {\n      const ranges = this.getSelectedRange();\n      const atLeastOneReadOnly = checkSelectionConsistency(\n        ranges,\n        (row, col) => this.getCellMeta(row, col).readOnly\n      );\n\n      arrayEach(ranges, (range) => {\n        range.forAll((row, col) => {\n          if (row >= 0 && col >= 0) {\n            this.setCellMeta(row, col, 'readOnly', !atLeastOneReadOnly);\n          }\n        });\n      });\n\n      this.render();\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        return true;\n      }\n\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      if (!this.getSelectedRange() || this.getSelectedRange().length === 0) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'redo';\n\n/**\n * @returns {object}\n */\nexport default function redoItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REDO);\n    },\n    callback() {\n      this.redo();\n    },\n    hidden() {\n      const undoRedo = this.getPlugin('undoRedo');\n\n      return !undoRedo || !undoRedo.isEnabled();\n    },\n    disabled() {\n      return !this.getPlugin('undoRedo').isRedoAvailable();\n    }\n  };\n}\n","import { transformSelectionToColumnDistance } from '../../../selection/utils';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'remove_col';\n\n/**\n * @returns {object}\n */\nexport default function removeColumnItem() {\n  return {\n    key: KEY,\n    name() {\n      const selection = this.getSelected();\n      let pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          const [, fromColumn, , toColumn] = selection[0];\n\n          if (fromColumn - toColumn !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COLUMN, pluralForm);\n    },\n    callback() {\n      this.alter('remove_col', transformSelectionToColumnDistance(this), null, 'ContextMenu.removeColumn');\n    },\n    disabled() {\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.col < 0) {\n        return true;\n      }\n\n      const totalColumns = this.countCols();\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Remove column\" only when there is at least one column.\n        return totalColumns === 0;\n      }\n\n      return this.selection.isSelectedByRowHeader() || totalColumns === 0;\n    },\n    hidden() {\n      return !this.getSettings().allowRemoveColumn;\n    }\n  };\n}\n","import { transformSelectionToRowDistance } from '../../../selection/utils';\nimport * as C from '../../../i18n/constants';\n\nexport const KEY = 'remove_row';\n\n/**\n * @returns {object}\n */\nexport default function removeRowItem() {\n  return {\n    key: KEY,\n    name() {\n      const selection = this.getSelected();\n      let pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          const [fromRow, , toRow] = selection[0];\n\n          if (fromRow - toRow !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_ROW, pluralForm);\n    },\n    callback() {\n      // TODO: Please keep in mind that below `1` may be improper. The table's way of work, before change `f1747b3912ea3b21fe423fd102ca94c87db81379` was restored.\n      // There is still problem when removing more than one row.\n      this.alter('remove_row', transformSelectionToRowDistance(this), 1, 'ContextMenu.removeRow');\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.row < 0) {\n        return true;\n      }\n\n      const totalRows = this.countRows();\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Remove row\" only when there is at least one row.\n        return totalRows === 0;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || totalRows === 0;\n    },\n    hidden() {\n      return !this.getSettings().allowRemoveRow;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'row_above';\n\n/**\n * @returns {object}\n */\nexport default function rowAboveItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_ABOVE);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getTopLeftCorner();\n\n      this.alter('insert_row_above', latestSelection.row, 1, 'ContextMenu.rowAbove');\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.row < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        const totalRows = this.countRows();\n\n        // Enable \"Insert row above\" only when there is at least one row.\n        return totalRows === 0;\n      }\n\n      return this.selection.isSelectedByColumnHeader() ||\n        this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'row_below';\n\n/**\n * @returns {object}\n */\nexport default function rowBelowItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_BELOW);\n    },\n    callback() {\n      const latestSelection = this.getSelectedRangeLast().getBottomRightCorner();\n\n      this.alter('insert_row_below', latestSelection.row, 1, 'ContextMenu.rowBelow');\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader() && range.highlight.row < 0) {\n        return true;\n      }\n\n      if (this.selection.isSelectedByCorner()) {\n        // Enable \"Insert row below\" always when the menu is triggered by corner click.\n        return false;\n      }\n\n      return this.selection.isSelectedByColumnHeader() ||\n        this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}\n","import { CONTEXTMENU_ITEMS_NO_ITEMS } from '../../../i18n/constants';\n\nexport const KEY = 'no_items';\n\n/**\n * @returns {object}\n */\nexport default function noItemsItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_NO_ITEMS);\n    },\n    disabled: true,\n    isCommand: false,\n  };\n}\n","import * as C from '../../../i18n/constants';\n\nexport const KEY = 'undo';\n\n/**\n * @returns {object}\n */\nexport default function undoItem() {\n  return {\n    key: KEY,\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNDO);\n    },\n    callback() {\n      this.undo();\n    },\n    hidden() {\n      const undoRedo = this.getPlugin('undoRedo');\n\n      return !undoRedo || !undoRedo.isEnabled();\n    },\n    disabled() {\n      return !this.getPlugin('undoRedo').isUndoAvailable();\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {Comments} plugin The Comments plugin instance.\n * @returns {object}\n */\nexport default function addEditCommentItem(plugin) {\n  return {\n    key: 'commentsAddEdit',\n    name() {\n      const highlight = this.getSelectedRangeLast()?.highlight;\n\n      if (highlight?.isCell() && plugin.getCommentAtCell(highlight.row, highlight.col)) {\n        return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);\n    },\n    callback() {\n      const range = this.getSelectedRangeLast();\n\n      plugin.setRange(range);\n      plugin.show();\n      plugin.focusEditor();\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (\n        !range ||\n        range.highlight.isHeader() ||\n        this.selection.isEntireRowSelected() && this.selection.isEntireColumnSelected() ||\n        this.countRenderedRows() === 0 || this.countRenderedCols() === 0\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {Comments} plugin The Comments plugin instance.\n * @returns {object}\n */\nexport default function removeCommentItem(plugin) {\n  return {\n    key: 'commentsRemove',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);\n    },\n    callback() {\n      const range = this.getSelectedRangeLast();\n\n      range.forAll((row, column) => {\n        if (row >= 0 && column >= 0) {\n          plugin.removeCommentAtCell(row, column, false);\n        }\n      });\n\n      this.render();\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (\n        !range ||\n        range.highlight.isHeader() ||\n        this.selection.isEntireRowSelected() && this.selection.isEntireColumnSelected() ||\n        this.countRenderedRows() === 0 || this.countRenderedCols() === 0\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionConsistency, markLabelAsSelected } from '../../contextMenu/utils';\nimport { META_READONLY } from '../comments';\n\n/**\n * @param {Comments} plugin The Comments plugin instance.\n * @returns {object}\n */\nexport default function readOnlyCommentItem(plugin) {\n  return {\n    key: 'commentsReadOnly',\n    name() {\n      const label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);\n      const areReadOnly = checkSelectionConsistency(this.getSelectedRange(), (row, col) => {\n        return plugin.getCommentMeta(row, col, META_READONLY);\n      });\n\n      return areReadOnly ? markLabelAsSelected(label) : label;\n    },\n    callback() {\n      const range = this.getSelectedRangeLast();\n\n      range.forAll((row, column) => {\n        if (row >= 0 && column >= 0) {\n          const currentState = !!plugin.getCommentMeta(row, column, META_READONLY);\n\n          plugin.updateCommentMeta(row, column, {\n            [META_READONLY]: !currentState\n          });\n        }\n      });\n    },\n    disabled() {\n      const range = this.getSelectedRangeLast();\n\n      if (\n        !range ||\n        range.highlight.isHeader() ||\n        !plugin.getCommentAtCell(range.highlight.row, range.highlight.col) ||\n        this.selection.isEntireRowSelected() && this.selection.isEntireColumnSelected() ||\n        this.countRenderedRows() === 0 || this.countRenderedCols() === 0\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ContextMenu,\n} from './contextMenu';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { arrayEach } from '../../helpers/array';\nimport { objectEach } from '../../helpers/object';\nimport { CommandExecutor } from './commandExecutor';\nimport { ItemsFactory } from './itemsFactory';\nimport {\n  Menu,\n} from './menu';\nimport { getDocumentOffsetByElement } from './utils';\nimport { hasClass } from '../../helpers/dom/element';\nimport {\n  ROW_ABOVE,\n  ROW_BELOW,\n  COLUMN_LEFT,\n  COLUMN_RIGHT,\n  REMOVE_ROW,\n  REMOVE_COLUMN,\n  UNDO,\n  REDO,\n  READ_ONLY,\n  ALIGNMENT,\n  SEPARATOR,\n} from './predefinedItems';\n\nimport './contextMenu.scss';\n\nexport const PLUGIN_KEY = 'contextMenu';\nexport const PLUGIN_PRIORITY = 70;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nHooks.getSingleton().register('afterContextMenuDefaultOptions');\nHooks.getSingleton().register('beforeContextMenuShow');\nHooks.getSingleton().register('afterContextMenuShow');\nHooks.getSingleton().register('afterContextMenuHide');\nHooks.getSingleton().register('afterContextMenuExecute');\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @class ContextMenu\n * @description\n * This plugin creates the Handsontable Context Menu. It allows to create a new row or column at any place in the\n * grid among [other features](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely)\n * * `{ uiContainer: containerDomElement }` (to declare a container for all of the Context Menu's dom elements to be placed in).\n * * An array of [the available strings](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options)\n *\n * See [the context menu demo](@/guides/accessories-and-menus/context-menu/context-menu.md) for examples.\n *\n * @example\n * ```js\n * // as a boolean\n * contextMenu: true\n * // as a array\n * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo']\n * ```\n *\n * @plugin ContextMenu\n */\nexport class ContextMenu extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:AutoColumnSize',\n    ];\n  }\n\n  /**\n   * Context menu default items order when `contextMenu` options is set as `true`.\n   *\n   * @returns {string[]}\n   */\n  static get DEFAULT_ITEMS() {\n    return [\n      ROW_ABOVE, ROW_BELOW,\n      SEPARATOR,\n      COLUMN_LEFT, COLUMN_RIGHT,\n      SEPARATOR,\n      REMOVE_ROW, REMOVE_COLUMN,\n      SEPARATOR,\n      UNDO, REDO,\n      SEPARATOR,\n      READ_ONLY,\n      SEPARATOR,\n      ALIGNMENT,\n    ];\n  }\n\n  /**\n   * Instance of {@link CommandExecutor}.\n   *\n   * @private\n   * @type {CommandExecutor}\n   */\n  commandExecutor = new CommandExecutor(this.hot);\n  /**\n   * Instance of {@link ItemsFactory}.\n   *\n   * @private\n   * @type {ItemsFactory}\n   */\n  itemsFactory = null;\n  /**\n   * Instance of {@link Menu}.\n   *\n   * @private\n   * @type {Menu}\n   */\n  menu = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ContextMenu#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (typeof settings.callback === 'function') {\n      this.commandExecutor.setCommonCallback(settings.callback);\n    }\n\n    this.menu = new Menu(this.hot, {\n      className: 'htContextMenu',\n      keepInViewport: true,\n      container: settings.uiContainer || this.hot.rootDocument.body,\n    });\n\n    this.menu.addLocalHook('beforeOpen', () => this.#onMenuBeforeOpen());\n    this.menu.addLocalHook('afterOpen', () => this.#onMenuAfterOpen());\n    this.menu.addLocalHook('afterClose', () => this.#onMenuAfterClose());\n    this.menu.addLocalHook('executeCommand', (...params) => this.executeCommand.call(this, ...params));\n\n    this.addHook('afterOnCellContextMenu', event => this.#onAfterOnCellContextMenu(event));\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`contextMenu`](@/api/options.md#contextmenu)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n      this.menu = null;\n    }\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Control/Meta', 'Shift', 'Backslash'], ['Shift', 'F10']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n\n          this.hot.scrollToFocusedCell();\n\n          const rect = this.hot.getCell(highlight.row, highlight.col, true).getBoundingClientRect();\n          const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n\n          this.open({\n            left: rect.left + offset.left,\n            top: rect.top + offset.top - 1 + rect.height,\n          }, {\n            left: rect.width,\n            above: -rect.height,\n          });\n          // Make sure the first item is selected (role=menuitem). Otherwise, screen readers\n          // will block the Esc key for the whole menu.\n          this.menu.getNavigator().toFirstItem();\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.selection.isCellVisible(highlight) && !this.menu.isOpened();\n        },\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling context menu.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Opens menu and re-position it based on the passed coordinates.\n   *\n   * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties\n   * which contains coordinates relative to the browsers viewport (without included scroll offsets).\n   * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`\n   * coordinates.\n   * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying\n   * the offset to the menu position.\n   * @fires Hooks#beforeContextMenuShow\n   * @fires Hooks#afterContextMenuShow\n   */\n  open(position, offset = { above: 0, below: 0, left: 0, right: 0 }) {\n    if (this.menu?.isOpened()) {\n      return;\n    }\n\n    this.prepareMenuItems();\n    this.menu.open();\n\n    const themeHasTableBorder = this.menu.tableBorderWidth > 0;\n\n    if (!themeHasTableBorder) {\n      offset.below += 1;\n      offset.right += 1;\n      offset.above -= 1;\n      offset.left -= 1;\n    }\n\n    objectEach(offset, (value, key) => {\n      this.menu.setOffset(key, value);\n    });\n    this.menu.setPosition(position);\n  }\n\n  /**\n   * Closes the menu.\n   */\n  close() {\n    this.menu?.close();\n    this.itemsFactory = null;\n  }\n\n  /**\n   * Execute context menu command.\n   *\n   * The `executeCommand()` method works only for selected cells.\n   *\n   * When no cells are selected, `executeCommand()` doesn't do anything.\n   *\n   * You can execute all predefined commands:\n   *  * `'row_above'` - Insert row above\n   *  * `'row_below'` - Insert row below\n   *  * `'col_left'` - Insert column left\n   *  * `'col_right'` - Insert column right\n   *  * `'clear_column'` - Clear selected column\n   *  * `'remove_row'` - Remove row\n   *  * `'remove_col'` - Remove column\n   *  * `'undo'` - Undo last action\n   *  * `'redo'` - Redo last action\n   *  * `'make_read_only'` - Make cell read only\n   *  * `'alignment:left'` - Alignment to the left\n   *  * `'alignment:top'` - Alignment to the top\n   *  * `'alignment:right'` - Alignment to the right\n   *  * `'alignment:bottom'` - Alignment to the bottom\n   *  * `'alignment:middle'` - Alignment to the middle\n   *  * `'alignment:center'` - Alignment to the center (justify).\n   *\n   * Or you can execute command registered in settings where `key` is your command name.\n   *\n   * @param {string} commandName The command name to be executed.\n   * @param {*} params Additional parameters passed to command executor module.\n   */\n  executeCommand(commandName, ...params) {\n    if (this.itemsFactory === null) {\n      this.prepareMenuItems();\n    }\n\n    this.commandExecutor.execute(commandName, ...params);\n  }\n\n  /**\n   * Prepares available contextMenu's items list and registers them in commandExecutor.\n   *\n   * @private\n   * @fires Hooks#afterContextMenuDefaultOptions\n   * @fires Hooks#beforeContextMenuSetItems\n   */\n  prepareMenuItems() {\n    this.itemsFactory = new ItemsFactory(this.hot, ContextMenu.DEFAULT_ITEMS);\n\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    const predefinedItems = {\n      items: this.itemsFactory.getItems(settings)\n    };\n\n    this.hot.runHooks('afterContextMenuDefaultOptions', predefinedItems);\n\n    this.itemsFactory.setPredefinedItems(predefinedItems.items);\n    const menuItems = this.itemsFactory.getItems(settings);\n\n    this.hot.runHooks('beforeContextMenuSetItems', menuItems);\n\n    this.menu.setMenuItems(menuItems);\n\n    // Register all commands. Predefined and added by user or by plugins\n    arrayEach(menuItems, command => this.commandExecutor.registerCommand(command.key, command));\n  }\n\n  /**\n   * On contextmenu listener.\n   *\n   * @param {Event} event The mouse event object.\n   */\n  #onAfterOnCellContextMenu(event) {\n    const settings = this.hot.getSettings();\n    const showRowHeaders = settings.rowHeaders;\n    const showColHeaders = settings.colHeaders;\n\n    /**\n     * @private\n     * @param {HTMLElement} element The element to validate.\n     * @returns {boolean}\n     */\n    function isValidElement(element) {\n      return element.nodeName === 'TD' || element.parentNode.nodeName === 'TD';\n    }\n    const element = event.target;\n\n    this.close();\n\n    if (hasClass(element, 'handsontableInput')) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (!(showRowHeaders || showColHeaders)) {\n      if (!isValidElement(element) && !(hasClass(element, 'current') && hasClass(element, 'wtBorder'))) {\n        return;\n      }\n    }\n\n    const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n\n    this.open({\n      top: event.clientY + offset.top,\n      left: event.clientX + offset.left,\n    });\n  }\n\n  /**\n   * On menu before open listener.\n   */\n  #onMenuBeforeOpen() {\n    this.hot.runHooks('beforeContextMenuShow', this);\n  }\n\n  /**\n   * On menu after open listener.\n   */\n  #onMenuAfterOpen() {\n    this.hot.runHooks('afterContextMenuShow', this);\n  }\n\n  /**\n   * On menu after close listener.\n   */\n  #onMenuAfterClose() {\n    this.hot.listen();\n    this.hot.runHooks('afterContextMenuHide', this);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n    }\n    super.destroy();\n  }\n}\n\nContextMenu.SEPARATOR = {\n  name: SEPARATOR\n};\n","import { arrayEach } from '../../helpers/array';\nimport { hasOwnProperty } from '../../helpers/object';\n\n/**\n * Command executor for ContextMenu.\n *\n * @private\n * @class CommandExecutor\n */\nexport class CommandExecutor {\n  /**\n   * @type {Core}\n   */\n  hot;\n  /**\n   * @type {object}\n   */\n  commands = {};\n  /**\n   * @type {Function}\n   */\n  commonCallback = null;\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Register command.\n   *\n   * @param {string} name Command name.\n   * @param {object} commandDescriptor Command descriptor object with properties like `key` (command id),\n   *                                   `callback` (task to execute), `name` (command name), `disabled` (command availability).\n   */\n  registerCommand(name, commandDescriptor) {\n    this.commands[name] = commandDescriptor;\n  }\n\n  /**\n   * Set common callback which will be trigger on every executed command.\n   *\n   * @param {Function} callback Function which will be fired on every command execute.\n   */\n  setCommonCallback(callback) {\n    this.commonCallback = callback;\n  }\n\n  /**\n   * Execute command by its name.\n   *\n   * @param {string} commandName Command id.\n   * @param {*} params Arguments passed to command task.\n   */\n  execute(commandName, ...params) {\n    const commandSplit = commandName.split(':');\n    const commandNamePrimary = commandSplit[0];\n\n    const subCommandName = commandSplit.length === 2 ? commandSplit[1] : null;\n    let command = this.commands[commandNamePrimary];\n\n    if (!command) {\n      throw new Error(`Menu command '${commandNamePrimary}' not exists.`);\n    }\n    if (subCommandName && command.submenu) {\n      command = findSubCommand(subCommandName, command.submenu.items);\n    }\n    if (command.disabled === true) {\n      return;\n    }\n    if (typeof command.disabled === 'function' && command.disabled.call(this.hot) === true) {\n      return;\n    }\n    if (hasOwnProperty(command, 'submenu')) {\n      return;\n    }\n    const callbacks = [];\n\n    if (typeof command.callback === 'function') {\n      callbacks.push(command.callback);\n    }\n    if (typeof this.commonCallback === 'function') {\n      callbacks.push(this.commonCallback);\n    }\n    params.unshift(commandSplit.join(':'));\n    arrayEach(callbacks, callback => callback.apply(this.hot, params));\n  }\n}\n\n/**\n * @param {string} subCommandName The subcommand name.\n * @param {string[]} subCommands The collection of the commands.\n * @returns {boolean}\n */\nfunction findSubCommand(subCommandName, subCommands) {\n  let command;\n\n  arrayEach(subCommands, (cmd) => {\n    const cmds = cmd.key ? cmd.key.split(':') : null;\n\n    if (Array.isArray(cmds) && cmds[1] === subCommandName) {\n      command = cmd;\n\n      return false;\n    }\n  });\n\n  return command;\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\n\n// IE8-\nvar INCORRECT_RESULT = [].unshift(0) !== 1;\n\n// V8 ~ Chrome < 71 and Safari <= 15.4, FF < 23 throws InternalError\nvar properErrorOnNonWritableLength = function () {\n  try {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty([], 'length', { writable: false }).unshift();\n  } catch (error) {\n    return error instanceof TypeError;\n  }\n};\n\nvar FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength();\n\n// `Array.prototype.unshift` method\n// https://tc39.es/ecma262/#sec-array.prototype.unshift\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  unshift: function unshift(item) {\n    var O = toObject(this);\n    var len = lengthOfArrayLike(O);\n    var argCount = arguments.length;\n    if (argCount) {\n      doesNotExceedSafeInteger(len + argCount);\n      var k = len;\n      while (k--) {\n        var to = k + argCount;\n        if (k in O) O[to] = O[k];\n        else deletePropertyOrThrow(O, to);\n      }\n      for (var j = 0; j < argCount; j++) {\n        O[j] = arguments[j];\n      }\n    } return setArrayLength(O, len + argCount);\n  }\n});\n","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n  if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","import { objectEach, isObject, extend } from '../../helpers/object';\nimport { arrayEach } from '../../helpers/array';\nimport {\n  SEPARATOR,\n  ITEMS,\n  predefinedItems\n} from './predefinedItems';\n\n/**\n * Predefined items class factory for menu items.\n *\n * @private\n * @class ItemsFactory\n */\nexport class ItemsFactory {\n  /**\n   * @type {Core}\n   */\n  hot;\n  /**\n   * @type {object}\n   */\n  predefinedItems = predefinedItems();\n  /**\n   * @type {Array}\n   */\n  defaultOrderPattern;\n\n  constructor(hotInstance, orderPattern = null) {\n    this.hot = hotInstance;\n    this.defaultOrderPattern = orderPattern;\n  }\n\n  /**\n   * Set predefined items.\n   *\n   * @param {Array} predefinedItemsCollection Array of predefined items.\n   */\n  setPredefinedItems(predefinedItemsCollection) {\n    const items = {};\n\n    this.defaultOrderPattern.length = 0;\n\n    objectEach(predefinedItemsCollection, (value, key) => {\n      let menuItemKey = '';\n\n      if (value.name === SEPARATOR) {\n        items[SEPARATOR] = value;\n        menuItemKey = SEPARATOR;\n\n        // Menu item added as a property to array\n      } else if (isNaN(parseInt(key, 10))) {\n        value.key = value.key === undefined ? key : value.key;\n        items[key] = value;\n        menuItemKey = value.key;\n\n      } else {\n        items[value.key] = value;\n        menuItemKey = value.key;\n      }\n      this.defaultOrderPattern.push(menuItemKey);\n    });\n    this.predefinedItems = items;\n  }\n\n  /**\n   * Get all menu items based on pattern.\n   *\n   * @param {Array|object|boolean} pattern Pattern which you can define by displaying menu items order. If `true` default\n   *                                       pattern will be used.\n   * @returns {Array}\n   */\n  getItems(pattern = null) {\n    return getItems(pattern, this.defaultOrderPattern, this.predefinedItems);\n  }\n}\n\n/**\n * @param {object[]} itemsPattern The user defined menu items collection.\n * @param {object[]} defaultPattern The menu default items collection.\n * @param {object} items Additional options.\n * @returns {object[]} Returns parsed and merged menu items collection ready to render.\n */\nfunction getItems(itemsPattern = null, defaultPattern = [], items = {}) {\n  const result = [];\n  let pattern = itemsPattern;\n\n  if (pattern && pattern.items) {\n    pattern = pattern.items;\n\n  } else if (!Array.isArray(pattern)) {\n    pattern = defaultPattern;\n  }\n  if (isObject(pattern)) {\n    objectEach(pattern, (value, key) => {\n      let item = items[typeof value === 'string' ? value : key];\n\n      if (!item) {\n        item = value;\n      }\n      if (isObject(value)) {\n        extend(item, value);\n\n      } else if (typeof item === 'string') {\n        item = { name: item };\n      }\n      if (item.key === undefined) {\n        item.key = key;\n      }\n      result.push(item);\n    });\n  } else {\n    arrayEach(pattern, (name, key) => {\n      let item = items[name];\n\n      // Item deleted from settings `allowInsertRow: false` etc.\n      if (!item && ITEMS.indexOf(name) >= 0) {\n        return;\n      }\n      if (!item) {\n        item = { name, key: `${key}` };\n      }\n      if (isObject(name)) {\n        extend(item, name);\n      }\n      if (item.key === undefined) {\n        item.key = key;\n      }\n      result.push(item);\n    });\n  }\n\n  return result;\n}\n","export * from './menu';\n","import { Positioner } from './positioner';\nimport { createMenuNavigator } from './navigator';\nimport { createKeyboardShortcutsCtrl } from './shortcuts';\nimport { SEPARATOR, NO_ITEMS, predefinedItems } from './../predefinedItems';\nimport {\n  filterSeparators,\n  hasSubMenu,\n  isItemHidden,\n  normalizeSelection,\n  isItemSubMenu,\n  isItemDisabled,\n  isItemSeparator,\n} from './utils';\nimport EventManager from '../../../eventManager';\nimport { arrayEach, arrayFilter, arrayReduce } from '../../../helpers/array';\nimport { isWindowsOS, isMobileBrowser, isIpadOS } from '../../../helpers/browser';\nimport {\n  addClass,\n  isChildOf,\n  getComputedStyle,\n  getParentWindow,\n  hasClass,\n  setAttribute,\n  outerHeight,\n} from '../../../helpers/dom/element';\nimport { isRightClick } from '../../../helpers/dom/event';\nimport { debounce, isFunction } from '../../../helpers/function';\nimport { isUndefined, isDefined } from '../../../helpers/mixed';\nimport { mixin } from '../../../helpers/object';\nimport localHooks from '../../../mixins/localHooks';\nimport { createMenuItemRenderer } from './menuItemRenderer';\nimport {\n  A11Y_EXPANDED,\n  A11Y_MENU,\n  A11Y_TABINDEX,\n} from '../../../helpers/a11y';\n\nconst MIN_WIDTH = 215;\n\n/**\n * @typedef MenuOptions\n * @property {Menu} [parent=null] Instance of {@link Menu}.\n * @property {string} [name=null] Name of the menu.\n * @property {string} [className=''] Custom class name.\n * @property {boolean} [keepInViewport=true] Determine if should be kept in viewport.\n * @property {boolean} [standalone] Enabling closing menu when clicked element is not belongs to menu itself.\n * @property {number} [minWidth=MIN_WIDTH] The minimum width.\n * @property {HTMLElement} [container] The container.\n */\n\n/**\n * @private\n * @class Menu\n */\nexport class Menu {\n  /**\n   * The Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * The Menu options.\n   *\n   * @type {object}\n   */\n  options;\n  /**\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * The Menu container element.\n   *\n   * @type {HTMLElement}\n   */\n  container;\n  /**\n   * @type {Positioner}\n   */\n  positioner;\n  /**\n   * The instance of the Handsontable that is used as a menu.\n   *\n   * @type {Core}\n   */\n  hotMenu = null;\n  /**\n   * The collection of the Handsontable instances that are used as sub-menus.\n   *\n   * @type {object}\n   */\n  hotSubMenus = {};\n  /**\n   * If the menu acts as the sub-menu then this property contains the reference to the parent menu.\n   *\n   * @type {Menu}\n   */\n  parentMenu;\n  /**\n   * The menu items entries.\n   *\n   * @type {object[]}\n   */\n  menuItems = null;\n  /**\n   * @type {boolean}\n   */\n  origOutsideClickDeselects = null;\n  /**\n   * The controller module that allows modifying the menu item selection positions.\n   *\n   * @type {Paginator}\n   */\n  #navigator;\n  /**\n   * The controller module that allows extending the keyboard shortcuts for the menu.\n   *\n   * @type {KeyboardShortcutsMenuController}\n   */\n  #shortcutsCtrl;\n  /**\n   * The border width of the table used in the menu.\n   *\n   * @type {number}\n   */\n  #tableBorderWidth;\n\n  /**\n   * Getter for the table border width.\n   * This getter retrieves the border width of the table used in the menu.\n   *\n   * @returns {number} The border width of the table in pixels.\n   */\n  get tableBorderWidth() {\n    if (this.#tableBorderWidth === undefined && this.hotMenu) {\n      this.#tableBorderWidth = parseInt(getComputedStyle(this.hotMenu.view._wt.wtTable.TABLE).borderWidth, 10);\n    }\n\n    return this.#tableBorderWidth;\n  }\n\n  /**\n   * @param {Core} hotInstance Handsontable instance.\n   * @param {MenuOptions} [options] Menu options.\n   */\n  constructor(hotInstance, options) {\n    this.hot = hotInstance;\n    this.options = options || {\n      parent: null,\n      name: null,\n      className: '',\n      keepInViewport: true,\n      standalone: false,\n      minWidth: MIN_WIDTH,\n      container: this.hot.rootDocument.documentElement,\n    };\n    this.container = this.createContainer(this.options.name);\n    this.positioner = new Positioner(this.options.keepInViewport);\n    this.parentMenu = this.options.parent || null;\n\n    this.registerEvents();\n\n    if (this.isSubMenu()) {\n      this.addLocalHook('afterSelectionChange',\n        (...args) => this.parentMenu.runLocalHooks('afterSelectionChange', ...args));\n    }\n  }\n\n  /**\n   * Register event listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    let frame = this.hot.rootWindow;\n\n    while (frame) {\n      this.eventManager.addEventListener(frame.document, 'mousedown', event => this.onDocumentMouseDown(event));\n      this.eventManager.addEventListener(frame.document, 'touchstart', event => this.onDocumentMouseDown(event));\n      this.eventManager.addEventListener(frame.document, 'contextmenu', event => this.onDocumentContextMenu(event));\n\n      frame = getParentWindow(frame);\n    }\n  }\n\n  /**\n   * Set array of objects which defines menu items.\n   *\n   * @param {Array} menuItems Menu items to display.\n   */\n  setMenuItems(menuItems) {\n    this.menuItems = menuItems;\n  }\n\n  /**\n   * Gets the controller object that allows modifying the the menu item selection.\n   *\n   * @returns {Paginator | undefined}\n   */\n  getNavigator() {\n    return this.#navigator;\n  }\n\n  /**\n   * Gets the controller object that allows extending the keyboard shortcuts of the menu.\n   *\n   * @returns {KeyboardShortcutsMenuController | undefined}\n   */\n  getKeyboardShortcutsCtrl() {\n    return this.#shortcutsCtrl;\n  }\n\n  /**\n   * Returns currently selected menu item. Returns `null` if no item was selected.\n   *\n   * @returns {object|null}\n   */\n  getSelectedItem() {\n    return this.hasSelectedItem() ? this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelectedLast()[0]) : null;\n  }\n\n  /**\n   * Checks if the menu has selected (highlighted) any item from the menu list.\n   *\n   * @returns {boolean}\n   */\n  hasSelectedItem() {\n    return Array.isArray(this.hotMenu.getSelectedLast());\n  }\n\n  /**\n   * Check if menu is using as sub-menu.\n   *\n   * @returns {boolean}\n   */\n  isSubMenu() {\n    return this.parentMenu !== null;\n  }\n\n  /**\n   * Open menu.\n   *\n   * @fires Hooks#beforeContextMenuShow\n   * @fires Hooks#afterContextMenuShow\n   */\n  open() {\n    this.runLocalHooks('beforeOpen');\n\n    this.container.removeAttribute('style');\n    this.container.style.display = 'block';\n\n    const delayedOpenSubMenu = debounce(row => this.openSubMenu(row), 300);\n    const minWidthOfMenu = this.options.minWidth || MIN_WIDTH;\n    let noItemsDefined = false;\n\n    let filteredItems = arrayFilter(this.menuItems, (item) => {\n      if (item.key === NO_ITEMS) {\n        noItemsDefined = true;\n      }\n\n      return isItemHidden(item, this.hot);\n    });\n\n    if (filteredItems.length < 1 && !noItemsDefined) {\n      filteredItems.push(predefinedItems()[NO_ITEMS]);\n\n    } else if (filteredItems.length === 0) {\n      return;\n    }\n\n    filteredItems = filterSeparators(filteredItems, SEPARATOR);\n\n    let shouldAutoCloseMenu = false;\n\n    const settings = {\n      data: filteredItems,\n      colHeaders: false,\n      autoColumnSize: true,\n      autoWrapRow: false,\n      modifyColWidth(width) {\n        if (isDefined(width) && width < minWidthOfMenu) {\n          return minWidthOfMenu;\n        }\n\n        return width;\n      },\n      autoRowSize: false,\n      readOnly: true,\n      editor: false,\n      copyPaste: false,\n      hiddenRows: true,\n      maxCols: 1,\n      columns: [{\n        data: 'name',\n        renderer: createMenuItemRenderer(this.hot),\n      }],\n      renderAllRows: true,\n      fragmentSelection: false,\n      outsideClickDeselects: false,\n      disableVisualSelection: 'area',\n      layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',\n      ariaTags: false,\n      beforeOnCellMouseOver: (event, coords) => {\n        this.#navigator.setCurrentPage(coords.row);\n      },\n      afterOnCellMouseOver: (event, coords) => {\n        if (this.isAllSubMenusClosed()) {\n          delayedOpenSubMenu(coords.row);\n        } else {\n          this.openSubMenu(coords.row);\n        }\n      },\n      rowHeights: row => (filteredItems[row].name === SEPARATOR ? 1 : undefined),\n      afterOnCellContextMenu: (event) => {\n        event.preventDefault();\n\n        // On the Windows platform, the \"contextmenu\" is triggered after the \"mouseup\" so that's\n        // why the closing menu is here. (#6507#issuecomment-582392301).\n        if (isWindowsOS() && shouldAutoCloseMenu && this.hasSelectedItem()) {\n          this.close(true);\n        }\n      },\n      afterSelection: (row, column, row2, column2, preventScrolling) => {\n        // do not scroll the viewport when mouse clicks on partially visible menu item\n        if (this.hotMenu.view.isMouseDown()) {\n          preventScrolling.value = true;\n        }\n\n        this.runLocalHooks('afterSelectionChange', this.getSelectedItem());\n      },\n      beforeOnCellMouseUp: (event) => {\n        if (this.hasSelectedItem()) {\n          shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());\n          this.executeCommand(event);\n        }\n      },\n      afterOnCellMouseUp: (event) => {\n        // If the code runs on the other platform than Windows, the \"mouseup\" is triggered\n        // after the \"contextmenu\". So then \"mouseup\" closes the menu. Otherwise, the closing\n        // menu responsibility is forwarded to \"afterOnCellContextMenu\" callback (#6507#issuecomment-582392301).\n        if ((!isWindowsOS() || !isRightClick(event)) && shouldAutoCloseMenu && this.hasSelectedItem()) {\n          // The timeout is necessary only for mobile devices. For desktop, the click event that is fired\n          // right after the mouseup event gets the event element target the same as the mouseup event.\n          // For mobile devices, the click event is triggered with native delay (~300ms), so when the mouseup\n          // event hides the tapped element, the click event grabs the element below. As a result, the filter\n          // by condition menu is closed and immediately open on tapping the \"None\" item.\n          if (isMobileBrowser() || isIpadOS()) {\n            this.hot._registerTimeout(() => this.close(true), 325);\n          } else {\n            this.close(true);\n          }\n        }\n      },\n      afterUnlisten: () => {\n        // Restore menu focus, fix for `this.instance.unlisten();` call in the tableView.js@260 file.\n        // This prevents losing table responsiveness for keyboard events when filter select menu is closed (#6497).\n        if (!this.hasSelectedItem() && this.isOpened()) {\n          this.hotMenu.listen();\n        }\n      },\n    };\n\n    this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;\n    this.hot.getSettings().outsideClickDeselects = false;\n    this.hotMenu = new this.hot.constructor(this.container, settings);\n    this.hotMenu.addHook('afterInit', () => this.onAfterInit());\n    this.hotMenu.init();\n\n    this.#navigator = createMenuNavigator(this.hotMenu);\n    this.#shortcutsCtrl = createKeyboardShortcutsCtrl(this);\n    this.#shortcutsCtrl.listen();\n\n    this.focus();\n\n    if (this.isSubMenu()) {\n      this.addLocalHook('afterOpen', () => this.parentMenu.runLocalHooks('afterSubmenuOpen', this));\n    }\n\n    this.runLocalHooks('afterOpen', this);\n  }\n\n  /**\n   * Close menu.\n   *\n   * @param {boolean} [closeParent=false] If `true` try to close parent menu if exists.\n   */\n  close(closeParent = false) {\n    if (!this.isOpened()) {\n      return;\n    }\n\n    if (closeParent && this.isSubMenu()) {\n      this.parentMenu.close();\n\n    } else {\n      this.#navigator.clear();\n      this.closeAllSubMenus();\n      this.container.style.display = 'none';\n      this.hotMenu.destroy();\n      this.hotMenu = null;\n      this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;\n      this.runLocalHooks('afterClose');\n\n      if (this.isSubMenu()) {\n        if (this.hot.getSettings().ariaTags) {\n          const selection = this.parentMenu.hotMenu.getSelectedLast();\n\n          if (selection) {\n            const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);\n\n            setAttribute(cell, [\n              A11Y_EXPANDED(false),\n            ]);\n          }\n        }\n\n        this.parentMenu.hotMenu.listen();\n      }\n    }\n  }\n\n  /**\n   * Open sub menu at the provided row index.\n   *\n   * @param {number} row Row index.\n   * @returns {Menu|boolean} Returns created menu or `false` if no one menu was created.\n   */\n  openSubMenu(row) {\n    if (!this.hotMenu) {\n      return false;\n    }\n\n    const cell = this.hotMenu.getCell(row, 0);\n\n    this.closeAllSubMenus();\n\n    if (!cell || !hasSubMenu(cell)) {\n      return false;\n    }\n\n    const dataItem = this.hotMenu.getSourceDataAtRow(row);\n    const subMenu = new Menu(this.hot, {\n      parent: this,\n      name: dataItem.name,\n      className: this.options.className,\n      keepInViewport: true,\n      container: this.options.container,\n    });\n\n    subMenu.setMenuItems(dataItem.submenu.items);\n    subMenu.open();\n    subMenu.setPosition(cell.getBoundingClientRect());\n    this.hotSubMenus[dataItem.key] = subMenu;\n\n    // Update the accessibility tags on the cell being the base for the submenu.\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(cell, [\n        A11Y_EXPANDED(true)\n      ]);\n    }\n\n    return subMenu;\n  }\n\n  /**\n   * Close sub menu at row index.\n   *\n   * @param {number} row Row index.\n   */\n  closeSubMenu(row) {\n    const dataItem = this.hotMenu.getSourceDataAtRow(row);\n    const menus = this.hotSubMenus[dataItem.key];\n\n    if (menus) {\n      menus.destroy();\n      delete this.hotSubMenus[dataItem.key];\n\n      const cell = this.hotMenu.getCell(row, 0);\n\n      // Update the accessibility tags on the cell being the base for the submenu.\n      if (this.hot.getSettings().ariaTags) {\n        setAttribute(cell, [\n          A11Y_EXPANDED(false),\n        ]);\n      }\n    }\n  }\n\n  /**\n   * Close all opened sub menus.\n   */\n  closeAllSubMenus() {\n    arrayEach(this.hotMenu.getData(), (value, row) => this.closeSubMenu(row));\n  }\n\n  /**\n   * Checks if all created and opened sub menus are closed.\n   *\n   * @returns {boolean}\n   */\n  isAllSubMenusClosed() {\n    return Object.keys(this.hotSubMenus).length === 0;\n  }\n\n  /**\n   * Focus the menu so all keyboard shortcuts become active.\n   */\n  focus() {\n    if (this.isOpened()) {\n      this.hotMenu.rootElement.focus({\n        preventScroll: true,\n      });\n      this.getKeyboardShortcutsCtrl().listen();\n      this.hotMenu.listen();\n    }\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    const menuContainerParentElement = this.container.parentNode;\n\n    this.clearLocalHooks();\n    this.close();\n    this.parentMenu = null;\n    this.eventManager.destroy();\n\n    if (menuContainerParentElement) {\n      menuContainerParentElement.removeChild(this.container);\n    }\n  }\n\n  /**\n   * Checks if menu was opened.\n   *\n   * @returns {boolean} Returns `true` if menu was opened.\n   */\n  isOpened() {\n    return this.hotMenu !== null;\n  }\n\n  /**\n   * Execute menu command.\n   *\n   * The `executeCommand()` method works only for selected cells.\n   *\n   * When no cells are selected, `executeCommand()` doesn't do anything.\n   *\n   * @param {Event} [event] The mouse event object.\n   */\n  executeCommand(event) {\n    if (!this.isOpened() || !this.hasSelectedItem()) {\n      return;\n    }\n    const selectedItem = this.getSelectedItem();\n\n    this.runLocalHooks('select', selectedItem, event);\n\n    if (this.isCommandPassive(selectedItem)) {\n      return;\n    }\n\n    const selRanges = this.hot.getSelectedRange();\n    const normalizedSelection = selRanges ? normalizeSelection(selRanges) : [];\n\n    this.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n\n    if (this.isSubMenu()) {\n      this.parentMenu.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n    }\n  }\n\n  /**\n   * Checks if the passed command is passive or not. The command is passive when it's marked as\n   * disabled, the descriptor object contains `isCommand` property set to `false`, command\n   * is a separator, or the item is recognized as submenu. For passive items the menu is not\n   * closed automatically after the user trigger the command through the UI.\n   *\n   * @param {object} commandDescriptor Selected menu item from the menu data source.\n   * @returns {boolean}\n   */\n  isCommandPassive(commandDescriptor) {\n    return commandDescriptor.isCommand === false ||\n           isItemSeparator(commandDescriptor) ||\n           isItemDisabled(commandDescriptor, this.hot) ||\n           isItemSubMenu(commandDescriptor);\n  }\n\n  /**\n   * Set offset menu position for specified area (`above`, `below`, `left` or `right`).\n   *\n   * @param {string} area Specified area name (`above`, `below`, `left` or `right`).\n   * @param {number} offset Offset value.\n   */\n  setOffset(area, offset = 0) {\n    this.positioner.setOffset(area, offset);\n  }\n\n  /**\n   * Set menu position based on dom event or based on literal object.\n   *\n   * @param {Event|object} coords Event or literal Object with coordinates.\n   */\n  setPosition(coords) {\n    if (this.isSubMenu()) {\n      this.positioner.setParentElement(this.parentMenu.container);\n    }\n\n    this.positioner\n      .setElement(this.container)\n      .updatePosition(coords);\n  }\n\n  /**\n   * Updates the dimensions of the menu based on its content.\n   * This method calculates the real height of the menu by summing up the heights of its items,\n   * and adjusts the width and height of the menu's holder and hider elements accordingly.\n   */\n  updateMenuDimensions() {\n    const { wtTable } = this.hotMenu.view._wt;\n    const data = this.hotMenu.getSettings().data;\n    const hiderStyle = wtTable.hider.style;\n    const holderStyle = wtTable.holder.style;\n    const currentHiderWidth = parseInt(hiderStyle.width, 10);\n\n    const realHeight = arrayReduce(data,\n      (accumulator, value, index) => {\n        const itemCell = this.hotMenu.getCell(index, 0);\n        const currentRowHeight = itemCell ? outerHeight(this.hotMenu.getCell(index, 0)) : 0;\n\n        return accumulator + (value.name === SEPARATOR ? 1 : currentRowHeight);\n      }, 0);\n\n    // Additional 3px to menu's size because of additional border around its `table.htCore`.\n    holderStyle.width = `${currentHiderWidth + 3}px`;\n    holderStyle.height = `${realHeight + 3}px`;\n    hiderStyle.height = holderStyle.height;\n  }\n\n  /**\n   * Create container/wrapper for handsontable.\n   *\n   * @private\n   * @param {string} [name] Class name.\n   * @returns {HTMLElement}\n   */\n  createContainer(name = null) {\n    const doc = this.options.container.ownerDocument;\n    let className = name;\n    let container;\n\n    if (className) {\n      if (isFunction(className)) {\n        className = className.call(this.hot);\n\n        if (className === null || isUndefined(className)) {\n          className = '';\n\n        } else {\n          className = className.toString();\n        }\n      }\n\n      className = className.replace(/[^A-z0-9]/g, '_');\n      className = `${this.options.className}Sub_${className}`;\n\n      container = doc.querySelector(`.${this.options.className}.${className}`);\n    }\n\n    if (!container) {\n      container = doc.createElement('div');\n\n      addClass(container, `htMenu ${this.options.className}`);\n\n      if (className) {\n        addClass(container, className);\n      }\n\n      this.options.container.appendChild(container);\n    }\n\n    return container;\n  }\n\n  /**\n   * On after init listener.\n   *\n   * @private\n   */\n  onAfterInit() {\n    this.updateMenuDimensions();\n\n    // Replace the default accessibility tags with the context menu's\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(this.hotMenu.rootElement, [\n        A11Y_MENU(),\n        A11Y_TABINDEX(-1),\n      ]);\n    }\n  }\n\n  /**\n   * Document mouse down listener.\n   *\n   * @private\n   * @param {Event} event The mouse event object.\n   */\n  onDocumentMouseDown(event) {\n    if (!this.isOpened()) {\n      return;\n    }\n\n    // Close menu when clicked element is not belongs to menu itself\n    if (this.options.standalone && this.hotMenu && !isChildOf(event.target, this.hotMenu.rootElement)) {\n      this.close(true);\n\n      // Automatically close menu when clicked element is not belongs to menu or submenu (not necessarily to itself)\n    } else if ((this.isAllSubMenusClosed() || this.isSubMenu()) && !isChildOf(event.target, '.htMenu')) {\n      this.close(true);\n    }\n  }\n\n  /**\n   * Document's contextmenu listener.\n   *\n   * @private\n   * @param {MouseEvent} event The mouse event object.\n   */\n  onDocumentContextMenu(event) {\n    if (!this.isOpened()) {\n      return;\n    }\n\n    if (hasClass(event.target, 'htCore') && isChildOf(event.target, this.hotMenu.rootElement)) {\n      event.preventDefault();\n    }\n  }\n}\n\nmixin(Menu, localHooks);\n","import { Cursor } from './cursor';\n\n/**\n * Helper class for positioning the menu and submenus in the correct place relative to the\n * cursor position (DOM element or mouse coordinates).\n *\n * @private\n * @class Positioner\n */\nexport class Positioner {\n  /**\n   * The menu container element the positioning will be applied to.\n   *\n   * @type {HTMLElement}\n   */\n  #container;\n  /**\n   * For positioning the submenu, the parent element is used to calculate offsets to ensure that submenu\n   * is positioned right next to the parent menu.\n   *\n   * @type {HTMLElement}\n   */\n  #parentContainer;\n  /**\n   * The instance of the Cursor class.\n   *\n   * @type {Cursor}\n   */\n  #cursor;\n  /**\n   * Enabling the option allows changing the position calculation so that the menus (or submenus)\n   * are always placed within the visible viewport of the browser.\n   *\n   * @type {boolean}\n   */\n  #keepInViewport = false;\n  /**\n   * Allows apply the position offset for directions.\n   *\n   * @type {{above: number, below: number, left: number, right: number}}\n   */\n  #offset = {\n    above: 0,\n    below: 0,\n    left: 0,\n    right: 0,\n  };\n\n  constructor(keepInViewport) {\n    this.#keepInViewport = keepInViewport;\n  }\n\n  /**\n   * Sets offset position for specified directions (`above`, `below`, `left` or `right`).\n   *\n   * @param {'above' | 'below' | 'left' | 'right'} direction A direction name.\n   * @param {number} [offset=0] Offset value.\n   * @returns {Positioner}\n   */\n  setOffset(direction, offset = 0) {\n    this.#offset[direction] = offset;\n\n    return this;\n  }\n\n  /**\n   * Sets the menu element to work with. The element can be owned by the main menu or the submenu.\n   *\n   * @param {HTMLElement} container The menu container element.\n   * @returns {Positioner}\n   */\n  setElement(container) {\n    this.#container = container;\n\n    return this;\n  }\n\n  /**\n   * Sets the parent menu element to work with.\n   *\n   * @param {HTMLElement} container The parent menu container element.\n   * @returns {Positioner}\n   */\n  setParentElement(container) {\n    this.#parentContainer = container;\n\n    return this;\n  }\n\n  /**\n   * Updates the menu position.\n   *\n   * @param {object|MouseEvent} coords The literal object with `top`, `left`, `width` and `height` props or a\n   * mouse event object.\n   */\n  updatePosition(coords) {\n    this.#cursor = new Cursor(coords, this.#container.ownerDocument.defaultView);\n\n    if (this.#keepInViewport) {\n      if (this.#cursor.fitsBelow(this.#container)) {\n        this.setPositionBelowCursor();\n\n      } else if (this.#cursor.fitsAbove(this.#container)) {\n        this.setPositionAboveCursor();\n\n      } else {\n        this.setPositionBelowCursor();\n      }\n\n      this.updateHorizontalPosition();\n    } else {\n      this.setPositionBelowCursor();\n      this.setPositionOnRightOfCursor();\n    }\n  }\n\n  /**\n   * Updates the menu horizontal position.\n   */\n  updateHorizontalPosition() {\n    if (this.#container.dir === 'rtl') {\n      if (this.#cursor.fitsOnLeft(this.#container)) {\n        this.setPositionOnLeftOfCursor();\n      } else {\n        this.setPositionOnRightOfCursor();\n      }\n\n    } else if (this.#cursor.fitsOnRight(this.#container)) {\n      this.setPositionOnRightOfCursor();\n\n    } else {\n      this.setPositionOnLeftOfCursor();\n    }\n  }\n\n  /**\n   * Sets the menu position above the cursor object.\n   */\n  setPositionAboveCursor() {\n    let top = this.#offset.above + this.#cursor.top - this.#container.offsetHeight;\n\n    if (this.#parentContainer) {\n      top = this.#cursor.top + this.#cursor.cellHeight - this.#container.offsetHeight + 3;\n    }\n\n    this.#container.style.top = `${top}px`;\n  }\n\n  /**\n   * Sets the menu position below the cursor object.\n   */\n  setPositionBelowCursor() {\n    let top = this.#offset.below + this.#cursor.top + 1;\n\n    if (this.#parentContainer) {\n      top = this.#cursor.top - 1;\n    }\n\n    this.#container.style.top = `${top}px`;\n  }\n\n  /**\n   * Sets the menu position on the right of the cursor object.\n   */\n  setPositionOnRightOfCursor() {\n    let left = this.#cursor.left;\n\n    if (this.#parentContainer) {\n      const borderRightWidth = Number.parseInt(getComputedStyle(this.#parentContainer\n        .querySelector('.htCore')).borderRightWidth, 10);\n\n      left += this.#cursor.cellWidth + borderRightWidth;\n    } else {\n      left += this.#offset.right;\n    }\n\n    this.#container.style.left = `${left}px`;\n  }\n\n  /**\n   * Sets the menu position on the left of the cursor object.\n   */\n  setPositionOnLeftOfCursor() {\n    let left = this.#offset.left + this.#cursor.left - this.#container.offsetWidth;\n\n    if (this.#parentContainer) {\n      const borderLeftWidth = Number.parseInt(getComputedStyle(this.#parentContainer\n        .querySelector('.htCore')).borderLeftWidth, 10);\n\n      left -= borderLeftWidth;\n    }\n\n    this.#container.style.left = `${left}px`;\n  }\n}\n","/**\n * Helper class for checking if element will fit at the desired side of cursor.\n *\n * @private\n * @class Cursor\n */\nexport class Cursor {\n  /**\n   * @type {number}\n   */\n  top;\n  /**\n   * @type {number}\n   */\n  topRelative;\n  /**\n   * @type {number}\n   */\n  left;\n  /**\n   * @type {number}\n   */\n  leftRelative;\n  /**\n   * @type {number}\n   */\n  scrollTop;\n  /**\n   * @type {number}\n   */\n  scrollLeft;\n  /**\n   * @type {number}\n   */\n  cellHeight;\n  /**\n   * @type {number}\n   */\n  cellWidth;\n\n  constructor(object, rootWindow) {\n    const windowScrollTop = rootWindow.scrollY;\n    const windowScrollLeft = rootWindow.scrollX;\n    let top;\n    let topRelative;\n    let left;\n    let leftRelative;\n    let cellHeight;\n    let cellWidth;\n\n    this.rootWindow = rootWindow;\n    this.type = this.getSourceType(object);\n\n    if (this.type === 'literal') {\n      top = parseInt(object.top, 10);\n      left = parseInt(object.left, 10);\n      cellHeight = object.height || 0;\n      cellWidth = object.width || 0;\n      topRelative = top;\n      leftRelative = left;\n      top += windowScrollTop;\n      left += windowScrollLeft;\n\n    } else if (this.type === 'event') {\n      top = parseInt(object.pageY, 10);\n      left = parseInt(object.pageX, 10);\n      cellHeight = object.target.clientHeight;\n      cellWidth = object.target.clientWidth;\n      topRelative = top - windowScrollTop;\n      leftRelative = left - windowScrollLeft;\n    }\n\n    this.top = top;\n    this.topRelative = topRelative;\n    this.left = left;\n    this.leftRelative = leftRelative;\n    this.scrollTop = windowScrollTop;\n    this.scrollLeft = windowScrollLeft;\n    this.cellHeight = cellHeight;\n    this.cellWidth = cellWidth;\n  }\n\n  /**\n   * Get source type name.\n   *\n   * @param {*} object Event or Object with coordinates.\n   * @returns {string} Returns one of this values: `'literal'`, `'event'`.\n   */\n  getSourceType(object) {\n    let type = 'literal';\n\n    if (object instanceof Event) {\n      type = 'event';\n    }\n\n    return type;\n  }\n\n  /**\n   * Checks if element can be placed above the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit above the cursor.\n   * @returns {boolean}\n   */\n  fitsAbove(element) {\n    return this.topRelative >= element.offsetHeight;\n  }\n\n  /**\n   * Checks if element can be placed below the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit below the cursor.\n   * @param {number} [viewportHeight] The viewport height.\n   * @returns {boolean}\n   */\n  fitsBelow(element, viewportHeight = this.rootWindow.innerHeight) {\n    return this.topRelative + element.offsetHeight <= viewportHeight;\n  }\n\n  /**\n   * Checks if element can be placed on the right of the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit on the right of the cursor.\n   * @param {number} [viewportWidth] The viewport width.\n   * @returns {boolean}\n   */\n  fitsOnRight(element, viewportWidth = this.rootWindow.innerWidth) {\n    return this.leftRelative + this.cellWidth + element.offsetWidth <= viewportWidth;\n  }\n\n  /**\n   * Checks if element can be placed on the left on the cursor.\n   *\n   * @param {HTMLElement} element Element to check if it's size will fit on the left of the cursor.\n   * @returns {boolean}\n   */\n  fitsOnLeft(element) {\n    return this.leftRelative >= element.offsetWidth;\n  }\n}\n","import { createPaginator } from '../../../utils/paginator';\nimport {\n  isSeparator,\n  isDisabled,\n  isSelectionDisabled,\n} from './utils';\n\n/**\n * Creates navigator for menus and submenus.\n *\n * @param {Handsontable} hotMenu The Handsontable instance of the menu.\n * @returns {Paginator}\n */\nexport function createMenuNavigator(hotMenu) {\n  return createPaginator({\n    size: () => hotMenu.countRows(),\n    onItemSelect(currentItem, directItemChange) {\n      const cell = hotMenu.getCell(currentItem, 0);\n\n      if (!cell || isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {\n        return false;\n      }\n\n      hotMenu.selectCell(currentItem, 0, ...(directItemChange ? [currentItem, 0, false, false] : []));\n    },\n    onClear() {\n      hotMenu.deselectCell();\n    }\n  });\n}\n","import { clamp } from '../helpers/number';\n\n/**\n * @typedef Paginator\n * @property {function(number): void} setCurrentPage Sets the current index to the specific page.\n * @property {function(): number} getCurrentPage Gets the current page.\n * @property {function(): number} getSize Gets the total number of pages.\n * @property {function(): void} toFirstItem Move the index to the first page.\n * @property {function(): void} toLastItem Move the index to the last page.\n * @property {function(): void} toNextItem Move the index to the next page.\n * @property {function(): void} toPreviousItem Move the index to the previous page.\n * @property {function(): void} clear Clear the internal state of the paginator.\n */\n/**\n * @param {object} options Paginator options.\n * @param {number} [options.initialPage] Initial index from which paging starts. Also, after clearing the paginator\n * the page is cleared to the initial page.\n * @param {function(): number} [options.size] Sets the max size of the pages.\n * @param {function(number): boolean | void} [options.onItemSelect] Fires the function on each page change.\n * @param {function(): void} [options.onClear] Fires the function after clearing the state.\n * @returns {Paginator}\n */\nexport function createPaginator({\n  initialPage = -1,\n  size = () => 0,\n  onItemSelect = () => {},\n  onClear = () => {},\n}) {\n  const visitedPages = new Set();\n  let currentIndex = clamp(initialPage, -1, getSize() - 1);\n\n  /**\n   * Updates the internal state of the paginator.\n   *\n   * @param {number} newIndex The page index to switch.\n   * @param {-1|1} direction The direction of traversing the pages in case when they are disabled.\n   * @returns {number} Returns the final index of the page.\n   */\n  function _updateState(newIndex, direction) {\n    const lastIndex = getSize() - 1;\n\n    if (newIndex < 0) {\n      newIndex = lastIndex;\n    }\n    if (newIndex > lastIndex) {\n      newIndex = 0;\n    }\n\n    if (visitedPages.has(newIndex)) {\n      return -1;\n    }\n\n    visitedPages.add(newIndex);\n\n    const changeProceed = onItemSelect(newIndex, false);\n\n    if (changeProceed === false) {\n      newIndex = _updateState(\n        direction === 1 ? ++newIndex : --newIndex, // eslint-disable-line no-plusplus\n        direction\n      );\n    }\n\n    return newIndex;\n  }\n\n  /**\n   * Sets the page index as current one.\n   *\n   * @param {number} index The index to set.\n   */\n  function setCurrentPage(index) {\n    if (index > -1 && index < getSize() && onItemSelect(index, true) !== false) {\n      currentIndex = index;\n    }\n  }\n\n  /**\n   * Gets the current page.\n   *\n   * @returns {number}\n   */\n  function getCurrentPage() {\n    return currentIndex;\n  }\n\n  /**\n   * Moves the index to the first page.\n   */\n  function toFirstItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(0, 1);\n    }\n  }\n\n  /**\n   * Moves the index to the last page.\n   */\n  function toLastItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(getSize() - 1, -1);\n    }\n  }\n\n  /**\n   * Moves the index to the next page.\n   */\n  function toNextItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(++currentIndex, 1); // eslint-disable-line no-plusplus\n    }\n  }\n\n  /**\n   * Moves the index to the previous page.\n   */\n  function toPreviousItem() {\n    if (getSize() > 0) {\n      visitedPages.clear();\n      currentIndex = _updateState(--currentIndex, -1); // eslint-disable-line no-plusplus\n    }\n  }\n\n  /**\n   * Gets the total number of pages.\n   *\n   * @returns {number}\n   */\n  function getSize() {\n    return Math.max(size(), 0);\n  }\n\n  /**\n   * Clears the internal state of the paginator.\n   */\n  function clear() {\n    visitedPages.clear();\n    currentIndex = initialPage;\n    onClear();\n  }\n\n  return {\n    setCurrentPage,\n    getCurrentPage,\n    toFirstItem,\n    toLastItem,\n    toNextItem,\n    toPreviousItem,\n    getSize,\n    clear,\n  };\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport { hasOwnProperty } from '../../../helpers/object';\nimport { hasClass } from '../../../helpers/dom/element';\nimport { SEPARATOR } from './../predefinedItems';\n\n/**\n * @param {CellRange[]} selRanges An array of the cell ranges.\n * @returns {object[]}\n */\nexport function normalizeSelection(selRanges) {\n  return arrayMap(selRanges, range => ({\n    start: range.getTopStartCorner(),\n    end: range.getBottomEndCorner(),\n  }));\n}\n\n/**\n * Check if the provided element is a submenu opener.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemSubMenu(itemToTest) {\n  return hasOwnProperty(itemToTest, 'submenu');\n}\n\n/**\n * Check if the provided element is a menu separator.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemSeparator(itemToTest) {\n  return new RegExp(SEPARATOR, 'i').test(itemToTest.name);\n}\n\n/**\n * Check if the provided element presents the disabled menu item.\n *\n * @param {object} itemToTest Item element.\n * @param {object} hot The context for the item function.\n * @returns {boolean}\n */\nexport function isItemDisabled(itemToTest, hot) {\n  return itemToTest.disabled === true ||\n         (typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(hot) === true);\n}\n\n/**\n * Check if the provided element presents the disabled selection menu item.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemSelectionDisabled(itemToTest) {\n  return hasOwnProperty(itemToTest, 'disableSelection');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function isSeparator(cell) {\n  return hasClass(cell, 'htSeparator');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function hasSubMenu(cell) {\n  return hasClass(cell, 'htSubmenu');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function isDisabled(cell) {\n  return hasClass(cell, 'htDisabled');\n}\n\n/**\n * @param {HTMLElement} cell The HTML cell element to check.\n * @returns {boolean}\n */\nexport function isSelectionDisabled(cell) {\n  return hasClass(cell, 'htSelectionDisabled');\n}\n\n/**\n * @param {object} item The object which describes the context menu item properties.\n * @param {Core} instance The Handsontable instance.\n * @returns {boolean}\n */\nexport function isItemHidden(item, instance) {\n  return !item.hidden || !(typeof item.hidden === 'function' && item.hidden.call(instance));\n}\n\n/**\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\nfunction shiftSeparators(items, separator) {\n  const result = items.slice(0);\n\n  for (let i = 0; i < result.length;) {\n    if (result[i].name === separator) {\n      result.shift();\n    } else {\n      break;\n    }\n  }\n\n  return result;\n}\n\n/**\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\nfunction popSeparators(items, separator) {\n  let result = items.slice(0);\n\n  result.reverse();\n  result = shiftSeparators(result, separator);\n  result.reverse();\n\n  return result;\n}\n\n/**\n * Removes duplicated menu separators from the context menu items collection.\n *\n * @param {object[]} items The context menu items collection.\n * @returns {object[]}\n */\nfunction removeDuplicatedSeparators(items) {\n  const result = [];\n\n  arrayEach(items, (value, index) => {\n    if (index > 0) {\n      if (result[result.length - 1].name !== value.name) {\n        result.push(value);\n      }\n    } else {\n      result.push(value);\n    }\n  });\n\n  return result;\n}\n\n/**\n * Removes menu separators from the context menu items collection.\n *\n * @param {object[]} items The context menu items collection.\n * @param {string} separator The string which identifies the context menu separator item.\n * @returns {object[]}\n */\nexport function filterSeparators(items, separator = SEPARATOR) {\n  let result = items.slice(0);\n\n  result = shiftSeparators(result, separator);\n  result = popSeparators(result, separator);\n  result = removeDuplicatedSeparators(result);\n\n  return result;\n}\n\n/**\n * Check if the provided element presents the checkboxable menu item.\n *\n * @param {object} itemToTest Item element.\n * @returns {boolean}\n */\nexport function isItemCheckable(itemToTest) {\n  return itemToTest.checkable === true;\n}\n","import { createDefaultShortcutsList } from './defaultShortcutsList';\n\nconst SHORTCUTS_CONTEXT = 'menu';\nconst SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;\n\n/**\n * @typedef KeyboardShortcutsMenuController\n * @property {function(KeyboardShortcut[]): void} addCustomShortcuts Adds (by replacing) new keyboard shortcuts to the menu.\n * @property {function(string): number} getContext Gets the keyboard shortcuts context by name.\n * @property {function(string): void} listen Sets the active keyboard shortcuts context of the menu.\n */\n/**\n * Creates the controller object that allows extending the keyboard shortcuts of the menu.\n *\n * @param {Menu} menu The menu instance.\n * @param {Array<{ shortcuts: KeyboardShortcut, contextName: string }>} [customKeyboardShortcuts] The list of the custom keyboard shortcuts.\n * @returns {KeyboardShortcutsMenuController}\n */\nexport function createKeyboardShortcutsCtrl(menu, customKeyboardShortcuts = []) {\n  const customShortcuts = [];\n\n  _addShortcuts(createDefaultShortcutsList(menu));\n\n  customKeyboardShortcuts.forEach(({ shortcuts, contextName }) => {\n    addCustomShortcuts(shortcuts, contextName);\n  });\n\n  /**\n   * Adds keyboard shortcuts to the menu.\n   *\n   * @param {KeyboardShortcut[]} shortcuts Keyboard shortcuts to add.\n   * @param {string} [contextName] The context name to create or use.\n   */\n  function _addShortcuts(shortcuts, contextName) {\n    getContext(contextName).addShortcuts(shortcuts, {\n      group: SHORTCUTS_CONTEXT,\n    });\n  }\n\n  /**\n   * Adds custom keyboard shortcuts to the menu.\n   *\n   * @param {KeyboardShortcut[]} shortcuts Keyboard shortcuts to add.\n   * @param {string} [contextName] The context name to create or use.\n   */\n  function addCustomShortcuts(shortcuts, contextName) {\n    const context = getContext(contextName);\n\n    shortcuts.forEach(({ keys }) => {\n      keys.forEach(k => context.removeShortcutsByKeys(k));\n    });\n\n    customShortcuts.push({\n      shortcuts,\n      contextName,\n    });\n\n    _addShortcuts(shortcuts, contextName);\n  }\n\n  /**\n   * Gets all registered custom keyboard shortcuts.\n   *\n   * @returns {Array<{ shortcuts: KeyboardShortcut, contextName: string }>}\n   */\n  function getCustomShortcuts() {\n    return [...customShortcuts];\n  }\n\n  /**\n   * Gets the context name.\n   *\n   * @param {string} contextName The context name.\n   * @returns {string}\n   */\n  function _getContextName(contextName) {\n    return contextName ? `${SHORTCUTS_GROUP}:${contextName}` : SHORTCUTS_GROUP;\n  }\n\n  /**\n   * Gets the keyboard shortcut context by its name.\n   *\n   * @param {string} contextName The context name.\n   * @returns {object}\n   */\n  function getContext(contextName) {\n    const manager = menu.hotMenu.getShortcutManager();\n    const name = _getContextName(contextName);\n\n    return manager.getContext(name) ?? manager.addContext(name);\n  }\n\n  /**\n   * Makes the specified context active.\n   *\n   * @param {string} contextName The context name.\n   */\n  function listen(contextName) {\n    menu.hotMenu.getShortcutManager().setActiveContextName(_getContextName(contextName));\n  }\n\n  return {\n    addCustomShortcuts,\n    getCustomShortcuts,\n    getContext,\n    listen,\n  };\n}\n","/**\n * Creates a keyboard shortcuts list with default keyboards binds.\n *\n * @param {Menu} menu The main menu instance.\n * @returns {KeyboardShortcut[]}\n */\nexport function createDefaultShortcutsList(menu) {\n  const { hot, hotMenu } = menu;\n\n  return [{\n    keys: [['Control/Meta', 'A']],\n    forwardToContext: hot.getShortcutManager().getContext('grid'),\n    callback: () => menu.close(true)\n  }, {\n    keys: [['Tab'], ['Shift', 'Tab']],\n    callback: (event, keys) => {\n      const settings = hot.getSettings();\n      const tabMoves = typeof settings.tabMoves === 'function'\n        ? settings.tabMoves(event)\n        : settings.tabMoves;\n\n      if (keys.includes('shift')) {\n        hot.selection.transformStart(-tabMoves.row, -tabMoves.col);\n      } else {\n        hot.selection.transformStart(tabMoves.row, tabMoves.col);\n      }\n\n      menu.close(true);\n    },\n  }, {\n    keys: [['Escape']],\n    callback: () => menu.close(),\n  }, {\n    keys: [['ArrowDown']],\n    callback: () => menu.getNavigator().toNextItem(),\n  }, {\n    keys: [['ArrowUp']],\n    callback: () => menu.getNavigator().toPreviousItem(),\n  }, {\n    keys: [['ArrowRight']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection) {\n        const subMenu = menu.openSubMenu(selection[0]);\n\n        if (subMenu) {\n          subMenu.getNavigator().toFirstItem();\n        }\n      }\n    }\n  }, {\n    keys: [['ArrowLeft']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection && menu.isSubMenu()) {\n        menu.close();\n\n        if (menu.isSubMenu()) {\n          menu.parentMenu.hotMenu.listen();\n        }\n      }\n    },\n  }, {\n    keys: [['Control/Meta', 'ArrowUp'], ['Home']],\n    callback: () => menu.getNavigator().toFirstItem(),\n  }, {\n    keys: [['Control/Meta', 'ArrowDown'], ['End']],\n    callback: () => menu.getNavigator().toLastItem(),\n  }, {\n    keys: [['Enter'], ['Space']],\n    callback: (event) => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (!selection) {\n        return;\n      }\n\n      if (hotMenu.getSourceDataAtRow(selection[0]).submenu) {\n        menu.openSubMenu(selection[0]).getNavigator().toFirstItem();\n      } else {\n        menu.executeCommand(event);\n        menu.close(true);\n      }\n    }\n  }, {\n    keys: [['PageUp']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection) {\n        hotMenu.selection.transformStart(-hotMenu.countVisibleRows(), 0);\n      } else {\n        menu.getNavigator().toFirstItem();\n      }\n    },\n  }, {\n    keys: [['PageDown']],\n    callback: () => {\n      const selection = hotMenu.getSelectedLast();\n\n      if (selection) {\n        hotMenu.selection.transformStart(hotMenu.countVisibleRows(), 0);\n      } else {\n        menu.getNavigator().toLastItem();\n      }\n    },\n  }];\n}\n","import {\n  isItemSubMenu,\n  isItemDisabled,\n  isItemSelectionDisabled,\n  isItemSeparator,\n  isItemCheckable,\n} from './utils';\nimport {\n  addClass,\n  empty,\n  fastInnerHTML,\n  setAttribute,\n} from '../../../helpers/dom/element';\nimport {\n  A11Y_MENU_ITEM_CHECKBOX,\n  A11Y_DISABLED,\n  A11Y_EXPANDED,\n  A11Y_LABEL,\n  A11Y_MENU_ITEM,\n  A11Y_TABINDEX,\n  A11Y_CHECKED,\n} from '../../../helpers/a11y';\n\n/**\n * Creates the menu renderer function.\n *\n * @private\n * @param {Core} mainTableHot The main table Handsontable instance.\n * @returns {Function}\n */\nexport function createMenuItemRenderer(mainTableHot) {\n  /**\n   * Menu item renderer.\n   *\n   * @private\n   * @param {Core} menuHot The Handsontable instance.\n   * @param {HTMLCellElement} TD The rendered cell element.\n   * @param {number} row The visual index.\n   * @param {number} col The visual index.\n   * @param {string} prop The column property if used.\n   * @param {string} value The cell value.\n   */\n  return (menuHot, TD, row, col, prop, value) => {\n    const item = menuHot.getSourceDataAtRow(row);\n    const wrapper = mainTableHot.rootDocument.createElement('div');\n    const itemValue = typeof value === 'function' ? value.call(mainTableHot) : value;\n    const ariaLabel = typeof item.ariaLabel === 'function' ? item.ariaLabel.call(mainTableHot) : item.ariaLabel;\n    const ariaChecked = typeof item.ariaChecked === 'function' ? item.ariaChecked.call(mainTableHot) : item.ariaChecked;\n\n    empty(TD);\n    addClass(wrapper, 'htItemWrapper');\n\n    if (mainTableHot.getSettings().ariaTags) {\n      const isFocusable = !isItemDisabled(item, mainTableHot) &&\n        !isItemSelectionDisabled(item) &&\n        !isItemSeparator(item);\n\n      setAttribute(TD, [\n        ...(isItemCheckable(item) ? [\n          A11Y_MENU_ITEM_CHECKBOX(),\n          A11Y_LABEL(ariaLabel),\n          A11Y_CHECKED(ariaChecked)\n        ] : [\n          A11Y_MENU_ITEM(),\n          A11Y_LABEL(itemValue)\n        ]),\n        ...(isFocusable ? [A11Y_TABINDEX(-1)] : []),\n        ...(isItemDisabled(item, mainTableHot) ? [A11Y_DISABLED()] : []),\n        ...(isItemSubMenu(item) ? [A11Y_EXPANDED(false)] : []),\n      ]);\n    }\n\n    TD.className = '';\n    TD.appendChild(wrapper);\n\n    if (isItemSeparator(item)) {\n      addClass(TD, 'htSeparator');\n\n    } else if (typeof item.renderer === 'function') {\n      addClass(TD, 'htCustomMenuRenderer');\n      TD.appendChild(item.renderer(menuHot, wrapper, row, col, prop, itemValue));\n\n    } else {\n      fastInnerHTML(wrapper, itemValue);\n    }\n\n    if (isItemDisabled(item, mainTableHot)) {\n      addClass(TD, 'htDisabled');\n\n    } else if (isItemSelectionDisabled(item)) {\n      addClass(TD, 'htSelectionDisabled');\n\n    } else if (isItemSubMenu(item)) {\n      addClass(TD, 'htSubmenu');\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  CopyPaste,\n} from './copyPaste';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { stringify, parse } from '../../3rdparty/SheetClip';\nimport { arrayEach } from '../../helpers/array';\nimport { sanitize } from '../../helpers/string';\nimport {\n  removeContentEditableFromElementAndDeselect,\n  runWithSelectedContendEditableElement,\n  makeElementContentEditableAndSelectItsContent\n} from '../../helpers/dom/element';\nimport { isSafari } from '../../helpers/browser';\nimport copyItem from './contextMenuItem/copy';\nimport copyColumnHeadersOnlyItem from './contextMenuItem/copyColumnHeadersOnly';\nimport copyWithColumnGroupHeadersItem from './contextMenuItem/copyWithColumnGroupHeaders';\nimport copyWithColumnHeadersItem from './contextMenuItem/copyWithColumnHeaders';\nimport cutItem from './contextMenuItem/cut';\nimport PasteEvent from './pasteEvent';\nimport {\n  CopyableRangesFactory,\n  normalizeRanges,\n} from './copyableRanges';\nimport { _dataToHTML, htmlToGridSettings } from '../../utils/parseTable';\n\nimport './copyPaste.css';\n\nHooks.getSingleton().register('afterCopyLimit');\nHooks.getSingleton().register('modifyCopyableRange');\nHooks.getSingleton().register('beforeCut');\nHooks.getSingleton().register('afterCut');\nHooks.getSingleton().register('beforePaste');\nHooks.getSingleton().register('afterPaste');\nHooks.getSingleton().register('beforeCopy');\nHooks.getSingleton().register('afterCopy');\n\nexport const PLUGIN_KEY = 'copyPaste';\nexport const PLUGIN_PRIORITY = 80;\nconst SETTING_KEYS = ['fragmentSelection'];\nconst META_HEAD = [\n  '<meta name=\"generator\" content=\"Handsontable\"/>',\n  '<style type=\"text/css\">td{white-space:normal}br{mso-data-placement:same-cell}</style>',\n].join('');\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @description\n * Copy, cut, and paste data by using the `CopyPaste` plugin.\n *\n * Control the `CopyPaste` plugin programmatically through its [API methods](#methods).\n *\n * The user can access the copy-paste features through:\n * - The [context menu](@/guides/cell-features/clipboard/clipboard.md#context-menu).\n * - The [keyboard shortcuts](@/guides/cell-features/clipboard/clipboard.md#related-keyboard-shortcuts).\n * - The browser's menu bar.\n *\n * Read more:\n * - [Guides: Clipboard](@/guides/cell-features/clipboard/clipboard.md)\n * - [Configuration options: `copyPaste`](@/api/options.md#copypaste)\n *\n * @example\n * ```js\n * // enable the plugin with the default configuration\n * copyPaste: true,\n *\n * // or, enable the plugin with a custom configuration\n * copyPaste: {\n *   columnsLimit: 25,\n *   rowsLimit: 50,\n *   pasteMode: 'shift_down',\n *   copyColumnHeaders: true,\n *   copyColumnGroupHeaders: true,\n *   copyColumnHeadersOnly: true,\n *   uiContainer: document.body,\n * },\n * ```\n * @class CopyPaste\n * @plugin CopyPaste\n */\nexport class CopyPaste extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * The maximum number of columns than can be copied to the clipboard.\n   *\n   * @type {number}\n   * @default Infinity\n   */\n  columnsLimit = Infinity;\n  /**\n   * The maximum number of rows than can be copied to the clipboard.\n   *\n   * @type {number}\n   * @default Infinity\n   */\n  rowsLimit = Infinity;\n  /**\n   * When pasting:\n   * - `'overwrite'` - overwrite the currently-selected cells\n   * - `'shift_down'` - move currently-selected cells down\n   * - `'shift_right'` - move currently-selected cells to the right\n   *\n   * @type {string}\n   * @default 'overwrite'\n   */\n  pasteMode = 'overwrite';\n  /**\n   * The UI container for the secondary focusable element.\n   *\n   * @type {HTMLElement}\n   */\n  uiContainer = this.hot.rootDocument.body;\n  /**\n   * Shows the \"Copy with headers\" item in the context menu and extends the context menu with the\n   * `'copy_with_column_headers'` option that can be used for creating custom menus arrangements.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  #enableCopyColumnHeaders = false;\n  /**\n   * Shows the \"Copy with group headers\" item in the context menu and extends the context menu with the\n   * `'copy_with_column_group headers'` option that can be used for creating custom menus arrangements.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  #enableCopyColumnGroupHeaders = false;\n  /**\n   * Shows the \"Copy headers only\" item in the context menu and extends the context menu with the\n   * `'copy_column_headers_only'` option that can be used for creating custom menus arrangements.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  #enableCopyColumnHeadersOnly = false;\n  /**\n   * Defines the data range to copy. Possible values:\n   *  * `'cells-only'` Copy selected cells only;\n   *  * `'column-headers-only'` Copy column headers only;\n   *  * `'with-column-group-headers'` Copy cells with all column headers;\n   *  * `'with-column-headers'` Copy cells with column headers;\n   *\n   * @type {'cells-only' | 'column-headers-only' | 'with-column-group-headers' | 'with-column-headers'}\n   */\n  #copyMode = 'cells-only';\n  /**\n   * Flag that is used to prevent copying when the native shortcut was not pressed.\n   *\n   * @type {boolean}\n   */\n  #isTriggeredByCopy = false;\n  /**\n   * Flag that is used to prevent cutting when the native shortcut was not pressed.\n   *\n   * @type {boolean}\n   */\n  #isTriggeredByCut = false;\n  /**\n   * Class that helps generate copyable ranges based on the current selection for different copy mode\n   * types.\n   *\n   * @type {CopyableRangesFactory}\n   */\n  #copyableRangesFactory = new CopyableRangesFactory({\n    countRows: () => this.hot.countRows(),\n    countColumns: () => this.hot.countCols(),\n    rowsLimit: () => this.rowsLimit,\n    columnsLimit: () => this.columnsLimit,\n    countColumnHeaders: () => this.hot.view.getColumnHeadersCount(),\n  });\n  /**\n   * Flag that indicates if the viewport scroll should be prevented after pasting the data.\n   *\n   * @type {boolean}\n   */\n  #preventViewportScrollOnPaste = false;\n  /**\n   * Ranges of the cells coordinates, which should be used to copy/cut/paste actions.\n   *\n   * @private\n   * @type {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>}\n   */\n  copyableRanges = [];\n\n  /**\n   * Checks if the [`CopyPaste`](#copypaste) plugin is enabled.\n   *\n   * This method gets called by Handsontable's [`beforeInit`](@/api/hooks.md#beforeinit) hook.\n   * If it returns `true`, the [`enablePlugin()`](#enableplugin) method gets called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n    const { [PLUGIN_KEY]: settings } = this.hot.getSettings();\n\n    if (typeof settings === 'object') {\n      this.pasteMode = settings.pasteMode ?? this.pasteMode;\n      this.rowsLimit = isNaN(settings.rowsLimit) ? this.rowsLimit : settings.rowsLimit;\n      this.columnsLimit = isNaN(settings.columnsLimit) ? this.columnsLimit : settings.columnsLimit;\n      this.#enableCopyColumnHeaders = !!settings.copyColumnHeaders;\n      this.#enableCopyColumnGroupHeaders = !!settings.copyColumnGroupHeaders;\n      this.#enableCopyColumnHeadersOnly = !!settings.copyColumnHeadersOnly;\n      this.uiContainer = settings.uiContainer ?? this.uiContainer;\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.#onAfterContextMenuDefaultOptions(options));\n    this.addHook('afterSelection', (...args) => this.#onAfterSelection(...args));\n    this.addHook('afterSelectionEnd', () => this.#onAfterSelectionEnd());\n\n    this.eventManager.addEventListener(this.hot.rootDocument, 'copy', (...args) => this.onCopy(...args));\n    this.eventManager.addEventListener(this.hot.rootDocument, 'cut', (...args) => this.onCut(...args));\n    this.eventManager.addEventListener(this.hot.rootDocument, 'paste', (...args) => this.onPaste(...args));\n\n    // Without this workaround Safari (tested on Safari@16.5.2) does allow copying/cutting from the browser menu.\n    if (isSafari()) {\n      this.eventManager.addEventListener(\n        this.hot.rootDocument.body, 'mouseenter', (...args) => this.#onSafariMouseEnter(...args)\n      );\n      this.eventManager.addEventListener(\n        this.hot.rootDocument.body, 'mouseleave', (...args) => this.#onSafariMouseLeave(...args)\n      );\n\n      this.addHook('afterSelection', () => this.#onSafariAfterSelection());\n    }\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the state of the [`CopyPaste`](#copypaste) plugin.\n   *\n   * Gets called when [`updateSettings()`](@/api/core.md#updatesettings)\n   * is invoked with any of the following configuration options:\n   *  - [`copyPaste`](@/api/options.md#copypaste)\n   *  - [`fragmentSelection`](@/api/options.md#fragmentselection)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the [`CopyPaste`](#copypaste) plugin for your Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n  }\n\n  /**\n   * Copies the contents of the selected cells (and/or their related column headers) to the system clipboard.\n   *\n   * Takes an optional parameter (`copyMode`) that defines the scope of copying:\n   *\n   * | `copyMode` value              | Description                                                     |\n   * | ----------------------------- | --------------------------------------------------------------- |\n   * | `'cells-only'` (default)      | Copy the selected cells                                         |\n   * | `'with-column-headers'`       | - Copy the selected cells<br>- Copy the nearest column headers  |\n   * | `'with-column-group-headers'` | - Copy the selected cells<br>- Copy all related columns headers |\n   * | `'column-headers-only'`       | Copy the nearest column headers (without copying cells)         |\n   *\n   * @param {string} [copyMode='cells-only'] Copy mode.\n   */\n  copy(copyMode = 'cells-only') {\n    this.#copyMode = copyMode;\n    this.#isTriggeredByCopy = true;\n\n    this.#ensureClipboardEventsGetTriggered('copy');\n  }\n\n  /**\n   * Copies the contents of the selected cells.\n   */\n  copyCellsOnly() {\n    this.copy('cells-only');\n  }\n  /**\n   * Copies the contents of column headers that are nearest to the selected cells.\n   */\n  copyColumnHeadersOnly() {\n    this.copy('column-headers-only');\n  }\n  /**\n   * Copies the contents of the selected cells and all their related column headers.\n   */\n  copyWithAllColumnHeaders() {\n    this.copy('with-column-group-headers');\n  }\n  /**\n   * Copies the contents of the selected cells and their nearest column headers.\n   */\n  copyWithColumnHeaders() {\n    this.copy('with-column-headers');\n  }\n\n  /**\n   * Cuts the contents of the selected cells to the system clipboard.\n   */\n  cut() {\n    this.#isTriggeredByCut = true;\n\n    this.#ensureClipboardEventsGetTriggered('cut');\n  }\n\n  /**\n   * Converts the contents of multiple ranges (`ranges`) into a single string.\n   *\n   * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges Array of objects with properties `startRow`, `endRow`, `startCol` and `endCol`.\n   * @returns {string} A string that will be copied to the clipboard.\n   */\n  getRangedCopyableData(ranges) {\n    return stringify(this.getRangedData(ranges));\n  }\n\n  /**\n   * Converts the contents of multiple ranges (`ranges`) into an array of arrays.\n   *\n   * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n   * @returns {Array[]} An array of arrays that will be copied to the clipboard.\n   */\n  getRangedData(ranges) {\n    const data = [];\n    const { rows, columns } = normalizeRanges(ranges);\n\n    // concatenate all rows and columns data defined in ranges into one copyable string\n    arrayEach(rows, (row) => {\n      const rowSet = [];\n\n      arrayEach(columns, (column) => {\n        if (row < 0) {\n          // `row` as the second argument acts here as the `headerLevel` argument\n          rowSet.push(this.hot.getColHeader(column, row));\n        } else {\n          rowSet.push(this.hot.getCopyableData(row, column));\n        }\n      });\n\n      data.push(rowSet);\n    });\n\n    return data;\n  }\n\n  /**\n   * Simulates the paste action.\n   *\n   * For security reasons, modern browsers don't allow reading from the system clipboard.\n   *\n   * @param {string} pastableText The value to paste, as a raw string.\n   * @param {string} [pastableHtml=''] The value to paste, as HTML.\n   */\n  paste(pastableText = '', pastableHtml = pastableText) {\n    if (!pastableText && !pastableHtml) {\n      return;\n    }\n\n    const pasteData = new PasteEvent();\n\n    if (pastableText) {\n      pasteData.clipboardData.setData('text/plain', pastableText);\n    }\n    if (pastableHtml) {\n      pasteData.clipboardData.setData('text/html', pastableHtml);\n    }\n\n    this.onPaste(pasteData);\n  }\n\n  /**\n   * Prepares copyable text from the cells selection in the invisible textarea.\n   */\n  setCopyableText() {\n    const selectionRange = this.hot.getSelectedRangeLast();\n\n    if (!selectionRange) {\n      return;\n    }\n\n    if (selectionRange.isSingleHeader()) {\n      this.copyableRanges = [];\n\n      return;\n    }\n\n    this.#copyableRangesFactory.setSelectedRange(selectionRange);\n\n    const groupedRanges = new Map([\n      ['headers', null],\n      ['cells', null],\n    ]);\n\n    if (this.#copyMode === 'column-headers-only') {\n      groupedRanges.set('headers', this.#copyableRangesFactory.getMostBottomColumnHeadersRange());\n\n    } else {\n      if (this.#copyMode === 'with-column-headers') {\n        groupedRanges.set('headers', this.#copyableRangesFactory.getMostBottomColumnHeadersRange());\n\n      } else if (this.#copyMode === 'with-column-group-headers') {\n        groupedRanges.set('headers', this.#copyableRangesFactory.getAllColumnHeadersRange());\n      }\n\n      groupedRanges.set('cells', this.#copyableRangesFactory.getCellsRange());\n    }\n\n    this.copyableRanges = Array.from(groupedRanges.values())\n      .filter(range => range !== null)\n      .map(({ startRow, startCol, endRow, endCol }) => ({ startRow, startCol, endRow, endCol }));\n\n    this.copyableRanges = this.hot.runHooks('modifyCopyableRange', this.copyableRanges);\n\n    const cellsRange = groupedRanges.get('cells');\n\n    if (cellsRange !== null && cellsRange.isRangeTrimmed) {\n      const {\n        startRow, startCol, endRow, endCol\n      } = cellsRange;\n\n      this.hot.runHooks('afterCopyLimit',\n        endRow - startRow + 1, endCol - startCol + 1, this.rowsLimit, this.columnsLimit);\n    }\n  }\n\n  /**\n   * Verifies if editor exists and is open.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isEditorOpened() {\n    return this.hot.getActiveEditor()?.isOpened();\n  }\n\n  /**\n   * Ensure that the `copy`/`cut` events get triggered properly in Safari.\n   *\n   * @param {string} eventName Name of the event to get triggered.\n   */\n  #ensureClipboardEventsGetTriggered(eventName) {\n    // Without this workaround Safari (tested on Safari@16.5.2) does not trigger the 'copy' event.\n    if (isSafari()) {\n      const lastSelectedRange = this.hot.getSelectedRangeLast();\n\n      if (lastSelectedRange) {\n        const { row: highlightRow, col: highlightColumn } = lastSelectedRange.highlight;\n        const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);\n\n        if (currentlySelectedCell) {\n          runWithSelectedContendEditableElement(currentlySelectedCell, () => {\n            this.hot.rootDocument.execCommand(eventName);\n          });\n        }\n      }\n\n    } else {\n      this.hot.rootDocument.execCommand(eventName);\n    }\n  }\n\n  /**\n   * Counts how many column headers will be copied based on the passed range.\n   *\n   * @private\n   * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n   * @returns {{ columnHeadersCount: number }} Returns an object with keys that holds\n   *                                           information with the number of copied headers.\n   */\n  #countCopiedHeaders(ranges) {\n    const { rows } = normalizeRanges(ranges);\n    let columnHeadersCount = 0;\n\n    for (let row = 0; row < rows.length; row++) {\n      if (rows[row] >= 0) {\n        break;\n      }\n\n      columnHeadersCount += 1;\n    }\n\n    return {\n      columnHeadersCount,\n    };\n  }\n\n  /**\n   * Prepares new values to populate them into datasource.\n   *\n   * @private\n   * @param {Array} inputArray An array of the data to populate.\n   * @param {Array} [selection] The selection which indicates from what position the data will be populated.\n   * @returns {Array} Range coordinates after populate data.\n   */\n  populateValues(inputArray, selection = this.hot.getSelectedRangeLast()) {\n    if (!inputArray.length) {\n      return;\n    }\n\n    const populatedRowsLength = inputArray.length;\n    const populatedColumnsLength = inputArray[0].length;\n    const newRows = [];\n\n    const { row: startRow, col: startColumn } = selection.getTopStartCorner();\n    const { row: endRowFromSelection, col: endColumnFromSelection } = selection.getBottomEndCorner();\n\n    let visualRowForPopulatedData = startRow;\n    let visualColumnForPopulatedData = startColumn;\n    let lastVisualRow = startRow;\n    let lastVisualColumn = startColumn;\n\n    // We try to populate just all copied data or repeat copied data within a selection. Please keep in mind that we\n    // don't know whether populated data is bigger than selection on start as there are some cells for which values\n    // should be not inserted (it's known right after getting cell meta).\n    while (newRows.length < populatedRowsLength || visualRowForPopulatedData <= endRowFromSelection) {\n      const { skipRowOnPaste, visualRow } = this.hot.getCellMeta(visualRowForPopulatedData, startColumn);\n\n      visualRowForPopulatedData = visualRow + 1;\n\n      if (skipRowOnPaste === true) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      lastVisualRow = visualRow;\n      visualColumnForPopulatedData = startColumn;\n\n      const newRow = [];\n      const insertedRow = newRows.length % populatedRowsLength;\n\n      while (newRow.length < populatedColumnsLength || visualColumnForPopulatedData <= endColumnFromSelection) {\n        const { skipColumnOnPaste, visualCol } = this.hot.getCellMeta(startRow, visualColumnForPopulatedData);\n\n        visualColumnForPopulatedData = visualCol + 1;\n\n        if (skipColumnOnPaste === true) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n\n        lastVisualColumn = visualCol;\n        const insertedColumn = newRow.length % populatedColumnsLength;\n\n        newRow.push(inputArray[insertedRow][insertedColumn]);\n      }\n\n      newRows.push(newRow);\n    }\n\n    this.#preventViewportScrollOnPaste = true;\n    this.hot.populateFromArray(startRow, startColumn, newRows, undefined, undefined, 'CopyPaste.paste', this.pasteMode);\n\n    return [startRow, startColumn, lastVisualRow, lastVisualColumn];\n  }\n\n  /**\n   * Add the `contenteditable` attribute to the highlighted cell and select its content.\n   */\n  #addContentEditableToHighlightedCell() {\n    if (this.hot.isListening()) {\n      const lastSelectedRange = this.hot.getSelectedRangeLast();\n\n      if (lastSelectedRange) {\n        const { row: highlightRow, col: highlightColumn } = lastSelectedRange.highlight;\n        const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);\n\n        if (currentlySelectedCell) {\n          makeElementContentEditableAndSelectItsContent(currentlySelectedCell);\n        }\n      }\n    }\n  }\n\n  /**\n   * Remove the `contenteditable` attribute from the highlighted cell and deselect its content.\n   */\n  #removeContentEditableFromHighlightedCell() {\n    // If the instance is not listening, the workaround is not needed.\n    if (this.hot.isListening()) {\n      const lastSelectedRange = this.hot.getSelectedRangeLast();\n\n      if (lastSelectedRange) {\n        const { row: highlightRow, col: highlightColumn } = lastSelectedRange.highlight;\n        const currentlySelectedCell = this.hot.getCell(highlightRow, highlightColumn, true);\n\n        if (currentlySelectedCell?.hasAttribute('contenteditable')) {\n          removeContentEditableFromElementAndDeselect(currentlySelectedCell);\n        }\n      }\n    }\n  }\n\n  /**\n   * `copy` event callback on textarea element.\n   *\n   * @param {Event} event ClipboardEvent.\n   * @private\n   */\n  onCopy(event) {\n    const focusedElement = this.hot.getFocusManager().getRefocusElement();\n    const isHotInput = event.target?.hasAttribute('data-hot-input');\n\n    if (\n      !this.hot.isListening() && !this.#isTriggeredByCopy ||\n      this.isEditorOpened() ||\n      event.target instanceof HTMLElement && (\n        isHotInput && event.target !== focusedElement ||\n        !isHotInput && event.target !== this.hot.rootDocument.body\n      )\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n    this.setCopyableText();\n    this.#isTriggeredByCopy = false;\n\n    const data = this.getRangedData(this.copyableRanges);\n    const copiedHeadersCount = this.#countCopiedHeaders(this.copyableRanges);\n    const allowCopying = !!this.hot.runHooks('beforeCopy', data, this.copyableRanges, copiedHeadersCount);\n\n    if (allowCopying) {\n      const textPlain = stringify(data);\n\n      if (event && event.clipboardData) {\n        const textHTML = _dataToHTML(data, this.hot.rootDocument);\n\n        event.clipboardData.setData('text/plain', textPlain);\n        event.clipboardData.setData('text/html', [META_HEAD, textHTML].join(''));\n\n      } else if (typeof ClipboardEvent === 'undefined') {\n        this.hot.rootWindow.clipboardData.setData('Text', textPlain);\n      }\n\n      this.hot.runHooks('afterCopy', data, this.copyableRanges, copiedHeadersCount);\n    }\n\n    this.#copyMode = 'cells-only';\n  }\n\n  /**\n   * `cut` event callback on textarea element.\n   *\n   * @param {Event} event ClipboardEvent.\n   * @private\n   */\n  onCut(event) {\n    const focusedElement = this.hot.getFocusManager().getRefocusElement();\n    const isHotInput = event.target?.hasAttribute('data-hot-input');\n\n    if (\n      !this.hot.isListening() && !this.#isTriggeredByCut ||\n      this.isEditorOpened() ||\n      event.target instanceof HTMLElement && (\n        isHotInput && event.target !== focusedElement ||\n        !isHotInput && event.target !== this.hot.rootDocument.body\n      )\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n    this.setCopyableText();\n    this.#isTriggeredByCut = false;\n\n    const rangedData = this.getRangedData(this.copyableRanges);\n    const allowCuttingOut = !!this.hot.runHooks('beforeCut', rangedData, this.copyableRanges);\n\n    if (allowCuttingOut) {\n      const textPlain = stringify(rangedData);\n\n      if (event && event.clipboardData) {\n        const textHTML = _dataToHTML(rangedData, this.hot.rootDocument);\n\n        event.clipboardData.setData('text/plain', textPlain);\n        event.clipboardData.setData('text/html', [META_HEAD, textHTML].join(''));\n\n      } else if (typeof ClipboardEvent === 'undefined') {\n        this.hot.rootWindow.clipboardData.setData('Text', textPlain);\n      }\n\n      this.hot.emptySelectedCells('CopyPaste.cut');\n      this.hot.runHooks('afterCut', rangedData, this.copyableRanges);\n    }\n  }\n\n  /**\n   * `paste` event callback on textarea element.\n   *\n   * @param {Event} event ClipboardEvent or pseudo ClipboardEvent, if paste was called manually.\n   * @private\n   */\n  onPaste(event) {\n    const focusedElement = this.hot.getFocusManager().getRefocusElement();\n    const isHotInput = event.target?.hasAttribute('data-hot-input');\n\n    if (\n      !this.hot.isListening() ||\n      this.isEditorOpened() ||\n      !this.hot.getSelected() ||\n      event.target instanceof HTMLElement && (\n        isHotInput && event.target !== focusedElement ||\n        !isHotInput && event.target !== this.hot.rootDocument.body\n      )\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n\n    let pastedData;\n\n    if (event && typeof event.clipboardData !== 'undefined') {\n      const textHTML = sanitize(event.clipboardData.getData('text/html'), {\n        ADD_TAGS: ['meta'],\n        ADD_ATTR: ['content'],\n        FORCE_BODY: true,\n      });\n\n      if (textHTML && /(<table)|(<TABLE)/g.test(textHTML)) {\n        const parsedConfig = htmlToGridSettings(textHTML, this.hot.rootDocument);\n\n        pastedData = parsedConfig.data;\n      } else {\n        pastedData = event.clipboardData.getData('text/plain');\n      }\n\n    } else if (typeof ClipboardEvent === 'undefined' && typeof this.hot.rootWindow.clipboardData !== 'undefined') {\n      pastedData = this.hot.rootWindow.clipboardData.getData('Text');\n    }\n\n    if (typeof pastedData === 'string') {\n      pastedData = parse(pastedData);\n    }\n\n    if (pastedData === void 0 || pastedData && pastedData.length === 0) {\n      return;\n    }\n\n    if (this.hot.runHooks('beforePaste', pastedData, this.copyableRanges) === false) {\n      return;\n    }\n\n    const [startRow, startColumn, endRow, endColumn] = this.populateValues(pastedData);\n\n    this.hot.selectCell(\n      startRow,\n      startColumn,\n      Math.min(this.hot.countRows() - 1, endRow),\n      Math.min(this.hot.countCols() - 1, endColumn),\n    );\n\n    this.hot.runHooks('afterPaste', pastedData, this.copyableRanges);\n  }\n\n  /**\n   * Add copy and cut options to the Context Menu.\n   *\n   * @param {object} options Contains default added options of the Context Menu.\n   */\n  #onAfterContextMenuDefaultOptions(options) {\n    options.items.push(\n      { name: '---------' },\n      copyItem(this),\n    );\n\n    if (this.#enableCopyColumnHeaders) {\n      options.items.push(\n        copyWithColumnHeadersItem(this),\n      );\n    }\n    if (this.#enableCopyColumnGroupHeaders) {\n      options.items.push(\n        copyWithColumnGroupHeadersItem(this),\n      );\n    }\n    if (this.#enableCopyColumnHeadersOnly) {\n      options.items.push(\n        copyColumnHeadersOnlyItem(this),\n      );\n    }\n\n    options.items.push(cutItem(this));\n  }\n\n  /**\n   * Disables the viewport scroll after pasting the data.\n   *\n   * @param {number} fromRow Selection start row visual index.\n   * @param {number} fromColumn Selection start column visual index.\n   * @param {number} toRow Selection end row visual index.\n   * @param {number} toColumn Selection end column visual index.\n   * @param {object} preventScrolling Object with `value` property. If `true`, the viewport scroll will be prevented.\n   */\n  #onAfterSelection(fromRow, fromColumn, toRow, toColumn, preventScrolling) {\n    if (this.#preventViewportScrollOnPaste) {\n      preventScrolling.value = true;\n    }\n\n    this.#preventViewportScrollOnPaste = false;\n  }\n\n  /**\n   * Force focus on focusableElement after end of the selection.\n   */\n  #onAfterSelectionEnd() {\n    if (this.isEditorOpened()) {\n      return;\n    }\n\n    if (this.hot.getSettings().fragmentSelection) {\n      return;\n    }\n\n    this.setCopyableText();\n  }\n\n  /**\n   * `document.body` `mouseenter` callback used to work around a Safari's problem with copying/cutting from the\n   * browser's menu.\n   */\n  #onSafariMouseEnter() {\n    this.#removeContentEditableFromHighlightedCell();\n  }\n\n  /**\n   * `document.body` `mouseleave` callback used to work around a Safari's problem with copying/cutting from the\n   * browser's menu.\n   */\n  #onSafariMouseLeave() {\n    this.#addContentEditableToHighlightedCell();\n  }\n\n  /**\n   * `afterSelection` hook callback triggered only on Safari.\n   */\n  #onSafariAfterSelection() {\n    this.#removeContentEditableFromHighlightedCell();\n  }\n\n  /**\n   * Destroys the `CopyPaste` plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { CONTEXTMENU_ITEMS_COPY } from '../../../i18n/constants';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyItem(copyPastePlugin) {\n  return {\n    key: 'copy',\n    name() {\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY);\n    },\n    callback() {\n      copyPastePlugin.copyCellsOnly();\n    },\n    disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import { CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY } from '../../../i18n/constants';\nimport { clamp } from '../../../helpers/number';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyColumnHeadersOnlyItem(copyPastePlugin) {\n  return {\n    key: 'copy_column_headers_only',\n    name() {\n      const selectedRange = this.getSelectedRangeLast();\n      const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;\n\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY, nounForm);\n    },\n    callback() {\n      copyPastePlugin.copyColumnHeadersOnly();\n    },\n    disabled() {\n      if (!this.hasColHeaders()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS } from '../../../i18n/constants';\nimport { clamp } from '../../../helpers/number';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyWithColumnGroupHeadersItem(copyPastePlugin) {\n  return {\n    key: 'copy_with_column_group_headers',\n    name() {\n      const selectedRange = this.getSelectedRangeLast();\n      const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;\n\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS, nounForm);\n    },\n    callback() {\n      copyPastePlugin.copyWithAllColumnHeaders();\n    },\n    disabled() {\n      if (!this.hasColHeaders() || !this.getSettings().nestedHeaders) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import { CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS } from '../../../i18n/constants';\nimport { clamp } from '../../../helpers/number';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function copyWithColumnHeadersItem(copyPastePlugin) {\n  return {\n    key: 'copy_with_column_headers',\n    name() {\n      const selectedRange = this.getSelectedRangeLast();\n      const nounForm = selectedRange ? clamp(selectedRange.getWidth() - 1, 0, 1) : 0;\n\n      return this.getTranslatedPhrase(CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS, nounForm);\n    },\n    callback() {\n      copyPastePlugin.copyWithColumnHeaders();\n    },\n    disabled() {\n      if (!this.hasColHeaders()) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiguous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {CopyPaste} copyPastePlugin The plugin instance.\n * @returns {object}\n */\nexport default function cutItem(copyPastePlugin) {\n  return {\n    key: 'cut',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CUT);\n    },\n    callback() {\n      copyPastePlugin.cut();\n    },\n    disabled() {\n      if (this.countRows() === 0 || this.countCols() === 0) {\n        return true;\n      }\n\n      const range = this.getSelectedRangeLast();\n\n      if (!range) {\n        return true;\n      }\n\n      if (range.isSingleHeader()) {\n        return true;\n      }\n\n      const selected = this.getSelected();\n\n      // Disable for no selection or for non-contiquous selection.\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n    hidden: false\n  };\n}\n","import ClipboardData from './clipboardData';\n\n/**\n * @private\n */\nexport default class PasteEvent {\n  constructor() {\n    this.clipboardData = new ClipboardData();\n  }\n  preventDefault() {}\n}\n","/**\n * @private\n */\nexport default class ClipboardData {\n  constructor() {\n    this.data = {};\n  }\n  setData(type, value) {\n    this.data[type] = value;\n  }\n  getData(type) {\n    return this.data[type] || void 0;\n  }\n}\n","import { arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\n\n/**\n * The utils class produces the selection ranges in the `{startRow, startCol, endRow, endCol}` format\n * based on the current table selection. The CopyPaste plugin consumes that ranges to generate\n * appropriate data ready to copy to the clipboard.\n *\n * @private\n */\nexport class CopyableRangesFactory {\n  /**\n   * @type {CellRange}\n   */\n  #selectedRange;\n  /**\n   * @type {function(): number}\n   */\n  #countRows;\n  /**\n   * @type {function(): number}\n   */\n  #countColumns;\n  /**\n   * @type {function(): number}\n   */\n  #rowsLimit;\n  /**\n   * @type {function(): number}\n   */\n  #columnsLimit;\n  /**\n   * @type {function(): number}\n   */\n  #countColumnHeaders;\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @param {{\n   *   countRows: function(): number,\n   *   countColumns: function(): number,\n   *   rowsLimit: function(): number,\n   *   columnsLimit: function(): number,\n   *   countColumnHeaders: function(): number\n   * }} dependencies The utils class dependencies.\n   */\n  constructor({ countRows, countColumns, rowsLimit, columnsLimit, countColumnHeaders }) {\n    this.#countRows = countRows;\n    this.#countColumns = countColumns;\n    this.#rowsLimit = rowsLimit;\n    this.#columnsLimit = columnsLimit;\n    this.#countColumnHeaders = countColumnHeaders;\n  }\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n\n  /**\n   * Sets the selection range to be processed.\n   *\n   * @param {CellRange} selectedRange The selection range represented by the CellRange class.\n   */\n  setSelectedRange(selectedRange) {\n    this.#selectedRange = selectedRange;\n  }\n\n  /**\n   * Returns a new coords object within the dataset range (cells) with `startRow`, `startCol`, `endRow`\n   * and `endCol` keys.\n   *\n   * @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}\n   */\n  getCellsRange() {\n    if (this.#countRows() === 0 || this.#countColumns() === 0) {\n      return null;\n    }\n\n    const {\n      row: startRow,\n      col: startCol,\n    } = this.#selectedRange.getTopStartCorner();\n    const {\n      row: endRow,\n      col: endCol,\n    } = this.#selectedRange.getBottomEndCorner();\n\n    const finalEndRow = this.#trimRowsRange(startRow, endRow);\n    const finalEndCol = this.#trimColumnsRange(startCol, endCol);\n    const isRangeTrimmed = endRow !== finalEndRow || endCol !== finalEndCol;\n\n    return {\n      isRangeTrimmed,\n      startRow,\n      startCol,\n      endRow: finalEndRow,\n      endCol: finalEndCol,\n    };\n  }\n\n  /**\n   * Returns a new coords object within the most-bottom column headers range with `startRow`,\n   * `startCol`, `endRow` and `endCol` keys.\n   *\n   * @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}\n   */\n  getMostBottomColumnHeadersRange() {\n    if (this.#countColumns() === 0 || this.#countColumnHeaders() === 0) {\n      return null;\n    }\n\n    const {\n      col: startCol,\n    } = this.#selectedRange.getTopStartCorner();\n    const {\n      col: endCol,\n    } = this.#selectedRange.getBottomEndCorner();\n\n    const finalEndCol = this.#trimColumnsRange(startCol, endCol);\n    const isRangeTrimmed = endCol !== finalEndCol;\n\n    return {\n      isRangeTrimmed,\n      startRow: -1,\n      startCol,\n      endRow: -1,\n      endCol: finalEndCol,\n    };\n  }\n\n  /**\n   * Returns a new coords object within all column headers layers (including nested headers) range with\n   * `startRow`, `startCol`, `endRow` and `endCol` keys.\n   *\n   * @returns {{startRow: number, startCol: number, endRow: number, endCol: number} | null}\n   */\n  getAllColumnHeadersRange() {\n    if (this.#countColumns() === 0 || this.#countColumnHeaders() === 0) {\n      return null;\n    }\n\n    const {\n      col: startCol,\n    } = this.#selectedRange.getTopStartCorner();\n    const {\n      col: endCol,\n    } = this.#selectedRange.getBottomEndCorner();\n\n    const finalEndCol = this.#trimColumnsRange(startCol, endCol);\n    const isRangeTrimmed = endCol !== finalEndCol;\n\n    return {\n      isRangeTrimmed,\n      startRow: -this.#countColumnHeaders(),\n      startCol,\n      endRow: -1,\n      endCol: finalEndCol,\n    };\n  }\n\n  /**\n   * Trimmed the columns range to the limit.\n   *\n   * @param {*} startColumn The lowest column index in the range.\n   * @param {*} endColumn The highest column index in the range.\n   * @returns {number} Returns trimmed column index if it exceeds the limit.\n   */\n  #trimColumnsRange(startColumn, endColumn) {\n    return Math.min(endColumn, Math.max(startColumn + this.#columnsLimit() - 1, startColumn));\n  }\n\n  /**\n   * Trimmed the rows range to the limit.\n   *\n   * @param {*} startRow The lowest row index in the range.\n   * @param {*} endRow The highest row index in the range.\n   * @returns {number} Returns trimmed row index if it exceeds the limit.\n   */\n  #trimRowsRange(startRow, endRow) {\n    return Math.min(endRow, Math.max(startRow + this.#rowsLimit() - 1, startRow));\n  }\n}\n\n/**\n * Returns an object with `rows` and `columns` keys. The arrays contains sorted indexes\n * generated according to the given `ranges` array.\n *\n * @param {Array<{startRow: number, startCol: number, endRow: number, endCol: number}>} ranges The range to process.\n * @returns {{rows: number[], columns: number[]}}\n */\nexport function normalizeRanges(ranges) {\n  const rows = [];\n  const columns = [];\n\n  arrayEach(ranges, (range) => {\n    const minRow = Math.min(range.startRow, range.endRow);\n    const maxRow = Math.max(range.startRow, range.endRow);\n\n    rangeEach(minRow, maxRow, (row) => {\n      if (rows.indexOf(row) === -1) {\n        rows.push(row);\n      }\n    });\n\n    const minColumn = Math.min(range.startCol, range.endCol);\n    const maxColumn = Math.max(range.startCol, range.endCol);\n\n    rangeEach(minColumn, maxColumn, (column) => {\n      if (columns.indexOf(column) === -1) {\n        columns.push(column);\n      }\n    });\n  });\n\n  return {\n    rows,\n    columns,\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  CustomBorders,\n} from './customBorders';\n","import { BasePlugin } from '../base';\nimport { hasOwnProperty, deepClone } from '../../helpers/object';\nimport { rangeEach } from '../../helpers/number';\nimport { arrayEach, arrayReduce, arrayMap } from '../../helpers/array';\nimport * as C from '../../i18n/constants';\nimport {\n  top as menuItemTop,\n  bottom as menuItemBottom,\n  left as menuItemLeft,\n  right as menuItemRight,\n  noBorders as menuItemNoBorders,\n} from './contextMenuItem';\nimport {\n  createId,\n  createDefaultCustomBorder,\n  createSingleEmptyBorder,\n  createEmptyBorders,\n  extendDefaultBorder,\n  hasLeftRightTypeOptions,\n  hasStartEndTypeOptions,\n  toInlinePropName,\n  normalizeBorder,\n  denormalizeBorder,\n} from './utils';\nimport { detectSelectionType, normalizeSelectionFactory } from '../../selection';\n\nexport const PLUGIN_KEY = 'customBorders';\nexport const PLUGIN_PRIORITY = 90;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin CustomBorders\n * @class CustomBorders\n *\n * @description\n * This plugin enables an option to apply custom borders through the context menu (configurable with context menu key\n * `borders`).\n *\n * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form\n * of an array.\n *\n * See [`customBorders` configuration option](@/api/options.md#customBorders) or go to\n * [Custom cell borders demo](@/guides/cell-features/formatting-cells/formatting-cells.md#custom-cell-borders) for more examples.\n *\n * @example\n * ```js\n * customBorders: [\n *   {\n *    range: {\n *      from: {\n *        row: 1,\n *        col: 1\n *      },\n *      to: {\n *        row: 3,\n *        col: 4\n *      },\n *    },\n *    start: {},\n *    end: {},\n *    top: {},\n *    bottom: {},\n *   },\n * ],\n *\n * // or\n * customBorders: [\n *   { row: 2,\n *     col: 2,\n *     start: {\n *       width: 2,\n *       color: 'red',\n *     },\n *     end: {\n *       width: 1,\n *       color: 'green',\n *     },\n *     top: '',\n *     bottom: '',\n *   }\n * ],\n * ```\n */\nexport class CustomBorders extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Saved borders.\n   *\n   * @private\n   * @type {Array}\n   */\n  savedBorders = [];\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link CustomBorders#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.#onAfterContextMenuDefaultOptions(options));\n    this.addHook('init', () => this.#onAfterInit());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hideBorders();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`customBorders`](@/api/options.md#customborders)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.changeBorderSettings();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Set custom borders.\n   *\n   * @example\n   * ```js\n   * const customBordersPlugin = hot.getPlugin('customBorders');\n   *\n   * // Using an array of arrays (produced by `.getSelected()` method).\n   * customBordersPlugin.setBorders([[1, 1, 2, 2], [6, 2, 0, 2]], {start: {width: 2, color: 'blue'}});\n   *\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * //  Selecting a cell range.\n   * hot.selectCell(0, 0, 2, 2);\n   * // Returning selected cells' range with the getSelectedRange method.\n   * customBordersPlugin.setBorders(hot.getSelectedRange(), {start: {hide: false, width: 2, color: 'blue'}});\n   * ```\n   *\n   * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n   * @param {object} borderObject Object with `top`, `right`, `bottom` and `start` properties.\n   */\n  setBorders(selectionRanges, borderObject) {\n    let borderKeys = ['top', 'bottom', 'start', 'end'];\n    let normBorder = null;\n\n    if (borderObject) {\n      this.checkSettingsCohesion([borderObject]);\n\n      borderKeys = Object.keys(borderObject);\n      normBorder = normalizeBorder(borderObject);\n    }\n\n    const selectionType = detectSelectionType(selectionRanges);\n    const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n      createCellCoords: this.hot._createCellCoords.bind(this.hot),\n      createCellRange: this.hot._createCellRange.bind(this.hot),\n    });\n\n    arrayEach(selectionRanges, (selection) => {\n      selectionSchemaNormalizer(selection).forAll((row, col) => {\n        arrayEach(borderKeys, (borderKey) => {\n          this.prepareBorderFromCustomAdded(row, col, normBorder, toInlinePropName(borderKey));\n        });\n      });\n    });\n\n    /*\n    The line below triggers a re-render of Handsontable. This will be a \"fastDraw\"\n    render, because that is the default for the TableView class.\n\n    The re-render is needed for borders on cells that did not have a border before.\n    The way this call works is that it calls Table.refreshSelections, which calls\n    Selection.getBorder, which creates a new instance of Border.\n\n    Seems wise to keep this single-direction flow of creating new Borders\n    */\n    this.hot.view.render();\n  }\n\n  /**\n   * Get custom borders.\n   *\n   * @example\n   * ```js\n   * const customBordersPlugin = hot.getPlugin('customBorders');\n   *\n   * // Using an array of arrays (produced by `.getSelected()` method).\n   * customBordersPlugin.getBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * customBordersPlugin.getBorders(hot.getSelectedRange());\n   * // Using without param - return all customBorders.\n   * customBordersPlugin.getBorders();\n   * ```\n   *\n   * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n   * @returns {object[]} Returns array of border objects.\n   */\n  getBorders(selectionRanges) {\n    if (!Array.isArray(selectionRanges)) {\n      return this.savedBorders;\n    }\n\n    const selectionType = detectSelectionType(selectionRanges);\n    const selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {\n      createCellCoords: this.hot._createCellCoords.bind(this.hot),\n      createCellRange: this.hot._createCellRange.bind(this.hot),\n    });\n    const selectedBorders = [];\n\n    arrayEach(selectionRanges, (selection) => {\n      selectionSchemaNormalizer(selection).forAll((row, col) => {\n        arrayEach(this.savedBorders, (border) => {\n          if (border.row === row && border.col === col) {\n            selectedBorders.push(denormalizeBorder(border));\n          }\n        });\n      });\n    });\n\n    return selectedBorders;\n  }\n\n  /**\n   * Clear custom borders.\n   *\n   * @example\n   * ```js\n   * const customBordersPlugin = hot.getPlugin('customBorders');\n   *\n   * // Using an array of arrays (produced by `.getSelected()` method).\n   * customBordersPlugin.clearBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * customBordersPlugin.clearBorders(hot.getSelectedRange());\n   * // Using without param - clear all customBorders.\n   * customBordersPlugin.clearBorders();\n   * ```\n   *\n   * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n   */\n  clearBorders(selectionRanges) {\n    if (selectionRanges) {\n      this.setBorders(selectionRanges);\n\n    } else {\n      arrayEach(this.savedBorders, (border) => {\n        this.clearBordersFromSelectionSettings(border.id);\n        this.clearNullCellRange();\n        this.hot.removeCellMeta(border.row, border.col, 'borders');\n      });\n\n      this.savedBorders.length = 0;\n    }\n  }\n\n  /**\n   * Insert WalkontableSelection instance into Walkontable settings.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @param {string} [place] Coordinate where add/remove border - `top`, `bottom`, `start`, `end`.\n   */\n  insertBorderIntoSettings(border, place) {\n    const hasSavedBorders = this.checkSavedBorders(border);\n\n    if (!hasSavedBorders) {\n      this.savedBorders.push(border);\n    }\n\n    const visualCellRange = this.hot._createCellRange(this.hot._createCellCoords(border.row, border.col));\n    const hasCustomSelections = this.checkCustomSelections(border, visualCellRange, place);\n\n    if (!hasCustomSelections) {\n      this.hot.selection.highlight.addCustomSelection({ border, visualCellRange });\n    }\n  }\n\n  /**\n   * Prepare borders from setting (single cell).\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} borderDescriptor Object with `row` and `col`, `start`, `end`, `top` and `bottom` properties.\n   * @param {string} [place] Coordinate where add/remove border - `top`, `bottom`, `start`, `end`.\n   */\n  prepareBorderFromCustomAdded(row, column, borderDescriptor, place) {\n    const nrOfRows = this.hot.countRows();\n    const nrOfColumns = this.hot.countCols();\n\n    if (row >= nrOfRows || column >= nrOfColumns) {\n      return;\n    }\n\n    let border = createEmptyBorders(row, column);\n\n    if (borderDescriptor) {\n      border = extendDefaultBorder(border, borderDescriptor);\n\n      arrayEach(this.hot.selection.highlight.customSelections, (customSelection) => {\n        if (border.id === customSelection.settings.id) {\n          Object.assign(customSelection.settings, borderDescriptor);\n\n          border.id = customSelection.settings.id;\n          border.top = customSelection.settings.top;\n          border.bottom = customSelection.settings.bottom;\n          border.start = customSelection.settings.start;\n          border.end = customSelection.settings.end;\n\n          return false; // breaks forAll\n        }\n      });\n    }\n\n    this.hot.setCellMeta(row, column, 'borders', denormalizeBorder(border));\n    this.insertBorderIntoSettings(border, place);\n  }\n\n  /**\n   * Prepare borders from setting (object).\n   *\n   * @private\n   * @param {object} range {CellRange} The CellRange object.\n   * @param {object} customBorder Object with `start`, `end`, `top` and `bottom` properties.\n   */\n  prepareBorderFromCustomAddedRange(range, customBorder) {\n    const lastRowIndex = Math.min(range.to.row, this.hot.countRows() - 1);\n    const lastColumnIndex = Math.min(range.to.col, this.hot.countCols() - 1);\n\n    rangeEach(range.from.row, lastRowIndex, (rowIndex) => {\n      rangeEach(range.from.col, lastColumnIndex, (colIndex) => {\n        const border = createEmptyBorders(rowIndex, colIndex);\n        let add = 0;\n\n        if (rowIndex === range.from.row) {\n          if (hasOwnProperty(customBorder, 'top')) {\n            add += 1;\n            border.top = customBorder.top;\n          }\n        }\n\n        // Please keep in mind that `range.to.row` may be beyond the table boundaries. The border won't be rendered.\n        if (rowIndex === range.to.row) {\n          if (hasOwnProperty(customBorder, 'bottom')) {\n            add += 1;\n            border.bottom = customBorder.bottom;\n          }\n        }\n\n        if (colIndex === range.from.col) {\n          if (hasOwnProperty(customBorder, 'start')) {\n            add += 1;\n            border.start = customBorder.start;\n          }\n        }\n\n        // Please keep in mind that `range.to.col` may be beyond the table boundaries. The border won't be rendered.\n        if (colIndex === range.to.col) {\n          if (hasOwnProperty(customBorder, 'end')) {\n            add += 1;\n            border.end = customBorder.end;\n          }\n        }\n\n        if (add > 0) {\n          this.hot.setCellMeta(rowIndex, colIndex, 'borders', denormalizeBorder(border));\n          this.insertBorderIntoSettings(border);\n        } else {\n          // TODO sometimes it enters here. Why?\n        }\n      });\n    });\n  }\n\n  /**\n   * Remove border (triggered from context menu).\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   */\n  removeAllBorders(row, column) {\n    const borderId = createId(row, column);\n\n    this.spliceBorder(borderId);\n\n    this.clearBordersFromSelectionSettings(borderId);\n    this.clearNullCellRange();\n\n    this.hot.removeCellMeta(row, column, 'borders');\n  }\n\n  /**\n   * Set borders for each cell re. To border position.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `start`, `end` and `noBorders`.\n   * @param {boolean} remove True when remove borders, and false when add borders.\n   */\n  setBorder(row, column, place, remove) {\n    let bordersMeta = this.hot.getCellMeta(row, column).borders;\n\n    if (!bordersMeta || bordersMeta.border === undefined) {\n      bordersMeta = createEmptyBorders(row, column);\n    } else {\n      bordersMeta = normalizeBorder(bordersMeta);\n    }\n\n    if (remove) {\n      bordersMeta[place] = createSingleEmptyBorder();\n\n      const hideCount = this.countHide(bordersMeta);\n\n      if (hideCount === 4) {\n        this.removeAllBorders(row, column);\n\n      } else {\n        const customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n        if (!customSelectionsChecker) {\n          this.insertBorderIntoSettings(bordersMeta);\n        }\n\n        this.hot.setCellMeta(row, column, 'borders', denormalizeBorder(bordersMeta));\n      }\n\n    } else {\n      bordersMeta[place] = createDefaultCustomBorder();\n\n      const customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n      if (!customSelectionsChecker) {\n        this.insertBorderIntoSettings(bordersMeta);\n      }\n\n      this.hot.setCellMeta(row, column, 'borders', denormalizeBorder(bordersMeta));\n    }\n  }\n\n  /**\n   * Prepare borders based on cell and border position.\n   *\n   * @private\n   * @param {CellRange[]} selected An array of CellRange objects.\n   * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n   * @param {boolean} remove True when remove borders, and false when add borders.\n   */\n  prepareBorder(selected, place, remove) {\n    arrayEach(selected, ({ start, end }) => {\n      if (start.row === end.row && start.col === end.col) {\n        if (place === 'noBorders') {\n          this.removeAllBorders(start.row, start.col);\n        } else {\n          this.setBorder(start.row, start.col, place, remove);\n        }\n\n      } else {\n        switch (place) {\n          case 'noBorders':\n            rangeEach(start.col, end.col, (colIndex) => {\n              rangeEach(start.row, end.row, (rowIndex) => {\n                this.removeAllBorders(rowIndex, colIndex);\n              });\n            });\n            break;\n\n          case 'top':\n            rangeEach(start.col, end.col, (topCol) => {\n              this.setBorder(start.row, topCol, place, remove);\n            });\n            break;\n\n          case 'bottom':\n            rangeEach(start.col, end.col, (bottomCol) => {\n              this.setBorder(end.row, bottomCol, place, remove);\n            });\n            break;\n\n          case 'start':\n            rangeEach(start.row, end.row, (rowStart) => {\n              this.setBorder(rowStart, start.col, place, remove);\n            });\n            break;\n\n          case 'end':\n            rangeEach(start.row, end.row, (rowEnd) => {\n              this.setBorder(rowEnd, end.col, place, remove);\n            });\n            break;\n          default:\n            break;\n        }\n      }\n    });\n  }\n\n  /**\n   * Create borders from settings.\n   *\n   * @private\n   * @param {Array} customBorders Object with `row` and `col`, `start`, `end`, `top` and `bottom` properties.\n   */\n  createCustomBorders(customBorders) {\n    arrayEach(customBorders, (customBorder) => {\n      const normCustomBorder = normalizeBorder(customBorder);\n\n      if (customBorder.range) {\n        this.prepareBorderFromCustomAddedRange(customBorder.range, normCustomBorder);\n\n      } else {\n        this.prepareBorderFromCustomAdded(customBorder.row, customBorder.col, normCustomBorder);\n      }\n    });\n  }\n\n  /**\n   * Count hide property in border object.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @returns {number}\n   */\n  countHide(border) {\n    const { top, bottom, start, end } = border;\n    const values = [top, bottom, start, end];\n\n    return arrayReduce(values, (accumulator, value) => {\n      let result = accumulator;\n\n      if (value && value.hide) {\n        result += 1;\n      }\n\n      return result;\n    }, 0);\n  }\n\n  /**\n   * Clear borders settings from custom selections.\n   *\n   * @private\n   * @param {string} borderId Border id name as string.\n   */\n  clearBordersFromSelectionSettings(borderId) {\n    const index = arrayMap(\n      this.hot.selection.highlight.customSelections,\n      customSelection => customSelection.settings.id\n    ).indexOf(borderId);\n\n    if (index > -1) {\n      this.hot.selection.highlight.customSelections[index].clear();\n    }\n  }\n\n  /**\n   * Clear cellRange with null value.\n   *\n   * @private\n   */\n  clearNullCellRange() {\n    arrayEach(this.hot.selection.highlight.customSelections, (customSelection, index) => {\n      if (customSelection.cellRange === null) {\n        this.hot.selection.highlight.customSelections[index].destroy();\n        this.hot.selection.highlight.customSelections.splice(index, 1);\n\n        return false; // breaks forAll\n      }\n    });\n  }\n\n  /**\n   * Hide custom borders.\n   *\n   * @private\n   */\n  hideBorders() {\n    arrayEach(this.savedBorders, (border) => {\n      this.clearBordersFromSelectionSettings(border.id);\n      this.clearNullCellRange();\n    });\n  }\n\n  /**\n   * Splice border from savedBorders.\n   *\n   * @private\n   * @param {string} borderId Border id name as string.\n   */\n  spliceBorder(borderId) {\n    const index = arrayMap(this.savedBorders, border => border.id).indexOf(borderId);\n\n    if (index > -1) {\n      this.savedBorders.splice(index, 1);\n    }\n  }\n\n  /**\n   * Check if an border already exists in the savedBorders array, and if true update border in savedBorders.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   *\n   * @returns {boolean}\n   */\n  checkSavedBorders(border) {\n    let check = false;\n\n    const hideCount = this.countHide(border);\n\n    if (hideCount === 4) {\n      this.spliceBorder(border.id);\n      check = true;\n\n    } else {\n      arrayEach(this.savedBorders, (savedBorder, index) => {\n        if (border.id === savedBorder.id) {\n          this.savedBorders[index] = border;\n          check = true;\n\n          return false; // breaks forAll\n        }\n      });\n    }\n\n    return check;\n  }\n\n  /**\n   * Check if an border already exists in the customSelections, and if true call toggleHiddenClass method.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @param {string} place Coordinate where add/remove border - `top`, `bottom`, `start`, `end` and `noBorders`.\n   * @param {boolean} remove True when remove borders, and false when add borders.\n   *\n   * @returns {boolean}\n   */\n  checkCustomSelectionsFromContextMenu(border, place, remove) {\n    let check = false;\n\n    arrayEach(this.hot.selection.highlight.customSelections, (customSelection) => {\n      if (border.id === customSelection.settings.id) {\n        const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);\n\n        arrayEach(borders, (borderObject) => {\n          borderObject.toggleHiddenClass(place, remove); // TODO this also bad?\n        });\n\n        check = true;\n\n        return false; // breaks forAll\n      }\n    });\n\n    return check;\n  }\n\n  /**\n   * Check if an border already exists in the customSelections, and if true reset cellRange.\n   *\n   * @private\n   * @param {object} border Object with `row` and `col`, `start`, `end`, `top` and `bottom`, `id` and\n   *                        `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n   * @param {CellRange} cellRange The selection range to check.\n   * @param {string} [place] Coordinate where add/remove border - `top`, `bottom`, `start`, `end`.\n   * @returns {boolean}\n   */\n  checkCustomSelections(border, cellRange, place) {\n    const hideCount = this.countHide(border);\n    let check = false;\n\n    if (hideCount === 4) {\n      this.removeAllBorders(border.row, border.col);\n      check = true;\n\n    } else {\n      arrayEach(this.hot.selection.highlight.customSelections, (customSelection) => {\n        if (border.id === customSelection.settings.id) {\n          customSelection.visualCellRange = cellRange;\n          customSelection.commit();\n\n          if (place) {\n            const borders = this.hot.view._wt.selectionManager.getBorderInstances(customSelection);\n\n            arrayEach(borders, (borderObject) => {\n              borderObject.changeBorderStyle(place, border);\n            });\n          }\n\n          check = true;\n\n          return false; // breaks forAll\n        }\n      });\n    }\n\n    return check;\n  }\n\n  /**\n   * Change borders from settings.\n   *\n   * @private\n   */\n  changeBorderSettings() {\n    const customBorders = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(customBorders)) {\n      const bordersClone = deepClone(customBorders);\n\n      this.checkSettingsCohesion(bordersClone);\n\n      if (!bordersClone.length) {\n        this.savedBorders = bordersClone;\n      }\n\n      this.createCustomBorders(bordersClone);\n\n    } else if (customBorders !== undefined) {\n      this.createCustomBorders(this.savedBorders);\n    }\n  }\n\n  /**\n   * Checks the settings cohesion. The properties such like \"left\"/\"right\" are supported only\n   * in the LTR mode and the \"left\"/\"right\" options can not be used together with \"start\"/\"end\" properties.\n   *\n   * @private\n   * @param {object[]} customBorders The user defined custom border objects array.\n   */\n  checkSettingsCohesion(customBorders) {\n    const hasLeftOrRight = hasLeftRightTypeOptions(customBorders);\n    const hasStartOrEnd = hasStartEndTypeOptions(customBorders);\n\n    if (hasLeftOrRight && hasStartOrEnd) {\n      throw new Error('The \"left\"/\"right\" and \"start\"/\"end\" options should not be used together. ' +\n                      'Please use only the option \"start\"/\"end\".');\n    }\n\n    if (this.hot.isRtl() && hasLeftOrRight) {\n      throw new Error('The \"left\"/\"right\" properties are not supported for RTL. Please use option \"start\"/\"end\".');\n    }\n  }\n\n  /**\n   * Add border options to context menu.\n   *\n   * @param {object} defaultOptions Context menu items.\n   */\n  #onAfterContextMenuDefaultOptions(defaultOptions) {\n    if (!this.hot.getSettings()[PLUGIN_KEY]) {\n      return;\n    }\n\n    defaultOptions.items.push({\n      name: '---------',\n    }, {\n      key: 'borders',\n      name() {\n        return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);\n      },\n      disabled() {\n        const range = this.getSelectedRangeLast();\n\n        if (!range) {\n          return true;\n        }\n\n        if (range.isSingleHeader()) {\n          return true;\n        }\n\n        return this.selection.isSelectedByCorner();\n      },\n      submenu: {\n        items: [\n          menuItemTop(this),\n          menuItemRight(this),\n          menuItemBottom(this),\n          menuItemLeft(this),\n          menuItemNoBorders(this)\n        ]\n      }\n    });\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.changeBorderSettings();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import bottom from './bottom';\nimport left from './left';\nimport noBorders from './noBorders';\nimport right from './right';\nimport top from './top';\n\nexport {\n  bottom,\n  left,\n  noBorders,\n  right,\n  top\n};\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function bottom(customBordersPlugin) {\n  return {\n    key: 'borders:bottom',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM);\n      const hasBorder = checkSelectionBorders(this, 'bottom');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, 'bottom');\n\n      customBordersPlugin.prepareBorder(selected, 'bottom', hasBorder);\n    }\n  };\n}\n","import {\n  hasOwnProperty,\n  isObject,\n} from '../../helpers/object';\nimport { isDefined } from '../../helpers/mixed';\nimport { arrayEach } from '../../helpers/array';\n\n/**\n * Create separated id for borders for each cell.\n *\n * @param {number} row Visual row index.\n * @param {number} col Visual column index.\n * @returns {string}\n */\nexport function createId(row, col) {\n  return `border_row${row}col${col}`;\n}\n\n/**\n * Create default single border for each position (top/right/bottom/left).\n *\n * @returns {object} `{{width: number, color: string}}`.\n */\nexport function createDefaultCustomBorder() {\n  return {\n    width: 1,\n    color: '#000',\n  };\n}\n\n/**\n * Create default object for empty border.\n *\n * @returns {object} `{{hide: boolean}}`.\n */\nexport function createSingleEmptyBorder() {\n  return { hide: true };\n}\n\n/**\n * Create default Handsontable border object.\n *\n * @returns {object} `{{width: number, color: string, cornerVisible: boolean}}`.\n */\nexport function createDefaultHtBorder() {\n  return {\n    width: 1,\n    color: '#000',\n    cornerVisible: false,\n  };\n}\n\n/**\n * Normalizes the border object to be compatible with the Border API from the Walkontable.\n * The function translates the \"left\"/\"right\" properties to \"start\"/\"end\" prop names.\n *\n * @param {object} border The configuration object of the border.\n * @returns {object}\n */\nexport function normalizeBorder(border) {\n  if (isDefined(border.start) || isDefined(border.left)) {\n    border.start = border.start ?? border.left;\n  }\n  if (isDefined(border.end) || isDefined(border.right)) {\n    border.end = border.end ?? border.right;\n  }\n\n  delete border.left;\n  delete border.right;\n\n  return border;\n}\n\n/**\n * Denormalizes the border object to be backward compatible with the previous version of the CustomBorders\n * plugin API. The function extends the border configuration object for the backward compatible \"left\"/\"right\"\n * properties.\n *\n * @param {object} border The configuration object of the border.\n * @returns {object}\n */\nexport function denormalizeBorder(border) {\n  if (isDefined(border.start)) {\n    border.left = border.start;\n  }\n  if (isDefined(border.end)) {\n    border.right = border.end;\n  }\n\n  return border;\n}\n\n/**\n * Prepare empty border for each cell with all custom borders hidden.\n *\n * @param {number} row Visual row index.\n * @param {number} col Visual column index.\n * @returns {{id: string, border: any, row: number, col: number, top: {hide: boolean}, bottom: {hide: boolean}, start: {hide: boolean}, end: {hide: boolean}}} Returns border configuration containing visual indexes.\n */\nexport function createEmptyBorders(row, col) {\n  return {\n    id: createId(row, col),\n    border: createDefaultHtBorder(),\n    row,\n    col,\n    top: createSingleEmptyBorder(),\n    bottom: createSingleEmptyBorder(),\n    start: createSingleEmptyBorder(),\n    end: createSingleEmptyBorder(),\n  };\n}\n\n/**\n * @param {object} defaultBorder The default border object.\n * @param {object} customBorder The border object with custom settings.\n * @returns {object}\n */\nexport function extendDefaultBorder(defaultBorder, customBorder) {\n  if (hasOwnProperty(customBorder, 'border') && customBorder.border) {\n    defaultBorder.border = customBorder.border;\n  }\n\n  if (hasOwnProperty(customBorder, 'top') && isDefined(customBorder.top)) {\n    if (customBorder.top) {\n      if (!isObject(customBorder.top)) {\n        customBorder.top = createDefaultCustomBorder();\n      }\n\n      defaultBorder.top = customBorder.top;\n\n    } else {\n      customBorder.top = createSingleEmptyBorder();\n      defaultBorder.top = customBorder.top;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'bottom') && isDefined(customBorder.bottom)) {\n    if (customBorder.bottom) {\n      if (!isObject(customBorder.bottom)) {\n        customBorder.bottom = createDefaultCustomBorder();\n      }\n\n      defaultBorder.bottom = customBorder.bottom;\n\n    } else {\n      customBorder.bottom = createSingleEmptyBorder();\n      defaultBorder.bottom = customBorder.bottom;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'start') && isDefined(customBorder.start)) {\n    if (customBorder.start) {\n\n      if (!isObject(customBorder.start)) {\n        customBorder.start = createDefaultCustomBorder();\n      }\n\n      defaultBorder.start = customBorder.start;\n\n    } else {\n      customBorder.start = createSingleEmptyBorder();\n      defaultBorder.start = customBorder.start;\n    }\n  }\n\n  if (hasOwnProperty(customBorder, 'end') && isDefined(customBorder.end)) {\n    if (customBorder.end) {\n      if (!isObject(customBorder.end)) {\n        customBorder.end = createDefaultCustomBorder();\n      }\n\n      defaultBorder.end = customBorder.end;\n\n    } else {\n      customBorder.end = createSingleEmptyBorder();\n      defaultBorder.end = customBorder.end;\n    }\n  }\n\n  return defaultBorder;\n}\n\n/**\n * Check if selection has border.\n *\n * @param {Core} hot The Handsontable instance.\n * @param {string} [direction] If set ('left' or 'top') then only the specified border side will be checked.\n * @returns {boolean}\n */\nexport function checkSelectionBorders(hot, direction) {\n  let atLeastOneHasBorder = false;\n\n  arrayEach(hot.getSelectedRange(), (range) => {\n    range.forAll((r, c) => {\n      if (r < 0 || c < 0) {\n        return;\n      }\n\n      const metaBorders = hot.getCellMeta(r, c).borders;\n\n      if (metaBorders) {\n        if (direction) {\n          if (!hasOwnProperty(metaBorders[direction], 'hide') || metaBorders[direction].hide === false) {\n            atLeastOneHasBorder = true;\n\n            return false; // breaks forAll\n          }\n        } else {\n          atLeastOneHasBorder = true;\n\n          return false; // breaks forAll\n        }\n      }\n    });\n  });\n\n  return atLeastOneHasBorder;\n}\n\n/**\n * Mark label in contextMenu as selected.\n *\n * @param {string} label The label text.\n * @returns {string}\n */\nexport function markSelected(label) {\n  return `<span class=\"selected\">${String.fromCharCode(10003)}</span>${label}`; // workaround for https://github.com/handsontable/handsontable/issues/1946\n}\n\n/**\n * Checks if in the borders config there are defined \"left\" or \"right\" border properties.\n *\n * @param {object[]} borders The custom border plugin's options.\n * @returns {boolean}\n */\nexport function hasLeftRightTypeOptions(borders) {\n  return borders.some(border => isDefined(border.left) || isDefined(border.right));\n}\n\n/**\n * Checks if in the borders config there are defined \"start\" or \"end\" border properties.\n *\n * @param {object[]} borders The custom border plugin's options.\n * @returns {boolean}\n */\nexport function hasStartEndTypeOptions(borders) {\n  return borders.some(border => isDefined(border.start) || isDefined(border.end));\n}\n\nconst physicalToInlinePropNames = new Map([\n  ['left', 'start'],\n  ['right', 'end'],\n]);\n\n/**\n * Translates the physical horizontal direction to logical ones. If not known property name is\n * passed it will be returned without modification.\n *\n * @param {string} propName The physical direction property name (\"left\" or \"right\").\n * @returns {string}\n */\nexport function toInlinePropName(propName) {\n  return physicalToInlinePropNames.get(propName) ?? propName;\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function left(customBordersPlugin) {\n  const borderDirection = customBordersPlugin.hot.isRtl() ? 'end' : 'start';\n\n  return {\n    key: 'borders:left',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_LEFT);\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      customBordersPlugin.prepareBorder(selected, borderDirection, hasBorder);\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function noBorders(customBordersPlugin) {\n  return {\n    key: 'borders:no_borders',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_BORDERS);\n    },\n    callback(key, selected) {\n      customBordersPlugin.prepareBorder(selected, 'noBorders');\n    },\n    disabled() {\n      return !checkSelectionBorders(this);\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function right(customBordersPlugin) {\n  const borderDirection = customBordersPlugin.hot.isRtl() ? 'start' : 'end';\n\n  return {\n    key: 'borders:right',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_RIGHT);\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, borderDirection);\n\n      customBordersPlugin.prepareBorder(selected, borderDirection, hasBorder);\n    }\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { checkSelectionBorders, markSelected } from '../utils';\n\n/**\n * @param {CustomBorders} customBordersPlugin The plugin instance.\n * @returns {object}\n */\nexport default function top(customBordersPlugin) {\n  return {\n    key: 'borders:top',\n    name() {\n      let label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_TOP);\n      const hasBorder = checkSelectionBorders(this, 'top');\n\n      if (hasBorder) {\n        label = markSelected(label);\n      }\n\n      return label;\n    },\n    callback(key, selected) {\n      const hasBorder = checkSelectionBorders(this, 'top');\n\n      customBordersPlugin.prepareBorder(selected, 'top', hasBorder);\n    }\n  };\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  DragToScroll,\n} from './dragToScroll';\n","import { BasePlugin } from '../base';\nimport { isRightClick } from '../../helpers/dom/event';\nimport { getParentWindow } from '../../helpers/dom/element';\n\nexport const PLUGIN_KEY = 'dragToScroll';\nexport const PLUGIN_PRIORITY = 100;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @description\n * Plugin used to scroll Handsontable by selecting a cell and dragging outside of the visible viewport.\n *\n *\n * @class DragToScroll\n * @plugin DragToScroll\n */\nexport class DragToScroll extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Size of an element and its position relative to the viewport,\n   * e.g. {bottom: 449, height: 441, left: 8, right: 814, top: 8, width: 806, x: 8, y:8}.\n   *\n   * @type {DOMRect}\n   */\n  boundaries = null;\n  /**\n   * Callback function.\n   *\n   * @private\n   * @type {Function}\n   */\n  callback = null;\n  /**\n   * Flag indicates mouseDown/mouseUp.\n   *\n   * @private\n   * @type {boolean}\n   */\n  listening = false;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link DragToScroll#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterOnCellMouseDown', event => this.#setupListening(event));\n    this.addHook('afterOnCellCornerMouseDown', event => this.#setupListening(event));\n\n    this.registerEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`dragToScroll`](@/api/options.md#dragtoscroll)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.unregisterEvents();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Sets the boundaries/dimensions of the scrollable viewport.\n   *\n   * @param {DOMRect|{left: number, right: number, top: number, bottom: number}} [boundaries] An object with\n   * coordinates. Contains the window boundaries by default. The object is compatible with DOMRect.\n   */\n  setBoundaries(boundaries = {\n    left: 0,\n    right: this.hot.rootWindow.innerWidth,\n    top: 0,\n    bottom: this.hot.rootWindow.innerHeight,\n  }) {\n    this.boundaries = boundaries;\n  }\n\n  /**\n   * Changes callback function.\n   *\n   * @param {Function} callback The callback function.\n   */\n  setCallback(callback) {\n    this.callback = callback;\n  }\n\n  /**\n   * Checks if the mouse position (X, Y) is outside the viewport and fires a callback with calculated X an Y diffs\n   * between passed boundaries.\n   *\n   * @param {number} x Mouse X coordinate to check.\n   * @param {number} y Mouse Y coordinate to check.\n   */\n  check(x, y) {\n    let diffX = 0;\n    let diffY = 0;\n\n    if (y < this.boundaries.top) {\n      // y is less than top\n      diffY = y - this.boundaries.top;\n\n    } else if (y > this.boundaries.bottom) {\n      // y is more than bottom\n      diffY = y - this.boundaries.bottom;\n    }\n\n    if (x < this.boundaries.left) {\n      // x is less than left\n      diffX = x - this.boundaries.left;\n\n    } else if (x > this.boundaries.right) {\n      // x is more than right\n      diffX = x - this.boundaries.right;\n    }\n\n    this.callback(diffX, diffY);\n  }\n\n  /**\n   * Enables listening on `mousemove` event.\n   *\n   * @private\n   */\n  listen() {\n    this.listening = true;\n  }\n\n  /**\n   * Disables listening on `mousemove` event.\n   *\n   * @private\n   */\n  unlisten() {\n    this.listening = false;\n  }\n\n  /**\n   * Returns current state of listening.\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isListening() {\n    return this.listening;\n  }\n\n  /**\n   * Registers dom listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { rootWindow } = this.hot;\n\n    let frame = rootWindow;\n\n    while (frame) {\n      this.eventManager.addEventListener(frame.document, 'contextmenu', () => this.unlisten());\n      this.eventManager.addEventListener(frame.document, 'mouseup', () => this.unlisten());\n      this.eventManager.addEventListener(frame.document, 'mousemove', event => this.onMouseMove(event));\n\n      frame = getParentWindow(frame);\n    }\n  }\n\n  /**\n   * Unbinds the events used by the plugin.\n   *\n   * @private\n   */\n  unregisterEvents() {\n    this.eventManager.clear();\n  }\n\n  /**\n   * On after on cell/cellCorner mouse down listener.\n   *\n   * @param {MouseEvent} event The mouse event object.\n   */\n  #setupListening(event) {\n    if (isRightClick(event)) {\n      return;\n    }\n\n    const scrollHandler = this.hot.view._wt.wtOverlays.topOverlay.mainTableScrollableElement;\n\n    this.setBoundaries(scrollHandler !== this.hot.rootWindow ? scrollHandler.getBoundingClientRect() : undefined);\n\n    this.setCallback((scrollX, scrollY) => {\n      const horizontalScrollValue = scrollHandler.scrollLeft ?? scrollHandler.scrollX;\n      const verticalScrollValue = scrollHandler.scrollTop ?? scrollHandler.scrollY;\n\n      scrollHandler.scroll(\n        horizontalScrollValue + (Math.sign(scrollX) * 50),\n        verticalScrollValue + (Math.sign(scrollY) * 20)\n      );\n    });\n\n    this.listen();\n  }\n\n  /**\n   * 'mouseMove' event callback.\n   *\n   * @private\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  onMouseMove(event) {\n    if (!this.isListening()) {\n      return;\n    }\n\n    this.check(event.clientX, event.clientY);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  DropdownMenu,\n} from './dropdownMenu';\n","import { BasePlugin } from '../base';\nimport { arrayEach } from '../../helpers/array';\nimport { objectEach } from '../../helpers/object';\nimport { CommandExecutor } from '../contextMenu/commandExecutor';\nimport { getDocumentOffsetByElement } from '../contextMenu/utils';\nimport { hasClass, setAttribute } from '../../helpers/dom/element';\nimport { ItemsFactory } from '../contextMenu/itemsFactory';\nimport { Menu } from '../contextMenu/menu';\nimport Hooks from '../../pluginHooks';\nimport {\n  COLUMN_LEFT,\n  COLUMN_RIGHT,\n  REMOVE_COLUMN,\n  CLEAR_COLUMN,\n  READ_ONLY,\n  ALIGNMENT,\n  SEPARATOR\n} from '../contextMenu/predefinedItems';\n\nimport './dropdownMenu.scss';\nimport { A11Y_HASPOPUP, A11Y_HIDDEN, A11Y_LABEL } from '../../helpers/a11y';\n\nHooks.getSingleton().register('afterDropdownMenuDefaultOptions');\nHooks.getSingleton().register('beforeDropdownMenuShow');\nHooks.getSingleton().register('afterDropdownMenuShow');\nHooks.getSingleton().register('afterDropdownMenuHide');\nHooks.getSingleton().register('afterDropdownMenuExecute');\n\nexport const PLUGIN_KEY = 'dropdownMenu';\nexport const PLUGIN_PRIORITY = 230;\nconst BUTTON_CLASS_NAME = 'changeType';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @plugin DropdownMenu\n * @class DropdownMenu\n *\n * @description\n * This plugin creates the Handsontable Dropdown Menu. It allows to create a new column at any place in the grid\n * among [other features](@/guides/accessories-and-menus/context-menu/context-menu.md#context-menu-with-specific-options).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely).\n *\n * or array of any available strings:\n * * `[\"col_left\", \"col_right\", \"remove_col\", \"---------\", \"undo\", \"redo\"]`.\n *\n * See [the dropdown menu demo](@/guides/columns/column-menu/column-menu.md) for examples.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: data,\n *   colHeaders: true,\n *   // enable dropdown menu\n *   dropdownMenu: true\n * });\n *\n * // or\n * const hot = new Handsontable(container, {\n *   data: data,\n *   colHeaders: true,\n *   // enable and configure dropdown menu\n *   dropdownMenu: ['remove_col', '---------', 'make_read_only', 'alignment']\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={data}\n *   comments={true}\n *   // enable and configure dropdown menu\n *   dropdownMenu={['remove_col', '---------', 'make_read_only', 'alignment']}\n * />\n * ```\n * :::\n */\n\nexport class DropdownMenu extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:AutoColumnSize',\n    ];\n  }\n\n  /**\n   * Default menu items order when `dropdownMenu` is enabled by setting the config item to `true`.\n   *\n   * @returns {Array}\n   */\n  static get DEFAULT_ITEMS() {\n    return [\n      COLUMN_LEFT,\n      COLUMN_RIGHT,\n      SEPARATOR,\n      REMOVE_COLUMN,\n      SEPARATOR,\n      CLEAR_COLUMN,\n      SEPARATOR,\n      READ_ONLY,\n      SEPARATOR,\n      ALIGNMENT,\n    ];\n  }\n\n  /**\n   * Instance of {@link CommandExecutor}.\n   *\n   * @private\n   * @type {CommandExecutor}\n   */\n  commandExecutor = new CommandExecutor(this.hot);\n  /**\n   * Instance of {@link ItemsFactory}.\n   *\n   * @private\n   * @type {ItemsFactory}\n   */\n  itemsFactory = null;\n  /**\n   * Instance of {@link Menu}.\n   *\n   * @private\n   * @type {Menu}\n   */\n  menu = null;\n  /**\n   * Flag which determines if the button that opens the menu was clicked.\n   *\n   * @type {boolean}\n   */\n  #isButtonClicked = false;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n\n    // One listener for enable/disable functionality\n    this.hot.addHook('afterGetColHeader', (col, TH) => this.#onAfterGetColHeader(col, TH));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link DropdownMenu#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   *\n   * @fires Hooks#afterDropdownMenuDefaultOptions\n   * @fires Hooks#beforeDropdownMenuSetItems\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.itemsFactory = new ItemsFactory(this.hot, DropdownMenu.DEFAULT_ITEMS);\n\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeViewportScrollHorizontally', (...args) => this.#onBeforeViewportScrollHorizontally(...args));\n\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n    const predefinedItems = {\n      items: this.itemsFactory.getItems(settings)\n    };\n\n    this.registerEvents();\n\n    if (typeof settings.callback === 'function') {\n      this.commandExecutor.setCommonCallback(settings.callback);\n    }\n\n    this.registerShortcuts();\n    super.enablePlugin();\n\n    this.callOnPluginsReady(() => {\n      this.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);\n\n      this.itemsFactory.setPredefinedItems(predefinedItems.items);\n      const menuItems = this.itemsFactory.getItems(settings);\n\n      if (this.menu) {\n        this.menu.destroy();\n      }\n      this.menu = new Menu(this.hot, {\n        className: 'htDropdownMenu',\n        keepInViewport: true,\n        container: settings.uiContainer || this.hot.rootDocument.body,\n      });\n      this.hot.runHooks('beforeDropdownMenuSetItems', menuItems);\n\n      this.menu.setMenuItems(menuItems);\n\n      this.menu.addLocalHook('beforeOpen', () => this.#onMenuBeforeOpen());\n      this.menu.addLocalHook('afterOpen', () => this.#onMenuAfterOpen());\n      this.menu.addLocalHook('afterSubmenuOpen', subMenuInstance => this.#onSubMenuAfterOpen(subMenuInstance));\n      this.menu.addLocalHook('afterClose', () => this.#onMenuAfterClose());\n      this.menu.addLocalHook('executeCommand', (...params) => this.executeCommand.call(this, ...params));\n\n      // Register all commands. Predefined and added by user or by plugins\n      arrayEach(menuItems, command => this.commandExecutor.registerCommand(command.key, command));\n    });\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`dropdownMenu`](@/api/options.md#dropdownmenu)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n    }\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling dropdown menu.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const gridContext = this.hot.getShortcutManager().getContext('grid');\n    const callback = () => {\n      const { highlight } = this.hot.getSelectedRangeLast();\n\n      if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {\n        this.hot.selectColumns(highlight.col, highlight.col, -1);\n\n        const { from } = this.hot.getSelectedRangeLast();\n        const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n        const target = this.hot.getCell(-1, from.col, true).querySelector(`.${BUTTON_CLASS_NAME}`);\n        const rect = target.getBoundingClientRect();\n\n        this.open({\n          left: rect.left + offset.left,\n          top: rect.top + target.offsetHeight + offset.top,\n        }, {\n          left: rect.width,\n          right: 0,\n          above: 0,\n          below: 3,\n        });\n        // Make sure the first item is selected (role=menuitem). Otherwise, screen readers\n        // will block the Esc key for the whole menu.\n        this.menu.getNavigator().toFirstItem();\n      }\n    };\n\n    gridContext.addShortcuts([{\n      keys: [['Shift', 'Alt', 'ArrowDown'], ['Control/Meta', 'Enter']],\n      callback,\n      runOnlyIf: () => {\n        const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n        return highlight && this.hot.selection.isCellVisible(highlight) &&\n          highlight.isHeader() && !this.menu.isOpened();\n      },\n      captureCtrl: true,\n      group: SHORTCUTS_GROUP,\n    }, {\n      keys: [['Shift', 'Alt', 'ArrowDown']],\n      callback,\n      runOnlyIf: () => {\n        const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n        return highlight && this.hot.selection.isCellVisible(highlight) &&\n          highlight.isCell() && !this.menu.isOpened();\n      },\n      group: SHORTCUTS_GROUP,\n    }]);\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling dropdown menu.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Registers the DOM listeners.\n   *\n   * @private\n   */\n  registerEvents() {\n    this.eventManager.addEventListener(this.hot.rootElement, 'click', event => this.#onTableClick(event));\n  }\n\n  /**\n   * Opens menu and re-position it based on the passed coordinates.\n   *\n   * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties\n   * which contains coordinates relative to the browsers viewport (without included scroll offsets).\n   * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`\n   * coordinates.\n   * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying\n   * the offset to the menu position.\n   * @fires Hooks#beforeDropdownMenuShow\n   * @fires Hooks#afterDropdownMenuShow\n   */\n  open(position, offset = { above: 0, below: 0, left: 0, right: 0 }) {\n    if (this.menu?.isOpened()) {\n      return;\n    }\n\n    this.menu.open();\n\n    objectEach(offset, (value, key) => {\n      this.menu.setOffset(key, value);\n    });\n    this.menu.setPosition(position);\n  }\n\n  /**\n   * Closes dropdown menu.\n   */\n  close() {\n    this.menu?.close();\n  }\n\n  /**\n   * Executes context menu command.\n   *\n   * The `executeCommand()` method works only for selected cells.\n   *\n   * When no cells are selected, `executeCommand()` doesn't do anything.\n   *\n   * You can execute all predefined commands:\n   *  * `'col_left'` - Insert column left\n   *  * `'col_right'` - Insert column right\n   *  * `'clear_column'` - Clear selected column\n   *  * `'remove_col'` - Remove column\n   *  * `'undo'` - Undo last action\n   *  * `'redo'` - Redo last action\n   *  * `'make_read_only'` - Make cell read only\n   *  * `'alignment:left'` - Alignment to the left\n   *  * `'alignment:top'` - Alignment to the top\n   *  * `'alignment:right'` - Alignment to the right\n   *  * `'alignment:bottom'` - Alignment to the bottom\n   *  * `'alignment:middle'` - Alignment to the middle\n   *  * `'alignment:center'` - Alignment to the center (justify).\n   *\n   * Or you can execute command registered in settings where `key` is your command name.\n   *\n   * @param {string} commandName Command name to execute.\n   * @param {*} params Additional parameters passed to the command executor.\n   */\n  executeCommand(commandName, ...params) {\n    this.commandExecutor.execute(commandName, ...params);\n  }\n\n  /**\n   * Turns on / off listening on dropdown menu.\n   *\n   * @private\n   * @param {boolean} listen Turn on listening when value is set to true, otherwise turn it off.\n   */\n  setListening(listen = true) {\n    if (this.menu.isOpened()) {\n      if (listen) {\n        this.menu.hotMenu.listen();\n      } else {\n        this.menu.hotMenu.unlisten();\n      }\n    }\n  }\n\n  /**\n   * Add custom shortcuts to the provided menu instance.\n   *\n   * @param {Menu} menuInstance The menu instance.\n   */\n  #addCustomShortcuts(menuInstance) {\n    menuInstance\n      .getKeyboardShortcutsCtrl()\n      .addCustomShortcuts([{\n        keys: [['Control/Meta', 'A']],\n        callback: () => false,\n      }]);\n  }\n\n  /**\n   * Table click listener.\n   *\n   * @private\n   * @param {Event} event The mouse event object.\n   */\n  #onTableClick(event) {\n    if (hasClass(event.target, BUTTON_CLASS_NAME)) {\n      const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);\n      const rect = event.target.getBoundingClientRect();\n\n      event.stopPropagation();\n      this.#isButtonClicked = false;\n\n      this.open({\n        left: rect.left + offset.left,\n        top: rect.top + event.target.offsetHeight + offset.top,\n      }, {\n        left: rect.width,\n        right: 0,\n        above: 0,\n        below: 3,\n      });\n    }\n  }\n\n  /**\n   * On after get column header listener.\n   *\n   * @private\n   * @param {number} col Visual column index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   */\n  #onAfterGetColHeader(col, TH) {\n    // Corner or a higher-level header\n    const headerRow = TH.parentNode;\n\n    if (!headerRow) {\n      return;\n    }\n\n    const headerRowList = headerRow.parentNode.childNodes;\n    const level = Array.prototype.indexOf.call(headerRowList, headerRow);\n\n    if (col < 0 || level !== headerRowList.length - 1) {\n      return;\n    }\n\n    const existingButton = TH.querySelector(`.${BUTTON_CLASS_NAME}`);\n\n    // Plugin enabled and buttons already exists, return.\n    if (this.enabled && existingButton) {\n      return;\n    }\n    // Plugin disabled and buttons still exists, so remove them.\n    if (!this.enabled) {\n      if (existingButton) {\n        existingButton.parentNode.removeChild(existingButton);\n      }\n\n      return;\n    }\n    const button = this.hot.rootDocument.createElement('button');\n\n    button.className = BUTTON_CLASS_NAME;\n    button.type = 'button';\n    button.tabIndex = -1;\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(button, [\n        A11Y_HIDDEN(),\n        A11Y_LABEL(' '),\n      ]);\n\n      setAttribute(TH, [\n        A11Y_HASPOPUP('menu'),\n      ]);\n    }\n\n    // prevent page reload on button click\n    button.onclick = function() {\n      return false;\n    };\n\n    TH.firstChild.insertBefore(button, TH.firstChild.firstChild);\n  }\n\n  /**\n   * On menu before open listener.\n   *\n   * @private\n   * @fires Hooks#beforeDropdownMenuShow\n   */\n  #onMenuBeforeOpen() {\n    this.hot.runHooks('beforeDropdownMenuShow', this);\n  }\n\n  /**\n   * On menu after open listener.\n   *\n   * @private\n   * @fires Hooks#afterDropdownMenuShow\n   */\n  #onMenuAfterOpen() {\n    this.hot.runHooks('afterDropdownMenuShow', this);\n\n    this.#addCustomShortcuts(this.menu);\n  }\n\n  /**\n   * Listener for the `afterSubmenuOpen` hook.\n   *\n   * @private\n   * @param {Menu} subMenuInstance The opened sub menu instance.\n   */\n  #onSubMenuAfterOpen(subMenuInstance) {\n    this.#addCustomShortcuts(subMenuInstance);\n  }\n\n  /**\n   * On menu after close listener.\n   *\n   * @private\n   * @fires Hooks#afterDropdownMenuHide\n   */\n  #onMenuAfterClose() {\n    this.hot.listen();\n    this.hot.runHooks('afterDropdownMenuHide', this);\n  }\n\n  /**\n   * Hook allows blocking horizontal scroll when the menu is opened by clicking on\n   * the column header button. This prevents from scrolling the viewport (jump effect) when\n   * the button is clicked.\n   *\n   * @param {number} visualColumn Visual column index.\n   * @returns {number | null}\n   */\n  #onBeforeViewportScrollHorizontally(visualColumn) {\n    return this.#isButtonClicked ? null : visualColumn;\n  }\n\n  /**\n   * Hook sets the internal flag to `true` when the button is clicked.\n   *\n   * @param {MouseEvent} event The mouse event object.\n   */\n  #onBeforeOnCellMouseDown(event) {\n    if (hasClass(event.target, BUTTON_CLASS_NAME)) {\n      this.#isButtonClicked = true;\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.close();\n\n    if (this.menu) {\n      this.menu.destroy();\n    }\n    super.destroy();\n  }\n}\n\nDropdownMenu.SEPARATOR = {\n  name: SEPARATOR\n};\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ExportFile,\n} from './exportFile';\n","import { BasePlugin } from '../base';\nimport DataProvider from './dataProvider';\nimport typeFactory, { EXPORT_TYPES } from './typeFactory';\n\nexport const PLUGIN_KEY = 'exportFile';\nexport const PLUGIN_PRIORITY = 240;\n\n/**\n * @plugin ExportFile\n * @class ExportFile\n *\n * @description\n * The `ExportFile` plugin lets you export table data as a string, blob, or downloadable CSV file.\n *\n * See [the export file demo](@/guides/accessories-and-menus/export-to-csv/export-to-csv.md) for examples.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData()\n * });\n *\n * // access to exportFile plugin instance\n * const exportPlugin = hot.getPlugin('exportFile');\n *\n * // export as a string\n * exportPlugin.exportAsString('csv');\n *\n * // export as a blob object\n * exportPlugin.exportAsBlob('csv');\n *\n * // export to downloadable file (named: MyFile.csv)\n * exportPlugin.downloadFile('csv', {filename: 'MyFile'});\n *\n * // export as a string (with specified data range):\n * exportPlugin.exportAsString('csv', {\n *   exportHiddenRows: true,     // default false\n *   exportHiddenColumns: true,  // default false\n *   columnHeaders: true,        // default false\n *   rowHeaders: true,           // default false\n *   columnDelimiter: ';',       // default ','\n *   range: [1, 1, 6, 6]         // [startRow, endRow, startColumn, endColumn]\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n * />\n *\n * const hot = hotRef.current.hotInstance;\n * // access to exportFile plugin instance\n * const exportPlugin = hot.getPlugin('exportFile');\n *\n * // export as a string\n * exportPlugin.exportAsString('csv');\n *\n * // export as a blob object\n * exportPlugin.exportAsBlob('csv');\n *\n * // export to downloadable file (named: MyFile.csv)\n * exportPlugin.downloadFile('csv', {filename: 'MyFile'});\n *\n * // export as a string (with specified data range):\n * exportPlugin.exportAsString('csv', {\n *   exportHiddenRows: true,     // default false\n *   exportHiddenColumns: true,  // default false\n *   columnHeaders: true,        // default false\n *   rowHeaders: true,           // default false\n *   columnDelimiter: ';',       // default ','\n *   range: [1, 1, 6, 6]         // [startRow, endRow, startColumn, endColumn]\n * });\n * ```\n * :::\n */\nexport class ExportFile extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ExportFile#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return true;\n  }\n\n  /**\n   * @typedef ExportOptions\n   * @memberof ExportFile\n   * @type {object}\n   * @property {boolean} [exportHiddenRows=false] Include hidden rows in the exported file.\n   * @property {boolean} [exportHiddenColumns=false] Include hidden columns in the exported file.\n   * @property {boolean} [columnHeaders=false] Include column headers in the exported file.\n   * @property {boolean} [rowHeaders=false] Include row headers in the exported file.\n   * @property {string} [columnDelimiter=','] Column delimiter.\n   * @property {string} [range=[]] Cell range that will be exported to file.\n   */\n\n  /**\n   * Exports table data as a string.\n   *\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   * @returns {string}\n   */\n  exportAsString(format, options = {}) {\n    return this._createTypeFormatter(format, options).export();\n  }\n\n  /**\n   * Exports table data as a blob object.\n   *\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   * @returns {Blob}\n   */\n  exportAsBlob(format, options = {}) {\n    return this._createBlob(this._createTypeFormatter(format, options));\n  }\n\n  /**\n   * Exports table data as a downloadable file.\n   *\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   */\n  downloadFile(format, options = {}) {\n    const { rootDocument, rootWindow } = this.hot;\n    const formatter = this._createTypeFormatter(format, options);\n    const blob = this._createBlob(formatter);\n    const URL = (rootWindow.URL || rootWindow.webkitURL);\n\n    const a = rootDocument.createElement('a');\n    const name = `${formatter.options.filename}.${formatter.options.fileExtension}`;\n\n    if (a.download !== undefined) {\n      const url = URL.createObjectURL(blob);\n\n      a.style.display = 'none';\n      a.setAttribute('href', url);\n      a.setAttribute('download', name);\n      rootDocument.body.appendChild(a);\n      a.dispatchEvent(new MouseEvent('click'));\n      rootDocument.body.removeChild(a);\n\n      setTimeout(() => {\n        URL.revokeObjectURL(url);\n      }, 100);\n\n    } else if (navigator.msSaveOrOpenBlob) { // IE10+\n      navigator.msSaveOrOpenBlob(blob, name);\n    }\n  }\n\n  /**\n   * Creates and returns class formatter for specified export type.\n   *\n   * @private\n   * @param {string} format Export format type eq. `'csv'`.\n   * @param {ExportOptions} options Export options.\n   * @returns {BaseType}\n   */\n  _createTypeFormatter(format, options = {}) {\n    if (!EXPORT_TYPES[format]) {\n      throw new Error(`Export format type \"${format}\" is not supported.`);\n    }\n\n    return typeFactory(format, new DataProvider(this.hot), options);\n  }\n\n  /**\n   * Creates blob object based on provided type formatter class.\n   *\n   * @private\n   * @param {BaseType} typeFormatter The instance of the specyfic formatter/exporter.\n   * @returns {Blob}\n   */\n  _createBlob(typeFormatter) {\n    let formatter = null;\n\n    if (typeof Blob !== 'undefined') {\n      formatter = new Blob([typeFormatter.export()], {\n        type: `${typeFormatter.options.mimeType};charset=${typeFormatter.options.encoding}`,\n      });\n    }\n\n    return formatter;\n  }\n}\n","import { rangeEach } from '../../helpers/number';\n\n/**\n * @private\n */\nclass DataProvider {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Format type class options.\n   *\n   * @type {object}\n   */\n  options = {};\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Set options for data provider.\n   *\n   * @param {object} options Object with specified options.\n   */\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * Get table data based on provided settings to the class constructor.\n   *\n   * @returns {Array}\n   */\n  getData() {\n    const { startRow, startCol, endRow, endCol } = this._getDataRange();\n    const options = this.options;\n    const data = [];\n\n    rangeEach(startRow, endRow, (rowIndex) => {\n      const row = [];\n\n      if (!options.exportHiddenRows && this._isHiddenRow(rowIndex)) {\n        return;\n      }\n      rangeEach(startCol, endCol, (colIndex) => {\n        if (!options.exportHiddenColumns && this._isHiddenColumn(colIndex)) {\n          return;\n        }\n        row.push(this.hot.getDataAtCell(rowIndex, colIndex));\n      });\n\n      data.push(row);\n    });\n\n    return data;\n  }\n\n  /**\n   * Gets list of row headers.\n   *\n   * @returns {Array}\n   */\n  getRowHeaders() {\n    const headers = [];\n\n    if (this.options.rowHeaders) {\n      const { startRow, endRow } = this._getDataRange();\n      const rowHeaders = this.hot.getRowHeader();\n\n      rangeEach(startRow, endRow, (row) => {\n        if (!this.options.exportHiddenRows && this._isHiddenRow(row)) {\n          return;\n        }\n        headers.push(rowHeaders[row]);\n      });\n    }\n\n    return headers;\n  }\n\n  /**\n   * Gets list of columns headers.\n   *\n   * @returns {Array}\n   */\n  getColumnHeaders() {\n    const headers = [];\n\n    if (this.options.columnHeaders) {\n      const { startCol, endCol } = this._getDataRange();\n      const colHeaders = this.hot.getColHeader();\n\n      rangeEach(startCol, endCol, (column) => {\n        if (!this.options.exportHiddenColumns && this._isHiddenColumn(column)) {\n          return;\n        }\n        headers.push(colHeaders[column]);\n      });\n    }\n\n    return headers;\n  }\n\n  /**\n   * Get data range object based on settings provided in the class constructor.\n   *\n   * @private\n   * @returns {object} Returns object with keys `startRow`, `startCol`, `endRow` and `endCol`.\n   */\n  _getDataRange() {\n    const cols = this.hot.countCols() - 1;\n    const rows = this.hot.countRows() - 1;\n    let [startRow = 0, startCol = 0, endRow = rows, endCol = cols] = this.options.range;\n\n    startRow = Math.max(startRow, 0);\n    startCol = Math.max(startCol, 0);\n    endRow = Math.min(endRow, rows);\n    endCol = Math.min(endCol, cols);\n\n    return { startRow, startCol, endRow, endCol };\n  }\n\n  /**\n   * Check if row at specified row index is hidden.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {boolean}\n   */\n  _isHiddenRow(row) {\n    return this.hot.rowIndexMapper.isHidden(this.hot.toPhysicalRow(row));\n  }\n\n  /**\n   * Check if column at specified column index is hidden.\n   *\n   * @private\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  _isHiddenColumn(column) {\n    return this.hot.columnIndexMapper.isHidden(this.hot.toPhysicalColumn(column));\n  }\n}\n\nexport default DataProvider;\n","import Csv from './types/csv';\n\nexport const TYPE_CSV = 'csv';\nexport const TYPE_EXCEL = 'excel'; // TODO\nexport const TYPE_PDF = 'pdf'; // TODO\n\nexport const EXPORT_TYPES = {\n  [TYPE_CSV]: Csv,\n};\n\n/**\n * @private\n * @param {string} type The exporter type.\n * @param {DataProvider} dataProvider The data provider.\n * @param {object} options Constructor options for exporter class.\n * @returns {BaseType|null}\n */\nexport default function typeFactory(type, dataProvider, options) {\n  if (typeof EXPORT_TYPES[type] === 'function') {\n    return new EXPORT_TYPES[type](dataProvider, options);\n  }\n\n  return null;\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport { stringify } from '../../../helpers/mixed';\nimport BaseType from './_base';\n\nconst CHAR_CARRIAGE_RETURN = String.fromCharCode(13);\nconst CHAR_DOUBLE_QUOTES = String.fromCharCode(34);\nconst CHAR_LINE_FEED = String.fromCharCode(10);\n\n/**\n * @private\n */\nclass Csv extends BaseType {\n  /**\n   * Default options for exporting CSV format.\n   *\n   * @returns {object}\n   */\n  static get DEFAULT_OPTIONS() {\n    return {\n      mimeType: 'text/csv',\n      fileExtension: 'csv',\n      bom: true,\n      columnDelimiter: ',',\n      rowDelimiter: '\\r\\n',\n    };\n  }\n\n  /**\n   * Create string body in desired format.\n   *\n   * @returns {string}\n   */\n  export() {\n    const options = this.options;\n    const data = this.dataProvider.getData();\n    let columnHeaders = this.dataProvider.getColumnHeaders();\n    const hasColumnHeaders = columnHeaders.length > 0;\n    const rowHeaders = this.dataProvider.getRowHeaders();\n    const hasRowHeaders = rowHeaders.length > 0;\n    let result = options.bom ? String.fromCharCode(0xFEFF) : '';\n\n    if (hasColumnHeaders) {\n      columnHeaders = arrayMap(columnHeaders, value => this._escapeCell(value, true));\n\n      if (hasRowHeaders) {\n        result += options.columnDelimiter;\n      }\n      result += columnHeaders.join(options.columnDelimiter);\n      result += options.rowDelimiter;\n    }\n\n    arrayEach(data, (value, index) => {\n      if (index > 0) {\n        result += options.rowDelimiter;\n      }\n      if (hasRowHeaders) {\n        result += this._escapeCell(rowHeaders[index]) + options.columnDelimiter;\n      }\n      result += value.map(cellValue => this._escapeCell(cellValue)).join(options.columnDelimiter);\n    });\n\n    return result;\n  }\n\n  /**\n   * Escape cell value.\n   *\n   * @param {*} value Cell value.\n   * @param {boolean} [force=false] Indicates if cell value will be escaped forcefully.\n   * @returns {string}\n   */\n  _escapeCell(value, force = false) {\n    let escapedValue = stringify(value);\n\n    if (escapedValue !== '' && (force ||\n      escapedValue.indexOf(CHAR_CARRIAGE_RETURN) >= 0 ||\n      escapedValue.indexOf(CHAR_DOUBLE_QUOTES) >= 0 ||\n      escapedValue.indexOf(CHAR_LINE_FEED) >= 0 ||\n      escapedValue.indexOf(this.options.columnDelimiter) >= 0)) {\n\n      escapedValue = escapedValue.replace(new RegExp('\"', 'g'), '\"\"');\n      escapedValue = `\"${escapedValue}\"`;\n    }\n\n    return escapedValue;\n  }\n}\n\nexport default Csv;\n","import { extend, clone } from '../../../helpers/object';\nimport { substitute } from '../../../helpers/string';\n\n/**\n * @private\n */\nclass BaseType {\n  /**\n   * Default options.\n   *\n   * @returns {object}\n   */\n  static get DEFAULT_OPTIONS() {\n    return {\n      mimeType: 'text/plain',\n      fileExtension: 'txt',\n      filename: 'Handsontable [YYYY]-[MM]-[DD]',\n      encoding: 'utf-8',\n      bom: false,\n      columnHeaders: false,\n      rowHeaders: false,\n      exportHiddenColumns: false,\n      exportHiddenRows: false,\n      range: [],\n    };\n  }\n\n  /**\n   * Data provider.\n   *\n   * @type {DataProvider}\n   */\n  dataProvider;\n  /**\n   * Format type class options.\n   *\n   * @type {object}\n   */\n  options;\n\n  constructor(dataProvider, options) {\n    this.dataProvider = dataProvider;\n    this.options = this._mergeOptions(options);\n    this.dataProvider.setOptions(this.options);\n  }\n\n  /**\n   * Merge options provided by users with defaults.\n   *\n   * @param {object} options An object with options to merge with.\n   * @returns {object} Returns new options object.\n   */\n  _mergeOptions(options) {\n    let _options = clone(this.constructor.DEFAULT_OPTIONS);\n    const date = new Date();\n\n    _options = extend(clone(BaseType.DEFAULT_OPTIONS), _options);\n    _options = extend(_options, options);\n\n    _options.filename = substitute(_options.filename, {\n      YYYY: date.getFullYear(),\n      MM: (`${date.getMonth() + 1}`).padStart(2, '0'),\n      DD: (`${date.getDate()}`).padStart(2, '0'),\n    });\n\n    return _options;\n  }\n}\n\nexport default BaseType;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Filters,\n} from './filters';\n","import { BasePlugin } from '../base';\nimport { arrayEach, arrayMap } from '../../helpers/array';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport { warn } from '../../helpers/console';\nimport { rangeEach } from '../../helpers/number';\nimport { addClass, removeClass } from '../../helpers/dom/element';\nimport { isKey } from '../../helpers/unicode';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport * as constants from '../../i18n/constants';\nimport { ConditionComponent } from './component/condition';\nimport { OperatorsComponent } from './component/operators';\nimport { ValueComponent } from './component/value';\nimport { ActionBarComponent } from './component/actionBar';\nimport ConditionCollection from './conditionCollection';\nimport DataFilter from './dataFilter';\nimport ConditionUpdateObserver from './conditionUpdateObserver';\nimport { createArrayAssertion, toEmptyString, unifyColumnValues } from './utils';\nimport { createMenuFocusController } from './menu/focusController';\nimport {\n  CONDITION_NONE,\n  CONDITION_BY_VALUE,\n  OPERATION_AND,\n  OPERATION_OR,\n  OPERATION_OR_THEN_VARIABLE\n} from './constants';\nimport { TrimmingMap } from '../../translations';\n\nimport './filters.scss';\n\nexport const PLUGIN_KEY = 'filters';\nexport const PLUGIN_PRIORITY = 250;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/**\n * @plugin Filters\n * @class Filters\n *\n * @description\n * The plugin allows filtering the table data either by the built-in component or with the API.\n *\n * See [the filtering demo](@/guides/columns/column-filter/column-filter.md) for examples.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   colHeaders: true,\n *   rowHeaders: true,\n *   dropdownMenu: true,\n *   filters: true\n * });\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   colHeaders={true}\n *   rowHeaders={true}\n *   dropdownMenu={true}\n *   filters={true}\n * />\n * ```\n * :::\n */\nexport class Filters extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get PLUGIN_DEPS() {\n    return [\n      'plugin:DropdownMenu',\n      'plugin:HiddenRows',\n      'cell-type:checkbox',\n    ];\n  }\n\n  /**\n   * Instance of {@link DropdownMenu}.\n   *\n   * @private\n   * @type {DropdownMenu}\n   */\n  dropdownMenuPlugin = null;\n  /**\n   * Instance of {@link ConditionCollection}.\n   *\n   * @private\n   * @type {ConditionCollection}\n   */\n  conditionCollection = null;\n  /**\n   * Instance of {@link ConditionUpdateObserver}.\n   *\n   * @private\n   * @type {ConditionUpdateObserver}\n   */\n  conditionUpdateObserver = null;\n  /**\n   * Map, where key is component identifier and value represent `BaseComponent` element or it derivatives.\n   *\n   * @private\n   * @type {Map}\n   */\n  components = new Map([\n    ['filter_by_condition', null],\n    ['filter_operators', null],\n    ['filter_by_condition2', null],\n    ['filter_by_value', null],\n    ['filter_action_bar', null]\n  ]);\n  /**\n   * Map of skipped rows by plugin.\n   *\n   * @private\n   * @type {null|TrimmingMap}\n   */\n  filtersRowsMap = null;\n  /**\n   * Menu focus navigator allows switching the focus position through Tab and Shift Tab keys.\n   *\n   * @type {MenuFocusNavigator|undefined}\n   */\n  #menuFocusNavigator;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n    // One listener for the enable/disable functionality\n    this.hot.addHook('afterGetColHeader', (col, TH) => this.#onAfterGetColHeader(col, TH));\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link Filters#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    /* eslint-disable no-unneeded-ternary */\n    return this.hot.getSettings()[PLUGIN_KEY] ? true : false;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.filtersRowsMap = this.hot.rowIndexMapper.registerMap(this.pluginName, new TrimmingMap());\n    this.dropdownMenuPlugin = this.hot.getPlugin('dropdownMenu');\n\n    const dropdownSettings = this.hot.getSettings().dropdownMenu;\n    const menuContainer = (dropdownSettings && dropdownSettings.uiContainer) || this.hot.rootDocument.body;\n    const addConfirmationHooks = (component) => {\n      component.addLocalHook('accept', () => this.#onActionBarSubmit('accept'));\n      component.addLocalHook('cancel', () => this.#onActionBarSubmit('cancel'));\n      component.addLocalHook('change', command => this.#onComponentChange(component, command));\n\n      return component;\n    };\n\n    const filterByConditionLabel = () => `${this.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_CONDITION)}:`;\n    const filterValueLabel = () => `${this.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_VALUE)}:`;\n\n    if (!this.components.get('filter_by_condition')) {\n      const conditionComponent = new ConditionComponent(this.hot, {\n        id: 'filter_by_condition',\n        name: filterByConditionLabel,\n        addSeparator: false,\n        menuContainer\n      });\n\n      conditionComponent.addLocalHook('afterClose', () => this.#onSelectUIClosed());\n\n      this.components.set('filter_by_condition', addConfirmationHooks(conditionComponent));\n    }\n\n    if (!this.components.get('filter_operators')) {\n      this.components.set('filter_operators', new OperatorsComponent(this.hot, {\n        id: 'filter_operators',\n        name: 'Operators'\n      }));\n    }\n\n    if (!this.components.get('filter_by_condition2')) {\n      const conditionComponent = new ConditionComponent(this.hot, {\n        id: 'filter_by_condition2',\n        name: '',\n        addSeparator: true,\n        menuContainer\n      });\n\n      conditionComponent.addLocalHook('afterClose', () => this.#onSelectUIClosed());\n\n      this.components.set('filter_by_condition2', addConfirmationHooks(conditionComponent));\n    }\n\n    if (!this.components.get('filter_by_value')) {\n      this.components.set('filter_by_value', addConfirmationHooks(new ValueComponent(this.hot, {\n        id: 'filter_by_value',\n        name: filterValueLabel\n      })));\n    }\n\n    if (!this.components.get('filter_action_bar')) {\n      this.components.set('filter_action_bar', addConfirmationHooks(new ActionBarComponent(this.hot, {\n        id: 'filter_action_bar',\n        name: 'Action bar'\n      })));\n    }\n\n    if (!this.conditionCollection) {\n      this.conditionCollection = new ConditionCollection(this.hot);\n    }\n\n    if (!this.conditionUpdateObserver) {\n      this.conditionUpdateObserver = new ConditionUpdateObserver(\n        this.hot,\n        this.conditionCollection,\n        physicalColumn => this.getDataMapAtColumn(physicalColumn),\n      );\n      this.conditionUpdateObserver.addLocalHook('update', conditionState => this.#updateComponents(conditionState));\n    }\n\n    this.components.forEach(component => component.show());\n\n    this.addHook('afterDropdownMenuDefaultOptions',\n      defaultOptions => this.#onAfterDropdownMenuDefaultOptions(defaultOptions));\n    this.addHook('afterDropdownMenuShow', () => this.#onAfterDropdownMenuShow());\n    this.addHook('afterDropdownMenuHide', () => this.#onAfterDropdownMenuHide());\n    this.addHook('afterChange', changes => this.#onAfterChange(changes));\n\n    // Temp. solution (extending menu items bug in contextMenu/dropdownMenu)\n    if (this.hot.getSettings().dropdownMenu && this.dropdownMenuPlugin) {\n      this.dropdownMenuPlugin.disablePlugin();\n      this.dropdownMenuPlugin.enablePlugin();\n    }\n\n    if (!this.#menuFocusNavigator && this.dropdownMenuPlugin.enabled) {\n      const mainMenu = this.dropdownMenuPlugin.menu;\n      const focusableItems = [\n        // A fake menu item that once focused allows escaping from the focus navigation (using Tab keys)\n        // to the menu navigation using arrow keys.\n        {\n          focus: () => {\n            const menuNavigator = mainMenu.getNavigator();\n            const lastSelectedMenuItem = this.#menuFocusNavigator.getLastMenuPage();\n\n            mainMenu.focus();\n\n            if (lastSelectedMenuItem > 0) {\n              menuNavigator.setCurrentPage(lastSelectedMenuItem);\n            } else {\n              menuNavigator.toFirstItem();\n            }\n          },\n        },\n        ...Array.from(this.components)\n          .map(([, component]) => component.getElements())\n          .flat(),\n      ];\n\n      this.#menuFocusNavigator = createMenuFocusController(mainMenu, focusableItems);\n\n      const forwardToFocusNavigation = (event) => {\n        this.#menuFocusNavigator.listen();\n        event.preventDefault();\n\n        if (isKey(event.keyCode, 'TAB')) {\n          if (event.shiftKey) {\n            this.#menuFocusNavigator.toPreviousItem();\n          } else {\n            this.#menuFocusNavigator.toNextItem();\n          }\n        }\n      };\n\n      this.components.get('filter_by_value')\n        .addLocalHook('listTabKeydown', forwardToFocusNavigation);\n      this.components.get('filter_by_condition')\n        .addLocalHook('selectTabKeydown', forwardToFocusNavigation);\n    }\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    if (this.enabled) {\n      if (this.dropdownMenuPlugin?.enabled) {\n        this.dropdownMenuPlugin.menu.clearLocalHooks();\n      }\n\n      this.components.forEach((component, key) => {\n        component.destroy();\n        this.components.set(key, null);\n      });\n      this.conditionCollection.destroy();\n      this.conditionCollection = null;\n      this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    }\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for clearing the filters.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Alt', 'A']],\n        stopPropagation: true,\n        callback: () => {\n          const selection = this.hot.getSelected();\n\n          this.clearConditions();\n          this.filter();\n\n          if (selection) {\n            this.hot.selectCells(selection);\n          }\n        },\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for clearing the filters.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof Filters#\n   * @function addCondition\n   * @description\n   * Adds condition to the conditions collection at specified column index.\n   *\n   * Possible predefined conditions:\n   *  * `begins_with` - Begins with\n   *  * `between` - Between\n   *  * `by_value` - By value\n   *  * `contains` - Contains\n   *  * `date_after` - After a date\n   *  * `date_before` - Before a date\n   *  * `date_today` - Today\n   *  * `date_tomorrow` - Tomorrow\n   *  * `date_yesterday` - Yesterday\n   *  * `empty` - Empty\n   *  * `ends_with` - Ends with\n   *  * `eq` - Equal\n   *  * `gt` - Greater than\n   *  * `gte` - Greater than or equal\n   *  * `lt` - Less than\n   *  * `lte` - Less than or equal\n   *  * `none` - None (no filter)\n   *  * `not_between` - Not between\n   *  * `not_contains` - Not contains\n   *  * `not_empty` - Not empty\n   *  * `neq` - Not equal.\n   *\n   * Possible operations on collection of conditions:\n   *  * `conjunction` - [**Conjunction**](https://en.wikipedia.org/wiki/Logical_conjunction) on conditions collection (by default), i.e. for such operation: <br/> c1 AND c2 AND c3 AND c4 ... AND cn === TRUE, where c1 ... cn are conditions.\n   *  * `disjunction` - [**Disjunction**](https://en.wikipedia.org/wiki/Logical_disjunction) on conditions collection, i.e. for such operation: <br/> c1 OR c2 OR c3 OR c4 ... OR cn === TRUE, where c1, c2, c3, c4 ... cn are conditions.\n   *  * `disjunctionWithExtraCondition` - **Disjunction** on first `n - 1`\\* conditions from collection with an extra requirement computed from the last condition, i.e. for such operation: <br/> c1 OR c2 OR c3 OR c4 ... OR cn-1 AND cn === TRUE, where c1, c2, c3, c4 ... cn are conditions.\n   *\n   * \\* when `n` is collection size; it's used i.e. for one operation introduced from UI (when choosing from filter's drop-down menu two conditions with OR operator between them, mixed with choosing values from the multiple choice select)\n   *\n   * **Note**: Mind that you cannot mix different types of operations (for instance, if you use `conjunction`, use it consequently for a particular column).\n   *\n   * @example\n   * ::: only-for javascript\n   * ```js\n   * const container = document.getElementById('example');\n   * const hot = new Handsontable(container, {\n   *   data: getData(),\n   *   filters: true\n   * });\n   *\n   * // access to filters plugin instance\n   * const filtersPlugin = hot.getPlugin('filters');\n   *\n   * // add filter \"Greater than\" 95 to column at index 1\n   * filtersPlugin.addCondition(1, 'gt', [95]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"By value\" to column at index 1\n   * // in this case all value's that don't match will be filtered.\n   * filtersPlugin.addCondition(1, 'by_value', [['ing', 'ed', 'as', 'on']]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" AND \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'conjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'conjunction');\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" OR \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'disjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'disjunction');\n   * filtersPlugin.filter();\n   * ```\n   * :::\n   *\n   * ::: only-for react\n   * ```jsx\n   * const hotRef = useRef(null);\n   *\n   * ...\n   *\n   * <HotTable\n   *   ref={hotRef}\n   *   data={getData()}\n   *   filters={true}\n   * />\n   *\n   * // access to filters plugin instance\n   * const hot = hotRef.current.hotInstance;\n   * const filtersPlugin = hot.getPlugin('filters');\n   *\n   * // add filter \"Greater than\" 95 to column at index 1\n   * filtersPlugin.addCondition(1, 'gt', [95]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"By value\" to column at index 1\n   * // in this case all value's that don't match will be filtered.\n   * filtersPlugin.addCondition(1, 'by_value', [['ing', 'ed', 'as', 'on']]);\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" AND \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'conjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'conjunction');\n   * filtersPlugin.filter();\n   *\n   * // add filter \"Begins with\" with value \"de\" OR \"Not contains\" with value \"ing\"\n   * filtersPlugin.addCondition(1, 'begins_with', ['de'], 'disjunction');\n   * filtersPlugin.addCondition(1, 'not_contains', ['ing'], 'disjunction');\n   * filtersPlugin.filter();\n   * ```\n   * :::\n   *\n   * @param {number} column Visual column index.\n   * @param {string} name Condition short name.\n   * @param {Array} args Condition arguments.\n   * @param {string} [operationId=conjunction] `id` of operation which is performed on the column.\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  addCondition(column, name, args, operationId = OPERATION_AND) {\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.conditionCollection.addCondition(physicalColumn, { command: { key: name }, args }, operationId);\n  }\n\n  /**\n   * Removes conditions at specified column index.\n   *\n   * @param {number} column Visual column index.\n   */\n  removeConditions(column) {\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.conditionCollection.removeConditions(physicalColumn);\n  }\n\n  /**\n   * Clears all conditions previously added to the collection for the specified column index or, if the column index\n   * was not passed, clear the conditions for all columns.\n   *\n   * @param {number} [column] Visual column index.\n   */\n  clearConditions(column) {\n    if (column === undefined) {\n      this.conditionCollection.clean();\n\n    } else {\n      const physicalColumn = this.hot.toPhysicalColumn(column);\n\n      this.conditionCollection.removeConditions(physicalColumn);\n    }\n  }\n\n  /**\n   * Filters data based on added filter conditions.\n   *\n   * @fires Hooks#beforeFilter\n   * @fires Hooks#afterFilter\n   */\n  filter() {\n    const { navigableHeaders } = this.hot.getSettings();\n    const dataFilter = this._createDataFilter();\n    const needToFilter = !this.conditionCollection.isEmpty();\n    let visibleVisualRows = [];\n\n    const conditions = this.conditionCollection.exportAllConditions();\n    const allowFiltering = this.hot.runHooks(\n      'beforeFilter',\n      conditions,\n      this.conditionCollection.previousConditionStack\n    );\n\n    if (allowFiltering !== false) {\n      if (needToFilter) {\n        const trimmedRows = [];\n\n        this.hot.batchExecution(() => {\n          this.filtersRowsMap.clear();\n\n          visibleVisualRows = arrayMap(dataFilter.filter(), rowData => rowData.meta.visualRow);\n\n          const visibleVisualRowsAssertion = createArrayAssertion(visibleVisualRows);\n\n          rangeEach(this.hot.countSourceRows() - 1, (row) => {\n            if (!visibleVisualRowsAssertion(row)) {\n              trimmedRows.push(row);\n            }\n          });\n\n          arrayEach(trimmedRows, (physicalRow) => {\n            this.filtersRowsMap.setValueAtIndex(physicalRow, true);\n          });\n        }, true);\n\n        if (!navigableHeaders && !visibleVisualRows.length) {\n          this.hot.deselectCell();\n        }\n      } else {\n        this.filtersRowsMap.clear();\n      }\n    }\n\n    this.hot.runHooks('afterFilter', conditions);\n\n    this.conditionCollection.setPreviousConditionStack(null);\n\n    this.hot.view.adjustElementsSize();\n    this.hot.render();\n\n    if (this.hot.selection.isSelected()) {\n      this.hot.selectCell(\n        navigableHeaders ? -1 : 0,\n        this.hot.getSelectedRangeLast().highlight.col,\n      );\n    }\n  }\n\n  /**\n   * Gets last selected column index.\n   *\n   * @returns {{visualIndex: number, physicalIndex: number} | null} Returns `null` when a column is\n   * not selected. Otherwise, returns an object with `visualIndex` and `physicalIndex` properties containing\n   * the index of the column.\n   */\n  getSelectedColumn() {\n    const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n    if (!highlight) {\n      return null;\n    }\n\n    return {\n      visualIndex: highlight.col,\n      physicalIndex: this.hot.toPhysicalColumn(highlight.col),\n    };\n  }\n\n  /**\n   * Returns handsontable source data with cell meta based on current selection.\n   *\n   * @param {number} [column] The physical column index. By default column index accept the value of the selected column.\n   * @returns {Array} Returns array of objects where keys as row index.\n   */\n  getDataMapAtColumn(column) {\n    const visualColumn = this.hot.toVisualColumn(column);\n    const data = [];\n\n    arrayEach(this.hot.getSourceDataAtCol(visualColumn), (value, rowIndex) => {\n      const { row, col, visualCol, visualRow, type, instance, dateFormat, locale } =\n        this.hot.getCellMeta(rowIndex, visualColumn);\n      const dataValue = this.hot.getDataAtCell(this.hot.toVisualRow(rowIndex), visualColumn) ?? value;\n\n      data.push({\n        meta: { row, col, visualCol, visualRow, type, instance, dateFormat, locale },\n        value: toEmptyString(dataValue),\n      });\n    });\n\n    return data;\n  }\n\n  /**\n   * `afterChange` listener.\n   *\n   * @param {Array} changes Array of changes.\n   */\n  #onAfterChange(changes) {\n    if (changes) {\n      arrayEach(changes, (change) => {\n        const [, prop] = change;\n        const columnIndex = this.hot.propToCol(prop);\n\n        if (this.conditionCollection.hasConditions(columnIndex)) {\n          this.updateValueComponentCondition(columnIndex);\n        }\n      });\n    }\n  }\n\n  /**\n   * Update the condition of ValueComponent, based on the handled changes.\n   *\n   * @private\n   * @param {number} columnIndex Column index of handled ValueComponent condition.\n   */\n  updateValueComponentCondition(columnIndex) {\n    const dataAtCol = this.hot.getDataAtCol(columnIndex);\n    const selectedValues = unifyColumnValues(dataAtCol);\n\n    this.conditionUpdateObserver.updateStatesAtColumn(columnIndex, selectedValues);\n  }\n\n  /**\n   * Restores components to its saved state.\n   *\n   * @private\n   * @param {Array} components List of components.\n   */\n  restoreComponents(components) {\n    const physicalIndex = this.getSelectedColumn()?.physicalIndex;\n\n    components.forEach((component) => {\n      if (component.isHidden()) {\n        return;\n      }\n\n      component.restoreState(physicalIndex);\n    });\n\n    this.updateDependentComponentsVisibility();\n  }\n\n  /**\n   * After dropdown menu show listener.\n   */\n  #onAfterDropdownMenuShow() {\n    const menu = this.dropdownMenuPlugin.menu;\n\n    this.restoreComponents(Array.from(this.components.values()));\n\n    menu.updateMenuDimensions();\n  }\n\n  /**\n   * After dropdown menu hide listener.\n   */\n  #onAfterDropdownMenuHide() {\n    this.components.get('filter_by_condition').getSelectElement().closeOptions();\n    this.components.get('filter_by_condition2').getSelectElement().closeOptions();\n  }\n\n  /**\n   * After dropdown menu default options listener.\n   *\n   * @param {object} defaultOptions ContextMenu default item options.\n   */\n  #onAfterDropdownMenuDefaultOptions(defaultOptions) {\n    defaultOptions.items.push({ name: SEPARATOR });\n\n    this.components.forEach((component) => {\n      defaultOptions.items.push(component.getMenuItemDescriptor());\n    });\n  }\n\n  /**\n   * Get an operation, based on the number and types of arguments (where arguments are states of components).\n   *\n   * @param {string} suggestedOperation Operation which was chosen by user from UI.\n   * @param {object} byConditionState1 State of first condition component.\n   * @param {object} byConditionState2 State of second condition component.\n   * @param {object} byValueState State of value component.\n   * @private\n   * @returns {string}\n   */\n  getOperationBasedOnArguments(suggestedOperation, byConditionState1, byConditionState2, byValueState) {\n    let operation = suggestedOperation;\n\n    if (operation === OPERATION_OR && byConditionState1.command.key !== CONDITION_NONE &&\n      byConditionState2.command.key !== CONDITION_NONE && byValueState.command.key !== CONDITION_NONE) {\n      operation = OPERATION_OR_THEN_VARIABLE;\n\n    } else if (byValueState.command.key !== CONDITION_NONE) {\n      if (byConditionState1.command.key === CONDITION_NONE || byConditionState2.command.key === CONDITION_NONE) {\n        operation = OPERATION_AND;\n      }\n    }\n\n    return operation;\n  }\n\n  /**\n   * On action bar submit listener.\n   *\n   * @private\n   * @param {string} submitType The submit type.\n   */\n  #onActionBarSubmit(submitType) {\n    if (submitType === 'accept') {\n      const selectedColumn = this.getSelectedColumn();\n\n      if (selectedColumn === null) {\n        this.dropdownMenuPlugin?.close();\n\n        return;\n      }\n\n      const { physicalIndex } = selectedColumn;\n      const byConditionState1 = this.components.get('filter_by_condition').getState();\n      const byConditionState2 = this.components.get('filter_by_condition2').getState();\n      const byValueState = this.components.get('filter_by_value').getState();\n\n      const operation = this.getOperationBasedOnArguments(\n        this.components.get('filter_operators').getActiveOperationId(),\n        byConditionState1,\n        byConditionState2,\n        byValueState\n      );\n\n      this.conditionUpdateObserver.groupChanges();\n\n      let columnStackPosition = this.conditionCollection.getColumnStackPosition(physicalIndex);\n\n      if (columnStackPosition === -1) {\n        columnStackPosition = undefined;\n      }\n\n      this.conditionCollection.removeConditions(physicalIndex);\n\n      if (byConditionState1.command.key !== CONDITION_NONE) {\n        this.conditionCollection.addCondition(physicalIndex, byConditionState1, operation, columnStackPosition);\n\n        if (byConditionState2.command.key !== CONDITION_NONE) {\n          this.conditionCollection.addCondition(physicalIndex, byConditionState2, operation, columnStackPosition);\n        }\n      }\n\n      if (byValueState.command.key !== CONDITION_NONE) {\n        this.conditionCollection.addCondition(physicalIndex, byValueState, operation, columnStackPosition);\n      }\n\n      this.conditionUpdateObserver.flush();\n      this.components.forEach(component => component.saveState(physicalIndex));\n      this.filtersRowsMap.clear();\n      this.filter();\n    }\n\n    this.dropdownMenuPlugin?.close();\n  }\n\n  /**\n   * On component change listener.\n   *\n   * @param {BaseComponent} component Component inheriting BaseComponent.\n   * @param {object} command Menu item object (command).\n   */\n  #onComponentChange(component, command) {\n    this.updateDependentComponentsVisibility();\n\n    if (component.constructor === ConditionComponent && !command.inputsCount) {\n      this.setListeningDropdownMenu();\n    }\n  }\n\n  /**\n   * On component SelectUI closed listener.\n   */\n  #onSelectUIClosed() {\n    this.setListeningDropdownMenu();\n  }\n\n  /**\n   * Listen to the keyboard input on document body and forward events to instance of Handsontable\n   * created by DropdownMenu plugin.\n   *\n   * @private\n   */\n  setListeningDropdownMenu() {\n    if (this.dropdownMenuPlugin) {\n      this.dropdownMenuPlugin.setListening();\n    }\n  }\n\n  /**\n   * Updates visibility of some of the components, based on the state of the parent component.\n   *\n   * @private\n   */\n  updateDependentComponentsVisibility() {\n    const component = this.components.get('filter_by_condition');\n    const { command } = component.getState();\n    const componentsToShow = [\n      this.components.get('filter_by_condition2'),\n      this.components.get('filter_operators')\n    ];\n\n    if (command.showOperators) {\n      this.showComponents(...componentsToShow);\n    } else {\n      this.hideComponents(...componentsToShow);\n    }\n  }\n\n  /**\n   * On after get column header listener.\n   *\n   * @param {number} col Visual column index.\n   * @param {HTMLTableCellElement} TH Header's TH element.\n   */\n  #onAfterGetColHeader(col, TH) {\n    const physicalColumn = this.hot.toPhysicalColumn(col);\n\n    if (this.enabled && this.conditionCollection.hasConditions(physicalColumn)) {\n      addClass(TH, 'htFiltersActive');\n    } else {\n      removeClass(TH, 'htFiltersActive');\n    }\n  }\n\n  /**\n   * Creates DataFilter instance based on condition collection.\n   *\n   * @private\n   * @param {ConditionCollection} conditionCollection Condition collection object.\n   * @returns {DataFilter}\n   */\n  _createDataFilter(conditionCollection = this.conditionCollection) {\n    return new DataFilter(conditionCollection, physicalColumn => this.getDataMapAtColumn(physicalColumn));\n  }\n\n  /**\n   * It updates the components state. The state is triggered by ConditionUpdateObserver, which\n   * reacts to any condition added to the condition collection. It may be added through the UI\n   * components or by API call.\n   *\n   * @param {object} conditionsState An object with the state generated by UI components.\n   */\n  #updateComponents(conditionsState) {\n    if (!this.dropdownMenuPlugin?.enabled) {\n      return;\n    }\n\n    const {\n      editedConditionStack: {\n        conditions,\n        column,\n      }\n    } = conditionsState;\n\n    const conditionsByValue = conditions.filter(condition => condition.name === CONDITION_BY_VALUE);\n    const conditionsWithoutByValue = conditions.filter(condition => condition.name !== CONDITION_BY_VALUE);\n\n    if (conditionsByValue.length >= 2 || conditionsWithoutByValue.length >= 3) {\n      warn(toSingleLine`The filter conditions have been applied properly, but couldn’t be displayed visually.\\x20\n        The overall amount of conditions exceed the capability of the dropdown menu.\\x20\n        For more details see the documentation.`);\n\n    } else {\n      const operationType = this.conditionCollection.getOperation(column);\n\n      this.components.get('filter_by_condition').updateState(conditionsWithoutByValue[0], column);\n      this.components.get('filter_by_condition2').updateState(conditionsWithoutByValue[1], column);\n      this.components.get('filter_operators').updateState(operationType, column);\n      this.components.get('filter_by_value').updateState(conditionsState);\n    }\n  }\n\n  /**\n   * Returns indexes of passed components inside list of `dropdownMenu` items.\n   *\n   * @private\n   * @param {...BaseComponent} components List of components.\n   * @returns {Array}\n   */\n  getIndexesOfComponents(...components) {\n    const indexes = [];\n\n    if (!this.dropdownMenuPlugin) {\n      return indexes;\n    }\n\n    const menu = this.dropdownMenuPlugin.menu;\n\n    arrayEach(components, (component) => {\n      arrayEach(menu.menuItems, (item, index) => {\n        if (item.key === component.getMenuItemDescriptor().key) {\n\n          indexes.push(index);\n        }\n      });\n    });\n\n    return indexes;\n  }\n\n  /**\n   * Changes visibility of component.\n   *\n   * @private\n   * @param {boolean} visible Determine if components should be visible.\n   * @param {...BaseComponent} components List of components.\n   */\n  changeComponentsVisibility(visible = true, ...components) {\n    if (!this.dropdownMenuPlugin) {\n      return;\n    }\n\n    const menu = this.dropdownMenuPlugin.menu;\n    const hotMenu = menu.hotMenu;\n    const hiddenRows = hotMenu.getPlugin('hiddenRows');\n    const indexes = this.getIndexesOfComponents(...components);\n\n    if (visible) {\n      hiddenRows.showRows(indexes);\n\n    } else {\n      hiddenRows.hideRows(indexes);\n    }\n\n    hotMenu.render();\n  }\n\n  /**\n   * Hides components of filters `dropdownMenu`.\n   *\n   * @private\n   * @param {...BaseComponent} components List of components.\n   */\n  hideComponents(...components) {\n    this.changeComponentsVisibility(false, ...components);\n  }\n\n  /**\n   * Shows components of filters `dropdownMenu`.\n   *\n   * @private\n   * @param {...BaseComponent} components List of components.\n   */\n  showComponents(...components) {\n    this.changeComponentsVisibility(true, ...components);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    if (this.enabled) {\n      this.components.forEach((component, key) => {\n        if (component !== null) {\n          component.destroy();\n          this.components.set(key, null);\n        }\n      });\n      this.conditionCollection.destroy();\n      this.conditionUpdateObserver.destroy();\n      this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    }\n\n    super.destroy();\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { arrayEach } from '../../../helpers/array';\nimport { isKey } from '../../../helpers/unicode';\nimport { clone } from '../../../helpers/object';\nimport * as C from '../../../i18n/constants';\nimport { BaseComponent } from './_base';\nimport getOptionsList, { CONDITION_NONE } from '../constants';\nimport { InputUI } from '../ui/input';\nimport { SelectUI } from '../ui/select';\nimport { getConditionDescriptor } from '../conditionRegisterer';\n\n/**\n * @private\n * @class ConditionComponent\n */\nexport class ConditionComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n  /**\n   * @type {boolean}\n   */\n  addSeparator = false;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: false,\n    });\n\n    this.name = options.name;\n    this.addSeparator = options.addSeparator;\n\n    this.elements.push(new SelectUI(this.hot, { menuContainer: options.menuContainer }));\n    this.elements.push(new InputUI(this.hot, { placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_VALUE }));\n    this.elements.push(new InputUI(this.hot, { placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE }));\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n  registerHooks() {\n    this.getSelectElement()\n      .addLocalHook('select', command => this.#onConditionSelect(command))\n      .addLocalHook('afterClose', () => this.runLocalHooks('afterClose'))\n      .addLocalHook('tabKeydown', event => this.runLocalHooks('selectTabKeydown', event));\n\n    arrayEach(this.getInputElements(), (input) => {\n      input.addLocalHook('keydown', event => this.#onInputKeyDown(event));\n    });\n  }\n\n  /**\n   * Set state of the component.\n   *\n   * @param {object} value State to restore.\n   */\n  setState(value) {\n    this.reset();\n\n    if (!value) {\n      return;\n    }\n\n    const copyOfCommand = clone(value.command);\n\n    if (copyOfCommand.name.startsWith(C.FILTERS_CONDITIONS_NAMESPACE)) {\n      copyOfCommand.name = this.hot.getTranslatedPhrase(copyOfCommand.name);\n    }\n\n    this.getSelectElement().setValue(copyOfCommand);\n    arrayEach(value.args, (arg, index) => {\n      if (index > copyOfCommand.inputsCount - 1) {\n        return false;\n      }\n\n      const element = this.getInputElement(index);\n\n      element.setValue(arg);\n      element[copyOfCommand.inputsCount > index ? 'show' : 'hide']();\n\n      if (!index) {\n        this.hot._registerTimeout(() => element.focus(), 10);\n      }\n    });\n  }\n\n  /**\n   * Export state of the component (get selected filter and filter arguments).\n   *\n   * @returns {object} Returns object where `command` key keeps used condition filter and `args` key its arguments.\n   */\n  getState() {\n    const command = this.getSelectElement().getValue() || getConditionDescriptor(CONDITION_NONE);\n    const args = [];\n\n    arrayEach(this.getInputElements(), (element, index) => {\n      if (command.inputsCount > index) {\n        args.push(element.getValue());\n      }\n    });\n\n    return {\n      command,\n      args,\n    };\n  }\n\n  /**\n   * Update state of component.\n   *\n   * @param {object} condition The condition object.\n   * @param {object} condition.command The command object with condition name as `key` property.\n   * @param {Array} condition.args An array of values to compare.\n   * @param {number} column Physical column index.\n   */\n  updateState(condition, column) {\n    const command = condition ? getConditionDescriptor(condition.name) : getConditionDescriptor(CONDITION_NONE);\n\n    this.state.setValueAtIndex(column, {\n      command,\n      args: condition ? condition.args : [],\n    });\n\n    if (!condition) {\n      arrayEach(this.getInputElements(), element => element.setValue(null));\n    }\n  }\n\n  /**\n   * Get select element.\n   *\n   * @returns {SelectUI}\n   */\n  getSelectElement() {\n    return this.elements.filter(element => element instanceof SelectUI)[0];\n  }\n\n  /**\n   * Get input element.\n   *\n   * @param {number} index Index an array of elements.\n   * @returns {InputUI}\n   */\n  getInputElement(index = 0) {\n    return this.getInputElements()[index];\n  }\n\n  /**\n   * Get input elements.\n   *\n   * @returns {Array}\n   */\n  getInputElements() {\n    return this.elements.filter(element => element instanceof InputUI);\n  }\n\n  /**\n   * Get menu object descriptor.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper, row, col, prop, value) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuCondition');\n\n        if (this.addSeparator) {\n          addClass(wrapper.parentNode, 'border');\n        }\n\n        const label = this.hot.rootDocument.createElement('div');\n\n        addClass(label, 'htFiltersMenuLabel');\n\n        label.textContent = value;\n\n        wrapper.appendChild(label);\n\n        // The SelectUI should not extend the menu width (it should adjust to the menu item width only).\n        // That's why it's skipped from rendering when the GhostTable tries to render it.\n        if (!wrapper.parentElement.hasAttribute('ghost-table')) {\n          arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n        }\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Reset elements to their initial state.\n   */\n  reset() {\n    const selectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n    let items = [getConditionDescriptor(CONDITION_NONE)];\n\n    if (selectedColumn !== null) {\n      const { visualIndex } = selectedColumn;\n\n      items = getOptionsList(this.hot.getDataType(0, visualIndex, this.hot.countRows(), visualIndex));\n    }\n\n    arrayEach(this.getInputElements(), element => element.hide());\n    this.getSelectElement().setItems(items);\n    super.reset();\n    // Select element as default 'None'\n    this.getSelectElement().setValue(items[0]);\n  }\n\n  /**\n   * On condition select listener.\n   *\n   * @param {object} command Menu item object (command).\n   */\n  #onConditionSelect(command) {\n    arrayEach(this.getInputElements(), (element, index) => {\n      element[command.inputsCount > index ? 'show' : 'hide']();\n\n      if (index === 0) {\n        this.hot._registerTimeout(() => element.focus(), 10);\n      }\n    });\n\n    this.runLocalHooks('change', command);\n  }\n\n  /**\n   * Key down listener.\n   *\n   * @param {Event} event The DOM event object.\n   */\n  #onInputKeyDown(event) {\n    if (isKey(event.keyCode, 'ESCAPE')) {\n      this.runLocalHooks('cancel');\n      stopImmediatePropagation(event);\n    }\n  }\n}\n","import { arrayEach } from '../../../helpers/array';\nimport { mixin } from '../../../helpers/object';\nimport localHooks from '../../../mixins/localHooks';\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from '../../../translations';\n\n/**\n * @private\n * @class BaseComponent\n */\nexport class BaseComponent {\n  /**\n   * The Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * The component uniq id.\n   *\n   * @type {string}\n   */\n  id;\n  /**\n   * List of registered component UI elements.\n   *\n   * @type {Array}\n   */\n  elements = [];\n  /**\n   * Flag which determines if element is hidden.\n   *\n   * @type {boolean}\n   */\n  hidden = false;\n  /**\n   * The component states id.\n   *\n   * @type {string}\n   */\n  stateId = '';\n  /**\n   * Index map which stores component states for each column.\n   *\n   * @type {LinkedPhysicalIndexToValueMap|null}\n   */\n  state;\n\n  constructor(hotInstance, { id, stateless = true }) {\n    this.hot = hotInstance;\n    this.id = id;\n    this.stateId = `Filters.component.${this.id}`;\n    this.state = stateless ? null : this.hot.columnIndexMapper.registerMap(this.stateId, new IndexToValueMap());\n  }\n\n  /**\n   * Gets the list of elements from which the component is built.\n   *\n   * @returns {BaseUI[]}\n   */\n  getElements() {\n    return this.elements;\n  }\n\n  /**\n   * Reset elements to its initial state.\n   */\n  reset() {\n    arrayEach(this.elements, ui => ui.reset());\n  }\n\n  /**\n   * Hide component.\n   */\n  hide() {\n    this.hidden = true;\n  }\n\n  /**\n   * Show component.\n   */\n  show() {\n    this.hidden = false;\n  }\n\n  /**\n   * Check if component is hidden.\n   *\n   * @returns {boolean}\n   */\n  isHidden() {\n    return this.hot === null || this.hidden;\n  }\n\n  /**\n   * Restores the component state from the given physical column index. The method\n   * internally calls the `setState` method. The state then is individually processed\n   * by each component.\n   *\n   * @param {number} physicalColumn The physical column index.\n   */\n  restoreState(physicalColumn) {\n    if (this.state) {\n      this.setState(this.state.getValueAtIndex(physicalColumn));\n    }\n  }\n\n  /**\n   * The custom logic for component state restoring.\n   */\n  setState() {\n    throw new Error('The state setting logic is not implemented');\n  }\n\n  /**\n   * Saves the component state to the given physical column index. The method\n   * internally calls the `getState` method, which returns the current state of\n   * the component.\n   *\n   * @param {number} physicalColumn The physical column index.\n   */\n  saveState(physicalColumn) {\n    if (this.state) {\n      this.state.setValueAtIndex(physicalColumn, this.getState());\n    }\n  }\n\n  /**\n   * The custom logic for component state gathering (for stateful components).\n   */\n  getState() {\n    throw new Error('The state gathering logic is not implemented');\n  }\n\n  /**\n   * Destroy element.\n   */\n  destroy() {\n    this.hot.columnIndexMapper.unregisterMap(this.stateId);\n    this.clearLocalHooks();\n    arrayEach(this.elements, ui => ui.destroy());\n    this.state = null;\n    this.elements = null;\n    this.hot = null;\n  }\n}\n\nmixin(BaseComponent, localHooks);\n","import { clone } from '../../helpers/object';\nimport { arrayEach } from '../../helpers/array';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport { getConditionDescriptor } from './conditionRegisterer';\n\nimport { CONDITION_NAME as CONDITION_NONE } from './condition/none';\nimport { CONDITION_NAME as CONDITION_EMPTY } from './condition/empty';\nimport { CONDITION_NAME as CONDITION_NOT_EMPTY } from './condition/notEmpty';\nimport { CONDITION_NAME as CONDITION_EQUAL } from './condition/equal';\nimport { CONDITION_NAME as CONDITION_NOT_EQUAL } from './condition/notEqual';\nimport { CONDITION_NAME as CONDITION_GREATER_THAN } from './condition/greaterThan';\nimport { CONDITION_NAME as CONDITION_GREATER_THAN_OR_EQUAL } from './condition/greaterThanOrEqual';\nimport { CONDITION_NAME as CONDITION_LESS_THAN } from './condition/lessThan';\nimport { CONDITION_NAME as CONDITION_LESS_THAN_OR_EQUAL } from './condition/lessThanOrEqual';\nimport { CONDITION_NAME as CONDITION_BETWEEN } from './condition/between';\nimport { CONDITION_NAME as CONDITION_NOT_BETWEEN } from './condition/notBetween';\nimport { CONDITION_NAME as CONDITION_BEGINS_WITH } from './condition/beginsWith';\nimport { CONDITION_NAME as CONDITION_ENDS_WITH } from './condition/endsWith';\nimport { CONDITION_NAME as CONDITION_CONTAINS } from './condition/contains';\nimport { CONDITION_NAME as CONDITION_NOT_CONTAINS } from './condition/notContains';\nimport { CONDITION_NAME as CONDITION_DATE_BEFORE } from './condition/date/before';\nimport { CONDITION_NAME as CONDITION_DATE_AFTER } from './condition/date/after';\nimport { CONDITION_NAME as CONDITION_TOMORROW } from './condition/date/tomorrow';\nimport { CONDITION_NAME as CONDITION_TODAY } from './condition/date/today';\nimport { CONDITION_NAME as CONDITION_YESTERDAY } from './condition/date/yesterday';\nimport { CONDITION_NAME as CONDITION_BY_VALUE } from './condition/byValue';\nimport { CONDITION_NAME as CONDITION_TRUE } from './condition/true';\nimport { CONDITION_NAME as CONDITION_FALSE } from './condition/false';\n\nimport { OPERATION_ID as OPERATION_AND } from './logicalOperations/conjunction';\nimport { OPERATION_ID as OPERATION_OR } from './logicalOperations/disjunction';\nimport { OPERATION_ID as OPERATION_OR_THEN_VARIABLE } from './logicalOperations/disjunctionWithExtraCondition';\n\nexport {\n  CONDITION_NONE,\n  CONDITION_EMPTY,\n  CONDITION_NOT_EMPTY,\n  CONDITION_EQUAL,\n  CONDITION_NOT_EQUAL,\n  CONDITION_GREATER_THAN,\n  CONDITION_GREATER_THAN_OR_EQUAL,\n  CONDITION_LESS_THAN,\n  CONDITION_LESS_THAN_OR_EQUAL,\n  CONDITION_BETWEEN,\n  CONDITION_NOT_BETWEEN,\n  CONDITION_BEGINS_WITH,\n  CONDITION_ENDS_WITH,\n  CONDITION_CONTAINS,\n  CONDITION_NOT_CONTAINS,\n  CONDITION_DATE_BEFORE,\n  CONDITION_DATE_AFTER,\n  CONDITION_TOMORROW,\n  CONDITION_TODAY,\n  CONDITION_YESTERDAY,\n  CONDITION_BY_VALUE,\n  CONDITION_TRUE,\n  CONDITION_FALSE,\n  OPERATION_AND,\n  OPERATION_OR,\n  OPERATION_OR_THEN_VARIABLE\n};\n\nexport const TYPE_NUMERIC = 'numeric';\nexport const TYPE_TEXT = 'text';\nexport const TYPE_DATE = 'date';\n/**\n * Default types and order for filter conditions.\n *\n * @type {object}\n */\nexport const TYPES = {\n  [TYPE_NUMERIC]: [\n    CONDITION_NONE,\n    SEPARATOR,\n    CONDITION_EMPTY,\n    CONDITION_NOT_EMPTY,\n    SEPARATOR,\n    CONDITION_EQUAL,\n    CONDITION_NOT_EQUAL,\n    SEPARATOR,\n    CONDITION_GREATER_THAN,\n    CONDITION_GREATER_THAN_OR_EQUAL,\n    CONDITION_LESS_THAN,\n    CONDITION_LESS_THAN_OR_EQUAL,\n    CONDITION_BETWEEN,\n    CONDITION_NOT_BETWEEN,\n  ],\n  [TYPE_TEXT]: [\n    CONDITION_NONE,\n    SEPARATOR,\n    CONDITION_EMPTY,\n    CONDITION_NOT_EMPTY,\n    SEPARATOR,\n    CONDITION_EQUAL,\n    CONDITION_NOT_EQUAL,\n    SEPARATOR,\n    CONDITION_BEGINS_WITH,\n    CONDITION_ENDS_WITH,\n    SEPARATOR,\n    CONDITION_CONTAINS,\n    CONDITION_NOT_CONTAINS,\n  ],\n  [TYPE_DATE]: [\n    CONDITION_NONE,\n    SEPARATOR,\n    CONDITION_EMPTY,\n    CONDITION_NOT_EMPTY,\n    SEPARATOR,\n    CONDITION_EQUAL,\n    CONDITION_NOT_EQUAL,\n    SEPARATOR,\n    CONDITION_DATE_BEFORE,\n    CONDITION_DATE_AFTER,\n    CONDITION_BETWEEN,\n    SEPARATOR,\n    CONDITION_TOMORROW,\n    CONDITION_TODAY,\n    CONDITION_YESTERDAY,\n  ],\n};\n\n/**\n * Get options list for conditional filter by data type (e.q: `'text'`, `'numeric'`, `'date'`).\n *\n * @private\n * @param {string} type The data type.\n * @returns {object}\n */\nexport default function getOptionsList(type) {\n  const items = [];\n  let typeName = type;\n\n  if (!TYPES[typeName]) {\n    typeName = TYPE_TEXT;\n  }\n\n  arrayEach(TYPES[typeName], (typeValue) => {\n    let option;\n\n    if (typeValue === SEPARATOR) {\n      option = { name: SEPARATOR };\n\n    } else {\n      option = clone(getConditionDescriptor(typeValue));\n    }\n    items.push(option);\n  });\n\n  return items;\n}\n","export const conditions = {};\n\n/**\n * Get condition closure with pre-bound arguments.\n *\n * @param {string} name Condition name.\n * @param {Array} args Condition arguments.\n * @returns {Function}\n */\nexport function getCondition(name, args) {\n  if (!conditions[name]) {\n    throw Error(`Filter condition \"${name}\" does not exist.`);\n  }\n  const { condition, descriptor } = conditions[name];\n  let conditionArguments = args;\n\n  if (descriptor.inputValuesDecorator) {\n    conditionArguments = descriptor.inputValuesDecorator(conditionArguments);\n  }\n\n  return function(dataRow) {\n    return condition.apply(dataRow.meta.instance, [].concat([dataRow], [conditionArguments]));\n  };\n}\n\n/**\n * Get condition object descriptor which defines some additional informations about this condition.\n *\n * @param {string} name Condition name.\n * @returns {object}\n */\nexport function getConditionDescriptor(name) {\n  if (!conditions[name]) {\n    throw Error(`Filter condition \"${name}\" does not exist.`);\n  }\n\n  return conditions[name].descriptor;\n}\n\n/**\n * Condition registerer.\n *\n * @param {string} name Condition name.\n * @param {Function} condition Condition function.\n * @param {object} descriptor Condition descriptor.\n */\nexport function registerCondition(name, condition, descriptor) {\n  descriptor.key = name;\n  conditions[name] = {\n    condition, descriptor\n  };\n}\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'none';\n\n/**\n * @returns {boolean}\n */\nexport function condition() {\n  return true;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NONE,\n  inputsCount: 0,\n  showOperators: false\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\nimport { isEmpty } from '../../../helpers/mixed';\n\nexport const CONDITION_NAME = 'empty';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  return isEmpty(dataRow.value);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_EMPTY,\n  inputsCount: 0,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_EMPTY } from './empty';\n\nexport const CONDITION_NAME = 'not_empty';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_EMPTY, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_EMPTY,\n  inputsCount: 0,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'eq';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {Array} inputValues.\"0\" Value to check if it same as row's data.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale) === stringify(value);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_EQUAL } from './equal';\n\nexport const CONDITION_NAME = 'neq';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_EQUAL, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'gt';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {any} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value > conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_GREATER_THAN,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'gte';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value >= conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'lt';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value < conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_LESS_THAN,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'lte';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Condition value to compare numbers.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  let conditionValue = value;\n\n  if (dataRow.meta.type === 'numeric') {\n    conditionValue = parseFloat(conditionValue, 10);\n  }\n\n  return dataRow.value <= conditionValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_DATE_AFTER } from './date/after';\nimport { CONDITION_NAME as CONDITION_DATE_BEFORE } from './date/before';\n\nexport const CONDITION_NAME = 'between';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {number} inputValues.\"0\" The minimum value of the range.\n * @param {number} inputValues.\"1\" The maximum value of the range.\n * @returns {boolean}\n */\nexport function condition(dataRow, [from, to]) {\n  let fromValue = from;\n  let toValue = to;\n\n  if (dataRow.meta.type === 'numeric') {\n    const _from = parseFloat(fromValue, 10);\n    const _to = parseFloat(toValue, 10);\n\n    fromValue = Math.min(_from, _to);\n    toValue = Math.max(_from, _to);\n\n  } else if (dataRow.meta.type === 'date') {\n    const dateBefore = getCondition(CONDITION_DATE_BEFORE, [toValue]);\n    const dateAfter = getCondition(CONDITION_DATE_AFTER, [fromValue]);\n\n    return dateBefore(dataRow) && dateAfter(dataRow);\n  }\n\n  return dataRow.value >= fromValue && dataRow.value <= toValue;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BETWEEN,\n  inputsCount: 2,\n  showOperators: true\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_after';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Minimum date of a range.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n  const inputDate = moment(value, dataRow.meta.dateFormat);\n\n  if (!date.isValid() || !inputDate.isValid()) {\n    return false;\n  }\n\n  return date.diff(inputDate) >= 0;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_AFTER,\n  inputsCount: 1,\n  showOperators: true\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_before';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Maximum date of a range.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n  const inputDate = moment(value, dataRow.meta.dateFormat);\n\n  if (!date.isValid() || !inputDate.isValid()) {\n    return false;\n  }\n\n  return date.diff(inputDate) <= 0;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BEFORE,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_BETWEEN } from './between';\n\nexport const CONDITION_NAME = 'not_between';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_BETWEEN, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_BETWEEN,\n  inputsCount: 2,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'begins_with';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Value to check if it occurs at the beginning.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).startsWith(stringify(value));\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_BEGINS_WITH,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'ends_with';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" Value to check if it occurs at the end.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).endsWith(stringify(value));\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_ENDS_WITH,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { stringify } from '../../../helpers/mixed';\nimport { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'contains';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {*} inputValues.\"0\" A value to check if it occurs in the row's data.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return stringify(dataRow.value).toLocaleLowerCase(dataRow.meta.locale).indexOf(stringify(value)) >= 0;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_CONTAINS,\n  inputsCount: 1,\n  showOperators: true\n});\n","import * as C from '../../../i18n/constants';\nimport { registerCondition, getCondition } from '../conditionRegisterer';\nimport { CONDITION_NAME as CONDITION_CONTAINS } from './contains';\n\nexport const CONDITION_NAME = 'not_contains';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @returns {boolean}\n */\nexport function condition(dataRow, inputValues) {\n  return !getCondition(CONDITION_CONTAINS, inputValues)(dataRow);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_NOT_CONTAIN,\n  inputsCount: 1,\n  showOperators: true\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_tomorrow';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().subtract(-1, 'days').startOf('day'), 'd');\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_TOMORROW,\n  inputsCount: 0\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_today';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().startOf('day'), 'd');\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_TODAY,\n  inputsCount: 0\n});\n","import moment from 'moment';\nimport * as C from '../../../../i18n/constants';\nimport { registerCondition } from '../../conditionRegisterer';\n\nexport const CONDITION_NAME = 'date_yesterday';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @returns {boolean}\n */\nexport function condition(dataRow) {\n  const date = moment(dataRow.value, dataRow.meta.dateFormat);\n\n  if (!date.isValid()) {\n    return false;\n  }\n\n  return date.isSame(moment().subtract(1, 'days').startOf('day'), 'd');\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: C.FILTERS_CONDITIONS_YESTERDAY,\n  inputsCount: 0\n});\n","import { registerCondition } from '../conditionRegisterer';\nimport { createArrayAssertion } from '../utils';\n\nexport const CONDITION_NAME = 'by_value';\n\n/**\n * @param {object} dataRow The object which holds and describes the single cell value.\n * @param {Array} inputValues An array of values to compare with.\n * @param {Function} inputValues.\"0\" A function to compare row's data.\n * @returns {boolean}\n */\nexport function condition(dataRow, [value]) {\n  return value(dataRow.value);\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: 'By value',\n  inputsCount: 0,\n  inputValuesDecorator([data]) {\n    return [createArrayAssertion(data)];\n  },\n  showOperators: false\n});\n","import { getComparisonFunction } from '../../helpers/feature';\nimport { arrayUnique, arrayEach } from '../../helpers/array';\n\nconst sortCompare = getComparisonFunction();\n\n/**\n * Comparison function for sorting purposes.\n *\n * @param {*} a The first value to compare.\n * @param {*} b The second value to compare.\n * @returns {number} Returns number from -1 to 1.\n */\nexport function sortComparison(a, b) {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a - b;\n  }\n\n  return sortCompare(a, b);\n}\n\n/**\n * Convert raw value into visual value.\n *\n * @param {*} value The value to convert.\n * @param {string} defaultEmptyValue Default value for empty cells.\n * @returns {*}\n */\nexport function toVisualValue(value, defaultEmptyValue) {\n  let visualValue = value;\n\n  if (visualValue === '') {\n    visualValue = `(${defaultEmptyValue})`;\n  }\n\n  return visualValue;\n}\n\nconst SUPPORT_SET_CONSTRUCTOR = new Set([1]).has(1);\nconst SUPPORT_FAST_DEDUPE = SUPPORT_SET_CONSTRUCTOR && typeof Array.from === 'function';\n\n/**\n * Create an array assertion to compare if an element exists in that array (in a more efficient way than .indexOf).\n *\n * @param {Array} initialData Values to compare.\n * @returns {Function}\n */\nexport function createArrayAssertion(initialData) {\n  let dataset = initialData;\n\n  if (SUPPORT_SET_CONSTRUCTOR) {\n    dataset = new Set(dataset);\n  }\n\n  return function(value) {\n    let result;\n\n    if (SUPPORT_SET_CONSTRUCTOR) {\n      result = dataset.has(value);\n    } else {\n      /* eslint-disable no-bitwise */\n      result = !!~dataset.indexOf(value);\n    }\n\n    return result;\n  };\n}\n\n/**\n * Convert empty-ish values like null and undefined to an empty string.\n *\n * @param {*} value Value to check.\n * @returns {string}\n */\nexport function toEmptyString(value) {\n  return value === null || value === undefined ? '' : value;\n}\n\n/**\n * Unify column values (remove duplicated values and sort them).\n *\n * @param {Array} values An array of values.\n * @returns {Array}\n */\nexport function unifyColumnValues(values) {\n  let unifiedValues = values;\n\n  if (SUPPORT_FAST_DEDUPE) {\n    unifiedValues = Array.from(new Set(unifiedValues));\n  } else {\n    unifiedValues = arrayUnique(unifiedValues);\n  }\n  unifiedValues = unifiedValues.sort((a, b) => {\n    if (typeof a === 'number' && typeof b === 'number') {\n      return a - b;\n    }\n\n    if (a === b) {\n      return 0;\n    }\n\n    return a > b ? 1 : -1;\n  });\n\n  return unifiedValues;\n}\n\n/**\n * Intersect 'base' values with 'selected' values and return an array of object.\n *\n * @param {Array} base An array of base values.\n * @param {Array} selected An array of selected values.\n * @param {string} defaultEmptyValue Default value for empty cells.\n * @param {Function} [callback] A callback function which is invoked for every item in an array.\n * @returns {Array}\n */\nexport function intersectValues(base, selected, defaultEmptyValue, callback) {\n  const result = [];\n  const same = base === selected;\n  let selectedItemsAssertion;\n\n  if (!same) {\n    selectedItemsAssertion = createArrayAssertion(selected);\n  }\n\n  arrayEach(base, (value) => {\n    let checked = false;\n\n    if (same || selectedItemsAssertion(value)) {\n      checked = true;\n    }\n\n    const item = { checked, value, visualValue: toVisualValue(value, defaultEmptyValue) };\n\n    if (callback) {\n      callback(item);\n    }\n\n    result.push(item);\n  });\n\n  return result;\n}\n","import { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'true';\n\n/**\n * @returns {boolean}\n */\nexport function condition() {\n  return true;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: 'True'\n});\n","import { registerCondition } from '../conditionRegisterer';\n\nexport const CONDITION_NAME = 'false';\n\n/**\n * @returns {boolean}\n */\nexport function condition() {\n  return false;\n}\n\nregisterCondition(CONDITION_NAME, condition, {\n  name: 'False'\n});\n","import * as C from '../../../i18n/constants';\nimport { registerOperation } from '../logicalOperationRegisterer';\n\nexport const OPERATION_ID = 'conjunction';\nexport const SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_CONJUNCTION;\n// p AND q AND w AND x AND... === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\nexport function operationResult(conditions, value) {\n  return conditions.every(condition => condition.func(value));\n}\n\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);\n","export const operations = {};\n\n/**\n * Get operation closure with pre-bound arguments.\n *\n * @param {string} id Operator `id`.\n * @returns {Function}\n */\nexport function getOperationFunc(id) {\n  if (!operations[id]) {\n    throw Error(`Operation with id \"${id}\" does not exist.`);\n  }\n  const func = operations[id].func;\n\n  return function(conditions, value) {\n    return func(conditions, value);\n  };\n}\n\n/**\n * Return name of operation which is displayed inside UI component, basing on it's `id`.\n *\n * @param {string} id `Id` of operation.\n * @returns {string}\n */\nexport function getOperationName(id) {\n  return operations[id].name;\n}\n\n/**\n * Operator registerer.\n *\n * @param {string} id Operation `id`.\n * @param {string} name Operation name which is displayed inside UI component.\n * @param {Function} func Operation function.\n */\nexport function registerOperation(id, name, func) {\n  operations[id] = { name, func };\n}\n","import * as C from '../../../i18n/constants';\nimport { registerOperation } from '../logicalOperationRegisterer';\n\nexport const OPERATION_ID = 'disjunction';\nexport const SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_DISJUNCTION;\n// (p OR q OR w OR x OR...) === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\nexport function operationResult(conditions, value) {\n  return conditions.some(condition => condition.func(value));\n}\n\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);\n","import * as C from '../../../i18n/constants';\nimport { registerOperation } from '../logicalOperationRegisterer';\n\nexport const OPERATION_ID = 'disjunctionWithExtraCondition';\nexport const SHORT_NAME_FOR_COMPONENT = C.FILTERS_LABELS_DISJUNCTION;\n// ((p OR q OR w OR x OR...) AND z) === TRUE?\n\n/**\n * @param {Array} conditions An array with values to check.\n * @param {*} value The comparable value.\n * @returns {boolean}\n */\nexport function operationResult(conditions, value) {\n  if (conditions.length < 3) {\n    throw Error('Operation doesn\\'t work on less then three conditions.');\n  }\n\n  return conditions.slice(0, conditions.length - 1).some(condition => condition.func(value))\n    && conditions[conditions.length - 1].func(value);\n}\n\nregisterOperation(OPERATION_ID, SHORT_NAME_FOR_COMPONENT, operationResult);\n","import { addClass } from '../../../helpers/dom/element';\nimport { clone, extend } from '../../../helpers/object';\nimport { BaseUI } from './_base';\n\n/**\n * @private\n * @class InputUI\n */\nexport class InputUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      placeholder: '',\n      type: 'text',\n      tagName: 'input',\n      tabIndex: -1,\n    });\n  }\n\n  /**\n   * The reference to the input element.\n   *\n   * @type {HTMLInputElement}\n   */\n  #input;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(InputUI.DEFAULTS, options));\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   */\n  registerHooks() {\n    this.addLocalHook('keyup', event => this.#onKeyup(event));\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n    const icon = this.hot.rootDocument.createElement('div');\n\n    this.#input = this._element.firstChild;\n\n    addClass(this._element, 'htUIInput');\n    addClass(icon, 'htUIInputIcon');\n\n    this._element.appendChild(icon);\n\n    this.update();\n  }\n\n  /**\n   * Update element.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#input.type = this.options.type;\n    this.#input.placeholder = this.translateIfPossible(this.options.placeholder);\n    this.#input.value = this.translateIfPossible(this.options.value);\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#input.focus();\n    }\n  }\n\n  /**\n   * OnKeyup listener.\n   *\n   * @param {Event} event The mouse event object.\n   */\n  #onKeyup(event) {\n    this.options.value = event.target.value;\n  }\n}\n","import { clone, extend, mixin, objectEach } from '../../../helpers/object';\nimport localHooks from '../../../mixins/localHooks';\nimport EventManager from '../../../eventManager';\nimport { addClass } from '../../../helpers/dom/element';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\nconst STATE_BUILT = 'built';\nconst STATE_BUILDING = 'building';\nconst EVENTS_TO_REGISTER = ['click', 'input', 'keydown', 'keypress', 'keyup', 'focus', 'blur', 'change'];\n\n/**\n * @private\n */\nexport class BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      className: '',\n      value: '',\n      tagName: 'div',\n      children: [],\n      wrapIt: true,\n    });\n  }\n\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Instance of EventManager.\n   *\n   * @type {EventManager}\n   */\n  eventManager = new EventManager(this);\n  /**\n   * List of element options.\n   *\n   * @type {object}\n   */\n  options;\n  /**\n   * Build root DOM element.\n   *\n   * @type {Element}\n   * @private\n   */\n  _element;\n  /**\n   * Flag which determines build state of element.\n   *\n   * @type {string}\n   */\n  buildState;\n\n  constructor(hotInstance, options) {\n    this.hot = hotInstance;\n    this.options = extend(BaseUI.DEFAULTS, options);\n    this._element = this.hot.rootDocument.createElement(this.options.wrapIt ? 'div' : this.options.tagName);\n  }\n\n  /**\n   * Set the element value.\n   *\n   * @param {*} value Set the component value.\n   */\n  setValue(value) {\n    this.options.value = value;\n    this.update();\n  }\n\n  /**\n   * Get the element value.\n   *\n   * @returns {*}\n   */\n  getValue() {\n    return this.options.value;\n  }\n\n  /**\n   * Get element as a DOM object.\n   *\n   * @returns {Element}\n   */\n  get element() {\n    if (this.buildState === STATE_BUILDING) {\n      return this._element;\n    }\n    if (this.buildState === STATE_BUILT) {\n      this.update();\n\n      return this._element;\n    }\n    this.buildState = STATE_BUILDING;\n    this.build();\n    this.buildState = STATE_BUILT;\n\n    return this._element;\n  }\n\n  /**\n   * Check if element was built (built whole DOM structure).\n   *\n   * @returns {boolean}\n   */\n  isBuilt() {\n    return this.buildState === STATE_BUILT;\n  }\n\n  /**\n   * Translate value if it is possible. It's checked if value belongs to namespace of translated phrases.\n   *\n   * @param {*} value Value which will may be translated.\n   * @returns {*} Translated value if translation was possible, original value otherwise.\n   */\n  translateIfPossible(value) {\n    if (typeof value === 'string' && value.startsWith(C.FILTERS_NAMESPACE)) {\n      return this.hot.getTranslatedPhrase(value);\n    }\n\n    return value;\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    const registerEvent = (element, eventName) => {\n      this.eventManager\n        .addEventListener(element, eventName, event => this.runLocalHooks(eventName, event, this));\n    };\n\n    if (!this.buildState) {\n      this.buildState = STATE_BUILDING;\n    }\n\n    // prevents \"hot.unlisten()\" call when clicked\n    // (https://github.com/handsontable/handsontable/blob/master/handsontable/src/tableView.js#L317-L321)\n    this._element.setAttribute('data-hot-input', true);\n\n    if (this.options.tabIndex !== undefined) {\n      this._element.setAttribute('tabindex', this.options.tabIndex);\n    }\n    if (this.options.role !== undefined) {\n      this._element.setAttribute('role', this.options.role);\n    }\n    if (this.options.className) {\n      addClass(this._element, this.options.className);\n    }\n\n    if (this.options.children.length) {\n      arrayEach(this.options.children, element => this._element.appendChild(element.element));\n\n    } else if (this.options.wrapIt) {\n      const element = this.hot.rootDocument.createElement(this.options.tagName);\n\n      // prevents \"hot.unlisten()\" call when clicked\n      // (https://github.com/handsontable/handsontable/blob/master/handsontable/src/tableView.js#L317-L321)\n      element.setAttribute('data-hot-input', true);\n\n      objectEach(this.options, (value, key) => {\n        if (element[key] !== undefined && key !== 'className' && key !== 'tagName' && key !== 'children') {\n          element[key] = this.translateIfPossible(value);\n        }\n      });\n\n      this._element.appendChild(element);\n\n      arrayEach(EVENTS_TO_REGISTER, eventName => registerEvent(element, eventName));\n\n    } else {\n      arrayEach(EVENTS_TO_REGISTER, eventName => registerEvent(this._element, eventName));\n    }\n  }\n\n  /**\n   * Update DOM structure.\n   */\n  update() {\n\n  }\n\n  /**\n   * Reset to initial state.\n   */\n  reset() {\n    this.options.value = '';\n    this.update();\n  }\n\n  /**\n   * Show element.\n   */\n  show() {\n    this.element.style.display = '';\n  }\n\n  /**\n   * Hide element.\n   */\n  hide() {\n    this.element.style.display = 'none';\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n\n  }\n\n  destroy() {\n    this.eventManager.destroy();\n    this.eventManager = null;\n    this.hot = null;\n\n    if (this._element.parentNode) {\n      this._element.parentNode.removeChild(this._element);\n    }\n    this._element = null;\n  }\n}\n\nmixin(BaseUI, localHooks);\n","import { Menu } from '../../../plugins/contextMenu/menu';\nimport { clone, extend } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\nimport { setAttribute } from '../../../helpers/dom/element';\nimport * as C from '../../../i18n/constants';\nimport { SEPARATOR } from '../../../plugins/contextMenu/predefinedItems';\nimport { BaseUI } from './_base';\nimport { A11Y_HIDDEN, A11Y_LISTBOX } from '../../../helpers/a11y';\n\n/**\n * @private\n * @class SelectUI\n */\nexport class SelectUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      className: 'htUISelect',\n      wrapIt: false,\n      tabIndex: -1,\n    });\n  }\n\n  /**\n   * Instance of {@link Menu}.\n   *\n   * @type {Menu}\n   */\n  #menu = null;\n  /**\n   * List of available select options.\n   *\n   * @type {Array}\n   */\n  #items = [];\n  /**\n   * The reference to the BaseUI instance of the caption.\n   *\n   * @type {BaseUI}\n   */\n  #caption;\n  /**\n   * The reference to the table caption element.\n   *\n   * @type {HTMLTableCaptionElement}\n   */\n  #captionElement;\n  /**\n   * The reference to the BaseUI instance of the dropdown.\n   *\n   * @type {BaseUI}\n   */\n  #dropdown;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(SelectUI.DEFAULTS, options));\n    this.registerHooks();\n  }\n\n  /**\n   * Gets the instance of the Menu.\n   *\n   * @returns {Menu}\n   */\n  getMenu() {\n    return this.#menu;\n  }\n\n  /**\n   * Register all necessary hooks.\n   */\n  registerHooks() {\n    this.addLocalHook('click', () => this.#onClick());\n  }\n\n  /**\n   * Set options which can be selected in the list.\n   *\n   * @param {Array} items Array of objects with required keys `key` and `name`.\n   */\n  setItems(items) {\n    this.#items = this.translateNames(items);\n\n    if (this.#menu) {\n      this.#menu.setMenuItems(this.#items);\n    }\n  }\n\n  /**\n   * Translate names of menu items.\n   *\n   * @param {Array} items Array of objects with required keys `key` and `name`.\n   * @returns {Array} Items with translated `name` keys.\n   */\n  translateNames(items) {\n    arrayEach(items, (item) => {\n      item.name = this.translateIfPossible(item.name);\n    });\n\n    return items;\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n    this.#menu = new Menu(this.hot, {\n      className: 'htSelectUI htFiltersConditionsMenu',\n      keepInViewport: false,\n      standalone: true,\n      container: this.options.menuContainer,\n    });\n    this.#menu.setMenuItems(this.#items);\n\n    const caption = new BaseUI(this.hot, {\n      className: 'htUISelectCaption'\n    });\n\n    const dropdown = new BaseUI(this.hot, {\n      className: 'htUISelectDropdown'\n    });\n\n    this.#caption = caption;\n    this.#captionElement = caption.element;\n    this.#dropdown = dropdown;\n\n    if (this.hot.getSettings().ariaTags) {\n      setAttribute(dropdown.element, [\n        A11Y_HIDDEN()\n      ]);\n\n      setAttribute(this._element, [\n        A11Y_LISTBOX()\n      ]);\n    }\n\n    arrayEach([caption, dropdown], element => this._element.appendChild(element.element));\n\n    this.#menu.addLocalHook('select', command => this.#onMenuSelect(command));\n    this.#menu.addLocalHook('afterClose', () => this.#onMenuClosed());\n    this.update();\n  }\n\n  /**\n   * Update DOM structure.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    let conditionName;\n\n    if (this.options.value) {\n      conditionName = this.options.value.name;\n\n    } else {\n      conditionName = this.#menu.hot.getTranslatedPhrase(C.FILTERS_CONDITIONS_NONE);\n    }\n\n    this.#captionElement.textContent = conditionName;\n    super.update();\n  }\n\n  /**\n   * Open select dropdown menu with available options.\n   */\n  openOptions() {\n    const rect = this.element.getBoundingClientRect();\n\n    if (this.#menu) {\n      this.#menu.open();\n      this.#menu.setPosition({\n        left: this.hot.isLtr() ? rect.left - 5 : rect.left - 31,\n        top: rect.top - 1,\n        width: rect.width,\n        height: rect.height,\n      });\n      this.#menu.getNavigator().toFirstItem();\n      this.#menu.getKeyboardShortcutsCtrl().addCustomShortcuts([{\n        keys: [['Tab'], ['Shift', 'Tab']],\n        callback: (event) => {\n          this.closeOptions();\n          this.runLocalHooks('tabKeydown', event);\n        },\n      }, {\n        keys: [['Control/Meta', 'A']],\n        callback: () => false,\n      }]);\n    }\n  }\n\n  /**\n   * Close select dropdown menu.\n   */\n  closeOptions() {\n    if (this.#menu) {\n      this.#menu.close();\n    }\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.element.focus();\n    }\n  }\n\n  /**\n   * On menu selected listener.\n   *\n   * @param {object} command Selected item.\n   */\n  #onMenuSelect(command) {\n    if (command.name !== SEPARATOR) {\n      this.options.value = command;\n      this.update();\n      this.runLocalHooks('select', this.options.value);\n    }\n  }\n\n  /**\n   * On menu closed listener.\n   */\n  #onMenuClosed() {\n    this.runLocalHooks('afterClose');\n  }\n\n  /**\n   * On element click listener.\n   *\n   * @private\n   */\n  #onClick() {\n    this.openOptions();\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    if (this.#menu) {\n      this.#menu.destroy();\n      this.#menu = null;\n    }\n\n    if (this.#caption) {\n      this.#caption.destroy();\n    }\n    if (this.#dropdown) {\n      this.#dropdown.destroy();\n    }\n\n    super.destroy();\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { arrayEach } from '../../../helpers/array';\nimport { toSingleLine } from '../../../helpers/templateLiteralTag';\nimport { BaseComponent } from './_base';\nimport { getOperationName } from '../logicalOperationRegisterer';\nimport { OPERATION_ID as OPERATION_AND } from '../logicalOperations/conjunction';\nimport { OPERATION_ID as OPERATION_OR } from '../logicalOperations/disjunction';\nimport { OPERATION_ID as OPERATION_OR_THEN_VARIABLE } from '../logicalOperations/disjunctionWithExtraCondition';\nimport { RadioInputUI } from '../ui/radioInput';\n\nconst SELECTED_AT_START_ELEMENT_INDEX = 0;\n\n/**\n * @private\n * @class OperatorsComponent\n */\nexport class OperatorsComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: false,\n    });\n\n    this.name = options.name;\n\n    this.buildOperatorsElement();\n  }\n\n  /**\n   * Get menu object descriptor.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuOperators');\n        arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Add RadioInputUI elements to component.\n   *\n   * @private\n   */\n  buildOperatorsElement() {\n    const operationKeys = [OPERATION_AND, OPERATION_OR];\n\n    arrayEach(operationKeys, (operation) => {\n      const radioInput = new RadioInputUI(this.hot, {\n        name: 'operator',\n        label: {\n          htmlFor: operation,\n          textContent: getOperationName(operation)\n        },\n        value: operation,\n        checked: operation === operationKeys[SELECTED_AT_START_ELEMENT_INDEX],\n        id: operation\n      });\n\n      radioInput.addLocalHook('change', event => this.#onRadioInputChange(event));\n      this.elements.push(radioInput);\n    });\n  }\n\n  /**\n   * Set state of operators component to check radio input at specific `index`.\n   *\n   * @param {number} searchedIndex Index of radio input to check.\n   */\n  setChecked(searchedIndex) {\n    if (this.elements.length < searchedIndex) {\n      throw Error(toSingleLine`Radio button with index ${searchedIndex} doesn't exist.`);\n    }\n\n    arrayEach(this.elements, (element, index) => {\n      element.setChecked(index === searchedIndex);\n    });\n  }\n\n  /**\n   * Get `id` of active operator.\n   *\n   * @returns {string}\n   */\n  getActiveOperationId() {\n    const operationElement = this.elements.find(element => element instanceof RadioInputUI && element.isChecked());\n\n    if (operationElement) {\n      return operationElement.getValue();\n    }\n\n    return OPERATION_AND;\n  }\n\n  /**\n   * Export state of the component (get selected operator).\n   *\n   * @returns {string} Returns `id` of selected operator.\n   */\n  getState() {\n    return this.getActiveOperationId();\n  }\n\n  /**\n   * Set state of the component.\n   *\n   * @param {object} value State to restore.\n   */\n  setState(value) {\n    this.reset();\n\n    if (value && this.getActiveOperationId() !== value) {\n      arrayEach(this.elements, (element) => {\n        element.setChecked(element.getValue() === value);\n      });\n    }\n  }\n\n  /**\n   * Update state of component.\n   *\n   * @param {string} [operationId='conjunction'] Id of selected operation.\n   * @param {number} column Physical column index.\n   */\n  updateState(operationId = OPERATION_AND, column) {\n    let selectedOperationId = operationId;\n\n    if (selectedOperationId === OPERATION_OR_THEN_VARIABLE) {\n      selectedOperationId = OPERATION_OR;\n    }\n\n    this.state.setValueAtIndex(column, selectedOperationId);\n  }\n\n  /**\n   * Reset elements to their initial state.\n   */\n  reset() {\n    this.setChecked(SELECTED_AT_START_ELEMENT_INDEX);\n  }\n\n  /**\n   * OnChange listener.\n   *\n   * @param {Event} event The DOM event object.\n   */\n  #onRadioInputChange(event) {\n    this.setState(event.target.value);\n  }\n}\n","import { clone, extend } from '../../../helpers/object';\nimport { BaseUI } from './_base';\n\n/**\n * @private\n * @class RadioInputUI\n */\nexport class RadioInputUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      type: 'radio',\n      tagName: 'input',\n      className: 'htUIRadio',\n      label: {}\n    });\n  }\n\n  /**\n   * The reference to the input element.\n   *\n   * @type {HTMLInputElement}\n   */\n  #input;\n  /**\n   * The reference to the label element.\n   *\n   * @type {HTMLLabelElement}\n   */\n  #label;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(RadioInputUI.DEFAULTS, options));\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n\n    const label = this.hot.rootDocument.createElement('label');\n\n    label.textContent = this.translateIfPossible(this.options.label.textContent);\n    label.htmlFor = this.translateIfPossible(this.options.label.htmlFor);\n    this.#label = label;\n    this.#input = this._element.firstChild;\n    this.#input.checked = this.options.checked;\n\n    this._element.appendChild(label);\n\n    this.update();\n  }\n\n  /**\n   * Update element.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#label.textContent = this.translateIfPossible(this.options.label.textContent);\n  }\n\n  /**\n   * Check if radio button is checked.\n   *\n   * @returns {boolean}\n   */\n  isChecked() {\n    return this.isBuilt() ? this.#input.checked : false;\n  }\n\n  /**\n   * Set input checked attribute.\n   *\n   * @param {boolean} value Set the component state.\n   */\n  setChecked(value = true) {\n    if (this.isBuilt()) {\n      this.#input.checked = value;\n    }\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#input.focus();\n    }\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { arrayEach, arrayFilter, arrayMap } from '../../../helpers/array';\nimport { isKey } from '../../../helpers/unicode';\nimport * as C from '../../../i18n/constants';\nimport { unifyColumnValues, intersectValues, toEmptyString } from '../utils';\nimport { BaseComponent } from './_base';\nimport { MultipleSelectUI } from '../ui/multipleSelect';\nimport { CONDITION_BY_VALUE, CONDITION_NONE } from '../constants';\nimport { getConditionDescriptor } from '../conditionRegisterer';\nimport { getRenderedValue as getRenderedNumericValue } from '../../../renderers/numericRenderer';\n\n/**\n * @private\n * @class ValueComponent\n */\nexport class ValueComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: false,\n    });\n\n    this.name = options.name;\n    this.elements.push(new MultipleSelectUI(this.hot));\n\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n  registerHooks() {\n    this.getMultipleSelectElement()\n      .addLocalHook('keydown', event => this.#onInputKeyDown(event))\n      .addLocalHook('listTabKeydown', event => this.runLocalHooks('listTabKeydown', event));\n\n    this.hot\n      .addHook('modifyFiltersMultiSelectValue', (value, meta) => this.#onModifyDisplayedValue(value, meta));\n  }\n\n  /**\n   * Gets the list of elements from which the component is built.\n   *\n   * @returns {BaseUI[]}\n   */\n  getElements() {\n    const selectElement = this.getMultipleSelectElement();\n\n    return [\n      selectElement.getSearchInputElement(),\n      selectElement.getSelectAllElement(),\n      selectElement.getClearAllElement(),\n      this.getMultipleSelectElement(),\n    ];\n  }\n\n  /**\n   * Set state of the component.\n   *\n   * @param {object} value The component value.\n   */\n  setState(value) {\n    this.reset();\n\n    if (value && value.command.key === CONDITION_BY_VALUE) {\n      const select = this.getMultipleSelectElement();\n\n      select.setItems(value.itemsSnapshot);\n      select.setValue(value.args[0]);\n      select.setLocale(value.locale);\n    }\n  }\n\n  /**\n   * Export state of the component (get selected filter and filter arguments).\n   *\n   * @returns {object} Returns object where `command` key keeps used condition filter and `args` key its arguments.\n   */\n  getState() {\n    const select = this.getMultipleSelectElement();\n    const availableItems = select.getItems();\n\n    return {\n      command: { key: select.isSelectedAllValues() || !availableItems.length ? CONDITION_NONE : CONDITION_BY_VALUE },\n      args: [select.getValue()],\n      itemsSnapshot: availableItems\n    };\n  }\n\n  /**\n   * Update state of component.\n   *\n   * @param {object} stateInfo Information about state containing stack of edited column,\n   * stack of dependent conditions, data factory and optional condition arguments change. It's described by object containing keys:\n   * `editedConditionStack`, `dependentConditionStacks`, `visibleDataFactory` and `conditionArgsChange`.\n   */\n  updateState(stateInfo) {\n    const updateColumnState = (\n      physicalColumn,\n      conditions,\n      conditionArgsChange,\n      filteredRowsFactory,\n      conditionsStack,\n    ) => {\n      const [firstByValueCondition] = arrayFilter(conditions, condition => condition.name === CONDITION_BY_VALUE);\n      const state = {};\n      const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);\n\n      if (firstByValueCondition) {\n        const filteredRows = filteredRowsFactory(physicalColumn, conditionsStack);\n        const rowValues = arrayMap(filteredRows, row => row.value);\n        const rowMetaMap = new Map(\n          filteredRows.map(row => [row.value, this.hot.getCellMeta(row.meta.visualRow, row.meta.visualCol)])\n        );\n        const unifiedRowValues = unifyColumnValues(rowValues);\n\n        if (conditionArgsChange) {\n          firstByValueCondition.args[0] = conditionArgsChange;\n        }\n\n        const selectedValues = [];\n        const itemsSnapshot = intersectValues(\n          unifiedRowValues,\n          firstByValueCondition.args[0],\n          defaultBlankCellValue,\n          (item) => {\n            if (item.checked) {\n              selectedValues.push(item.value);\n            }\n\n            this.#triggerModifyMultipleSelectionValueHook(item, rowMetaMap);\n          }\n        );\n\n        const column = stateInfo.editedConditionStack.column;\n\n        state.locale = this.hot.getCellMeta(0, column).locale;\n        state.args = [selectedValues];\n        state.command = getConditionDescriptor(CONDITION_BY_VALUE);\n        state.itemsSnapshot = itemsSnapshot;\n\n      } else {\n        state.args = [];\n        state.command = getConditionDescriptor(CONDITION_NONE);\n      }\n\n      this.state.setValueAtIndex(physicalColumn, state);\n    };\n\n    updateColumnState(\n      stateInfo.editedConditionStack.column,\n      stateInfo.editedConditionStack.conditions,\n      stateInfo.conditionArgsChange,\n      stateInfo.filteredRowsFactory\n    );\n\n    // Update the next \"by_value\" component (filter column conditions added after this condition).\n    // Its list of values has to be updated. As the new values by default are unchecked,\n    // the further component update is unnecessary.\n    if (stateInfo.dependentConditionStacks.length) {\n      updateColumnState(\n        stateInfo.dependentConditionStacks[0].column,\n        stateInfo.dependentConditionStacks[0].conditions,\n        stateInfo.conditionArgsChange,\n        stateInfo.filteredRowsFactory,\n        stateInfo.editedConditionStack\n      );\n    }\n  }\n\n  /**\n   * Get multiple select element.\n   *\n   * @returns {MultipleSelectUI}\n   */\n  getMultipleSelectElement() {\n    return this.elements.filter(element => element instanceof MultipleSelectUI)[0];\n  }\n\n  /**\n   * Get object descriptor for menu item entry.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper, row, col, prop, value) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuValue');\n\n        const label = this.hot.rootDocument.createElement('div');\n\n        addClass(label, 'htFiltersMenuLabel');\n        label.textContent = value;\n\n        wrapper.appendChild(label);\n\n        // The MultipleSelectUI should not extend the menu width (it should adjust to the menu item width only).\n        // That's why it's skipped from rendering when the GhostTable tries to render it.\n        if (!wrapper.parentElement.hasAttribute('ghost-table')) {\n          arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n        }\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Reset elements to their initial state.\n   */\n  reset() {\n    const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);\n    const rowEntries = this._getColumnVisibleValues();\n    const rowValues = rowEntries.map(entry => entry.value);\n    const rowMetaMap = new Map(rowEntries.map(row => [row.value, row.meta]));\n    const values = unifyColumnValues(rowValues);\n    const items = intersectValues(values, values, defaultBlankCellValue, (item) => {\n      this.#triggerModifyMultipleSelectionValueHook(item, rowMetaMap);\n    });\n\n    this.getMultipleSelectElement().setItems(items);\n    super.reset();\n    this.getMultipleSelectElement().setValue(values);\n\n    const selectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n\n    if (selectedColumn !== null) {\n      this.getMultipleSelectElement().setLocale(this.hot.getCellMeta(0, selectedColumn.visualIndex).locale);\n    }\n  }\n\n  /**\n   * Key down listener.\n   *\n   * @param {Event} event The DOM event object.\n   */\n  #onInputKeyDown(event) {\n    if (isKey(event.keyCode, 'ESCAPE')) {\n      this.runLocalHooks('cancel');\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Trigger the `modifyFiltersMultiSelectValue` hook.\n   *\n   * @param {object} item Item from the multiple select list.\n   * @param {Map} metaMap Map of row meta objects.\n   */\n  #triggerModifyMultipleSelectionValueHook(item, metaMap) {\n    if (this.hot.hasHook('modifyFiltersMultiSelectValue')) {\n      item.visualValue =\n        this.hot.runHooks('modifyFiltersMultiSelectValue', item.visualValue, metaMap.get(item.value));\n    }\n  }\n\n  /**\n   * Modify the value displayed in the multiple select list.\n   *\n   * @param {*} value Cell value.\n   * @param {object} meta The cell meta object.\n   * @returns {*} Returns the modified value.\n   */\n  #onModifyDisplayedValue(value, meta) {\n    switch (meta.type) {\n      case 'numeric':\n        return getRenderedNumericValue(value, meta);\n      default:\n        return value;\n    }\n  }\n\n  /**\n   * Get data for currently selected column.\n   *\n   * @returns {Array}\n   * @private\n   */\n  _getColumnVisibleValues() {\n    const selectedColumn = this.hot.getPlugin('filters').getSelectedColumn();\n\n    if (selectedColumn === null) {\n      return [];\n    }\n\n    return arrayMap(this.hot.getDataAtCol(selectedColumn.visualIndex), (v, rowIndex) => {\n      return {\n        value: toEmptyString(v),\n        meta: this.hot.getCellMeta(rowIndex, selectedColumn.visualIndex),\n      };\n    });\n  }\n}\n","import { addClass, getScrollbarWidth } from '../../../helpers/dom/element';\nimport { clone, extend } from '../../../helpers/object';\nimport { isKey } from '../../../helpers/unicode';\nimport { partial } from '../../../helpers/function';\nimport { dataRowToChangesArray } from '../../../helpers/data';\nimport * as C from '../../../i18n/constants';\nimport { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { BaseUI } from './_base';\nimport { InputUI } from './input';\nimport { LinkUI } from './link';\nimport { createArrayAssertion } from '../utils';\n\nconst SHORTCUTS_GROUP = 'multipleSelect.itemBox';\n\n/**\n * @private\n * @class MultipleSelectUI\n */\nexport class MultipleSelectUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      className: 'htUIMultipleSelect',\n      value: [],\n    });\n  }\n\n  /**\n   * List of available select options.\n   *\n   * @type {Array}\n   */\n  #items = [];\n  /**\n   * Handsontable instance used as items list element.\n   *\n   * @type {Handsontable}\n   */\n  #itemsBox;\n  /**\n   * A locale for the component used to compare filtered values.\n   *\n   * @type {string}\n   */\n  #locale;\n  /**\n   * Input element.\n   *\n   * @type {InputUI}\n   */\n  #searchInput;\n  /**\n   * \"Select all\" UI element.\n   *\n   * @type {LinkUI}\n   */\n  #selectAllUI;\n  /**\n   * \"Clear\" UI element.\n   *\n   * @type {LinkUI}\n   */\n  #clearAllUI;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(MultipleSelectUI.DEFAULTS, options));\n\n    this.#searchInput = new InputUI(this.hot, {\n      placeholder: C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH,\n      className: 'htUIMultipleSelectSearch',\n    });\n    this.#selectAllUI = new LinkUI(this.hot, {\n      textContent: C.FILTERS_BUTTONS_SELECT_ALL,\n      className: 'htUISelectAll',\n    });\n    this.#clearAllUI = new LinkUI(this.hot, {\n      textContent: C.FILTERS_BUTTONS_CLEAR,\n      className: 'htUIClearAll',\n    });\n\n    this.registerHooks();\n  }\n\n  /**\n   * Gets the instance of the internal Handsontable that acts here as a listbox component.\n   *\n   * @returns {Handsontable}\n   */\n  getItemsBox() {\n    return this.#itemsBox;\n  }\n\n  /**\n   * Register all necessary hooks.\n   */\n  registerHooks() {\n    this.#searchInput.addLocalHook('keydown', event => this.#onInputKeyDown(event));\n    this.#searchInput.addLocalHook('input', event => this.#onInput(event));\n    this.#selectAllUI.addLocalHook('click', event => this.#onSelectAllClick(event));\n    this.#clearAllUI.addLocalHook('click', event => this.#onClearAllClick(event));\n  }\n\n  /**\n   * Set available options.\n   *\n   * @param {Array} items Array of objects with `checked` and `label` property.\n   */\n  setItems(items) {\n    this.#items = items;\n    this.#itemsBox?.loadData(this.#items);\n  }\n\n  /**\n   * Set a locale for the component.\n   *\n   * @param {string} locale Locale used for filter actions performed on data, ie. `en-US`.\n   */\n  setLocale(locale) {\n    this.#locale = locale;\n  }\n\n  /**\n   * Get a locale for the component.\n   *\n   * @returns {string}\n   */\n  getLocale() {\n    return this.#locale;\n  }\n\n  /**\n   * Get all available options.\n   *\n   * @returns {Array}\n   */\n  getItems() {\n    return [...this.#items];\n  }\n\n  /**\n   * Get element value.\n   *\n   * @returns {Array} Array of selected values.\n   */\n  getValue() {\n    return itemsToValue(this.#items);\n  }\n\n  /**\n   * Gets the instance of the search input element.\n   *\n   * @returns {InputUI}\n   */\n  getSearchInputElement() {\n    return this.#searchInput;\n  }\n\n  /**\n   * Gets the instance of the \"select all\" link element.\n   *\n   * @returns {LinkUI}\n   */\n  getSelectAllElement() {\n    return this.#selectAllUI;\n  }\n\n  /**\n   * Gets the instance of the \"clear\" link element.\n   *\n   * @returns {LinkUI}\n   */\n  getClearAllElement() {\n    return this.#clearAllUI;\n  }\n\n  /**\n   * Check if all values listed in element are selected.\n   *\n   * @returns {boolean}\n   */\n  isSelectedAllValues() {\n    return this.#items.length === this.getValue().length;\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n\n    const { rootDocument } = this.hot;\n    const itemsBoxWrapper = rootDocument.createElement('div');\n    const selectionControl = new BaseUI(this.hot, {\n      className: 'htUISelectionControls',\n      children: [this.#selectAllUI, this.#clearAllUI],\n    });\n\n    this._element.appendChild(this.#searchInput.element);\n    this._element.appendChild(selectionControl.element);\n    this._element.appendChild(itemsBoxWrapper);\n\n    const hotInitializer = (wrapper) => {\n      if (!this._element) {\n        return;\n      }\n\n      this.#itemsBox?.destroy();\n      addClass(wrapper, 'htUIMultipleSelectHot');\n\n      // Constructs and initializes a new Handsontable instance\n      this.#itemsBox = new this.hot.constructor(wrapper, {\n        data: this.#items,\n        columns: [{\n          data: 'checked',\n          type: 'checkbox',\n          label: {\n            property: 'visualValue',\n            position: 'after'\n          },\n        }],\n        beforeRenderer: (TD, row, col, prop, value, cellProperties) => {\n          TD.title = cellProperties.instance.getDataAtRowProp(row, cellProperties.label.property);\n        },\n        afterListen: () => {\n          this.runLocalHooks('focus', this);\n        },\n        beforeOnCellMouseUp: () => {\n          this.#itemsBox.listen();\n        },\n        colWidths: () => this.#itemsBox.container.scrollWidth - getScrollbarWidth(rootDocument),\n        maxCols: 1,\n        autoWrapCol: true,\n        height: 110,\n        copyPaste: false,\n        disableVisualSelection: 'area',\n        fillHandle: false,\n        fragmentSelection: 'cell',\n        tabMoves: { row: 1, col: 0 },\n        layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',\n      });\n      this.#itemsBox.init();\n\n      const shortcutManager = this.#itemsBox.getShortcutManager();\n      const gridContext = shortcutManager.getContext('grid');\n\n      gridContext.removeShortcutsByKeys(['Tab']);\n      gridContext.removeShortcutsByKeys(['Shift', 'Tab']);\n      gridContext.addShortcut({\n        keys: [['Escape']],\n        callback: (event) => {\n          this.runLocalHooks('keydown', event, this);\n        },\n        group: SHORTCUTS_GROUP\n      });\n      gridContext.addShortcut({\n        keys: [['Tab'], ['Shift', 'Tab']],\n        callback: (event) => {\n          this.#itemsBox.deselectCell();\n\n          this.runLocalHooks('keydown', event, this);\n          this.runLocalHooks('listTabKeydown', event, this);\n        },\n        group: SHORTCUTS_GROUP\n      });\n    };\n\n    hotInitializer(itemsBoxWrapper);\n    this.hot._registerTimeout(() => hotInitializer(itemsBoxWrapper), 100);\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#itemsBox.listen();\n    }\n  }\n\n  /**\n   * Reset DOM structure.\n   */\n  reset() {\n    this.#searchInput.reset();\n    this.#selectAllUI.reset();\n    this.#clearAllUI.reset();\n  }\n\n  /**\n   * Update DOM structure.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#itemsBox.loadData(valueToItems(this.#items, this.options.value));\n    super.update();\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.#itemsBox?.destroy();\n    this.#searchInput.destroy();\n    this.#clearAllUI.destroy();\n    this.#selectAllUI.destroy();\n\n    this.#searchInput = null;\n    this.#clearAllUI = null;\n    this.#selectAllUI = null;\n    this.#itemsBox = null;\n    this.#items = null;\n    super.destroy();\n  }\n\n  /**\n   * 'input' event listener for input element.\n   *\n   * @param {Event} event DOM event.\n   */\n  #onInput(event) {\n    const value = event.target.value.toLocaleLowerCase(this.getLocale());\n    let filteredItems;\n\n    if (value === '') {\n      filteredItems = [...this.#items];\n    } else {\n      filteredItems = this.#items\n        .filter(item => (`${item.value}`).toLocaleLowerCase(this.getLocale()).indexOf(value) >= 0);\n    }\n\n    this.#itemsBox.loadData(filteredItems);\n  }\n\n  /**\n   * 'keydown' event listener for input element.\n   *\n   * @param {Event} event DOM event.\n   */\n  #onInputKeyDown(event) {\n    this.runLocalHooks('keydown', event, this);\n\n    const isKeyCode = partial(isKey, event.keyCode);\n\n    if (isKeyCode('ARROW_DOWN')) {\n      event.preventDefault();\n      stopImmediatePropagation(event);\n      this.#itemsBox.listen();\n      this.#itemsBox.selectCell(0, 0);\n    }\n  }\n\n  /**\n   * On click listener for \"Select all\" link.\n   *\n   * @param {DOMEvent} event The mouse event object.\n   */\n  #onSelectAllClick(event) {\n    const changes = [];\n\n    event.preventDefault();\n\n    this.#itemsBox.getSourceData().forEach((row, rowIndex) => {\n      row.checked = true;\n\n      changes.push(dataRowToChangesArray(row, rowIndex)[0]);\n    });\n\n    this.#itemsBox.setSourceDataAtCell(changes);\n  }\n\n  /**\n   * On click listener for \"Clear\" link.\n   *\n   * @param {DOMEvent} event The mouse event object.\n   */\n  #onClearAllClick(event) {\n    const changes = [];\n\n    event.preventDefault();\n    this.#itemsBox.getSourceData().forEach((row, rowIndex) => {\n      row.checked = false;\n\n      changes.push(dataRowToChangesArray(row, rowIndex)[0]);\n    });\n\n    this.#itemsBox.setSourceDataAtCell(changes);\n  }\n}\n\nexport default MultipleSelectUI;\n\n/**\n * Pick up object items based on selected values.\n *\n * @param {Array} availableItems Base collection to compare values.\n * @param {Array} selectedValue Flat array with selected values.\n * @returns {Array}\n */\nfunction valueToItems(availableItems, selectedValue) {\n  const arrayAssertion = createArrayAssertion(selectedValue);\n\n  return availableItems.map((item) => {\n    item.checked = arrayAssertion(item.value);\n\n    return item;\n  });\n}\n\n/**\n * Convert all checked items into flat array.\n *\n * @param {Array} availableItems Base collection.\n * @returns {Array}\n */\nfunction itemsToValue(availableItems) {\n  const items = [];\n\n  availableItems.forEach((item) => {\n    if (item.checked) {\n      items.push(item.value);\n    }\n  });\n\n  return items;\n}\n","import { clone, extend } from '../../../helpers/object';\nimport { BaseUI } from './_base';\n\n/**\n * @private\n * @class LinkUI\n */\nexport class LinkUI extends BaseUI {\n  static get DEFAULTS() {\n    return clone({\n      href: '#',\n      tagName: 'a',\n      tabIndex: -1,\n      role: 'button',\n    });\n  }\n\n  /**\n   * The reference to the link element.\n   *\n   * @type {HTMLLinkElement}\n   */\n  #link;\n\n  constructor(hotInstance, options) {\n    super(hotInstance, extend(LinkUI.DEFAULTS, options));\n  }\n\n  /**\n   * Build DOM structure.\n   */\n  build() {\n    super.build();\n\n    this.#link = this._element.firstChild;\n  }\n\n  /**\n   * Update element.\n   */\n  update() {\n    if (!this.isBuilt()) {\n      return;\n    }\n\n    this.#link.textContent = this.translateIfPossible(this.options.textContent);\n  }\n\n  /**\n   * Focus element.\n   */\n  focus() {\n    if (this.isBuilt()) {\n      this.#link.focus();\n    }\n  }\n\n  /**\n   * Activate the element.\n   */\n  activate() {\n    this.#link.click();\n  }\n}\n","import { addClass } from '../../../helpers/dom/element';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\nimport { BaseComponent } from './_base';\nimport { InputUI } from '../ui/input';\n\n/**\n * @private\n * @class ActionBarComponent\n */\nexport class ActionBarComponent extends BaseComponent {\n  /**\n   * The name of the component.\n   *\n   * @type {string}\n   */\n  name = '';\n\n  static get BUTTON_OK() {\n    return 'ok';\n  }\n  static get BUTTON_CANCEL() {\n    return 'cancel';\n  }\n\n  constructor(hotInstance, options) {\n    super(hotInstance, {\n      id: options.id,\n      stateless: true,\n    });\n\n    this.name = options.name;\n\n    this.elements.push(\n      new InputUI(this.hot, {\n        type: 'button',\n        value: C.FILTERS_BUTTONS_OK,\n        className: 'htUIButton htUIButtonOK',\n        identifier: ActionBarComponent.BUTTON_OK\n      })\n    );\n    this.elements.push(\n      new InputUI(this.hot, {\n        type: 'button',\n        value: C.FILTERS_BUTTONS_CANCEL,\n        className: 'htUIButton htUIButtonCancel',\n        identifier: ActionBarComponent.BUTTON_CANCEL\n      })\n    );\n    this.registerHooks();\n  }\n\n  /**\n   * Register all necessary hooks.\n   *\n   * @private\n   */\n  registerHooks() {\n    arrayEach(this.elements, (element) => {\n      element.addLocalHook('click', (event, button) => this.#onButtonClick(event, button));\n    });\n  }\n\n  /**\n   * Get menu object descriptor.\n   *\n   * @returns {object}\n   */\n  getMenuItemDescriptor() {\n    return {\n      key: this.id,\n      name: this.name,\n      isCommand: false,\n      disableSelection: true,\n      hidden: () => this.isHidden(),\n      renderer: (hot, wrapper) => {\n        addClass(wrapper.parentNode, 'htFiltersMenuActionBar');\n        arrayEach(this.elements, ui => wrapper.appendChild(ui.element));\n\n        return wrapper;\n      }\n    };\n  }\n\n  /**\n   * Fire accept event.\n   */\n  accept() {\n    this.runLocalHooks('accept');\n  }\n\n  /**\n   * Fire cancel event.\n   */\n  cancel() {\n    this.runLocalHooks('cancel');\n  }\n\n  /**\n   * On button click listener.\n   *\n   * @param {Event} event DOM event.\n   * @param {InputUI} button InputUI object.\n   */\n  #onButtonClick(event, button) {\n    if (button.options.identifier === ActionBarComponent.BUTTON_OK) {\n      this.accept();\n    } else {\n      this.cancel();\n    }\n  }\n}\n","import { arrayEach, arrayMap, arrayReduce } from '../../helpers/array';\nimport { mixin } from '../../helpers/object';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport localHooks from '../../mixins/localHooks';\nimport { getCondition } from './conditionRegisterer';\nimport { OPERATION_ID as OPERATION_AND } from './logicalOperations/conjunction';\nimport { operations, getOperationFunc } from './logicalOperationRegisterer';\nimport { isUndefined } from '../../helpers/mixed';\nimport { LinkedPhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\nconst MAP_NAME = 'ConditionCollection.filteringStates';\n\n/**\n * @private\n * @class ConditionCollection\n */\nclass ConditionCollection {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Indicates whether the internal IndexMap should be registered or not. Generally,\n   * registered Maps responds to the index changes. Within that collection, sometimes\n   * this is not necessary.\n   *\n   * @type {boolean}\n   */\n  isMapRegistrable;\n  /**\n   * Index map storing filtering states for every column. ConditionCollection write and read to/from element.\n   *\n   * @type {LinkedPhysicalIndexToValueMap}\n   */\n  filteringStates = new IndexToValueMap();\n  /**\n   * Stores the previous state of the condition stack before the latest filter operation.\n   * This is used in the `beforeFilter` plugin to allow performing the undo operation.\n   *\n   * @type {null|Array}\n   */\n  previousConditionStack = null;\n\n  constructor(hot, isMapRegistrable = true) {\n    this.hot = hot;\n    this.isMapRegistrable = isMapRegistrable;\n\n    if (this.isMapRegistrable === true) {\n      this.hot.columnIndexMapper.registerMap(MAP_NAME, this.filteringStates);\n\n    } else {\n      this.filteringStates.init(this.hot.columnIndexMapper.getNumberOfIndexes());\n    }\n  }\n\n  /**\n   * Check if condition collection is empty (so no needed to filter data).\n   *\n   * @returns {boolean}\n   */\n  isEmpty() {\n    return this.getFilteredColumns().length === 0;\n  }\n\n  /**\n   * Check if value is matched to the criteria of conditions chain.\n   *\n   * @param {object} value Object with `value` and `meta` keys.\n   * @param {number} column The physical column index.\n   * @returns {boolean}\n   */\n  isMatch(value, column) {\n    const stateForColumn = this.filteringStates.getValueAtIndex(column);\n    const conditions = stateForColumn?.conditions ?? [];\n    const operation = stateForColumn?.operation;\n\n    return this.isMatchInConditions(conditions, value, operation);\n  }\n\n  /**\n   * Check if the value is matches the conditions.\n   *\n   * @param {Array} conditions List of conditions.\n   * @param {object} value Object with `value` and `meta` keys.\n   * @param {string} [operationType='conjunction'] Type of conditions operation.\n   * @returns {boolean}\n   */\n  isMatchInConditions(conditions, value, operationType = OPERATION_AND) {\n    if (conditions.length) {\n      return getOperationFunc(operationType)(conditions, value);\n    }\n\n    return true;\n  }\n\n  /**\n   * Add condition to the collection.\n   *\n   * @param {number} column The physical column index.\n   * @param {object} conditionDefinition Object with keys:\n   *  * `command` Object, Command object with condition name as `key` property.\n   *  * `args` Array, Condition arguments.\n   * @param {string} [operation='conjunction'] Type of conditions operation.\n   * @param {number} [position] Position to which condition will be added. When argument is undefined\n   * the condition will be processed as the last condition.\n   * @fires ConditionCollection#beforeAdd\n   * @fires ConditionCollection#afterAdd\n   */\n  addCondition(column, conditionDefinition, operation = OPERATION_AND, position) {\n    const localeForColumn = this.hot.getCellMeta(0, column).locale;\n    const args = arrayMap(conditionDefinition.args,\n      v => (typeof v === 'string' ? v.toLocaleLowerCase(localeForColumn) : v));\n    const name = conditionDefinition.name || conditionDefinition.command.key;\n\n    // If there's no previous condition stack defined (which means the condition stack was not cleared after the\n    // previous filter operation or that there was no filter operation performed yet), store the current conditions as\n    // the previous condition stack.\n    if (this.previousConditionStack === null) {\n      this.setPreviousConditionStack(this.exportAllConditions());\n    }\n\n    this.runLocalHooks('beforeAdd', column);\n\n    const columnType = this.getOperation(column);\n\n    if (columnType) {\n      if (columnType !== operation) {\n        throw Error(toSingleLine`The column of index ${column} has been already applied with a \\`${columnType}\\`\\x20\n        filter operation. Use \\`removeConditions\\` to clear the current conditions and then add new ones.\\x20\n        Mind that you cannot mix different types of operations (for instance, if you use \\`conjunction\\`,\\x20\n        use it consequently for a particular column).`);\n      }\n\n    } else if (isUndefined(operations[operation])) {\n      throw new Error(toSingleLine`Unexpected operation named \\`${operation}\\`. Possible ones are\\x20\n        \\`disjunction\\` and \\`conjunction\\`.`);\n    }\n\n    const conditionsForColumn = this.getConditions(column);\n\n    if (conditionsForColumn.length === 0) {\n      // Create first condition for particular column.\n      this.filteringStates.setValueAtIndex(column, {\n        operation,\n        conditions: [{\n          name,\n          args,\n          func: getCondition(name, args),\n        }]\n      }, position);\n\n    } else {\n      // Add next condition for particular column (by reference).\n      conditionsForColumn.push({\n        name,\n        args,\n        func: getCondition(name, args)\n      });\n    }\n\n    this.runLocalHooks('afterAdd', column);\n  }\n\n  /**\n   * Get all added conditions from the collection at specified column index.\n   *\n   * @param {number} column The physical column index.\n   * @returns {Array} Returns conditions collection as an array.\n   */\n  getConditions(column) {\n    return this.filteringStates.getValueAtIndex(column)?.conditions ?? [];\n  }\n\n  /**\n   * Get operation for particular column.\n   *\n   * @param {number} column The physical column index.\n   * @returns {string|undefined}\n   */\n  getOperation(column) {\n    return this.filteringStates.getValueAtIndex(column)?.operation;\n  }\n\n  /**\n   * Get all filtered physical columns in the order in which actions are performed.\n   *\n   * @returns {Array}\n   */\n  getFilteredColumns() {\n    return this.filteringStates.getEntries().map(([physicalColumn]) => physicalColumn);\n  }\n\n  /**\n   * Gets position in the filtering states stack for the specific column.\n   *\n   * @param {number} column The physical column index.\n   * @returns {number} Returns -1 when the column doesn't exist in the stack.\n   */\n  getColumnStackPosition(column) {\n    return this.getFilteredColumns().indexOf(column);\n  }\n\n  /**\n   * Export all previously added conditions.\n   *\n   * @returns {Array}\n   */\n  exportAllConditions() {\n    return arrayReduce(this.filteringStates.getEntries(), (allConditions, [column, { operation, conditions }]) => {\n      allConditions.push({\n        column,\n        operation,\n        conditions: arrayMap(conditions, ({ name, args }) => ({ name, args })),\n      });\n\n      return allConditions;\n    }, []);\n  }\n\n  /**\n   * Import conditions to the collection.\n   *\n   * @param {Array} conditions The collection of the conditions.\n   */\n  importAllConditions(conditions) {\n    this.clean();\n\n    arrayEach(conditions, (stack) => {\n      arrayEach(stack.conditions, condition => this.addCondition(stack.column, condition));\n    });\n  }\n\n  /**\n   * Remove conditions at given column index.\n   *\n   * @param {number} column The physical column index.\n   * @fires ConditionCollection#beforeRemove\n   * @fires ConditionCollection#afterRemove\n   */\n  removeConditions(column) {\n    // Store the current conditions as the previous condition stack before it's cleared.\n    this.setPreviousConditionStack(this.exportAllConditions());\n\n    this.runLocalHooks('beforeRemove', column);\n    this.filteringStates.clearValue(column);\n    this.runLocalHooks('afterRemove', column);\n  }\n\n  /**\n   * Clean all conditions collection and reset order stack.\n   *\n   * @fires ConditionCollection#beforeClean\n   * @fires ConditionCollection#afterClean\n   */\n  clean() {\n    this.runLocalHooks('beforeClean');\n    this.filteringStates.clear();\n    this.runLocalHooks('afterClean');\n  }\n\n  /**\n   * Check if at least one condition was added at specified column index. And if second parameter is passed then additionally\n   * check if condition exists under its name.\n   *\n   * @param {number} column The physical column index.\n   * @param {string} [name] Condition name.\n   * @returns {boolean}\n   */\n  hasConditions(column, name) {\n    const conditions = this.getConditions(column);\n\n    if (name) {\n      return conditions.some(condition => condition.name === name);\n    }\n\n    return conditions.length > 0;\n  }\n\n  /**\n   * Updates the `previousConditionStack` property with the provided stack.\n   * It is used to store the current conditions before they are modified, allowing for undo operations.\n   *\n   * @param {Array|null} previousConditionStack The stack of previous conditions.\n   */\n  setPreviousConditionStack(previousConditionStack) {\n    this.previousConditionStack = previousConditionStack;\n  }\n\n  /**\n   * Destroy object.\n   */\n  destroy() {\n    if (this.isMapRegistrable) {\n      this.hot.columnIndexMapper.unregisterMap(MAP_NAME);\n    }\n\n    this.filteringStates = null;\n    this.clearLocalHooks();\n  }\n}\n\nmixin(ConditionCollection, localHooks);\n\nexport default ConditionCollection;\n","import { arrayEach } from '../../helpers/array';\n\n/**\n * @private\n * @class DataFilter\n */\nclass DataFilter {\n  /**\n   * Reference to the instance of {ConditionCollection}.\n   *\n   * @type {ConditionCollection}\n   */\n  conditionCollection;\n  /**\n   * Function which provide source data factory for specified column.\n   *\n   * @type {Function}\n   */\n  columnDataFactory;\n\n  constructor(conditionCollection, columnDataFactory = () => []) {\n    this.conditionCollection = conditionCollection;\n    this.columnDataFactory = columnDataFactory;\n  }\n\n  /**\n   * Filter data based on the conditions collection.\n   *\n   * @returns {Array}\n   */\n  filter() {\n    let filteredData = [];\n\n    arrayEach(this.conditionCollection.getFilteredColumns(), (physicalColumn, index) => {\n      let columnData = this.columnDataFactory(physicalColumn);\n\n      if (index) {\n        columnData = this._getIntersectData(columnData, filteredData);\n      }\n\n      filteredData = this.filterByColumn(physicalColumn, columnData);\n    });\n\n    return filteredData;\n  }\n\n  /**\n   * Filter data based on specified physical column index.\n   *\n   * @param {number} column The physical column index.\n   * @param {Array} [dataSource] Data source as array of objects with `value` and `meta` keys (e.g. `{value: 'foo', meta: {}}`).\n   * @returns {Array} Returns filtered data.\n   */\n  filterByColumn(column, dataSource = []) {\n    const filteredData = [];\n\n    arrayEach(dataSource, (dataRow) => {\n      if (dataRow !== undefined && this.conditionCollection.isMatch(dataRow, column)) {\n        filteredData.push(dataRow);\n      }\n    });\n\n    return filteredData;\n  }\n\n  /**\n   * Intersect data.\n   *\n   * @private\n   * @param {Array} data The data to intersect.\n   * @param {Array} needles The collection intersected rows with the data.\n   * @returns {Array}\n   */\n  _getIntersectData(data, needles) {\n    const result = [];\n\n    arrayEach(needles, (needleRow) => {\n      const row = needleRow.meta.visualRow;\n\n      if (data[row] !== undefined) {\n        result[row] = data[row];\n      }\n    });\n\n    return result;\n  }\n}\n\nexport default DataFilter;\n","import { arrayEach, arrayMap, arrayFilter } from '../../helpers/array';\nimport { mixin, objectEach } from '../../helpers/object';\nimport { curry } from '../../helpers/function';\nimport localHooks from '../../mixins/localHooks';\nimport ConditionCollection from './conditionCollection';\nimport DataFilter from './dataFilter';\nimport { createArrayAssertion } from './utils';\n\n/**\n * Class which is designed for observing changes in condition collection. When condition is changed by user at specified\n * column it's necessary to update all conditions defined after this edited one.\n *\n * Object fires `update` hook for every column conditions change.\n *\n * @private\n * @class ConditionUpdateObserver\n */\nclass ConditionUpdateObserver {\n  /**\n   * Handsontable instance.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Reference to the instance of {@link ConditionCollection}.\n   *\n   * @type {ConditionCollection}\n   */\n  conditionCollection;\n  /**\n   * Function which provide source data factory for specified column.\n   *\n   * @type {Function}\n   */\n  columnDataFactory;\n  /**\n   * Collected changes when grouping is enabled.\n   *\n   * @type {Array}\n   * @default []\n   */\n  changes = [];\n  /**\n   * Flag which determines if grouping events is enabled.\n   *\n   * @type {boolean}\n   */\n  grouping = false;\n  /**\n   * The latest known position of edited conditions at specified column index.\n   *\n   * @type {number}\n   * @default -1\n   */\n  latestEditedColumnPosition = -1;\n  /**\n   * The latest known order of conditions stack.\n   *\n   * @type {Array}\n   */\n  latestOrderStack = [];\n\n  constructor(hot, conditionCollection, columnDataFactory = () => []) {\n    this.hot = hot;\n    this.conditionCollection = conditionCollection;\n    this.columnDataFactory = columnDataFactory;\n\n    this.conditionCollection.addLocalHook('beforeRemove', column => this.#onConditionBeforeModify(column));\n    this.conditionCollection.addLocalHook('afterRemove', column => this.updateStatesAtColumn(column));\n    this.conditionCollection.addLocalHook('afterAdd', column => this.updateStatesAtColumn(column));\n    this.conditionCollection.addLocalHook('beforeClean', () => this.#onConditionBeforeClean());\n    this.conditionCollection.addLocalHook('afterClean', () => this.#onConditionAfterClean());\n  }\n\n  /**\n   * Enable grouping changes. Grouping is helpful in situations when a lot of conditions is added in one moment. Instead of\n   * trigger `update` hook for every condition by adding/removing you can group this changes and call `flush` method to trigger\n   * it once.\n   */\n  groupChanges() {\n    this.grouping = true;\n  }\n\n  /**\n   * Flush all collected changes. This trigger `update` hook for every previously collected change from condition collection.\n   */\n  flush() {\n    this.grouping = false;\n\n    arrayEach(this.changes, (column) => {\n      this.updateStatesAtColumn(column);\n    });\n    this.changes.length = 0;\n  }\n\n  /**\n   * On before modify condition (add or remove from collection),.\n   *\n   * @param {number} column Column index.\n   * @private\n   */\n  #onConditionBeforeModify(column) {\n    this.latestEditedColumnPosition = this.conditionCollection.getColumnStackPosition(column);\n  }\n\n  /**\n   * Update all related states which should be changed after invoking changes applied to current column.\n   *\n   * @param {number} column The column index.\n   * @param {object} conditionArgsChange Object describing condition changes which can be handled by filters on `update` hook.\n   * It contains keys `conditionKey` and `conditionValue` which refers to change specified key of condition to specified value\n   * based on referred keys.\n   */\n  updateStatesAtColumn(column, conditionArgsChange) {\n    if (this.grouping) {\n      if (this.changes.indexOf(column) === -1) {\n        this.changes.push(column);\n      }\n\n      return;\n    }\n\n    const allConditions = this.conditionCollection.exportAllConditions();\n    let editedColumnPosition = this.conditionCollection.getColumnStackPosition(column);\n\n    if (editedColumnPosition === -1) {\n      editedColumnPosition = this.latestEditedColumnPosition;\n    }\n\n    // Collection of all conditions defined before currently edited `column` (without edited one)\n    const conditionsBefore = allConditions.slice(0, editedColumnPosition);\n    // Collection of all conditions defined after currently edited `column` (with edited one)\n    const conditionsAfter = allConditions.slice(editedColumnPosition);\n\n    // Make sure that conditionAfter doesn't contain edited column conditions\n    if (conditionsAfter.length && conditionsAfter[0].column === column) {\n      conditionsAfter.shift();\n    }\n\n    const visibleDataFactory = curry((curriedConditionsBefore, curriedColumn, conditionsStack = []) => {\n      const splitConditionCollection = new ConditionCollection(this.hot, false);\n      const curriedConditionsBeforeArray = [].concat(curriedConditionsBefore, conditionsStack);\n\n      // Create new condition collection to determine what rows should be visible in \"filter by value\" box\n      // in the next conditions in the chain\n      splitConditionCollection.importAllConditions(curriedConditionsBeforeArray);\n\n      const allRows = this.columnDataFactory(curriedColumn);\n      let visibleRows;\n\n      if (splitConditionCollection.isEmpty()) {\n        visibleRows = allRows;\n      } else {\n        visibleRows = (new DataFilter(\n          splitConditionCollection,\n          columnData => this.columnDataFactory(columnData)\n        )).filter();\n      }\n      visibleRows = arrayMap(visibleRows, rowData => rowData.meta.visualRow);\n\n      const visibleRowsAssertion = createArrayAssertion(visibleRows);\n\n      splitConditionCollection.destroy();\n\n      return arrayFilter(allRows, rowData => visibleRowsAssertion(rowData.meta.visualRow));\n    })(conditionsBefore);\n\n    const editedConditions = [].concat(this.conditionCollection.getConditions(column));\n\n    this.runLocalHooks('update', {\n      editedConditionStack: { column, conditions: editedConditions },\n      dependentConditionStacks: conditionsAfter,\n      filteredRowsFactory: visibleDataFactory,\n      conditionArgsChange\n    });\n  }\n\n  /**\n   * On before conditions clean listener.\n   *\n   * @private\n   */\n  #onConditionBeforeClean() {\n    this.latestOrderStack = this.conditionCollection.getFilteredColumns();\n  }\n\n  /**\n   * On after conditions clean listener.\n   *\n   * @private\n   */\n  #onConditionAfterClean() {\n    arrayEach(this.latestOrderStack, (column) => {\n      this.updateStatesAtColumn(column);\n    });\n  }\n\n  /**\n   * Destroy instance.\n   */\n  destroy() {\n    this.clearLocalHooks();\n\n    objectEach(this, (value, property) => {\n      this[property] = null;\n    });\n  }\n}\n\nmixin(ConditionUpdateObserver, localHooks);\n\nexport default ConditionUpdateObserver;\n","import { createFocusNavigator } from './focusNavigator';\nimport { SelectUI } from '../ui/select';\nimport { BaseUI } from '../ui/_base';\nimport { LinkUI } from '../ui/link';\n\nconst SHORTCUTS_MENU_CONTEXT = 'filters';\n\n/**\n * @typedef MenuFocusNavigator\n * @property {function(number): void} setCurrentPage Sets the current index of the selected focus.\n * @property {function(): number} getCurrentPage Gets the index of currently focus element.\n * @property {function(): void} toFirstItem Move the focus index to the first element in the list.\n * @property {function(): void} toLastItem Move the focus index to the last element in the list.\n * @property {function(): void} toNextItem Move the focus index to the next element in the list.\n * @property {function(): void} toPreviousItem Move the focus index to the previous element in the list.\n * @property {function(): void} clear Clear the internal state of the navigator.\n * @property {function(): void} listen Activate the navigator by listening the keyboard shortcuts.\n */\n/**\n * Creates navigator controller for filter subcomponents in the menu.\n *\n * @param {Menu} mainMenu The main Menu instance.\n * @param {BaseUI[]} menuItems The list of the component's elements to paginate to.\n * @returns {Paginator}\n */\nexport function createMenuFocusController(mainMenu, menuItems) {\n  /**\n   * @type {number} The last selected menu item (before clearing the the menu state after going\n   * into the focus mode triggered by the TAB or SHIFT+TAB keys).\n   */\n  let lastSelectedMenuItem = -1;\n\n  const focusNavigator = createFocusNavigator(menuItems);\n  const updateNavigatorPosition = element => () => {\n    if (mainMenu.isOpened()) {\n      mainMenu.getKeyboardShortcutsCtrl().listen(SHORTCUTS_MENU_CONTEXT);\n    }\n\n    focusNavigator.setCurrentPage(menuItems.indexOf(element));\n  };\n\n  // update navigator position (internal state) to element that was recently clicked or focused\n  menuItems.forEach((element) => {\n    if (element instanceof BaseUI) {\n      element.addLocalHook('click', updateNavigatorPosition(element));\n      element.addLocalHook('focus', updateNavigatorPosition(element));\n      element.addLocalHook('afterClose', updateNavigatorPosition(element));\n    }\n  });\n\n  mainMenu.addLocalHook('afterSelectionChange', (selectedItem) => {\n    if (!selectedItem.key.startsWith('filter_')) {\n      focusNavigator.clear();\n    }\n  });\n\n  /**\n   * Extends the menu and submenus with new keyboard shortcuts.\n   *\n   * @param {*} menu The menu (as main menu or submenu) instance.\n   */\n  function addKeyboardShortcuts(menu) {\n    const mainMenuShortcutsCtrl = mainMenu.getKeyboardShortcutsCtrl();\n    const currentMenuShortcutsCtrl = menu.getKeyboardShortcutsCtrl();\n\n    focusNavigator.clear();\n\n    currentMenuShortcutsCtrl.addCustomShortcuts([{\n      keys: [['Tab'], ['Shift', 'Tab']],\n      forwardToContext: mainMenuShortcutsCtrl.getContext(SHORTCUTS_MENU_CONTEXT),\n      callback: () => {\n        if (menu.isSubMenu()) {\n          menu.close();\n        }\n\n        mainMenuShortcutsCtrl.listen(SHORTCUTS_MENU_CONTEXT);\n      },\n    }]);\n\n    if (menu.isSubMenu()) {\n      return;\n    }\n\n    mainMenuShortcutsCtrl.addCustomShortcuts([{\n      keys: [['Tab'], ['Shift', 'Tab']],\n      callback: (event) => {\n        const menuNavigator = mainMenu.getNavigator();\n\n        if (menuNavigator.getCurrentPage() > -1) {\n          lastSelectedMenuItem = menuNavigator.getCurrentPage();\n        }\n\n        menuNavigator.clear();\n\n        if (event.shiftKey) {\n          focusNavigator.toPreviousItem();\n        } else {\n          focusNavigator.toNextItem();\n        }\n      },\n    }, {\n      keys: [['Escape']],\n      callback: () => {\n        mainMenu.close();\n      }\n    }, {\n      keys: [['Enter'], ['Space']],\n      preventDefault: false,\n      callback: (event) => {\n        const element = menuItems[focusNavigator.getCurrentPage()];\n\n        if (element instanceof SelectUI) {\n          element.openOptions();\n          event.preventDefault();\n        }\n\n        if (element instanceof LinkUI) {\n          element.activate();\n          event.preventDefault();\n        }\n\n        if (!(element instanceof BaseUI)) {\n          event.preventDefault();\n        }\n      }\n    }], SHORTCUTS_MENU_CONTEXT);\n  }\n\n  mainMenu.addLocalHook('afterSubmenuOpen', addKeyboardShortcuts);\n  mainMenu.addLocalHook('afterOpen', addKeyboardShortcuts);\n\n  /**\n   * Focuses the menu and switches its shortcut context to that one which controls\n   * the focus navigation.\n   */\n  function listen() {\n    mainMenu.focus();\n    mainMenu.getKeyboardShortcutsCtrl().listen(SHORTCUTS_MENU_CONTEXT);\n  }\n\n  /**\n   * Retrieves the last selected menu item (before clearing the state after going into the focus mode).\n   *\n   * @returns {number} The last selected menu item.\n   */\n  function getLastMenuPage() {\n    return lastSelectedMenuItem;\n  }\n\n  return {\n    ...focusNavigator,\n    listen,\n    getLastMenuPage,\n  };\n}\n","import { createPaginator } from '../../../utils/paginator';\nimport { isVisible } from '../../../helpers/dom/element';\nimport { MultipleSelectUI } from '../ui/multipleSelect';\n\n/**\n * Creates navigator for switching the focus of the filter's elements.\n *\n * @param {BaseUI[]} elements The elements to paginate to.\n * @returns {Paginator}\n */\nexport function createFocusNavigator(elements) {\n  const navigator = createPaginator({\n    initialPage: 0,\n    size: () => elements.length,\n    onItemSelect: (currentIndex, directItemChange) => {\n      const element = elements[currentIndex];\n\n      if (element instanceof MultipleSelectUI) {\n        return directItemChange;\n      }\n\n      if (element.element && !isVisible(element.element)) {\n        return false;\n      }\n\n      element.focus();\n    }\n  });\n\n  return navigator;\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Formulas,\n} from './formulas';\n","import { BasePlugin } from '../base';\nimport staticRegister from '../../utils/staticRegister';\nimport { error, warn } from '../../helpers/console';\nimport { isNumeric } from '../../helpers/number';\nimport {\n  isDefined,\n  isUndefined\n} from '../../helpers/mixed';\nimport {\n  setupEngine,\n  setupSheet,\n  unregisterEngine,\n  getRegisteredHotInstances,\n} from './engine/register';\nimport {\n  isEscapedFormulaExpression,\n  unescapeFormulaExpression,\n  isDate,\n  isDateValid,\n  getDateInHfFormat,\n  getDateFromExcelDate,\n  getDateInHotFormat,\n  isFormula,\n} from './utils';\nimport {\n  getEngineSettingsWithOverrides,\n  haveEngineSettingsChanged\n} from './engine/settings';\nimport { isArrayOfArrays } from '../../helpers/data';\nimport { toUpperCaseFirst } from '../../helpers/string';\nimport Hooks from '../../pluginHooks';\nimport IndexSyncer from './indexSyncer';\n\nexport const PLUGIN_KEY = 'formulas';\nexport const SETTING_KEYS = ['maxRows', 'maxColumns', 'language'];\nexport const PLUGIN_PRIORITY = 260;\n\nHooks.getSingleton().register('afterNamedExpressionAdded');\nHooks.getSingleton().register('afterNamedExpressionRemoved');\nHooks.getSingleton().register('afterSheetAdded');\nHooks.getSingleton().register('afterSheetRemoved');\nHooks.getSingleton().register('afterSheetRenamed');\nHooks.getSingleton().register('afterFormulasValuesUpdate');\n\n// This function will be used for detecting changes coming from the `UndoRedo` plugin. This kind of change won't be\n// handled by whole body of listeners and therefore won't change undo/redo stack inside engine provided by HyperFormula.\n// HyperFormula's `undo` and `redo` methods will do it instead. Please keep in mind that undo/redo stacks inside\n// instances of Handsontable and HyperFormula should be synced (number of actions should be the same).\nconst isBlockedSource = source => source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';\n\n/**\n * This plugin allows you to perform Excel-like calculations in your business applications. It does it by an\n * integration with our other product, [HyperFormula](https://github.com/handsontable/hyperformula/), which is a\n * powerful calculation engine with an extensive number of features.\n *\n * To test out HyperFormula, see [this guide](@/guides/formulas/formula-calculation/formula-calculation.md#available-functions).\n *\n * @plugin Formulas\n * @class Formulas\n */\nexport class Formulas extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return [\n      PLUGIN_KEY,\n      ...SETTING_KEYS\n    ];\n  }\n\n  /**\n   * Flag used to bypass hooks in internal operations.\n   *\n   * @private\n   * @type {boolean}\n   */\n  #internalOperationPending = false;\n\n  /**\n   * Flag needed to mark if Handsontable was initialized with no data.\n   * (Required to work around the fact, that Handsontable auto-generates sample data, when no data is provided).\n   *\n   * @type {boolean}\n   */\n  #hotWasInitializedWithEmptyData = false;\n\n  /**\n   * The list of the HyperFormula listeners.\n   *\n   * @type {Array}\n   */\n  #engineListeners = [\n    ['valuesUpdated', (...args) => this.#onEngineValuesUpdated(...args)],\n    ['namedExpressionAdded', (...args) => this.#onEngineNamedExpressionsAdded(...args)],\n    ['namedExpressionRemoved', (...args) => this.#onEngineNamedExpressionsRemoved(...args)],\n    ['sheetAdded', (...args) => this.#onEngineSheetAdded(...args)],\n    ['sheetRenamed', (...args) => this.#onEngineSheetRenamed(...args)],\n    ['sheetRemoved', (...args) => this.#onEngineSheetRemoved(...args)],\n  ];\n\n  /**\n   * Static register used to set up one global HyperFormula instance.\n   * TODO: currently used in tests, might be removed later.\n   *\n   * @private\n   * @type {object}\n   */\n  staticRegister = staticRegister('formulas');\n\n  /**\n   * The engine instance that will be used for this instance of Handsontable.\n   *\n   * @type {HyperFormula|null}\n   */\n  engine = null;\n\n  /**\n   * HyperFormula's sheet name.\n   *\n   * @type {string|null}\n   */\n  sheetName = null;\n  /**\n   * Index synchronizer responsible for manipulating with some general options related to indexes synchronization.\n   *\n   * @type {IndexSyncer|null}\n   */\n  indexSyncer = null;\n  /**\n   * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the rows.\n   *\n   * @type {AxisSyncer|null}\n   */\n  rowAxisSyncer = null;\n  /**\n   * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the columns.\n   *\n   * @type {AxisSyncer|null}\n   */\n  columnAxisSyncer = null;\n\n  /**\n   * HyperFormula's sheet id.\n   *\n   * @type {number|null}\n   */\n  get sheetId() {\n    return this.sheetName === null ? null : this.engine.getSheetId(this.sheetName);\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link Formulas#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    /* eslint-disable no-unneeded-ternary */\n    return this.hot.getSettings()[PLUGIN_KEY] ? true : false;\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.engine = setupEngine(this.hot) ?? this.engine;\n\n    if (!this.engine) {\n      warn('Missing the required `engine` key in the Formulas settings. Please fill it with either an' +\n        ' engine class or an engine instance.');\n\n      return;\n    }\n\n    // Useful for disabling -> enabling the plugin using `updateSettings` or the API.\n    if (this.sheetName !== null && !this.engine.doesSheetExist(this.sheetName)) {\n      const newSheetName = this.addSheet(this.sheetName, this.hot.getSourceDataArray());\n\n      if (newSheetName !== false) {\n        this.sheetName = newSheetName;\n      }\n    }\n\n    this.addHook('beforeLoadData', (...args) => this.#onBeforeLoadData(...args));\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    // The `updateData` hooks utilize the same logic as the `loadData` hooks.\n    this.addHook('beforeUpdateData', (...args) => this.#onBeforeLoadData(...args));\n    this.addHook('afterUpdateData', (...args) => this.#onAfterLoadData(...args));\n\n    this.addHook('modifyData', (...args) => this.#onModifyData(...args));\n    this.addHook('modifySourceData', (...args) => this.#onModifySourceData(...args));\n    this.addHook('beforeValidate', (...args) => this.#onBeforeValidate(...args));\n\n    this.addHook('afterSetSourceDataAtCell', (...args) => this.#onAfterSetSourceDataAtCell(...args));\n    this.addHook('afterSetDataAtCell', (...args) => this.#onAfterSetDataAtCell(...args));\n    this.addHook('afterSetDataAtRowProp', (...args) => this.#onAfterSetDataAtCell(...args));\n\n    this.addHook('beforeCreateRow', (...args) => this.#onBeforeCreateRow(...args));\n    this.addHook('beforeCreateCol', (...args) => this.#onBeforeCreateCol(...args));\n\n    this.addHook('afterCreateRow', (...args) => this.#onAfterCreateRow(...args));\n    this.addHook('afterCreateCol', (...args) => this.#onAfterCreateCol(...args));\n\n    this.addHook('beforeRemoveRow', (...args) => this.#onBeforeRemoveRow(...args));\n    this.addHook('beforeRemoveCol', (...args) => this.#onBeforeRemoveCol(...args));\n\n    this.addHook('afterRemoveRow', (...args) => this.#onAfterRemoveRow(...args));\n    this.addHook('afterRemoveCol', (...args) => this.#onAfterRemoveCol(...args));\n\n    this.indexSyncer = new IndexSyncer(this.hot.rowIndexMapper, this.hot.columnIndexMapper, (postponedAction) => {\n      this.hot.addHookOnce('init', () => {\n        // Engine is initialized after executing callback to `afterLoadData` hook. Thus, some actions on indexes should\n        // be postponed.\n        postponedAction();\n      });\n    });\n\n    this.rowAxisSyncer = this.indexSyncer.getForAxis('row');\n    this.columnAxisSyncer = this.indexSyncer.getForAxis('column');\n\n    this.hot.addHook('afterRowSequenceChange', this.rowAxisSyncer.getIndexesChangeSyncMethod());\n    this.hot.addHook('afterColumnSequenceChange', this.columnAxisSyncer.getIndexesChangeSyncMethod());\n\n    this.hot.addHook('beforeRowMove', (movedRows, finalIndex, _, movePossible) => {\n      this.rowAxisSyncer.storeMovesInformation(movedRows, finalIndex, movePossible);\n    });\n\n    this.hot.addHook('beforeColumnMove', (movedColumns, finalIndex, _, movePossible) => {\n      this.columnAxisSyncer.storeMovesInformation(movedColumns, finalIndex, movePossible);\n    });\n\n    this.hot.addHook('afterRowMove', (movedRows, finalIndex, dropIndex, movePossible, orderChanged) => {\n      this.rowAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);\n    });\n\n    this.hot.addHook('afterColumnMove', (movedColumns, finalIndex, dropIndex, movePossible, orderChanged) => {\n      this.columnAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);\n    });\n\n    this.hot.addHook('beforeColumnFreeze', (column, freezePerformed) => {\n      this.columnAxisSyncer.storeMovesInformation(\n        [column], this.hot.getSettings().fixedColumnsStart, freezePerformed);\n    });\n\n    this.hot.addHook('afterColumnFreeze', (_, freezePerformed) => {\n      this.columnAxisSyncer.calculateAndSyncMoves(freezePerformed, freezePerformed);\n    });\n\n    this.hot.addHook('beforeColumnUnfreeze', (column, unfreezePerformed) => {\n      this.columnAxisSyncer.storeMovesInformation(\n        [column], this.hot.getSettings().fixedColumnsStart - 1, unfreezePerformed);\n    });\n\n    this.hot.addHook('afterColumnUnfreeze', (_, unfreezePerformed) => {\n      this.columnAxisSyncer.calculateAndSyncMoves(unfreezePerformed, unfreezePerformed);\n    });\n\n    // TODO: Actions related to overwriting dates from HOT format to HF default format are done as callback to this\n    // hook, because some hooks, such as `afterLoadData` doesn't have information about composed cell properties.\n    // Another hooks are triggered to late for setting HF's engine data needed for some actions.\n    this.addHook('afterCellMetaReset', (...args) => this.#onAfterCellMetaReset(...args));\n\n    // Handling undo actions on data just using HyperFormula's UndoRedo mechanism\n    this.addHook('beforeUndo', () => {\n      this.indexSyncer.setPerformUndo(true);\n\n      this.engine.undo();\n    });\n\n    // Handling redo actions on data just using HyperFormula's UndoRedo mechanism\n    this.addHook('beforeRedo', () => {\n      this.indexSyncer.setPerformRedo(true);\n\n      this.engine.redo();\n    });\n\n    this.addHook('afterUndo', () => {\n      this.indexSyncer.setPerformUndo(false);\n    });\n\n    this.addHook('afterUndo', () => {\n      this.indexSyncer.setPerformRedo(false);\n    });\n\n    this.addHook('afterDetachChild', (...args) => this.#onAfterDetachChild(...args));\n    this.addHook('beforeAutofill', (...args) => this.#onBeforeAutofill(...args));\n\n    this.#engineListeners.forEach(([eventName, listener]) => this.engine.on(eventName, listener));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#engineListeners.forEach(([eventName, listener]) => this.engine.off(eventName, listener));\n\n    unregisterEngine(this.engine, this.hot);\n\n    this.engine = null;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Triggered on `updateSettings`.\n   *\n   * @private\n   * @param {object} newSettings New set of settings passed to the `updateSettings` method.\n   */\n  updatePlugin(newSettings) {\n    const newEngineSettings = getEngineSettingsWithOverrides(this.hot.getSettings());\n\n    if (haveEngineSettingsChanged(this.engine.getConfig(), newEngineSettings)) {\n      this.engine.updateConfig(newEngineSettings);\n    }\n\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (\n      isDefined(pluginSettings) &&\n      isDefined(pluginSettings.sheetName) &&\n      pluginSettings.sheetName !== this.sheetName\n    ) {\n      this.switchSheet(pluginSettings.sheetName);\n    }\n\n    // If no data was passed to the `updateSettings` method and no sheet is connected to the instance -> create a\n    // new sheet using the currently used data. Otherwise, it will be handled by the `afterLoadData` call.\n    if (!newSettings.data && this.sheetName === null) {\n      const sheetName = this.hot.getSettings()[PLUGIN_KEY].sheetName;\n\n      if (sheetName && this.engine.doesSheetExist(sheetName)) {\n        this.switchSheet(this.sheetName);\n\n      } else {\n        this.sheetName = this.addSheet(sheetName ?? undefined, this.hot.getSourceDataArray());\n      }\n    }\n\n    super.updatePlugin(newSettings);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#engineListeners.forEach(([eventName, listener]) => this.engine?.off(eventName, listener));\n    this.#engineListeners = null;\n\n    unregisterEngine(this.engine, this.hot);\n\n    this.engine = null;\n\n    super.destroy();\n  }\n\n  /**\n   * Add a sheet to the shared HyperFormula instance.\n   *\n   * @param {string|null} [sheetName] The new sheet name. If not provided (or a null is passed), will be\n   * auto-generated by HyperFormula.\n   * @param {Array} [sheetData] Data passed to the shared HyperFormula instance. Has to be declared as an array of\n   * arrays - array of objects is not supported in this scenario.\n   * @returns {boolean|string} `false` if the data format is unusable or it is impossible to add a new sheet to the\n   * engine, the created sheet name otherwise.\n   */\n  addSheet(sheetName, sheetData) {\n    if (isDefined(sheetData) && !isArrayOfArrays(sheetData)) {\n      warn('The provided data should be an array of arrays.');\n\n      return false;\n    }\n\n    if (sheetName !== undefined && sheetName !== null && this.engine.doesSheetExist(sheetName)) {\n      warn('Sheet with the provided name already exists.');\n\n      return false;\n    }\n\n    try {\n      const actualSheetName = this.engine.addSheet(sheetName ?? undefined);\n\n      if (sheetData) {\n        this.engine.setSheetContent(this.engine.getSheetId(actualSheetName), sheetData);\n      }\n\n      return actualSheetName;\n\n    } catch (e) {\n      warn(e.message);\n\n      return false;\n    }\n  }\n\n  /**\n   * Switch the sheet used as data in the Handsontable instance (it loads the data from the shared HyperFormula\n   * instance).\n   *\n   * @param {string} sheetName Sheet name used in the shared HyperFormula instance.\n   */\n  switchSheet(sheetName) {\n    if (!this.engine.doesSheetExist(sheetName)) {\n      error(`The sheet named \\`${sheetName}\\` does not exist, switch aborted.`);\n\n      return;\n    }\n\n    this.sheetName = sheetName;\n\n    const serialized = this.engine.getSheetSerialized(this.sheetId);\n\n    if (serialized.length > 0) {\n      this.hot.loadData(serialized, `${toUpperCaseFirst(PLUGIN_KEY)}.switchSheet`);\n    }\n  }\n\n  /**\n   * Get the cell type under specified visual coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {number} [sheet] The target sheet id, defaults to the current sheet.\n   * @returns {string} Possible values: 'FORMULA' | 'VALUE' | 'ARRAYFORMULA' | 'EMPTY'.\n   */\n  getCellType(row, column, sheet = this.sheetId) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    if (physicalRow !== null && physicalColumn !== null) {\n      return this.engine.getCellType({\n        sheet,\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),\n      });\n\n    } else {\n      // Should return `EMPTY` when out of bounds (according to the test cases).\n      return 'EMPTY';\n    }\n  }\n\n  /**\n   * Returns `true` if under specified visual coordinates is formula.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {number} [sheet] The target sheet id, defaults to the current sheet.\n   * @returns {boolean}\n   */\n  isFormulaCellType(row, column, sheet = this.sheetId) {\n    return this.engine.doesCellHaveFormula({\n      sheet,\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),\n    });\n  }\n\n  /**\n   * Renders dependent sheets (handsontable instances) based on the changes - list of the\n   * recalculated dependent cells.\n   *\n   * @private\n   * @param {object[]} dependentCells The values and location of applied changes within HF engine.\n   * @param {boolean} [renderSelf] `true` if it's supposed to render itself, `false` otherwise.\n   */\n  renderDependentSheets(dependentCells, renderSelf = false) {\n    const affectedSheetIds = new Set();\n\n    dependentCells.forEach((change) => {\n      // For the Named expression the address is empty, hence the `sheetId` is undefined.\n      const sheetId = change?.address?.sheet;\n\n      if (sheetId !== undefined) {\n        if (!affectedSheetIds.has(sheetId)) {\n          affectedSheetIds.add(sheetId);\n        }\n      }\n    });\n\n    getRegisteredHotInstances(this.engine).forEach((relatedHot, sheetId) => {\n      if (\n        (renderSelf || (sheetId !== this.sheetId)) &&\n        affectedSheetIds.has(sheetId)\n      ) {\n        relatedHot.render();\n        relatedHot.view?.adjustElementsSize();\n      }\n    });\n  }\n\n  /**\n   * Validates dependent cells based on the cells that are modified by the change.\n   *\n   * @private\n   * @param {object[]} dependentCells The values and location of applied changes within HF engine.\n   * @param {object[]} [changedCells] The values and location of applied changes by developer (through API or UI).\n   */\n  validateDependentCells(dependentCells, changedCells = []) {\n    const stringifyAddress = (change) => {\n      const {\n        row,\n        col,\n        sheet\n      } = change?.address ?? {};\n\n      return isDefined(sheet) ? `${sheet}:${row}x${col}` : '';\n    };\n    const changedCellsSet = new Set(changedCells.map(change => stringifyAddress(change)));\n\n    dependentCells.forEach((change) => {\n      const { row, col } = change.address ?? {};\n\n      // Don't try to validate cells outside of the visual part of the table.\n      if (isDefined(row) === false || isDefined(col) === false ||\n        row >= this.hot.countRows() || col >= this.hot.countCols()) {\n        return;\n      }\n\n      // For the Named expression the address is empty, hence the `sheetId` is undefined.\n      const sheetId = change?.address?.sheet;\n      const addressId = stringifyAddress(change);\n\n      // Validate the cells that depend on the calculated formulas. Skip that cells\n      // where the user directly changes the values - the Core triggers those validators.\n      if (sheetId !== undefined && !changedCellsSet.has(addressId)) {\n        const boundHot = getRegisteredHotInstances(this.engine).get(sheetId);\n\n        // if `sheetId` is not bound to any Handsontable instance, skip the validation process\n        if (!boundHot) {\n          return;\n        }\n\n        // It will just re-render certain cell when necessary.\n        boundHot.validateCell(\n          boundHot.getDataAtCell(row, col),\n          boundHot.getCellMeta(row, col),\n          () => {}\n        );\n      }\n    });\n  }\n\n  /**\n   * Sync a change from the change-related hooks with the engine.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {Handsontable.CellValue} newValue New value.\n   * @returns {Array} Array of changes exported from the engine.\n   */\n  syncChangeWithEngine(row, column, newValue) {\n    const address = {\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),\n      sheet: this.sheetId\n    };\n\n    if (!this.engine.isItPossibleToSetCellContents(address)) {\n      warn(`Not possible to set cell data at ${JSON.stringify(address)}`);\n\n      return;\n    }\n\n    const cellMeta = this.hot.getCellMeta(row, column);\n\n    if (isDate(newValue, cellMeta.type)) {\n      if (isDateValid(newValue, cellMeta.dateFormat)) {\n        // Rewriting date in HOT format to HF format.\n        newValue = getDateInHfFormat(newValue, cellMeta.dateFormat);\n\n      } else if (isFormula(newValue) === false) {\n        // Escaping value from date parsing using \"'\" sign (HF feature).\n        newValue = `'${newValue}`;\n      }\n    }\n\n    return this.engine.setCellContents(address, newValue);\n  }\n\n  /**\n   * The hook allows to translate the formula value to calculated value before it goes to the\n   * validator function.\n   *\n   * @param {*} value The cell value to validate.\n   * @param {number} visualRow The visual row index.\n   * @param {number|string} prop The visual column index or property name of the column.\n   * @returns {*} Returns value to validate.\n   */\n  #onBeforeValidate(value, visualRow, prop) {\n    const visualColumn = this.hot.propToCol(prop);\n\n    if (this.isFormulaCellType(visualRow, visualColumn)) {\n      const address = {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n        sheet: this.sheetId,\n      };\n\n      const cellMeta = this.hot.getCellMeta(visualRow, visualColumn);\n      let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel-like date).\n\n      if (cellMeta.type === 'date' && isNumeric(cellValue)) {\n        cellValue = getDateFromExcelDate(cellValue, cellMeta.dateFormat);\n      }\n\n      // If `cellValue` is an object it is expected to be an error\n      return (typeof cellValue === 'object' && cellValue !== null) ? cellValue.value : cellValue;\n    }\n\n    return value;\n  }\n\n  /**\n   * `onBeforeAutofill` hook callback.\n   *\n   * @param {Array[]} fillData The data that was used to fill the `targetRange`. If `beforeAutofill` was used\n   * and returned `[[]]`, this will be the same object that was returned from `beforeAutofill`.\n   * @param {CellRange} sourceRange The range values will be filled from.\n   * @param {CellRange} targetRange The range new values will be filled into.\n   * @returns {boolean|*}\n   */\n  #onBeforeAutofill(fillData, sourceRange, targetRange) {\n    const { row: sourceTopStartRow, col: sourceTopStartColumn } = sourceRange.getTopStartCorner();\n    const { row: sourceBottomEndRow, col: sourceBottomEndColumn } = sourceRange.getBottomEndCorner();\n    const { row: targetTopStartRow, col: targetTopStartColumn } = targetRange.getTopStartCorner();\n    const { row: targetBottomEndRow, col: targetBottomEndColumn } = targetRange.getBottomEndCorner();\n\n    const engineSourceRange = {\n      start: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartColumn),\n        sheet: this.sheetId,\n      },\n      end: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndColumn),\n        sheet: this.sheetId,\n      },\n    };\n\n    const engineTargetRange = {\n      start: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetTopStartRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetTopStartColumn),\n        sheet: this.sheetId,\n      },\n      end: {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndColumn),\n        sheet: this.sheetId,\n      },\n    };\n\n    // Blocks the autofill operation if HyperFormula says that at least one of\n    // the underlying cell's contents cannot be set.\n    if (this.engine.isItPossibleToSetCellContents(engineTargetRange) === false) {\n      return false;\n    }\n\n    const fillRangeData = this.engine.getFillRangeData(engineSourceRange, engineTargetRange);\n    const {\n      row: sourceStartRow,\n      col: sourceStartColumn,\n    } = engineSourceRange.start;\n    const {\n      row: sourceEndRow,\n      col: sourceEndColumn,\n    } = engineSourceRange.end;\n    const populationRowLength = sourceEndRow - sourceStartRow + 1;\n    const populationColumnLength = sourceEndColumn - sourceStartColumn + 1;\n\n    for (let populatedRowIndex = 0; populatedRowIndex < fillRangeData.length; populatedRowIndex += 1) {\n      for (let populatedColumnIndex = 0; populatedColumnIndex < fillRangeData[populatedRowIndex].length;\n        populatedColumnIndex += 1) {\n        const populatedValue = fillRangeData[populatedRowIndex][populatedColumnIndex];\n        const sourceRow = sourceStartRow + (populatedRowIndex % populationRowLength);\n        const sourceColumn = sourceStartColumn + (populatedColumnIndex % populationColumnLength);\n        const sourceCellMeta = this.hot.getCellMeta(sourceRow, sourceColumn);\n\n        if (isDate(populatedValue, sourceCellMeta.type)) {\n          if (populatedValue.startsWith('\\'')) {\n            // Populating values on HOT side without apostrophe.\n            fillRangeData[populatedRowIndex][populatedColumnIndex] = populatedValue.slice(1);\n\n          } else if (this.isFormulaCellType(sourceRow, sourceColumn, this.sheetId) === false) {\n            // Populating date in proper format, coming from the source cell.\n            fillRangeData[populatedRowIndex][populatedColumnIndex] =\n              getDateInHotFormat(populatedValue, sourceCellMeta.dateFormat);\n          }\n        }\n      }\n    }\n\n    return fillRangeData;\n  }\n\n  /**\n   * `beforeLoadData` hook callback.\n   *\n   * @param {Array} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n   * @param {string} [source] Source of the call.\n   */\n  #onBeforeLoadData(sourceData, initialLoad, source = '') {\n    if (source.includes(toUpperCaseFirst(PLUGIN_KEY))) {\n      return;\n    }\n\n    // This flag needs to be defined, because not passing data to HOT results in HOT auto-generating a `null`-filled\n    // initial dataset.\n    this.#hotWasInitializedWithEmptyData = isUndefined(this.hot.getSettings().data);\n  }\n\n  /**\n   * Callback to `afterCellMetaReset` hook which is triggered after setting cell meta.\n   */\n  #onAfterCellMetaReset() {\n    const sourceDataArray = this.hot.getSourceDataArray();\n    let valueChanged = false;\n\n    sourceDataArray.forEach((rowData, rowIndex) => {\n      rowData.forEach((cellValue, columnIndex) => {\n        const cellMeta = this.hot.getCellMeta(rowIndex, columnIndex);\n        const dateFormat = cellMeta.dateFormat;\n\n        if (isDate(cellValue, cellMeta.type)) {\n          valueChanged = true;\n\n          if (isDateValid(cellValue, dateFormat)) {\n            // Rewriting date in HOT format to HF format.\n            sourceDataArray[rowIndex][columnIndex] = getDateInHfFormat(cellValue, dateFormat);\n\n          } else if (this.isFormulaCellType(rowIndex, columnIndex) === false) {\n            // Escaping value from date parsing using \"'\" sign (HF feature).\n            sourceDataArray[rowIndex][columnIndex] = `'${cellValue}`;\n          }\n        }\n      });\n    });\n\n    if (valueChanged === true) {\n      this.#internalOperationPending = true;\n\n      this.engine.setSheetContent(this.sheetId, sourceDataArray);\n\n      this.#internalOperationPending = false;\n    }\n  }\n\n  /**\n   * `afterLoadData` hook callback.\n   *\n   * @param {Array} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded during the initialization.\n   * @param {string} [source] Source of the call.\n   */\n  #onAfterLoadData(sourceData, initialLoad, source = '') {\n    if (source.includes(toUpperCaseFirst(PLUGIN_KEY))) {\n      return;\n    }\n\n    this.sheetName = setupSheet(this.engine, this.hot.getSettings()[PLUGIN_KEY].sheetName);\n\n    if (!this.#hotWasInitializedWithEmptyData) {\n      const sourceDataArray = this.hot.getSourceDataArray();\n\n      if (this.engine.isItPossibleToReplaceSheetContent(this.sheetId, sourceDataArray)) {\n        this.#internalOperationPending = true;\n\n        const dependentCells = this.engine.setSheetContent(this.sheetId, sourceDataArray);\n\n        this.indexSyncer.setupSyncEndpoint(this.engine, this.sheetId);\n        this.renderDependentSheets(dependentCells);\n\n        this.#internalOperationPending = false;\n      }\n\n    } else {\n      this.switchSheet(this.sheetName);\n    }\n  }\n\n  /**\n   * `modifyData` hook callback.\n   *\n   * @param {number} physicalRow Physical row index.\n   * @param {number} visualColumn Visual column index.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`\n   *   property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  #onModifyData(physicalRow, visualColumn, valueHolder, ioMode) {\n    if (\n      ioMode !== 'get' ||\n      this.#internalOperationPending ||\n      this.sheetName === null ||\n      !this.engine.doesSheetExist(this.sheetName)\n    ) {\n      return;\n    }\n\n    const visualRow = this.hot.toVisualRow(physicalRow);\n\n    if (visualRow === null || visualColumn === null) {\n      return;\n    }\n\n    // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.\n    const isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);\n\n    if (!isFormulaCellType) {\n      const cellType = this.getCellType(visualRow, visualColumn);\n\n      if (cellType !== 'ARRAY') {\n        if (isEscapedFormulaExpression(valueHolder.value)) {\n          valueHolder.value = unescapeFormulaExpression(valueHolder.value);\n        }\n\n        return;\n      }\n    }\n\n    const address = {\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n      sheet: this.sheetId\n    };\n    let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).\n\n    // TODO: Workaround. We use HOT's `getCellsMeta` method instead of HOT's `getCellMeta` method. Getting cell meta\n    // using the second method lead to execution of the `cells` method. Using the `getDataAtCell` (which may be useful)\n    // in a callback to the `cells` method leads to triggering the `modifyData` hook. Thus, the `onModifyData` callback\n    // is executed once again and it cause creation of an infinite loop.\n    let cellMeta = this.hot.getCellsMeta().find(singleCellMeta => singleCellMeta.visualRow === visualRow &&\n      singleCellMeta.visualCol === visualColumn);\n\n    if (cellMeta === undefined) {\n      cellMeta = {};\n    }\n\n    if (cellMeta.type === 'date' && isNumeric(cellValue)) {\n      cellValue = getDateFromExcelDate(cellValue, cellMeta.dateFormat);\n    }\n\n    // If `cellValue` is an object it is expected to be an error\n    const value = (typeof cellValue === 'object' && cellValue !== null) ? cellValue.value : cellValue;\n\n    valueHolder.value = value;\n  }\n\n  /**\n   * `modifySourceData` hook callback.\n   *\n   * @param {number} row Physical row index.\n   * @param {number|string} columnOrProp Physical column index or prop.\n   * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`\n   *   property.\n   * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n   */\n  #onModifySourceData(row, columnOrProp, valueHolder, ioMode) {\n    if (\n      ioMode !== 'get' ||\n      this.#internalOperationPending ||\n      this.sheetName === null ||\n      !this.engine.doesSheetExist(this.sheetName)\n    ) {\n      return;\n    }\n\n    const visualRow = this.hot.toVisualRow(row);\n    const visualColumn = this.hot.propToCol(columnOrProp);\n\n    if (visualRow === null || visualColumn === null) {\n      return;\n    }\n\n    // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.\n    const isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);\n\n    if (!isFormulaCellType) {\n      const cellType = this.getCellType(visualRow, visualColumn);\n\n      if (cellType !== 'ARRAY') {\n        return;\n      }\n    }\n\n    const dimensions = this.engine.getSheetDimensions(this.engine.getSheetId(this.sheetName));\n\n    // Don't actually change the source data if HyperFormula is not\n    // initialized yet. This is done to allow the `afterLoadData` hook to\n    // load the existing source data with `Handsontable#getSourceDataArray`\n    // properly.\n    if (dimensions.width === 0 && dimensions.height === 0) {\n      return;\n    }\n\n    const address = {\n      row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n      col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n      sheet: this.sheetId\n    };\n\n    valueHolder.value = this.engine.getCellSerialized(address);\n  }\n\n  /**\n   * `onAfterSetDataAtCell` hook callback.\n   *\n   * @param {Array[]} changes An array of changes in format [[row, prop, oldValue, value], ...].\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterSetDataAtCell(changes, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const outOfBoundsChanges = [];\n    const changedCells = [];\n\n    const dependentCells = this.engine.batch(() => {\n      changes.forEach(([visualRow, prop, , newValue]) => {\n        const visualColumn = this.hot.propToCol(prop);\n        const physicalRow = this.hot.toPhysicalRow(visualRow);\n        const physicalColumn = this.hot.toPhysicalColumn(visualColumn);\n        const address = {\n          row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n          col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n          sheet: this.sheetId,\n        };\n\n        if (physicalRow !== null && physicalColumn !== null) {\n          this.syncChangeWithEngine(visualRow, visualColumn, newValue);\n\n        } else {\n          outOfBoundsChanges.push([visualRow, visualColumn, newValue]);\n        }\n\n        changedCells.push({ address });\n      });\n    });\n\n    if (outOfBoundsChanges.length) {\n      // Workaround for rows/columns being created two times (by HOT and the engine).\n      // (unfortunately, this requires an extra re-render)\n      this.hot.addHookOnce('afterChange', () => {\n        const outOfBoundsDependentCells = this.engine.batch(() => {\n          outOfBoundsChanges.forEach(([row, column, newValue]) => {\n            this.syncChangeWithEngine(row, column, newValue);\n          });\n        });\n\n        this.renderDependentSheets(outOfBoundsDependentCells, true);\n      });\n    }\n\n    this.renderDependentSheets(dependentCells);\n    this.validateDependentCells(dependentCells, changedCells);\n  }\n\n  /**\n   * `onAfterSetSourceDataAtCell` hook callback.\n   *\n   * @param {Array[]} changes An array of changes in format [[row, column, oldValue, value], ...].\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterSetSourceDataAtCell(changes, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const dependentCells = [];\n    const changedCells = [];\n\n    changes.forEach(([visualRow, prop, , newValue]) => {\n      const visualColumn = this.hot.propToCol(prop);\n\n      if (!isNumeric(visualColumn)) {\n        return;\n      }\n\n      const address = {\n        row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),\n        col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),\n        sheet: this.sheetId\n      };\n\n      if (!this.engine.isItPossibleToSetCellContents(address)) {\n        warn(`Not possible to set source cell data at ${JSON.stringify(address)}`);\n\n        return;\n      }\n\n      changedCells.push({ address });\n      dependentCells.push(...this.engine.setCellContents(address, newValue));\n    });\n\n    this.renderDependentSheets(dependentCells);\n    this.validateDependentCells(dependentCells, changedCells);\n  }\n\n  /**\n   * `beforeCreateRow` hook callback.\n   *\n   * @param {number} visualRow Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeCreateRow(visualRow, amount) {\n    let hfRowIndex = this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow);\n\n    if (visualRow >= this.hot.countRows()) {\n      hfRowIndex = visualRow; // Row beyond the table boundaries.\n    }\n\n    if (\n      this.sheetId === null ||\n      !this.engine.doesSheetExist(this.sheetName) ||\n      !this.engine.isItPossibleToAddRows(this.sheetId, [hfRowIndex, amount])\n    ) {\n      return false;\n    }\n  }\n\n  /**\n   * `beforeCreateCol` hook callback.\n   *\n   * @param {number} visualColumn Represents the visual index of first newly created column in the data source.\n   * @param {number} amount Number of newly created columns in the data source.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeCreateCol(visualColumn, amount) {\n    let hfColumnIndex = this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn);\n\n    if (visualColumn >= this.hot.countCols()) {\n      hfColumnIndex = visualColumn; // Column beyond the table boundaries.\n    }\n\n    if (\n      this.sheetId === null ||\n      !this.engine.doesSheetExist(this.sheetName) ||\n      !this.engine.isItPossibleToAddColumns(this.sheetId, [hfColumnIndex, amount])\n    ) {\n      return false;\n    }\n  }\n\n  /**\n   * `beforeRemoveRow` hook callback.\n   *\n   * @param {number} row Visual index of starter row.\n   * @param {number} amount Amount of rows to be removed.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeRemoveRow(row, amount, physicalRows) {\n    const hfRows = this.rowAxisSyncer.setRemovedHfIndexes(physicalRows);\n\n    const possible = hfRows.every((hfRow) => {\n      return this.engine.isItPossibleToRemoveRows(this.sheetId, [hfRow, 1]);\n    });\n\n    return possible === false ? false : undefined;\n  }\n\n  /**\n   * `beforeRemoveCol` hook callback.\n   *\n   * @param {number} col Visual index of starter column.\n   * @param {number} amount Amount of columns to be removed.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @returns {*|boolean} If false is returned the action is canceled.\n   */\n  #onBeforeRemoveCol(col, amount, physicalColumns) {\n    const hfColumns = this.columnAxisSyncer.setRemovedHfIndexes(physicalColumns);\n\n    const possible = hfColumns.every((hfColumn) => {\n      return this.engine.isItPossibleToRemoveColumns(this.sheetId, [hfColumn, 1]);\n    });\n\n    return possible === false ? false : undefined;\n  }\n\n  /**\n   * `afterCreateRow` hook callback.\n   *\n   * @param {number} visualRow Represents the visual index of first newly created row in the data source array.\n   * @param {number} amount Number of newly created rows in the data source array.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterCreateRow(visualRow, amount, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const changes = this.engine.addRows(this.sheetId,\n      [this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow), amount]);\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterCreateCol` hook callback.\n   *\n   * @param {number} visualColumn Represents the visual index of first newly created column in the data source.\n   * @param {number} amount Number of newly created columns in the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterCreateCol(visualColumn, amount, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const changes = this.engine.addColumns(this.sheetId,\n      [this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn), amount]);\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterRemoveRow` hook callback.\n   *\n   * @param {number} row Visual index of starter row.\n   * @param {number} amount An amount of removed rows.\n   * @param {number[]} physicalRows An array of physical rows removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterRemoveRow(row, amount, physicalRows, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const descendingHfRows = this.rowAxisSyncer\n      .getRemovedHfIndexes()\n      .sort((a, b) => b - a); // sort numeric values descending\n\n    const changes = this.engine.batch(() => {\n      descendingHfRows.forEach((hfRow) => {\n        this.engine.removeRows(this.sheetId, [hfRow, 1]);\n      });\n    });\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterRemoveCol` hook callback.\n   *\n   * @param {number} col Visual index of starter column.\n   * @param {number} amount An amount of removed columns.\n   * @param {number[]} physicalColumns An array of physical columns removed from the data source.\n   * @param {string} [source] String that identifies source of hook call\n   *                          ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).\n   */\n  #onAfterRemoveCol(col, amount, physicalColumns, source) {\n    if (isBlockedSource(source)) {\n      return;\n    }\n\n    const descendingHfColumns = this.columnAxisSyncer\n      .getRemovedHfIndexes()\n      .sort((a, b) => b - a); // sort numeric values descending\n\n    const changes = this.engine.batch(() => {\n      descendingHfColumns.forEach((hfColumn) => {\n        this.engine.removeColumns(this.sheetId, [hfColumn, 1]);\n      });\n    });\n\n    this.renderDependentSheets(changes);\n  }\n\n  /**\n   * `afterDetachChild` hook callback.\n   * Used to sync the data of the rows detached in the Nested Rows plugin with the engine's dataset.\n   *\n   * @param {object} parent An object representing the parent from which the element was detached.\n   * @param {object} element The detached element.\n   * @param {number} finalElementRowIndex The final row index of the detached element.\n   */\n  #onAfterDetachChild(parent, element, finalElementRowIndex) {\n    this.#internalOperationPending = true;\n\n    const rowsData = this.hot.getSourceDataArray(\n      finalElementRowIndex,\n      0,\n      finalElementRowIndex + (element.__children?.length || 0),\n      this.hot.countSourceCols()\n    );\n\n    this.#internalOperationPending = false;\n\n    rowsData.forEach((row, relativeRowIndex) => {\n      row.forEach((value, colIndex) => {\n        this.engine.setCellContents({\n          col: colIndex,\n          row: finalElementRowIndex + relativeRowIndex,\n          sheet: this.sheetId\n        }, [[value]]);\n      });\n    });\n  }\n\n  /**\n   * Called when a value is updated in the engine.\n   *\n   * @fires Hooks#afterFormulasValuesUpdate\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineValuesUpdated(changes) {\n    this.hot.runHooks('afterFormulasValuesUpdate', changes);\n  }\n\n  /**\n   * Called when a named expression is added to the engine instance.\n   *\n   * @fires Hooks#afterNamedExpressionAdded\n   * @param {string} namedExpressionName The name of the added expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineNamedExpressionsAdded(namedExpressionName, changes) {\n    this.hot.runHooks('afterNamedExpressionAdded', namedExpressionName, changes);\n  }\n\n  /**\n   * Called when a named expression is removed from the engine instance.\n   *\n   * @fires Hooks#afterNamedExpressionRemoved\n   * @param {string} namedExpressionName The name of the removed expression.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineNamedExpressionsRemoved(namedExpressionName, changes) {\n    this.hot.runHooks('afterNamedExpressionRemoved', namedExpressionName, changes);\n  }\n\n  /**\n   * Called when a new sheet is added to the engine instance.\n   *\n   * @fires Hooks#afterSheetAdded\n   * @param {string} addedSheetDisplayName The name of the added sheet.\n   */\n  #onEngineSheetAdded(addedSheetDisplayName) {\n    this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);\n  }\n\n  /**\n   * Called when a sheet in the engine instance is renamed.\n   *\n   * @fires Hooks#afterSheetRenamed\n   * @param {string} oldDisplayName The old name of the sheet.\n   * @param {string} newDisplayName The new name of the sheet.\n   */\n  #onEngineSheetRenamed(oldDisplayName, newDisplayName) {\n    this.sheetName = newDisplayName;\n\n    this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);\n  }\n\n  /**\n   * Called when a sheet is removed from the engine instance.\n   *\n   * @fires Hooks#afterSheetRemoved\n   * @param {string} removedSheetDisplayName The removed sheet name.\n   * @param {Array} changes The values and location of applied changes.\n   */\n  #onEngineSheetRemoved(removedSheetDisplayName, changes) {\n    this.hot.runHooks('afterSheetRemoved', removedSheetDisplayName, changes);\n  }\n}\n","import staticRegister from '../../../utils/staticRegister';\nimport { isUndefined } from '../../../helpers/mixed';\nimport { toSingleLine } from '../../../helpers/templateLiteralTag';\nimport { warn } from '../../../helpers/console';\nimport { isObjectEqual } from '../../../helpers/object';\nimport { PLUGIN_KEY } from '../formulas';\nimport { DEFAULT_LICENSE_KEY, DEFAULT_SETTINGS, getEngineSettingsWithDefaultsAndOverrides } from './settings';\n\n/**\n * Prepares and returns the collection for the engine relationship with the HoT instances.\n *\n * @returns {Map}\n */\nfunction getEngineRelationshipRegistry() {\n  const registryKey = 'engine_relationship';\n  const pluginStaticRegistry = staticRegister(PLUGIN_KEY);\n\n  if (!pluginStaticRegistry.hasItem(registryKey)) {\n    pluginStaticRegistry.register(registryKey, new Map());\n  }\n\n  return pluginStaticRegistry.getItem(registryKey);\n}\n\n/**\n * Prepares and returns the collection for the engine shared usage.\n *\n * @returns {Map}\n */\nfunction getSharedEngineUsageRegistry() {\n  const registryKey = 'shared_engine_usage';\n  const pluginStaticRegistry = staticRegister(PLUGIN_KEY);\n\n  if (!pluginStaticRegistry.hasItem(registryKey)) {\n    pluginStaticRegistry.register(registryKey, new Map());\n  }\n\n  return pluginStaticRegistry.getItem(registryKey);\n}\n\n/**\n * Setups the engine instance. It either creates a new (possibly shared) engine instance, or attaches\n * the plugin to an already-existing instance.\n *\n * @param {Handsontable} hotInstance Handsontable instance.\n * @returns {null|object} Returns the engine instance if everything worked right and `null` otherwise.\n */\nexport function setupEngine(hotInstance) {\n  const hotSettings = hotInstance.getSettings();\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n  const engineConfigItem = pluginSettings?.engine;\n\n  if (pluginSettings === true) {\n    return null;\n  }\n\n  if (isUndefined(engineConfigItem)) {\n    return null;\n  }\n\n  // `engine.hyperformula` or `engine` is the engine class\n  if (typeof engineConfigItem.hyperformula === 'function' || typeof engineConfigItem === 'function') {\n    return registerEngine(\n      engineConfigItem.hyperformula ?? engineConfigItem,\n      hotSettings,\n      hotInstance);\n\n    // `engine` is the engine instance\n  } else if (typeof engineConfigItem === 'object' && isUndefined(engineConfigItem.hyperformula)) {\n    const engineRelationship = getEngineRelationshipRegistry();\n    const sharedEngineUsage = getSharedEngineUsageRegistry().get(engineConfigItem);\n\n    if (!engineRelationship.has(engineConfigItem)) {\n      engineRelationship.set(engineConfigItem, []);\n    }\n\n    engineRelationship.get(engineConfigItem).push(hotInstance);\n\n    if (sharedEngineUsage) {\n      sharedEngineUsage.push(hotInstance.guid);\n    }\n\n    if (!engineConfigItem.getConfig().licenseKey) {\n      engineConfigItem.updateConfig({\n        licenseKey: DEFAULT_LICENSE_KEY\n      });\n    }\n\n    if (engineConfigItem.getConfig().leapYear1900 !== DEFAULT_SETTINGS.leapYear1900\n      || isObjectEqual(engineConfigItem.getConfig().nullDate, DEFAULT_SETTINGS.nullDate) === false) {\n      warn(toSingleLine`If you use HyperFormula with Handsontable, keep the default \\`leapYear1900\\` and \\`nullDate\\` \n      settings. Otherwise, HyperFormula's dates may not sync correctly with Handsontable's dates.`);\n    }\n\n    return engineConfigItem;\n  }\n\n  return null;\n}\n\n/**\n * Registers the engine in the global register and attaches the needed event listeners.\n *\n * @param {Function} engineClass The engine class.\n * @param {object} hotSettings The Handsontable settings.\n * @param {Handsontable} hotInstance Handsontable instance.\n * @returns {object} Returns the engine instance.\n */\nexport function registerEngine(engineClass, hotSettings, hotInstance) {\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n  const engineSettings = getEngineSettingsWithDefaultsAndOverrides(hotSettings);\n  const engineRegistry = getEngineRelationshipRegistry();\n  const sharedEngineRegistry = getSharedEngineUsageRegistry();\n\n  registerCustomFunctions(engineClass, pluginSettings.functions);\n\n  registerLanguage(engineClass, pluginSettings.language);\n\n  // Create instance\n  const engineInstance = engineClass.buildEmpty(engineSettings);\n\n  // Add it to global registry\n  engineRegistry.set(engineInstance, [hotInstance]);\n  sharedEngineRegistry.set(engineInstance, [hotInstance.guid]);\n\n  registerNamedExpressions(engineInstance, pluginSettings.namedExpressions);\n\n  // Add hooks needed for cross-referencing sheets\n  engineInstance.on('sheetAdded', () => {\n    engineInstance.rebuildAndRecalculate();\n  });\n\n  engineInstance.on('sheetRemoved', () => {\n    engineInstance.rebuildAndRecalculate();\n  });\n\n  return engineInstance;\n}\n\n/**\n * Returns the list of the Handsontable instances linked to the specific engine instance.\n *\n * @param {object} engine The engine instance.\n * @returns {Map<number, Handsontable>} Returns Map with Handsontable instances.\n */\nexport function getRegisteredHotInstances(engine) {\n  const engineRegistry = getEngineRelationshipRegistry();\n  const hotInstances = engineRegistry.size === 0 ? [] : Array.from(engineRegistry.get(engine) ?? []);\n\n  return new Map(hotInstances.map(hot => [hot.getPlugin('formulas').sheetId, hot]));\n}\n\n/**\n * Removes the HOT instance from the global register's engine usage array, and if there are no HOT instances left,\n * unregisters the engine itself.\n *\n * @param {object} engine The engine instance.\n * @param {string} hotInstance The Handsontable instance.\n */\nexport function unregisterEngine(engine, hotInstance) {\n  if (engine) {\n    const engineRegistry = getEngineRelationshipRegistry();\n    const engineHotRelationship = engineRegistry.get(engine);\n    const sharedEngineRegistry = getSharedEngineUsageRegistry();\n    const sharedEngineUsage = sharedEngineRegistry.get(engine);\n\n    if (engineHotRelationship && engineHotRelationship.includes(hotInstance)) {\n      engineHotRelationship.splice(engineHotRelationship.indexOf(hotInstance), 1);\n\n      if (engineHotRelationship.length === 0) {\n        engineRegistry.delete(engine);\n      }\n    }\n\n    if (sharedEngineUsage && sharedEngineUsage.includes(hotInstance.guid)) {\n      sharedEngineUsage.splice(sharedEngineUsage.indexOf(hotInstance.guid), 1);\n\n      if (sharedEngineUsage.length === 0) {\n        sharedEngineRegistry.delete(engine);\n        engine.destroy();\n      }\n    }\n  }\n}\n\n/**\n * Registers the custom functions for the engine.\n *\n * @param {Function} engineClass The engine class.\n * @param {Array} customFunctions The custom functions array.\n */\nexport function registerCustomFunctions(engineClass, customFunctions) {\n  if (customFunctions) {\n    customFunctions.forEach((func) => {\n      const {\n        name,\n        plugin,\n        translations\n      } = func;\n\n      try {\n        engineClass.registerFunction(name, plugin, translations);\n\n      } catch (e) {\n        warn(e.message);\n      }\n    });\n  }\n}\n\n/**\n * Registers the provided language for the engine.\n *\n * @param {Function} engineClass The engine class.\n * @param {object} languageSetting The engine's language object.\n */\nexport function registerLanguage(engineClass, languageSetting) {\n  if (languageSetting) {\n    const {\n      langCode,\n    } = languageSetting;\n\n    try {\n      engineClass.registerLanguage(langCode, languageSetting);\n\n    } catch (e) {\n      warn(e.message);\n    }\n  }\n}\n\n/**\n * Registers the provided named expressions in the engine instance.\n *\n * @param {object} engineInstance The engine instance.\n * @param {Array} namedExpressions Array of the named expressions to be registered.\n */\nexport function registerNamedExpressions(engineInstance, namedExpressions) {\n  if (namedExpressions) {\n    engineInstance.suspendEvaluation();\n\n    namedExpressions.forEach((namedExp) => {\n      const {\n        name,\n        expression,\n        scope,\n        options\n      } = namedExp;\n\n      try {\n        engineInstance.addNamedExpression(name, expression, scope, options);\n\n      } catch (e) {\n        warn(e.message);\n      }\n    });\n\n    engineInstance.resumeEvaluation();\n  }\n}\n\n/**\n * Sets up a new sheet.\n *\n * @param {object} engineInstance The engine instance.\n * @param {string} sheetName The new sheet name.\n * @returns {*}\n */\nexport function setupSheet(engineInstance, sheetName) {\n  if (isUndefined(sheetName) || !engineInstance.doesSheetExist(sheetName)) {\n    sheetName = engineInstance.addSheet(sheetName);\n  }\n\n  return sheetName;\n}\n","import { PLUGIN_KEY } from '../formulas';\n\nexport const DEFAULT_LICENSE_KEY = 'internal-use-in-handsontable';\n\nexport const DEFAULT_SETTINGS = {\n  licenseKey: DEFAULT_LICENSE_KEY,\n\n  useArrayArithmetic: true,\n  useColumnIndex: false,\n  useStats: false,\n  evaluateNullToZero: true,\n  precisionEpsilon: 1e-13,\n  precisionRounding: 14,\n  smartRounding: true,\n  leapYear1900: false,\n  nullDate: {\n    year: 1899,\n    month: 12,\n    day: 30\n  },\n  nullYear: 30,\n  dateFormats: ['DD/MM/YYYY', 'DD/MM/YY'],\n  timeFormats: ['hh:mm', 'hh:mm:ss.sss'],\n  matchWholeCell: true,\n  useRegularExpressions: false,\n  useWildcards: true,\n  functionArgSeparator: ',',\n  thousandSeparator: '',\n  decimalSeparator: '.',\n  language: 'enGB',\n};\n\n/**\n * Gets a set of engine settings to be applied on top of the provided settings, based on user's Handsontable settings.\n *\n * @param {object} hotSettings Handsontable settings object.\n * @returns {object} Object containing the overriding options.\n */\nexport function getEngineSettingsOverrides(hotSettings) {\n  return {\n    maxColumns: hotSettings.maxColumns,\n    maxRows: hotSettings.maxRows,\n    language: hotSettings[PLUGIN_KEY]?.language?.langCode\n  };\n}\n\n/**\n * Drop `hyperformula` key from object if it exists.\n *\n * @param {object} pluginSettings Formulas plugin settings.\n * @returns {object}\n */\nfunction cleanEngineSettings(pluginSettings) {\n  return Object.keys(pluginSettings)\n    .reduce((obj, key) => {\n      if (key !== 'hyperformula') {\n        obj[key] = pluginSettings[key];\n      }\n\n      return obj;\n    }, {});\n}\n\n/**\n * Takes the default, user and overriding settings and merges them into a single object to be passed to the engine.\n *\n * The final object gets its parameters in the following order,\n * with properties attached to objects listed in the lower levels of the list overriding the\n * ones above them:\n *\n * 1. Default settings\n * 2. User settings\n * 3. Overrides.\n *\n * Meant to be used during *initialization* of the engine.\n *\n * @param {object} hotSettings The Handsontable settings.\n * @returns {object} The final engine settings.\n */\nexport function getEngineSettingsWithDefaultsAndOverrides(hotSettings) {\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n\n  const userSettings = cleanEngineSettings(\n    pluginSettings?.engine?.hyperformula ? pluginSettings.engine : {}\n  );\n\n  const overrides = getEngineSettingsOverrides(hotSettings);\n\n  return {\n    ...DEFAULT_SETTINGS,\n    ...userSettings,\n    ...overrides\n  };\n}\n\n/**\n * Get engine settings from a Handsontable settings object with overrides.\n *\n * @param {object} hotSettings Handsontable settings object.\n * @returns {object}\n */\nexport function getEngineSettingsWithOverrides(hotSettings) {\n  const pluginSettings = hotSettings[PLUGIN_KEY];\n\n  const userSettings = cleanEngineSettings(pluginSettings?.engine?.hyperformula ? pluginSettings.engine : {});\n  const overrides = getEngineSettingsOverrides(hotSettings);\n\n  return {\n    ...userSettings,\n    ...overrides\n  };\n}\n\n/**\n * Check if the new settings are defined and are different from the ones currently used by the engine.\n *\n * @param {object} currentEngineSettings Currently used engine settings.\n * @param {object} newEngineSettings New engine settings.\n * @returns {boolean}\n */\nexport function haveEngineSettingsChanged(currentEngineSettings, newEngineSettings) {\n  return Object.keys(newEngineSettings).some((settingOption) => {\n    return newEngineSettings[settingOption] !== undefined &&\n      newEngineSettings[settingOption] !== currentEngineSettings[settingOption];\n  });\n}\n","import moment from 'moment';\n\nconst DEFAULT_DATE_FORMAT_HYPERFORMULA = 'DD/MM/YYYY';\n\n/**\n * Checks if provided formula expression is escaped.\n *\n * @param {*} expression Expression to check.\n * @returns {boolean}\n */\nexport function isEscapedFormulaExpression(expression) {\n  return typeof expression === 'string' && expression.charAt(0) === '\\'' && expression.charAt(1) === '=';\n}\n\n/**\n * Replaces escaped formula expression into valid non-unescaped string.\n *\n * @param {string} expression Expression to process.\n * @returns {string}\n */\nexport function unescapeFormulaExpression(expression) {\n  return isEscapedFormulaExpression(expression) ? expression.substr(1) : expression;\n}\n\n/**\n * Checks whether string looks like formula or not. Corresponds to {@link https://hyperformula.handsontable.com/api/globals.html#isformula|HyperFormula's implementation}.\n *\n * @param {string} value Checked value.\n * @returns {boolean}\n */\nexport function isFormula(value) {\n  return typeof value === 'string' && value.startsWith('=');\n}\n\n/**\n * Checks if provided value is a date according to cell meta.\n *\n * @param {*} value Checked value.\n * @param {string} cellType Type of a cell.\n * @returns {boolean}\n */\nexport function isDate(value, cellType) {\n  return typeof value === 'string' && cellType === 'date';\n}\n\n/**\n * Checks if provided date is a valid date according to cell date format.\n *\n * @param {*} date Checked date.\n * @param {object} dateFormat Handled format for a date.\n * @returns {boolean}\n */\nexport function isDateValid(date, dateFormat) {\n  return moment(date, dateFormat, true).isValid();\n}\n\n/**\n * Returns date formatted in HF's default format.\n *\n * @param {string} date Date formatted according to Handsontable cell date format.\n * @param {string} dateFormat The format used for the date passed.\n * @returns {string}\n */\nexport function getDateInHfFormat(date, dateFormat) {\n  return moment(date, dateFormat, true).format(DEFAULT_DATE_FORMAT_HYPERFORMULA);\n}\n\n/**\n * Returns date formatted in HF's default format.\n *\n * @param {string} date Date formatted according to Handsontable cell date format.\n * @param {string} dateFormat The format used for the date passed.\n * @returns {string}\n */\nexport function getDateInHotFormat(date, dateFormat) {\n  return moment(date, DEFAULT_DATE_FORMAT_HYPERFORMULA, true).format(dateFormat);\n}\n\n/**\n * Converts Excel-like dates into strings and formats them based on the handled date format.\n *\n * @param {number} numericDate An integer representing numbers of days from January 1, 1900.\n * @param {string} dateFormat The format used for parsing an output.\n * @returns {string}\n */\nexport function getDateFromExcelDate(numericDate, dateFormat) {\n  // To replicate the behavior from the HyperFormula. UTC starts from 31/12/1899, while HF from 30/12/1899.\n  const dateOffset = -1;\n\n  // Based on solution from: https://stackoverflow.com/a/67130235.\n  const dateForFormatting = new Date(Date.UTC(0, 0, numericDate + dateOffset));\n\n  return moment(dateForFormatting).format(dateFormat);\n}\n","import AxisSyncer from './axisSyncer';\n\n/**\n * @private\n * @class IndexSyncer\n * @description\n *\n * Indexes synchronizer responsible for providing logic for syncing actions done on indexes for HOT to actions performed\n * on HF's.\n *\n */\nclass IndexSyncer {\n  /**\n   * Indexes synchronizer for the axis of the rows.\n   *\n   * @private\n   * @type {AxisSyncer}\n   */\n  #rowIndexSyncer;\n  /**\n   * Indexes synchronizer for the axis of the columns.\n   *\n   * @private\n   * @type {AxisSyncer}\n   */\n  #columnIndexSyncer;\n  /**\n   * Method which will postpone execution of some action (needed when synchronization endpoint isn't setup yet).\n   *\n   * @private\n   * @type {Function}\n   */\n  #postponeAction;\n  /**\n   * Flag informing whether undo is already performed (we don't perform synchronization in such case).\n   *\n   * @private\n   * @type {boolean}\n   */\n  #isPerformingUndo = false;\n  /**\n   * Flag informing whether redo is already performed (we don't perform synchronization in such case).\n   *\n   * @private\n   * @type {boolean}\n   */\n  #isPerformingRedo = false;\n  /**\n   * The HF's engine instance which will be synced.\n   *\n   * @private\n   * @type {HyperFormula|null}\n   */\n  #engine = null;\n  /**\n   * HyperFormula's sheet name.\n   *\n   * @private\n   * @type {string|null}\n   */\n  #sheetId = null;\n\n  constructor(rowIndexMapper, columnIndexMapper, postponeAction) {\n    this.#rowIndexSyncer = new AxisSyncer('row', rowIndexMapper, this);\n    this.#columnIndexSyncer = new AxisSyncer('column', columnIndexMapper, this);\n    this.#postponeAction = postponeAction;\n  }\n\n  /**\n   * Gets index synchronizer for a particular axis.\n   *\n   * @param {'row'|'column'} indexType Type of indexes.\n   * @returns {AxisSyncer}\n   */\n  getForAxis(indexType) {\n    if (indexType === 'row') {\n      return this.#rowIndexSyncer;\n    }\n\n    return this.#columnIndexSyncer;\n  }\n\n  /**\n   * Sets flag informing whether an undo action is already performed (we don't execute synchronization in such case).\n   *\n   * @param {boolean} flagValue Boolean value for the flag.\n   */\n  setPerformUndo(flagValue) {\n    this.#isPerformingUndo = flagValue;\n  }\n\n  /**\n   * Sets flag informing whether a redo action is already performed (we don't execute synchronization in such case).\n   *\n   * @param {boolean} flagValue Boolean value for the flag.\n   */\n  setPerformRedo(flagValue) {\n    this.#isPerformingRedo = flagValue;\n  }\n\n  /**\n   * Gets information whether redo or undo action is already performed (we don't execute synchronization in such case).\n   *\n   * @private\n   * @returns {boolean}\n   */\n  isPerformingUndoRedo() {\n    return this.#isPerformingUndo || this.#isPerformingRedo;\n  }\n\n  /**\n   * Gets HyperFormula's sheet id.\n   *\n   * @returns {string|null}\n   */\n  getSheetId() {\n    return this.#sheetId;\n  }\n\n  /**\n   * Gets engine instance that will be used for handled instance of Handsontable.\n   *\n   * @type {HyperFormula|null}\n   */\n  getEngine() {\n    return this.#engine;\n  }\n\n  /**\n   * Gets method which will postpone execution of some action (needed when synchronization endpoint isn't setup yet).\n   *\n   * @returns {Function}\n   */\n  getPostponeAction() {\n    return this.#postponeAction;\n  }\n\n  /**\n   * Setups a synchronization endpoint.\n   *\n   * @param {HyperFormula|null} engine The HF's engine instance which will be synced.\n   * @param {string|null} sheetId HyperFormula's sheet name.\n   */\n  setupSyncEndpoint(engine, sheetId) {\n    this.#engine = engine;\n    this.#sheetId = sheetId;\n\n    this.#rowIndexSyncer.init();\n    this.#columnIndexSyncer.init();\n  }\n}\n\nexport default IndexSyncer;\n","import { toUpperCaseFirst } from '../../../helpers/string';\nimport { getMoves } from '../../../helpers/moves';\n\n/**\n * @private\n * @class IndexSyncer\n * @description\n *\n * Indexes synchronizer responsible for providing logic for particular axis. It respects an idea to represent trimmed\n * elements in HF's engine to perform formulas calculations on them. It also provides method for translation from visual\n * row/column indexes to HF's row/column indexes.\n */\nclass AxisSyncer {\n  /**\n   * The axis for which the actions are performed.\n   *\n   * @private\n   * @type {'row'|'column'}\n   */\n  #axis;\n  /**\n   * Reference to index mapper.\n   *\n   * @private\n   * @type {IndexMapper}\n   */\n  #indexMapper;\n  /**\n   * The index synchronizer for both axis (is storing some more general information).\n   *\n   * @private\n   * @type {IndexSyncer}\n   */\n  #indexSyncer;\n  /**\n   * Sequence of physical indexes stored for watching changes and calculating some transformations.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  #indexesSequence = [];\n  /**\n   * List of moved HF indexes, stored before performing move on HOT to calculate transformation needed on HF's engine.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  #movedIndexes = [];\n  /**\n   * Final HF's place where to move indexes, stored before performing move on HOT to calculate transformation needed on HF's engine.\n   *\n   * @private\n   * @type {number|undefined}\n   */\n  #finalIndex;\n  /**\n   * List of removed HF indexes, stored before performing removal on HOT to calculate transformation needed on HF's engine.\n   *\n   * @private\n   * @type {Array<number>}\n   */\n  #removedIndexes = [];\n\n  constructor(axis, indexMapper, indexSyncer) {\n    this.#axis = axis;\n    this.#indexMapper = indexMapper;\n    this.#indexSyncer = indexSyncer;\n  }\n\n  /**\n   * Sets removed HF indexes (it should be done right before performing move on HOT).\n   *\n   * @param {Array<number>} removedIndexes List of removed physical indexes.\n   * @returns {Array<number>} List of removed visual indexes.\n   */\n  setRemovedHfIndexes(removedIndexes) {\n    this.#removedIndexes = removedIndexes.map((physicalIndex) => {\n      const visualIndex = this.#indexMapper.getVisualFromPhysicalIndex(physicalIndex);\n\n      return this.getHfIndexFromVisualIndex(visualIndex);\n    });\n\n    return this.#removedIndexes;\n  }\n\n  /**\n   * Gets removed HF indexes (right before performing removal on HOT).\n   *\n   * @returns {Array<number>} List of removed HF indexes.\n   */\n  getRemovedHfIndexes() {\n    return this.#removedIndexes;\n  }\n\n  /**\n   * Gets corresponding HyperFormula index for particular visual index. It's respecting the idea that HF's engine\n   * is fed also with trimmed indexes (business requirements for formula result calculation also for trimmed elements).\n   *\n   * @param {number} visualIndex Visual index.\n   * @returns {number}\n   */\n  getHfIndexFromVisualIndex(visualIndex) {\n    const indexesSequence = this.#indexMapper.getIndexesSequence();\n    const notTrimmedIndexes = this.#indexMapper.getNotTrimmedIndexes();\n\n    return indexesSequence.indexOf(notTrimmedIndexes[visualIndex]);\n  }\n\n  /**\n   * Synchronizes moves done on HOT to HF engine (based on previously calculated positions).\n   *\n   * @private\n   * @param {Array<{from: number, to: number}>} moves Calculated HF's move positions.\n   */\n  syncMoves(moves) {\n    const NUMBER_OF_MOVED_INDEXES = 1;\n    const SYNC_MOVE_METHOD_NAME = `move${toUpperCaseFirst(this.#axis)}s`;\n\n    this.#indexSyncer.getEngine().batch(() => {\n      moves.forEach((move) => {\n        const moveToTheSamePosition = move.from !== move.to;\n        // Moving from left to right (or top to bottom) to a line (drop index) right after already moved element.\n        const anotherMoveWithoutEffect = move.from + 1 !== move.to;\n\n        if (moveToTheSamePosition && anotherMoveWithoutEffect) {\n          this.#indexSyncer.getEngine()[SYNC_MOVE_METHOD_NAME](this.#indexSyncer.getSheetId(), move.from,\n            NUMBER_OF_MOVED_INDEXES, move.to);\n        }\n      });\n    });\n  }\n\n  /**\n   * Stores information about performed HOT moves for purpose of calculating where to move HF elements.\n   *\n   * @param {Array<number>} movedVisualIndexes Sequence of moved visual indexes for certain axis.\n   * @param {number} visualFinalIndex Final visual place where to move HOT indexes.\n   * @param {boolean} movePossible Indicates if it's possible to move HOT indexes to the desired position.\n   */\n  storeMovesInformation(movedVisualIndexes, visualFinalIndex, movePossible) {\n    if (movePossible === false) {\n      return;\n    }\n\n    this.#movedIndexes = movedVisualIndexes.map(index => this.getHfIndexFromVisualIndex(index));\n    this.#finalIndex = this.getHfIndexFromVisualIndex(visualFinalIndex);\n  }\n\n  /**\n   * Calculating where to move HF elements and performing already calculated moves.\n   *\n   * @param {boolean} movePossible Indicates if it was possible to move HOT indexes to the desired position.\n   * @param {boolean} orderChanged Indicates if order of HOT indexes was changed by move.\n   */\n  calculateAndSyncMoves(movePossible, orderChanged) {\n    if (this.#indexSyncer.isPerformingUndoRedo()) {\n      return;\n    }\n\n    if (movePossible === false || orderChanged === false) {\n      return;\n    }\n\n    const calculatedMoves = getMoves(this.#movedIndexes, this.#finalIndex, this.#indexMapper.getNumberOfIndexes());\n\n    if (this.#indexSyncer.getSheetId() === null) {\n      this.#indexSyncer.getPostponeAction(() => this.syncMoves(calculatedMoves));\n\n    } else {\n      this.syncMoves(calculatedMoves);\n    }\n  }\n\n  /**\n   * Gets callback for hook triggered after performing change of indexes order.\n   *\n   * @returns {Function}\n   */\n  getIndexesChangeSyncMethod() {\n    const SYNC_ORDER_CHANGE_METHOD_NAME = `set${toUpperCaseFirst(this.#axis)}Order`;\n\n    return (source) => {\n      if (this.#indexSyncer.isPerformingUndoRedo()) {\n        return;\n      }\n\n      const newSequence = this.#indexMapper.getIndexesSequence();\n\n      if (source === 'update' && newSequence.length > 0) {\n        const relativeTransformation = this.#indexesSequence.map(index => newSequence.indexOf(index));\n        const sheetDimensions = this.#indexSyncer.getEngine().getSheetDimensions(this.#indexSyncer.getSheetId());\n        let sizeForAxis;\n\n        if (this.#axis === 'row') {\n          sizeForAxis = sheetDimensions.height;\n\n        } else {\n          sizeForAxis = sheetDimensions.width;\n        }\n\n        const numberOfReorganisedIndexes = relativeTransformation.length;\n\n        // Sheet dimension can be changed by HF's engine for purpose of calculating values. It extends dependency\n        // graph to calculate values outside of a defined dataset. This part of code could be removed after resolving\n        // feature request from HF issue board (handsontable/hyperformula#1179).\n        for (let i = numberOfReorganisedIndexes; i < sizeForAxis; i += 1) {\n          relativeTransformation.push(i);\n        }\n\n        this.#indexSyncer.getEngine()[SYNC_ORDER_CHANGE_METHOD_NAME](this.#indexSyncer.getSheetId(),\n          relativeTransformation);\n      }\n\n      this.#indexesSequence = newSequence;\n    };\n  }\n\n  /**\n   * Initialize the AxisSyncer.\n   */\n  init() {\n    this.#indexesSequence = this.#indexMapper.getIndexesSequence();\n  }\n}\n\nexport default AxisSyncer;\n","/**\n * Gets first position where to move element (respecting the fact that some element will be sooner or later\n * taken out of the dataset in order to move them).\n *\n * @param {Array<number>} movedIndexes Sequence of moved indexes for certain axis.\n * @param {number} finalIndex Final place where to move rows.\n * @param {number} numberOfIndexes Number of indexes in a dataset.\n * @returns {number} Index informing where to move the first element.\n */\nfunction getMoveLine(movedIndexes, finalIndex, numberOfIndexes) {\n  const notMovedElements = Array.from(Array(numberOfIndexes).keys())\n    .filter(index => movedIndexes.includes(index) === false);\n\n  if (finalIndex === 0) {\n    return notMovedElements[finalIndex] ?? 0; // Moving before the first dataset's element.\n  }\n\n  return notMovedElements[finalIndex - 1] + 1; // Moving before another element.\n}\n\n/**\n * Gets initially calculated move positions.\n *\n * @param {Array<number>} movedIndexes Sequence of moved indexes for certain axis.\n * @param {number} moveLine Final place where to move rows.\n * @returns {Array<{from: number, to: number}>} Initially calculated move positions.\n */\nfunction getInitiallyCalculatedMoves(movedIndexes, moveLine) {\n  const moves = [];\n\n  movedIndexes.forEach((movedIndex) => {\n    const move = {\n      from: movedIndex,\n      to: moveLine,\n    };\n\n    moves.forEach((previouslyMovedIndex) => {\n      const isMovingFromEndToStart = previouslyMovedIndex.from > previouslyMovedIndex.to;\n      const isMovingElementBefore = previouslyMovedIndex.to <= move.from;\n      const isMovingAfterElement = previouslyMovedIndex.from > move.from;\n\n      if (isMovingAfterElement && isMovingElementBefore && isMovingFromEndToStart) {\n        move.from += 1;\n      }\n    });\n\n    // Moved element from right to left (or bottom to top).\n    if (move.from >= moveLine) {\n      moveLine += 1;\n    }\n\n    moves.push(move);\n  });\n\n  return moves;\n}\n\n/**\n * Gets finally calculated move positions (after adjusting).\n *\n * @param {Array<{from: number, to: number}>} moves Initially calculated move positions.\n * @returns {Array<{from: number, to: number}>} Finally calculated move positions (after adjusting).\n */\nfunction adjustedCalculatedMoves(moves) {\n  moves.forEach((move, index) => {\n    const nextMoved = moves.slice(index + 1);\n\n    nextMoved.forEach((nextMovedIndex) => {\n      const isMovingFromStartToEnd = nextMovedIndex.from < nextMovedIndex.to;\n\n      if (nextMovedIndex.from > move.from && isMovingFromStartToEnd) {\n        nextMovedIndex.from -= 1;\n      }\n    });\n  });\n\n  return moves;\n}\n\n/**\n * Get list of move positions.\n *\n * @param {Array<number>} movedIndexes Sequence of moved indexes for certain axis.\n * @param {number} finalIndex Final place where to move rows.\n * @param {number} numberOfIndexes Number of indexes in a dataset.\n * @returns {Array<{from: number, to: number}>}\n */\nexport function getMoves(movedIndexes, finalIndex, numberOfIndexes) {\n  const moves = getInitiallyCalculatedMoves(movedIndexes, getMoveLine(movedIndexes, finalIndex, numberOfIndexes));\n\n  return adjustedCalculatedMoves(moves);\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  HiddenColumns,\n} from './hiddenColumns';\n","import { BasePlugin } from '../base';\nimport { addClass } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport { arrayEach, arrayMap, arrayReduce } from '../../helpers/array';\nimport { isObject } from '../../helpers/object';\nimport { isUndefined } from '../../helpers/mixed';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport Hooks from '../../pluginHooks';\nimport hideColumnItem from './contextMenuItem/hideColumn';\nimport showColumnItem from './contextMenuItem/showColumn';\nimport { HidingMap } from '../../translations';\n\nimport './hiddenColumns.scss';\n\nHooks.getSingleton().register('beforeHideColumns');\nHooks.getSingleton().register('afterHideColumns');\nHooks.getSingleton().register('beforeUnhideColumns');\nHooks.getSingleton().register('afterUnhideColumns');\n\nexport const PLUGIN_KEY = 'hiddenColumns';\nexport const PLUGIN_PRIORITY = 310;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin HiddenColumns\n * @class HiddenColumns\n *\n * @description\n * The `HiddenColumns` plugin lets you [hide specified columns](@/guides/columns/column-hiding/column-hiding.md).\n *\n * \"Hiding a column\" means that the hidden column doesn't get rendered as a DOM element.\n *\n * The `HiddenColumns` plugin doesn't modify the source data,\n * and doesn't participate in data transformation\n * (the shape of the data returned by the [`getData*()` methods](@/api/core.md#getdata) stays intact).\n *\n * You can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `columns` | No | Array | - | [Hides specified columns by default](@/guides/columns/column-hiding/column-hiding.md#step-1-specify-columns-hidden-by-default) |\n * | `indicators` | No | Boolean | `false` | [Shows UI indicators](@/guides/columns/column-hiding/column-hiding.md#step-2-show-ui-indicators) |\n * | `copyPasteEnabled` | No | Boolean | `true` | [Sets up copy/paste behavior](@/guides/columns/column-hiding/column-hiding.md#step-4-set-up-copy-and-paste-behavior) |\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   hiddenColumns: {\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     columns: [1, 2, 5]\n *   }\n * });\n *\n * // access the `HiddenColumns` plugin's instance\n * const hiddenColumnsPlugin = hot.getPlugin('hiddenColumns');\n *\n * // hide a single column\n * hiddenColumnsPlugin.hideColumn(1);\n *\n * // hide multiple columns\n * hiddenColumnsPlugin.hideColumn(1, 2, 9);\n *\n * // hide multiple columns as an array\n * hiddenColumnsPlugin.hideColumns([1, 2, 9]);\n *\n * // unhide a single column\n * hiddenColumnsPlugin.showColumn(1);\n *\n * // unhide multiple columns\n * hiddenColumnsPlugin.showColumn(1, 2, 9);\n *\n * // unhide multiple columns as an array\n * hiddenColumnsPlugin.showColumns([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   hiddenColumns={{\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     columns: [1, 2, 5]\n *   }}\n * />\n *\n * // access the `HiddenColumns` plugin's instance\n * const hot = hotRef.current.hotInstance;\n * const hiddenColumnsPlugin = hot.getPlugin('hiddenColumns');\n *\n * // hide a single column\n * hiddenColumnsPlugin.hideColumn(1);\n *\n * // hide multiple columns\n * hiddenColumnsPlugin.hideColumn(1, 2, 9);\n *\n * // hide multiple columns as an array\n * hiddenColumnsPlugin.hideColumns([1, 2, 9]);\n *\n * // unhide a single column\n * hiddenColumnsPlugin.showColumn(1);\n *\n * // unhide multiple columns\n * hiddenColumnsPlugin.showColumn(1, 2, 9);\n *\n * // unhide multiple columns as an array\n * hiddenColumnsPlugin.showColumns([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n */\nexport class HiddenColumns extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Cached plugin settings.\n   *\n   * @private\n   * @type {object}\n   */\n  #settings = {};\n  /**\n   * Map of hidden columns by the plugin.\n   *\n   * @private\n   * @type {null|HidingMap}\n   */\n  #hiddenColumnsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link HiddenColumns#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (isObject(pluginSettings)) {\n      this.#settings = pluginSettings;\n\n      if (isUndefined(pluginSettings.copyPasteEnabled)) {\n        pluginSettings.copyPasteEnabled = true;\n      }\n    }\n\n    this.#hiddenColumnsMap = new HidingMap();\n    this.#hiddenColumnsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.columnIndexMapper.registerMap(this.pluginName, this.#hiddenColumnsMap);\n\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#onAfterContextMenuDefaultOptions(...args));\n    this.addHook('afterGetCellMeta', (row, col, cellProperties) => this.#onAfterGetCellMeta(row, col, cellProperties));\n    this.addHook('modifyColWidth', (width, col) => this.#onModifyColWidth(width, col), 2);\n    this.addHook('afterGetColHeader', (...args) => this.#onAfterGetColHeader(...args));\n    this.addHook('modifyCopyableRange', ranges => this.#onModifyCopyableRange(ranges));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`hiddenColumns`](@/api/options.md#hiddencolumns)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n    this.#settings = {};\n\n    super.disablePlugin();\n    this.resetCellsMeta();\n  }\n\n  /**\n   * Shows the provided columns.\n   *\n   * @param {number[]} columns Array of visual column indexes.\n   */\n  showColumns(columns) {\n    const currentHideConfig = this.getHiddenColumns();\n    const isValidConfig = this.isValidConfig(columns);\n    let destinationHideConfig = currentHideConfig;\n    const hidingMapValues = this.#hiddenColumnsMap.getValues().slice();\n    const isAnyColumnShowed = columns.length > 0;\n\n    if (isValidConfig && isAnyColumnShowed) {\n      const physicalColumns = columns.map(visualColumn => this.hot.toPhysicalColumn(visualColumn));\n\n      // Preparing new values for hiding map.\n      arrayEach(physicalColumns, (physicalColumn) => {\n        hidingMapValues[physicalColumn] = false;\n      });\n\n      // Preparing new hiding config.\n      destinationHideConfig = arrayReduce(hidingMapValues, (hiddenIndexes, isHidden, physicalIndex) => {\n        if (isHidden) {\n          hiddenIndexes.push(this.hot.toVisualColumn(physicalIndex));\n        }\n\n        return hiddenIndexes;\n      }, []);\n    }\n\n    const continueHiding = this.hot\n      .runHooks('beforeUnhideColumns', currentHideConfig, destinationHideConfig, isValidConfig && isAnyColumnShowed);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isValidConfig && isAnyColumnShowed) {\n      this.#hiddenColumnsMap.setValues(hidingMapValues);\n    }\n\n    // @TODO Should call once per render cycle, currently fired separately in different plugins\n    this.hot.view.adjustElementsSize();\n\n    this.hot.runHooks('afterUnhideColumns', currentHideConfig, destinationHideConfig,\n      isValidConfig && isAnyColumnShowed, isValidConfig && destinationHideConfig.length < currentHideConfig.length);\n  }\n\n  /**\n   * Shows a single column.\n   *\n   * @param {...number} column Visual column index.\n   */\n  showColumn(...column) {\n    this.showColumns(column);\n  }\n\n  /**\n   * Hides the columns provided in the array.\n   *\n   * @param {number[]} columns Array of visual column indexes.\n   */\n  hideColumns(columns) {\n    const currentHideConfig = this.getHiddenColumns();\n    const isConfigValid = this.isValidConfig(columns);\n    let destinationHideConfig = currentHideConfig;\n\n    if (isConfigValid) {\n      destinationHideConfig = Array.from(new Set(currentHideConfig.concat(columns)));\n    }\n\n    const continueHiding = this.hot\n      .runHooks('beforeHideColumns', currentHideConfig, destinationHideConfig, isConfigValid);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isConfigValid) {\n      this.hot.batchExecution(() => {\n        arrayEach(columns, (visualColumn) => {\n          this.#hiddenColumnsMap.setValueAtIndex(this.hot.toPhysicalColumn(visualColumn), true);\n        });\n      }, true);\n    }\n\n    this.hot.runHooks('afterHideColumns', currentHideConfig, destinationHideConfig, isConfigValid,\n      isConfigValid && destinationHideConfig.length > currentHideConfig.length);\n  }\n\n  /**\n   * Hides a single column.\n   *\n   * @param {...number} column Visual column index.\n   */\n  hideColumn(...column) {\n    this.hideColumns(column);\n  }\n\n  /**\n   * Returns an array of visual indexes of hidden columns.\n   *\n   * @returns {number[]}\n   */\n  getHiddenColumns() {\n    return arrayMap(this.#hiddenColumnsMap.getHiddenIndexes(), (physicalColumnIndex) => {\n      return this.hot.toVisualColumn(physicalColumnIndex);\n    });\n  }\n\n  /**\n   * Checks if the provided column is hidden.\n   *\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  isHidden(column) {\n    return this.#hiddenColumnsMap.getValueAtIndex(this.hot.toPhysicalColumn(column)) || false;\n  }\n\n  /**\n   * Get if trim config is valid. Check whether all of the provided column indexes are within the bounds of the table.\n   *\n   * @param {Array} hiddenColumns List of hidden column indexes.\n   * @returns {boolean}\n   */\n  isValidConfig(hiddenColumns) {\n    const nrOfColumns = this.hot.countCols();\n\n    if (Array.isArray(hiddenColumns) && hiddenColumns.length > 0) {\n      return hiddenColumns\n        .every(visualColumn => Number.isInteger(visualColumn) && visualColumn >= 0 && visualColumn < nrOfColumns);\n    }\n\n    return false;\n  }\n\n  /**\n   * Reset all rendered cells meta.\n   *\n   * @private\n   */\n  resetCellsMeta() {\n    arrayEach(this.hot.getCellsMeta(), (meta) => {\n      if (meta) {\n        meta.skipColumnOnPaste = false;\n      }\n    });\n  }\n\n  /**\n   * Adds the additional column width for the hidden column indicators.\n   *\n   * @param {number|undefined} width Column width.\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  #onModifyColWidth(width, column) {\n    // Hook is triggered internally only for the visible columns. Conditional will be handled for the API\n    // calls of the `getColWidth` function on not visible indexes.\n    if (this.isHidden(column)) {\n      return 0;\n    }\n\n    if (this.#settings.indicators && (this.isHidden(column + 1) || this.isHidden(column - 1))) {\n\n      // Add additional space for hidden column indicator.\n      if (typeof width === 'number' && this.hot.hasColHeaders()) {\n        return width + 15;\n      }\n    }\n  }\n\n  /**\n   * Sets the copy-related cell meta.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell properties.\n   */\n  #onAfterGetCellMeta(row, column, cellProperties) {\n    if (this.#settings.copyPasteEnabled === false && this.isHidden(column)) {\n      // Cell property handled by the `Autofill` and the `CopyPaste` plugins.\n      cellProperties.skipColumnOnPaste = true;\n    }\n\n    if (this.isHidden(column - 1)) {\n      cellProperties.className = cellProperties.className || '';\n\n      if (cellProperties.className.indexOf('afterHiddenColumn') === -1) {\n        cellProperties.className += ' afterHiddenColumn';\n      }\n    } else if (cellProperties.className) {\n      const classArr = cellProperties.className.split(' ');\n\n      if (classArr.length > 0) {\n        const containAfterHiddenColumn = classArr.indexOf('afterHiddenColumn');\n\n        if (containAfterHiddenColumn > -1) {\n          classArr.splice(containAfterHiddenColumn, 1);\n        }\n\n        cellProperties.className = classArr.join(' ');\n      }\n    }\n  }\n\n  /**\n   * Modifies the copyable range, accordingly to the provided config.\n   *\n   * @param {Array} ranges An array of objects defining copyable cells.\n   * @returns {Array}\n   */\n  #onModifyCopyableRange(ranges) {\n    // Ranges shouldn't be modified when `copyPasteEnabled` option is set to `true` (by default).\n    if (this.#settings.copyPasteEnabled) {\n      return ranges;\n    }\n\n    const newRanges = [];\n\n    const pushRange = (startRow, endRow, startCol, endCol) => {\n      newRanges.push({ startRow, endRow, startCol, endCol });\n    };\n\n    arrayEach(ranges, (range) => {\n      let isHidden = true;\n      let rangeStart = 0;\n\n      rangeEach(range.startCol, range.endCol, (visualColumn) => {\n        if (this.isHidden(visualColumn)) {\n          if (!isHidden) {\n            pushRange(range.startRow, range.endRow, rangeStart, visualColumn - 1);\n          }\n\n          isHidden = true;\n\n        } else {\n          if (isHidden) {\n            rangeStart = visualColumn;\n          }\n\n          if (visualColumn === range.endCol) {\n            pushRange(range.startRow, range.endRow, rangeStart, visualColumn);\n          }\n\n          isHidden = false;\n        }\n      });\n    });\n\n    return newRanges;\n  }\n\n  /**\n   * Adds the needed classes to the headers.\n   *\n   * @param {number} column Visual column index.\n   * @param {HTMLElement} TH Header's TH element.\n   */\n  #onAfterGetColHeader(column, TH) {\n    if (!this.#settings.indicators || column < 0) {\n      return;\n    }\n\n    const classList = [];\n\n    if (column >= 1 && this.isHidden(column - 1)) {\n      classList.push('afterHiddenColumn');\n    }\n\n    if (column < this.hot.countCols() - 1 && this.isHidden(column + 1)) {\n      classList.push('beforeHiddenColumn');\n    }\n\n    addClass(TH, classList);\n  }\n\n  /**\n   * Add Show-hide columns to context menu.\n   *\n   * @param {object} options An array of objects containing information about the pre-defined Context Menu items.\n   */\n  #onAfterContextMenuDefaultOptions(options) {\n    options.items.push(\n      {\n        name: SEPARATOR\n      },\n      hideColumnItem(this),\n      showColumnItem(this)\n    );\n  }\n\n  /**\n   * On map initialized hook callback.\n   */\n  #onMapInit() {\n    if (Array.isArray(this.#settings.columns)) {\n      this.hideColumns(this.#settings.columns);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#settings = null;\n    this.#hiddenColumnsMap = null;\n\n    super.destroy();\n  }\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenColumns} hiddenColumnsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function hideColumnItem(hiddenColumnsPlugin) {\n  return {\n    key: 'hidden_columns_hide',\n    name() {\n      const selection = this.getSelectedLast();\n      let pluralForm = 0;\n\n      if (Array.isArray(selection)) {\n        const [, fromColumn, , toColumn] = selection;\n\n        if (fromColumn - toColumn !== 0) {\n          pluralForm = 1;\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_HIDE_COLUMN, pluralForm);\n    },\n    callback() {\n      const { from, to } = this.getSelectedRangeLast();\n      const start = Math.max(Math.min(from.col, to.col), 0);\n      const end = Math.max(from.col, to.col);\n      const columnsToHide = [];\n\n      for (let visualColumn = start; visualColumn <= end; visualColumn += 1) {\n        columnsToHide.push(visualColumn);\n      }\n\n      hiddenColumnsPlugin.hideColumns(columnsToHide);\n\n      const lastHiddenColumn = columnsToHide[columnsToHide.length - 1];\n      const columnToSelect = this.columnIndexMapper.getNearestNotHiddenIndex(lastHiddenColumn, 1, true);\n\n      if (Number.isInteger(columnToSelect) && columnToSelect >= 0) {\n        this.selectColumns(columnToSelect);\n\n      } else {\n        this.deselectCell();\n      }\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    disabled: false,\n    hidden() {\n      return !(this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner());\n    }\n  };\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenColumns} hiddenColumnsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function showColumnItem(hiddenColumnsPlugin) {\n  const columns = [];\n\n  return {\n    key: 'hidden_columns_show',\n    name() {\n      const pluralForm = columns.length > 1 ? 1 : 0;\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_SHOW_COLUMN, pluralForm);\n    },\n    callback() {\n      if (columns.length === 0) {\n        return;\n      }\n\n      let startVisualColumn = columns[0];\n      let endVisualColumn = columns[columns.length - 1];\n\n      // Add to the selection one more visual column on the left.\n      startVisualColumn = this.columnIndexMapper\n        .getNearestNotHiddenIndex(startVisualColumn - 1, -1) ?? 0;\n      // Add to the selection one more visual column on the right.\n      endVisualColumn = this.columnIndexMapper\n        .getNearestNotHiddenIndex(endVisualColumn + 1, 1) ?? this.countCols() - 1;\n\n      hiddenColumnsPlugin.showColumns(columns);\n\n      // We render columns at first. It was needed for getting fixed columns.\n      // Please take a look at #6864 for broader description.\n      this.render();\n      this.view.adjustElementsSize();\n\n      const allColumnsSelected = endVisualColumn - startVisualColumn + 1 === this.countCols();\n\n      // When all headers needs to be selected then do nothing. The header selection is\n      // automatically handled by corner click.\n      if (!allColumnsSelected) {\n        this.selectColumns(startVisualColumn, endVisualColumn);\n      }\n    },\n    disabled: false,\n    hidden() {\n      const hiddenPhysicalColumns = arrayMap(hiddenColumnsPlugin.getHiddenColumns(), (visualColumnIndex) => {\n        return this.toPhysicalColumn(visualColumnIndex);\n      });\n\n      if (!(this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner()) ||\n          hiddenPhysicalColumns.length < 1) {\n        return true;\n      }\n\n      columns.length = 0;\n\n      const selectedRangeLast = this.getSelectedRangeLast();\n      const visualStartColumn = selectedRangeLast.getTopStartCorner().col;\n      const visualEndColumn = selectedRangeLast.getBottomEndCorner().col;\n      const columnIndexMapper = this.columnIndexMapper;\n      const renderableStartColumn = columnIndexMapper.getRenderableFromVisualIndex(visualStartColumn);\n      const renderableEndColumn = columnIndexMapper.getRenderableFromVisualIndex(visualEndColumn);\n      const notTrimmedColumnIndexes = columnIndexMapper.getNotTrimmedIndexes();\n      const physicalColumnIndexes = [];\n\n      if (visualStartColumn !== visualEndColumn) {\n        const visualColumnsInRange = visualEndColumn - visualStartColumn + 1;\n        const renderedColumnsInRange = renderableEndColumn - renderableStartColumn + 1;\n\n        // Collect not trimmed columns if there are some hidden columns in the selection range.\n        if (visualColumnsInRange > renderedColumnsInRange) {\n          const physicalIndexesInRange = notTrimmedColumnIndexes.slice(visualStartColumn, visualEndColumn + 1);\n\n          physicalColumnIndexes.push(...physicalIndexesInRange\n            .filter(physicalIndex => hiddenPhysicalColumns.includes(physicalIndex)));\n        }\n\n      // Handled column is the first rendered index and there are some visual indexes before it.\n      } else if (renderableStartColumn === 0 && renderableStartColumn < visualStartColumn) {\n        // not trimmed indexes -> array of mappings from visual (native array's index) to physical indexes (value).\n        physicalColumnIndexes.push(...notTrimmedColumnIndexes.slice(0, visualStartColumn)); // physical indexes\n\n      // When all columns are hidden and the context menu is triggered using top-left corner.\n      } else if (renderableStartColumn === null) {\n        // Show all hidden columns.\n        physicalColumnIndexes.push(...notTrimmedColumnIndexes.slice(0, this.countCols()));\n\n      } else {\n        const lastVisualIndex = this.countCols() - 1;\n        const lastRenderableIndex = columnIndexMapper.getRenderableFromVisualIndex(\n          columnIndexMapper.getNearestNotHiddenIndex(lastVisualIndex, -1)\n        );\n\n        // Handled column is the last rendered index and there are some visual indexes after it.\n        if (renderableEndColumn === lastRenderableIndex && lastVisualIndex > visualEndColumn) {\n          physicalColumnIndexes.push(...notTrimmedColumnIndexes.slice(visualEndColumn + 1));\n        }\n      }\n\n      arrayEach(physicalColumnIndexes, (physicalColumnIndex) => {\n        columns.push(this.toVisualColumn(physicalColumnIndex));\n      });\n\n      return columns.length === 0;\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  HiddenRows,\n} from './hiddenRows';\n","import { BasePlugin } from '../base';\nimport { addClass } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport { arrayEach, arrayMap, arrayReduce } from '../../helpers/array';\nimport { isObject } from '../../helpers/object';\nimport { isUndefined } from '../../helpers/mixed';\nimport { SEPARATOR } from '../contextMenu/predefinedItems';\nimport Hooks from '../../pluginHooks';\nimport hideRowItem from './contextMenuItem/hideRow';\nimport showRowItem from './contextMenuItem/showRow';\nimport { HidingMap } from '../../translations';\n\nimport './hiddenRows.css';\n\nHooks.getSingleton().register('beforeHideRows');\nHooks.getSingleton().register('afterHideRows');\nHooks.getSingleton().register('beforeUnhideRows');\nHooks.getSingleton().register('afterUnhideRows');\n\nexport const PLUGIN_KEY = 'hiddenRows';\nexport const PLUGIN_PRIORITY = 320;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin HiddenRows\n * @class HiddenRows\n *\n * @description\n * The `HiddenRows` plugin lets you [hide specified rows](@/guides/rows/row-hiding/row-hiding.md).\n *\n * \"Hiding a row\" means that the hidden row doesn't get rendered as a DOM element.\n *\n * The `HiddenRows` plugin doesn't modify the source data,\n * and doesn't participate in data transformation\n * (the shape of the data returned by the [`getData*()` methods](@/api/core.md#getdata) stays intact).\n *\n * You can set the following configuration options:\n *\n * | Option | Required | Type | Default | Description |\n * |---|---|---|---|---|\n * | `rows` | No | Array | - | [Hides specified rows by default](@/guides/rows/row-hiding/row-hiding.md#step-1-specify-rows-hidden-by-default) |\n * | `indicators` | No | Boolean | `false` | [Shows UI indicators](@/guides/rows/row-hiding/row-hiding.md#step-2-show-ui-indicators) |\n * | `copyPasteEnabled` | No | Boolean | `true` | [Sets up copy/paste behavior](@/guides/rows/row-hiding/row-hiding.md#step-4-set-up-copy-and-paste-behavior) |\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   hiddenRows: {\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     rows: [1, 2, 5]\n *   }\n * });\n *\n * // access the `HiddenRows` plugin's instance\n * const hiddenRowsPlugin = hot.getPlugin('hiddenRows');\n *\n * // hide a single row\n * hiddenRowsPlugin.hideRow(1);\n *\n * // hide multiple rows\n * hiddenRowsPlugin.hideRow(1, 2, 9);\n *\n * // hide multiple rows as an array\n * hiddenRowsPlugin.hideRows([1, 2, 9]);\n *\n * // unhide a single row\n * hiddenRowsPlugin.showRow(1);\n *\n * // unhide multiple rows\n * hiddenRowsPlugin.showRow(1, 2, 9);\n *\n * // unhide multiple rows as an array\n * hiddenRowsPlugin.showRows([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   hiddenRows={{\n *     copyPasteEnabled: true,\n *     indicators: true,\n *     rows: [1, 2, 5]\n *   }}\n * />\n *\n * // access the `HiddenRows` plugin's instance\n * const hot = hotRef.current.hotInstance;\n * const hiddenRowsPlugin = hot.getPlugin('hiddenRows');\n *\n * // hide a single row\n * hiddenRowsPlugin.hideRow(1);\n *\n * // hide multiple rows\n * hiddenRowsPlugin.hideRow(1, 2, 9);\n *\n * // hide multiple rows as an array\n * hiddenRowsPlugin.hideRows([1, 2, 9]);\n *\n * // unhide a single row\n * hiddenRowsPlugin.showRow(1);\n *\n * // unhide multiple rows\n * hiddenRowsPlugin.showRow(1, 2, 9);\n *\n * // unhide multiple rows as an array\n * hiddenRowsPlugin.showRows([1, 2, 9]);\n *\n * // to see your changes, re-render your Handsontable instance\n * hot.render();\n * ```\n * :::\n */\nexport class HiddenRows extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Cached settings from Handsontable settings.\n   *\n   * @private\n   * @type {object}\n   */\n  #settings = {};\n  /**\n   * Map of hidden rows by the plugin.\n   *\n   * @private\n   * @type {HidingMap|null}\n   */\n  #hiddenRowsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link HiddenRows#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (isObject(pluginSettings)) {\n      this.#settings = pluginSettings;\n\n      if (isUndefined(pluginSettings.copyPasteEnabled)) {\n        pluginSettings.copyPasteEnabled = true;\n      }\n    }\n\n    this.#hiddenRowsMap = new HidingMap();\n    this.#hiddenRowsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.rowIndexMapper.registerMap(this.pluginName, this.#hiddenRowsMap);\n\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#onAfterContextMenuDefaultOptions(...args));\n    this.addHook('afterGetCellMeta', (row, col, cellProperties) => this.#onAfterGetCellMeta(row, col, cellProperties));\n    this.addHook('modifyRowHeight', (height, row) => this.#onModifyRowHeight(height, row));\n    this.addHook('afterGetRowHeader', (...args) => this.#onAfterGetRowHeader(...args));\n    this.addHook('modifyCopyableRange', ranges => this.#onModifyCopyableRange(ranges));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`hiddenRows`](@/api/options.md#hiddenrows)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    this.#settings = {};\n\n    super.disablePlugin();\n    this.resetCellsMeta();\n  }\n\n  /**\n   * Shows the rows provided in the array.\n   *\n   * @param {number[]} rows Array of visual row indexes.\n   */\n  showRows(rows) {\n    const currentHideConfig = this.getHiddenRows();\n    const isValidConfig = this.isValidConfig(rows);\n    let destinationHideConfig = currentHideConfig;\n    const hidingMapValues = this.#hiddenRowsMap.getValues().slice();\n    const isAnyRowShowed = rows.length > 0;\n\n    if (isValidConfig && isAnyRowShowed) {\n      const physicalRows = rows.map(visualRow => this.hot.toPhysicalRow(visualRow));\n\n      // Preparing new values for hiding map.\n      arrayEach(physicalRows, (physicalRow) => {\n        hidingMapValues[physicalRow] = false;\n      });\n\n      // Preparing new hiding config.\n      destinationHideConfig = arrayReduce(hidingMapValues, (hiddenIndexes, isHidden, physicalIndex) => {\n        if (isHidden) {\n          hiddenIndexes.push(this.hot.toVisualRow(physicalIndex));\n        }\n\n        return hiddenIndexes;\n      }, []);\n    }\n\n    const continueHiding = this.hot\n      .runHooks('beforeUnhideRows', currentHideConfig, destinationHideConfig, isValidConfig && isAnyRowShowed);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isValidConfig && isAnyRowShowed) {\n      this.#hiddenRowsMap.setValues(hidingMapValues);\n    }\n\n    this.hot.runHooks('afterUnhideRows', currentHideConfig, destinationHideConfig, isValidConfig && isAnyRowShowed,\n      isValidConfig && destinationHideConfig.length < currentHideConfig.length);\n  }\n\n  /**\n   * Shows the row provided as row index (counting from 0).\n   *\n   * @param {...number} row Visual row index.\n   */\n  showRow(...row) {\n    this.showRows(row);\n  }\n\n  /**\n   * Hides the rows provided in the array.\n   *\n   * @param {number[]} rows Array of visual row indexes.\n   */\n  hideRows(rows) {\n    const currentHideConfig = this.getHiddenRows();\n    const isConfigValid = this.isValidConfig(rows);\n    let destinationHideConfig = currentHideConfig;\n\n    if (isConfigValid) {\n      destinationHideConfig = Array.from(new Set(currentHideConfig.concat(rows)));\n    }\n\n    const continueHiding = this.hot.runHooks('beforeHideRows', currentHideConfig, destinationHideConfig, isConfigValid);\n\n    if (continueHiding === false) {\n      return;\n    }\n\n    if (isConfigValid) {\n      this.hot.batchExecution(() => {\n        arrayEach(rows, (visualRow) => {\n          this.#hiddenRowsMap.setValueAtIndex(this.hot.toPhysicalRow(visualRow), true);\n        });\n      }, true);\n    }\n\n    this.hot.runHooks('afterHideRows', currentHideConfig, destinationHideConfig, isConfigValid,\n      isConfigValid && destinationHideConfig.length > currentHideConfig.length);\n  }\n\n  /**\n   * Hides the row provided as row index (counting from 0).\n   *\n   * @param {...number} row Visual row index.\n   */\n  hideRow(...row) {\n    this.hideRows(row);\n  }\n\n  /**\n   * Returns an array of visual indexes of hidden rows.\n   *\n   * @returns {number[]}\n   */\n  getHiddenRows() {\n    return arrayMap(this.#hiddenRowsMap.getHiddenIndexes(), (physicalRowIndex) => {\n      return this.hot.toVisualRow(physicalRowIndex);\n    });\n  }\n\n  /**\n   * Checks if the provided row is hidden.\n   *\n   * @param {number} row Visual row index.\n   * @returns {boolean}\n   */\n  isHidden(row) {\n    return this.#hiddenRowsMap.getValueAtIndex(this.hot.toPhysicalRow(row)) || false;\n  }\n\n  /**\n   * Checks whether all of the provided row indexes are within the bounds of the table.\n   *\n   * @param {Array} hiddenRows List of hidden visual row indexes.\n   * @returns {boolean}\n   */\n  isValidConfig(hiddenRows) {\n    const nrOfRows = this.hot.countRows();\n\n    if (Array.isArray(hiddenRows) && hiddenRows.length > 0) {\n      return hiddenRows.every(visualRow => Number.isInteger(visualRow) && visualRow >= 0 && visualRow < nrOfRows);\n    }\n\n    return false;\n  }\n\n  /**\n   * Resets all rendered cells meta.\n   *\n   * @private\n   */\n  resetCellsMeta() {\n    arrayEach(this.hot.getCellsMeta(), (meta) => {\n      if (meta) {\n        meta.skipRowOnPaste = false;\n      }\n    });\n  }\n\n  /**\n   * Adds the additional row height for the hidden row indicators.\n   *\n   * @param {number|undefined} height Row height.\n   * @param {number} row Visual row index.\n   * @returns {number}\n   */\n  #onModifyRowHeight(height, row) {\n    // Hook is triggered internally only for the visible rows. Conditional will be handled for the API\n    // calls of the `getRowHeight` function on not visible indexes.\n    if (this.isHidden(row)) {\n      return 0;\n    }\n\n    return height;\n  }\n\n  /**\n   * Sets the copy-related cell meta.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @param {object} cellProperties Object containing the cell properties.\n   */\n  #onAfterGetCellMeta(row, column, cellProperties) {\n    if (this.#settings.copyPasteEnabled === false && this.isHidden(row)) {\n      // Cell property handled by the `Autofill` and the `CopyPaste` plugins.\n      cellProperties.skipRowOnPaste = true;\n    }\n\n    if (this.isHidden(row - 1)) {\n      cellProperties.className = cellProperties.className || '';\n\n      if (cellProperties.className.indexOf('afterHiddenRow') === -1) {\n        cellProperties.className += ' afterHiddenRow';\n      }\n    } else if (cellProperties.className) {\n      const classArr = cellProperties.className.split(' ');\n\n      if (classArr.length > 0) {\n        const containAfterHiddenRow = classArr.indexOf('afterHiddenRow');\n\n        if (containAfterHiddenRow > -1) {\n          classArr.splice(containAfterHiddenRow, 1);\n        }\n\n        cellProperties.className = classArr.join(' ');\n      }\n    }\n  }\n\n  /**\n   * Modifies the copyable range, accordingly to the provided config.\n   *\n   * @param {Array} ranges An array of objects defining copyable cells.\n   * @returns {Array}\n   */\n  #onModifyCopyableRange(ranges) {\n    // Ranges shouldn't be modified when `copyPasteEnabled` option is set to `true` (by default).\n    if (this.#settings.copyPasteEnabled) {\n      return ranges;\n    }\n\n    const newRanges = [];\n\n    const pushRange = (startRow, endRow, startCol, endCol) => {\n      newRanges.push({ startRow, endRow, startCol, endCol });\n    };\n\n    arrayEach(ranges, (range) => {\n      let isHidden = true;\n      let rangeStart = 0;\n\n      rangeEach(range.startRow, range.endRow, (visualRow) => {\n        if (this.isHidden(visualRow)) {\n          if (!isHidden) {\n            pushRange(rangeStart, visualRow - 1, range.startCol, range.endCol);\n          }\n\n          isHidden = true;\n\n        } else {\n          if (isHidden) {\n            rangeStart = visualRow;\n          }\n\n          if (visualRow === range.endRow) {\n            pushRange(rangeStart, visualRow, range.startCol, range.endCol);\n          }\n\n          isHidden = false;\n        }\n      });\n    });\n\n    return newRanges;\n  }\n\n  /**\n   * Adds the needed classes to the headers.\n   *\n   * @param {number} row Visual row index.\n   * @param {HTMLElement} TH Header's TH element.\n   */\n  #onAfterGetRowHeader(row, TH) {\n    if (!this.#settings.indicators || row < 0) {\n      return;\n    }\n\n    const classList = [];\n\n    if (row >= 1 && this.isHidden(row - 1)) {\n      classList.push('afterHiddenRow');\n    }\n\n    if (row < this.hot.countRows() - 1 && this.isHidden(row + 1)) {\n      classList.push('beforeHiddenRow');\n    }\n\n    addClass(TH, classList);\n  }\n\n  /**\n   * Add Show-hide rows to context menu.\n   *\n   * @param {object} options An array of objects containing information about the pre-defined Context Menu items.\n   */\n  #onAfterContextMenuDefaultOptions(options) {\n    options.items.push(\n      {\n        name: SEPARATOR\n      },\n      hideRowItem(this),\n      showRowItem(this)\n    );\n  }\n\n  /**\n   * On map initialized hook callback.\n   */\n  #onMapInit() {\n    if (Array.isArray(this.#settings.rows)) {\n      this.hideRows(this.#settings.rows);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#settings = null;\n    this.#hiddenRowsMap = null;\n\n    super.destroy();\n  }\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenRows} hiddenRowsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function hideRowItem(hiddenRowsPlugin) {\n  return {\n    key: 'hidden_rows_hide',\n    name() {\n      const selection = this.getSelectedLast();\n      let pluralForm = 0;\n\n      if (Array.isArray(selection)) {\n        const [fromRow, , toRow] = selection;\n\n        if (fromRow - toRow !== 0) {\n          pluralForm = 1;\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_HIDE_ROW, pluralForm);\n    },\n    callback() {\n      const { from, to } = this.getSelectedRangeLast();\n      const start = Math.max(Math.min(from.row, to.row), 0);\n      const end = Math.max(from.row, to.row);\n      const rowsToHide = [];\n\n      for (let visualRow = start; visualRow <= end; visualRow += 1) {\n        rowsToHide.push(visualRow);\n      }\n\n      hiddenRowsPlugin.hideRows(rowsToHide);\n\n      const lastHiddenRow = rowsToHide[rowsToHide.length - 1];\n      const rowToSelect = this.rowIndexMapper.getNearestNotHiddenIndex(lastHiddenRow, 1, true);\n\n      if (Number.isInteger(rowToSelect) && rowToSelect >= 0) {\n        this.selectRows(rowToSelect);\n\n      } else {\n        this.deselectCell();\n      }\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    disabled: false,\n    hidden() {\n      return !(this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner());\n    }\n  };\n}\n","import { arrayEach, arrayMap } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\n\n/**\n * @param {HiddenRows} hiddenRowsPlugin The plugin instance.\n * @returns {object}\n */\nexport default function showRowItem(hiddenRowsPlugin) {\n  const rows = [];\n\n  return {\n    key: 'hidden_rows_show',\n    name() {\n      const pluralForm = rows.length > 1 ? 1 : 0;\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_SHOW_ROW, pluralForm);\n    },\n    callback() {\n      if (rows.length === 0) {\n        return;\n      }\n\n      let startVisualRow = rows[0];\n      let endVisualRow = rows[rows.length - 1];\n\n      // Add to the selection one more visual row on the top.\n      startVisualRow = this.rowIndexMapper\n        .getNearestNotHiddenIndex(startVisualRow - 1, -1) ?? 0;\n      // Add to the selection one more visual row on the bottom.\n      endVisualRow = this.rowIndexMapper\n        .getNearestNotHiddenIndex(endVisualRow + 1, 1) ?? this.countRows() - 1;\n\n      hiddenRowsPlugin.showRows(rows);\n\n      // We render rows at first. It was needed for getting fixed rows.\n      // Please take a look at #6864 for broader description.\n      this.render();\n      this.view.adjustElementsSize();\n\n      const allRowsSelected = endVisualRow - startVisualRow + 1 === this.countRows();\n\n      // When all headers needs to be selected then do nothing. The header selection is\n      // automatically handled by corner click.\n      if (!allRowsSelected) {\n        this.selectRows(startVisualRow, endVisualRow);\n      }\n    },\n    disabled: false,\n    hidden() {\n      const hiddenPhysicalRows = arrayMap(hiddenRowsPlugin.getHiddenRows(), (visualRowIndex) => {\n        return this.toPhysicalRow(visualRowIndex);\n      });\n\n      if (!(this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner()) ||\n        hiddenPhysicalRows.length < 1) {\n        return true;\n      }\n\n      rows.length = 0;\n\n      const selectedRangeLast = this.getSelectedRangeLast();\n      const visualStartRow = selectedRangeLast.getTopStartCorner().row;\n      const visualEndRow = selectedRangeLast.getBottomEndCorner().row;\n      const rowIndexMapper = this.rowIndexMapper;\n      const renderableStartRow = rowIndexMapper.getRenderableFromVisualIndex(visualStartRow);\n      const renderableEndRow = rowIndexMapper.getRenderableFromVisualIndex(visualEndRow);\n      const notTrimmedRowIndexes = rowIndexMapper.getNotTrimmedIndexes();\n      const physicalRowIndexes = [];\n\n      if (visualStartRow !== visualEndRow) {\n        const visualRowsInRange = visualEndRow - visualStartRow + 1;\n        const renderedRowsInRange = renderableEndRow - renderableStartRow + 1;\n\n        // Collect not trimmed rows if there are some hidden rows in the selection range.\n        if (visualRowsInRange > renderedRowsInRange) {\n          const physicalIndexesInRange = notTrimmedRowIndexes.slice(visualStartRow, visualEndRow + 1);\n\n          physicalRowIndexes.push(\n            ...physicalIndexesInRange.filter(physicalIndex => hiddenPhysicalRows.includes(physicalIndex))\n          );\n        }\n\n        // Handled row is the first rendered index and there are some visual indexes before it.\n      } else if (renderableStartRow === 0 && renderableStartRow < visualStartRow) {\n        // not trimmed indexes -> array of mappings from visual (native array's index) to physical indexes (value).\n        physicalRowIndexes.push(...notTrimmedRowIndexes.slice(0, visualStartRow)); // physical indexes\n\n        // When all rows are hidden and the context menu is triggered using top-left corner.\n      } else if (renderableStartRow === null) {\n        // Show all hidden rows.\n        physicalRowIndexes.push(...notTrimmedRowIndexes.slice(0, this.countRows()));\n\n      } else {\n        const lastVisualIndex = this.countRows() - 1;\n        const lastRenderableIndex = rowIndexMapper.getRenderableFromVisualIndex(\n          rowIndexMapper.getNearestNotHiddenIndex(lastVisualIndex, -1)\n        );\n\n        // Handled row is the last rendered index and there are some visual indexes after it.\n        if (renderableEndRow === lastRenderableIndex && lastVisualIndex > visualEndRow) {\n          physicalRowIndexes.push(...notTrimmedRowIndexes.slice(visualEndRow + 1));\n        }\n      }\n\n      arrayEach(physicalRowIndexes, (physicalRowIndex) => {\n        rows.push(this.toVisualRow(physicalRowIndex));\n      });\n\n      return rows.length === 0;\n    }\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualColumnFreeze,\n} from './manualColumnFreeze';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport freezeColumnItem from './contextMenuItem/freezeColumn';\nimport unfreezeColumnItem from './contextMenuItem/unfreezeColumn';\n\nimport './manualColumnFreeze.css';\n\nHooks.getSingleton().register('beforeColumnFreeze');\nHooks.getSingleton().register('afterColumnFreeze');\nHooks.getSingleton().register('beforeColumnUnfreeze');\nHooks.getSingleton().register('afterColumnUnfreeze');\n\nexport const PLUGIN_KEY = 'manualColumnFreeze';\nexport const PLUGIN_PRIORITY = 110;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualColumnFreeze\n * @class ManualColumnFreeze\n *\n * @description\n * This plugin allows to manually \"freeze\" and \"unfreeze\" a column using an entry in the Context Menu or using API.\n * You can turn it on by setting a {@link Options#manualColumnFreeze} property to `true`.\n *\n * @example\n * ```js\n * // Enables the plugin\n * manualColumnFreeze: true,\n * ```\n */\nexport class ManualColumnFreeze extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Determines when the moving operation is allowed.\n   *\n   * @type {boolean}\n   */\n  #afterFirstUse = false;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualColumnFreeze#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterContextMenuDefaultOptions', options => this.#addContextMenuEntry(options));\n    this.addHook('beforeColumnMove', (columns, finalIndex) => this.#onBeforeColumnMove(columns, finalIndex));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#afterFirstUse = false;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualColumnFreeze`](@/api/options.md#manualcolumnfreeze)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Freezes the specified column (adds it to fixed columns).\n   *\n   * `freezeColumn()` doesn't re-render the table,\n   * so you need to call the `render()` method afterward.\n   *\n   * @param {number} column Visual column index.\n   */\n  freezeColumn(column) {\n    const settings = this.hot.getSettings();\n    // columns are already fixed (frozen)\n    const freezePerformed = settings.fixedColumnsStart < this.hot.countCols()\n      && column > settings.fixedColumnsStart - 1;\n\n    if (!this.#afterFirstUse) {\n      this.#afterFirstUse = true;\n    }\n\n    const beforeColumnFreezeHook = this.hot.runHooks('beforeColumnFreeze', column, freezePerformed);\n\n    if (beforeColumnFreezeHook === false) {\n      return;\n    }\n\n    if (freezePerformed) {\n      this.hot.columnIndexMapper.moveIndexes(column, settings.fixedColumnsStart);\n\n      // Since 12.0.0, the \"fixedColumnsLeft\" is replaced with the \"fixedColumnsStart\" option.\n      // However, keeping the old name still in effect. When both option names are used together,\n      // the error is thrown. To prevent that, the plugin needs to modify the original option key\n      // to bypass the validation.\n      settings._fixedColumnsStart += 1;\n    }\n\n    this.hot.runHooks('afterColumnFreeze', column, freezePerformed);\n  }\n\n  /**\n   * Unfreezes the given column (remove it from fixed columns and bring to it's previous position).\n   *\n   * @param {number} column Visual column index.\n   */\n  unfreezeColumn(column) {\n    const settings = this.hot.getSettings();\n    // columns are not fixed (not frozen)\n    const unfreezePerformed = settings.fixedColumnsStart > 0 && (column <= settings.fixedColumnsStart - 1);\n\n    if (!this.#afterFirstUse) {\n      this.#afterFirstUse = true;\n    }\n\n    const beforeColumnUnfreezeHook = this.hot.runHooks('beforeColumnUnfreeze', column, unfreezePerformed);\n\n    if (beforeColumnUnfreezeHook === false) {\n      return;\n    }\n\n    if (unfreezePerformed) {\n      // Since 12.0.0, the \"fixedColumnsLeft\" is replaced with the \"fixedColumnsStart\" option.\n      // However, keeping the old name still in effect. When both option names are used together,\n      // the error is thrown. To prevent that, the plugin needs to modify the original option key\n      // to bypass the validation.\n      settings._fixedColumnsStart -= 1;\n\n      this.hot.columnIndexMapper.moveIndexes(column, settings.fixedColumnsStart);\n    }\n\n    this.hot.runHooks('afterColumnUnfreeze', column, unfreezePerformed);\n  }\n\n  /**\n   * Adds the manualColumnFreeze context menu entries.\n   *\n   * @private\n   * @param {object} options Context menu options.\n   */\n  #addContextMenuEntry(options) {\n    options.items.push(\n      { name: '---------' },\n      freezeColumnItem(this),\n      unfreezeColumnItem(this)\n    );\n  }\n\n  /**\n   * Prevents moving the columns from/to fixed area.\n   *\n   * @private\n   * @param {Array} columns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * @returns {boolean|undefined}\n   */\n  #onBeforeColumnMove(columns, finalIndex) {\n    if (this.#afterFirstUse) {\n      const freezeLine = this.hot.getSettings().fixedColumnsStart;\n\n      // Moving any column before the \"freeze line\" isn't possible.\n      if (finalIndex < freezeLine) {\n        return false;\n      }\n\n      // Moving frozen column isn't possible.\n      if (columns.some(column => column < freezeLine)) {\n        return false;\n      }\n    }\n  }\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {ManualColumnFreeze} manualColumnFreezePlugin The plugin instance.\n * @returns {object}\n */\nexport default function freezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'freeze_column',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_FREEZE_COLUMN);\n    },\n    callback(key, selected) {\n      const [{ start: { col: selectedColumn } }] = selected;\n\n      manualColumnFreezePlugin.freezeColumn(selectedColumn);\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    hidden() {\n      const selection = this.getSelectedRange();\n      let hide = false;\n\n      if (selection === undefined) {\n        hide = true;\n\n      } else if (selection.length > 1) {\n        hide = true;\n\n      } else if ((selection[0].from.col !== selection[0].to.col) ||\n                 (selection[0].from.col <= this.getSettings().fixedColumnsStart - 1)) {\n        hide = true;\n      }\n\n      return hide;\n    },\n  };\n}\n","import * as C from '../../../i18n/constants';\n\n/**\n * @param {ManualColumnFreeze} manualColumnFreezePlugin The plugin instance.\n * @returns {object}\n */\nexport default function unfreezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'unfreeze_column',\n    name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN);\n    },\n    callback(key, selected) {\n      const [{ start: { col: selectedColumn } }] = selected;\n\n      manualColumnFreezePlugin.unfreezeColumn(selectedColumn);\n\n      this.render();\n      this.view.adjustElementsSize();\n    },\n    hidden() {\n      const selection = this.getSelectedRange();\n      let hide = false;\n\n      if (selection === undefined) {\n        hide = true;\n\n      } else if (selection.length > 1) {\n        hide = true;\n\n      } else if ((selection[0].from.col !== selection[0].to.col) ||\n                  selection[0].from.col >= this.getSettings().fixedColumnsStart) {\n        hide = true;\n      }\n\n      return hide;\n    },\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualColumnMove,\n} from './manualColumnMove';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { arrayReduce } from '../../helpers/array';\nimport { addClass, removeClass, offset, hasClass, outerWidth } from '../../helpers/dom/element';\nimport { offsetRelativeTo } from '../../helpers/dom/event';\nimport { rangeEach } from '../../helpers/number';\nimport BacklightUI from './ui/backlight';\nimport GuidelineUI from './ui/guideline';\n\nimport './manualColumnMove.css';\n\nHooks.getSingleton().register('beforeColumnMove');\nHooks.getSingleton().register('afterColumnMove');\n\nexport const PLUGIN_KEY = 'manualColumnMove';\nexport const PLUGIN_PRIORITY = 120;\nconst CSS_PLUGIN = 'ht__manualColumnMove';\nconst CSS_SHOW_UI = 'show-ui';\nconst CSS_ON_MOVING = 'on-moving--columns';\nconst CSS_AFTER_SELECTION = 'after-selection--columns';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualColumnMove\n * @class ManualColumnMove\n *\n * @description\n * This plugin allows to change columns order. To make columns order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - `moveColumn` - move single column to the new position.\n * - `moveColumns` - move many columns (as an array of indexes) to the new position.\n * - `dragColumn` - drag single column to the new position.\n * - `dragColumns` - drag many columns (as an array of indexes) to the new position.\n *\n * [Documentation](@/guides/columns/column-moving/column-moving.md) explain differences between drag and move actions.\n * Please keep in mind that if you want apply visual changes,\n * you have to call manually the `render` method on the instance of Handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected columns.\n * - guideline - line which shows where columns has been moved.\n *\n * @class ManualColumnMove\n * @plugin ManualColumnMove\n */\nexport class ManualColumnMove extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Backlight UI object.\n   *\n   * @type {object}\n   */\n  #backlight = new BacklightUI(this.hot);\n  /**\n   * Guideline UI object.\n   *\n   * @type {object}\n   */\n  #guideline = new GuidelineUI(this.hot);\n  /**\n   * @type {number[]}\n   */\n  #columnsToMove = [];\n  /**\n   * @type {number}\n   */\n  #countCols = 0;\n  /**\n   * @type {boolean}\n   */\n  #pressed = false;\n  /**\n   * @type {object}\n   */\n  #target = {};\n  /**\n   * @type {number}\n   */\n  #cachedDropIndex;\n  /**\n   * @type {number}\n   */\n  #hoveredColumn;\n  /**\n   * @type {number}\n   */\n  #rootElementOffset;\n  /**\n   * @type {boolean}\n   */\n  #hasRowHeaders;\n  /**\n   * @type {number}\n   */\n  #fixedColumnsStart;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualColumnMove#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeOnCellMouseOver', (...args) => this.#onBeforeOnCellMouseOver(...args));\n    this.addHook('afterScrollVertically', () => this.#onAfterScrollVertically());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    this.buildPluginUI();\n    this.registerEvents();\n\n    // TODO: move adding plugin classname to BasePlugin.\n    addClass(this.hot.rootElement, CSS_PLUGIN);\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualColumnMove`](@/api/options.md#manualcolumnmove)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.moveBySettingsOrLoad();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    removeClass(this.hot.rootElement, CSS_PLUGIN);\n\n    this.unregisterEvents();\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Moves a single column.\n   *\n   * @param {number} column Visual column index to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  moveColumn(column, finalIndex) {\n    return this.moveColumns([column], finalIndex);\n  }\n\n  /**\n   * Moves a multiple columns.\n   *\n   * @param {Array} columns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  moveColumns(columns, finalIndex) {\n    const dropIndex = this.#cachedDropIndex;\n    const movePossible = this.isMovePossible(columns, finalIndex);\n    const beforeMoveHook = this.hot.runHooks('beforeColumnMove', columns, finalIndex, dropIndex, movePossible);\n\n    this.#cachedDropIndex = undefined;\n\n    if (beforeMoveHook === false) {\n      return;\n    }\n\n    if (movePossible) {\n      this.hot.columnIndexMapper.moveIndexes(columns, finalIndex);\n    }\n\n    const movePerformed = movePossible && this.isColumnOrderChanged(columns, finalIndex);\n\n    this.hot.runHooks('afterColumnMove', columns, finalIndex, dropIndex, movePossible, movePerformed);\n\n    return movePerformed;\n  }\n\n  /**\n   * Drag a single column to drop index position.\n   *\n   * @param {number} column Visual column index to be dragged.\n   * @param {number} dropIndex Visual column index, being a drop index for the moved columns. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  dragColumn(column, dropIndex) {\n    return this.dragColumns([column], dropIndex);\n  }\n\n  /**\n   * Drag multiple columns to drop index position.\n   *\n   * @param {Array} columns Array of visual column indexes to be dragged.\n   * @param {number} dropIndex Visual column index, being a drop index for the moved columns. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @fires Hooks#beforeColumnMove\n   * @fires Hooks#afterColumnMove\n   * @returns {boolean}\n   */\n  dragColumns(columns, dropIndex) {\n    const finalIndex = this.countFinalIndex(columns, dropIndex);\n\n    this.#cachedDropIndex = dropIndex;\n\n    return this.moveColumns(columns, finalIndex);\n  }\n\n  /**\n   * Indicates if it's possible to move columns to the desired position. Some of the actions aren't\n   * possible, i.e. You can’t move more than one element to the last position.\n   *\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @returns {boolean}\n   */\n  isMovePossible(movedColumns, finalIndex) {\n    const length = this.hot.columnIndexMapper.getNotTrimmedIndexesLength();\n\n    // An attempt to transfer more columns to start destination than is possible (only when moving from the top to the bottom).\n    const tooHighDestinationIndex = movedColumns.length + finalIndex > length;\n\n    const tooLowDestinationIndex = finalIndex < 0;\n    const tooLowMovedColumnIndex = movedColumns.some(movedColumn => movedColumn < 0);\n    const tooHighMovedColumnIndex = movedColumns.some(movedColumn => movedColumn >= length);\n\n    if (tooHighDestinationIndex || tooLowDestinationIndex || tooLowMovedColumnIndex || tooHighMovedColumnIndex) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Indicates if order of columns was changed.\n   *\n   * @private\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} finalIndex Visual column index, being a start index for the moved columns. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/columns/column-moving/column-moving.md#drag-and-move-actions-of-manualcolumnmove-plugin).\n   * @returns {boolean}\n   */\n  isColumnOrderChanged(movedColumns, finalIndex) {\n    return movedColumns.some((column, nrOfMovedElement) => column - nrOfMovedElement !== finalIndex);\n  }\n\n  /**\n   * Count the final column index from the drop index.\n   *\n   * @private\n   * @param {Array} movedColumns Array of visual column indexes to be moved.\n   * @param {number} dropIndex Visual column index, being a drop index for the moved columns.\n   * @returns {number} Visual column index, being a start index for the moved columns.\n   */\n  countFinalIndex(movedColumns, dropIndex) {\n    const numberOfColumnsLowerThanDropIndex = arrayReduce(movedColumns, (numberOfColumns, currentColumnIndex) => {\n      if (currentColumnIndex < dropIndex) {\n        numberOfColumns += 1;\n      }\n\n      return numberOfColumns;\n    }, 0);\n\n    return dropIndex - numberOfColumnsLowerThanDropIndex;\n  }\n\n  /**\n   * Gets the sum of the widths of columns in the provided range.\n   *\n   * @private\n   * @param {number} fromColumn Visual column index.\n   * @param {number} toColumn Visual column index.\n   * @returns {number}\n   */\n  getColumnsWidth(fromColumn, toColumn) {\n    const columnMapper = this.hot.columnIndexMapper;\n    let columnsWidth = 0;\n\n    for (let visualColumnIndex = fromColumn; visualColumnIndex <= toColumn; visualColumnIndex += 1) {\n      // We can't use just `getColWidth` (even without indexes translation) as it doesn't return proper values\n      // when column is stretched.\n      const renderableIndex = columnMapper.getRenderableFromVisualIndex(visualColumnIndex);\n\n      if (visualColumnIndex < 0) {\n        columnsWidth += this.hot.view._wt.wtViewport.getRowHeaderWidth() || 0;\n\n      } else if (renderableIndex !== null) {\n        columnsWidth += this.hot.view._wt.wtTable.getStretchedColumnWidth(renderableIndex) || 0;\n      }\n    }\n\n    return columnsWidth;\n  }\n\n  /**\n   * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n   *\n   * @private\n   */\n  moveBySettingsOrLoad() {\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(pluginSettings)) {\n      this.moveColumns(pluginSettings, 0);\n\n    } else if (pluginSettings !== undefined) {\n      const persistentState = this.persistentStateLoad();\n\n      if (persistentState.length) {\n        this.moveColumns(persistentState, 0);\n      }\n    }\n  }\n\n  /**\n   * Checks if the provided column is in the fixedColumnsTop section.\n   *\n   * @private\n   * @param {number} column Visual column index to check.\n   * @returns {boolean}\n   */\n  isFixedColumnsStart(column) {\n    return column < this.hot.getSettings().fixedColumnsStart;\n  }\n\n  /**\n   * Saves the manual column positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateSave\n   */\n  persistentStateSave() {\n    this.hot.runHooks('persistentStateSave', 'manualColumnMove', this.hot.columnIndexMapper.getIndexesSequence()); // The `PersistentState` plugin should be refactored.\n  }\n\n  /**\n   * Loads the manual column positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateLoad\n   * @returns {Array} Stored state.\n   */\n  persistentStateLoad() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', 'manualColumnMove', storedState);\n\n    return storedState.value ? storedState.value : [];\n  }\n\n  /**\n   * Prepares an array of indexes based on actual selection.\n   *\n   * @private\n   * @param {number} start The start index.\n   * @param {number} end The end index.\n   * @returns {Array}\n   */\n  prepareColumnsToMoving(start, end) {\n    const selectedColumns = [];\n\n    rangeEach(start, end, (i) => {\n      selectedColumns.push(i);\n    });\n\n    return selectedColumns;\n  }\n\n  /**\n   * Update the UI visual position.\n   *\n   * @private\n   */\n  refreshPositions() {\n    const firstVisible = this.hot.view.getFirstFullyVisibleColumn();\n\n    if (this.isFixedColumnsStart(this.#hoveredColumn) && firstVisible > 0) {\n      this.hot.scrollViewportTo({\n        col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1)\n      });\n    }\n\n    const wtTable = this.hot.view._wt.wtTable;\n    const scrollableElement = this.hot.view._wt.wtOverlays.scrollableElement;\n    const scrollStart = typeof scrollableElement.scrollX === 'number' ?\n      scrollableElement.scrollX : scrollableElement.scrollLeft;\n    let tdOffsetStart = this.hot.view.THEAD.offsetLeft + this.getColumnsWidth(0, this.#hoveredColumn - 1);\n    const hiderWidth = wtTable.hider.offsetWidth;\n    const tbodyOffsetLeft = wtTable.TBODY.offsetLeft;\n    const backlightElemMarginStart = this.#backlight.getOffset().start;\n    const backlightElemWidth = this.#backlight.getSize().width;\n    let rowHeaderWidth = 0;\n    let mouseOffsetStart = 0;\n\n    if (this.hot.isRtl()) {\n      const rootWindow = this.hot.rootWindow;\n      const containerWidth = outerWidth(this.hot.rootElement);\n      const gridMostRightPos = rootWindow.innerWidth - this.#rootElementOffset - containerWidth;\n\n      mouseOffsetStart = rootWindow.innerWidth - this.#target.eventPageX - gridMostRightPos -\n        (scrollableElement.scrollX === undefined ? scrollStart : 0);\n\n    } else {\n      mouseOffsetStart = this.#target.eventPageX -\n        (this.#rootElementOffset - (scrollableElement.scrollX === undefined ? scrollStart : 0));\n    }\n\n    if (this.#hasRowHeaders) {\n      rowHeaderWidth = this.hot.view._wt.wtOverlays.inlineStartOverlay.clone.wtTable.getColumnHeader(-1).offsetWidth;\n    }\n\n    if (this.isFixedColumnsStart(this.#hoveredColumn)) {\n      tdOffsetStart += scrollStart;\n    }\n\n    tdOffsetStart += rowHeaderWidth;\n\n    if (this.#hoveredColumn < 0) {\n      // if hover on rowHeader\n      if (this.#fixedColumnsStart > 0) {\n        this.#target.col = 0;\n      } else {\n        this.#target.col = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n      }\n\n    } else if (((this.#target.TD.offsetWidth / 2) + tdOffsetStart) <= mouseOffsetStart) {\n      const newCoordsCol = this.#hoveredColumn >= this.#countCols ? this.#countCols - 1 : this.#hoveredColumn;\n\n      // if hover on right part of TD\n      this.#target.col = newCoordsCol + 1;\n      // unfortunately first column is bigger than rest\n      tdOffsetStart += this.#target.TD.offsetWidth;\n\n    } else {\n      // elsewhere on table\n      this.#target.col = this.#hoveredColumn;\n    }\n\n    let backlightStart = mouseOffsetStart;\n    let guidelineStart = tdOffsetStart;\n\n    if (mouseOffsetStart + backlightElemWidth + backlightElemMarginStart >= hiderWidth) {\n      // prevent display backlight on the right side of the table\n      backlightStart = hiderWidth - backlightElemWidth - backlightElemMarginStart;\n\n    } else if (mouseOffsetStart + backlightElemMarginStart < tbodyOffsetLeft + rowHeaderWidth) {\n      // prevent display backlight on the left side of the table\n      backlightStart = tbodyOffsetLeft + rowHeaderWidth + Math.abs(backlightElemMarginStart);\n    }\n\n    if (tdOffsetStart >= hiderWidth - 1) {\n      // prevent display guideline outside the table\n      guidelineStart = hiderWidth - 1;\n\n    } else if (guidelineStart === 0) {\n      // guideline has got `margin-left: -1px` as default\n      guidelineStart = 1;\n\n    } else if (scrollableElement.scrollX !== undefined && this.#hoveredColumn < this.#fixedColumnsStart) {\n      guidelineStart -= ((this.#rootElementOffset <= scrollableElement.scrollX) ? this.#rootElementOffset : 0);\n    }\n\n    this.#backlight.setPosition(null, backlightStart);\n    this.#guideline.setPosition(null, guidelineStart);\n  }\n\n  /**\n   * Binds the events used by the plugin.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { documentElement } = this.hot.rootDocument;\n\n    this.eventManager.addEventListener(documentElement, 'mousemove', event => this.#onMouseMove(event));\n    this.eventManager.addEventListener(documentElement, 'mouseup', () => this.#onMouseUp());\n  }\n\n  /**\n   * Unbinds the events used by the plugin.\n   *\n   * @private\n   */\n  unregisterEvents() {\n    this.eventManager.clear();\n  }\n\n  /**\n   * Change the behavior of selection / dragging.\n   *\n   * @param {MouseEvent} event `mousedown` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    const wtTable = this.hot.view._wt.wtTable;\n    const isHeaderSelection = this.hot.selection.isSelectedByColumnHeader();\n    const selection = this.hot.getSelectedRangeLast();\n    // This block action shouldn't be handled below.\n    const isSortingElement = hasClass(event.target, 'sortAction');\n\n    if (!selection || !isHeaderSelection || this.#pressed || event.button !== 0 || isSortingElement) {\n      this.#pressed = false;\n      this.#columnsToMove.length = 0;\n      removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n\n      return;\n    }\n\n    const guidelineIsNotReady = this.#guideline.isBuilt() && !this.#guideline.isAppended();\n    const backlightIsNotReady = this.#backlight.isBuilt() && !this.#backlight.isAppended();\n\n    if (guidelineIsNotReady && backlightIsNotReady) {\n      this.#guideline.appendTo(wtTable.hider);\n      this.#backlight.appendTo(wtTable.hider);\n    }\n\n    const { from, to } = selection;\n    const start = Math.min(from.col, to.col);\n    const end = Math.max(from.col, to.col);\n\n    if (coords.row < 0 && (coords.col >= start && coords.col <= end)) {\n      controller.column = true;\n      this.#pressed = true;\n\n      const eventOffsetX = TD.firstChild ? offsetRelativeTo(event, TD.firstChild).x : event.offsetX;\n\n      this.#target.eventPageX = event.pageX;\n      this.#hoveredColumn = coords.col;\n      this.#target.TD = TD;\n      this.#target.col = coords.col;\n      this.#columnsToMove = this.prepareColumnsToMoving(start, end);\n      this.#hasRowHeaders = !!this.hot.getSettings().rowHeaders;\n      this.#countCols = this.hot.countCols();\n      this.#fixedColumnsStart = this.hot.getSettings().fixedColumnsStart;\n      this.#rootElementOffset = offset(this.hot.rootElement).left;\n\n      const countColumnsFrom = this.#hasRowHeaders ? -1 : 0;\n      const topPos = wtTable.holder.scrollTop + wtTable.getColumnHeaderHeight(0) + 1;\n      const fixedColumnsStart = coords.col < this.#fixedColumnsStart;\n      const horizontalScrollPosition = this.hot.view._wt.wtOverlays.inlineStartOverlay.getOverlayOffset();\n      const offsetX = Math.abs(eventOffsetX - (this.hot.isRtl() ? TD.offsetWidth : 0));\n      const inlineOffset = this.getColumnsWidth(start, coords.col - 1) + offsetX;\n      const inlinePos = this.getColumnsWidth(countColumnsFrom, start - 1) +\n        (fixedColumnsStart ? horizontalScrollPosition : 0) + inlineOffset;\n\n      this.#backlight.setPosition(topPos, inlinePos);\n      this.#backlight.setSize(this.getColumnsWidth(start, end), wtTable.hider.offsetHeight - topPos);\n      this.#backlight.setOffset(null, -inlineOffset);\n\n      addClass(this.hot.rootElement, CSS_ON_MOVING);\n\n    } else {\n      removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n      this.#pressed = false;\n      this.#columnsToMove.length = 0;\n    }\n  }\n\n  /**\n   * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n   *\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  #onMouseMove(event) {\n    if (!this.#pressed) {\n      return;\n    }\n\n    this.#target.eventPageX = event.pageX;\n    this.refreshPositions();\n  }\n\n  /**\n   * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n   *\n   * @param {MouseEvent} event `mouseover` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseOver(event, coords, TD, controller) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n\n    if (!selectedRange || !this.#pressed) {\n      return;\n    }\n\n    if (this.#columnsToMove.indexOf(coords.col) > -1) {\n      removeClass(this.hot.rootElement, CSS_SHOW_UI);\n\n    } else {\n      addClass(this.hot.rootElement, CSS_SHOW_UI);\n    }\n\n    controller.row = true;\n    controller.column = true;\n    controller.cell = true;\n    this.#hoveredColumn = coords.col;\n    this.#target.TD = TD;\n  }\n\n  /**\n   * `onMouseUp` hook callback.\n   */\n  #onMouseUp() {\n    const target = this.#target.col;\n    const columnsLen = this.#columnsToMove.length;\n\n    this.#hoveredColumn = undefined;\n    this.#pressed = false;\n\n    removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n    if (this.hot.selection.isSelectedByColumnHeader()) {\n      addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n    }\n\n    if (columnsLen < 1 || target === undefined) {\n      return;\n    }\n\n    const firstMovedVisualColumn = this.#columnsToMove[0];\n    const firstMovedPhysicalColumn = this.hot.toPhysicalColumn(firstMovedVisualColumn);\n    const movePerformed = this.dragColumns(this.#columnsToMove, target);\n\n    this.#columnsToMove.length = 0;\n\n    if (movePerformed === true) {\n      this.persistentStateSave();\n      this.hot.render();\n      this.hot.view.adjustElementsSize();\n\n      const selectionStart = this.hot.toVisualColumn(firstMovedPhysicalColumn);\n      const selectionEnd = selectionStart + columnsLen - 1;\n\n      this.hot.selectColumns(selectionStart, selectionEnd);\n    }\n  }\n\n  /**\n   * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n   */\n  #onAfterScrollVertically() {\n    const wtTable = this.hot.view._wt.wtTable;\n    const headerHeight = wtTable.getColumnHeaderHeight(0) + 1;\n    const scrollTop = wtTable.holder.scrollTop;\n    const posTop = headerHeight + scrollTop;\n\n    this.#backlight.setPosition(posTop);\n    this.#backlight.setSize(null, wtTable.hider.offsetHeight - posTop);\n  }\n\n  /**\n   * Builds the plugin's UI.\n   *\n   * @private\n   */\n  buildPluginUI() {\n    this.#backlight.build();\n    this.#guideline.build();\n  }\n\n  /**\n   * Callback for the `afterLoadData` hook.\n   *\n   * @private\n   */\n  #onAfterLoadData() {\n    this.moveBySettingsOrLoad();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.destroy();\n  }\n}\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualColumnMove--backlight';\n\n/**\n * @class BacklightUI\n * @util\n */\nclass BacklightUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default BacklightUI;\n","import { isNumeric } from '../../../helpers/number';\nimport { toUpperCaseFirst } from '../../../helpers/string';\n\nconst STATE_INITIALIZED = 0;\nconst STATE_BUILT = 1;\nconst STATE_APPENDED = 2;\nconst UNIT = 'px';\n\n/**\n * @class\n * @private\n */\nclass BaseUI {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * DOM element representing the ui element.\n   *\n   * @type {HTMLElement}\n   * @private\n   */\n  _element = null;\n  /**\n   * Flag which determines build state of element.\n   *\n   * @type {number}\n   */\n  state = STATE_INITIALIZED;\n  /**\n   * Defines the \"start\" physical CSS property name used within the class depending on what document\n   * layout direction the library runs.\n   *\n   * @type {string}\n   */\n  inlineProperty;\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n    this.inlineProperty = hotInstance.isRtl() ? 'right' : 'left';\n  }\n\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n  appendTo(wrapper) {\n    wrapper.appendChild(this._element);\n\n    this.state = STATE_APPENDED;\n  }\n\n  /**\n   * Method for create UI element. Only create, without append to table.\n   */\n  build() {\n    if (this.state !== STATE_INITIALIZED) {\n      return;\n    }\n\n    this._element = this.hot.rootDocument.createElement('div');\n    this.state = STATE_BUILT;\n  }\n\n  /**\n   * Method for remove UI element.\n   */\n  destroy() {\n    if (this.isAppended()) {\n      this._element.parentElement.removeChild(this._element);\n    }\n\n    this._element = null;\n    this.state = STATE_INITIALIZED;\n  }\n\n  /**\n   * Check if UI element are appended.\n   *\n   * @returns {boolean}\n   */\n  isAppended() {\n    return this.state === STATE_APPENDED;\n  }\n\n  /**\n   * Check if UI element are built.\n   *\n   * @returns {boolean}\n   */\n  isBuilt() {\n    return this.state >= STATE_BUILT;\n  }\n\n  /**\n   * Setter for position.\n   *\n   * @param {number} top New top position of the element.\n   * @param {number} inlinePosition New left/right (depends on LTR/RTL document mode) position of the element.\n   */\n  setPosition(top, inlinePosition) {\n    if (isNumeric(top)) {\n      this._element.style.top = top + UNIT;\n    }\n    if (isNumeric(inlinePosition)) {\n      this._element.style[this.inlineProperty] = inlinePosition + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains left and top position of the element.\n   */\n  getPosition() {\n    const style = this._element.style;\n\n    return {\n      top: style.top ? parseInt(style.top, 10) : 0,\n      start: style[this.inlineProperty] ? parseInt(style[this.inlineProperty], 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element size.\n   *\n   * @param {number} width New width of the element.\n   * @param {number} height New height of the element.\n   */\n  setSize(width, height) {\n    if (isNumeric(width)) {\n      this._element.style.width = width + UNIT;\n    }\n    if (isNumeric(height)) {\n      this._element.style.height = height + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains height and width of the element.\n   */\n  getSize() {\n    return {\n      width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n      height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n   *\n   * @param {number} top New margin top of the element.\n   * @param {number} inlineOffset New margin left/right (depends on LTR/RTL document mode) of the element.\n   */\n  setOffset(top, inlineOffset) {\n    if (isNumeric(top)) {\n      this._element.style.marginTop = top + UNIT;\n    }\n    if (isNumeric(inlineOffset)) {\n      this._element.style[`margin${toUpperCaseFirst(this.inlineProperty)}`] = inlineOffset + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element offset.\n   *\n   * @returns {object} Object contains top and left offset of the element.\n   */\n  getOffset() {\n    const style = this._element.style;\n    const inlineProp = `margin${toUpperCaseFirst(this.inlineProperty)}`;\n\n    return {\n      top: style.marginTop ? parseInt(style.marginTop, 10) : 0,\n      start: style[inlineProp] ? parseInt(style[inlineProp], 10) : 0\n    };\n  }\n}\n\nexport default BaseUI;\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualColumnMove--guideline';\n\n/**\n * @class GuidelineUI\n * @util\n */\nclass GuidelineUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default GuidelineUI;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualColumnResize,\n} from './manualColumnResize';\n","import { BasePlugin } from '../base';\nimport { addClass, closest, hasClass, removeClass, outerHeight, isDetached } from '../../helpers/dom/element';\nimport { arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js\n\nexport const PLUGIN_KEY = 'manualColumnResize';\nexport const PLUGIN_PRIORITY = 130;\nconst PERSISTENT_STATE_KEY = 'manualColumnWidths';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualColumnResize\n * @class ManualColumnResize\n *\n * @description\n * This plugin allows to change columns width. To make columns width persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired width of the column.\n * - guide - the helper guide that shows the desired width as a vertical guide.\n */\nexport class ManualColumnResize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * @type {HTMLTableHeaderCellElement}\n   */\n  #currentTH = null;\n  /**\n   * @type {number}\n   */\n  #currentCol = null;\n  /**\n   * @type {number[]}\n   */\n  #selectedCols = [];\n  /**\n   * @type {number}\n   */\n  #currentWidth = null;\n  /**\n   * @type {number}\n   */\n  #newSize = null;\n  /**\n   * @type {number}\n   */\n  #startY = null;\n  /**\n   * @type {number}\n   */\n  #startWidth = null;\n  /**\n   * @type {number}\n   */\n  #startOffset = null;\n  /**\n   * @type {HTMLElement}\n   */\n  #handle = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {HTMLElement}\n   */\n  #guide = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {boolean}\n   */\n  #pressed = null;\n  /**\n   * @type {boolean}\n   */\n  #isTriggeredByRMB = false;\n  /**\n   * @type {number}\n   */\n  #dblclick = 0;\n  /**\n   * @type {number}\n   */\n  #autoresizeTimeout = null;\n  /**\n   * PhysicalIndexToValueMap to keep and track widths for physical column indexes.\n   *\n   * @type {PhysicalIndexToValueMap}\n   */\n  #columnWidthsMap;\n  /**\n   * Private pool to save configuration from updateSettings.\n   *\n   * @type {object}\n   */\n  #config;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n\n    addClass(this.#handle, 'manualColumnResizer');\n    addClass(this.#guide, 'manualColumnResizerGuide');\n  }\n\n  /**\n   * @private\n   * @returns {string}\n   */\n  get inlineDir() {\n    return this.hot.isRtl() ? 'right' : 'left';\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualColumnResize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.#columnWidthsMap = new IndexToValueMap();\n    this.#columnWidthsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.columnIndexMapper.registerMap(this.pluginName, this.#columnWidthsMap);\n\n    this.addHook('modifyColWidth', (width, col) => this.#onModifyColWidth(width, col), 1);\n    this.addHook('beforeStretchingColumnWidth',\n      (stretchedWidth, column) => this.#onBeforeStretchingColumnWidth(stretchedWidth, column));\n    this.addHook('beforeColumnResize',\n      (newSize, column, isDoubleClick) => this.#onBeforeColumnResize(newSize, column, isDoubleClick));\n\n    this.bindEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualColumnResize`](@/api/options.md#manualcolumnresize)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#config = this.#columnWidthsMap.getValues();\n    this.hot.columnIndexMapper.unregisterMap(this.pluginName);\n    super.disablePlugin();\n  }\n\n  /**\n   * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @fires Hooks#persistentStateSave\n   */\n  saveManualColumnWidths() {\n    this.hot.runHooks('persistentStateSave', PERSISTENT_STATE_KEY, this.#columnWidthsMap.getValues());\n  }\n\n  /**\n   * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @returns {Array}\n   * @fires Hooks#persistentStateLoad\n   */\n  loadManualColumnWidths() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', PERSISTENT_STATE_KEY, storedState);\n\n    return storedState.value;\n  }\n\n  /**\n   * Sets the new width for specified column index.\n   *\n   * @param {number} column Visual column index.\n   * @param {number} width Column width (no less than 20px).\n   * @returns {number} Returns new width.\n   */\n  setManualSize(column, width) {\n    const newWidth = Math.max(width, 20);\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.#columnWidthsMap.setValueAtIndex(physicalColumn, newWidth);\n\n    return newWidth;\n  }\n\n  /**\n   * Clears the cache for the specified column index.\n   *\n   * @param {number} column Visual column index.\n   */\n  clearManualSize(column) {\n    const physicalColumn = this.hot.toPhysicalColumn(column);\n\n    this.#columnWidthsMap.setValueAtIndex(physicalColumn, null);\n  }\n\n  /**\n   * Callback to call on map's `init` local hook.\n   *\n   * @private\n   */\n  #onMapInit() {\n    const initialSetting = this.hot.getSettings()[PLUGIN_KEY];\n    const loadedManualColumnWidths = this.loadManualColumnWidths();\n\n    if (typeof loadedManualColumnWidths !== 'undefined') {\n      this.hot.batchExecution(() => {\n        loadedManualColumnWidths.forEach((width, physicalIndex) => {\n          this.#columnWidthsMap.setValueAtIndex(physicalIndex, width);\n        });\n      }, true);\n\n    } else if (Array.isArray(initialSetting)) {\n      this.hot.batchExecution(() => {\n        initialSetting.forEach((width, physicalIndex) => {\n          this.#columnWidthsMap.setValueAtIndex(physicalIndex, width);\n        });\n      }, true);\n\n      this.#config = initialSetting;\n\n    } else if (initialSetting === true && Array.isArray(this.#config)) {\n      this.hot.batchExecution(() => {\n        this.#config.forEach((width, physicalIndex) => {\n          this.#columnWidthsMap.setValueAtIndex(physicalIndex, width);\n        });\n      }, true);\n    }\n  }\n\n  /**\n   * Set the resize handle position.\n   *\n   * @private\n   * @param {HTMLCellElement} TH TH HTML element.\n   */\n  setupHandlePosition(TH) {\n    if (!TH.parentNode) {\n      return;\n    }\n\n    this.#currentTH = TH;\n\n    const { _wt: wt } = this.hot.view;\n    const cellCoords = wt.wtTable.getCoords(this.#currentTH);\n    const col = cellCoords.col;\n\n    // Ignore column headers.\n    if (col < 0) {\n      return;\n    }\n\n    const headerHeight = outerHeight(this.#currentTH);\n    const box = this.#currentTH.getBoundingClientRect();\n    // Read \"fixedColumnsStart\" through the Walkontable as in that context, the fixed columns\n    // are modified (reduced by the number of hidden columns) by TableView module.\n    const fixedColumn = col < wt.getSetting('fixedColumnsStart');\n    let relativeHeaderPosition;\n\n    if (fixedColumn) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .topInlineStartCornerOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    // If the TH is not a child of the top-left overlay, recalculate using\n    // the top overlay - as this overlay contains the rest of the headers.\n    if (!relativeHeaderPosition) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .topOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    this.#currentCol = this.hot.columnIndexMapper.getVisualFromRenderableIndex(col);\n    this.#selectedCols = [];\n\n    const isFullColumnSelected = this.hot.selection.isSelectedByCorner() ||\n      this.hot.selection.isSelectedByColumnHeader();\n\n    if (this.hot.selection.isSelected() && isFullColumnSelected) {\n      const selectionRanges = this.hot.getSelectedRange();\n\n      arrayEach(selectionRanges, (selectionRange) => {\n        const fromColumn = selectionRange.getTopStartCorner().col;\n        const toColumn = selectionRange.getBottomEndCorner().col;\n\n        // Add every selected column for resize action.\n        rangeEach(fromColumn, toColumn, (columnIndex) => {\n          if (!this.#selectedCols.includes(columnIndex)) {\n            this.#selectedCols.push(columnIndex);\n          }\n        });\n      });\n    }\n\n    // Resizing element beyond the current selection (also when there is no selection).\n    if (!this.#selectedCols.includes(this.#currentCol)) {\n      this.#selectedCols = [this.#currentCol];\n    }\n\n    this.#startOffset = relativeHeaderPosition.start - 6;\n    this.#startWidth = parseInt(box.width, 10);\n\n    this.#handle.style.top = `${relativeHeaderPosition.top}px`;\n    this.#handle.style[this.inlineDir] = `${this.#startOffset + this.#startWidth}px`;\n\n    this.#handle.style.height = `${headerHeight}px`;\n    this.hot.rootElement.appendChild(this.#handle);\n  }\n\n  /**\n   * Refresh the resize handle position.\n   *\n   * @private\n   */\n  refreshHandlePosition() {\n    this.#handle.style[this.inlineDir] = `${this.#startOffset + this.#currentWidth}px`;\n  }\n\n  /**\n   * Sets the resize guide position.\n   *\n   * @private\n   */\n  setupGuidePosition() {\n    const handleHeight = parseInt(outerHeight(this.#handle), 10);\n    const handleBottomPosition = parseInt(this.#handle.style.top, 10) + handleHeight;\n    const maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10);\n\n    addClass(this.#handle, 'active');\n    addClass(this.#guide, 'active');\n\n    this.#guide.style.top = `${handleBottomPosition}px`;\n    this.refreshGuidePosition();\n    this.#guide.style.height = `${maximumVisibleElementHeight - handleHeight}px`;\n    this.hot.rootElement.appendChild(this.#guide);\n  }\n\n  /**\n   * Refresh the resize guide position.\n   *\n   * @private\n   */\n  refreshGuidePosition() {\n    this.#guide.style[this.inlineDir] = this.#handle.style[this.inlineDir];\n  }\n\n  /**\n   * Hides both the resize handle and resize guide.\n   *\n   * @private\n   */\n  hideHandleAndGuide() {\n    removeClass(this.#handle, 'active');\n    removeClass(this.#guide, 'active');\n  }\n\n  /**\n   * Checks if provided element is considered a column header.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {boolean}\n   */\n  checkIfColumnHeader(element) {\n    const thead = closest(element, ['THEAD'], this.hot.rootElement);\n    const { topOverlay, topInlineStartCornerOverlay } = this.hot.view._wt.wtOverlays;\n\n    return [\n      topOverlay.clone.wtTable.THEAD,\n      topInlineStartCornerOverlay.clone.wtTable.THEAD,\n    ].includes(thead);\n  }\n\n  /**\n   * Gets the TH element from the provided element.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {HTMLElement}\n   */\n  getClosestTHParent(element) {\n    if (element.tagName !== 'TABLE') {\n      if (element.tagName === 'TH') {\n        return element;\n      }\n\n      return this.getClosestTHParent(element.parentNode);\n    }\n\n    return null;\n  }\n\n  /**\n   * 'mouseover' event callback - set the handle position.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseOver(event) {\n    // Workaround for #6926 - if the `event.target` is temporarily detached, we can skip this callback and wait for\n    // the next `onmouseover`.\n    if (isDetached(event.target)) {\n      return;\n    }\n\n    // A \"mouseover\" action is triggered right after executing \"contextmenu\" event. It should be ignored.\n    if (this.#isTriggeredByRMB === true) {\n      return;\n    }\n\n    if (this.checkIfColumnHeader(event.target)) {\n      const th = this.getClosestTHParent(event.target);\n\n      if (!th) {\n        return;\n      }\n\n      const colspan = th.getAttribute('colspan');\n\n      if (th && (colspan === null || colspan === '1')) {\n        if (!this.#pressed) {\n          this.setupHandlePosition(th);\n        }\n      }\n    }\n  }\n\n  /**\n   * Auto-size row after doubleclick - callback.\n   *\n   * @private\n   * @fires Hooks#beforeColumnResize\n   * @fires Hooks#afterColumnResize\n   */\n  afterMouseDownTimeout() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const resize = (column, forceRender) => {\n      const hookNewSize = this.hot.runHooks('beforeColumnResize', this.#newSize, column, true);\n\n      if (hookNewSize !== undefined) {\n        this.#newSize = hookNewSize;\n      }\n\n      if (this.hot.getSettings().stretchH === 'all') {\n        this.clearManualSize(column);\n      } else {\n        this.setManualSize(column, this.#newSize); // double click sets by auto row size plugin\n      }\n\n      this.saveManualColumnWidths();\n\n      this.hot.runHooks('afterColumnResize', this.#newSize, column, true);\n\n      if (forceRender) {\n        render();\n      }\n    };\n\n    if (this.#dblclick >= 2) {\n      const selectedColsLength = this.#selectedCols.length;\n\n      if (selectedColsLength > 1) {\n        arrayEach(this.#selectedCols, (selectedCol) => {\n          resize(selectedCol);\n        });\n        render();\n      } else {\n        arrayEach(this.#selectedCols, (selectedCol) => {\n          resize(selectedCol, true);\n        });\n      }\n    }\n    this.#dblclick = 0;\n    this.#autoresizeTimeout = null;\n  }\n\n  /**\n   * 'mousedown' event callback.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseDown(event) {\n    if (event.target.parentNode !== this.hot.rootElement) {\n      return;\n    }\n\n    if (hasClass(event.target, 'manualColumnResizer')) {\n      this.setupHandlePosition(this.#currentTH);\n      this.setupGuidePosition();\n      this.#pressed = true;\n\n      if (this.#autoresizeTimeout === null) {\n        this.#autoresizeTimeout = setTimeout(() => this.afterMouseDownTimeout(), 500);\n\n        this.hot._registerTimeout(this.#autoresizeTimeout);\n      }\n      this.#dblclick += 1;\n\n      this.startX = event.pageX;\n      this.#newSize = this.#startWidth;\n    }\n  }\n\n  /**\n   * 'mousemove' event callback - refresh the handle and guide positions, cache the new column width.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseMove(event) {\n    if (this.#pressed) {\n      const change = (event.pageX - this.startX) * this.hot.getDirectionFactor();\n\n      this.#currentWidth = this.#startWidth + change;\n\n      arrayEach(this.#selectedCols, (selectedCol) => {\n        this.#newSize = this.setManualSize(selectedCol, this.#currentWidth);\n      });\n\n      this.refreshHandlePosition();\n      this.refreshGuidePosition();\n    }\n  }\n\n  /**\n   * 'mouseup' event callback - apply the column resizing.\n   *\n   * @fires Hooks#beforeColumnResize\n   * @fires Hooks#afterColumnResize\n   */\n  #onMouseUp() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const resize = (column, forceRender) => {\n      this.hot.runHooks('beforeColumnResize', this.#newSize, column, false);\n\n      if (forceRender) {\n        render();\n      }\n\n      this.saveManualColumnWidths();\n\n      this.hot.runHooks('afterColumnResize', this.#newSize, column, false);\n    };\n\n    if (this.#pressed) {\n      this.hideHandleAndGuide();\n      this.#pressed = false;\n\n      if (this.#newSize !== this.#startWidth) {\n        const selectedColsLength = this.#selectedCols.length;\n\n        if (selectedColsLength > 1) {\n          arrayEach(this.#selectedCols, (selectedCol) => {\n            resize(selectedCol);\n          });\n          render();\n        } else {\n          arrayEach(this.#selectedCols, (selectedCol) => {\n            resize(selectedCol, true);\n          });\n        }\n      }\n\n      this.setupHandlePosition(this.#currentTH);\n    }\n  }\n\n  /**\n   * Callback for \"contextmenu\" event triggered on element showing move handle. It removes handle and guide elements.\n   */\n  #onContextMenu() {\n    this.hideHandleAndGuide();\n    this.hot.rootElement.removeChild(this.#handle);\n    this.hot.rootElement.removeChild(this.#guide);\n\n    this.#pressed = false;\n    this.#isTriggeredByRMB = true;\n\n    // There is thrown \"mouseover\" event right after opening a context menu. This flag inform that handle\n    // shouldn't be drawn just after removing it.\n    this.hot._registerImmediate(() => {\n      this.#isTriggeredByRMB = false;\n    });\n  }\n\n  /**\n   * Binds the mouse events.\n   *\n   * @private\n   */\n  bindEvents() {\n    const { rootWindow, rootElement } = this.hot;\n\n    this.eventManager.addEventListener(rootElement, 'mouseover', e => this.#onMouseOver(e));\n    this.eventManager.addEventListener(rootElement, 'mousedown', e => this.#onMouseDown(e));\n    this.eventManager.addEventListener(rootWindow, 'mousemove', e => this.#onMouseMove(e));\n    this.eventManager.addEventListener(rootWindow, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(this.#handle, 'contextmenu', () => this.#onContextMenu());\n  }\n\n  /**\n   * Modifies the provided column width, based on the plugin settings.\n   *\n   * @param {number} width Column width.\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  #onModifyColWidth(width, column) {\n    let newWidth = width;\n\n    if (this.enabled) {\n      const physicalColumn = this.hot.toPhysicalColumn(column);\n      const columnWidth = this.#columnWidthsMap.getValueAtIndex(physicalColumn);\n\n      if (this.hot.getSettings()[PLUGIN_KEY] && columnWidth) {\n        newWidth = columnWidth;\n      }\n    }\n\n    return newWidth;\n  }\n\n  /**\n   * Modifies the provided column stretched width. This hook decides if specified column should be stretched or not.\n   *\n   * @param {number} stretchedWidth Stretched width.\n   * @param {number} column Visual column index.\n   * @returns {number}\n   */\n  #onBeforeStretchingColumnWidth(stretchedWidth, column) {\n    let width = this.#columnWidthsMap.getValueAtIndex(column);\n\n    if (width === null) {\n      width = stretchedWidth;\n    }\n\n    return width;\n  }\n\n  /**\n   * `beforeColumnResize` hook callback.\n   */\n  #onBeforeColumnResize() {\n    // clear the header height cache information\n    this.hot.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualRowMove,\n} from './manualRowMove';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport { arrayReduce } from '../../helpers/array';\nimport { addClass, removeClass, offset, getTrimmingContainer } from '../../helpers/dom/element';\nimport { rangeEach } from '../../helpers/number';\nimport BacklightUI from './ui/backlight';\nimport GuidelineUI from './ui/guideline';\n\nimport './manualRowMove.css';\n\nHooks.getSingleton().register('beforeRowMove');\nHooks.getSingleton().register('afterRowMove');\n\nexport const PLUGIN_KEY = 'manualRowMove';\nexport const PLUGIN_PRIORITY = 140;\nconst CSS_PLUGIN = 'ht__manualRowMove';\nconst CSS_SHOW_UI = 'show-ui';\nconst CSS_ON_MOVING = 'on-moving--rows';\nconst CSS_AFTER_SELECTION = 'after-selection--rows';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualRowMove\n * @class ManualRowMove\n *\n * @description\n * This plugin allows to change rows order. To make rows order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - `moveRow` - move single row to the new position.\n * - `moveRows` - move many rows (as an array of indexes) to the new position.\n * - `dragRow` - drag single row to the new position.\n * - `dragRows` - drag many rows (as an array of indexes) to the new position.\n *\n * [Documentation](@/guides/rows/row-moving/row-moving.md) explain differences between drag and move actions. Please keep in mind that if you want apply visual changes,\n * you have to call manually the `render` method on the instance of Handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected rows.\n * - guideline - line which shows where rows has been moved.\n *\n * @class ManualRowMove\n * @plugin ManualRowMove\n */\nexport class ManualRowMove extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Backlight UI object.\n   *\n   * @type {object}\n   */\n  #backlight = new BacklightUI(this.hot);\n  /**\n   * Guideline UI object.\n   *\n   * @type {object}\n   */\n  #guideline = new GuidelineUI(this.hot);\n  /**\n   * @type {number[]}\n   */\n  #rowsToMove = [];\n  /**\n   * @type {boolean}\n   */\n  #pressed;\n  /**\n   * @type {object}\n   */\n  #target = {};\n  /**\n   * @type {number}\n   */\n  #cachedDropIndex;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualRowMove#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeOnCellMouseOver', (...args) => this.#onBeforeOnCellMouseOver(...args));\n    this.addHook('afterScrollHorizontally', () => this.#onAfterScrollHorizontally());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n\n    this.buildPluginUI();\n    this.registerEvents();\n\n    // TODO: move adding plugin classname to BasePlugin.\n    addClass(this.hot.rootElement, CSS_PLUGIN);\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualRowMove`](@/api/options.md#manualrowmove)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.moveBySettingsOrLoad();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    removeClass(this.hot.rootElement, CSS_PLUGIN);\n\n    this.unregisterEvents();\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Moves a single row.\n   *\n   * To see the outcome, rerender your grid by calling [`render()`](@/api/core.md#render).\n   *\n   * @param {number} row Visual row index to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  moveRow(row, finalIndex) {\n    return this.moveRows([row], finalIndex);\n  }\n\n  /**\n   * Moves multiple rows.\n   *\n   * To see the outcome, rerender your grid by calling [`render()`](@/api/core.md#render).\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  moveRows(rows, finalIndex) {\n    const dropIndex = this.#cachedDropIndex;\n    const movePossible = this.isMovePossible(rows, finalIndex);\n    const beforeMoveHook = this.hot.runHooks('beforeRowMove', rows, finalIndex, dropIndex, movePossible);\n\n    this.#cachedDropIndex = undefined;\n\n    if (beforeMoveHook === false) {\n      return;\n    }\n\n    if (movePossible) {\n      this.hot.rowIndexMapper.moveIndexes(rows, finalIndex);\n    }\n\n    const movePerformed = movePossible && this.isRowOrderChanged(rows, finalIndex);\n\n    this.hot.runHooks('afterRowMove', rows, finalIndex, dropIndex, movePossible, movePerformed);\n\n    return movePerformed;\n  }\n\n  /**\n   * Drag a single row to drop index position.\n   *\n   * @param {number} row Visual row index to be dragged.\n   * @param {number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  dragRow(row, dropIndex) {\n    return this.dragRows([row], dropIndex);\n  }\n\n  /**\n   * Drag multiple rows to drop index position.\n   *\n   * @param {Array} rows Array of visual row indexes to be dragged.\n   * @param {number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we are going to drop the moved elements.\n   * To check visualization of drop index please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @fires Hooks#beforeRowMove\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  dragRows(rows, dropIndex) {\n    const finalIndex = this.countFinalIndex(rows, dropIndex);\n\n    this.#cachedDropIndex = dropIndex;\n\n    return this.moveRows(rows, finalIndex);\n  }\n\n  /**\n   * Indicates if it's possible to move rows to the desired position. Some of the actions aren't possible, i.e. You can’t move more than one element to the last position.\n   *\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @returns {boolean}\n   */\n  isMovePossible(movedRows, finalIndex) {\n    const length = this.hot.rowIndexMapper.getNotTrimmedIndexesLength();\n\n    // An attempt to transfer more rows to start destination than is possible (only when moving from the top to the bottom).\n    const tooHighDestinationIndex = movedRows.length + finalIndex > length;\n\n    const tooLowDestinationIndex = finalIndex < 0;\n    const tooLowMovedRowIndex = movedRows.some(movedRow => movedRow < 0);\n    const tooHighMovedRowIndex = movedRows.some(movedRow => movedRow >= length);\n\n    if (tooHighDestinationIndex || tooLowDestinationIndex || tooLowMovedRowIndex || tooHighMovedRowIndex) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Indicates if order of rows was changed.\n   *\n   * @private\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements will be placed after the moving action.\n   * To check the visualization of the final index, please take a look at [documentation](@/guides/rows/row-moving/row-moving.md#drag-and-move-actions-of-manualrowmove-plugin).\n   * @returns {boolean}\n   */\n  isRowOrderChanged(movedRows, finalIndex) {\n    return movedRows.some((row, nrOfMovedElement) => row - nrOfMovedElement !== finalIndex);\n  }\n\n  /**\n   * Count the final row index from the drop index.\n   *\n   * @private\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} dropIndex Visual row index, being a drop index for the moved rows.\n   * @returns {number} Visual row index, being a start index for the moved rows.\n   */\n  countFinalIndex(movedRows, dropIndex) {\n    const numberOfRowsLowerThanDropIndex = arrayReduce(movedRows, (numberOfRows, currentRowIndex) => {\n      if (currentRowIndex < dropIndex) {\n        numberOfRows += 1;\n      }\n\n      return numberOfRows;\n    }, 0);\n\n    return dropIndex - numberOfRowsLowerThanDropIndex;\n  }\n\n  /**\n   * Gets the sum of the heights of rows in the provided range.\n   *\n   * @private\n   * @param {number} fromRow Visual row index.\n   * @param {number} toRow Visual row index.\n   * @returns {number}\n   */\n  getRowsHeight(fromRow, toRow) {\n    const rowMapper = this.hot.rowIndexMapper;\n    let rowsHeight = 0;\n\n    for (let visualRowIndex = fromRow; visualRowIndex <= toRow; visualRowIndex++) {\n      const renderableIndex = rowMapper.getRenderableFromVisualIndex(visualRowIndex);\n\n      if (renderableIndex !== null) {\n        rowsHeight += this.hot.view._wt.wtTable.getRowHeight(renderableIndex) || 23;\n      }\n    }\n\n    return rowsHeight;\n  }\n\n  /**\n   * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n   *\n   * @private\n   */\n  moveBySettingsOrLoad() {\n    const pluginSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(pluginSettings)) {\n      this.moveRows(pluginSettings, 0);\n\n    } else if (pluginSettings !== undefined) {\n      const persistentState = this.persistentStateLoad();\n\n      if (persistentState.length) {\n        this.moveRows(persistentState, 0);\n      }\n    }\n  }\n\n  /**\n   * Checks if the provided row is in the fixedRowsTop section.\n   *\n   * @private\n   * @param {number} row Visual row index to check.\n   * @returns {boolean}\n   */\n  isFixedRowTop(row) {\n    return row < this.hot.getSettings().fixedRowsTop;\n  }\n\n  /**\n   * Checks if the provided row is in the fixedRowsBottom section.\n   *\n   * @private\n   * @param {number} row Visual row index to check.\n   * @returns {boolean}\n   */\n  isFixedRowBottom(row) {\n    return row > this.hot.countRows() - 1 - this.hot.getSettings().fixedRowsBottom;\n  }\n\n  /**\n   * Saves the manual row positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateSave\n   */\n  persistentStateSave() {\n    // The `PersistentState` plugin should be refactored.\n    this.hot.runHooks('persistentStateSave', 'manualRowMove', this.hot.rowIndexMapper.getIndexesSequence());\n  }\n\n  /**\n   * Loads the manual row positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n   *\n   * @private\n   * @fires Hooks#persistentStateLoad\n   * @returns {Array} Stored state.\n   */\n  persistentStateLoad() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', 'manualRowMove', storedState);\n\n    return storedState.value ? storedState.value : [];\n  }\n\n  /**\n   * Prepares an array of indexes based on actual selection.\n   *\n   * @private\n   * @returns {Array}\n   */\n  prepareRowsToMoving() {\n    const selection = this.hot.getSelectedRangeLast();\n    const selectedRows = [];\n\n    if (!selection) {\n      return selectedRows;\n    }\n\n    const { from, to } = selection;\n    const start = Math.min(from.row, to.row);\n    const end = Math.max(from.row, to.row);\n\n    rangeEach(start, end, (i) => {\n      selectedRows.push(i);\n    });\n\n    return selectedRows;\n  }\n\n  /**\n   * Update the UI visual position.\n   *\n   * @private\n   */\n  refreshPositions() {\n    const coords = this.#target.coords;\n    const firstVisible = this.hot.view.getFirstFullyVisibleRow();\n    const lastVisible = this.hot.view.getLastFullyVisibleRow();\n    const countRows = this.hot.countRows();\n\n    if (this.isFixedRowTop(coords.row) && firstVisible > 0) {\n      this.hot.scrollViewportTo(this.hot.rowIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1));\n    }\n    if (this.isFixedRowBottom(coords.row) && lastVisible < countRows) {\n      this.hot.scrollViewportTo(\n        this.hot.rowIndexMapper.getNearestNotHiddenIndex(lastVisible + 1, 1), undefined, true);\n    }\n\n    const wtTable = this.hot.view._wt.wtTable;\n    const TD = this.#target.TD;\n    const rootElement = this.hot.rootElement;\n    const rootElementOffset = offset(rootElement);\n    const trimmingContainer = getTrimmingContainer(rootElement);\n    const tableScroll = wtTable.holder.scrollTop;\n    const trimmingContainerScroll = this.hot.rootWindow !== trimmingContainer ? trimmingContainer.scrollTop : 0;\n\n    const pixelsAbove = rootElementOffset.top - trimmingContainerScroll;\n    const pixelsRelToTableStart = this.#target.eventPageY - pixelsAbove + tableScroll;\n    const hiderHeight = wtTable.hider.offsetHeight;\n    const tbodyOffsetTop = wtTable.TBODY.offsetTop;\n    const backlightElemMarginTop = this.#backlight.getOffset().top;\n    const backlightElemHeight = this.#backlight.getSize().height;\n    const tdMiddle = (TD.offsetHeight / 2);\n    const tdHeight = TD.offsetHeight;\n    let tdStartPixel = this.hot.view.THEAD.offsetHeight + this.getRowsHeight(0, coords.row - 1);\n    const isBelowTable = pixelsRelToTableStart >= tdStartPixel + tdMiddle;\n\n    if (this.isFixedRowTop(coords.row)) {\n      tdStartPixel += this.hot.view._wt.wtOverlays.topOverlay.getOverlayOffset();\n    }\n\n    if (coords.row < 0) {\n      // if hover on colHeader\n      this.#target.row = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n    } else if (isBelowTable) {\n      // if hover on lower part of TD\n      this.#target.row = coords.row + 1;\n      // unfortunately first row is bigger than rest\n      tdStartPixel += coords.row === 0 ? tdHeight - 1 : tdHeight;\n\n    } else {\n      // elsewhere on table\n      this.#target.row = coords.row;\n    }\n\n    let backlightTop = pixelsRelToTableStart;\n    let guidelineTop = tdStartPixel;\n\n    if (pixelsRelToTableStart + backlightElemHeight + backlightElemMarginTop >= hiderHeight) {\n      // prevent display backlight below table\n      backlightTop = hiderHeight - backlightElemHeight - backlightElemMarginTop;\n\n    } else if (pixelsRelToTableStart + backlightElemMarginTop < tbodyOffsetTop) {\n      // prevent display above below table\n      backlightTop = tbodyOffsetTop + Math.abs(backlightElemMarginTop);\n    }\n\n    if (tdStartPixel >= hiderHeight - 1) {\n      // prevent display guideline below table\n      guidelineTop = hiderHeight - 1;\n    }\n\n    this.#backlight.setPosition(backlightTop);\n    this.#guideline.setPosition(guidelineTop);\n  }\n\n  /**\n   * Binds the events used by the plugin.\n   *\n   * @private\n   */\n  registerEvents() {\n    const { documentElement } = this.hot.rootDocument;\n\n    this.eventManager.addEventListener(documentElement, 'mousemove', event => this.#onMouseMove(event));\n    this.eventManager.addEventListener(documentElement, 'mouseup', () => this.#onMouseUp());\n  }\n\n  /**\n   * Unbinds the events used by the plugin.\n   *\n   * @private\n   */\n  unregisterEvents() {\n    this.eventManager.clear();\n  }\n\n  /**\n   * Change the behavior of selection / dragging.\n   *\n   * @param {MouseEvent} event `mousedown` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    const { wtTable, wtViewport } = this.hot.view._wt;\n    const isHeaderSelection = this.hot.selection.isSelectedByRowHeader();\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection || !isHeaderSelection || this.#pressed || event.button !== 0) {\n      this.#pressed = false;\n      this.#rowsToMove.length = 0;\n      removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n\n      return;\n    }\n\n    const guidelineIsNotReady = this.#guideline.isBuilt() && !this.#guideline.isAppended();\n    const backlightIsNotReady = this.#backlight.isBuilt() && !this.#backlight.isAppended();\n\n    if (guidelineIsNotReady && backlightIsNotReady) {\n      this.#guideline.appendTo(wtTable.hider);\n      this.#backlight.appendTo(wtTable.hider);\n    }\n\n    const { from, to } = selection;\n    const start = Math.min(from.row, to.row);\n    const end = Math.max(from.row, to.row);\n\n    if (coords.col < 0 && (coords.row >= start && coords.row <= end)) {\n      controller.row = true;\n      this.#pressed = true;\n\n      this.#target.eventPageY = event.pageY;\n      this.#target.coords = coords;\n      this.#target.TD = TD;\n      this.#rowsToMove = this.prepareRowsToMoving();\n\n      const leftPos = wtTable.holder.scrollLeft + wtViewport.getRowHeaderWidth();\n      const topOffset = this.getRowsHeight(start, coords.row - 1) + event.offsetY;\n\n      this.#backlight.setPosition(null, leftPos);\n      this.#backlight.setSize(wtTable.hider.offsetWidth - leftPos, this.getRowsHeight(start, end));\n      this.#backlight.setOffset(-topOffset, null);\n\n      addClass(this.hot.rootElement, CSS_ON_MOVING);\n\n      this.refreshPositions();\n\n    } else {\n      removeClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n      this.#pressed = false;\n      this.#rowsToMove.length = 0;\n    }\n  }\n\n  /**\n   * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n   *\n   * @param {MouseEvent} event `mousemove` event properties.\n   */\n  #onMouseMove(event) {\n    if (!this.#pressed) {\n      return;\n    }\n\n    this.#target.eventPageY = event.pageY;\n    this.refreshPositions();\n  }\n\n  /**\n   * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n   *\n   * @param {MouseEvent} event `mouseover` event properties.\n   * @param {CellCoords} coords Visual cell coordinates where was fired event.\n   * @param {HTMLElement} TD Cell represented as HTMLElement.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseOver(event, coords, TD, controller) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n\n    if (!selectedRange || !this.#pressed) {\n      return;\n    }\n\n    if (this.#rowsToMove.indexOf(coords.row) > -1) {\n      removeClass(this.hot.rootElement, CSS_SHOW_UI);\n\n    } else {\n      addClass(this.hot.rootElement, CSS_SHOW_UI);\n    }\n\n    controller.row = true;\n    controller.column = true;\n    controller.cell = true;\n    this.#target.coords = coords;\n    this.#target.TD = TD;\n  }\n\n  /**\n   * `onMouseUp` hook callback.\n   */\n  #onMouseUp() {\n    const target = this.#target.row;\n    const rowsLen = this.#rowsToMove.length;\n\n    this.#pressed = false;\n\n    removeClass(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n    if (this.hot.selection.isSelectedByRowHeader()) {\n      addClass(this.hot.rootElement, CSS_AFTER_SELECTION);\n    }\n\n    if (rowsLen < 1 || target === undefined) {\n      return;\n    }\n\n    const firstMovedVisualRow = this.#rowsToMove[0];\n    const firstMovedPhysicalRow = this.hot.toPhysicalRow(firstMovedVisualRow);\n    const movePerformed = this.dragRows(this.#rowsToMove, target);\n\n    this.#rowsToMove.length = 0;\n\n    if (movePerformed === true) {\n      this.persistentStateSave();\n      this.hot.render();\n      this.hot.view.adjustElementsSize();\n\n      const selectionStart = this.hot.toVisualRow(firstMovedPhysicalRow);\n      const selectionEnd = selectionStart + rowsLen - 1;\n\n      this.hot.selectRows(selectionStart, selectionEnd);\n    }\n  }\n\n  /**\n   * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n   */\n  #onAfterScrollHorizontally() {\n    const wtTable = this.hot.view._wt.wtTable;\n    const headerWidth = this.hot.view._wt.wtViewport.getRowHeaderWidth();\n    const scrollLeft = wtTable.holder.scrollLeft;\n    const posLeft = headerWidth + scrollLeft;\n\n    this.#backlight.setPosition(null, posLeft);\n    this.#backlight.setSize(wtTable.hider.offsetWidth - posLeft);\n  }\n\n  /**\n   * Builds the plugin's UI.\n   *\n   * @private\n   */\n  buildPluginUI() {\n    this.#backlight.build();\n    this.#guideline.build();\n  }\n\n  /**\n   * Callback for the `afterLoadData` hook.\n   */\n  #onAfterLoadData() {\n    this.moveBySettingsOrLoad();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#backlight.destroy();\n    this.#guideline.destroy();\n\n    super.destroy();\n  }\n}\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualRowMove--backlight';\n\n/**\n * @private\n * @class BacklightUI\n */\nclass BacklightUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default BacklightUI;\n","const STATE_INITIALIZED = 0;\nconst STATE_BUILT = 1;\nconst STATE_APPENDED = 2;\nconst UNIT = 'px';\n\n/**\n * @private\n */\nclass BaseUI {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * DOM element representing the ui element.\n   *\n   * @type {HTMLElement}\n   * @private\n   */\n  _element = null;\n  /**\n   * Flag which determines build state of element.\n   *\n   * @type {number}\n   */\n  state = STATE_INITIALIZED;\n\n  constructor(hotInstance) {\n    this.hot = hotInstance;\n  }\n\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n  appendTo(wrapper) {\n    wrapper.appendChild(this._element);\n\n    this.state = STATE_APPENDED;\n  }\n\n  /**\n   * Method for create UI element. Only create, without append to table.\n   */\n  build() {\n    if (this.state !== STATE_INITIALIZED) {\n      return;\n    }\n\n    this._element = this.hot.rootDocument.createElement('div');\n    this.state = STATE_BUILT;\n  }\n\n  /**\n   * Method for remove UI element.\n   */\n  destroy() {\n    if (this.isAppended()) {\n      this._element.parentElement.removeChild(this._element);\n    }\n\n    this._element = null;\n    this.state = STATE_INITIALIZED;\n  }\n\n  /**\n   * Check if UI element are appended.\n   *\n   * @returns {boolean}\n   */\n  isAppended() {\n    return this.state === STATE_APPENDED;\n  }\n\n  /**\n   * Check if UI element are built.\n   *\n   * @returns {boolean}\n   */\n  isBuilt() {\n    return this.state >= STATE_BUILT;\n  }\n\n  /**\n   * Setter for position.\n   *\n   * @param {number} top New top position of the element.\n   * @param {number} left New left position of the element.\n   */\n  setPosition(top, left) {\n    if (top !== undefined) {\n      this._element.style.top = top + UNIT;\n    }\n    if (left !== undefined) {\n      this._element.style.left = left + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains left and top position of the element.\n   */\n  getPosition() {\n    return {\n      top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n      left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element size.\n   *\n   * @param {number} width New width of the element.\n   * @param {number} height New height of the element.\n   */\n  setSize(width, height) {\n    if (width) {\n      this._element.style.width = width + UNIT;\n    }\n    if (height) {\n      this._element.style.height = height + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element position.\n   *\n   * @returns {object} Object contains height and width of the element.\n   */\n  getSize() {\n    return {\n      width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n      height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n    };\n  }\n\n  /**\n   * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n   *\n   * @param {number} top New margin top of the element.\n   * @param {number} left New margin left of the element.\n   */\n  setOffset(top, left) {\n    if (top) {\n      this._element.style.marginTop = top + UNIT;\n    }\n    if (left) {\n      this._element.style.marginLeft = left + UNIT;\n    }\n  }\n\n  /**\n   * Getter for the element offset.\n   *\n   * @returns {object} Object contains top and left offset of the element.\n   */\n  getOffset() {\n    return {\n      top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n      left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n    };\n  }\n}\n\nexport default BaseUI;\n","import BaseUI from './_base';\nimport { addClass } from '../../../helpers/dom/element';\n\nconst CSS_CLASSNAME = 'ht__manualRowMove--guideline';\n\n/**\n * @private\n * @class GuidelineUI\n */\nclass GuidelineUI extends BaseUI {\n  /**\n   * Custom className on build process.\n   */\n  build() {\n    super.build();\n\n    addClass(this._element, CSS_CLASSNAME);\n  }\n}\n\nexport default GuidelineUI;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  ManualRowResize,\n} from './manualRowResize';\n","import { BasePlugin } from '../base';\nimport { addClass, closest, hasClass, removeClass, outerWidth, isDetached } from '../../helpers/dom/element';\nimport { arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { PhysicalIndexToValueMap as IndexToValueMap } from '../../translations';\nimport { DEFAULT_ROW_HEIGHT } from '../../3rdparty/walkontable/src';\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualColumnResize.js\n\nexport const PLUGIN_KEY = 'manualRowResize';\nexport const PLUGIN_PRIORITY = 30;\nconst PERSISTENT_STATE_KEY = 'manualRowHeights';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin ManualRowResize\n * @class ManualRowResize\n *\n * @description\n * This plugin allows to change rows height. To make rows height persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired height of the row.\n * - guide - the helper guide that shows the desired height as a horizontal guide.\n */\nexport class ManualRowResize extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * @type {HTMLTableCellElement}\n   */\n  #currentTH = null;\n  /**\n   * @type {number}\n   */\n  #currentRow = null;\n  /**\n   * @type {number[]}\n   */\n  #selectedRows = [];\n  /**\n   * @type {number}\n   */\n  #currentHeight = null;\n  /**\n   * @type {number}\n   */\n  #newSize = null;\n  /**\n   * @type {number}\n   */\n  #startY = null;\n  /**\n   * @type {number}\n   */\n  #startHeight = null;\n  /**\n   * @type {number}\n   */\n  #startOffset = null;\n  /**\n   * @type {HTMLElement}\n   */\n  #handle = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {HTMLElement}\n   */\n  #guide = this.hot.rootDocument.createElement('DIV');\n  /**\n   * @type {boolean}\n   */\n  #pressed = false;\n  /**\n   * @type {boolean}\n   */\n  #isTriggeredByRMB = false;\n  /**\n   * @type {number}\n   */\n  #dblclick = 0;\n  /**\n   * @type {number}\n   */\n  #autoresizeTimeout = null;\n  /**\n   * PhysicalIndexToValueMap to keep and track widths for physical row indexes.\n   *\n   * @type {PhysicalIndexToValueMap}\n   */\n  #rowHeightsMap;\n  /**\n   * Private pool to save configuration from updateSettings.\n   *\n   * @type {object}\n   */\n  #config;\n\n  constructor(hotInstance) {\n    super(hotInstance);\n\n    addClass(this.#handle, 'manualRowResizer');\n    addClass(this.#guide, 'manualRowResizerGuide');\n  }\n\n  /**\n   * @private\n   * @returns {string}\n   */\n  get inlineDir() {\n    return this.hot.isRtl() ? 'right' : 'left';\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link ManualRowResize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.#rowHeightsMap = new IndexToValueMap();\n    this.#rowHeightsMap.addLocalHook('init', () => this.#onMapInit());\n    this.hot.rowIndexMapper.registerMap(this.pluginName, this.#rowHeightsMap);\n\n    this.addHook('modifyRowHeight', (height, row) => this.#onModifyRowHeight(height, row));\n\n    this.bindEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`manualRowResize`](@/api/options.md#manualrowresize)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.#config = this.#rowHeightsMap.getValues();\n\n    this.hot.rowIndexMapper.unregisterMap(this.pluginName);\n    super.disablePlugin();\n  }\n\n  /**\n   * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be\n   * enabled).\n   *\n   * @fires Hooks#persistentStateSave\n   */\n  saveManualRowHeights() {\n    this.hot.runHooks('persistentStateSave', PERSISTENT_STATE_KEY, this.#rowHeightsMap.getValues());\n  }\n\n  /**\n   * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option\n   * has be enabled).\n   *\n   * @returns {Array}\n   * @fires Hooks#persistentStateLoad\n   */\n  loadManualRowHeights() {\n    const storedState = {};\n\n    this.hot.runHooks('persistentStateLoad', PERSISTENT_STATE_KEY, storedState);\n\n    return storedState.value;\n  }\n\n  /**\n   * Sets the new height for specified row index.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} height Row height.\n   * @returns {number} Returns new height.\n   */\n  setManualSize(row, height) {\n    const physicalRow = this.hot.toPhysicalRow(row);\n    const newHeight = Math.max(height, DEFAULT_ROW_HEIGHT);\n\n    this.#rowHeightsMap.setValueAtIndex(physicalRow, newHeight);\n\n    return newHeight;\n  }\n\n  /**\n   * Returns the last desired row height set manually with the resize handle.\n   *\n   * @returns {number} The last desired row height.\n   */\n  getLastDesiredRowHeight() {\n    return this.#currentHeight;\n  }\n\n  /**\n   * Sets the resize handle position.\n   *\n   * @private\n   * @param {HTMLCellElement} TH TH HTML element.\n   */\n  setupHandlePosition(TH) {\n    this.#currentTH = TH;\n\n    const { view } = this.hot;\n    const { _wt: wt } = view;\n    const cellCoords = wt.wtTable.getCoords(this.#currentTH);\n    const row = cellCoords.row;\n\n    // Ignore row headers.\n    if (row < 0) {\n      return;\n    }\n\n    const headerWidth = outerWidth(this.#currentTH);\n    const box = this.#currentTH.getBoundingClientRect();\n    // Read \"fixedRowsTop\" and \"fixedRowsBottom\" through the Walkontable as in that context, the fixed\n    // rows are modified (reduced by the number of hidden rows) by TableView module.\n    const fixedRowTop = row < wt.getSetting('fixedRowsTop');\n    const fixedRowBottom = row >= view.countNotHiddenRowIndexes(0, 1) - wt.getSetting('fixedRowsBottom');\n    let relativeHeaderPosition;\n\n    if (fixedRowTop) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .topInlineStartCornerOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n\n    } else if (fixedRowBottom) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .bottomInlineStartCornerOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    // If the TH is not a child of the top-left/bottom-left overlay, recalculate using\n    // the left overlay - as this overlay contains the rest of the headers.\n    if (!relativeHeaderPosition) {\n      relativeHeaderPosition = wt\n        .wtOverlays\n        .inlineStartOverlay\n        .getRelativeCellPosition(this.#currentTH, cellCoords.row, cellCoords.col);\n    }\n\n    this.#currentRow = this.hot.rowIndexMapper.getVisualFromRenderableIndex(row);\n    this.#selectedRows = [];\n\n    const isFullRowSelected = this.hot.selection.isSelectedByCorner() || this.hot.selection.isSelectedByRowHeader();\n\n    if (this.hot.selection.isSelected() && isFullRowSelected) {\n      const selectionRanges = this.hot.getSelectedRange();\n\n      arrayEach(selectionRanges, (selectionRange) => {\n        const fromRow = selectionRange.getTopStartCorner().row;\n        const toRow = selectionRange.getBottomStartCorner().row;\n\n        // Add every selected row for resize action.\n        rangeEach(fromRow, toRow, (rowIndex) => {\n          if (!this.#selectedRows.includes(rowIndex)) {\n            this.#selectedRows.push(rowIndex);\n          }\n        });\n      });\n    }\n\n    // Resizing element beyond the current selection (also when there is no selection).\n    if (!this.#selectedRows.includes(this.#currentRow)) {\n      this.#selectedRows = [this.#currentRow];\n    }\n\n    this.#startOffset = relativeHeaderPosition.top - 6;\n    this.#startHeight = parseInt(box.height, 10);\n\n    this.#handle.style.top = `${this.#startOffset + this.#startHeight}px`;\n    this.#handle.style[this.inlineDir] = `${relativeHeaderPosition.start}px`;\n\n    this.#handle.style.width = `${headerWidth}px`;\n    this.hot.rootElement.appendChild(this.#handle);\n  }\n\n  /**\n   * Refresh the resize handle position.\n   *\n   * @private\n   */\n  refreshHandlePosition() {\n    this.#handle.style.top = `${this.#startOffset + this.#currentHeight}px`;\n  }\n\n  /**\n   * Sets the resize guide position.\n   *\n   * @private\n   */\n  setupGuidePosition() {\n    const handleWidth = parseInt(outerWidth(this.#handle), 10);\n    const handleEndPosition = parseInt(this.#handle.style[this.inlineDir], 10) + handleWidth;\n    const maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10);\n\n    addClass(this.#handle, 'active');\n    addClass(this.#guide, 'active');\n\n    this.#guide.style.top = this.#handle.style.top;\n    this.#guide.style[this.inlineDir] = `${handleEndPosition}px`;\n    this.#guide.style.width = `${maximumVisibleElementWidth - handleWidth}px`;\n    this.hot.rootElement.appendChild(this.#guide);\n  }\n\n  /**\n   * Refresh the resize guide position.\n   *\n   * @private\n   */\n  refreshGuidePosition() {\n    this.#guide.style.top = this.#handle.style.top;\n  }\n\n  /**\n   * Hides both the resize handle and resize guide.\n   *\n   * @private\n   */\n  hideHandleAndGuide() {\n    removeClass(this.#handle, 'active');\n    removeClass(this.#guide, 'active');\n  }\n\n  /**\n   * Checks if provided element is considered as a row header.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {boolean}\n   */\n  checkIfRowHeader(element) {\n    const tbody = closest(element, ['TBODY'], this.hot.rootElement);\n    const {\n      inlineStartOverlay,\n      topInlineStartCornerOverlay,\n      bottomInlineStartCornerOverlay,\n    } = this.hot.view._wt.wtOverlays;\n\n    return [\n      inlineStartOverlay.clone.wtTable.TBODY,\n      topInlineStartCornerOverlay.clone.wtTable.TBODY,\n      bottomInlineStartCornerOverlay.clone.wtTable.TBODY,\n    ].includes(tbody);\n  }\n\n  /**\n   * Gets the TH element from the provided element.\n   *\n   * @private\n   * @param {HTMLElement} element HTML element.\n   * @returns {HTMLElement}\n   */\n  getClosestTHParent(element) {\n    if (element.tagName !== 'TABLE') {\n      if (element.tagName === 'TH') {\n        return element;\n      }\n\n      return this.getClosestTHParent(element.parentNode);\n\n    }\n\n    return null;\n  }\n\n  /**\n   * Returns the actual height for the provided row index.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @returns {number} Actual row height.\n   */\n  getActualRowHeight(row) {\n    // TODO: this should utilize `this.hot.getRowHeight` after it's fixed and working properly.\n    const walkontableHeight = this.hot.view._wt.wtTable.getRowHeight(row);\n\n    if (walkontableHeight !== undefined && this.#newSize < walkontableHeight) {\n      return walkontableHeight;\n    }\n\n    return this.#newSize;\n  }\n\n  /**\n   * 'mouseover' event callback - set the handle position.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseOver(event) {\n    // Workaround for #6926 - if the `event.target` is temporarily detached, we can skip this callback and wait for\n    // the next `onmouseover`.\n    if (isDetached(event.target)) {\n      return;\n    }\n\n    // A \"mouseover\" action is triggered right after executing \"contextmenu\" event. It should be ignored.\n    if (this.#isTriggeredByRMB === true) {\n      return;\n    }\n\n    if (this.checkIfRowHeader(event.target)) {\n      const th = this.getClosestTHParent(event.target);\n\n      if (th) {\n        if (!this.#pressed) {\n          this.setupHandlePosition(th);\n        }\n      }\n    }\n  }\n\n  /**\n   * Auto-size row after doubleclick - callback.\n   *\n   * @private\n   * @fires Hooks#beforeRowResize\n   * @fires Hooks#afterRowResize\n   */\n  afterMouseDownTimeout() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const resize = (row, forceRender) => {\n      const hookNewSize = this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, true);\n\n      if (hookNewSize !== undefined) {\n        this.#newSize = hookNewSize;\n      }\n\n      this.setManualSize(row, this.#newSize); // double click sets auto row size\n\n      this.hot.runHooks('afterRowResize', this.getActualRowHeight(row), row, true);\n\n      if (forceRender) {\n        render();\n      }\n    };\n\n    if (this.#dblclick >= 2) {\n      const selectedRowsLength = this.#selectedRows.length;\n\n      if (selectedRowsLength > 1) {\n        arrayEach(this.#selectedRows, (selectedRow) => {\n          resize(selectedRow);\n        });\n        render();\n      } else {\n        arrayEach(this.#selectedRows, (selectedRow) => {\n          resize(selectedRow, true);\n        });\n      }\n    }\n    this.#dblclick = 0;\n    this.#autoresizeTimeout = null;\n  }\n\n  /**\n   * 'mousedown' event callback.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseDown(event) {\n    if (hasClass(event.target, 'manualRowResizer')) {\n      this.setupHandlePosition(this.#currentTH);\n      this.setupGuidePosition();\n      this.#pressed = true;\n\n      if (this.#autoresizeTimeout === null) {\n        this.#autoresizeTimeout = setTimeout(() => this.afterMouseDownTimeout(), 500);\n\n        this.hot._registerTimeout(this.#autoresizeTimeout);\n      }\n\n      this.#dblclick += 1;\n      this.#startY = event.pageY;\n      this.#newSize = this.#startHeight;\n    }\n  }\n\n  /**\n   * 'mousemove' event callback - refresh the handle and guide positions, cache the new row height.\n   *\n   * @param {MouseEvent} event The mouse event.\n   */\n  #onMouseMove(event) {\n    if (this.#pressed) {\n      this.#currentHeight = this.#startHeight + (event.pageY - this.#startY);\n\n      arrayEach(this.#selectedRows, (selectedRow) => {\n        this.#newSize = this.setManualSize(selectedRow, this.#currentHeight);\n      });\n\n      this.refreshHandlePosition();\n      this.refreshGuidePosition();\n    }\n  }\n\n  /**\n   * 'mouseup' event callback - apply the row resizing.\n   *\n   * @fires Hooks#beforeRowResize\n   * @fires Hooks#afterRowResize\n   */\n  #onMouseUp() {\n    const render = () => {\n      this.hot.forceFullRender = true;\n      this.hot.view.render(); // updates all\n      this.hot.view.adjustElementsSize();\n    };\n    const runHooks = (row, forceRender) => {\n      this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, false);\n\n      if (forceRender) {\n        render();\n      }\n\n      this.saveManualRowHeights();\n\n      this.hot.runHooks('afterRowResize', this.getActualRowHeight(row), row, false);\n    };\n\n    if (this.#pressed) {\n      this.hideHandleAndGuide();\n      this.#pressed = false;\n\n      if (this.#newSize !== this.#startHeight) {\n        const selectedRowsLength = this.#selectedRows.length;\n\n        if (selectedRowsLength > 1) {\n          arrayEach(this.#selectedRows, (selectedRow) => {\n            runHooks(selectedRow);\n          });\n          render();\n        } else {\n          arrayEach(this.#selectedRows, (selectedRow) => {\n            runHooks(selectedRow, true);\n          });\n        }\n      }\n\n      this.setupHandlePosition(this.#currentTH);\n    }\n  }\n\n  /**\n   * Callback for \"contextmenu\" event triggered on element showing move handle. It removes handle and guide elements.\n   */\n  #onContextMenu() {\n    this.hideHandleAndGuide();\n    this.hot.rootElement.removeChild(this.#handle);\n    this.hot.rootElement.removeChild(this.#guide);\n\n    this.#pressed = false;\n    this.#isTriggeredByRMB = true;\n\n    // There is thrown \"mouseover\" event right after opening a context menu. This flag inform that handle\n    // shouldn't be drawn just after removing it.\n    this.hot._registerImmediate(() => {\n      this.#isTriggeredByRMB = false;\n    });\n  }\n\n  /**\n   * Binds the mouse events.\n   *\n   * @private\n   */\n  bindEvents() {\n    const { rootElement, rootWindow } = this.hot;\n\n    this.eventManager.addEventListener(rootElement, 'mouseover', e => this.#onMouseOver(e));\n    this.eventManager.addEventListener(rootElement, 'mousedown', e => this.#onMouseDown(e));\n    this.eventManager.addEventListener(rootWindow, 'mousemove', e => this.#onMouseMove(e));\n    this.eventManager.addEventListener(rootWindow, 'mouseup', () => this.#onMouseUp());\n    this.eventManager.addEventListener(this.#handle, 'contextmenu', () => this.#onContextMenu());\n  }\n\n  /**\n   * Modifies the provided row height, based on the plugin settings.\n   *\n   * @param {number} height Row height.\n   * @param {number} row Visual row index.\n   * @returns {number}\n   */\n  #onModifyRowHeight(height, row) {\n    let newHeight = height;\n\n    if (this.enabled) {\n      const physicalRow = this.hot.toPhysicalRow(row);\n      const rowHeight = this.#rowHeightsMap.getValueAtIndex(physicalRow);\n\n      if (this.hot.getSettings()[PLUGIN_KEY] && rowHeight) {\n        newHeight = rowHeight;\n      }\n    }\n\n    return newHeight;\n  }\n\n  /**\n   * Callback to call on map's `init` local hook.\n   */\n  #onMapInit() {\n    const initialSetting = this.hot.getSettings()[PLUGIN_KEY];\n    const loadedManualRowHeights = this.loadManualRowHeights();\n\n    this.hot.batchExecution(() => {\n      if (typeof loadedManualRowHeights !== 'undefined') {\n        loadedManualRowHeights.forEach((height, index) => {\n          this.#rowHeightsMap.setValueAtIndex(index, height);\n        });\n\n      } else if (Array.isArray(initialSetting)) {\n\n        initialSetting.forEach((height, index) => {\n          this.#rowHeightsMap.setValueAtIndex(index, height);\n        });\n\n        this.#config = initialSetting;\n\n      } else if (initialSetting === true && Array.isArray(this.#config)) {\n        this.#config.forEach((height, index) => {\n          this.#rowHeightsMap.setValueAtIndex(index, height);\n        });\n      }\n    }, true);\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  MergeCells,\n} from './mergeCells';\n","import { BasePlugin } from '../base';\nimport Hooks from '../../pluginHooks';\nimport MergedCellsCollection from './cellsCollection';\nimport MergedCellCoords from './cellCoords';\nimport AutofillCalculations from './calculations/autofill';\nimport SelectionCalculations from './calculations/selection';\nimport toggleMergeItem from './contextMenuItem/toggleMerge';\nimport { arrayEach } from '../../helpers/array';\nimport { isObject } from '../../helpers/object';\nimport { warn } from '../../helpers/console';\nimport { rangeEach } from '../../helpers/number';\nimport './mergeCells.css';\nimport { getStyle } from '../../helpers/dom/element';\nimport { isChrome } from '../../helpers/browser';\nimport { FocusOrder } from './focusOrder';\nimport { createMergeCellRenderer } from './renderer';\n\nHooks.getSingleton().register('beforeMergeCells');\nHooks.getSingleton().register('afterMergeCells');\nHooks.getSingleton().register('beforeUnmergeCells');\nHooks.getSingleton().register('afterUnmergeCells');\n\nexport const PLUGIN_KEY = 'mergeCells';\nexport const PLUGIN_PRIORITY = 150;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin MergeCells\n * @class MergeCells\n *\n * @description\n * Plugin, which allows merging cells in the table (using the initial configuration, API or context menu).\n *\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *  data: getData(),\n *  mergeCells: [\n *    {row: 0, col: 3, rowspan: 3, colspan: 3},\n *    {row: 2, col: 6, rowspan: 2, colspan: 2},\n *    {row: 4, col: 8, rowspan: 3, colspan: 3}\n *  ],\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   // enable plugin\n *   mergeCells={[\n *    {row: 0, col: 3, rowspan: 3, colspan: 3},\n *    {row: 2, col: 6, rowspan: 2, colspan: 2},\n *    {row: 4, col: 8, rowspan: 3, colspan: 3}\n *   ]}\n * />\n * ```\n * :::\n */\nexport class MergeCells extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * A container for all the merged cells.\n   *\n   * @private\n   * @type {MergedCellsCollection}\n   */\n  mergedCellsCollection = null;\n  /**\n   * Instance of the class responsible for all the autofill-related calculations.\n   *\n   * @private\n   * @type {AutofillCalculations}\n   */\n  autofillCalculations = null;\n  /**\n   * Instance of the class responsible for the selection-related calculations.\n   *\n   * @private\n   * @type {SelectionCalculations}\n   */\n  selectionCalculations = null;\n  /**\n   * The holder for the last selected focus coordinates. This allows keeping the correct coordinates in cases after the\n   * focus is moved out of the merged cell.\n   *\n   * @type {CellCoords}\n   */\n  #lastSelectedFocus = null;\n  /**\n   * The last used transformation delta.\n   *\n   * @type {{ row: number, col: number }}\n   */\n  #lastFocusDelta = { row: 0, col: 0 };\n  /**\n   * The module responsible for providing the correct focus order (vertical and horizontal) within a selection that\n   * contains merged cells.\n   *\n   * @type {FocusOrder}\n   */\n  #focusOrder = new FocusOrder({\n    mergedCellsGetter: (row, column) => this.mergedCellsCollection.get(row, column),\n    rowIndexMapper: this.hot.rowIndexMapper,\n    columnIndexMapper: this.hot.columnIndexMapper,\n  });\n  /**\n   * The cell renderer responsible for rendering the merged cells.\n   *\n   * @type {{before: Function, after: Function}}\n   */\n  #cellRenderer = createMergeCellRenderer(this);\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link MergeCells#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.mergedCellsCollection = new MergedCellsCollection(this);\n    this.autofillCalculations = new AutofillCalculations(this);\n    this.selectionCalculations = new SelectionCalculations(this);\n\n    this.addHook('afterInit', (...args) => this.#onAfterInit(...args));\n    this.addHook('modifyTransformFocus', (...args) => this.#onModifyTransformFocus(...args));\n    this.addHook('modifyTransformStart', (...args) => this.#onModifyTransformStart(...args));\n    this.addHook('modifyTransformEnd', (...args) => this.#onModifyTransformEnd(...args));\n    this.addHook('beforeSelectionHighlightSet', (...args) => this.#onBeforeSelectionHighlightSet(...args));\n    this.addHook('beforeSetRangeStart', (...args) => this.#onBeforeSetRangeStart(...args));\n    this.addHook('beforeSetRangeStartOnly', (...args) => this.#onBeforeSetRangeStart(...args));\n    this.addHook('beforeSelectionFocusSet', (...args) => this.#onBeforeSelectionFocusSet(...args));\n    this.addHook('afterSelectionFocusSet', (...args) => this.#onAfterSelectionFocusSet(...args));\n    this.addHook('afterSelectionEnd', (...args) => this.#onAfterSelectionEnd(...args));\n    this.addHook('modifyGetCellCoords', (...args) => this.#onModifyGetCellCoords(...args));\n    this.addHook('afterIsMultipleSelection', (...args) => this.#onAfterIsMultipleSelection(...args));\n    this.addHook('afterRenderer', (...args) => this.#cellRenderer.after(...args));\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#addMergeActionsToContextMenu(...args));\n    this.addHook('afterGetCellMeta', (...args) => this.#onAfterGetCellMeta(...args));\n    this.addHook('afterViewportRowCalculatorOverride',\n      (...args) => this.#onAfterViewportRowCalculatorOverride(...args));\n    this.addHook('afterViewportColumnCalculatorOverride',\n      (...args) => this.#onAfterViewportColumnCalculatorOverride(...args));\n    this.addHook('modifyAutofillRange', (...args) => this.#onModifyAutofillRange(...args));\n    this.addHook('afterCreateCol', (...args) => this.#onAfterCreateCol(...args));\n    this.addHook('afterRemoveCol', (...args) => this.#onAfterRemoveCol(...args));\n    this.addHook('afterCreateRow', (...args) => this.#onAfterCreateRow(...args));\n    this.addHook('afterRemoveRow', (...args) => this.#onAfterRemoveRow(...args));\n    this.addHook('afterChange', (...args) => this.#onAfterChange(...args));\n    this.addHook('beforeDrawBorders', (...args) => this.#onBeforeDrawAreaBorders(...args));\n    this.addHook('afterDrawSelection', (...args) => this.#onAfterDrawSelection(...args));\n    this.addHook('beforeRemoveCellClassNames', (...args) => this.#onBeforeRemoveCellClassNames(...args));\n    this.addHook('beforeBeginEditing', (...args) => this.#onBeforeBeginEditing(...args));\n    this.addHook('modifyRowHeightByOverlayName', (...args) => this.#onModifyRowHeightByOverlayName(...args));\n    this.addHook('beforeUndoStackChange', (action, source) => {\n      if (source === 'MergeCells') {\n        return false;\n      }\n    });\n\n    this.registerShortcuts();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.clearCollections();\n    this.unregisterShortcuts();\n    this.hot.render();\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the\n   * following configuration options:\n   *  - [`mergeCells`](@/api/options.md#mergecells)\n   */\n  updatePlugin() {\n    const settings = this.hot.getSettings()[PLUGIN_KEY];\n\n    this.disablePlugin();\n    this.enablePlugin();\n\n    this.generateFromSettings(settings);\n\n    super.updatePlugin();\n  }\n\n  /**\n   * If the browser is recognized as Chrome, force an additional repaint to prevent showing the effects of a Chrome bug.\n   *\n   * Issue described in https://github.com/handsontable/dev-handsontable/issues/521.\n   *\n   * @private\n   */\n  ifChromeForceRepaint() {\n    if (!isChrome()) {\n      return;\n    }\n\n    const rowsToRefresh = [];\n    let rowIndexesToRefresh = [];\n\n    this.mergedCellsCollection.mergedCells.forEach((mergedCell) => {\n      const { row, rowspan } = mergedCell;\n\n      for (let r = row + 1; r < row + rowspan; r++) {\n        rowIndexesToRefresh.push(r);\n      }\n    });\n\n    // Remove duplicates\n    rowIndexesToRefresh = [...new Set(rowIndexesToRefresh)];\n\n    rowIndexesToRefresh.forEach((rowIndex) => {\n      const renderableRowIndex = this.hot.rowIndexMapper.getRenderableFromVisualIndex(rowIndex);\n\n      this.hot.view._wt.wtOverlays.getOverlays(true).map(\n        overlay => (overlay?.name === 'master' ? overlay : overlay.clone.wtTable)\n      ).forEach((wtTableRef) => {\n        const rowToRefresh = wtTableRef.getRow(renderableRowIndex);\n\n        if (rowToRefresh) {\n          // Modify the TR's `background` property to later modify it asynchronously.\n          // The background color is getting modified only with the alpha, so the change should not be visible (and is\n          // covered by the TDs' background color).\n          rowToRefresh.style.background =\n            getStyle(rowToRefresh, 'backgroundColor').replace(')', ', 0.99)');\n\n          rowsToRefresh.push(rowToRefresh);\n        }\n      });\n    });\n\n    // Asynchronously revert the TRs' `background` property to force a fresh repaint.\n    this.hot._registerTimeout(() => {\n      rowsToRefresh.forEach((rowElement) => {\n        rowElement.style.background =\n          getStyle(rowElement, 'backgroundColor').replace(', 0.99)', ')');\n      });\n    }, 1);\n  }\n\n  /**\n   * Validates a single setting object, represented by a single merged cell information object.\n   *\n   * @private\n   * @param {object} setting An object with `row`, `col`, `rowspan` and `colspan` properties.\n   * @returns {boolean}\n   */\n  validateSetting(setting) {\n    if (!setting) {\n      return false;\n    }\n\n    if (MergedCellCoords.containsNegativeValues(setting)) {\n      warn(MergedCellCoords.NEGATIVE_VALUES_WARNING(setting));\n\n      return false;\n    }\n    if (MergedCellCoords.isOutOfBounds(setting, this.hot.countRows(), this.hot.countCols())) {\n      warn(MergedCellCoords.IS_OUT_OF_BOUNDS_WARNING(setting));\n\n      return false;\n    }\n    if (MergedCellCoords.isSingleCell(setting)) {\n      warn(MergedCellCoords.IS_SINGLE_CELL(setting));\n\n      return false;\n    }\n    if (MergedCellCoords.containsZeroSpan(setting)) {\n      warn(MergedCellCoords.ZERO_SPAN_WARNING(setting));\n\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Generates the merged cells from the settings provided to the plugin.\n   *\n   * @private\n   * @param {Array|boolean} settings The settings provided to the plugin.\n   */\n  generateFromSettings(settings) {\n    if (!Array.isArray(settings)) {\n      return;\n    }\n\n    const validSettings = settings\n      .filter(mergeCellInfo => this.validateSetting(mergeCellInfo));\n    const nonOverlappingSettings = this.mergedCellsCollection\n      .filterOverlappingMergeCells(validSettings);\n\n    const populatedNulls = [];\n\n    nonOverlappingSettings.forEach((mergeCellInfo) => {\n      const { row, col, rowspan, colspan } = mergeCellInfo;\n      const from = this.hot._createCellCoords(row, col);\n      const to = this.hot._createCellCoords(row + rowspan - 1, col + colspan - 1);\n      const mergeRange = this.hot._createCellRange(from, from, to);\n\n      // Merging without data population.\n      this.mergeRange(mergeRange, true, true);\n\n      for (let r = row; r < row + rowspan; r++) {\n        for (let c = col; c < col + colspan; c++) {\n          // Not resetting a cell representing a merge area's value.\n          if (r !== row || c !== col) {\n            populatedNulls.push([r, c, null]);\n          }\n        }\n      }\n    });\n\n    // There are no merged cells. Thus, no data population is needed.\n    if (populatedNulls.length === 0) {\n      return;\n    }\n\n    // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.\n    this.hot.setDataAtCell(populatedNulls, undefined, undefined, this.pluginName);\n  }\n\n  /**\n   * Clears the merged cells from the merged cell container.\n   */\n  clearCollections() {\n    this.mergedCellsCollection.clear();\n  }\n\n  /**\n   * Returns `true` if a range is mergeable.\n   *\n   * @private\n   * @param {object} newMergedCellInfo Merged cell information object to test.\n   * @param {boolean} [auto=false] `true` if triggered at initialization.\n   * @returns {boolean}\n   */\n  canMergeRange(newMergedCellInfo, auto = false) {\n    return auto ? true : this.validateSetting(newMergedCellInfo);\n  }\n\n  /**\n   * Merges the selection provided as a cell range.\n   *\n   * @param {CellRange} [cellRange] Selection cell range.\n   */\n  mergeSelection(cellRange = this.hot.getSelectedRangeLast()) {\n    if (!cellRange) {\n      return;\n    }\n\n    cellRange.setDirection(this.hot.isRtl() ? 'NE-SW' : 'NW-SE');\n\n    const { from, to } = cellRange;\n\n    this.unmergeRange(cellRange, true);\n    this.mergeRange(cellRange);\n    this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n  }\n\n  /**\n   * Unmerges the selection provided as a cell range.\n   *\n   * @param {CellRange} [cellRange] Selection cell range.\n   */\n  unmergeSelection(cellRange = this.hot.getSelectedRangeLast()) {\n    if (!cellRange) {\n      return;\n    }\n\n    const { from, to } = cellRange;\n\n    this.unmergeRange(cellRange, true);\n    this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n  }\n\n  /**\n   * Merges cells in the provided cell range.\n   *\n   * @private\n   * @param {CellRange} cellRange Cell range to merge.\n   * @param {boolean} [auto=false] `true` if is called automatically, e.g. At initialization.\n   * @param {boolean} [preventPopulation=false] `true`, if the method should not run `populateFromArray` at the end,\n   *   but rather return its arguments.\n   * @returns {Array|boolean} Returns an array of [row, column, dataUnderCollection] if preventPopulation is set to\n   *   true. If the the merging process went successful, it returns `true`, otherwise - `false`.\n   * @fires Hooks#beforeMergeCells\n   * @fires Hooks#afterMergeCells\n   */\n  mergeRange(cellRange, auto = false, preventPopulation = false) {\n    const topStart = cellRange.getTopStartCorner();\n    const bottomEnd = cellRange.getBottomEndCorner();\n    const mergeParent = {\n      row: topStart.row,\n      col: topStart.col,\n      rowspan: bottomEnd.row - topStart.row + 1,\n      colspan: bottomEnd.col - topStart.col + 1\n    };\n    const clearedData = [];\n    let populationInfo = null;\n\n    if (!this.canMergeRange(mergeParent, auto)) {\n      return false;\n    }\n\n    this.hot.runHooks('beforeMergeCells', cellRange, auto);\n\n    rangeEach(0, mergeParent.rowspan - 1, (i) => {\n      rangeEach(0, mergeParent.colspan - 1, (j) => {\n        let clearedValue = null;\n\n        if (!clearedData[i]) {\n          clearedData[i] = [];\n        }\n\n        if (i === 0 && j === 0) {\n          clearedValue = this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(mergeParent.row),\n            this.hot.toPhysicalColumn(mergeParent.col));\n\n        } else {\n          this.hot.setCellMeta(mergeParent.row + i, mergeParent.col + j, 'hidden', true);\n        }\n\n        clearedData[i][j] = clearedValue;\n      });\n    });\n\n    this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);\n\n    const mergedCellAdded = this.mergedCellsCollection.add(mergeParent, auto);\n\n    if (mergedCellAdded) {\n      if (preventPopulation) {\n        populationInfo = [mergeParent.row, mergeParent.col, clearedData];\n\n      } else {\n        // TODO: Change the `source` argument to a more meaningful value, e.g. `${this.pluginName}.clearCells`.\n        this.hot.populateFromArray(\n          mergeParent.row, mergeParent.col, clearedData, undefined, undefined, this.pluginName);\n      }\n\n      if (!auto) {\n        this.ifChromeForceRepaint();\n      }\n\n      this.hot.runHooks('afterMergeCells', cellRange, mergeParent, auto);\n\n      return populationInfo;\n    }\n\n    return true;\n  }\n\n  /**\n   * Unmerges the selection provided as a cell range. If no cell range is provided, it uses the current selection.\n   *\n   * @private\n   * @param {CellRange} cellRange Selection cell range.\n   * @param {boolean} [auto=false] `true` if called automatically by the plugin.\n   *\n   * @fires Hooks#beforeUnmergeCells\n   * @fires Hooks#afterUnmergeCells\n   */\n  unmergeRange(cellRange, auto = false) {\n    const mergedCells = this.mergedCellsCollection.getWithinRange(cellRange);\n\n    if (mergedCells.length === 0) {\n      return;\n    }\n\n    this.hot.runHooks('beforeUnmergeCells', cellRange, auto);\n\n    arrayEach(mergedCells, (currentCollection) => {\n      this.mergedCellsCollection.remove(currentCollection.row, currentCollection.col);\n\n      rangeEach(0, currentCollection.rowspan - 1, (i) => {\n        rangeEach(0, currentCollection.colspan - 1, (j) => {\n          this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');\n          this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'copyable');\n        });\n      });\n\n      this.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');\n    });\n\n    this.hot.runHooks('afterUnmergeCells', cellRange, auto);\n    this.hot.render();\n  }\n\n  /**\n   * Merges or unmerges, based on the cell range provided as `cellRange`.\n   *\n   * @private\n   * @param {CellRange} cellRange The cell range to merge or unmerged.\n   */\n  toggleMerge(cellRange) {\n    const mergedCell = this.mergedCellsCollection.get(cellRange.from.row, cellRange.from.col);\n    const mergedCellCoversWholeRange = mergedCell.row === cellRange.from.row &&\n      mergedCell.col === cellRange.from.col &&\n      mergedCell.row + mergedCell.rowspan - 1 === cellRange.to.row &&\n      mergedCell.col + mergedCell.colspan - 1 === cellRange.to.col;\n\n    if (mergedCellCoversWholeRange) {\n      this.unmergeRange(cellRange);\n\n    } else {\n      this.mergeSelection(cellRange);\n    }\n  }\n\n  /**\n   * Merges the specified range.\n   *\n   * @param {number} startRow Start row of the merged cell.\n   * @param {number} startColumn Start column of the merged cell.\n   * @param {number} endRow End row of the merged cell.\n   * @param {number} endColumn End column of the merged cell.\n   * @fires Hooks#beforeMergeCells\n   * @fires Hooks#afterMergeCells\n   */\n  merge(startRow, startColumn, endRow, endColumn) {\n    const start = this.hot._createCellCoords(startRow, startColumn);\n    const end = this.hot._createCellCoords(endRow, endColumn);\n\n    this.mergeRange(this.hot._createCellRange(start, start, end));\n  }\n\n  /**\n   * Unmerges the merged cell in the provided range.\n   *\n   * @param {number} startRow Start row of the merged cell.\n   * @param {number} startColumn Start column of the merged cell.\n   * @param {number} endRow End row of the merged cell.\n   * @param {number} endColumn End column of the merged cell.\n   * @fires Hooks#beforeUnmergeCells\n   * @fires Hooks#afterUnmergeCells\n   */\n  unmerge(startRow, startColumn, endRow, endColumn) {\n    const start = this.hot._createCellCoords(startRow, startColumn);\n    const end = this.hot._createCellCoords(endRow, endColumn);\n\n    this.unmergeRange(this.hot._createCellRange(start, start, end));\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.generateFromSettings(this.hot.getSettings()[PLUGIN_KEY]);\n    this.hot.render();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling a merge.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const gridContext = shortcutManager.getContext('grid');\n\n    gridContext.addShortcut({\n      keys: [['Control', 'm']],\n      callback: () => {\n        const range = this.hot.getSelectedRangeLast();\n\n        if (range && !range.isSingleHeader()) {\n          this.toggleMerge(range);\n          this.hot.render();\n        }\n      },\n      runOnlyIf: event => !event.altKey, // right ALT in some systems triggers ALT+CTRL\n      group: SHORTCUTS_GROUP,\n    });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling a merge.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    const shortcutManager = this.hot.getShortcutManager();\n    const gridContext = shortcutManager.getContext('grid');\n\n    gridContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Modifies the information on whether the current selection contains multiple cells. The `afterIsMultipleSelection`\n   * hook callback.\n   *\n   * @param {boolean} isMultiple Determines whether the current selection contains multiple cells.\n   * @returns {boolean}\n   */\n  #onAfterIsMultipleSelection(isMultiple) {\n    if (isMultiple) {\n      const mergedCells = this.mergedCellsCollection.mergedCells;\n      const selectionRange = this.hot.getSelectedRangeLast();\n      const topStartCoords = selectionRange.getTopStartCorner();\n      const bottomEndCoords = selectionRange.getBottomEndCorner();\n\n      for (let group = 0; group < mergedCells.length; group += 1) {\n        if (\n          topStartCoords.row === mergedCells[group].row &&\n          topStartCoords.col === mergedCells[group].col &&\n          bottomEndCoords.row === mergedCells[group].row + mergedCells[group].rowspan - 1 &&\n          bottomEndCoords.col === mergedCells[group].col + mergedCells[group].colspan - 1\n        ) {\n          return false;\n        }\n      }\n    }\n\n    return isMultiple;\n  }\n\n  /**\n   * `modifyTransformFocus` hook callback.\n   *\n   * @param {object} delta The transformation delta.\n   */\n  #onModifyTransformFocus(delta) {\n    this.#lastFocusDelta.row = delta.row;\n    this.#lastFocusDelta.col = delta.col;\n  }\n\n  /**\n   * `modifyTransformStart` hook callback.\n   *\n   * @param {object} delta The transformation delta.\n   */\n  #onModifyTransformStart(delta) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const { highlight } = selectedRange;\n    const { columnIndexMapper, rowIndexMapper } = this.hot;\n\n    if (this.#lastSelectedFocus) {\n      if (rowIndexMapper.getRenderableFromVisualIndex(this.#lastSelectedFocus.row) !== null) {\n        highlight.row = this.#lastSelectedFocus.row;\n      }\n\n      if (columnIndexMapper.getRenderableFromVisualIndex(this.#lastSelectedFocus.col) !== null) {\n        highlight.col = this.#lastSelectedFocus.col;\n      }\n\n      this.#lastSelectedFocus = null;\n    }\n\n    const mergedParent = this.mergedCellsCollection.get(highlight.row, highlight.col);\n\n    if (!mergedParent) {\n      return;\n    }\n\n    const visualColumnIndexStart = mergedParent.col;\n    const visualColumnIndexEnd = mergedParent.col + mergedParent.colspan - 1;\n\n    if (delta.col < 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexStart - 1 : visualColumnIndexEnd;\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).\n        delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);\n      } else {\n        delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);\n      }\n\n    } else if (delta.col > 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexEnd + 1 : visualColumnIndexStart;\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).\n        delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());\n      } else {\n        delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);\n      }\n    }\n\n    const visualRowIndexStart = mergedParent.row;\n    const visualRowIndexEnd = mergedParent.row + mergedParent.rowspan - 1;\n\n    if (delta.row < 0) {\n      const nextRow = highlight.row >= visualRowIndexStart && highlight.row <= visualRowIndexEnd ?\n        visualRowIndexStart - 1 : visualRowIndexEnd;\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, -1);\n\n      if (notHiddenRowIndex === null) {\n        // There are no visible rows anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the previous column (if autoWrapCol is enabled).\n        delta.row = -this.hot.view.countRenderableRowsInRange(0, highlight.row);\n      } else {\n        delta.row = -Math.max(this.hot.view.countRenderableRowsInRange(notHiddenRowIndex, highlight.row) - 1, 1);\n      }\n\n    } else if (delta.row > 0) {\n      const nextRow = highlight.row >= visualRowIndexStart && highlight.row <= visualRowIndexEnd ?\n        visualRowIndexEnd + 1 : visualRowIndexStart;\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, 1);\n\n      if (notHiddenRowIndex === null) {\n        // There are no visible rows anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the next column (if autoWrapCol is enabled).\n        delta.row = this.hot.view.countRenderableRowsInRange(highlight.row, this.hot.countRows());\n      } else {\n        delta.row = Math.max(this.hot.view.countRenderableRowsInRange(highlight.row, notHiddenRowIndex) - 1, 1);\n      }\n    }\n  }\n\n  /**\n   * The hook allows to modify the delta transformation object necessary for correct selection end transformations.\n   * The logic here handles \"jumping over\" merged merged cells, while selecting.\n   *\n   * @param {{ row: number, col: number }} delta The transformation delta.\n   */\n  #onModifyTransformEnd(delta) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const cloneRange = selectedRange.clone();\n    const { to } = selectedRange;\n    const { columnIndexMapper, rowIndexMapper } = this.hot;\n    const expandCloneRange = (row, col) => {\n      cloneRange.expand(this.hot._createCellCoords(row, col));\n\n      for (let i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n        cloneRange.expandByRange(this.mergedCellsCollection.mergedCells[i].getRange());\n      }\n    };\n\n    if (delta.col < 0) {\n      let nextColumn = this.mergedCellsCollection.getStartMostColumnIndex(selectedRange, to.col) + delta.col;\n\n      expandCloneRange(to.row, nextColumn);\n\n      if (selectedRange.getHorizontalDirection() === 'E-W' && cloneRange.getHorizontalDirection() === 'E-W') {\n        nextColumn = cloneRange.getTopStartCorner().col;\n      }\n\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);\n\n      if (notHiddenColumnIndex !== null) {\n        delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, to.col) - 1, 1);\n      }\n\n    } else if (delta.col > 0) {\n      let nextColumn = this.mergedCellsCollection.getEndMostColumnIndex(selectedRange, to.col) + delta.col;\n\n      expandCloneRange(to.row, nextColumn);\n\n      if (selectedRange.getHorizontalDirection() === 'W-E' && cloneRange.getHorizontalDirection() === 'W-E') {\n        nextColumn = cloneRange.getBottomEndCorner().col;\n      }\n\n      const notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);\n\n      if (notHiddenColumnIndex !== null) {\n        delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(to.col, notHiddenColumnIndex) - 1, 1);\n      }\n    }\n\n    if (delta.row < 0) {\n      let nextRow = this.mergedCellsCollection.getTopMostRowIndex(selectedRange, to.row) + delta.row;\n\n      expandCloneRange(nextRow, to.col);\n\n      if (selectedRange.getVerticalDirection() === 'S-N' && cloneRange.getVerticalDirection() === 'S-N') {\n        nextRow = cloneRange.getTopStartCorner().row;\n      }\n\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, 1);\n\n      if (notHiddenRowIndex !== null) {\n        delta.row = -Math.max(this.hot.view.countRenderableRowsInRange(notHiddenRowIndex, to.row) - 1, 1);\n      }\n\n    } else if (delta.row > 0) {\n      let nextRow = this.mergedCellsCollection.getBottomMostRowIndex(selectedRange, to.row) + delta.row;\n\n      expandCloneRange(nextRow, to.col);\n\n      if (selectedRange.getVerticalDirection() === 'N-S' && cloneRange.getVerticalDirection() === 'N-S') {\n        nextRow = cloneRange.getBottomStartCorner().row;\n      }\n\n      const notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(nextRow, -1);\n\n      if (notHiddenRowIndex !== null) {\n        delta.row = Math.max(this.hot.view.countRenderableRowsInRange(to.row, notHiddenRowIndex) - 1, 1);\n      }\n    }\n  }\n\n  /**\n   * The hook corrects the range (before drawing it) after the selection was made on the merged cells.\n   * It expands the range to cover the entire area of the selected merged cells.\n   */\n  #onBeforeSelectionHighlightSet() {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const { highlight } = selectedRange;\n\n    if (this.hot.selection.isSelectedByColumnHeader() || this.hot.selection.isSelectedByRowHeader()) {\n      this.#lastSelectedFocus = highlight.clone();\n\n      return;\n    }\n\n    for (let i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n      selectedRange.expandByRange(this.mergedCellsCollection.mergedCells[i].getRange(), false);\n    }\n    // TODO: This is a workaround for an issue with the selection not being extended properly.\n    // In some cases when the merge cells are defined in random order the selection is not\n    // extended in that way that it covers all overlapped merge cells.\n    for (let i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n      selectedRange.expandByRange(this.mergedCellsCollection.mergedCells[i].getRange(), false);\n    }\n\n    const mergedParent = this.mergedCellsCollection.get(highlight.row, highlight.col);\n\n    this.#lastSelectedFocus = highlight.clone();\n\n    if (mergedParent) {\n      highlight.assign(mergedParent);\n    }\n  }\n\n  /**\n   * `modifyGetCellCoords` hook callback. Swaps the `getCell` coords with the merged parent coords.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Visual column index.\n   * @returns {Array|undefined} Visual coordinates of the merge.\n   */\n  #onModifyGetCellCoords(row, column) {\n    if (row < 0 || column < 0) {\n      return;\n    }\n\n    const mergeParent = this.mergedCellsCollection.get(row, column);\n\n    if (!mergeParent) {\n      return;\n    }\n\n    const { row: mergeRow, col: mergeColumn, colspan, rowspan } = mergeParent;\n\n    return [\n      // Most top-left merged cell coords.\n      mergeRow, mergeColumn,\n      // Most bottom-right merged cell coords.\n      mergeRow + rowspan - 1,\n      mergeColumn + colspan - 1\n    ];\n  }\n\n  /**\n   * `afterContextMenuDefaultOptions` hook callback.\n   *\n   * @param {object} defaultOptions The default context menu options.\n   */\n  #addMergeActionsToContextMenu(defaultOptions) {\n    defaultOptions.items.push(\n      {\n        name: '---------',\n      },\n      toggleMergeItem(this)\n    );\n  }\n\n  /**\n   * Clears the last selected coordinates before setting a new selection range.\n   */\n  #onBeforeSetRangeStart() {\n    this.#lastSelectedFocus = null;\n  }\n\n  /**\n   * Detects if the last selected cell was a header cell if so update the order list active node for further\n   * computations.\n   */\n  #onBeforeSelectionFocusSet() {\n    if (this.#lastSelectedFocus.isCell()) {\n      return;\n    }\n\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const verticalDir = selectedRange.getVerticalDirection();\n    const horizontalDir = selectedRange.getHorizontalDirection();\n    const focusCoords = this.#lastSelectedFocus.clone().normalize();\n\n    this.#focusOrder.setActiveNode(focusCoords.row, focusCoords.col);\n\n    if (this.#lastFocusDelta.row > 0 || this.#lastFocusDelta.col > 0) {\n      this.#focusOrder.setPrevNodeAsActive();\n\n    } else if (\n      horizontalDir === 'E-W' && this.#lastFocusDelta.col < 0 ||\n      verticalDir === 'S-N' && this.#lastFocusDelta.row < 0\n    ) {\n      this.#focusOrder.setNextNodeAsActive();\n    }\n  }\n\n  /**\n   * Changes the focus selection to the next or previous cell or merged cell position.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} column The visual column index.\n   */\n  #onAfterSelectionFocusSet(row, column) {\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const { columnIndexMapper, rowIndexMapper } = this.hot;\n    let notHiddenRowIndex = null;\n    let notHiddenColumnIndex = null;\n\n    if (this.#lastFocusDelta.col < 0) {\n      const { rowEnd, colEnd } = this.#focusOrder.getPrevHorizontalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);\n\n    } else if (this.#lastFocusDelta.col > 0) {\n      const { rowStart, colStart } = this.#focusOrder.getNextHorizontalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);\n\n    } else if (this.#lastFocusDelta.row < 0) {\n      const { rowEnd, colEnd } = this.#focusOrder.getPrevVerticalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);\n\n    } else if (this.#lastFocusDelta.row > 0) {\n      const { rowStart, colStart } = this.#focusOrder.getNextVerticalNode();\n\n      notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);\n      notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);\n    }\n\n    if (notHiddenRowIndex !== null || notHiddenColumnIndex !== null) {\n      const coords = this.hot._createCellCoords(notHiddenRowIndex, notHiddenColumnIndex);\n      const mergeParent = this.mergedCellsCollection.get(coords.row, coords.col);\n      const focusHighlight = this.hot.selection.highlight.getFocus();\n\n      row = coords.row;\n      column = coords.col;\n\n      if (mergeParent) {\n        selectedRange.highlight.assign({\n          row: this.hot.rowIndexMapper.getNearestNotHiddenIndex(mergeParent.row, 1),\n          col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(mergeParent.col, 1),\n        });\n      } else {\n        selectedRange.highlight.assign(coords);\n      }\n\n      focusHighlight.clear();\n      focusHighlight\n        .add(coords)\n        .commit();\n    }\n\n    this.#focusOrder.setActiveNode(row, column);\n    this.#lastFocusDelta = { row: 0, col: 0 };\n  }\n\n  /**\n   * Creates the horizontal and vertical cells order matrix (linked lists) for focused cell.\n   */\n  #onAfterSelectionEnd() {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection.isHeader()) {\n      this.#focusOrder.buildFocusOrder(this.hot.getSelectedRangeLast());\n    }\n  }\n\n  /**\n   * The `afterGetCellMeta` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} col Column index.\n   * @param {object} cellProperties The cell properties object.\n   */\n  #onAfterGetCellMeta(row, col, cellProperties) {\n    const mergeParent = this.mergedCellsCollection.get(row, col);\n\n    if (mergeParent) {\n      if (mergeParent.row !== row || mergeParent.col !== col) {\n        cellProperties.copyable = false;\n\n      } else {\n        cellProperties.rowspan = mergeParent.rowspan;\n        cellProperties.colspan = mergeParent.colspan;\n      }\n    }\n  }\n\n  /**\n   * `afterViewportRowCalculatorOverride` hook callback.\n   *\n   * @param {object} calc The row calculator object.\n   */\n  #onAfterViewportRowCalculatorOverride(calc) {\n    const nrOfColumns = this.hot.countCols();\n\n    this.modifyViewportRowStart(calc, nrOfColumns);\n    this.modifyViewportRowEnd(calc, nrOfColumns);\n  }\n\n  /**\n   * Modify viewport start when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The row calculator object.\n   * @param {number} nrOfColumns Number of visual columns.\n   */\n  modifyViewportRowStart(calc, nrOfColumns) {\n    const rowMapper = this.hot.rowIndexMapper;\n    const visualStartRow = rowMapper.getVisualFromRenderableIndex(calc.startRow);\n\n    for (let visualColumnIndex = 0; visualColumnIndex < nrOfColumns; visualColumnIndex += 1) {\n      const mergeParentForViewportStart = this.mergedCellsCollection.get(visualStartRow, visualColumnIndex);\n\n      if (isObject(mergeParentForViewportStart)) {\n        const renderableIndexAtMergeStart = rowMapper.getRenderableFromVisualIndex(\n          rowMapper.getNearestNotHiddenIndex(mergeParentForViewportStart.row, 1));\n\n        // Merge start is out of the viewport (i.e. when we scrolled to the bottom and we can see just part of a merge).\n        if (renderableIndexAtMergeStart < calc.startRow) {\n          // We extend viewport when some rows have been merged.\n          calc.startRow = renderableIndexAtMergeStart;\n          // We are looking for next merges inside already extended viewport (starting again from row equal to 0).\n          this.modifyViewportRowStart(calc, nrOfColumns); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   *  Modify viewport end when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The row calculator object.\n   * @param {number} nrOfColumns Number of visual columns.\n   */\n  modifyViewportRowEnd(calc, nrOfColumns) {\n    const rowMapper = this.hot.rowIndexMapper;\n    const visualEndRow = rowMapper.getVisualFromRenderableIndex(calc.endRow);\n\n    for (let visualColumnIndex = 0; visualColumnIndex < nrOfColumns; visualColumnIndex += 1) {\n      const mergeParentForViewportEnd = this.mergedCellsCollection.get(visualEndRow, visualColumnIndex);\n\n      if (isObject(mergeParentForViewportEnd)) {\n        const mergeEnd = mergeParentForViewportEnd.row + mergeParentForViewportEnd.rowspan - 1;\n        const renderableIndexAtMergeEnd = rowMapper.getRenderableFromVisualIndex(\n          rowMapper.getNearestNotHiddenIndex(mergeEnd, -1));\n\n        // Merge end is out of the viewport.\n        if (renderableIndexAtMergeEnd > calc.endRow) {\n          // We extend the viewport when some rows have been merged.\n          calc.endRow = renderableIndexAtMergeEnd;\n          // We are looking for next merges inside already extended viewport (starting again from row equal to 0).\n          this.modifyViewportRowEnd(calc, nrOfColumns); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   * `afterViewportColumnCalculatorOverride` hook callback.\n   *\n   * @param {object} calc The column calculator object.\n   */\n  #onAfterViewportColumnCalculatorOverride(calc) {\n    const nrOfRows = this.hot.countRows();\n\n    this.modifyViewportColumnStart(calc, nrOfRows);\n    this.modifyViewportColumnEnd(calc, nrOfRows);\n  }\n\n  /**\n   * Modify viewport start when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The column calculator object.\n   * @param {number} nrOfRows Number of visual rows.\n   */\n  modifyViewportColumnStart(calc, nrOfRows) {\n    const columnMapper = this.hot.columnIndexMapper;\n    const visualStartCol = columnMapper.getVisualFromRenderableIndex(calc.startColumn);\n\n    for (let visualRowIndex = 0; visualRowIndex < nrOfRows; visualRowIndex += 1) {\n      const mergeParentForViewportStart = this.mergedCellsCollection.get(visualRowIndex, visualStartCol);\n\n      if (isObject(mergeParentForViewportStart)) {\n        const renderableIndexAtMergeStart = columnMapper.getRenderableFromVisualIndex(\n          columnMapper.getNearestNotHiddenIndex(mergeParentForViewportStart.col, 1));\n\n        // Merge start is out of the viewport (i.e. when we scrolled to the right and we can see just part of a merge).\n        if (renderableIndexAtMergeStart < calc.startColumn) {\n          // We extend viewport when some columns have been merged.\n          calc.startColumn = renderableIndexAtMergeStart;\n          // We are looking for next merges inside already extended viewport (starting again from column equal to 0).\n          this.modifyViewportColumnStart(calc, nrOfRows); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   *  Modify viewport end when needed. We extend viewport when merged cells aren't fully visible.\n   *\n   * @private\n   * @param {object} calc The column calculator object.\n   * @param {number} nrOfRows Number of visual rows.\n   */\n  modifyViewportColumnEnd(calc, nrOfRows) {\n    const columnMapper = this.hot.columnIndexMapper;\n    const visualEndCol = columnMapper.getVisualFromRenderableIndex(calc.endColumn);\n\n    for (let visualRowIndex = 0; visualRowIndex < nrOfRows; visualRowIndex += 1) {\n      const mergeParentForViewportEnd = this.mergedCellsCollection.get(visualRowIndex, visualEndCol);\n\n      if (isObject(mergeParentForViewportEnd)) {\n        const mergeEnd = mergeParentForViewportEnd.col + mergeParentForViewportEnd.colspan - 1;\n        const renderableIndexAtMergeEnd = columnMapper.getRenderableFromVisualIndex(\n          columnMapper.getNearestNotHiddenIndex(mergeEnd, -1));\n\n        // Merge end is out of the viewport.\n        if (renderableIndexAtMergeEnd > calc.endColumn) {\n          // We extend the viewport when some columns have been merged.\n          calc.endColumn = renderableIndexAtMergeEnd;\n          // We are looking for next merges inside already extended viewport (starting again from column equal to 0).\n          this.modifyViewportColumnEnd(calc, nrOfRows); // recursively search upwards\n\n          return; // Finish the current loop. Everything will be checked from the beginning by above recursion.\n        }\n      }\n    }\n  }\n\n  /**\n   * Translates merged cell coordinates to renderable indexes.\n   *\n   * @private\n   * @param {number} parentRow Visual row index.\n   * @param {number} rowspan Rowspan which describes shift which will be applied to parent row\n   *                         to calculate renderable index which points to the most bottom\n   *                         index position. Pass rowspan as `0` to calculate the most top\n   *                         index position.\n   * @param {number} parentColumn Visual column index.\n   * @param {number} colspan Colspan which describes shift which will be applied to parent column\n   *                         to calculate renderable index which points to the most right\n   *                         index position. Pass colspan as `0` to calculate the most left\n   *                         index position.\n   * @returns {number[]}\n   */\n  translateMergedCellToRenderable(parentRow, rowspan, parentColumn, colspan) {\n    const { rowIndexMapper: rowMapper, columnIndexMapper: columnMapper } = this.hot;\n    let firstNonHiddenRow;\n    let firstNonHiddenColumn;\n\n    if (rowspan === 0) {\n      firstNonHiddenRow = rowMapper.getNearestNotHiddenIndex(parentRow, 1);\n    } else {\n      firstNonHiddenRow = rowMapper.getNearestNotHiddenIndex(parentRow + rowspan - 1, -1);\n    }\n\n    if (colspan === 0) {\n      firstNonHiddenColumn = columnMapper.getNearestNotHiddenIndex(parentColumn, 1);\n    } else {\n      firstNonHiddenColumn = columnMapper.getNearestNotHiddenIndex(parentColumn + colspan - 1, -1);\n    }\n\n    const renderableRow = parentRow >= 0 ?\n      rowMapper.getRenderableFromVisualIndex(firstNonHiddenRow) : parentRow;\n    const renderableColumn = parentColumn >= 0 ?\n      columnMapper.getRenderableFromVisualIndex(firstNonHiddenColumn) : parentColumn;\n\n    return [renderableRow, renderableColumn];\n  }\n\n  /**\n   * The `modifyAutofillRange` hook callback.\n   *\n   * @param {Array} drag The drag area coordinates.\n   * @param {Array} select The selection information.\n   * @returns {Array} The new drag area.\n   */\n  #onModifyAutofillRange(drag, select) {\n    this.autofillCalculations.correctSelectionAreaSize(select);\n    const dragDirection = this.autofillCalculations.getDirection(select, drag);\n    let dragArea = drag;\n\n    if (this.autofillCalculations.dragAreaOverlapsCollections(select, dragArea, dragDirection)) {\n      dragArea = select;\n\n      return dragArea;\n    }\n\n    const from = this.hot._createCellCoords(select[0], select[1]);\n    const to = this.hot._createCellCoords(select[2], select[3]);\n    const range = this.hot._createCellRange(from, from, to);\n    const mergedCellsWithinSelectionArea = this.mergedCellsCollection.getWithinRange(range);\n\n    if (mergedCellsWithinSelectionArea.length === 0) {\n      return dragArea;\n    }\n\n    dragArea = this.autofillCalculations.snapDragArea(select, dragArea, dragDirection, mergedCellsWithinSelectionArea);\n\n    return dragArea;\n  }\n\n  /**\n   * `afterCreateCol` hook callback.\n   *\n   * @param {number} column Column index.\n   * @param {number} count Number of created columns.\n   */\n  #onAfterCreateCol(column, count) {\n    this.mergedCellsCollection.shiftCollections('right', column, count);\n  }\n\n  /**\n   * `afterRemoveCol` hook callback.\n   *\n   * @param {number} column Column index.\n   * @param {number} count Number of removed columns.\n   */\n  #onAfterRemoveCol(column, count) {\n    this.mergedCellsCollection.shiftCollections('left', column, count);\n  }\n\n  /**\n   * `afterCreateRow` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} count Number of created rows.\n   * @param {string} source Source of change.\n   */\n  #onAfterCreateRow(row, count, source) {\n    if (source === 'auto') {\n      return;\n    }\n\n    this.mergedCellsCollection.shiftCollections('down', row, count);\n  }\n\n  /**\n   * `afterRemoveRow` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} count Number of removed rows.\n   */\n  #onAfterRemoveRow(row, count) {\n    this.mergedCellsCollection.shiftCollections('up', row, count);\n  }\n\n  /**\n   * `afterChange` hook callback. Used to propagate merged cells after using Autofill.\n   *\n   * @param {Array} changes The changes array.\n   * @param {string} source Determines the source of the change.\n   */\n  #onAfterChange(changes, source) {\n    if (source !== 'Autofill.fill') {\n      return;\n    }\n\n    this.autofillCalculations.recreateAfterDataPopulation(changes);\n  }\n\n  /**\n   * `beforeDrawAreaBorders` hook callback.\n   *\n   * @param {Array} corners Visual coordinates of the area corners.\n   * @param {string} className Class name for the area.\n   */\n  #onBeforeDrawAreaBorders(corners, className) {\n    if (className && className === 'area') {\n      const selectedRange = this.hot.getSelectedRangeLast();\n      const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(selectedRange);\n\n      arrayEach(mergedCellsWithinRange, (mergedCell) => {\n        if (selectedRange.getBottomEndCorner().row === mergedCell.getLastRow() &&\n          selectedRange.getBottomEndCorner().col === mergedCell.getLastColumn()) {\n          corners[2] = mergedCell.row;\n          corners[3] = mergedCell.col;\n        }\n      });\n    }\n  }\n\n  /**\n   * `afterDrawSelection` hook callback. Used to add the additional class name for the entirely-selected merged cells.\n   *\n   * @param {number} currentRow Visual row index of the currently processed cell.\n   * @param {number} currentColumn Visual column index of the currently cell.\n   * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow,\n   *   endColumn]`.\n   * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n   * @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently\n   *   processed cell.\n   */\n  #onAfterDrawSelection(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n    // Nothing's selected (hook might be triggered by the custom borders)\n    if (!cornersOfSelection) {\n      return;\n    }\n\n    return this.selectionCalculations\n      .getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);\n  }\n\n  /**\n   * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.\n   *\n   * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from\n   *   all the cells in the table.\n   */\n  #onBeforeRemoveCellClassNames() {\n    return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();\n  }\n\n  /**\n   * Allows to prevent opening the editor while more than one merged cell is selected.\n   *\n   * @param {number} row Visual row index of the edited cell.\n   * @param {number} column Visual column index of the edited cell.\n   * @param {string | null} initialValue The initial editor value.\n   * @param {MouseEvent | KeyboardEvent} event The event which was responsible for opening the editor.\n   * @returns {boolean | undefined}\n   */\n  #onBeforeBeginEditing(row, column, initialValue, event) {\n    if (!(event instanceof MouseEvent)) {\n      return;\n    }\n\n    const selection = this.hot.getSelectedRangeLast();\n    const mergeCell = this.mergedCellsCollection.getByRange(selection);\n\n    if (!mergeCell) {\n      return;\n    }\n\n    const from = this.hot._createCellCoords(\n      mergeCell.row,\n      mergeCell.col\n    );\n    const to = this.hot._createCellCoords(\n      mergeCell.row + mergeCell.rowspan - 1,\n      mergeCell.col + mergeCell.colspan - 1\n    );\n\n    return this.hot.selection.getLayerLevel() === 0 && selection.isEqual(\n      this.hot._createCellRange(from, from, to)\n    );\n  }\n\n  /**\n   * Hook used to modify the row height depends on the merged cells in the row.\n   *\n   * @param {number} height The row height value provided by the Core.\n   * @param {number} row The visual row index.\n   * @param {string} overlayType The overlay type that is currently rendered.\n   * @returns {number}\n   */\n  #onModifyRowHeightByOverlayName(height, row, overlayType) {\n    if (\n      this.hot.getSettings().rowHeaders ||\n      // merged cells do not work with the bottom overlays\n      overlayType === 'bottom' || overlayType === 'bottom_inline_start_corner'\n    ) {\n      return height;\n    }\n\n    let firstColumn;\n    let lastColumn;\n\n    if (overlayType === 'master') {\n      firstColumn = this.hot.view.getFirstRenderedVisibleColumn();\n      lastColumn = this.hot.view.getLastRenderedVisibleColumn();\n\n    } else {\n      const activeOverlay = this.hot.view.getOverlayByName(overlayType);\n\n      firstColumn = this.hot.columnIndexMapper\n        .getVisualFromRenderableIndex(activeOverlay.clone.wtTable.getFirstRenderedColumn());\n      lastColumn = this.hot.columnIndexMapper\n        .getVisualFromRenderableIndex(activeOverlay.clone.wtTable.getLastRenderedColumn());\n    }\n\n    const firstMergedCellInRow = this.mergedCellsCollection.get(row, firstColumn);\n\n    if (!firstMergedCellInRow) {\n      return height;\n    }\n\n    const from = this.hot._createCellCoords(row, firstColumn);\n    const to = this.hot._createCellCoords(row, lastColumn);\n    const viewportRange = this.hot._createCellRange(from, from, to);\n    const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(viewportRange);\n    const maxRowspan = mergedCellsWithinRange.reduce((acc, { rowspan }) => Math.max(acc, rowspan), 1);\n    let rowspanCorrection = 0;\n\n    if (mergedCellsWithinRange.length > 1 && mergedCellsWithinRange[0].rowspan < maxRowspan) {\n      rowspanCorrection = maxRowspan - mergedCellsWithinRange[0].rowspan;\n    }\n\n    mergedCellsWithinRange.forEach(({ rowspan }) => {\n      let rowspanAfterCorrection = 0;\n\n      if (overlayType === 'top' || overlayType === 'top_inline_start_corner') {\n        rowspanAfterCorrection = Math.min(maxRowspan, this.hot.view.countNotHiddenFixedRowsTop() - row);\n      } else {\n        rowspanAfterCorrection = rowspan - rowspanCorrection;\n      }\n\n      height = Math.max(height ?? 0, this.#sumCellsHeights(row, rowspanAfterCorrection));\n    });\n\n    return height;\n  }\n\n  /**\n   * Sums the heights of the all cells that the merge cell consists of.\n   *\n   * @param {number} row The visual row index of the merged cell.\n   * @param {number} rowspan The rowspan value of the merged cell.\n   * @returns {number}\n   */\n  #sumCellsHeights(row, rowspan) {\n    const defaultHeight = this.hot.view._wt.wtSettings.getSettingPure('defaultRowHeight');\n    const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');\n    let height = 0;\n\n    for (let i = row; i < row + rowspan; i++) {\n      if (!this.hot.rowIndexMapper.isHidden(i)) {\n        height += autoRowSizePlugin?.getRowHeight(i) ?? defaultHeight;\n      }\n    }\n\n    return height;\n  }\n}\n","import MergedCellCoords from './cellCoords';\nimport { rangeEach } from '../../helpers/number';\nimport { warn } from '../../helpers/console';\nimport { arrayEach } from '../../helpers/array';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\n\n/**\n * Defines a container object for the merged cells.\n *\n * @private\n * @class MergedCellsCollection\n */\nclass MergedCellsCollection {\n  /**\n   * Reference to the Merge Cells plugin.\n   *\n   * @type {MergeCells}\n   */\n  plugin;\n  /**\n   * Array of merged cells.\n   *\n   * @type {MergedCellCoords[]}\n   */\n  mergedCells = [];\n  /**\n   * Matrix of cells (row, col) that points to the instances of the MergedCellCoords objects.\n   *\n   * @type {Array}\n   */\n  mergedCellsMatrix = new Map();\n  /**\n   * The Handsontable instance.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n\n  constructor(mergeCellsPlugin) {\n    this.plugin = mergeCellsPlugin;\n    this.hot = mergeCellsPlugin.hot;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data overlaps already existing merged cells.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static IS_OVERLAPPING_WARNING({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}], overlaps\\x20\n      with the other declared merged cell. The overlapping merged cell was not added to the table, please\\x20\n      fix your setup.`;\n  }\n\n  /**\n   * Get a merged cell from the container, based on the provided arguments. You can provide either the \"starting coordinates\"\n   * of a merged cell, or any coordinates from the body of the merged cell.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @returns {MergedCellCoords|boolean} Returns a wanted merged cell on success and `false` on failure.\n   */\n  get(row, column) {\n    if (!this.mergedCellsMatrix.has(row)) {\n      return false;\n    }\n\n    return this.mergedCellsMatrix.get(row).get(column) ?? false;\n  }\n\n  /**\n   * Get the first-found merged cell containing the provided range.\n   *\n   * @param {CellRange|object} range The range to search merged cells for.\n   * @returns {MergedCellCoords|boolean}\n   */\n  getByRange(range) {\n    let result = false;\n\n    arrayEach(this.mergedCells, (mergedCell) => {\n      if (mergedCell.row <= range.from.row && mergedCell.row + mergedCell.rowspan - 1 >= range.to.row &&\n        mergedCell.col <= range.from.col && mergedCell.col + mergedCell.colspan - 1 >= range.to.col) {\n        result = mergedCell;\n\n        return result;\n      }\n\n      return true;\n    });\n\n    return result;\n  }\n\n  /**\n   * Filters merge cells objects provided by users from overlapping cells.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCellsInfo The merged cell information object.\n   * Has to contain `row`, `col`, `colspan` and `rowspan` properties.\n   * @returns {Array<{ row: number, col: number, rowspan: number, colspan: number }>}\n   */\n  filterOverlappingMergeCells(mergedCellsInfo) {\n    const occupiedCells = new Set();\n\n    this.mergedCells.forEach((mergedCell) => {\n      const { row, col, colspan, rowspan } = mergedCell;\n\n      for (let r = row; r < row + rowspan; r++) {\n        for (let c = col; c < col + colspan; c++) {\n          occupiedCells.add(`r${r},c${c}`);\n        }\n      }\n    });\n\n    const filteredMergeCells = mergedCellsInfo.filter((mergedCell) => {\n      const { row, col, colspan, rowspan } = mergedCell;\n      const localOccupiedCells = new Set();\n      let isOverlapping = false;\n\n      for (let r = row; r < row + rowspan; r++) {\n        for (let c = col; c < col + colspan; c++) {\n          const cellId = `r${r},c${c}`;\n\n          if (occupiedCells.has(cellId)) {\n            warn(MergedCellsCollection.IS_OVERLAPPING_WARNING(mergedCell));\n            isOverlapping = true;\n            break;\n          }\n\n          localOccupiedCells.add(cellId);\n        }\n\n        if (isOverlapping) {\n          break;\n        }\n      }\n\n      if (!isOverlapping) {\n        occupiedCells.add(...localOccupiedCells);\n      }\n\n      return !isOverlapping;\n    });\n\n    return filteredMergeCells;\n  }\n\n  /**\n   * Get a merged cell contained in the provided range.\n   *\n   * @param {CellRange} range The range to search merged cells in.\n   * @param {boolean} [countPartials=false] If set to `true`, all the merged cells overlapping the range will be taken into calculation.\n   * @returns {MergedCellCoords[]} Array of found merged cells.\n   */\n  getWithinRange(range, countPartials = false) {\n    const { row: rowStart, col: columnStart } = range.getTopStartCorner();\n    const { row: rowEnd, col: columnEnd } = range.getBottomEndCorner();\n    const result = [];\n\n    for (let row = rowStart; row <= rowEnd; row++) {\n      for (let column = columnStart; column <= columnEnd; column++) {\n        const mergedCell = this.get(row, column);\n\n        if (\n          mergedCell &&\n          (countPartials ||\n          !countPartials && mergedCell.row === row && mergedCell.col === column)\n        ) {\n          result.push(mergedCell);\n        }\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Add a merged cell to the container.\n   *\n   * @param {object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.\n   * @param {boolean} [auto=false] `true` if called internally by the plugin (usually in batch).\n   * @returns {MergedCellCoords|boolean} Returns the new merged cell on success and `false` on failure.\n   */\n  add(mergedCellInfo, auto = false) {\n    const row = mergedCellInfo.row;\n    const column = mergedCellInfo.col;\n    const rowspan = mergedCellInfo.rowspan;\n    const colspan = mergedCellInfo.colspan;\n    const newMergedCell = new MergedCellCoords(row, column, rowspan, colspan,\n      this.hot._createCellCoords, this.hot._createCellRange);\n    const alreadyExists = this.get(row, column);\n    const isOverlapping = auto ? false : this.isOverlapping(newMergedCell);\n\n    if (!alreadyExists && !isOverlapping) {\n      if (this.hot) {\n        newMergedCell.normalize(this.hot);\n      }\n\n      this.mergedCells.push(newMergedCell);\n      this.#addMergedCellToMatrix(newMergedCell);\n\n      return newMergedCell;\n    }\n\n    warn(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));\n\n    return false;\n  }\n\n  /**\n   * Remove a merged cell from the container. You can provide either the \"starting coordinates\"\n   * of a merged cell, or any coordinates from the body of the merged cell.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @returns {MergedCellCoords|boolean} Returns the removed merged cell on success and `false` on failure.\n   */\n  remove(row, column) {\n    const mergedCell = this.get(row, column);\n    const mergedCellIndex = mergedCell ? this.mergedCells.indexOf(mergedCell) : -1;\n\n    if (mergedCell && mergedCellIndex !== -1) {\n      this.mergedCells.splice(mergedCellIndex, 1);\n      this.#removeMergedCellFromMatrix(mergedCell);\n\n      return mergedCell;\n    }\n\n    return false;\n  }\n\n  /**\n   * Clear all the merged cells.\n   */\n  clear() {\n    arrayEach(this.mergedCells, ({ row, col, rowspan, colspan }) => {\n      rangeEach(row, row + rowspan, (r) => {\n        rangeEach(col, col + colspan, (c) => {\n          const TD = this.hot.getCell(r, c);\n\n          if (TD) {\n            TD.removeAttribute('rowspan');\n            TD.removeAttribute('colspan');\n            TD.style.display = '';\n          }\n        });\n      });\n    });\n\n    this.mergedCells.length = 0;\n    this.mergedCellsMatrix = new Map();\n  }\n\n  /**\n   * Check if the provided merged cell overlaps with the others already added.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.\n   * @returns {boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.\n   */\n  isOverlapping(mergedCell) {\n    const mergedCellRange = mergedCell.getRange();\n\n    for (let i = 0; i < this.mergedCells.length; i++) {\n      const otherMergedCell = this.mergedCells[i];\n      const otherMergedCellRange = otherMergedCell.getRange();\n\n      if (otherMergedCellRange.overlaps(mergedCellRange)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Check whether the provided row/col coordinates direct to a first not hidden cell within merge area.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {boolean}\n   */\n  isFirstRenderableMergedCell(row, column) {\n    const mergeParent = this.get(row, column);\n\n    // Return if row and column indexes are within merge area and if they are first rendered indexes within the area.\n    return mergeParent && this.hot.rowIndexMapper.getNearestNotHiddenIndex(mergeParent.row, 1) === row &&\n        this.hot.columnIndexMapper.getNearestNotHiddenIndex(mergeParent.col, 1) === column;\n  }\n\n  /**\n   * Get the first renderable coords of the merged cell at the provided coordinates.\n   *\n   * @param {number} row Visual row index.\n   * @param {number} column Visual column index.\n   * @returns {CellCoords} A `CellCoords` object with the coordinates to the first renderable cell within the\n   *                        merged cell.\n   */\n  getFirstRenderableCoords(row, column) {\n    const mergeParent = this.get(row, column);\n\n    if (!mergeParent || this.isFirstRenderableMergedCell(row, column)) {\n      return this.hot._createCellCoords(row, column);\n    }\n\n    const firstRenderableRow = this.hot.rowIndexMapper.getNearestNotHiddenIndex(mergeParent.row, 1);\n    const firstRenderableColumn = this.hot.columnIndexMapper.getNearestNotHiddenIndex(mergeParent.col, 1);\n\n    return this.hot._createCellCoords(firstRenderableRow, firstRenderableColumn);\n  }\n\n  /**\n   * Gets the start-most visual column index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualColumnIndex The visual column index to start the search from.\n   * @returns {number}\n   */\n  getStartMostColumnIndex(range, visualColumnIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'col', -1);\n    let startMostIndex = visualColumnIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] <= visualColumnIndex) {\n        startMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return startMostIndex;\n  }\n\n  /**\n   * Gets the end-most visual column index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualColumnIndex The visual column index to start the search from.\n   * @returns {number}\n   */\n  getEndMostColumnIndex(range, visualColumnIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'col', 1);\n    let endMostIndex = visualColumnIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] >= visualColumnIndex) {\n        endMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return endMostIndex;\n  }\n\n  /**\n   * Gets the top-most visual row index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualRowIndex The visual row index to start the search from.\n   * @returns {number}\n   */\n  getTopMostRowIndex(range, visualRowIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'row', -1);\n    let topMostIndex = visualRowIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] <= visualRowIndex) {\n        topMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return topMostIndex;\n  }\n\n  /**\n   * Gets the bottom-most visual row index that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {number} visualRowIndex The visual row index to start the search from.\n   * @returns {number}\n   */\n  getBottomMostRowIndex(range, visualRowIndex) {\n    const indexes = this.#getNonIntersectingIndexes(range, 'row', 1);\n    let bottomMostIndex = visualRowIndex;\n\n    for (let i = 0; i < indexes.length; i++) {\n      if (indexes[i] >= visualRowIndex) {\n        bottomMostIndex = indexes[i];\n        break;\n      }\n    }\n\n    return bottomMostIndex;\n  }\n\n  /**\n   * Gets the list of the indexes that do not intersect with other merged cells within the provided range.\n   *\n   * @param {CellRange} range The range to search within.\n   * @param {'row' | 'col'} axis The axis to search within.\n   * @param {number} scanDirection  The direction to scan the range. `1` for forward, `-1` for backward.\n   * @returns {number[]}\n   */\n  #getNonIntersectingIndexes(range, axis, scanDirection = 1) {\n    const indexes = new Map();\n    const from = scanDirection === 1 ? range.getTopStartCorner() : range.getBottomEndCorner();\n    const to = scanDirection === 1 ? range.getBottomEndCorner() : range.getTopStartCorner();\n\n    for (\n      let row = from.row;\n      scanDirection === 1 ? row <= to.row : row >= to.row;\n      row += scanDirection\n    ) {\n      for (\n        let column = from.col;\n        scanDirection === 1 ? column <= to.col : column >= to.col;\n        column += scanDirection\n      ) {\n        const index = axis === 'row' ? row : column;\n        const mergedCell = this.get(row, column);\n        let lastIndex = index;\n\n        if (mergedCell) {\n          lastIndex = scanDirection === 1 ? mergedCell[axis] + mergedCell[`${axis}span`] - 1 : mergedCell[axis];\n        }\n\n        if (!indexes.has(index)) {\n          indexes.set(index, new Set());\n        }\n\n        indexes.get(index).add(lastIndex);\n      }\n    }\n\n    return Array.from(\n      new Set(Array.from(indexes.entries())\n        .filter(([, set]) => set.size === 1)\n        .flatMap(([, set]) => Array.from(set)))\n    );\n  }\n\n  /**\n   * Shift the merged cell in the direction and by an offset defined in the arguments.\n   *\n   * @param {string} direction `right`, `left`, `up` or `down`.\n   * @param {number} index Index where the change, which caused the shifting took place.\n   * @param {number} count Number of rows/columns added/removed in the preceding action.\n   */\n  shiftCollections(direction, index, count) {\n    const shiftVector = [0, 0];\n\n    switch (direction) {\n      case 'right':\n        shiftVector[0] += count;\n        break;\n\n      case 'left':\n        shiftVector[0] -= count;\n        break;\n\n      case 'down':\n        shiftVector[1] += count;\n        break;\n\n      case 'up':\n        shiftVector[1] -= count;\n        break;\n\n      default:\n    }\n\n    const removedMergedCells = [];\n\n    this.mergedCells.forEach((currentMerge) => {\n      currentMerge.shift(shiftVector, index);\n\n      if (currentMerge.removed) {\n        removedMergedCells.push(currentMerge);\n      }\n    });\n\n    removedMergedCells.forEach((removedMerge) => {\n      this.mergedCells.splice(this.mergedCells.indexOf(removedMerge), 1);\n    });\n\n    this.mergedCellsMatrix.clear();\n\n    this.mergedCells.forEach((currentMerge) => {\n      this.#addMergedCellToMatrix(currentMerge);\n    });\n  }\n\n  /**\n   * Adds a merged cell to the matrix.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to add.\n   */\n  #addMergedCellToMatrix(mergedCell) {\n    for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {\n      for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {\n        if (!this.mergedCellsMatrix.has(row)) {\n          this.mergedCellsMatrix.set(row, new Map());\n        }\n\n        this.mergedCellsMatrix.get(row).set(col, mergedCell);\n      }\n    }\n  }\n\n  /**\n   * Removes a merged cell from the matrix.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to remove.\n   */\n  #removeMergedCellFromMatrix(mergedCell) {\n    for (let row = mergedCell.row; row < mergedCell.row + mergedCell.rowspan; row++) {\n      for (let col = mergedCell.col; col < mergedCell.col + mergedCell.colspan; col++) {\n        this.mergedCellsMatrix.get(row).delete(col);\n      }\n    }\n  }\n}\n\nexport default MergedCellsCollection;\n","import { toSingleLine } from '../../helpers/templateLiteralTag';\n\n/**\n * The `MergedCellCoords` class represents a single merged cell.\n *\n * @private\n * @class MergedCellCoords\n */\nclass MergedCellCoords {\n  /**\n   * The index of the topmost merged cell row.\n   *\n   * @type {number}\n   */\n  row;\n  /**\n   * The index of the leftmost column.\n   *\n   * @type {number}\n   */\n  col;\n  /**\n   * The `rowspan` value of the merged cell.\n   *\n   * @type {number}\n   */\n  rowspan;\n  /**\n   * The `colspan` value of the merged cell.\n   *\n   * @type {number}\n   */\n  colspan;\n  /**\n   * `true` only if the merged cell is bound to be removed.\n   *\n   * @type {boolean}\n   */\n  removed = false;\n  /**\n   * The CellCoords function factory.\n   *\n   * @type {Function}\n   */\n  cellCoordsFactory;\n  /**\n   * The CellRange function factory.\n   *\n   * @type {Function}\n   */\n  cellRangeFactory;\n  /**\n   * The cached range coordinates of the merged cell.\n   *\n   * @type {CellRange}\n   */\n  #cellRange = null;\n\n  constructor(row, column, rowspan, colspan, cellCoordsFactory, cellRangeFactory) {\n    this.row = row;\n    this.col = column;\n    this.rowspan = rowspan;\n    this.colspan = colspan;\n    this.cellCoordsFactory = cellCoordsFactory;\n    this.cellRangeFactory = cellRangeFactory;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data contains negative values.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static NEGATIVE_VALUES_WARNING({ row, col, rowspan, colspan }) {\n    return toSingleLine`The merged cell declared with {row: ${row}, col: ${col},\\x20\n      rowspan: ${rowspan}, colspan: ${colspan}} contains negative values, which is\\x20\n      not supported. It will not be added to the collection.`;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data contains values exceeding the table limits.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static IS_OUT_OF_BOUNDS_WARNING({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}] is positioned\\x20\n      (or positioned partially) outside of the table range. It was not added to the table, please fix your setup.`;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data represents a single cell.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static IS_SINGLE_CELL({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}] has both \"rowspan\"\\x20\n      and \"colspan\" declared as \"1\", which makes it a single cell. It cannot be added to the collection.`;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data contains \"colspan\" or \"rowspan\", that equals 0.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {string}\n   */\n  static ZERO_SPAN_WARNING({ row, col }) {\n    return toSingleLine`The merged cell declared at [${row}, ${col}] has \"rowspan\"\\x20\n      or \"colspan\" declared as \"0\", which is not supported. It cannot be added to the collection.`;\n  }\n\n  /**\n   * Check whether the values provided for a merged cell contain any negative values.\n   *\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {boolean}\n   */\n  static containsNegativeValues({ row, col, rowspan, colspan }) {\n    return row < 0 || col < 0 || rowspan < 0 || colspan < 0;\n  }\n\n  /**\n   * Check whether the provided merged cell information object represents a single cell.\n   *\n   * @private\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {boolean}\n   */\n  static isSingleCell({ rowspan, colspan }) {\n    return colspan === 1 && rowspan === 1;\n  }\n\n  /**\n   * Check whether the provided merged cell information object contains a rowspan or colspan of 0.\n   *\n   * @private\n   * @param {{ row: number, col: number, rowspan: number, colspan: number }} mergedCell Object containing information\n   * about the merged cells that was about to be added.\n   * @returns {boolean}\n   */\n  static containsZeroSpan({ rowspan, colspan }) {\n    return colspan === 0 || rowspan === 0;\n  }\n\n  /**\n   * Check whether the provided merged cell object is to be declared out of bounds of the table.\n   *\n   * @param {object} mergeCell Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n   * @param {number} rowCount Number of rows in the table.\n   * @param {number} columnCount Number of rows in the table.\n   * @returns {boolean}\n   */\n  static isOutOfBounds(mergeCell, rowCount, columnCount) {\n    return mergeCell.row < 0 ||\n      mergeCell.col < 0 ||\n      mergeCell.row >= rowCount ||\n      mergeCell.row + mergeCell.rowspan - 1 >= rowCount ||\n      mergeCell.col >= columnCount ||\n      mergeCell.col + mergeCell.colspan - 1 >= columnCount;\n  }\n\n  /**\n   * Sanitize (prevent from going outside the boundaries) the merged cell.\n   *\n   * @param {Core} hotInstance The Handsontable instance.\n   */\n  normalize(hotInstance) {\n    const totalRows = hotInstance.countRows();\n    const totalColumns = hotInstance.countCols();\n\n    if (this.row < 0) {\n      this.row = 0;\n\n    } else if (this.row > totalRows - 1) {\n      this.row = totalRows - 1;\n    }\n\n    if (this.col < 0) {\n      this.col = 0;\n\n    } else if (this.col > totalColumns - 1) {\n      this.col = totalColumns - 1;\n    }\n\n    if (this.row + this.rowspan > totalRows - 1) {\n      this.rowspan = totalRows - this.row;\n    }\n\n    if (this.col + this.colspan > totalColumns - 1) {\n      this.colspan = totalColumns - this.col;\n    }\n\n    this.#cellRange = null;\n  }\n\n  /**\n   * Returns `true` if the provided coordinates are inside the merged cell.\n   *\n   * @param {number} row The row index.\n   * @param {number} column The column index.\n   * @returns {boolean}\n   */\n  includes(row, column) {\n    return this.row <= row && this.col <= column &&\n      this.row + this.rowspan - 1 >= row && this.col + this.colspan - 1 >= column;\n  }\n\n  /**\n   * Returns `true` if the provided `column` property is within the column span of the merged cell.\n   *\n   * @param {number} column The column index.\n   * @returns {boolean}\n   */\n  includesHorizontally(column) {\n    return this.col <= column && this.col + this.colspan - 1 >= column;\n  }\n\n  /**\n   * Returns `true` if the provided `row` property is within the row span of the merged cell.\n   *\n   * @param {number} row Row index.\n   * @returns {boolean}\n   */\n  includesVertically(row) {\n    return this.row <= row && this.row + this.rowspan - 1 >= row;\n  }\n\n  /**\n   * Shift (and possibly resize, if needed) the merged cell.\n   *\n   * @param {Array} shiftVector 2-element array containing the information on the shifting in the `x` and `y` axis.\n   * @param {number} indexOfChange Index of the preceding change.\n   * @returns {boolean} Returns `false` if the whole merged cell was removed.\n   */\n  shift(shiftVector, indexOfChange) {\n    const shiftValue = shiftVector[0] || shiftVector[1];\n    const shiftedIndex = indexOfChange + Math.abs(shiftVector[0] || shiftVector[1]) - 1;\n    const span = shiftVector[0] ? 'colspan' : 'rowspan';\n    const index = shiftVector[0] ? 'col' : 'row';\n    const changeStart = Math.min(indexOfChange, shiftedIndex);\n    const changeEnd = Math.max(indexOfChange, shiftedIndex);\n    const mergeStart = this[index];\n    const mergeEnd = this[index] + this[span] - 1;\n\n    if (mergeStart >= indexOfChange) {\n      this[index] += shiftValue;\n    }\n\n    // adding rows/columns\n    if (shiftValue > 0) {\n      if (indexOfChange <= mergeEnd && indexOfChange > mergeStart) {\n        this[span] += shiftValue;\n      }\n\n      // removing rows/columns\n    } else if (shiftValue < 0) {\n\n      // removing the whole merge\n      if (changeStart <= mergeStart && changeEnd >= mergeEnd) {\n        this.removed = true;\n        this.#cellRange = null;\n\n        return false;\n\n        // removing the merge partially, including the beginning\n      } else if (mergeStart >= changeStart && mergeStart <= changeEnd) {\n        const removedOffset = changeEnd - mergeStart + 1;\n        const preRemovedOffset = Math.abs(shiftValue) - removedOffset;\n\n        this[index] -= preRemovedOffset + shiftValue;\n        this[span] -= removedOffset;\n\n        // removing the middle part of the merge\n      } else if (mergeStart <= changeStart && mergeEnd >= changeEnd) {\n        this[span] += shiftValue;\n\n        // removing the end part of the merge\n      } else if (mergeStart <= changeStart && mergeEnd >= changeStart && mergeEnd < changeEnd) {\n        const removedPart = mergeEnd - changeStart + 1;\n\n        this[span] -= removedPart;\n      }\n    }\n\n    this.#cellRange = null;\n\n    return true;\n  }\n\n  /**\n   * Check if the second provided merged cell is \"farther\" in the provided direction.\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to check.\n   * @param {string} direction Drag direction.\n   * @returns {boolean|null} `true` if the second provided merged cell is \"farther\".\n   */\n  isFarther(mergedCell, direction) {\n    if (!mergedCell) {\n      return true;\n    }\n\n    if (direction === 'down') {\n      return mergedCell.row + mergedCell.rowspan - 1 < this.row + this.rowspan - 1;\n\n    } else if (direction === 'up') {\n      return mergedCell.row > this.row;\n\n    } else if (direction === 'right') {\n      return mergedCell.col + mergedCell.colspan - 1 < this.col + this.colspan - 1;\n\n    } else if (direction === 'left') {\n      return mergedCell.col > this.col;\n    }\n\n    return null;\n  }\n\n  /**\n   * Get the bottom row index of the merged cell.\n   *\n   * @returns {number}\n   */\n  getLastRow() {\n    return this.row + this.rowspan - 1;\n  }\n\n  /**\n   * Get the rightmost column index of the merged cell.\n   *\n   * @returns {number}\n   */\n  getLastColumn() {\n    return this.col + this.colspan - 1;\n  }\n\n  /**\n   * Get the range coordinates of the merged cell.\n   *\n   * @returns {CellRange}\n   */\n  getRange() {\n    if (!this.#cellRange) {\n      this.#cellRange = this.cellRangeFactory(\n        this.cellCoordsFactory(this.row, this.col),\n        this.cellCoordsFactory(this.row, this.col),\n        this.cellCoordsFactory(this.getLastRow(), this.getLastColumn()),\n      );\n    }\n\n    return this.#cellRange;\n  }\n}\n\nexport default MergedCellCoords;\n","import { extend } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\n\n/**\n * Class responsible for all of the Autofill-related operations on merged cells.\n *\n * @private\n * @class AutofillCalculations\n */\nclass AutofillCalculations {\n  /**\n   * Reference to the Merge Cells plugin.\n   *\n   * @type {MergeCells}\n   */\n  plugin;\n  /**\n   * Reference to the MergedCellsCollection class instance.\n   *\n   * @type {MergedCellsCollection}\n   */\n  mergedCellsCollection;\n  /**\n   * Cache of the currently processed autofill data.\n   *\n   * @private\n   * @type {object}\n   */\n  currentFillData = null;\n\n  constructor(plugin) {\n    this.plugin = plugin;\n    this.mergedCellsCollection = this.plugin.mergedCellsCollection;\n  }\n\n  /**\n   * Correct the provided selection area, so it's not selecting only a part of a merged cell.\n   *\n   * @param {Array} selectionArea The selection to correct.\n   */\n  correctSelectionAreaSize(selectionArea) {\n    if (selectionArea[0] === selectionArea[2] && selectionArea[1] === selectionArea[3]) {\n      const mergedCell = this.mergedCellsCollection.get(selectionArea[0], selectionArea[1]);\n\n      if (mergedCell) {\n        selectionArea[2] = selectionArea[0] + mergedCell.rowspan - 1;\n        selectionArea[3] = selectionArea[1] + mergedCell.colspan - 1;\n      }\n    }\n  }\n\n  /**\n   * Get the direction of the autofill process.\n   *\n   * @param {Array} selectionArea The selection area.\n   * @param {Array} finalArea The final area (base + drag).\n   * @returns {string} `up`, `down`, `left` or `right`.\n   */\n  getDirection(selectionArea, finalArea) {\n    let direction = null;\n\n    if (finalArea[0] === selectionArea[0] &&\n        finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n      direction = 'down';\n\n    } else if (finalArea[2] === selectionArea[2] &&\n               finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n      direction = 'up';\n\n    } else if (finalArea[1] === selectionArea[1] && finalArea[2] === selectionArea[2]) {\n      direction = 'right';\n\n    } else {\n      direction = 'left';\n    }\n\n    return direction;\n  }\n\n  /**\n   * Snap the drag area to the farthest merged cell, so it won't clip any of the merged cells.\n   *\n   * @param {Array} baseArea The base selected area.\n   * @param {Array} dragArea The drag area.\n   * @param {string} dragDirection The autofill drag direction.\n   * @param {Array} foundMergedCells MergeCellCoords found in the base selection area.\n   * @returns {Array} The new drag area.\n   */\n  snapDragArea(baseArea, dragArea, dragDirection, foundMergedCells) {\n    const newDragArea = dragArea.slice(0);\n    const fillSize = this.getAutofillSize(baseArea, dragArea, dragDirection);\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const verticalDirection = ['up', 'down'].indexOf(dragDirection) > -1;\n    const fullCycle = verticalDirection ?\n      baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n    const fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n    const partials = fillSize - fulls;\n    const farthestCollection = this.getFarthestCollection(baseArea, dragArea, dragDirection, foundMergedCells);\n\n    if (farthestCollection) {\n      if (dragDirection === 'down') {\n        const fill = farthestCollection.row + farthestCollection.rowspan - baseAreaStartRow - partials;\n        const newLimit = newDragArea[2] + fill;\n\n        if (newLimit >= this.plugin.hot.countRows()) {\n          newDragArea[2] -= partials;\n\n        } else {\n          newDragArea[2] += partials ? fill : 0;\n        }\n\n      } else if (dragDirection === 'right') {\n        const fill = farthestCollection.col + farthestCollection.colspan - baseAreaStartColumn - partials;\n        const newLimit = newDragArea[3] + fill;\n\n        if (newLimit >= this.plugin.hot.countCols()) {\n          newDragArea[3] -= partials;\n\n        } else {\n          newDragArea[3] += partials ? fill : 0;\n        }\n\n      } else if (dragDirection === 'up') {\n        const fill = baseAreaEndRow - partials - farthestCollection.row + 1;\n        const newLimit = newDragArea[0] + fill;\n\n        if (newLimit < 0) {\n          newDragArea[0] += partials;\n\n        } else {\n          newDragArea[0] -= partials ? fill : 0;\n        }\n\n      } else if (dragDirection === 'left') {\n        const fill = baseAreaEndColumn - partials - farthestCollection.col + 1;\n        const newLimit = newDragArea[1] + fill;\n\n        if (newLimit < 0) {\n          newDragArea[1] += partials;\n\n        } else {\n          newDragArea[1] -= partials ? fill : 0;\n        }\n      }\n    }\n\n    this.updateCurrentFillCache({\n      baseArea,\n      dragDirection,\n      foundMergedCells,\n      fillSize,\n      dragArea: newDragArea,\n      cycleLength: fullCycle,\n    });\n\n    return newDragArea;\n  }\n\n  /**\n   * Update the current fill cache with the provided object.\n   *\n   * @private\n   * @param {object} updateObject The current filled object cache.\n   */\n  updateCurrentFillCache(updateObject) {\n    if (!this.currentFillData) {\n      this.currentFillData = {};\n    }\n\n    extend(this.currentFillData, updateObject);\n  }\n\n  /**\n   * Get the \"length\" of the drag area.\n   *\n   * @private\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} dragArea The drag area (containing the base area).\n   * @param {string} direction The drag direction.\n   * @returns {number|null} The \"length\" (height or width, depending on the direction) of the drag.\n   */\n  getAutofillSize(baseArea, dragArea, direction) {\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n\n    switch (direction) {\n      case 'up':\n        return baseAreaStartRow - dragAreaStartRow;\n      case 'down':\n        return dragAreaEndRow - baseAreaEndRow;\n      case 'left':\n        return baseAreaStartColumn - dragAreaStartColumn;\n      case 'right':\n        return dragAreaEndColumn - baseAreaEndColumn;\n      default:\n        return null;\n    }\n  }\n\n  /**\n   * Trim the default drag area (containing the selection area) to the drag-only area.\n   *\n   * @private\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} dragArea The base selection area extended by the drag area.\n   * @param {string} direction Drag direction.\n   * @returns {Array|null} Array representing the drag area coordinates.\n   */\n  getDragArea(baseArea, dragArea, direction) {\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n\n    switch (direction) {\n      case 'up':\n        return [dragAreaStartRow, dragAreaStartColumn, baseAreaStartRow - 1, baseAreaEndColumn];\n      case 'down':\n        return [baseAreaEndRow + 1, baseAreaStartColumn, dragAreaEndRow, baseAreaEndColumn];\n      case 'left':\n        return [dragAreaStartRow, dragAreaStartColumn, baseAreaEndRow, baseAreaStartColumn - 1];\n      case 'right':\n        return [baseAreaStartRow, baseAreaEndColumn + 1, dragAreaEndRow, dragAreaEndColumn];\n      default:\n        return null;\n    }\n  }\n\n  /**\n   * Get the to-be-farthest merged cell in the newly filled area.\n   *\n   * @private\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} dragArea The drag area (containing the base area).\n   * @param {string} direction The drag direction.\n   * @param {Array} mergedCellArray Array of the merged cells found in the base area.\n   * @returns {MergedCellCoords|null}\n   */\n  getFarthestCollection(baseArea, dragArea, direction, mergedCellArray) {\n    const [baseAreaStartRow, baseAreaStartColumn, baseAreaEndRow, baseAreaEndColumn] = baseArea;\n    const verticalDirection = ['up', 'down'].indexOf(direction) > -1;\n    const baseEnd = verticalDirection ? baseAreaEndRow : baseAreaEndColumn;\n    const baseStart = verticalDirection ? baseAreaStartRow : baseAreaStartColumn;\n    const fillSize = this.getAutofillSize(baseArea, dragArea, direction);\n    const fullCycle = verticalDirection ?\n      baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n    const fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n    const partials = fillSize - fulls;\n    let inclusionFunctionName = null;\n    let farthestCollection = null;\n    let endOfDragRecreationIndex = null;\n\n    switch (direction) {\n      case 'up':\n        inclusionFunctionName = 'includesVertically';\n        endOfDragRecreationIndex = baseEnd - partials + 1;\n        break;\n\n      case 'left':\n        inclusionFunctionName = 'includesHorizontally';\n        endOfDragRecreationIndex = baseEnd - partials + 1;\n        break;\n\n      case 'down':\n        inclusionFunctionName = 'includesVertically';\n        endOfDragRecreationIndex = baseStart + partials - 1;\n        break;\n\n      case 'right':\n        inclusionFunctionName = 'includesHorizontally';\n        endOfDragRecreationIndex = baseStart + partials - 1;\n        break;\n\n      default:\n    }\n\n    arrayEach(mergedCellArray, (currentCollection) => {\n      if (currentCollection[inclusionFunctionName](endOfDragRecreationIndex) &&\n        currentCollection.isFarther(farthestCollection, direction)) {\n        farthestCollection = currentCollection;\n      }\n    });\n\n    return farthestCollection;\n  }\n\n  /**\n   * Recreate the merged cells after the autofill process.\n   *\n   * @param {Array} changes Changes made.\n   */\n  recreateAfterDataPopulation(changes) {\n    if (!this.currentFillData) {\n      return;\n    }\n\n    const fillRange = this.getRangeFromChanges(changes);\n    const foundMergedCells = this.currentFillData.foundMergedCells;\n    const dragDirection = this.currentFillData.dragDirection;\n    const inBounds = (current, offset) => {\n      switch (dragDirection) {\n        case 'up':\n          return current.row - offset >= fillRange.from.row;\n        case 'down':\n          return current.row + current.rowspan - 1 + offset <= fillRange.to.row;\n        case 'left':\n          return current.col - offset >= fillRange.from.column;\n        case 'right':\n          return current.col + current.colspan - 1 + offset <= fillRange.to.column;\n        default:\n          return null;\n      }\n    };\n    let fillOffset = 0;\n    let current = null;\n    let multiplier = 1;\n\n    do {\n      for (let j = 0; j < foundMergedCells.length; j += 1) {\n        current = foundMergedCells[j];\n\n        fillOffset = multiplier * this.currentFillData.cycleLength;\n\n        if (inBounds(current, fillOffset)) {\n          switch (dragDirection) {\n            case 'up':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row - fillOffset,\n                rowspan: current.rowspan,\n                col: current.col,\n                colspan: current.colspan\n              });\n              break;\n\n            case 'down':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row + fillOffset,\n                rowspan: current.rowspan,\n                col: current.col,\n                colspan: current.colspan\n              });\n              break;\n\n            case 'left':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row,\n                rowspan: current.rowspan,\n                col: current.col - fillOffset,\n                colspan: current.colspan\n              });\n              break;\n\n            case 'right':\n              this.plugin.mergedCellsCollection.add({\n                row: current.row,\n                rowspan: current.rowspan,\n                col: current.col + fillOffset,\n                colspan: current.colspan\n              });\n              break;\n\n            default:\n          }\n        }\n\n        if (j === foundMergedCells.length - 1) {\n          multiplier += 1;\n        }\n      }\n\n    } while (inBounds(current, fillOffset));\n\n    this.currentFillData = null;\n    this.plugin.hot.render();\n\n    if (foundMergedCells.length > 0) {\n      this.plugin.ifChromeForceRepaint();\n    }\n  }\n\n  /**\n   * Get the drag range from the changes made.\n   *\n   * @private\n   * @param {Array} changes The changes made.\n   * @returns {object} Object with `from` and `to` properties, both containing `row` and `column` keys.\n   */\n  getRangeFromChanges(changes) {\n    const rows = { min: null, max: null };\n    const columns = { min: null, max: null };\n\n    arrayEach(changes, (change) => {\n      const rowIndex = change[0];\n      const columnIndex = this.plugin.hot.propToCol(change[1]);\n\n      if (rows.min === null || rowIndex < rows.min) {\n        rows.min = rowIndex;\n      }\n\n      if (rows.max === null || rowIndex > rows.max) {\n        rows.max = rowIndex;\n      }\n\n      if (columns.min === null || columnIndex < columns.min) {\n        columns.min = columnIndex;\n      }\n\n      if (columns.max === null || columnIndex > columns.max) {\n        columns.max = columnIndex;\n      }\n    });\n\n    return {\n      from: {\n        row: rows.min,\n        column: columns.min\n      },\n      to: {\n        row: rows.max,\n        column: columns.max\n      }\n    };\n  }\n\n  /**\n   * Check if the drag area contains any merged cells.\n   *\n   * @param {Array} baseArea The base selection area.\n   * @param {Array} fullArea The base area extended by the drag area.\n   * @param {string} direction Drag direction.\n   * @returns {boolean}\n   */\n  dragAreaOverlapsCollections(baseArea, fullArea, direction) {\n    const dragArea = this.getDragArea(baseArea, fullArea, direction);\n    const [dragAreaStartRow, dragAreaStartColumn, dragAreaEndRow, dragAreaEndColumn] = dragArea;\n    const topLeft = this.plugin.hot._createCellCoords(dragAreaStartRow, dragAreaStartColumn);\n    const bottomRight = this.plugin.hot._createCellCoords(dragAreaEndRow, dragAreaEndColumn);\n    const dragRange = this.plugin.hot._createCellRange(topLeft, topLeft, bottomRight);\n\n    return this.mergedCellsCollection.getWithinRange(dragRange, true).length > 0;\n  }\n}\n\nexport default AutofillCalculations;\n","/**\n * Class responsible for all of the Selection-related operations on merged cells.\n *\n * @private\n * @class SelectionCalculations\n */\nclass SelectionCalculations {\n  /**\n   * Reference to the Merge Cells plugin.\n   *\n   * @type {MergeCells}\n   */\n  plugin;\n  /**\n   * Reference to the Handsontable instance.\n   *\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * Class name used for fully selected merged cells.\n   *\n   * @type {string}\n   */\n  fullySelectedMergedCellClassName = 'fullySelectedMergedCell';\n\n  constructor(plugin) {\n    this.plugin = plugin;\n    this.hot = plugin.hot;\n  }\n\n  /**\n   * Generate an additional class name for the entirely-selected merged cells.\n   *\n   * @param {number} currentRow Visual row index of the currently processed cell.\n   * @param {number} currentColumn Visual column index of the currently cell.\n   * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n   * @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n   * @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n   */\n  getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n    const startRow = Math.min(cornersOfSelection[0], cornersOfSelection[2]);\n    const startColumn = Math.min(cornersOfSelection[1], cornersOfSelection[3]);\n    const endRow = Math.max(cornersOfSelection[0], cornersOfSelection[2]);\n    const endColumn = Math.max(cornersOfSelection[1], cornersOfSelection[3]);\n\n    if (layerLevel === undefined) {\n      return;\n    }\n\n    const isFirstRenderableMergedCell =\n      this.plugin.mergedCellsCollection.isFirstRenderableMergedCell(currentRow, currentColumn);\n\n    // We add extra classes just to the first renderable merged cell.\n    if (!isFirstRenderableMergedCell) {\n      return;\n    }\n\n    const mergedCell = this.plugin.mergedCellsCollection.get(currentRow, currentColumn);\n\n    if (!mergedCell) {\n      return;\n    }\n\n    const mergeRowEnd = mergedCell.getLastRow();\n    const mergeColumnEnd = mergedCell.getLastColumn();\n    const fullMergeAreaWithinSelection =\n      startRow <= mergedCell.row && startColumn <= mergedCell.col &&\n      endRow >= mergeRowEnd && endColumn >= mergeColumnEnd;\n\n    if (fullMergeAreaWithinSelection) {\n      return `${this.fullySelectedMergedCellClassName}-${layerLevel}`;\n\n    } else if (this.isMergeCellFullySelected(mergedCell, this.plugin.hot.getSelectedRange())) {\n      return `${this.fullySelectedMergedCellClassName}-multiple`;\n    }\n  }\n\n  /**\n   * Check if the provided merged cell is fully selected (by one or many layers of selection).\n   *\n   * @param {MergedCellCoords} mergedCell The merged cell to be processed.\n   * @param {CellRange[]} selectionRangesArray Array of selection ranges.\n   * @returns {boolean}\n   */\n  isMergeCellFullySelected(mergedCell, selectionRangesArray) {\n    const mergedCellIndividualCoords = [];\n\n    if (!selectionRangesArray || !mergedCell) {\n      return false;\n    }\n\n    for (let r = 0; r < mergedCell.rowspan; r += 1) {\n      for (let c = 0; c < mergedCell.colspan; c += 1) {\n        mergedCellIndividualCoords.push(this.hot._createCellCoords(mergedCell.row + r, mergedCell.col + c));\n      }\n    }\n\n    for (let i = 0; i < mergedCellIndividualCoords.length; i += 1) {\n      const insideSelections = [];\n\n      for (let s = 0; s < selectionRangesArray.length; s += 1) {\n        insideSelections[s] = selectionRangesArray[s].includes(mergedCellIndividualCoords[i]);\n      }\n\n      if (!insideSelections.includes(true)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Generate an array of the entirely-selected merged cells' class names.\n   *\n   * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n   */\n  getSelectedMergedCellClassNameToRemove() {\n    const classNames = [];\n\n    for (let i = 0; i <= 7; i += 1) {\n      classNames.push(`${this.fullySelectedMergedCellClassName}-${i}`);\n    }\n\n    classNames.push(`${this.fullySelectedMergedCellClassName}-multiple`);\n\n    return classNames;\n  }\n}\n\nexport default SelectionCalculations;\n","import * as C from '../../../i18n/constants';\nimport MergedCellCoords from '../cellCoords';\n\n/**\n * @param {*} plugin The plugin instance.\n * @returns {object}\n */\nexport default function toggleMergeItem(plugin) {\n  return {\n    key: 'mergeCells',\n    name() {\n      const sel = this.getSelectedLast();\n\n      if (sel) {\n        const info = plugin.mergedCellsCollection.get(sel[0], sel[1]);\n\n        if (info.row === sel[0] && info.col === sel[1] &&\n            info.row + info.rowspan - 1 === sel[2] && info.col + info.colspan - 1 === sel[3]) {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNMERGE_CELLS);\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_MERGE_CELLS);\n    },\n    callback() {\n      const currentRange = this.getSelectedRangeLast();\n\n      if (!currentRange) {\n        return;\n      }\n\n      currentRange.setDirection(this.isRtl() ? 'NE-SW' : 'NW-SE');\n\n      const { from, to } = currentRange;\n\n      plugin.toggleMerge(currentRange);\n      this.selectCell(from.row, from.col, to.row, to.col, false);\n    },\n    disabled() {\n      const sel = this.getSelectedLast();\n\n      if (!sel) {\n        return true;\n      }\n\n      const isSingleCell = MergedCellCoords.isSingleCell({\n        row: sel[0],\n        col: sel[1],\n        rowspan: sel[2] - sel[0] + 1,\n        colspan: sel[3] - sel[1] + 1\n      });\n\n      return isSingleCell || this.selection.isSelectedByCorner();\n    },\n    hidden: false\n  };\n}\n","// extracted by mini-css-extract-plugin\nexport {};","import LinkedList from '../../utils/dataStructures/linkedList';\n\n/**\n * Class responsible for providing the correct focus order (vertical and horizontal) within a selection that\n * contains merged cells.\n *\n * @private\n */\nexport class FocusOrder {\n  /**\n   * The linked list of the all cells within the current selection in horizontal order. The list is\n   * recreated every time the selection is changed.\n   *\n   * @type {LinkedList}\n   */\n  #cellsHorizontalOrder = new LinkedList();\n  /**\n   * The linked list of the all cells within the current selection in horizontal order. The list is\n   * recreated every time the selection is changed.\n   *\n   * @type {LinkedList}\n   */\n  #cellsVerticalOrder = new LinkedList();\n  /**\n   * The currently highlighted cell within the horizontal linked list.\n   *\n   * @type {NodeStructure | null}\n   */\n  #currentHorizontalLinkedNode = null;\n  /**\n   * The currently highlighted cell within the vertical linked list.\n   *\n   * @type {NodeStructure | null}\n   */\n  #currentVerticalLinkedNode = null;\n  /**\n   * The merged cells getter function.\n   *\n   * @type {function(): {row: number, col: number, rowspan: number, colspan: number} | null}}\n   */\n  #mergedCellsGetter = null;\n  /**\n   * The row index mapper.\n   *\n   * @type {IndexMapper}\n   */\n  #rowIndexMapper = null;\n  /**\n   * The column index mapper.\n   *\n   * @type {IndexMapper}\n   */\n  #columnIndexMapper = null;\n\n  constructor({ mergedCellsGetter, rowIndexMapper, columnIndexMapper }) {\n    this.#mergedCellsGetter = mergedCellsGetter;\n    this.#rowIndexMapper = rowIndexMapper;\n    this.#columnIndexMapper = columnIndexMapper;\n  }\n\n  /**\n   * Gets the currently selected node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getCurrentVerticalNode() {\n    return this.#currentVerticalLinkedNode.data;\n  }\n\n  /**\n   * Gets the first node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getFirstVerticalNode() {\n    return this.#cellsVerticalOrder.first.data;\n  }\n\n  /**\n   * Gets the next selected node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getNextVerticalNode() {\n    return this.#currentVerticalLinkedNode.next.data;\n  }\n\n  /**\n   * Gets the previous selected node data from the vertical focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getPrevVerticalNode() {\n    return this.#currentVerticalLinkedNode.prev.data;\n  }\n\n  /**\n   * Gets the currently selected node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getCurrentHorizontalNode() {\n    return this.#currentHorizontalLinkedNode.data;\n  }\n\n  /**\n   * Gets the first node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getFirstHorizontalNode() {\n    return this.#cellsHorizontalOrder.first.data;\n  }\n\n  /**\n   * Gets the next selected node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getNextHorizontalNode() {\n    return this.#currentHorizontalLinkedNode.next.data;\n  }\n\n  /**\n   * Gets the previous selected node data from the horizontal focus order list.\n   *\n   * @returns {NodeStructure}\n   */\n  getPrevHorizontalNode() {\n    return this.#currentHorizontalLinkedNode.prev.data;\n  }\n\n  /**\n   * Sets the previous node from the vertical focus order list as active.\n   */\n  setPrevNodeAsActive() {\n    this.#currentVerticalLinkedNode = this.#currentVerticalLinkedNode.prev;\n    this.#currentHorizontalLinkedNode = this.#currentHorizontalLinkedNode.prev;\n  }\n\n  /**\n   * Sets the previous node from the horizontal focus order list as active.\n   */\n  setNextNodeAsActive() {\n    this.#currentVerticalLinkedNode = this.#currentVerticalLinkedNode.next;\n    this.#currentHorizontalLinkedNode = this.#currentHorizontalLinkedNode.next;\n  }\n\n  /**\n   * Rebuilds the focus order list based on the provided selection.\n   *\n   * @param {CellRange} selectedRange The selected range to build the focus order for.\n   */\n  buildFocusOrder(selectedRange) {\n    const topStart = selectedRange.getTopStartCorner();\n    const bottomEnd = selectedRange.getBottomEndCorner();\n    const visitedHorizontalCells = new WeakSet();\n\n    this.#cellsHorizontalOrder = new LinkedList();\n\n    for (let r = topStart.row; r <= bottomEnd.row; r++) {\n      if (this.#rowIndexMapper.isHidden(r)) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      for (let c = topStart.col; c <= bottomEnd.col; c++) {\n        if (this.#columnIndexMapper.isHidden(c)) {\n          // eslint-disable-next-line no-continue\n          continue;\n        }\n\n        const node = this.#pushOrderNode(selectedRange, this.#cellsHorizontalOrder, visitedHorizontalCells, r, c);\n\n        if (node) {\n          this.#currentHorizontalLinkedNode = node;\n        }\n      }\n    }\n\n    // create circular linked list\n    if (this.#cellsHorizontalOrder.first) {\n      this.#cellsHorizontalOrder.first.prev = this.#cellsHorizontalOrder.last;\n      this.#cellsHorizontalOrder.last.next = this.#cellsHorizontalOrder.first;\n    }\n\n    const visitedVerticalCells = new WeakSet();\n\n    this.#cellsVerticalOrder = new LinkedList();\n\n    for (let c = topStart.col; c <= bottomEnd.col; c++) {\n      if (this.#columnIndexMapper.isHidden(c)) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      for (let r = topStart.row; r <= bottomEnd.row; r++) {\n        if (this.#rowIndexMapper.isHidden(r)) {\n          // eslint-disable-next-line no-continue\n          continue;\n        }\n\n        const node = this.#pushOrderNode(selectedRange, this.#cellsVerticalOrder, visitedVerticalCells, r, c);\n\n        if (node) {\n          this.#currentVerticalLinkedNode = node;\n        }\n      }\n    }\n\n    // create circular linked list\n    if (this.#cellsVerticalOrder.first) {\n      this.#cellsVerticalOrder.first.prev = this.#cellsVerticalOrder.last;\n      this.#cellsVerticalOrder.last.next = this.#cellsVerticalOrder.first;\n    }\n  }\n\n  /**\n   * Pushes a new node to the provided list order.\n   *\n   * @param {CellRange} selectedRange The selected range to build the focus order for.\n   * @param {LinkedList} listOrder The list order to push the node to.\n   * @param {WeakSet} mergeCellsVisitor The set of visited cells.\n   * @param {number} row The visual row index.\n   * @param {number} column The visual column index.\n   * @returns {NodeStructure | null}\n   */\n  #pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column) {\n    const topStart = selectedRange.getTopStartCorner();\n    const bottomEnd = selectedRange.getBottomEndCorner();\n    const highlight = selectedRange.highlight.clone().normalize();\n    const mergeParent = this.#mergedCellsGetter(row, column);\n\n    if (mergeParent && mergeCellsVisitor.has(mergeParent)) {\n      return null;\n    }\n\n    const node = {\n      colStart: column,\n      colEnd: column,\n      rowStart: row,\n      rowEnd: row,\n    };\n\n    if (mergeParent) {\n      mergeCellsVisitor.add(mergeParent);\n\n      if (\n        mergeParent.row < topStart.row ||\n        mergeParent.row + mergeParent.rowspan - 1 > bottomEnd.row ||\n        mergeParent.col < topStart.col ||\n        mergeParent.col + mergeParent.colspan - 1 > bottomEnd.col\n      ) {\n        return null;\n      }\n\n      node.colStart = mergeParent.col;\n      node.colEnd = mergeParent.col + mergeParent.colspan - 1;\n      node.rowStart = mergeParent.row;\n      node.rowEnd = mergeParent.row + mergeParent.rowspan - 1;\n    }\n\n    const linkedNode = listOrder.push(node);\n\n    if (\n      row === highlight.row && column === highlight.col ||\n      mergeParent &&\n      (highlight.row >= mergeParent.row && highlight.row <= mergeParent.row + mergeParent.rowspan - 1 &&\n      highlight.col >= mergeParent.col && highlight.col <= mergeParent.col + mergeParent.colspan - 1)\n    ) {\n      return linkedNode;\n    }\n\n    return null;\n  }\n\n  /**\n   * Sets the active node based on the provided row and column.\n   *\n   * @param {number} row The visual row index.\n   * @param {number} column The visual column index.\n   * @returns {FocusOrder}\n   */\n  setActiveNode(row, column) {\n    this.#cellsHorizontalOrder.inorder((node) => {\n      const { rowStart, rowEnd, colStart, colEnd } = node.data;\n\n      if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {\n        this.#currentHorizontalLinkedNode = node;\n\n        return false;\n      }\n    });\n\n    this.#cellsVerticalOrder.inorder((node) => {\n      const { rowStart, rowEnd, colStart, colEnd } = node.data;\n\n      if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {\n        this.#currentVerticalLinkedNode = node;\n\n        return false;\n      }\n    });\n\n    return this;\n  }\n}\n","/**\n * Refactored implementation of LinkedList (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia, Microfed and Jakeh (part of javascript-algorithms project - all project contributors\n * at repository website).\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms.\n */\n\n/**\n * Linked list node.\n *\n * @class NodeStructure\n * @util\n */\nclass NodeStructure {\n  /**\n   * Data of the node.\n   *\n   * @member {object}\n   */\n  data;\n  /**\n   * Next node.\n   *\n   * @member {NodeStructure}\n   */\n  next = null;\n  /**\n   * Previous node.\n   *\n   * @member {NodeStructure}\n   */\n  prev = null;\n\n  constructor(data) {\n    this.data = data;\n  }\n}\n\n/**\n * Linked list.\n *\n * @class LinkedList\n * @util\n */\nclass LinkedList {\n  first = null;\n  last = null;\n\n  /**\n   * Add data to the end of linked list.\n   *\n   * @param {object} data Data which should be added.\n   * @returns {NodeStructure} Returns the node which has been added.\n   */\n  push(data) {\n    const node = new NodeStructure(data);\n\n    if (this.first === null) {\n      this.first = node;\n      this.last = node;\n\n    } else {\n      const temp = this.last;\n\n      this.last = node;\n      node.prev = temp;\n      temp.next = node;\n    }\n\n    return node;\n  }\n\n  /**\n   * Add data to the beginning of linked list.\n   *\n   * @param {object} data Data which should be added.\n   */\n  unshift(data) {\n    const node = new NodeStructure(data);\n\n    if (this.first === null) {\n      this.first = node;\n      this.last = node;\n\n    } else {\n      const temp = this.first;\n\n      this.first = node;\n      node.next = temp;\n      temp.prev = node;\n    }\n  }\n\n  /**\n   * In order traversal of the linked list.\n   *\n   * @param {Function} callback Callback which should be executed on each node.\n   */\n  inorder(callback) {\n    let temp = this.first;\n\n    while (temp) {\n      const interrupt = callback(temp);\n\n      if (temp === this.last || interrupt === true) {\n        break;\n      }\n\n      temp = temp.next;\n    }\n  }\n\n  /**\n   * Remove data from the linked list.\n   *\n   * @param {object} data Data which should be removed.\n   * @returns {boolean} Returns true if data has been removed.\n   */\n  remove(data) {\n    if (this.first === null) {\n      return false;\n    }\n\n    let temp = this.first;\n    let next;\n    let prev;\n\n    while (temp) {\n      if (temp.data === data) {\n        next = temp.next;\n        prev = temp.prev;\n\n        if (next) {\n          next.prev = prev;\n        }\n\n        if (prev) {\n          prev.next = next;\n        }\n\n        if (temp === this.first) {\n          this.first = next;\n        }\n\n        if (temp === this.last) {\n          this.last = prev;\n        }\n\n        return true;\n      }\n\n      temp = temp.next;\n    }\n\n    return false;\n  }\n\n  /**\n   * Check if linked list contains cycle.\n   *\n   * @returns {boolean} Returns true if linked list contains cycle.\n   */\n  hasCycle() {\n    let fast = this.first;\n    let slow = this.first;\n\n    while (true) {\n      if (fast === null) {\n        return false;\n      }\n\n      fast = fast.next;\n\n      if (fast === null) {\n        return false;\n      }\n\n      fast = fast.next;\n      slow = slow.next;\n\n      if (fast === slow) {\n        return true;\n      }\n    }\n  }\n\n  /**\n   * Return last node from the linked list.\n   *\n   * @returns {NodeStructure} Last node.\n   */\n  pop() {\n    if (this.last === null) {\n      return null;\n    }\n\n    const temp = this.last;\n\n    this.last = this.last.prev;\n\n    return temp;\n  }\n\n  /**\n   * Return first node from the linked list.\n   *\n   * @returns {NodeStructure} First node.\n   */\n  shift() {\n    if (this.first === null) {\n      return null;\n    }\n\n    const temp = this.first;\n\n    this.first = this.first.next;\n\n    return temp;\n  }\n\n  /**\n   * Reverses the linked list recursively.\n   */\n  recursiveReverse() {\n    /**\n     * @param {*} current The current value.\n     * @param {*} next The next value.\n     */\n    function inverse(current, next) {\n      if (!next) {\n        return;\n      }\n      inverse(next, next.next);\n      next.next = current;\n    }\n\n    if (!this.first) {\n      return;\n    }\n\n    inverse(this.first, this.first.next);\n\n    this.first.next = null;\n    const temp = this.first;\n\n    this.first = this.last;\n    this.last = temp;\n  }\n\n  /**\n   * Reverses the linked list iteratively.\n   */\n  reverse() {\n    if (!this.first || !this.first.next) {\n      return;\n    }\n\n    let current = this.first.next;\n    let prev = this.first;\n    let temp;\n\n    while (current) {\n      temp = current.next;\n      current.next = prev;\n      prev.prev = current;\n      prev = current;\n      current = temp;\n    }\n\n    this.first.next = null;\n    this.last.prev = null;\n    temp = this.first;\n    this.first = prev;\n    this.last = temp;\n  }\n}\n\nexport { NodeStructure };\nexport default LinkedList;\n","import { isObject } from '../../helpers/object';\n\n/**\n * Creates a renderer object for the `MergeCells` plugin.\n *\n * @private\n * @param {MergeCells} plugin The `MergeCells` plugin instance.\n * @returns {{before: Function, after: Function}}\n */\nexport function createMergeCellRenderer(plugin) {\n  const {\n    hot,\n  } = plugin;\n  const {\n    rowIndexMapper: rowMapper,\n    columnIndexMapper: columnMapper,\n  } = hot;\n\n  /**\n   * Runs before the cell is rendered.\n   *\n   * @private\n   */\n  function before() {}\n\n  /**\n   * Runs after the cell is rendered.\n   *\n   * @private\n   * @param {HTMLElement} TD The cell to be modified.\n   * @param {number} row Row index.\n   * @param {number} col Visual column index.\n   */\n  function after(TD, row, col) {\n    const mergedCell = plugin.mergedCellsCollection.get(row, col);\n\n    if (!isObject(mergedCell)) {\n      TD.removeAttribute('rowspan');\n      TD.removeAttribute('colspan');\n      TD.style.display = '';\n\n      return;\n    }\n\n    const {\n      row: origRow,\n      col: origColumn,\n      colspan: origColspan,\n      rowspan: origRowspan,\n    } = mergedCell;\n    const [\n      lastMergedRowIndex,\n      lastMergedColumnIndex,\n    ] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);\n\n    const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);\n    const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);\n\n    const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.\n    const maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.\n\n    const notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);\n    const notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);\n    const notHiddenRowspan = Math.min(origRowspan, maxRowSpan);\n    const notHiddenColspan = Math.min(origColspan, maxColSpan);\n\n    if (notHiddenRow === row && notHiddenColumn === col) {\n      TD.setAttribute('rowspan', notHiddenRowspan);\n      TD.setAttribute('colspan', notHiddenColspan);\n\n    } else {\n      TD.removeAttribute('rowspan');\n      TD.removeAttribute('colspan');\n      TD.style.display = 'none';\n    }\n  }\n\n  return { before, after };\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  MultiColumnSorting,\n} from './multiColumnSorting';\n","import {\n  APPEND_COLUMN_CONFIG_STRATEGY,\n  ColumnSorting\n} from '../columnSorting';\nimport { registerRootComparator } from '../columnSorting/sortService';\nimport { wasHeaderClickedProperly } from '../columnSorting/utils';\nimport { addClass, removeClass } from '../../helpers/dom/element';\nimport { rootComparator } from './rootComparator';\nimport { warnAboutPluginsConflict } from './utils';\nimport { getClassesToAdd, getClassesToRemove } from './domHelpers';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\n\nimport './multiColumnSorting.scss';\n\nexport const PLUGIN_KEY = 'multiColumnSorting';\nexport const PLUGIN_PRIORITY = 170;\nconst CONFLICTED_PLUGIN_KEY = 'columnSorting';\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\nregisterRootComparator(PLUGIN_KEY, rootComparator);\n\n/**\n * @plugin MultiColumnSorting\n * @class MultiColumnSorting\n *\n * @description\n * This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the\n * {@link Options#multiColumnSorting} property to the correct value (see the examples below).\n *\n * @example\n * ```js\n * // as boolean\n * multiColumnSorting: true\n *\n * // as an object with initial sort config (sort ascending for column at index 1 and then sort descending for column at index 0)\n * multiColumnSorting: {\n *   initialConfig: [{\n *     column: 1,\n *     sortOrder: 'asc'\n *   }, {\n *     column: 0,\n *     sortOrder: 'desc'\n *   }]\n * }\n *\n * // as an object which define specific sorting options for all columns\n * multiColumnSorting: {\n *   sortEmptyCells: true, // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table (by default)\n *   indicator: true, // true = shows indicator for all columns (by default), false = don't show indicator for columns\n *   headerAction: true, // true = allow to click on the headers to sort (by default), false = turn off possibility to click on the headers to sort\n *   compareFunctionFactory: function(sortOrder, columnMeta) {\n *     return function(value, nextValue) {\n *       // Some value comparisons which will return -1, 0 or 1...\n *     }\n *   }\n * }\n *\n * // as an object passed to the `column` property, allows specifying a custom options for the desired column.\n * // please take a look at documentation of `column` property: {@link Options#columns}\n * columns: [{\n *   multiColumnSorting: {\n *     indicator: false, // disable indicator for the first column,\n *     sortEmptyCells: true,\n *     headerAction: false, // clicks on the first column won't sort\n *     compareFunctionFactory: function(sortOrder, columnMeta) {\n *       return function(value, nextValue) {\n *         return 0; // Custom compare function for the first column (don't sort)\n *       }\n *     }\n *   }\n * }]\n * ```\n */\nexport class MultiColumnSorting extends ColumnSorting {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Main settings key designed for the plugin.\n   *\n   * @private\n   * @type {string}\n   */\n  pluginKey = PLUGIN_KEY;\n\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link MultiColumnSorting#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return super.isEnabled();\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (!this.enabled && this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {\n      warnAboutPluginsConflict();\n\n      this.hot.getPlugin(CONFLICTED_PLUGIN_KEY).disablePlugin();\n    }\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    super.registerShortcuts();\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Shift', 'Enter']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n\n          if (highlight.row === -1 && highlight.col >= 0) {\n            this.sort(this.getNextSortConfig(highlight.col, APPEND_COLUMN_CONFIG_STRATEGY));\n          }\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.getSelectedRangeLast()?.isSingle() &&\n            this.hot.selection.isCellVisible(highlight) && highlight.isHeader();\n        },\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n        group: SHORTCUTS_GROUP,\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling column sorting functionality.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    super.unregisterShortcuts();\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * Sorts the table by chosen columns and orders.\n   *\n   * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   *\n   * **Note**: Please keep in mind that every call of `sort` function set an entirely new sort order. Previous sort configs aren't preserved.\n   *\n   * @example\n   * ```js\n   * // sort ascending first visual column\n   * hot.getPlugin('multiColumnSorting').sort({ column: 0, sortOrder: 'asc' });\n   *\n   * // sort first two visual column in the defined sequence\n   * hot.getPlugin('multiColumnSorting').sort([{\n   *   column: 1, sortOrder: 'asc'\n   * }, {\n   *   column: 0, sortOrder: 'desc'\n   * }]);\n   * ```\n   *\n   * @fires Hooks#beforeColumnSort\n   * @fires Hooks#afterColumnSort\n   */\n  sort(sortConfig) {\n    super.sort(sortConfig);\n  }\n\n  /**\n   * Clear the sort performed on the table.\n   */\n  clearSort() {\n    super.clearSort();\n  }\n\n  /**\n   * Checks if the table is sorted (any column have to be sorted).\n   *\n   * @returns {boolean}\n   */\n  isSorted() {\n    return super.isSorted();\n  }\n\n  /**\n   * Get sort configuration for particular column or for all sorted columns. Objects contain `column` and `sortOrder` properties.\n   *\n   * **Note**: Please keep in mind that returned objects expose **visual** column index under the `column` key. They are handled by the `sort` function.\n   *\n   * @param {number} [column] Visual column index.\n   * @returns {undefined|object|Array}\n   */\n  getSortConfig(column) {\n    return super.getSortConfig(column);\n  }\n\n  /**\n   * @description\n   * Warn: Useful mainly for providing server side sort implementation (see in the example below). It doesn't sort the data set. It just sets sort configuration for all sorted columns.\n   * Note: Please keep in mind that this method doesn't re-render the table.\n   *\n   * @example\n   * ```js\n   * beforeColumnSort: function(currentSortConfig, destinationSortConfigs) {\n   *   const columnSortPlugin = this.getPlugin('multiColumnSorting');\n   *\n   *   columnSortPlugin.setSortConfig(destinationSortConfigs);\n   *\n   *   // const newData = ... // Calculated data set, ie. from an AJAX call.\n   *\n   *   this.loadData(newData); // Load new data set and re-render the table.\n   *\n   *   return false; // The blockade for the default sort action.\n   * }\n   * ```\n   *\n   * @param {undefined|object|Array} sortConfig Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   */\n  setSortConfig(sortConfig) {\n    super.setSortConfig(sortConfig);\n  }\n\n  /**\n   * Get normalized sort configs.\n   *\n   * @private\n   * @param {object|Array} [sortConfig=[]] Single column sort configuration or full sort configuration (for all sorted columns).\n   * The configuration object contains `column` and `sortOrder` properties. First of them contains visual column index, the second one contains\n   * sort order (`asc` for ascending, `desc` for descending).\n   * @returns {Array}\n   */\n  getNormalizedSortConfigs(sortConfig = []) {\n    if (Array.isArray(sortConfig)) {\n      return sortConfig;\n    }\n\n    return [sortConfig];\n  }\n\n  /**\n   * Update header classes.\n   *\n   * @private\n   * @param {HTMLElement} headerSpanElement Header span element.\n   * @param {...*} args Extra arguments for helpers.\n   */\n  updateHeaderClasses(headerSpanElement, ...args) {\n    super.updateHeaderClasses(headerSpanElement, ...args);\n\n    removeClass(headerSpanElement, getClassesToRemove(headerSpanElement));\n\n    if (this.enabled !== false) {\n      addClass(headerSpanElement, getClassesToAdd(...args));\n    }\n  }\n\n  /**\n   * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called\n   * for `updateSettings` in specific situations.\n   *\n   * @private\n   * @param {object} newSettings New settings object.\n   */\n  onUpdateSettings(newSettings) {\n    if (this.hot.getSettings()[this.pluginKey] && this.hot.getSettings()[CONFLICTED_PLUGIN_KEY]) {\n      warnAboutPluginsConflict();\n    }\n\n    super.onUpdateSettings(newSettings);\n  }\n\n  /**\n   * Callback for the `onAfterOnCellMouseDown` hook.\n   *\n   * @private\n   * @param {Event} event Event which are provided by hook.\n   * @param {CellCoords} coords Visual coords of the selected cell.\n   */\n  onAfterOnCellMouseDown(event, coords) {\n    if (wasHeaderClickedProperly(coords.row, coords.col, event) === false) {\n      return;\n    }\n\n    if (this.wasClickableHeaderClicked(event, coords.col)) {\n      if (this.hot.getShortcutManager().isCtrlPressed()) {\n        this.hot.deselectCell();\n        this.hot.selectColumns(coords.col);\n\n        this.sort(this.getNextSortConfig(coords.col, APPEND_COLUMN_CONFIG_STRATEGY));\n\n      } else {\n        this.sort(this.getColumnNextConfig(coords.col));\n      }\n    }\n  }\n}\n","import { getCompareFunctionFactory, DO_NOT_SWAP } from '../columnSorting/sortService';\n\n/**\n * Sort comparator handled by conventional sort algorithm.\n *\n * @param {Array} sortingOrders Sort orders (`asc` for ascending, `desc` for descending).\n * @param {Array} columnMetas Column meta objects.\n * @returns {Function}\n */\nexport function rootComparator(sortingOrders, columnMetas) {\n  return function(rowIndexWithValues, nextRowIndexWithValues) {\n    // We sort array of arrays. Single array is in form [rowIndex, ...values].\n    // We compare just values, stored at second index of array.\n    const [, ...values] = rowIndexWithValues;\n    const [, ...nextValues] = nextRowIndexWithValues;\n\n    return (function getCompareResult(column) {\n      const sortingOrder = sortingOrders[column];\n      const columnMeta = columnMetas[column];\n      const value = values[column];\n      const nextValue = nextValues[column];\n      const pluginSettings = columnMeta.multiColumnSorting;\n      const compareFunctionFactory = pluginSettings.compareFunctionFactory ?\n        pluginSettings.compareFunctionFactory : getCompareFunctionFactory(columnMeta.type);\n      const compareResult = compareFunctionFactory(sortingOrder, columnMeta, pluginSettings)(value, nextValue);\n\n      if (compareResult === DO_NOT_SWAP) {\n        const nextSortedColumn = column + 1;\n\n        if (typeof columnMetas[nextSortedColumn] !== 'undefined') {\n          return getCompareResult(nextSortedColumn);\n        }\n      }\n\n      return compareResult;\n    }(0));\n  };\n}\n","import { warn } from '../../helpers/console';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\n\n/**\n * Warn users about problems when using `columnSorting` and `multiColumnSorting` plugins simultaneously.\n */\nexport function warnAboutPluginsConflict() {\n  warn(toSingleLine`Plugins \\`columnSorting\\` and \\`multiColumnSorting\\` should not be enabled simultaneously. \n    Only \\`multiColumnSorting\\` will work. The \\`columnSorting\\` plugin will be disabled.`);\n}\n","const COLUMN_ORDER_PREFIX = 'sort';\n\n/**\n * Get CSS classes which should be added to particular column header.\n *\n * @param {object} columnStatesManager Instance of column state manager.\n * @param {number} column Visual column index.\n * @param {boolean} showSortIndicator Indicates if indicator should be shown for the particular column.\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToAdd(columnStatesManager, column, showSortIndicator) {\n  const cssClasses = [];\n\n  if (showSortIndicator === false) {\n    return cssClasses;\n  }\n\n  if (columnStatesManager.isColumnSorted(column) && columnStatesManager.getNumberOfSortedColumns() > 1) {\n    cssClasses.push(`${COLUMN_ORDER_PREFIX}-${columnStatesManager.getIndexOfColumnInSortQueue(column) + 1}`);\n  }\n\n  return cssClasses;\n}\n\n/**\n * Get CSS classes which should be removed from column header.\n *\n * @param {HTMLElement} htmlElement An element to process.\n * @returns {Array} Array of CSS classes.\n */\nexport function getClassesToRemove(htmlElement) {\n  const cssClasses = htmlElement.className.split(' ');\n  const sortSequenceRegExp = new RegExp(`^${COLUMN_ORDER_PREFIX}-[0-9]{1,2}$`);\n\n  return cssClasses.filter(cssClass => sortSequenceRegExp.test(cssClass));\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  MultipleSelectionHandles,\n} from './multipleSelectionHandles';\n","import { hasClass } from '../../helpers/dom/element';\nimport { isMobileBrowser } from '../../helpers/browser';\nimport { BasePlugin } from '../base';\n\nexport const PLUGIN_KEY = 'multipleSelectionHandles';\nexport const PLUGIN_PRIORITY = 160;\n\n/**\n * @private\n * @plugin MultipleSelectionHandles\n * @class MultipleSelectionHandles\n */\nexport class MultipleSelectionHandles extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * @type {Array}\n   */\n  dragged = [];\n  /**\n   * @type {null}\n   */\n  lastSetCell = null;\n\n  /**\n   * Check if the plugin is enabled in the handsontable settings.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return isMobileBrowser();\n  }\n\n  /**\n   * Enable plugin for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.registerListeners();\n    super.enablePlugin();\n  }\n\n  /**\n   * Bind the touch events.\n   *\n   * @private\n   */\n  registerListeners() {\n    const _this = this;\n    const { rootElement } = this.hot;\n\n    /**\n     * @private\n     * @param {string} query Query for the position.\n     * @returns {boolean}\n     */\n    function removeFromDragged(query) {\n\n      if (_this.dragged.length === 1) {\n        // clear array\n        _this.dragged.splice(0, _this.dragged.length);\n\n        return true;\n      }\n\n      const entryPosition = _this.dragged.indexOf(query);\n\n      if (entryPosition === -1) {\n        return false;\n      } else if (entryPosition === 0) {\n        _this.dragged = _this.dragged.slice(0, 1);\n      } else if (entryPosition === 1) {\n        _this.dragged = _this.dragged.slice(-1);\n      }\n    }\n\n    this.eventManager.addEventListener(rootElement, 'touchstart', (event) => {\n      let selectedRange;\n\n      if (hasClass(event.target, 'topSelectionHandle-HitArea')) {\n        selectedRange = _this.hot.getSelectedRangeLast();\n\n        _this.dragged.push('top');\n\n        _this.touchStartRange = {\n          width: selectedRange.getWidth(),\n          height: selectedRange.getHeight(),\n          direction: selectedRange.getDirection()\n        };\n\n        event.preventDefault();\n\n        return false;\n\n      } else if (hasClass(event.target, 'bottomSelectionHandle-HitArea')) {\n        selectedRange = _this.hot.getSelectedRangeLast();\n\n        _this.dragged.push('bottom');\n\n        _this.touchStartRange = {\n          width: selectedRange.getWidth(),\n          height: selectedRange.getHeight(),\n          direction: selectedRange.getDirection()\n        };\n\n        event.preventDefault();\n\n        return false;\n      }\n    });\n\n    this.eventManager.addEventListener(rootElement, 'touchend', (event) => {\n      if (hasClass(event.target, 'topSelectionHandle-HitArea')) {\n        removeFromDragged.call(_this, 'top');\n\n        _this.touchStartRange = undefined;\n\n        event.preventDefault();\n\n        return false;\n\n      } else if (hasClass(event.target, 'bottomSelectionHandle-HitArea')) {\n        removeFromDragged.call(_this, 'bottom');\n\n        _this.touchStartRange = undefined;\n\n        event.preventDefault();\n\n        return false;\n      }\n    });\n\n    this.eventManager.addEventListener(rootElement, 'touchmove', (event) => {\n      const { rootDocument } = this.hot;\n      let targetCoords;\n      let selectedRange;\n      let rangeWidth;\n      let rangeHeight;\n      let rangeDirection;\n      let newRangeCoords;\n\n      if (_this.dragged.length === 0) {\n        return;\n      }\n\n      const endTarget = rootDocument.elementFromPoint(event.touches[0].clientX, event.touches[0].clientY);\n\n      if (!endTarget || endTarget === _this.lastSetCell) {\n        return;\n      }\n\n      if (endTarget.nodeName === 'TD' || endTarget.nodeName === 'TH') {\n        targetCoords = _this.hot.getCoords(endTarget);\n\n        if (targetCoords.col === -1) {\n          targetCoords.col = 0;\n        }\n\n        selectedRange = _this.hot.getSelectedRangeLast();\n        rangeWidth = selectedRange.getWidth();\n        rangeHeight = selectedRange.getHeight();\n        rangeDirection = selectedRange.getDirection();\n\n        if (rangeWidth === 1 && rangeHeight === 1) {\n          _this.hot.selection.setRangeEnd(targetCoords);\n        }\n\n        newRangeCoords = _this.getCurrentRangeCoords(\n          selectedRange,\n          targetCoords,\n          _this.touchStartRange.direction,\n          rangeDirection,\n          _this.dragged[0]\n        );\n\n        if (newRangeCoords.start !== null) {\n          _this.hot.selection.setRangeStart(newRangeCoords.start);\n        }\n\n        _this.hot.selection.setRangeEnd(newRangeCoords.end);\n\n        _this.lastSetCell = endTarget;\n\n      }\n\n      event.preventDefault();\n    });\n  }\n\n  getCurrentRangeCoords(selectedRange, currentTouch, touchStartDirection, currentDirection, draggedHandle) {\n    const topStartCorner = selectedRange.getTopStartCorner();\n    const bottomEndCorner = selectedRange.getBottomEndCorner();\n    const bottomStartCorner = selectedRange.getBottomStartCorner();\n    const topEndCorner = selectedRange.getTopEndCorner();\n\n    let newCoords = {\n      start: null,\n      end: null\n    };\n\n    switch (touchStartDirection) {\n      case 'NE-SW':\n        switch (currentDirection) {\n          case 'NE-SW':\n          case 'NW-SE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, selectedRange.highlight.col),\n                end: this.hot._createCellCoords(bottomStartCorner.row, currentTouch.col)\n              };\n            } else {\n              newCoords = {\n                start: this.hot._createCellCoords(selectedRange.highlight.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, topStartCorner.col)\n              };\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'bottom') {\n              newCoords = {\n                start: this.hot._createCellCoords(bottomEndCorner.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, topStartCorner.col)\n              };\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      case 'NW-SE':\n        switch (currentDirection) {\n          case 'NE-SW':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: bottomStartCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'NW-SE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: bottomEndCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: topStartCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'SW-NE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: currentTouch,\n                end: topEndCorner\n              };\n            } else {\n              newCoords.end = currentTouch;\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      case 'SW-NE':\n        switch (currentDirection) {\n          case 'NW-SE':\n            if (draggedHandle === 'bottom') {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, topStartCorner.col),\n                end: this.hot._createCellCoords(bottomStartCorner.row, currentTouch.col)\n              };\n            } else {\n              newCoords = {\n                start: this.hot._createCellCoords(topStartCorner.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, bottomEndCorner.col)\n              };\n            }\n            break;\n          // case 'NE-SW':\n          //\n          //  break;\n          case 'SW-NE':\n            if (draggedHandle === 'top') {\n              newCoords = {\n                start: this.hot._createCellCoords(selectedRange.highlight.row, currentTouch.col),\n                end: this.hot._createCellCoords(currentTouch.row, bottomEndCorner.col)\n              };\n            } else {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, topStartCorner.col),\n                end: this.hot._createCellCoords(topStartCorner.row, currentTouch.col)\n              };\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'bottom') {\n              newCoords = {\n                start: this.hot._createCellCoords(currentTouch.row, topEndCorner.col),\n                end: this.hot._createCellCoords(topStartCorner.row, currentTouch.col)\n              };\n            } else if (draggedHandle === 'top') {\n              newCoords = {\n                start: bottomStartCorner,\n                end: currentTouch\n              };\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      case 'SE-NW':\n        switch (currentDirection) {\n          case 'NW-SE':\n          case 'NE-SW':\n          case 'SW-NE':\n            if (draggedHandle === 'top') {\n              newCoords.end = currentTouch;\n            }\n            break;\n          case 'SE-NW':\n            if (draggedHandle === 'top') {\n              newCoords.end = currentTouch;\n            } else {\n              newCoords = {\n                start: currentTouch,\n                end: topStartCorner\n              };\n            }\n            break;\n          default:\n            break;\n        }\n        break;\n      default:\n        break;\n    }\n\n    return newCoords;\n  }\n\n  /**\n   * Check if user is currently dragging the handle.\n   *\n   * @returns {boolean} Dragging state.\n   */\n  isDragged() {\n    return this.dragged.length > 0;\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  NestedHeaders,\n} from './nestedHeaders';\n","import {\n  addClass,\n  removeClass,\n} from '../../helpers/dom/element';\nimport { isNumeric, clamp } from '../../helpers/number';\nimport { toSingleLine } from '../../helpers/templateLiteralTag';\nimport { isLeftClick, isRightClick, isTouchEvent } from '../../helpers/dom/event';\nimport { warn } from '../../helpers/console';\nimport {\n  ACTIVE_HEADER_TYPE,\n  HEADER_TYPE,\n} from '../../selection';\nimport { BasePlugin } from '../base';\nimport StateManager from './stateManager';\nimport GhostTable from './utils/ghostTable';\n\nimport './nestedHeaders.css';\n\nexport const PLUGIN_KEY = 'nestedHeaders';\nexport const PLUGIN_PRIORITY = 280;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin NestedHeaders\n * @class NestedHeaders\n *\n * @description\n * The plugin allows to create a nested header structure, using the HTML's colspan attribute.\n *\n * To make any header wider (covering multiple table columns), it's corresponding configuration array element should be\n * provided as an object with `label` and `colspan` properties. The `label` property defines the header's label,\n * while the `colspan` property defines a number of columns that the header should cover.\n * You can also set custom class names to any of the headers by providing the `headerClassName` property.\n *\n * __Note__ that the plugin supports a *nested* structure, which means, any header cannot be wider than it's \"parent\". In\n * other words, headers cannot overlap each other.\n * @example\n *\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   nestedHeaders: [\n *     ['A', {label: 'B', colspan: 8, headerClassName: 'htRight'}, 'C'],\n *     ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n *     ['H', {label: 'I', colspan: 2}, {label: 'J', colspan: 2}, {label: 'K', colspan: 2}, {label: 'L', colspan: 2}, 'M'],\n *     ['N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W']\n *  ],\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * <HotTable\n *   data={getData()}\n *   nestedHeaders={[\n *     ['A', {label: 'B', colspan: 8, headerClassName: 'htRight'}, 'C'],\n *     ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n *     ['H', {label: 'I', colspan: 2}, {label: 'J', colspan: 2}, {label: 'K', colspan: 2}, {label: 'L', colspan: 2}, 'M'],\n *     ['N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W']\n *  ]}\n * />\n * ```\n * :::\n */\nexport class NestedHeaders extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * The state manager for the nested headers.\n   *\n   * @type {StateManager}\n   */\n  #stateManager = new StateManager();\n  /**\n   * The instance of the ChangesObservable class that allows track the changes that happens in the\n   * column indexes.\n   *\n   * @type {ChangesObservable}\n   */\n  #hidingIndexMapObserver = null;\n  /**\n   * Holds the coords that points to the place where the column selection starts.\n   *\n   * @type {number|null}\n   */\n  #focusInitialCoords = null;\n  /**\n   * Determines if there is performed the column selection.\n   *\n   * @type {boolean}\n   */\n  #isColumnsSelectionInProgress = false;\n  /**\n   * Custom helper for getting widths of the nested headers.\n   *\n   * @private\n   * @type {GhostTable}\n   */\n  // @TODO This should be changed after refactor handsontable/utils/ghostTable.\n  ghostTable = new GhostTable(this.hot, (row, column) => this.getHeaderSettings(row, column));\n  /**\n   * The flag which determines that the nested header settings contains overlapping headers\n   * configuration.\n   *\n   * @type {boolean}\n   */\n  detectedOverlappedHeaders = false;\n\n  /**\n   * Check if plugin is enabled.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const { nestedHeaders } = this.hot.getSettings();\n\n    if (!Array.isArray(nestedHeaders) || !Array.isArray(nestedHeaders[0])) {\n      warn(toSingleLine`Your Nested Headers plugin configuration is invalid. The settings has to be\\x20\n                        passed as an array of arrays e.q. [['A1', { label: 'A2', colspan: 2 }]]`);\n    }\n\n    this.addHook('init', () => this.#onInit());\n    this.addHook('afterLoadData', (...args) => this.#onAfterLoadData(...args));\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('afterOnCellMouseDown', (...args) => this.#onAfterOnCellMouseDown(...args));\n    this.addHook('beforeOnCellMouseOver', (...args) => this.#onBeforeOnCellMouseOver(...args));\n    this.addHook('beforeOnCellMouseUp', (...args) => this.#onBeforeOnCellMouseUp(...args));\n    this.addHook('beforeSelectionHighlightSet', (...args) => this.#onBeforeSelectionHighlightSet(...args));\n    this.addHook('modifyTransformStart', (...args) => this.#onModifyTransformStart(...args));\n    this.addHook('afterSelection', () => this.#updateFocusHighlightPosition());\n    this.addHook('afterSelectionFocusSet', () => this.#updateFocusHighlightPosition());\n    this.addHook('beforeViewportScrollHorizontally', (...args) => this.#onBeforeViewportScrollHorizontally(...args));\n    this.addHook('afterGetColumnHeaderRenderers', array => this.#onAfterGetColumnHeaderRenderers(array));\n    this.addHook('modifyColWidth', (...args) => this.#onModifyColWidth(...args));\n    this.addHook('modifyColumnHeaderValue', (...args) => this.#onModifyColumnHeaderValue(...args));\n    this.addHook('beforeHighlightingColumnHeader', (...args) => this.#onBeforeHighlightingColumnHeader(...args));\n    this.addHook('beforeCopy', (...args) => this.#onBeforeCopy(...args));\n    this.addHook('beforeSelectColumns', (...args) => this.#onBeforeSelectColumns(...args));\n    this.addHook(\n      'afterViewportColumnCalculatorOverride',\n      (...args) => this.#onAfterViewportColumnCalculatorOverride(...args)\n    );\n    this.addHook('modifyFocusedElement', (...args) => this.#onModifyFocusedElement(...args));\n    this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.#updateFocusHighlightPosition());\n    this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.#updateFocusHighlightPosition());\n\n    super.enablePlugin();\n    this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`nestedHeaders`](@/api/options.md#nestedheaders)\n   */\n  updatePlugin() {\n    if (!this.hot.view) { // @TODO: Workaround for broken plugin initialization abstraction.\n      return;\n    }\n\n    const { nestedHeaders } = this.hot.getSettings();\n\n    this.#stateManager.setColumnsLimit(this.hot.countCols());\n\n    if (Array.isArray(nestedHeaders)) {\n      this.detectedOverlappedHeaders = this.#stateManager.setState(nestedHeaders);\n    }\n\n    if (this.detectedOverlappedHeaders) {\n      warn(toSingleLine`Your Nested Headers plugin setup contains overlapping headers. This kind of configuration\\x20\n                        is currently not supported.`);\n    }\n\n    if (this.enabled) {\n      // This line covers the case when a developer uses the external hiding maps to manipulate\n      // the columns' visibility. The tree state built from the settings - which is always built\n      // as if all the columns are visible, needs to be modified to be in sync with a dataset.\n      this.hot.columnIndexMapper\n        .hidingMapsCollection\n        .getMergedValues()\n        .forEach((isColumnHidden, physicalColumnIndex) => {\n          const actionName = isColumnHidden === true ? 'hide-column' : 'show-column';\n\n          this.#stateManager.triggerColumnModification(actionName, physicalColumnIndex);\n        });\n    }\n\n    if (!this.#hidingIndexMapObserver && this.enabled) {\n      this.#hidingIndexMapObserver = this.hot.columnIndexMapper\n        .createChangesObserver('hiding')\n        .subscribe((changes) => {\n          changes.forEach(({ op, index: columnIndex, newValue }) => {\n            if (op === 'replace') {\n              const actionName = newValue === true ? 'hide-column' : 'show-column';\n\n              this.#stateManager.triggerColumnModification(actionName, columnIndex);\n            }\n          });\n\n          this.ghostTable.buildWidthsMap();\n        });\n    }\n\n    this.ghostTable\n      .setLayersCount(this.getLayersCount())\n      .buildWidthsMap();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.clearColspans();\n    this.#stateManager.clear();\n    this.#hidingIndexMapObserver.unsubscribe();\n    this.#hidingIndexMapObserver = null;\n    this.ghostTable.clear();\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Returns an instance of the internal state manager of the plugin.\n   *\n   * @private\n   * @returns {StateManager}\n   */\n  getStateManager() {\n    return this.#stateManager;\n  }\n\n  /**\n   * Gets a total number of headers levels.\n   *\n   * @private\n   * @returns {number}\n   */\n  getLayersCount() {\n    return this.#stateManager.getLayersCount();\n  }\n\n  /**\n   * Gets column settings for a specified header. The returned object contains\n   * information about the header label, its colspan length, or if it is hidden\n   * in the header renderers.\n   *\n   * @private\n   * @param {number} headerLevel Header level (0 = most distant to the table).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object}\n   */\n  getHeaderSettings(headerLevel, columnIndex) {\n    return this.#stateManager.getHeaderSettings(headerLevel, columnIndex);\n  }\n\n  /**\n   * Clear the colspans remaining after plugin usage.\n   *\n   * @private\n   */\n  clearColspans() {\n    if (!this.hot.view) {\n      return;\n    }\n\n    const { _wt: wt } = this.hot.view;\n    const headerLevels = wt.getSetting('columnHeaders').length;\n    const mainHeaders = wt.wtTable.THEAD;\n    const topHeaders = wt.wtOverlays.topOverlay.clone.wtTable.THEAD;\n    const topLeftCornerHeaders = wt.wtOverlays.topInlineStartCornerOverlay ?\n      wt.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.THEAD : null;\n\n    for (let i = 0; i < headerLevels; i++) {\n      const masterLevel = mainHeaders.childNodes[i];\n\n      if (!masterLevel) {\n        break;\n      }\n\n      const topLevel = topHeaders.childNodes[i];\n      const topLeftCornerLevel = topLeftCornerHeaders ? topLeftCornerHeaders.childNodes[i] : null;\n\n      for (let j = 0, masterNodes = masterLevel.childNodes.length; j < masterNodes; j++) {\n        masterLevel.childNodes[j].removeAttribute('colspan');\n        removeClass(masterLevel.childNodes[j], 'hiddenHeader');\n\n        if (topLevel && topLevel.childNodes[j]) {\n          topLevel.childNodes[j].removeAttribute('colspan');\n          removeClass(topLevel.childNodes[j], 'hiddenHeader');\n        }\n\n        if (topLeftCornerHeaders && topLeftCornerLevel && topLeftCornerLevel.childNodes[j]) {\n          topLeftCornerLevel.childNodes[j].removeAttribute('colspan');\n          removeClass(topLeftCornerLevel.childNodes[j], 'hiddenHeader');\n        }\n      }\n    }\n  }\n\n  /**\n   * Generates the appropriate header renderer for a header row.\n   *\n   * @private\n   * @param {number} headerLevel The index of header level counting from the top (positive\n   *                             values counting from 0 to N).\n   * @returns {Function}\n   * @fires Hooks#afterGetColHeader\n   */\n  headerRendererFactory(headerLevel) {\n    const fixedColumnsStart = this.hot.view._wt.getSetting('fixedColumnsStart');\n\n    return (renderedColumnIndex, TH) => {\n      const { columnIndexMapper, view } = this.hot;\n\n      let visualColumnIndex = columnIndexMapper.getVisualFromRenderableIndex(renderedColumnIndex);\n\n      if (visualColumnIndex === null) {\n        visualColumnIndex = renderedColumnIndex;\n      }\n\n      TH.removeAttribute('colspan');\n      removeClass(TH, 'hiddenHeader');\n\n      const {\n        colspan,\n        isHidden,\n        isPlaceholder,\n        headerClassNames,\n      } = this.#stateManager.getHeaderSettings(headerLevel, visualColumnIndex) ?? { label: '' };\n\n      if (isPlaceholder || isHidden) {\n        addClass(TH, 'hiddenHeader');\n\n      } else if (colspan > 1) {\n        const { wtOverlays } = view._wt;\n        const isTopInlineStartOverlay = wtOverlays.topInlineStartCornerOverlay?.clone.wtTable.THEAD.contains(TH);\n        const isInlineStartOverlay = wtOverlays.inlineStartOverlay?.clone.wtTable.THEAD.contains(TH);\n\n        // Check if there is a fixed column enabled, if so then reduce colspan to fixed column width.\n        const correctedColspan = isTopInlineStartOverlay || isInlineStartOverlay ?\n          Math.min(colspan, fixedColumnsStart - renderedColumnIndex) : colspan;\n\n        if (correctedColspan > 1) {\n          TH.setAttribute('colspan', correctedColspan);\n        }\n      }\n\n      this.hot.view.appendColHeader(\n        visualColumnIndex,\n        TH,\n        (...args) => this.getColumnHeaderValue(...args),\n        headerLevel,\n      );\n\n      // Replace the higher-order `headerClassName`s with the one provided in the plugin config, if it was provided.\n      if (!isPlaceholder && !isHidden) {\n        const innerHeaderDiv = TH.querySelector('div.relative');\n\n        if (innerHeaderDiv && headerClassNames && headerClassNames.length > 0) {\n          removeClass(innerHeaderDiv, this.hot.getColumnMeta(visualColumnIndex).headerClassName);\n          addClass(innerHeaderDiv, headerClassNames);\n        }\n      }\n    };\n  }\n\n  /**\n   * Returns the column header value for specified column and header level index.\n   *\n   * @private\n   * @param {number} visualColumnIndex Visual column index.\n   * @param {number} headerLevel The index of header level. The header level accepts positive (0 to N)\n   *                             and negative (-1 to -N) values. For positive values, 0 points to the\n   *                             top most header, and for negative direction, -1 points to the most bottom\n   *                             header (the header closest to the cells).\n   * @returns {string} Returns the column header value to update.\n   */\n  getColumnHeaderValue(visualColumnIndex, headerLevel) {\n    const {\n      isHidden,\n      isPlaceholder,\n    } = this.#stateManager.getHeaderSettings(headerLevel, visualColumnIndex) ?? {};\n\n    if (isPlaceholder || isHidden) {\n      return '';\n    }\n\n    return this.hot.getColHeader(visualColumnIndex, headerLevel);\n  }\n\n  /**\n   * Updates the selection focus highlight position to point to the nested header root element (TH)\n   * even when the logical coordinates point in-between the header.\n   */\n  #updateFocusHighlightPosition() {\n    const selection = this.hot?.getSelectedRangeLast();\n\n    if (!selection) {\n      return;\n    }\n\n    const { highlight } = selection;\n    const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;\n\n    if (isNestedHeadersRange) {\n      const columnIndex = this.#stateManager.findLeftMostColumnIndex(highlight.row, highlight.col);\n      const focusHighlight = this.hot.selection.highlight.getFocus();\n\n      // Correct the highlight/focus selection to highlight the correct TH element\n      focusHighlight.visualCellRange.highlight.col = columnIndex;\n      focusHighlight.visualCellRange.from.col = columnIndex;\n      focusHighlight.visualCellRange.to.col = columnIndex;\n      focusHighlight.commit();\n    }\n  }\n\n  /**\n   * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport\n   * is scrolled to the correct column for the nested header the most left and the most right visual column\n   * indexes are used.\n   *\n   * @param {number} visualColumn A visual column index to which the viewport will be scrolled.\n   * @returns {number}\n   */\n  #onBeforeViewportScrollHorizontally(visualColumn) {\n    const selection = this.hot.getSelectedRangeLast();\n\n    if (!selection) {\n      return visualColumn;\n    }\n\n    const { highlight } = selection;\n    const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;\n\n    if (!isNestedHeadersRange) {\n      return visualColumn;\n    }\n\n    const firstColumn = this.hot.view.getFirstFullyVisibleColumn();\n    const lastColumn = this.hot.view.getLastFullyVisibleColumn();\n    const mostLeftColumnIndex = this.#stateManager.findLeftMostColumnIndex(highlight.row, highlight.col);\n    const mostRightColumnIndex = this.#stateManager.findRightMostColumnIndex(highlight.row, highlight.col);\n\n    // do not scroll the viewport when the header is wider than the viewport\n    if (mostLeftColumnIndex < firstColumn && mostRightColumnIndex > lastColumn) {\n      return visualColumn;\n    }\n\n    return mostLeftColumnIndex < firstColumn ? mostLeftColumnIndex : mostRightColumnIndex;\n  }\n\n  /**\n   * Allows to control which header DOM element will be used to highlight.\n   *\n   * @param {number} visualColumn A visual column index of the highlighted row header.\n   * @param {number} headerLevel A row header level that is currently highlighted.\n   * @param {object} highlightMeta An object with meta data that describes the highlight state.\n   * @returns {number}\n   */\n  #onBeforeHighlightingColumnHeader(visualColumn, headerLevel, highlightMeta) {\n    const headerNodeData = this.#stateManager.getHeaderTreeNodeData(headerLevel, visualColumn);\n\n    if (!headerNodeData) {\n      return visualColumn;\n    }\n\n    const {\n      columnCursor,\n      selectionType,\n      selectionWidth,\n    } = highlightMeta;\n    const {\n      isRoot,\n      colspan,\n    } = this.#stateManager.getHeaderSettings(headerLevel, visualColumn);\n\n    if (selectionType === HEADER_TYPE) {\n      if (!isRoot) {\n        return headerNodeData.columnIndex;\n      }\n\n    } else if (selectionType === ACTIVE_HEADER_TYPE) {\n      if (colspan > selectionWidth - columnCursor || !isRoot) {\n        // Prevents adding any CSS class names to the TH element\n        return null;\n      }\n    }\n\n    return visualColumn;\n  }\n\n  /**\n   * Listens the `beforeCopy` hook that allows processing the copied column headers so that the\n   * merged column headers do not propagate the value for each column but only once at the beginning\n   * of the column.\n   *\n   * @private\n   * @param {Array[]} data An array of arrays which contains data to copied.\n   * @param {object[]} copyableRanges An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n   *                                  which will copied.\n   * @param {{ columnHeadersCount: number }} copiedHeadersCount An object with keys that holds information with\n   *                                                            the number of copied headers.\n   */\n  #onBeforeCopy(data, copyableRanges, { columnHeadersCount }) {\n    if (columnHeadersCount === 0) {\n      return;\n    }\n\n    for (let rangeIndex = 0; rangeIndex < copyableRanges.length; rangeIndex++) {\n      const { startRow, startCol, endRow, endCol } = copyableRanges[rangeIndex];\n      const rowsCount = endRow - startRow + 1;\n      const columnsCount = startCol - endCol + 1;\n\n      // do not process dataset ranges and column headers where only one column is copied\n      if (startRow >= 0 || columnsCount === 1) {\n        break;\n      }\n\n      for (let column = startCol; column <= endCol; column++) {\n        for (let row = startRow; row <= endRow; row++) {\n          const zeroBasedColumnHeaderLevel = rowsCount + row;\n          const zeroBasedColumnIndex = column - startCol;\n\n          if (zeroBasedColumnIndex === 0) {\n            continue; // eslint-disable-line no-continue\n          }\n\n          const isRoot = this.#stateManager.getHeaderTreeNodeData(row, column)?.isRoot;\n\n          if (isRoot === false) {\n            data[zeroBasedColumnHeaderLevel][zeroBasedColumnIndex] = '';\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Allows blocking the column selection that is controlled by the core Selection module.\n   *\n   * @param {MouseEvent} event Mouse event.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {CellCoords} TD The table cell or header element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD, controller) {\n    const headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n    if (headerNodeData) {\n      // Block the Selection module in controlling how the columns are selected. Pass the\n      // responsibility of the column selection to this plugin (see \"onAfterOnCellMouseDown\" hook).\n      controller.column = true;\n    }\n  }\n\n  /**\n   * Allows to control how the column selection based on the coordinates and the nested headers is made.\n   *\n   * @param {MouseEvent} event Mouse event.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   */\n  #onAfterOnCellMouseDown(event, coords) {\n    const headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n    if (!headerNodeData) {\n      return;\n    }\n\n    this.#focusInitialCoords = coords.clone();\n    this.#isColumnsSelectionInProgress = true;\n\n    const { selection } = this.hot;\n    const currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n    const columnsToSelect = [];\n    const {\n      columnIndex,\n      origColspan,\n    } = headerNodeData;\n\n    // The Selection module doesn't allow it to extend its behavior easily. That's why here we need\n    // to re-implement the \"click\" and \"shift\" behavior. As a workaround, the logic for the nested\n    // headers must implement a similar logic as in the original Selection handler\n    // (see src/selection/mouseEventHandler.js).\n    const allowRightClickSelection = !selection.inInSelection(coords);\n\n    if (event.shiftKey && currentSelection) {\n      if (coords.col < currentSelection.from.col) {\n        columnsToSelect.push(currentSelection.getTopEndCorner().col, columnIndex, coords.row);\n\n      } else if (coords.col > currentSelection.from.col) {\n        columnsToSelect.push(currentSelection.getTopStartCorner().col, columnIndex + origColspan - 1, coords.row);\n\n      } else {\n        columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);\n      }\n\n    } else if (isLeftClick(event) || (isRightClick(event) && allowRightClickSelection) || isTouchEvent(event)) {\n      columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);\n    }\n\n    // The plugin takes control of how the columns are selected.\n    selection.selectColumns(...columnsToSelect);\n  }\n\n  /**\n   * Makes the header-selection properly select the nested headers.\n   *\n   * @param {MouseEvent} event Mouse event.\n   * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n   * @param {HTMLElement} TD The cell element.\n   * @param {object} controller An object with properties `row`, `column` and `cell`. Each property contains\n   *                            a boolean value that allows or disallows changing the selection for that particular area.\n   */\n  #onBeforeOnCellMouseOver(event, coords, TD, controller) {\n    if (!this.hot.view.isMouseDown()) {\n      return;\n    }\n\n    const headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);\n\n    if (!headerNodeData) {\n      return;\n    }\n\n    const {\n      columnIndex,\n      origColspan,\n    } = headerNodeData;\n\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const topStartCoords = selectedRange.getTopStartCorner();\n    const bottomEndCoords = selectedRange.getBottomEndCorner();\n    const { from } = selectedRange;\n\n    // Block the Selection module in controlling how the columns and cells are selected.\n    // From now on, the plugin is responsible for the selection.\n    controller.column = true;\n    controller.cell = true;\n\n    const columnsToSelect = [];\n    const headerLevel = clamp(coords.row, -Infinity, -1);\n\n    if (coords.col < from.col) {\n      columnsToSelect.push(bottomEndCoords.col, columnIndex, headerLevel);\n\n    } else if (coords.col > from.col) {\n      columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, headerLevel);\n\n    } else {\n      columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, headerLevel);\n    }\n\n    this.hot.selection.selectColumns(...columnsToSelect);\n  }\n\n  /**\n   * Switches internal flag about selection progress to `false`.\n   */\n  #onBeforeOnCellMouseUp() {\n    this.#isColumnsSelectionInProgress = false;\n  }\n\n  /**\n   * The hook checks and ensures that the focus position that depends on the selected columns\n   * range is always positioned within the range.\n   */\n  #onBeforeSelectionHighlightSet() {\n    const { navigableHeaders } = this.hot.getSettings();\n\n    if (!this.hot.view.isMouseDown() || !this.#isColumnsSelectionInProgress || !navigableHeaders) {\n      return;\n    }\n\n    const selectedRange = this.hot.getSelectedRangeLast();\n    const columnStart = selectedRange.getTopStartCorner().col;\n    const columnEnd = selectedRange.getBottomEndCorner().col;\n    const {\n      columnIndex,\n      origColspan,\n    } = this.#stateManager.getHeaderTreeNodeData(this.#focusInitialCoords.row, this.#focusInitialCoords.col);\n\n    selectedRange.setHighlight(this.#focusInitialCoords);\n\n    if (origColspan > selectedRange.getWidth() ||\n        columnIndex < columnStart ||\n        columnIndex + origColspan - 1 > columnEnd) {\n\n      const headerLevel = this.#stateManager\n        .findTopMostEntireHeaderLevel(\n          clamp(columnStart, columnIndex, columnIndex + origColspan - 1),\n          clamp(columnEnd, columnIndex, columnIndex + origColspan - 1),\n        );\n\n      selectedRange.highlight.row = headerLevel;\n      selectedRange.highlight.col = selectedRange.from.col;\n    }\n  }\n\n  /**\n   * `modifyTransformStart` hook is called every time the keyboard navigation is used.\n   *\n   * @param {object} delta The transformation delta.\n   */\n  #onModifyTransformStart(delta) {\n    const { highlight } = this.hot.getSelectedRangeLast();\n    const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);\n    const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;\n\n    if (!isNestedHeadersRange) {\n      return;\n    }\n\n    const visualColumnIndexStart = this.#stateManager.findLeftMostColumnIndex(nextCoords.row, nextCoords.col);\n    const visualColumnIndexEnd = this.#stateManager.findRightMostColumnIndex(nextCoords.row, nextCoords.col);\n\n    if (delta.col < 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexStart - 1 : visualColumnIndexEnd;\n      const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).\n        delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);\n      } else {\n        delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);\n      }\n\n    } else if (delta.col > 0) {\n      const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ?\n        visualColumnIndexEnd + 1 : visualColumnIndexStart;\n      const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);\n\n      if (notHiddenColumnIndex === null) {\n        // There are no visible columns anymore, so move the selection out of the table edge. This will\n        // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).\n        delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());\n      } else {\n        delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);\n      }\n    }\n  }\n\n  /**\n   * The hook observes the column selection from the Selection API and modifies the column range to\n   * ensure that the whole nested column will be covered.\n   *\n   * @param {CellCoords} from The coords object where the selection starts.\n   * @param {CellCoords} to The coords object where the selection ends.\n   */\n  #onBeforeSelectColumns(from, to) {\n    const headerLevel = from.row;\n    const startNodeData = this._getHeaderTreeNodeDataByCoords({\n      row: headerLevel,\n      col: from.col,\n    });\n    const endNodeData = this._getHeaderTreeNodeDataByCoords({\n      row: headerLevel,\n      col: to.col,\n    });\n\n    if (to.col < from.col) { // Column selection from right to left\n      if (startNodeData) {\n        from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;\n      }\n\n      if (endNodeData) {\n        to.col = endNodeData.columnIndex;\n      }\n\n    } else if (to.col >= from.col) { // Column selection from left to right or a single column selection\n      if (startNodeData) {\n        from.col = startNodeData.columnIndex;\n      }\n\n      if (endNodeData) {\n        to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;\n      }\n    }\n  }\n\n  /**\n   * `afterGetColumnHeader` hook callback - prepares the header structure.\n   *\n   * @param {Array} renderersArray Array of renderers.\n   */\n  #onAfterGetColumnHeaderRenderers(renderersArray) {\n    renderersArray.length = 0;\n\n    for (let headerLayer = 0; headerLayer < this.#stateManager.getLayersCount(); headerLayer++) {\n      renderersArray.push(this.headerRendererFactory(headerLayer));\n    }\n  }\n\n  /**\n   * Make the renderer render the first nested column in its entirety.\n   *\n   * @param {object} calc Viewport column calculator.\n   */\n  #onAfterViewportColumnCalculatorOverride(calc) {\n    const headerLayersCount = this.#stateManager.getLayersCount();\n    let newStartColumn = calc.startColumn;\n    let nonRenderable = !!headerLayersCount;\n\n    for (let headerLayer = 0; headerLayer < headerLayersCount; headerLayer++) {\n      const startColumn = this.#stateManager.findLeftMostColumnIndex(headerLayer, calc.startColumn);\n      const renderedStartColumn = this.hot.columnIndexMapper.getRenderableFromVisualIndex(startColumn);\n\n      // If any of the headers for that column index is rendered, all of them should be rendered properly, see\n      // comment below.\n      if (startColumn >= 0) {\n        nonRenderable = false;\n      }\n\n      // `renderedStartColumn` can be `null` if the leftmost columns are hidden. In that case -> ignore that header\n      // level, as it should be handled by the \"parent\" header\n      if (isNumeric(renderedStartColumn) && renderedStartColumn < calc.startColumn) {\n        newStartColumn = renderedStartColumn;\n        break;\n      }\n    }\n\n    // If no headers for the provided column index are renderable, start rendering from the beginning of the upmost\n    // header for that position.\n    calc.startColumn =\n      nonRenderable ?\n        this.#stateManager.getHeaderTreeNodeData(0, newStartColumn).columnIndex :\n        newStartColumn;\n  }\n\n  /**\n   * `modifyColWidth` hook callback - returns width from cache, when is greater than incoming from hook.\n   *\n   * @param {number} width Width from hook.\n   * @param {number} column Visual index of an column.\n   * @returns {number}\n   */\n  #onModifyColWidth(width, column) {\n    const cachedWidth = this.ghostTable.getWidth(column);\n\n    return width > cachedWidth ? width : cachedWidth;\n  }\n\n  /**\n   * Listens the `modifyColumnHeaderValue` hook that overwrites the column headers values based on\n   * the internal state and settings of the plugin.\n   *\n   * @param {string} value The column header value.\n   * @param {number} visualColumnIndex The visual column index.\n   * @param {number} headerLevel The index of header level. The header level accepts positive (0 to N)\n   *                             and negative (-1 to -N) values. For positive values, 0 points to the\n   *                             top most header, and for negative direction, -1 points to the most bottom\n   *                             header (the header closest to the cells).\n   * @returns {string} Returns the column header value to update.\n   */\n  #onModifyColumnHeaderValue(value, visualColumnIndex, headerLevel) {\n    const {\n      label,\n    } = this.#stateManager.getHeaderTreeNodeData(headerLevel, visualColumnIndex) ?? { label: '' };\n\n    return label;\n  }\n\n  /**\n   * `modifyFocusedElement` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {number} column Column index.\n   * @returns {HTMLTableCellElement} The `TH` element to be focused.\n   */\n  #onModifyFocusedElement(row, column) {\n    if (row < 0) {\n      return this.hot.getCell(row, this.#stateManager.findLeftMostColumnIndex(row, column), true);\n    }\n  }\n\n  /**\n   * Updates the plugin state after HoT initialization.\n   */\n  #onInit() {\n    // @TODO: Workaround for broken plugin initialization abstraction.\n    this.updatePlugin();\n  }\n\n  /**\n   * Updates the plugin state after new dataset load.\n   *\n   * @param {Array[]} sourceData Array of arrays or array of objects containing data.\n   * @param {boolean} initialLoad Flag that determines whether the data has been loaded\n   *                              during the initialization.\n   */\n  #onAfterLoadData(sourceData, initialLoad) {\n    if (!initialLoad) {\n      this.updatePlugin();\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    this.#stateManager = null;\n\n    if (this.#hidingIndexMapObserver !== null) {\n      this.#hidingIndexMapObserver.unsubscribe();\n      this.#hidingIndexMapObserver = null;\n    }\n\n    super.destroy();\n  }\n\n  /**\n   * Gets the tree data that belongs to the column headers pointed by the passed coordinates.\n   *\n   * @private\n   * @param {CellCoords} coords The CellCoords instance.\n   * @returns {object|undefined}\n   */\n  _getHeaderTreeNodeDataByCoords(coords) {\n    if (coords.row >= 0 || coords.col < 0) {\n      return;\n    }\n\n    return this.#stateManager.getHeaderTreeNodeData(coords.row, coords.col);\n  }\n}\n","import { arrayMap, arrayReduce } from '../../../helpers/array';\nimport SourceSettings from './sourceSettings';\nimport HeadersTree from './headersTree';\nimport { triggerNodeModification } from './nodeModifiers';\nimport { generateMatrix } from './matrixGenerator';\nimport { TRAVERSAL_DF_PRE } from '../../../utils/dataStructures/tree';\n\n/**\n * The state manager is a source of truth for nested headers configuration.\n * The state generation process is divided into three stages.\n *\n *   +---------------------+  1. User-defined configuration normalization;\n *   │                     │  The source settings class normalizes and shares API for\n *   │   SourceSettings    │  raw settings passed by the developer. It is only consumed by\n *   │                     │  the header tree module.\n *   +---------------------+\n *             │\n *            \\│/\n *   +---------------------+  2. Building a tree structure for validation and easier node manipulation;\n *   │                     │  The header tree generates a tree based on source settings for future\n *   │     HeadersTree     │  node manipulation (such as collapsible columns feature). While generating a tree\n *   │                     │  the source settings is checked to see if the configuration has overlapping headers.\n *   +---------------------+  If `true` the colspan matrix generation is skipped, overlapped headers are not supported.\n *             │\n *            \\│/\n *   +---------------------+  3. Matrix generation;\n *   │                     │  Based on built trees the matrix generation is performed. That part of code\n *   │  matrix generation  │  generates an array structure similar to normalized data from the SourceSettings\n *   │                     │  but with the difference that this structure contains column settings which changed\n *   +---------------------+  during runtime (after the tree manipulation) e.q after collapse or expand column.\n *                            That settings describes how the TH element should be modified (colspan attribute,\n *                            CSS classes, etc) for a specific column and layer level.\n *\n * @class StateManager\n */\nexport default class StateManager {\n  /**\n   * The instance of the source settings class.\n   *\n   * @private\n   * @type {SourceSettings}\n   */\n  #sourceSettings = new SourceSettings();\n  /**\n   * The instance of the headers tree. The tree is generated after setting new configuration data.\n   *\n   * @private\n   * @type {HeadersTree}\n   */\n  #headersTree = new HeadersTree(this.#sourceSettings);\n  /**\n   * Cached matrix which is generated from the tree structure.\n   *\n   * @private\n   * @type {Array[]}\n   */\n  #stateMatrix = [[]];\n\n  /**\n   * Sets a new state for the nested headers plugin based on settings passed\n   * directly to the plugin.\n   *\n   * @param {Array[]} nestedHeadersSettings The user-defined settings.\n   * @returns {boolean} Returns `true` if the settings are processed correctly, `false` otherwise.\n   */\n  setState(nestedHeadersSettings) {\n    this.#sourceSettings.setData(nestedHeadersSettings);\n    let hasError = false;\n\n    try {\n      this.#headersTree.buildTree();\n    } catch (ex) {\n      this.#headersTree.clear();\n      this.#sourceSettings.clear();\n      hasError = true;\n    }\n\n    this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n\n    return hasError;\n  }\n\n  /**\n   * Sets columns limit to the state will be trimmed. All headers (colspans) which\n   * overlap the column limit will be reduced to keep the structure solid.\n   *\n   * @param {number} columnsCount The number of columns to limit to.\n   */\n  setColumnsLimit(columnsCount) {\n    this.#sourceSettings.setColumnsLimit(columnsCount);\n  }\n\n  /**\n   * Merges settings with current plugin state.\n   *\n   * By default only foreign keys are merged with source state and passed to the tree. But only\n   * known keys are exported to matrix.\n   *\n   * @param {object[]} settings An array of objects to merge with the current source settings.\n   *                            It is a requirement that every object has `row` and `col` properties\n   *                            which points to the specific header settings object.\n   */\n  mergeStateWith(settings) {\n    const transformedSettings = arrayMap(settings, ({ row, ...rest }) => {\n      return {\n        row: row < 0 ? this.rowCoordsToLevel(row) : row,\n        ...rest,\n      };\n    });\n\n    this.#sourceSettings.mergeWith(transformedSettings);\n    this.#headersTree.buildTree();\n    this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n  }\n\n  /**\n   * Maps the current state with a callback. For each header settings the callback function\n   * is called. If the function returns value that value is merged with the state.\n   *\n   * By default only foreign keys are merged with source state and passed to the tree. But only\n   * known keys are exported to matrix.\n   *\n   * @param {Function} callback A function that is called for every header source settings.\n   *                            Each time the callback is called, the returned value extends\n   *                            header settings.\n   */\n  mapState(callback) {\n    this.#sourceSettings.map(callback);\n    this.#headersTree.buildTree();\n    this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n  }\n\n  /**\n   * Maps the current tree nodes with a callback. For each node the callback function\n   * is called. If the function returns value that value is added to returned array.\n   *\n   * @param {Function} callback A function that is called for every tree node.\n   *                            Each time the callback is called, the returned value is\n   *                            added to returned array.\n   * @returns {Array}\n   */\n  mapNodes(callback) {\n    return arrayReduce(this.#headersTree.getRoots(), (acc, rootNode) => {\n      rootNode.walkDown((node) => {\n        const result = callback(node.data);\n\n        if (result !== undefined) {\n          acc.push(result);\n        }\n      });\n\n      return acc;\n    }, []);\n  }\n\n  /**\n   * Triggers an action (e.g. \"collapse\") from the NodeModifiers module. The module\n   * modifies a tree structure in such a way as to obtain the correct structure consistent with the\n   * called action.\n   *\n   * @param {string} action An action name to trigger.\n   * @param {number} headerLevel Header level index (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|undefined}\n   */\n  triggerNodeModification(action, headerLevel, columnIndex) {\n    if (headerLevel < 0) {\n      headerLevel = this.rowCoordsToLevel(headerLevel);\n    }\n\n    const nodeToProcess = this.#headersTree.getNode(headerLevel, columnIndex);\n    let actionResult;\n\n    if (nodeToProcess) {\n      actionResult = triggerNodeModification(action, nodeToProcess, columnIndex);\n\n      // TODO (perf-tip): Trigger matrix generation once after multiple node modifications.\n      this.#stateMatrix = generateMatrix(this.#headersTree.getRoots());\n    }\n\n    return actionResult;\n  }\n\n  /**\n   * Triggers an action (e.g. \"hide-column\") from the NodeModifiers module. The action is\n   * triggered starting from the lowest header. The module modifies a tree structure in\n   * such a way as to obtain the correct structure consistent with the called action.\n   *\n   * @param {string} action An action name to trigger.\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|undefined}\n   */\n  triggerColumnModification(action, columnIndex) {\n    return this.triggerNodeModification(action, -1, columnIndex);\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof StateManager#\n   * @function rowCoordsToLevel\n   *\n   * Translates row coordinates into header level. The row coordinates counts from -1 to -N\n   * and describes headers counting from most closest to most distant from the table.\n   * The header levels are counted from 0 to N where 0 describes most distant header\n   * from the table.\n   *\n   *  Row coords             Header level\n   *           +--------------+\n   *       -3  │ A1 │ A1      │  0\n   *           +--------------+\n   *       -2  │ B1 │ B2 │ B3 │  1\n   *           +--------------+\n   *       -1  │ C1 │ C2 │ C3 │  2\n   *           +==============+\n   *           │    │    │    │\n   *           +--------------+\n   *           │    │    │    │\n   *\n   * @param {number} rowIndex A visual row index.\n   * @returns {number|null} Returns unsigned number.\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  rowCoordsToLevel(rowIndex) {\n    if (rowIndex >= 0) {\n      return null;\n    }\n\n    const headerLevel = rowIndex + Math.max(this.getLayersCount(), 1);\n\n    if (headerLevel < 0) {\n      return null;\n    }\n\n    return headerLevel;\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof StateManager#\n   * @function levelToRowCoords\n   *\n   * Translates header level into row coordinates. The row coordinates counts from -1 to -N\n   * and describes headers counting from most closest to most distant from the table.\n   * The header levels are counted from 0 to N where 0 describes most distant header\n   * from the table.\n   *\n   *  Header level            Row coords\n   *           +--------------+\n   *        0  │ A1 │ A1      │  -3\n   *           +--------------+\n   *        1  │ B1 │ B2 │ B3 │  -2\n   *           +--------------+\n   *        2  │ C1 │ C2 │ C3 │  -1\n   *           +==============+\n   *           │    │    │    │\n   *           +--------------+\n   *           │    │    │    │\n   *\n   * @param {number} headerLevel Header level index.\n   * @returns {number} Returns negative number.\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  levelToRowCoords(headerLevel) {\n    if (headerLevel < 0) {\n      return null;\n    }\n\n    const rowIndex = headerLevel - Math.max(this.getLayersCount(), 1);\n\n    if (rowIndex >= 0) {\n      return null;\n    }\n\n    return rowIndex;\n  }\n\n  /**\n   * Gets column header settings for a specified column and header index. The returned object contains\n   * all information necessary for header renderers. It contains header label, colspan length, or hidden\n   * flag.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|null}\n   */\n  getHeaderSettings(headerLevel, columnIndex) {\n    if (headerLevel < 0) {\n      headerLevel = this.rowCoordsToLevel(headerLevel);\n    }\n\n    if (headerLevel === null || headerLevel >= this.getLayersCount()) {\n      return null;\n    }\n\n    return this.#stateMatrix[headerLevel]?.[columnIndex] ?? null;\n  }\n\n  /**\n   * Gets tree data that is connected to the column header. The returned object contains all information\n   * necessary for modifying tree structure (column collapsing, hiding, etc.). It contains a header\n   * label, colspan length, or visual column index that indicates which column index the node is rendered from.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|null}\n   */\n  getHeaderTreeNodeData(headerLevel, columnIndex) {\n    const node = this.getHeaderTreeNode(headerLevel, columnIndex);\n\n    if (!node) {\n      return null;\n    }\n\n    return {\n      ...node.data,\n    };\n  }\n\n  /**\n   * Gets tree node that is connected to the column header.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {TreeNode|null}\n   */\n  getHeaderTreeNode(headerLevel, columnIndex) {\n    if (headerLevel < 0) {\n      headerLevel = this.rowCoordsToLevel(headerLevel);\n    }\n\n    if (headerLevel === null || headerLevel >= this.getLayersCount()) {\n      return null;\n    }\n\n    const node = this.#headersTree.getNode(headerLevel, columnIndex);\n\n    if (!node) {\n      return null;\n    }\n\n    return node;\n  }\n\n  /**\n   * Finds the most top header level of the column header that is rendered entirely within\n   * the passed visual columns range. If multiple columns headers are found within the range the\n   * most top header level value will be returned.\n   *\n   * @param {number} columnIndexFrom A visual column index.\n   * @param {number} [columnIndexTo] A visual column index.\n   * @returns {number} Returns a header level in format -1 to -N.\n   */\n  findTopMostEntireHeaderLevel(columnIndexFrom, columnIndexTo = columnIndexFrom) {\n    const columnsWidth = (columnIndexTo - columnIndexFrom) + 1;\n    let atLeastOneRootFound = false;\n    let headerLevel = null;\n\n    for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {\n      const rootNode = this.#headersTree.getRootByColumn(columnIndex);\n\n      if (!rootNode) {\n        break;\n      }\n\n      atLeastOneRootFound = true;\n\n      // eslint-disable-next-line\n      rootNode.walkDown((node) => {\n        const {\n          columnIndex: nodeColumnIndex,\n          headerLevel: nodeHeaderLevel,\n          origColspan,\n          isHidden,\n        } = node.data;\n\n        if (isHidden) {\n          return;\n        }\n\n        // if the header fits entirely within the columns range get and save the node header level\n        if (origColspan <= columnsWidth &&\n            nodeColumnIndex >= columnIndexFrom &&\n            nodeColumnIndex + origColspan - 1 <= columnIndexTo &&\n            (headerLevel === null || nodeHeaderLevel < headerLevel)) {\n\n          headerLevel = nodeHeaderLevel;\n        }\n      }, TRAVERSAL_DF_PRE);\n    }\n\n    if (atLeastOneRootFound && headerLevel === null) {\n      return -1;\n    }\n\n    return this.levelToRowCoords(headerLevel ?? 0);\n  }\n\n  /**\n   * The method is helpful in cases where the column index targets in-between currently\n   * collapsed column. In that case, the method returns the left-most column index\n   * where the nested header begins.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {number}\n   */\n  findLeftMostColumnIndex(headerLevel, columnIndex) {\n    const {\n      isRoot\n    } = this.getHeaderSettings(headerLevel, columnIndex) ?? { isRoot: true };\n\n    if (isRoot) {\n      return columnIndex;\n    }\n\n    let stepBackColumn = columnIndex - 1;\n\n    while (stepBackColumn >= 0) {\n      const {\n        isRoot: isRootNode\n      } = this.getHeaderSettings(headerLevel, stepBackColumn) ?? { isRoot: true };\n\n      if (isRootNode) {\n        break;\n      }\n\n      stepBackColumn -= 1;\n    }\n\n    return stepBackColumn;\n  }\n\n  /**\n   * The method is helpful in cases where the column index targets in-between currently\n   * collapsed column. In that case, the method returns the right-most column index\n   * where the nested header ends.\n   *\n   * @param {number} headerLevel Header level (there is support for negative and positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {number}\n   */\n  findRightMostColumnIndex(headerLevel, columnIndex) {\n    const {\n      isRoot,\n      origColspan,\n    } = this.getHeaderSettings(headerLevel, columnIndex) ?? { isRoot: true, origColspan: 1 };\n\n    if (isRoot) {\n      return columnIndex + origColspan - 1;\n    }\n\n    let stepForthColumn = columnIndex + 1;\n\n    while (stepForthColumn < this.getColumnsCount()) {\n      const {\n        isRoot: isRootNode,\n      } = this.getHeaderSettings(headerLevel, stepForthColumn) ?? { isRoot: true };\n\n      if (isRootNode) {\n        break;\n      }\n\n      stepForthColumn += 1;\n    }\n\n    return stepForthColumn - 1;\n  }\n\n  /**\n   * Gets a total number of headers levels.\n   *\n   * @returns {number}\n   */\n  getLayersCount() {\n    return this.#sourceSettings.getLayersCount();\n  }\n\n  /**\n   * Gets a total number of columns count.\n   *\n   * @returns {number}\n   */\n  getColumnsCount() {\n    return this.#sourceSettings.getColumnsCount();\n  }\n\n  /**\n   * Clears the column state manager to the initial state.\n   */\n  clear() {\n    this.#stateMatrix = [];\n    this.#sourceSettings.clear();\n    this.#headersTree.clear();\n  }\n}\n","import { extend, isObject } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\nimport { normalizeSettings } from './settingsNormalizer';\n\n/**\n * List of properties which are configurable. That properties can be changed using public API.\n *\n * @type {string[]}\n */\nexport const HEADER_CONFIGURABLE_PROPS = ['label', 'collapsible'];\n\n/**\n * The class manages and normalizes settings passed by the developer\n * into the nested headers plugin. The SourceSettings class is a\n * source of truth for tree builder (HeaderTree) module.\n *\n * @private\n * @class SourceSettings\n */\nexport default class SourceSettings {\n  /**\n   * The normalized source data (normalized user-defined settings for nested headers).\n   *\n   * @private\n   * @type {Array[]}\n   */\n  #data = [];\n  /**\n   * The total length of the nested header layers.\n   *\n   * @private\n   * @type {number}\n   */\n  #dataLength = 0;\n  /**\n   * Columns count limit value trims source settings to that value. If columns\n   * count limit intersects nested header, the header's colspan value is reduced\n   * to keep the whole structure stable (trimmed precisely where the limit is set).\n   *\n   * @type {number}\n   */\n  #columnsLimit = Infinity;\n\n  /**\n   * Sets columns limit to the source settings will be trimmed. All headers which\n   * overlap the column limit will be reduced to keep the structure solid.\n   *\n   * @param {number} columnsCount The number of columns to limit to.\n   */\n  setColumnsLimit(columnsCount) {\n    this.#columnsLimit = columnsCount;\n  }\n\n  /**\n   * Sets a new nested header configuration.\n   *\n   * @param {Array[]} [nestedHeadersSettings=[]] The user-defined nested headers settings.\n   */\n  setData(nestedHeadersSettings = []) {\n    this.#data = normalizeSettings(nestedHeadersSettings, this.#columnsLimit);\n    this.#dataLength = this.#data.length;\n  }\n\n  /**\n   * Gets normalized source settings.\n   *\n   * @returns {Array[]}\n   */\n  getData() {\n    return this.#data;\n  }\n\n  /**\n   * Merges settings with current source settings.\n   *\n   * @param {object[]} additionalSettings An array of objects with `row`, `col` and additional\n   *                                      properties to merge with current source settings.\n   */\n  mergeWith(additionalSettings) {\n    arrayEach(additionalSettings, ({ row, col, ...rest }) => {\n      const headerSettings = this.getHeaderSettings(row, col);\n\n      if (headerSettings !== null) {\n        extend(headerSettings, rest, HEADER_CONFIGURABLE_PROPS);\n      }\n    });\n  }\n\n  /**\n   * Maps the current state with a callback. For each source settings the callback function\n   * is called. If the function returns value that value is merged with the source settings.\n   *\n   * @param {Function} callback A function that is called for every header settings.\n   *                            Each time the callback is called, the returned value extends\n   *                            header settings.\n   */\n  map(callback) {\n    arrayEach(this.#data, (header) => {\n      arrayEach(header, (headerSettings) => {\n        const propsToExtend = callback({ ...headerSettings });\n\n        if (isObject(propsToExtend)) {\n          extend(headerSettings, propsToExtend, HEADER_CONFIGURABLE_PROPS);\n        }\n      });\n    });\n  }\n\n  /**\n   * Gets source column header settings for a specified header. The returned\n   * object contains information about the header label, its colspan length,\n   * or if it is hidden in the header renderers.\n   *\n   * @param {number} headerLevel Header level (0 = most distant to the table).\n   * @param {number} columnIndex A visual column index.\n   * @returns {object|null}\n   */\n  getHeaderSettings(headerLevel, columnIndex) {\n    if (headerLevel >= this.#dataLength || headerLevel < 0) {\n      return null;\n    }\n\n    const headersSettings = this.#data[headerLevel];\n\n    if (Array.isArray(headersSettings) === false || columnIndex >= headersSettings.length) {\n      return null;\n    }\n\n    return headersSettings[columnIndex] ?? null;\n  }\n\n  /**\n   * Gets source of column headers settings for specified headers. If the retrieved column\n   * settings overlap the range \"box\" determined by \"columnIndex\" and \"columnsLength\"\n   * the exception will be thrown.\n   *\n   * @param {number} headerLevel Header level (0 = most distant to the table).\n   * @param {number} columnIndex A visual column index from which the settings will be extracted.\n   * @param {number} [columnsLength=1] The number of columns involved in the extraction of settings.\n   * @returns {object}\n   */\n  getHeadersSettings(headerLevel, columnIndex, columnsLength = 1) {\n    const headersSettingsChunks = [];\n\n    if (headerLevel >= this.#dataLength || headerLevel < 0) {\n      return headersSettingsChunks;\n    }\n\n    const headersSettings = this.#data[headerLevel];\n    let currentLength = 0;\n\n    for (let i = columnIndex; i < headersSettings.length; i++) {\n      const headerSettings = headersSettings[i];\n\n      if (headerSettings.isPlaceholder) {\n        throw new Error('The first column settings cannot overlap the other header layers');\n      }\n\n      currentLength += headerSettings.colspan;\n      headersSettingsChunks.push(headerSettings);\n\n      if (headerSettings.colspan > 1) {\n        i += headerSettings.colspan - 1;\n      }\n\n      // We met the current sum of the child colspans\n      if (currentLength === columnsLength) {\n        break;\n      }\n      // We exceeds the current sum of the child colspans, the last columns colspan overlaps the \"columnsLength\" length.\n      if (currentLength > columnsLength) {\n        throw new Error('The last column settings cannot overlap the other header layers');\n      }\n    }\n\n    return headersSettingsChunks;\n  }\n\n  /**\n   * Gets a total number of headers levels.\n   *\n   * @returns {number}\n   */\n  getLayersCount() {\n    return this.#dataLength;\n  }\n\n  /**\n   * Gets a total number of columns count.\n   *\n   * @returns {number}\n   */\n  getColumnsCount() {\n    return this.#dataLength > 0 ? this.#data[0].length : 0;\n  }\n\n  /**\n   * Clears the data.\n   */\n  clear() {\n    this.#data = [];\n    this.#dataLength = 0;\n  }\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\nimport { arrayEach, arrayMap } from '../../../helpers/array';\nimport { isObject } from '../../../helpers/object';\nimport { stringify } from '../../../helpers/mixed';\nimport { createDefaultHeaderSettings, createPlaceholderHeaderSettings } from './utils';\n\n/**\n * A function that normalizes user-defined settings into one predictable\n * structure. Currently, the developer can declare nested headers by passing\n * the following unstructured (and sometimes uncompleted) array.\n *   [\n *     [{ label: 'A1', colspan: 2 }],\n *     [{ label: true }, 'B2', 4],\n *     [],\n *   ]\n *\n * The normalization process equalizes the length of columns to each header\n * layers to the same length and generates object settings with a common shape.\n * So the above mentioned example will be normalized into this:\n *   [\n *     [\n *       { label: 'A1', colspan: 2, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: true, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: 'true', colspan: 1, isHidden: false, ... },\n *       { label: 'B2', colspan: 1, isHidden: false, ... },\n *       { label: '4', colspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: '', colspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, isHidden: false, ... },\n *     ],\n *   ]\n *\n * @param {Array[]} sourceSettings An array with defined nested headers settings.\n * @param {number} [columnsLimit=Infinity] A number of columns to which the structure\n *                                         will be trimmed. While trimming the colspan\n *                                         values are adjusted to preserve the original\n *                                         structure.\n * @returns {Array[]}\n */\nexport function normalizeSettings(sourceSettings, columnsLimit = Infinity) {\n  const normalizedSettings = [];\n\n  if (columnsLimit === 0) {\n    return normalizedSettings;\n  }\n\n  // Normalize array items (header settings) into one shape - literal object with default props.\n  arrayEach(sourceSettings, (headersSettings) => {\n    const columns = [];\n    let columnIndex = 0;\n\n    normalizedSettings.push(columns);\n\n    arrayEach(headersSettings, (sourceHeaderSettings) => {\n      const headerSettings = createDefaultHeaderSettings();\n\n      if (isObject(sourceHeaderSettings)) {\n        const {\n          label, colspan, headerClassName\n        } = sourceHeaderSettings;\n\n        headerSettings.label = stringify(label);\n\n        if (typeof colspan === 'number' && colspan > 1) {\n          headerSettings.colspan = colspan;\n          headerSettings.origColspan = colspan;\n        }\n\n        if (typeof headerClassName === 'string') {\n          headerSettings.headerClassNames = [...headerClassName.split(' ')];\n        }\n\n      } else {\n        headerSettings.label = stringify(sourceHeaderSettings);\n      }\n\n      columnIndex += headerSettings.origColspan;\n\n      let cancelProcessing = false;\n\n      if (columnIndex >= columnsLimit) {\n        // Adjust the colspan value to not overlap the columns limit.\n        headerSettings.colspan = headerSettings.origColspan - (columnIndex - columnsLimit);\n        headerSettings.origColspan = headerSettings.colspan;\n        cancelProcessing = true;\n      }\n\n      columns.push(headerSettings);\n\n      if (headerSettings.colspan > 1) {\n        for (let i = 0; i < headerSettings.colspan - 1; i++) {\n          columns.push(createPlaceholderHeaderSettings());\n        }\n      }\n\n      return !cancelProcessing;\n    });\n  });\n\n  const columnsLength = Math.max(...arrayMap(normalizedSettings, (headersSettings => headersSettings.length)));\n\n  // Normalize the length of each header layer to the same columns length.\n  arrayEach(normalizedSettings, (headersSettings) => {\n    if (headersSettings.length < columnsLength) {\n      const defaultSettings = arrayMap(\n        new Array(columnsLength - headersSettings.length), () => createDefaultHeaderSettings()\n      );\n\n      headersSettings.splice(headersSettings.length, 0, ...defaultSettings);\n    }\n  });\n\n  return normalizedSettings;\n}\n","/**\n * @typedef {object} DefaultHeaderSettings\n * @property {string} label The name/label of the column header.\n * @property {number} colspan Current calculated colspan value of the rendered column header element.\n * @property {number} origColspan Original colspan value, set once while parsing user-defined nested header settings.\n * @property {boolean} collapsible The flag determines whether the node is collapsible (can be collapsed/expanded).\n * @property {number[]} crossHiddenColumns The list of visual column indexes which indicates that the specified columns within\n *                                         the header settings are hidden.\n * @property {boolean} isCollapsed The flag determines whether the node is collapsed.\n * @property {boolean} isHidden The flag determines whether the column header at specified index is hidden. If true\n *                              the TH element will be rendered as hidden (display: none).\n * @property {boolean} isRoot The flag which determines whether the column header settings is actually not renderable. That kind\n *                            of objects are generated after colspaned header to fill an array to correct size.\n *                            For example for header with colspan = 8 the 7 blank objects are generated to fill the array settings\n *                            to length = 8.\n * @property {boolean} isPlaceholder The flag determines whether the column header at the specified index is non-renderable.\n * @property {string[]} headerClassNames The list of CSS classes that will be added to the `div` element inside the\n * header Acts as a replacement for the analogous property from the Handsontable settings.\n */\n\n/**\n * Creates the header settings object with default values.\n *\n * @param {DefaultHeaderSettings} initialValues The initial values for the header settings object.\n * @returns {DefaultHeaderSettings}\n */\nexport function createDefaultHeaderSettings({\n  label = '',\n  colspan = 1,\n  origColspan = 1,\n  collapsible = false,\n  crossHiddenColumns = [],\n  isCollapsed = false,\n  isHidden = false,\n  isRoot = false,\n  isPlaceholder = false,\n  headerClassNames = []\n} = {}) {\n  return {\n    label,\n    colspan,\n    origColspan,\n    collapsible,\n    isCollapsed,\n    crossHiddenColumns,\n    isHidden,\n    isRoot,\n    isPlaceholder,\n    headerClassNames,\n  };\n}\n\n/**\n * Creates the placeholder header settings object. Those settings tell the header renderers\n * that this TH element should not be rendered (the node will be overlapped by the previously\n * created node with colspan bigger than 1).\n *\n * @returns {object}\n */\nexport function createPlaceholderHeaderSettings() {\n  return {\n    label: '',\n    isPlaceholder: true,\n  };\n}\n","import { arrayEach } from '../../../helpers/array';\nimport TreeNode from '../../../utils/dataStructures/tree';\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * @private\n * @class HeadersTree\n *\n * The header tree class keeps nested header settings in the tree\n * structure for easier node manipulation (e.q collapse or expand column).\n * That trees represent the current state of the nested headers. From the\n * trees, the matrix is generated for nested header renderers.\n *\n * The second role of the module is validation. While building the tree,\n * there is check whether the configuration contains overlapping\n * headers. If true, then the exception is thrown.\n *\n * The tree is static; it means that its column indexing never changes\n * even when a collapsing header is performed. The structure is based\n * on visual column indexes.\n *\n * For example, for that header configuration:\n *   +----+----+----+----+----+\n *   │ A1                │ A2 │\n *   +----+----+----+----+----+\n *   │ B1           │ B2 │ B3 │\n *   +----+----+----+----+----+\n *   │ C1      │ C2 │ C3 │ C4 │\n *   +----+----+----+----+----+\n *\n * The tree structures look like:\n *                (0)                      (4)           // a visual column index\n *                 │                        │\n *        .------(A1)------.              (A2)--.\n *   .--(B1)--.           (B2)--.              (B3)--.\n *  (C1)     (C2)              (C3)                 (C4)\n *\n */\n/* eslint-enable jsdoc/require-description-complete-sentence */\nexport default class HeadersTree {\n  /**\n   * The collection of nested headers settings structured into trees. The root trees are stored\n   * under the visual column index.\n   *\n   * @private\n   * @type {Map<number, TreeNode>}\n   */\n  #rootNodes = new Map();\n  /**\n   * A map that translates the visual column indexes that intersect the range\n   * defined by the header colspan width to the root index.\n   *\n   * @private\n   * @type {Map<number, number>}\n   */\n  #rootsIndex = new Map();\n  /**\n   * The instance of the SourceSettings class.\n   *\n   * @private\n   * @type {SourceSettings}\n   */\n  #sourceSettings = null;\n\n  constructor(sourceSettings) {\n    this.#sourceSettings = sourceSettings;\n  }\n\n  /**\n   * Gets an array of the all root nodes.\n   *\n   * @returns {TreeNode[]}\n   */\n  getRoots() {\n    return Array.from(this.#rootNodes.values());\n  }\n\n  /**\n   * Gets a root node by specified visual column index.\n   *\n   * @param {number} columnIndex A visual column index.\n   * @returns {TreeNode|undefined}\n   */\n  getRootByColumn(columnIndex) {\n    let node;\n\n    if (this.#rootsIndex.has(columnIndex)) {\n      node = this.#rootNodes.get(this.#rootsIndex.get(columnIndex));\n    }\n\n    return node;\n  }\n\n  /**\n   * Gets a tree node by its position in the grid settings.\n   *\n   * @param {number} headerLevel Header level index (there is support only for positive values).\n   * @param {number} columnIndex A visual column index.\n   * @returns {TreeNode|undefined}\n   */\n  getNode(headerLevel, columnIndex) {\n    const rootNode = this.getRootByColumn(columnIndex);\n\n    if (!rootNode) {\n      return;\n    }\n\n    // Normalize the visual column index to a 0-based system for a specific \"box\" defined\n    // by root node colspan width.\n    const normColumnIndex = columnIndex - this.#rootsIndex.get(columnIndex);\n    let columnCursor = 0;\n    let treeNode;\n\n    // Collect all parent nodes that depend on the collapsed node.\n    rootNode.walkDown((node) => {\n      const { data: { origColspan, headerLevel: nodeHeaderLevel } } = node;\n\n      if (headerLevel === nodeHeaderLevel) {\n        if (normColumnIndex >= columnCursor && normColumnIndex <= columnCursor + origColspan - 1) {\n          treeNode = node;\n          treeNode.data.isRoot = columnIndex === treeNode.data.columnIndex;\n\n          return false; // Cancel tree traversing.\n        }\n\n        columnCursor += origColspan;\n      }\n    });\n\n    return treeNode;\n  }\n\n  /**\n   * Builds (or rebuilds if called again) root nodes indexes.\n   */\n  rebuildTreeIndex() {\n    let columnIndex = 0;\n\n    this.#rootsIndex.clear();\n\n    arrayEach(this.#rootNodes, ([, { data: { colspan } }]) => {\n      // Map tree range (colspan range/width) into visual column index of the root node.\n      for (let i = columnIndex; i < columnIndex + colspan; i++) {\n        this.#rootsIndex.set(i, columnIndex);\n      }\n\n      columnIndex += colspan;\n    });\n  }\n\n  /**\n   * Builds trees based on SourceSettings class. Calling a method causes clearing the tree state built\n   * from the previous call.\n   */\n  buildTree() {\n    this.clear();\n\n    const columnsCount = this.#sourceSettings.getColumnsCount();\n    let columnIndex = 0;\n\n    while (columnIndex < columnsCount) {\n      const columnSettings = this.#sourceSettings.getHeaderSettings(0, columnIndex);\n      const rootNode = new TreeNode();\n\n      this.#rootNodes.set(columnIndex, rootNode);\n      this.buildLeaves(rootNode, columnIndex, 0, columnSettings.origColspan);\n\n      columnIndex += columnSettings.origColspan;\n    }\n\n    this.rebuildTreeIndex();\n  }\n\n  /**\n   * Builds leaves for specified tree node.\n   *\n   * @param {TreeNode} parentNode A node to which the leaves applies.\n   * @param {number} columnIndex A visual column index.\n   * @param {number} headerLevel Currently processed header level.\n   * @param {number} [extractionLength=1] Determines column extraction length for node children.\n   */\n  buildLeaves(parentNode, columnIndex, headerLevel, extractionLength = 1) {\n    const columnsSettings = this.#sourceSettings.getHeadersSettings(headerLevel, columnIndex, extractionLength);\n\n    headerLevel += 1;\n\n    arrayEach(columnsSettings, (columnSettings) => {\n      const nodeData = {\n        ...columnSettings,\n        /**\n         * The header level (tree node depth level).\n         *\n         * @type {number}\n         */\n        headerLevel: headerLevel - 1,\n        /**\n         * A visual column index.\n         *\n         * @type {number}\n         */\n        columnIndex,\n      };\n      let node;\n\n      if (headerLevel === 1) { // fill the root node\n        parentNode.data = nodeData;\n        node = parentNode;\n\n      } else {\n        node = new TreeNode(nodeData);\n\n        parentNode.addChild(node);\n      }\n\n      if (headerLevel < this.#sourceSettings.getLayersCount()) {\n        this.buildLeaves(node, columnIndex, headerLevel, columnSettings.origColspan);\n      }\n\n      columnIndex += columnSettings.origColspan;\n    });\n  }\n\n  /**\n   * Clears the tree to the initial state.\n   */\n  clear() {\n    this.#rootNodes.clear();\n    this.#rootsIndex.clear();\n  }\n}\n","/**\n * Depth-first pre-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Pre-order_(NLR)).\n *\n * @type {string}\n */\nexport const TRAVERSAL_DF_PRE = 'DF-pre-order';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n * @returns {boolean}\n */\nexport function depthFirstPreOrder(callback, context) {\n  let continueTraverse = callback.call(context, this);\n\n  for (let i = 0; i < this.childs.length; i++) {\n    if (continueTraverse === false) {\n      return false;\n    }\n\n    continueTraverse = depthFirstPreOrder.call(this.childs[i], callback, context);\n  }\n\n  return continueTraverse;\n}\n\n/**\n * Depth-first post-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Post-order_(NLR)).\n *\n * @type {string}\n */\nexport const TRAVERSAL_DF_POST = 'DF-post-order';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n * @returns {boolean}\n */\nfunction depthFirstPostOrder(callback, context) {\n  for (let i = 0; i < this.childs.length; i++) {\n    const continueTraverse = depthFirstPostOrder.call(this.childs[i], callback, context);\n\n    if (continueTraverse === false) {\n      return false;\n    }\n  }\n\n  return callback.call(context, this);\n}\n\n/**\n * Breadth-first traversal strategy (https://en.wikipedia.org/wiki/Tree_traversal#Breadth-first_search_/_level_order).\n *\n * @type {string}\n */\nexport const TRAVERSAL_BF = 'BF';\n/**\n * @param {Function} callback A callback which will be called on each visited node.\n * @param {*} context A context to pass through.\n */\nfunction breadthFirst(callback, context) {\n  const queue = [this];\n\n  /**\n   * Internal processor.\n   */\n  function process() {\n    if (queue.length === 0) {\n      return;\n    }\n\n    const node = queue.shift();\n\n    queue.push(...node.childs);\n\n    if (callback.call(context, node) !== false) {\n      process();\n    }\n  }\n\n  process();\n}\n\n/**\n * Default strategy for tree traversal.\n *\n * @type {string}\n */\nconst DEFAULT_TRAVERSAL_STRATEGY = TRAVERSAL_BF;\n/**\n * Collection of all available tree traversal strategies.\n *\n * @type {Map<string, Function>}\n */\nconst TRAVERSAL_STRATEGIES = new Map([\n  [TRAVERSAL_DF_PRE, depthFirstPreOrder],\n  [TRAVERSAL_DF_POST, depthFirstPostOrder],\n  [TRAVERSAL_BF, breadthFirst],\n]);\n\n/**\n *\n */\nexport default class TreeNode {\n  /**\n   * A tree data.\n   *\n   * @type {object}\n   */\n  data = {};\n  /**\n   * A parent node.\n   *\n   * @type {TreeNode}\n   */\n  parent = null;\n  /**\n   * A tree leaves.\n   *\n   * @type {TreeNode[]}\n   */\n  childs = [];\n\n  constructor(data) {\n    this.data = data;\n  }\n\n  /**\n   * Adds a node to tree leaves. Added node is linked with the parent node through \"parent\" property.\n   *\n   * @param {TreeNode} node A TreeNode to add.\n   */\n  addChild(node) {\n    node.parent = this;\n    this.childs.push(node);\n  }\n\n  /* eslint-disable jsdoc/require-description-complete-sentence */\n  /**\n   * @memberof TreeNode#\n   * @function cloneTree\n   *\n   * Clones a tree structure deeply.\n   *\n   * For example, for giving a tree structure:\n   *      .--(B1)--.\n   *   .-(C1)   .-(C2)-.----.\n   *  (D1)     (D2)   (D3) (D4)\n   *\n   * Cloning a tree starting from C2 node creates a mirrored tree structure.\n   *     .-(C2')-.-----.\n   *    (D2')   (D3') (D4')\n   *\n   * The cloned tree can be safely modified without affecting the original structure.\n   * After modification, the clone can be merged with a tree using the \"replaceTreeWith\" method.\n   *\n   * @param {TreeNode} [nodeTree=this] A TreeNode to clone.\n   * @returns {TreeNode}\n   */\n  /* eslint-enable jsdoc/require-description-complete-sentence */\n  cloneTree(nodeTree = this) {\n    const clonedNode = new TreeNode({\n      ...nodeTree.data,\n    });\n\n    for (let i = 0; i < nodeTree.childs.length; i++) {\n      clonedNode.addChild(this.cloneTree(nodeTree.childs[i]));\n    }\n\n    return clonedNode;\n  }\n\n  /**\n   * Replaces the current node with a passed tree structure.\n   *\n   * @param {TreeNode} nodeTree A TreeNode to replace with.\n   */\n  replaceTreeWith(nodeTree) {\n    this.data = { ...nodeTree.data };\n    this.childs = [];\n\n    for (let i = 0; i < nodeTree.childs.length; i++) {\n      this.addChild(nodeTree.childs[i]);\n    }\n  }\n\n  /**\n   * Traverses the tree structure through node childs. The walk down traversing supports\n   * a three different strategies.\n   *  - Depth-first pre-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Pre-order_(NLR));\n   *  - Depth-first post-order strategy (https://en.wikipedia.org/wiki/Tree_traversal#Post-order_(NLR));\n   *  - Breadth-first traversal strategy (https://en.wikipedia.org/wiki/Tree_traversal#Breadth-first_search_/_level_order).\n   *\n   * @param {Function} callback The callback function which will be called for each node.\n   * @param {string} [traversalStrategy=DEFAULT_TRAVERSAL_STRATEGY] Traversing strategy.\n   */\n  walkDown(callback, traversalStrategy = DEFAULT_TRAVERSAL_STRATEGY) {\n    if (!TRAVERSAL_STRATEGIES.has(traversalStrategy)) {\n      throw new Error(`Traversal strategy \"${traversalStrategy}\" does not exist`);\n    }\n\n    TRAVERSAL_STRATEGIES.get(traversalStrategy).call(this, callback, this);\n  }\n\n  /**\n   * Traverses the tree structure through node parents.\n   *\n   * @param {Function} callback The callback function which will be called for each node.\n   */\n  walkUp(callback) {\n    const context = this;\n    const process = (node) => {\n      const continueTraverse = callback.call(context, node);\n\n      if (continueTraverse !== false && node.parent !== null) {\n        process(node.parent);\n      }\n    };\n\n    process(this);\n  }\n}\n","/**\n * The NodeModifiers module is responsible for the modification of a tree structure\n * in a way to achieve new column headers state.\n */\nimport { collapseNode } from './collapse';\nimport { expandNode } from './expand';\nimport { hideColumn } from './hideColumn';\nimport { showColumn } from './showColumn';\n\nconst availableModifiers = new Map([\n  ['collapse', collapseNode],\n  ['expand', expandNode],\n  ['hide-column', hideColumn],\n  ['show-column', showColumn],\n]);\n\n/**\n * An entry point for triggering a node modifiers. If the triggered action\n * does not exist the exception is thrown.\n *\n * @param {string} actionName An action name to trigger.\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that comes from the nested headers grid.\n *                                 The index, as opposed to the `columnIndex` in the tree node\n *                                 (which describes the column index of the root node of the header\n *                                 element), describes the index passed from the grid. Hence, the\n *                                 index can be between the column index of the node and its colspan\n *                                 width.\n * @returns {object}\n */\nexport function triggerNodeModification(actionName, nodeToProcess, gridColumnIndex) {\n  if (!availableModifiers.has(actionName)) {\n    throw new Error(`The node modifier action (\"${actionName}\") does not exist.`);\n  }\n\n  return availableModifiers.get(actionName)(nodeToProcess, gridColumnIndex);\n}\n","import { arrayEach } from '../../../../helpers/array';\nimport { expandNode } from './expand';\nimport {\n  getFirstChildProperty,\n  isNodeReflectsFirstChildColspan,\n  traverseHiddenNodeColumnIndexes,\n} from './utils/tree';\n\n/**\n * Collapsing a node is a process where the processing node is collapsed\n * to the colspan width of the first child. All node children, except the\n * first one, are hidden. To prevent losing a current state of node children\n * on the right, all nodes are cloned (and restored while expanding), and\n * only then original nodes are modified (hidden in this case).\n *\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @returns {object} Returns an object with properties:\n *                    - rollbackModification: The function that rollbacks\n *                      the tree to the previous state.\n *                    - affectedColumns: The list of the visual column\n *                      indexes which are affected. That list is passed\n *                      to the hiddens column logic.\n *                    - colspanCompensation: The number of colspan by\n *                      which the processed node colspan was reduced.\n */\nexport function collapseNode(nodeToProcess) {\n  const { data: nodeData, childs: nodeChilds } = nodeToProcess;\n\n  if (nodeData.isCollapsed || nodeData.isHidden || nodeData.origColspan <= 1) {\n    return {\n      rollbackModification: () => {},\n      affectedColumns: [],\n      colspanCompensation: 0,\n    };\n  }\n\n  const isNodeReflected = isNodeReflectsFirstChildColspan(nodeToProcess);\n\n  if (isNodeReflected) {\n    return collapseNode(nodeChilds[0]);\n  }\n\n  nodeData.isCollapsed = true;\n\n  const allLeavesExceptMostLeft = nodeChilds.slice(1);\n  const affectedColumns = new Set();\n\n  if (allLeavesExceptMostLeft.length > 0) {\n    arrayEach(allLeavesExceptMostLeft, (node) => {\n      traverseHiddenNodeColumnIndexes(node, (gridColumnIndex) => {\n        affectedColumns.add(gridColumnIndex);\n      });\n\n      // Clone the tree to preserve original tree state after header expanding.\n      node.data.clonedTree = node.cloneTree();\n\n      // Hide all leaves except the first leaf on the left (on headers context hide all\n      // headers on the right).\n      node.walkDown(({ data }) => {\n        data.isHidden = true;\n      });\n    });\n\n  } else {\n    const {\n      origColspan,\n      columnIndex,\n    } = nodeData;\n\n    // Add column to \"affected\" started from 1. The header without children can not be\n    // collapsed so the first have to be visible (untouched).\n    for (let i = 1; i < origColspan; i++) {\n      const gridColumnIndex = columnIndex + i;\n\n      affectedColumns.add(gridColumnIndex);\n    }\n  }\n\n  // Calculate by how many colspan it needs to reduce the headings to match them to\n  // the first child colspan width.\n  const colspanCompensation = nodeData.colspan - (getFirstChildProperty(nodeToProcess, 'colspan') ?? 1);\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.colspan -= colspanCompensation;\n\n    if (data.colspan <= 1) {\n      data.colspan = 1;\n      data.isCollapsed = true;\n\n    } else if (isNodeReflectsFirstChildColspan(node)) {\n      data.isCollapsed = getFirstChildProperty(node, 'isCollapsed');\n    }\n  });\n\n  return {\n    rollbackModification: () => expandNode(nodeToProcess),\n    affectedColumns: Array.from(affectedColumns),\n    colspanCompensation,\n  };\n}\n","import { arrayEach } from '../../../../helpers/array';\nimport { collapseNode } from './collapse';\nimport {\n  getFirstChildProperty,\n  isNodeReflectsFirstChildColspan,\n  traverseHiddenNodeColumnIndexes,\n} from './utils/tree';\n\n/**\n * Expanding a node is a process where the processing node is expanded to\n * its original colspan width. To restore an original state of all node\n * children on the right, the modified nodes are replaced with the cloned\n * nodes (they were cloned while collapsing).\n *\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @returns {object} Returns an object with properties:\n *                    - rollbackModification: The function that rollbacks\n *                      the tree to the previous state.\n *                    - affectedColumns: The list of the visual column\n *                      indexes which are affected. That list is passed\n *                      to the hiddens column logic.\n *                    - colspanCompensation: The number of colspan by\n *                      which the processed node colspan was increased.\n */\nexport function expandNode(nodeToProcess) {\n  const { data: nodeData, childs: nodeChilds } = nodeToProcess;\n\n  if (!nodeData.isCollapsed || nodeData.isHidden || nodeData.origColspan <= 1) {\n    return {\n      rollbackModification: () => {},\n      affectedColumns: [],\n      colspanCompensation: 0,\n    };\n  }\n\n  const isNodeReflected = isNodeReflectsFirstChildColspan(nodeToProcess);\n\n  if (isNodeReflected) {\n    return expandNode(nodeChilds[0]);\n  }\n\n  nodeData.isCollapsed = false;\n\n  const allLeavesExceptMostLeft = nodeChilds.slice(1);\n  const affectedColumns = new Set();\n  let colspanCompensation = 0;\n\n  if (allLeavesExceptMostLeft.length > 0) {\n    arrayEach(allLeavesExceptMostLeft, (node) => {\n      // Restore original state of the collapsed headers.\n      node.replaceTreeWith(node.data.clonedTree);\n      node.data.clonedTree = null;\n\n      const leafData = node.data;\n\n      // Calculate by how many colspan it needs to increase the headings to match them to\n      // the colspan width of all its children.\n      colspanCompensation += leafData.colspan;\n\n      traverseHiddenNodeColumnIndexes(node, (gridColumnIndex) => {\n        affectedColumns.add(gridColumnIndex);\n      });\n    });\n\n  } else {\n    const {\n      colspan,\n      origColspan,\n      columnIndex,\n    } = nodeData;\n\n    // In a case when the node doesn't have any children restore the colspan width to\n    // its original state.\n    colspanCompensation = origColspan - colspan;\n\n    // Add column to \"affected\" started from 1. The header without children can not be\n    // collapsed so the first column is already visible and we shouldn't touch it.\n    for (let i = 1; i < origColspan; i++) {\n      affectedColumns.add(columnIndex + i);\n    }\n  }\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.colspan += colspanCompensation;\n\n    if (data.colspan >= data.origColspan) {\n      data.colspan = data.origColspan;\n      data.isCollapsed = false;\n\n    } else if (isNodeReflectsFirstChildColspan(node)) {\n      data.isCollapsed = getFirstChildProperty(node, 'isCollapsed');\n    }\n  });\n\n  return {\n    rollbackModification: () => collapseNode(nodeToProcess),\n    affectedColumns: Array.from(affectedColumns),\n    colspanCompensation,\n  };\n}\n","/**\n * Traverses the tree nodes and calls a callback when no hidden node is found. The callback\n * is called with visual column index then.\n *\n * @param {TreeNode} node A tree node to traverse.\n * @param {Function} callback The callback function which will be called for each node.\n */\nexport function traverseHiddenNodeColumnIndexes(node, callback) {\n  node.walkDown(({ data, childs }) => {\n    if (!data.isHidden) {\n      callback(data.columnIndex);\n\n      if (childs.length === 0) {\n        for (let i = 1; i < data.colspan; i++) {\n          callback(data.columnIndex + i);\n        }\n      }\n    }\n  });\n}\n\n/**\n * A tree helper for retrieving a data from the first child.\n *\n * @param {TreeNode} node A tree node to check.\n * @param {string} propertyName A name of the property whose value you want to get.\n * @returns {*}\n */\nexport function getFirstChildProperty({ childs }, propertyName) {\n  if (childs.length === 0) {\n    return;\n  }\n\n  return childs[0].data[propertyName];\n}\n\n/**\n * A tree helper which checks if passed node has the same original colspan as its\n * first child. In that case the node is treated as \"mirrored\" or \"reflected\" every\n * action performed on one of that nodes should be reflected to other \"mirrored\" node.\n *\n * In that case nodes A1 and A2 are \"reflected\"\n *   +----+----+----+----+\n *   | A1      | B1      |\n *   +----+----+----+----+\n *   | A2      | B2 | B3 |\n *   +----+----+----+----+.\n *\n * @param {TreeNode} node A tree node to check.\n * @returns {boolean}\n */\nexport function isNodeReflectsFirstChildColspan(node) {\n  return getFirstChildProperty(node, 'origColspan') === node.data.origColspan;\n}\n","import { toSingleLine } from '../../../../helpers/templateLiteralTag';\n\n/**\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that triggers the node modification.\n *                                 The index can be between the root node column index and\n *                                 column index plus node colspan length.\n */\nexport function hideColumn(nodeToProcess, gridColumnIndex) {\n  if (!Number.isInteger(gridColumnIndex)) {\n    throw new Error('The passed gridColumnIndex argument has invalid type.');\n  }\n\n  if (nodeToProcess.childs.length > 0) {\n    throw new Error(toSingleLine`The passed node is not the last node on the tree. Only for\\x20\nthe last node, the hide column modification can be applied.`);\n  }\n\n  const {\n    crossHiddenColumns,\n  } = nodeToProcess.data;\n\n  if (crossHiddenColumns.includes(gridColumnIndex)) {\n    return;\n  }\n\n  let isCollapsibleNode = false;\n\n  nodeToProcess.walkUp((node) => {\n    const { data: { collapsible } } = node;\n\n    if (collapsible) {\n      isCollapsibleNode = true;\n\n      return false; // Cancel tree traversing\n    }\n  });\n\n  // TODO: When the node is collapsible do not hide the column. Currently collapsible headers\n  // does not work with hidden columns (hidden index map types).\n  if (isCollapsibleNode) {\n    return;\n  }\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.crossHiddenColumns.push(gridColumnIndex);\n\n    if (data.colspan > 1) {\n      data.colspan -= 1;\n    } else {\n      data.isHidden = true;\n    }\n  });\n}\n","import { toSingleLine } from '../../../../helpers/templateLiteralTag';\n\n/**\n * @param {TreeNode} nodeToProcess A tree node to process.\n * @param {number} gridColumnIndex The visual column index that triggers the node modification.\n *                                 The index can be between the root node column index and\n *                                 column index plus node colspan length.\n */\nexport function showColumn(nodeToProcess, gridColumnIndex) {\n  if (!Number.isInteger(gridColumnIndex)) {\n    throw new Error('The passed gridColumnIndex argument has invalid type.');\n  }\n\n  if (nodeToProcess.childs.length > 0) {\n    throw new Error(toSingleLine`The passed node is not the last node on the tree. Only for\\x20\nthe last node, the show column modification can be applied.`);\n  }\n\n  const {\n    crossHiddenColumns,\n  } = nodeToProcess.data;\n\n  if (!crossHiddenColumns.includes(gridColumnIndex)) {\n    return;\n  }\n\n  let isCollapsibleNode = false;\n\n  nodeToProcess.walkUp((node) => {\n    const { data: { collapsible } } = node;\n\n    if (collapsible) {\n      isCollapsibleNode = true;\n\n      return false; // Cancel tree traversing\n    }\n  });\n\n  // TODO: When the node is collapsible do not show the column. Currently collapsible headers\n  // does not work with hidden columns (hidden index map types).\n  if (isCollapsibleNode) {\n    return;\n  }\n\n  nodeToProcess.walkUp((node) => {\n    const { data } = node;\n\n    data.crossHiddenColumns.splice(data.crossHiddenColumns.indexOf(gridColumnIndex), 1);\n\n    if (!data.isHidden && data.colspan < data.origColspan) {\n      data.colspan += 1;\n    }\n\n    data.isHidden = false;\n  });\n}\n","/* eslint-disable jsdoc/require-description-complete-sentence */\nimport { arrayEach } from '../../../helpers/array';\nimport { createDefaultHeaderSettings, createPlaceholderHeaderSettings } from './utils';\n\n/**\n * A function that dump a tree structure into multidimensional array. That structure is\n * later processed by header renderers to modify TH elements to achieve a proper\n * DOM structure.\n *\n * That structure contains settings object for every TH element generated by Walkontable.\n * The matrix operates on visual column index.\n *\n * Output example:\n *   [\n *     [\n *       { label: 'A1', colspan: 2, origColspan: 2, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: true, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: 'true', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: 'B2', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '4', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *     [\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *       { label: '', colspan: 1, origColspan: 1, isHidden: false, ... },\n *     ],\n *   ]\n *\n * @param {TreeNode[]} headerRoots An array of root nodes.\n * @returns {Array[]}\n */\nexport function generateMatrix(headerRoots) {\n  const matrix = [];\n\n  arrayEach(headerRoots, (rootNode) => {\n    rootNode.walkDown((node) => {\n      const nodeData = node.data;\n      const {\n        origColspan,\n        columnIndex,\n        headerLevel,\n        crossHiddenColumns,\n      } = nodeData;\n      const colspanHeaderLayer = createNestedArrayIfNecessary(matrix, headerLevel);\n      let isRootSettingsFound = false;\n\n      for (let i = columnIndex; i < columnIndex + origColspan; i++) {\n        const isColumnHidden = crossHiddenColumns.includes(i);\n\n        if (isColumnHidden || isRootSettingsFound) {\n          colspanHeaderLayer.push(createPlaceholderHeaderSettings(nodeData));\n        } else {\n          const headerRootSettings = createHeaderSettings(nodeData);\n\n          headerRootSettings.isRoot = true;\n          colspanHeaderLayer.push(headerRootSettings);\n          isRootSettingsFound = true;\n        }\n      }\n    });\n  });\n\n  return matrix;\n}\n\n/**\n * Creates header settings object.\n *\n * @param {object} nodeData The tree data object.\n * @returns {object}\n */\nfunction createHeaderSettings(nodeData) {\n  // For the matrix module we do not need to export \"crossHiddenColumns\" key. It's redundant here.\n  const { crossHiddenColumns, ...headerRootSettings } = createDefaultHeaderSettings(nodeData);\n\n  return headerRootSettings;\n}\n\n/**\n * Internal helper which ensures that subarray exists under specified index.\n *\n * @param {Array[]} array An array to check.\n * @param {number} index An array index under the subarray should be checked.\n * @returns {Array}\n */\nfunction createNestedArrayIfNecessary(array, index) {\n  let subArray;\n\n  if (Array.isArray(array[index])) {\n    subArray = array[index];\n  } else {\n    subArray = [];\n    array[index] = subArray;\n  }\n\n  return subArray;\n}\n","import { fastInnerHTML } from '../../../helpers/dom/element';\n\n/**\n * The class generates the nested headers structure in the DOM and reads the column width for\n * each column. The hierarchy is built only for visible, non-hidden columns. Each time the\n * column is shown or hidden, the structure is rebuilt, and the width of the columns in the\n * map updated.\n *\n * @private\n */\nclass GhostTable {\n  /**\n   * Reference to the Handsontable instance.\n   *\n   * @private\n   * @type {Handsontable}\n   */\n  hot;\n  /**\n   * The function for retrieving the nested headers settings.\n   *\n   * @private\n   * @type {Function}\n   */\n  nestedHeaderSettingsGetter;\n  /**\n   * The value that holds information about the number of the nested header layers (header rows).\n   *\n   * @private\n   * @type {number}\n   */\n  layersCount = 0;\n  /**\n   * Temporary element created to get minimal headers widths.\n   *\n   * @private\n   * @type {*}\n   */\n  container;\n  /**\n   * PhysicalIndexToValueMap to keep and track of the columns' widths.\n   *\n   * @private\n   * @type {PhysicalIndexToValueMap}\n   */\n  widthsMap;\n\n  constructor(hot, nestedHeaderSettingsGetter) {\n    this.hot = hot;\n    this.nestedHeaderSettingsGetter = nestedHeaderSettingsGetter;\n    this.widthsMap = this.hot.columnIndexMapper\n      .createAndRegisterIndexMap('nestedHeaders.widthsMap', 'physicalIndexToValue');\n  }\n\n  /**\n   * Sets the number of nested headers layers count.\n   *\n   * @param {number} layersCount Total number of headers levels.\n   * @returns {GhostTable}\n   */\n  setLayersCount(layersCount) {\n    this.layersCount = layersCount;\n\n    return this;\n  }\n\n  /**\n   * Gets the column width based on the visual column index.\n   *\n   * @param {number} visualColumn Visual column index.\n   * @returns {number|null}\n   */\n  getWidth(visualColumn) {\n    return this.widthsMap.getValueAtIndex(this.hot.toPhysicalColumn(visualColumn));\n  }\n\n  /**\n   * Build cache of the headers widths.\n   */\n  buildWidthsMap() {\n    this.container = this.hot.rootDocument.createElement('div');\n    this.container.classList.add('handsontable', 'htGhostTable', 'htAutoSize');\n    this._buildGhostTable(this.container);\n    this.hot.rootDocument.body.appendChild(this.container);\n\n    const columns = this.container.querySelectorAll('tr:last-of-type th');\n    const maxColumns = columns.length;\n\n    this.widthsMap.clear();\n\n    for (let column = 0; column < maxColumns; column++) {\n      const visualColumnsIndex = this.hot.columnIndexMapper.getVisualFromRenderableIndex(column);\n      const physicalColumnIndex = this.hot.toPhysicalColumn(visualColumnsIndex);\n\n      this.widthsMap.setValueAtIndex(physicalColumnIndex, columns[column].offsetWidth);\n    }\n\n    this.container.parentNode.removeChild(this.container);\n    this.container = null;\n  }\n\n  /**\n   * Build temporary table for getting minimal columns widths.\n   *\n   * @private\n   * @param {HTMLElement} container The element where the DOM nodes are injected.\n   */\n  _buildGhostTable(container) {\n    const { rootDocument, columnIndexMapper } = this.hot;\n    const fragment = rootDocument.createDocumentFragment();\n    const table = rootDocument.createElement('table');\n    const isDropdownEnabled = !!this.hot.getSettings().dropdownMenu;\n    const maxRenderedCols = columnIndexMapper.getRenderableIndexesLength();\n\n    for (let row = 0; row < this.layersCount; row++) {\n      const tr = rootDocument.createElement('tr');\n\n      for (let col = 0; col < maxRenderedCols; col++) {\n        let visualColumnsIndex = columnIndexMapper.getVisualFromRenderableIndex(col);\n\n        if (visualColumnsIndex === null) {\n          visualColumnsIndex = col;\n        }\n\n        const th = rootDocument.createElement('th');\n        const headerSettings = this.nestedHeaderSettingsGetter(row, visualColumnsIndex);\n\n        if (headerSettings && (!headerSettings.isPlaceholder || headerSettings.isHidden)) {\n          let label = headerSettings.label;\n\n          if (isDropdownEnabled) {\n            label += '<button class=\"changeType\"></button>';\n          }\n\n          fastInnerHTML(th, label);\n          th.colSpan = headerSettings.colspan;\n          tr.appendChild(th);\n        }\n      }\n\n      table.appendChild(tr);\n    }\n\n    fragment.appendChild(table);\n    container.appendChild(fragment);\n  }\n\n  /**\n   * Clear the widths cache.\n   */\n  clear() {\n    this.widthsMap.clear();\n    this.container = null;\n  }\n}\n\nexport default GhostTable;\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  NestedRows,\n} from './nestedRows';\n","import { BasePlugin } from '../base';\nimport DataManager from './data/dataManager';\nimport CollapsingUI from './ui/collapsing';\nimport HeadersUI from './ui/headers';\nimport ContextMenuUI from './ui/contextMenu';\nimport { error } from '../../helpers/console';\nimport { isArrayOfObjects } from '../../helpers/data';\nimport { TrimmingMap } from '../../translations';\nimport { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from '../../shortcutContexts';\nimport RowMoveController from './utils/rowMoveController';\n\nimport './nestedRows.scss';\n\nexport const PLUGIN_KEY = 'nestedRows';\nexport const PLUGIN_PRIORITY = 300;\nconst SHORTCUTS_GROUP = PLUGIN_KEY;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n/**\n * Error message for the wrong data type error.\n */\nconst WRONG_DATA_TYPE_ERROR = 'The Nested Rows plugin requires an Array of Objects as a dataset to be' +\n  ' provided. The plugin has been disabled.';\n\n/**\n * @plugin NestedRows\n * @class NestedRows\n *\n * @description\n * Plugin responsible for displaying and operating on data sources with nested structures.\n */\nexport class NestedRows extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Reference to the DataManager instance.\n   *\n   * @private\n   * @type {object}\n   */\n  dataManager = null;\n  /**\n   * Reference to the HeadersUI instance.\n   *\n   * @private\n   * @type {object}\n   */\n  headersUI = null;\n  /**\n   * Map of skipped rows by plugin.\n   *\n   * @private\n   * @type {null|TrimmingMap}\n   */\n  collapsedRowsMap = null;\n  /**\n   * Allows skipping the render cycle if set as `true`.\n   *\n   * @type {boolean}\n   */\n  #skipRender = false;\n  /**\n   * Allows skipping the internal Core methods call if set as `true`.\n   *\n   * @type {boolean}\n   */\n  #skipCoreAPIModifiers = false;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link NestedRows#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.collapsedRowsMap = this.hot.rowIndexMapper.registerMap('nestedRows', new TrimmingMap());\n\n    this.dataManager = new DataManager(this, this.hot);\n    this.collapsingUI = new CollapsingUI(this, this.hot);\n    this.headersUI = new HeadersUI(this, this.hot);\n    this.contextMenuUI = new ContextMenuUI(this, this.hot);\n    this.rowMoveController = new RowMoveController(this);\n\n    this.addHook('afterInit', (...args) => this.#onAfterInit(...args));\n    this.addHook('beforeViewRender', (...args) => this.#onBeforeViewRender(...args));\n    this.addHook('modifyRowData', (...args) => this.onModifyRowData(...args));\n    this.addHook('modifySourceLength', (...args) => this.onModifySourceLength(...args));\n    this.addHook('beforeDataSplice', (...args) => this.onBeforeDataSplice(...args));\n    this.addHook('filterData', (...args) => this.#onFilterData(...args));\n    this.addHook('afterContextMenuDefaultOptions', (...args) => this.#onAfterContextMenuDefaultOptions(...args));\n    this.addHook('afterGetRowHeader', (...args) => this.#onAfterGetRowHeader(...args));\n    this.addHook('beforeOnCellMouseDown', (...args) => this.#onBeforeOnCellMouseDown(...args));\n    this.addHook('beforeRemoveRow', (...args) => this.#onBeforeRemoveRow(...args));\n    this.addHook('afterRemoveRow', (...args) => this.#onAfterRemoveRow(...args));\n    this.addHook('beforeAddChild', (...args) => this.#onBeforeAddChild(...args));\n    this.addHook('afterAddChild', (...args) => this.#onAfterAddChild(...args));\n    this.addHook('beforeDetachChild', (...args) => this.#onBeforeDetachChild(...args));\n    this.addHook('afterDetachChild', (...args) => this.#onAfterDetachChild(...args));\n    this.addHook('modifyRowHeaderWidth', (...args) => this.#onModifyRowHeaderWidth(...args));\n    this.addHook('afterCreateRow', (...args) => this.#onAfterCreateRow(...args));\n    this.addHook('beforeRowMove', (...args) => this.#onBeforeRowMove(...args));\n    this.addHook('beforeLoadData', data => this.#onBeforeLoadData(data));\n    this.addHook('beforeUpdateData', data => this.#onBeforeLoadData(data));\n\n    this.registerShortcuts();\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap('nestedRows');\n\n    this.unregisterShortcuts();\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`nestedRows`](@/api/options.md#nestedrows)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n\n    // We store a state of the data manager.\n    const currentSourceData = this.dataManager.getData();\n\n    this.enablePlugin();\n\n    // After enabling plugin previously stored data is restored.\n    this.dataManager.updateWithData(currentSourceData);\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Register shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  registerShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .addShortcut({\n        keys: [['Enter']],\n        callback: () => {\n          const { highlight } = this.hot.getSelectedRangeLast();\n          const row = this.collapsingUI.translateTrimmedRow(highlight.row);\n\n          if (this.collapsingUI.areChildrenCollapsed(row)) {\n            this.collapsingUI.expandChildren(row);\n          } else {\n            this.collapsingUI.collapseChildren(row);\n          }\n\n          // prevent default Enter behavior (move to the next row within a selection range)\n          return false;\n        },\n        runOnlyIf: () => {\n          const highlight = this.hot.getSelectedRangeLast()?.highlight;\n\n          return highlight && this.hot.getSelectedRangeLast()?.isSingle() &&\n            this.hot.selection.isCellVisible(highlight) && highlight.col === -1 && highlight.row >= 0;\n        },\n        group: SHORTCUTS_GROUP,\n        relativeToGroup: SHORTCUTS_GROUP_EDITOR,\n        position: 'before',\n      });\n  }\n\n  /**\n   * Unregister shortcuts responsible for toggling collapsible columns.\n   *\n   * @private\n   */\n  unregisterShortcuts() {\n    this.hot.getShortcutManager()\n      .getContext('grid')\n      .removeShortcutsByGroup(SHORTCUTS_GROUP);\n  }\n\n  /**\n   * `beforeRowMove` hook callback.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n   *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n   *   [documentation](@/guides/rows/row-summary/row-summary.md).\n   * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n   *   are going to drop the moved elements. To check visualization of drop index please take a look at\n   *   [documentation](@/guides/rows/row-summary/row-summary.md).\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  #onBeforeRowMove(rows, finalIndex, dropIndex, movePossible) {\n    return this.rowMoveController.onBeforeRowMove(rows, finalIndex, dropIndex, movePossible);\n  }\n\n  /**\n   * Enable the modify hook skipping flag - allows retrieving the data from Handsontable without this plugin's\n   * modifications.\n   *\n   * @private\n   */\n  disableCoreAPIModifiers() {\n    this.#skipCoreAPIModifiers = true;\n  }\n\n  /**\n   * Disable the modify hook skipping flag.\n   *\n   * @private\n   */\n  enableCoreAPIModifiers() {\n    this.#skipCoreAPIModifiers = false;\n  }\n\n  /**\n   * `beforeOnCellMousedown` hook callback.\n   *\n   * @param {MouseEvent} event Mousedown event.\n   * @param {object} coords Cell coords.\n   * @param {HTMLElement} TD Clicked cell.\n   */\n  #onBeforeOnCellMouseDown(event, coords, TD) {\n    this.collapsingUI.toggleState(event, coords, TD);\n  }\n\n  /**\n   * The modifyRowData hook callback.\n   *\n   * @private\n   * @param {number} row Visual row index.\n   * @returns {boolean}\n   */\n  onModifyRowData(row) {\n    if (this.#skipCoreAPIModifiers) {\n      return;\n    }\n\n    return this.dataManager.getDataObject(row);\n  }\n\n  /**\n   * Modify the source data length to match the length of the nested structure.\n   *\n   * @private\n   * @returns {number}\n   */\n  onModifySourceLength() {\n    if (this.#skipCoreAPIModifiers) {\n      return;\n    }\n\n    return this.dataManager.countAllRows();\n  }\n\n  /**\n   * @private\n   * @param {number} index The index where the data was spliced.\n   * @param {number} amount An amount of items to remove.\n   * @param {object} element An element to add.\n   * @returns {boolean}\n   */\n  onBeforeDataSplice(index, amount, element) {\n    if (this.#skipCoreAPIModifiers || this.dataManager.isRowHighestLevel(index)) {\n      return true;\n    }\n\n    this.dataManager.spliceData(index, amount, element);\n\n    return false;\n  }\n\n  /**\n   * Provide custom source data filtering. It's handled by core method and replaces the native filtering.\n   *\n   * @param {number} index The index where the data filtering starts.\n   * @param {number} amount An amount of rows which filtering applies to.\n   * @param {number} physicalRows Physical row indexes.\n   * @returns {Array}\n   */\n  #onFilterData(index, amount, physicalRows) {\n    this.collapsingUI.collapsedRowsStash.stash();\n    this.collapsingUI.collapsedRowsStash.trimStash(physicalRows[0], amount);\n    this.collapsingUI.collapsedRowsStash.shiftStash(physicalRows[0], null, (-1) * amount);\n    this.dataManager.filterData(index, amount, physicalRows);\n\n    this.#skipRender = true;\n\n    return this.dataManager.getData().slice(); // Data contains reference sometimes.\n  }\n\n  /**\n   * `afterContextMenuDefaultOptions` hook callback.\n   *\n   * @param {object} defaultOptions The default context menu items order.\n   * @returns {boolean}\n   */\n  #onAfterContextMenuDefaultOptions(defaultOptions) {\n    return this.contextMenuUI.appendOptions(defaultOptions);\n  }\n\n  /**\n   * `afterGetRowHeader` hook callback.\n   *\n   * @param {number} row Row index.\n   * @param {HTMLElement} TH Row header element.\n   */\n  #onAfterGetRowHeader(row, TH) {\n    this.headersUI.appendLevelIndicators(row, TH);\n  }\n\n  /**\n   * `modifyRowHeaderWidth` hook callback.\n   *\n   * @param {number} rowHeaderWidth The initial row header width(s).\n   * @returns {number}\n   */\n  #onModifyRowHeaderWidth(rowHeaderWidth) {\n    return Math.max(this.headersUI.rowHeaderWidthCache, rowHeaderWidth);\n  }\n\n  /**\n   * `onAfterRemoveRow` hook callback.\n   *\n   * @param {number} index Removed row.\n   * @param {number} amount Amount of removed rows.\n   * @param {Array} logicRows An array of the removed physical rows.\n   * @param {string} source Source of action.\n   */\n  #onAfterRemoveRow(index, amount, logicRows, source) {\n    if (source === this.pluginName) {\n      return;\n    }\n\n    this.hot._registerTimeout(() => {\n      this.#skipRender = false;\n      this.headersUI.updateRowHeaderWidth();\n      this.collapsingUI.collapsedRowsStash.applyStash();\n    });\n  }\n\n  /**\n   * Callback for the `beforeRemoveRow` change list of removed physical indexes by reference. Removing parent node\n   * has effect in removing children nodes.\n   *\n   * @param {number} index Visual index of starter row.\n   * @param {number} amount Amount of rows to be removed.\n   * @param {Array} physicalRows List of physical indexes.\n   */\n  #onBeforeRemoveRow(index, amount, physicalRows) {\n    const modifiedPhysicalRows = Array.from(physicalRows.reduce((removedRows, physicalIndex) => {\n      if (this.dataManager.isParent(physicalIndex)) {\n        const children = this.dataManager.getDataObject(physicalIndex).__children;\n\n        // Preserve a parent in the list of removed rows.\n        removedRows.add(physicalIndex);\n\n        if (Array.isArray(children)) {\n          // Add a children to the list of removed rows.\n          children.forEach(child => removedRows.add(this.dataManager.getRowIndex(child)));\n        }\n\n        return removedRows;\n      }\n\n      // Don't modify list of removed rows when already checked element isn't a parent.\n      return removedRows.add(physicalIndex);\n    }, new Set()));\n\n    // Modifying hook's argument by the reference.\n    physicalRows.length = 0;\n    physicalRows.push(...modifiedPhysicalRows);\n  }\n\n  /**\n   * `beforeAddChild` hook callback.\n   */\n  #onBeforeAddChild() {\n    this.collapsingUI.collapsedRowsStash.stash();\n  }\n\n  /**\n   * `afterAddChild` hook callback.\n   *\n   * @param {object} parent Parent element.\n   * @param {object} element New child element.\n   */\n  #onAfterAddChild(parent, element) {\n    this.collapsingUI.collapsedRowsStash.shiftStash(this.dataManager.getRowIndex(element));\n    this.collapsingUI.collapsedRowsStash.applyStash();\n\n    this.headersUI.updateRowHeaderWidth();\n  }\n\n  /**\n   * `beforeDetachChild` hook callback.\n   */\n  #onBeforeDetachChild() {\n    this.collapsingUI.collapsedRowsStash.stash();\n  }\n\n  /**\n   * `afterDetachChild` hook callback.\n   *\n   * @param {object} parent Parent element.\n   * @param {object} element New child element.\n   * @param {number} finalElementRowIndex The final row index of the detached element.\n   */\n  #onAfterDetachChild(parent, element, finalElementRowIndex) {\n    this.collapsingUI.collapsedRowsStash.shiftStash(finalElementRowIndex, null, -1);\n    this.collapsingUI.collapsedRowsStash.applyStash();\n\n    this.headersUI.updateRowHeaderWidth();\n  }\n\n  /**\n   * `afterCreateRow` hook callback.\n   */\n  #onAfterCreateRow() {\n    this.dataManager.rewriteCache();\n  }\n\n  /**\n   * `afterInit` hook callback.\n   */\n  #onAfterInit() {\n    this.headersUI.updateRowHeaderWidth();\n  }\n\n  /**\n   * `beforeViewRender` hook callback.\n   *\n   * @param {boolean} force Indicates if the render call was triggered by a change of settings or data.\n   * @param {object} skipRender An object, holder for skipRender functionality.\n   */\n  #onBeforeViewRender(force, skipRender) {\n    if (this.#skipRender) {\n      skipRender.skipRender = true;\n    }\n  }\n\n  /**\n   * `beforeLoadData` hook callback.\n   *\n   * @param {Array} data The source data.\n   */\n  #onBeforeLoadData(data) {\n    if (!isArrayOfObjects(data)) {\n      error(WRONG_DATA_TYPE_ERROR);\n\n      this.hot.getSettings()[PLUGIN_KEY] = false;\n      this.disablePlugin();\n\n      return;\n    }\n\n    this.dataManager.setData(data);\n    this.dataManager.rewriteCache();\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { rangeEach } from '../../../helpers/number';\nimport { objectEach } from '../../../helpers/object';\nimport { arrayEach } from '../../../helpers/array';\n\n/**\n * Class responsible for making data operations.\n *\n * @private\n */\nclass DataManager {\n  /**\n   * Main Handsontable instance reference.\n   *\n   * @type {object}\n   */\n  hot;\n  /**\n   * Reference to the source data object.\n   *\n   * @type {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n   */\n  data = null;\n  /**\n   * Reference to the NestedRows plugin.\n   *\n   * @type {object}\n   */\n  plugin;\n  /**\n   * Map of row object parents.\n   *\n   * @type {WeakMap}\n   */\n  parentReference = new WeakMap();\n  /**\n   * Nested structure cache.\n   *\n   * @type {object}\n   */\n  cache = {\n    levels: [],\n    levelCount: 0,\n    rows: [],\n    nodeInfo: new WeakMap()\n  };\n\n  constructor(nestedRowsPlugin, hotInstance) {\n    this.hot = hotInstance;\n    this.plugin = nestedRowsPlugin;\n  }\n\n  /**\n   * Set the data for the manager.\n   *\n   * @param {Handsontable.CellValue[][]|Handsontable.RowObject[]} data Data for the manager.\n   */\n  setData(data) {\n    this.data = data;\n  }\n\n  /**\n   * Get the data cached in the manager.\n   *\n   * @returns {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n   */\n  getData() {\n    return this.data;\n  }\n\n  /**\n   * Load the \"raw\" source data, without NestedRows' modifications.\n   *\n   * @returns {Handsontable.CellValue[][]|Handsontable.RowObject[]}\n   */\n  getRawSourceData() {\n    let rawSourceData = null;\n\n    this.plugin.disableCoreAPIModifiers();\n    rawSourceData = this.hot.getSourceData();\n    this.plugin.enableCoreAPIModifiers();\n\n    return rawSourceData;\n  }\n\n  /**\n   * Update the Data Manager with new data and refresh cache.\n   *\n   * @param {Handsontable.CellValue[][]|Handsontable.RowObject[]} data Data for the manager.\n   */\n  updateWithData(data) {\n    this.setData(data);\n    this.rewriteCache();\n  }\n\n  /**\n   * Rewrite the nested structure cache.\n   *\n   * @private\n   */\n  rewriteCache() {\n    this.cache = {\n      levels: [],\n      levelCount: 0,\n      rows: [],\n      nodeInfo: new WeakMap()\n    };\n\n    rangeEach(0, this.data.length - 1, (i) => {\n      this.cacheNode(this.data[i], 0, null);\n    });\n  }\n\n  /**\n   * Cache a data node.\n   *\n   * @private\n   * @param {object} node Node to cache.\n   * @param {number} level Level of the node.\n   * @param {object} parent Parent of the node.\n   */\n  cacheNode(node, level, parent) {\n    if (!this.cache.levels[level]) {\n      this.cache.levels[level] = [];\n      this.cache.levelCount += 1;\n    }\n    this.cache.levels[level].push(node);\n    this.cache.rows.push(node);\n    this.cache.nodeInfo.set(node, {\n      parent,\n      row: this.cache.rows.length - 1,\n      level\n    });\n\n    if (this.hasChildren(node)) {\n      arrayEach(node.__children, (elem) => {\n        this.cacheNode(elem, level + 1, node);\n      });\n    }\n  }\n\n  /**\n   * Get the date for the provided visual row number.\n   *\n   * @param {number} row Row index.\n   * @returns {object}\n   */\n  getDataObject(row) {\n    return row === null || row === undefined ? null : this.cache.rows[row];\n  }\n\n  /**\n   * Read the row tree in search for a specific row index or row object.\n   *\n   * @private\n   * @param {object} parent The initial parent object.\n   * @param {number} readCount Number of read nodes.\n   * @param {number} neededIndex The row index we search for.\n   * @param {object} neededObject The row object we search for.\n   * @returns {number|object}\n   */\n  readTreeNodes(parent, readCount, neededIndex, neededObject) {\n    let rootLevel = false;\n    let readNodesCount = readCount;\n\n    if (isNaN(readNodesCount) && readNodesCount.end) {\n      return readNodesCount;\n    }\n\n    let parentObj = parent;\n\n    if (!parentObj) {\n      parentObj = {\n        __children: this.data\n      };\n      rootLevel = true;\n      readNodesCount -= 1;\n    }\n\n    if (neededIndex !== null && neededIndex !== undefined && readNodesCount === neededIndex) {\n      return { result: parentObj, end: true };\n    }\n\n    if (neededObject !== null && neededObject !== undefined && parentObj === neededObject) {\n      return { result: readNodesCount, end: true };\n    }\n\n    readNodesCount += 1;\n\n    if (parentObj.__children) {\n      arrayEach(parentObj.__children, (val) => {\n\n        this.parentReference.set(val, rootLevel ? null : parentObj);\n\n        readNodesCount = this.readTreeNodes(val, readNodesCount, neededIndex, neededObject);\n\n        if (isNaN(readNodesCount) && readNodesCount.end) {\n          return false;\n        }\n      });\n    }\n\n    return readNodesCount;\n  }\n\n  /**\n   * Mock a parent node.\n   *\n   * @private\n   * @returns {*}\n   */\n  mockParent() {\n    const fakeParent = this.mockNode();\n\n    fakeParent.__children = this.data;\n\n    return fakeParent;\n  }\n\n  /**\n   * Mock a data node.\n   *\n   * @private\n   * @returns {{}}\n   */\n  mockNode() {\n    const fakeNode = {};\n\n    objectEach(this.data[0], (val, key) => {\n      fakeNode[key] = null;\n    });\n\n    return fakeNode;\n  }\n\n  /**\n   * Get the row index for the provided row object.\n   *\n   * @param {object} rowObj The row object.\n   * @returns {number} Row index.\n   */\n  getRowIndex(rowObj) {\n    return rowObj === null || rowObj === undefined ? null : this.cache.nodeInfo.get(rowObj).row;\n  }\n\n  /**\n   * Get the index of the provided row index/row object within its parent.\n   *\n   * @param {number|object} row Row index / row object.\n   * @returns {number}\n   */\n  getRowIndexWithinParent(row) {\n    let rowObj = null;\n\n    if (isNaN(row)) {\n      rowObj = row;\n    } else {\n      rowObj = this.getDataObject(row);\n    }\n\n    const parent = this.getRowParent(row);\n\n    if (parent === null || parent === undefined) {\n      return this.data.indexOf(rowObj);\n    }\n\n    return parent.__children.indexOf(rowObj);\n  }\n\n  /**\n   * Count all rows (including all parents and children).\n   *\n   * @returns {number}\n   */\n  countAllRows() {\n    const rootNodeMock = {\n      __children: this.data\n    };\n\n    return this.countChildren(rootNodeMock);\n  }\n\n  /**\n   * Count children of the provided parent.\n   *\n   * @param {object|number} parent Parent node.\n   * @returns {number} Children count.\n   */\n  countChildren(parent) {\n    let rowCount = 0;\n    let parentNode = parent;\n\n    if (!isNaN(parentNode)) {\n      parentNode = this.getDataObject(parentNode);\n    }\n\n    if (!parentNode || !parentNode.__children) {\n      return 0;\n    }\n\n    arrayEach(parentNode.__children, (elem) => {\n      rowCount += 1;\n\n      if (elem.__children) {\n        rowCount += this.countChildren(elem);\n      }\n    });\n\n    return rowCount;\n  }\n\n  /**\n   * Get the parent of the row at the provided index.\n   *\n   * @param {number|object} row Physical row index.\n   * @returns {object}\n   */\n  getRowParent(row) {\n    let rowObject;\n\n    if (isNaN(row)) {\n      rowObject = row;\n    } else {\n      rowObject = this.getDataObject(row);\n    }\n\n    return this.getRowObjectParent(rowObject);\n  }\n\n  /**\n   * Get the parent of the provided row object.\n   *\n   * @private\n   * @param {object} rowObject The row object (tree node).\n   * @returns {object|null}\n   */\n  getRowObjectParent(rowObject) {\n    if (!rowObject || typeof rowObject !== 'object') {\n      return null;\n    }\n\n    return this.cache.nodeInfo.get(rowObject).parent;\n  }\n\n  /**\n   * Get the nesting level for the row with the provided row index.\n   *\n   * @param {number} row Row index.\n   * @returns {number|null} Row level or null, when row doesn't exist.\n   */\n  getRowLevel(row) {\n    let rowObject = null;\n\n    if (isNaN(row)) {\n      rowObject = row;\n    } else {\n      rowObject = this.getDataObject(row);\n    }\n\n    return rowObject ? this.getRowObjectLevel(rowObject) : null;\n  }\n\n  /**\n   * Get the nesting level for the row with the provided row index.\n   *\n   * @private\n   * @param {object} rowObject Row object.\n   * @returns {number} Row level.\n   */\n  getRowObjectLevel(rowObject) {\n    return rowObject === null || rowObject === undefined ? null : this.cache.nodeInfo.get(rowObject).level;\n  }\n\n  /**\n   * Check if the provided row/row element has children.\n   *\n   * @param {number|object} row Row number or row element.\n   * @returns {boolean}\n   */\n  hasChildren(row) {\n    let rowObj = row;\n\n    if (!isNaN(rowObj)) {\n      rowObj = this.getDataObject(rowObj);\n    }\n\n    return !!(rowObj.__children && rowObj.__children.length);\n  }\n\n  /**\n   * Returns `true` if the row at the provided index has a parent.\n   *\n   * @param {number} index Row index.\n   * @returns {boolean} `true` if the row at the provided index has a parent, `false` otherwise.\n   */\n  isChild(index) {\n    return this.getRowParent(index) !== null;\n  }\n\n  /**\n   * Get child at a provided index from the parent element.\n   *\n   * @param {object} parent The parent row object.\n   * @param {number} index Index of the child element to be retrieved.\n   * @returns {object|null} The child element or `null` if the child doesn't exist.\n   */\n  getChild(parent, index) {\n    return parent.__children?.[index] || null;\n  }\n\n  /**\n   * Return `true` of the row at the provided index is located at the topmost level.\n   *\n   * @param {number} index Row index.\n   * @returns {boolean} `true` of the row at the provided index is located at the topmost level, `false` otherwise.\n   */\n  isRowHighestLevel(index) {\n    return !this.isChild(index);\n  }\n\n  /**\n   * Return `true` if the provided row index / row object represents a parent in the nested structure.\n   *\n   * @param {number|object} row Row index / row object.\n   * @returns {boolean} `true` if the row is a parent, `false` otherwise.\n   */\n  isParent(row) {\n    let rowObj = row;\n\n    if (!isNaN(rowObj)) {\n      rowObj = this.getDataObject(rowObj);\n    }\n\n    return rowObj && (!!rowObj.__children && rowObj.__children?.length !== 0);\n  }\n\n  /**\n   * Add a child to the provided parent. It's optional to add a row object as the \"element\".\n   *\n   * @param {object} parent The parent row object.\n   * @param {object} [element] The element to add as a child.\n   */\n  addChild(parent, element) {\n    let childElement = element;\n\n    this.hot.runHooks('beforeAddChild', parent, childElement);\n\n    let parentIndex = null;\n\n    if (parent) {\n      parentIndex = this.getRowIndex(parent);\n    }\n\n    this.hot.runHooks('beforeCreateRow', parentIndex + this.countChildren(parent) + 1, 1);\n    let functionalParent = parent;\n\n    if (!parent) {\n      functionalParent = this.mockParent();\n    }\n    if (!functionalParent.__children) {\n      functionalParent.__children = [];\n    }\n\n    if (!childElement) {\n      childElement = this.mockNode();\n    }\n\n    functionalParent.__children.push(childElement);\n\n    this.rewriteCache();\n\n    const newRowIndex = this.getRowIndex(childElement);\n\n    this.hot.rowIndexMapper.insertIndexes(newRowIndex, 1);\n\n    this.hot.runHooks('afterCreateRow', newRowIndex, 1);\n    this.hot.runHooks('afterAddChild', parent, childElement);\n  }\n\n  /**\n   * Add a child node to the provided parent at a specified index.\n   *\n   * @param {object} parent Parent node.\n   * @param {number} index Index to insert the child element at.\n   * @param {object} [element] Element (node) to insert.\n   */\n  addChildAtIndex(parent, index, element) {\n    let childElement = element;\n    let flattenedIndex;\n\n    if (!childElement) {\n      childElement = this.mockNode();\n    }\n\n    this.hot.runHooks('beforeAddChild', parent, childElement, index);\n\n    if (parent) {\n      const parentIndex = this.getRowIndex(parent);\n      const finalChildIndex = parentIndex + index + 1;\n\n      this.hot.runHooks('beforeCreateRow', finalChildIndex, 1);\n\n      parent.__children.splice(index, null, childElement);\n\n      this.rewriteCache();\n\n      this.plugin.disableCoreAPIModifiers();\n\n      this.hot.setSourceDataAtCell(\n        this.getRowIndexWithinParent(parent),\n        '__children',\n        parent.__children,\n        'NestedRows.addChildAtIndex'\n      );\n\n      this.hot.rowIndexMapper.insertIndexes(finalChildIndex, 1);\n\n      this.plugin.enableCoreAPIModifiers();\n\n      this.hot.runHooks('afterCreateRow', finalChildIndex, 1);\n\n      flattenedIndex = finalChildIndex;\n\n    } else {\n      this.plugin.disableCoreAPIModifiers();\n      this.hot.alter('insert_row_above', index, 1, 'NestedRows.addChildAtIndex');\n      this.plugin.enableCoreAPIModifiers();\n\n      flattenedIndex = this.getRowIndex(this.data[index]);\n    }\n\n    // Workaround for refreshing cache losing the reference to the mocked row.\n    childElement = this.getDataObject(flattenedIndex);\n\n    this.hot.runHooks('afterAddChild', parent, childElement, index);\n  }\n\n  /**\n   * Add a sibling element at the specified index.\n   *\n   * @param {number} index New element sibling's index.\n   * @param {('above'|'below')} where Direction in which the sibling is to be created.\n   */\n  addSibling(index, where = 'below') {\n    const translatedIndex = this.translateTrimmedRow(index);\n    const parent = this.getRowParent(translatedIndex);\n    const indexWithinParent = this.getRowIndexWithinParent(translatedIndex);\n\n    switch (where) {\n      case 'below':\n        this.addChildAtIndex(parent, indexWithinParent + 1, null);\n        break;\n      case 'above':\n        this.addChildAtIndex(parent, indexWithinParent, null);\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Detach the provided element from its parent and add it right after it.\n   *\n   * @param {object|Array} elements Row object or an array of selected coordinates.\n   * @param {boolean} [forceRender=true] If true (default), it triggers render after finished.\n   */\n  detachFromParent(elements, forceRender = true) {\n    let element = null;\n    const rowObjects = [];\n\n    if (Array.isArray(elements)) {\n      rangeEach(elements[0], elements[2], (i) => {\n        const translatedIndex = this.translateTrimmedRow(i);\n\n        rowObjects.push(this.getDataObject(translatedIndex));\n      });\n\n      rangeEach(0, rowObjects.length - 2, (i) => {\n        this.detachFromParent(rowObjects[i], false);\n      });\n\n      element = rowObjects[rowObjects.length - 1];\n    } else {\n      element = elements;\n    }\n\n    const childRowIndex = this.getRowIndex(element);\n    const childCount = this.countChildren(element);\n    const indexWithinParent = this.getRowIndexWithinParent(element);\n    const parent = this.getRowParent(element);\n    const grandparent = this.getRowParent(parent);\n    const grandparentRowIndex = this.getRowIndex(grandparent);\n    let movedElementRowIndex = null;\n\n    this.hot.runHooks('beforeDetachChild', parent, element);\n\n    if (indexWithinParent !== null && indexWithinParent !== undefined) {\n      const removedRowIndexes = Array.from(\n        new Array(childRowIndex + childCount + 1).keys()\n      ).splice(-1 * (childCount + 1));\n\n      this.hot.runHooks(\n        'beforeRemoveRow',\n        childRowIndex,\n        childCount + 1,\n        removedRowIndexes,\n        this.plugin.pluginName\n      );\n\n      parent.__children.splice(indexWithinParent, 1);\n\n      this.rewriteCache();\n\n      this.hot.runHooks(\n        'afterRemoveRow',\n        childRowIndex,\n        childCount + 1,\n        removedRowIndexes,\n        this.plugin.pluginName\n      );\n\n      if (grandparent) {\n        movedElementRowIndex = grandparentRowIndex + this.countChildren(grandparent);\n\n        const lastGrandparentChild = this.getChild(grandparent, this.countChildren(grandparent) - 1);\n        const lastGrandparentChildIndex = this.getRowIndex(lastGrandparentChild);\n\n        this.hot.runHooks('beforeCreateRow', lastGrandparentChildIndex + 1, childCount + 1, this.plugin.pluginName);\n\n        grandparent.__children.push(element);\n\n      } else {\n        movedElementRowIndex = this.hot.countRows() + 1;\n        this.hot.runHooks('beforeCreateRow', movedElementRowIndex - 2, childCount + 1, this.plugin.pluginName);\n\n        this.data.push(element);\n      }\n    }\n\n    this.rewriteCache();\n\n    this.hot.runHooks('afterCreateRow', movedElementRowIndex - 2, childCount + 1, this.plugin.pluginName);\n\n    this.hot.runHooks('afterDetachChild', parent, element, this.getRowIndex(element));\n\n    if (forceRender) {\n      this.hot.render();\n    }\n  }\n\n  /**\n   * Filter the data by the `logicRows` array.\n   *\n   * @private\n   * @param {number} index Index of the first row to remove.\n   * @param {number} amount Number of elements to remove.\n   * @param {Array} logicRows Array of indexes to remove.\n   */\n  filterData(index, amount, logicRows) {\n    // TODO: why are the first 2 arguments not used?\n\n    const elementsToRemove = [];\n\n    arrayEach(logicRows, (elem) => {\n      elementsToRemove.push(this.getDataObject(elem));\n    });\n\n    arrayEach(elementsToRemove, (elem) => {\n      const indexWithinParent = this.getRowIndexWithinParent(elem);\n      const tempParent = this.getRowParent(elem);\n\n      if (tempParent === null) {\n        this.data.splice(indexWithinParent, 1);\n      } else {\n        tempParent.__children.splice(indexWithinParent, 1);\n      }\n    });\n\n    this.rewriteCache();\n  }\n\n  /**\n   * Used to splice the source data. Needed to properly modify the nested structure, which wouldn't work with the\n   * default script.\n   *\n   * @private\n   * @param {number} index Physical index of the element at the splice beginning.\n   * @param {number} amount Number of elements to be removed.\n   * @param {object[]} elements Array of row objects to add.\n   */\n  spliceData(index, amount, elements) {\n    const previousElement = this.getDataObject(index - 1);\n    let newRowParent = null;\n    let indexWithinParent = index;\n\n    if (previousElement && previousElement.__children && previousElement.__children.length === 0) {\n      newRowParent = previousElement;\n      indexWithinParent = 0;\n\n    } else if (index < this.countAllRows()) {\n      newRowParent = this.getRowParent(index);\n      indexWithinParent = this.getRowIndexWithinParent(index);\n    }\n\n    if (newRowParent) {\n      if (elements) {\n        newRowParent.__children.splice(indexWithinParent, amount, ...elements);\n\n      } else {\n        newRowParent.__children.splice(indexWithinParent, amount);\n      }\n\n    } else if (elements) {\n      this.data.splice(indexWithinParent, amount, ...elements);\n\n    } else {\n      this.data.splice(indexWithinParent, amount);\n    }\n\n    this.rewriteCache();\n  }\n\n  /**\n   * Update the `__children` key of the upmost parent of the provided row object.\n   *\n   * @private\n   * @param {object} rowElement Row object.\n   */\n  syncRowWithRawSource(rowElement) {\n    let upmostParent = rowElement;\n    let tempParent = null;\n\n    do {\n      tempParent = this.getRowParent(tempParent);\n\n      if (tempParent !== null) {\n        upmostParent = tempParent;\n      }\n\n    } while (tempParent !== null);\n\n    this.plugin.disableCoreAPIModifiers();\n    this.hot.setSourceDataAtCell(\n      this.getRowIndex(upmostParent),\n      '__children',\n      upmostParent.__children,\n      'NestedRows.syncRowWithRawSource',\n    );\n    this.plugin.enableCoreAPIModifiers();\n  }\n\n  /* eslint-disable jsdoc/require-param */\n  /**\n   * Move a single row.\n   *\n   * @param {number} fromIndex Index of the row to be moved.\n   * @param {number} toIndex Index of the destination.\n   * @param {boolean} moveToCollapsed `true` if moving a row to a collapsed parent.\n   * @param {boolean} moveToLastChild `true` if moving a row to be a last child of the new parent.\n   */\n\n  /* eslint-enable jsdoc/require-param */\n  moveRow(fromIndex, toIndex, moveToCollapsed, moveToLastChild) {\n    const moveToLastRow = toIndex === this.hot.countRows();\n    const fromParent = this.getRowParent(fromIndex);\n    const indexInFromParent = this.getRowIndexWithinParent(fromIndex);\n    const elemToMove = fromParent.__children.slice(indexInFromParent, indexInFromParent + 1);\n    const movingUp = fromIndex > toIndex;\n    let toParent = moveToLastRow ? this.getRowParent(toIndex - 1) : this.getRowParent(toIndex);\n\n    if (toParent === null || toParent === undefined) {\n      toParent = this.getRowParent(toIndex - 1);\n    }\n\n    if (toParent === null || toParent === undefined) {\n      toParent = this.getDataObject(toIndex - 1);\n    }\n\n    if (!toParent) {\n      toParent = this.getDataObject(toIndex);\n      toParent.__children = [];\n\n    } else if (!toParent.__children) {\n      toParent.__children = [];\n    }\n\n    const indexInTargetParent = moveToLastRow || moveToCollapsed || moveToLastChild ?\n      toParent.__children.length : this.getRowIndexWithinParent(toIndex);\n    const sameParent = fromParent === toParent;\n\n    toParent.__children.splice(indexInTargetParent, 0, elemToMove[0]);\n    fromParent.__children.splice(indexInFromParent + (movingUp && sameParent ? 1 : 0), 1);\n\n    // Sync the changes in the cached data with the actual data stored in HOT.\n    this.syncRowWithRawSource(fromParent);\n\n    if (!sameParent) {\n      this.syncRowWithRawSource(toParent);\n    }\n  }\n\n  /**\n   * Translate the visual row index to the physical index, taking into consideration the state of collapsed rows.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  translateTrimmedRow(row) {\n    if (this.plugin.collapsingUI) {\n      return this.plugin.collapsingUI.translateTrimmedRow(row);\n    }\n\n    return row;\n  }\n\n  /**\n   * Translate the physical row index to the visual index, taking into consideration the state of collapsed rows.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number}\n   */\n  untranslateTrimmedRow(row) {\n    if (this.plugin.collapsingUI) {\n      return this.plugin.collapsingUI.untranslateTrimmedRow(row);\n    }\n\n    return row;\n  }\n}\n\nexport default DataManager;\n","import { stopImmediatePropagation } from '../../../helpers/dom/event';\nimport { arrayEach } from '../../../helpers/array';\nimport { rangeEach } from '../../../helpers/number';\nimport { hasClass } from '../../../helpers/dom/element';\nimport BaseUI from './_base';\nimport HeadersUI from './headers';\n\n/**\n * Class responsible for the UI for collapsing and expanding groups.\n *\n * @private\n * @class\n * @augments BaseUI\n */\nclass CollapsingUI extends BaseUI {\n  constructor(nestedRowsPlugin, hotInstance) {\n    super(nestedRowsPlugin, hotInstance);\n\n    /**\n     * Reference to the TrimRows plugin.\n     */\n    this.dataManager = this.plugin.dataManager;\n    this.collapsedRows = [];\n    this.collapsedRowsStash = {\n      stash: (forceRender = false) => {\n        this.lastCollapsedRows = this.collapsedRows.slice(0);\n\n        // Workaround for wrong indexes being set in the trimRows plugin\n        this.expandMultipleChildren(this.lastCollapsedRows, forceRender);\n      },\n      shiftStash: (baseIndex, targetIndex, delta = 1) => {\n        if (targetIndex === null || targetIndex === undefined) {\n          targetIndex = Infinity;\n        }\n\n        arrayEach(this.lastCollapsedRows, (elem, i) => {\n          if (elem >= baseIndex && elem < targetIndex) {\n            this.lastCollapsedRows[i] = elem + delta;\n          }\n        });\n      },\n      applyStash: (forceRender = true) => {\n        this.collapseMultipleChildren(this.lastCollapsedRows, forceRender);\n        this.lastCollapsedRows = undefined;\n      },\n      trimStash: (realElementIndex, amount) => {\n        rangeEach(realElementIndex, realElementIndex + amount - 1, (i) => {\n          const indexOfElement = this.lastCollapsedRows.indexOf(i);\n\n          if (indexOfElement > -1) {\n            this.lastCollapsedRows.splice(indexOfElement, 1);\n          }\n        });\n      }\n    };\n  }\n\n  /**\n   * Collapse the children of the row passed as an argument.\n   *\n   * @param {number|object} row The parent row.\n   * @param {boolean} [forceRender=true] Whether to render the table after the function ends.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   * @returns {Array}\n   */\n  collapseChildren(row, forceRender = true, doTrimming = true) {\n    const rowsToCollapse = [];\n    let rowObject = null;\n    let rowIndex = null;\n    let rowsToTrim = null;\n\n    if (isNaN(row)) {\n      rowObject = row;\n      rowIndex = this.dataManager.getRowIndex(rowObject);\n    } else {\n      rowObject = this.dataManager.getDataObject(row);\n      rowIndex = row;\n    }\n\n    if (this.dataManager.hasChildren(rowObject)) {\n      arrayEach(rowObject.__children, (elem) => {\n        rowsToCollapse.push(this.dataManager.getRowIndex(elem));\n      });\n    }\n\n    rowsToTrim = this.collapseRows(rowsToCollapse, true, false);\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n\n    if (this.collapsedRows.indexOf(rowIndex) === -1) {\n      this.collapsedRows.push(rowIndex);\n    }\n\n    return rowsToTrim;\n  }\n\n  /**\n   * Collapse multiple children.\n   *\n   * @param {Array} rows Rows to collapse (including their children).\n   * @param {boolean} [forceRender=true] `true` if the table should be rendered after finishing the function.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   */\n  collapseMultipleChildren(rows, forceRender = true, doTrimming = true) {\n    const rowsToTrim = [];\n\n    arrayEach(rows, (elem) => {\n      rowsToTrim.push(...this.collapseChildren(elem, false, false));\n    });\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n  }\n\n  /**\n   * Collapse a single row.\n   *\n   * @param {number} rowIndex Index of the row to collapse.\n   * @param {boolean} [recursive=true] `true` if it should collapse the row's children.\n   */\n  collapseRow(rowIndex, recursive = true) {\n    this.collapseRows([rowIndex], recursive);\n  }\n\n  /**\n   * Collapse multiple rows.\n   *\n   * @param {Array} rowIndexes Array of row indexes to collapse.\n   * @param {boolean} [recursive=true] `true` if it should collapse the rows' children.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   * @returns {Array} Rows prepared for trimming (or trimmed, if doTrimming == true).\n   */\n  collapseRows(rowIndexes, recursive = true, doTrimming = false) {\n    const rowsToTrim = [];\n\n    arrayEach(rowIndexes, (elem) => {\n      rowsToTrim.push(elem);\n\n      if (recursive) {\n        this.collapseChildRows(elem, rowsToTrim);\n      }\n    });\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n\n    return rowsToTrim;\n  }\n\n  /**\n   * Collapse child rows of the row at the provided index.\n   *\n   * @param {number} parentIndex Index of the parent node.\n   * @param {Array} [rowsToTrim=[]] Array of rows to trim. Defaults to an empty array.\n   * @param {boolean} [recursive] `true` if the collapsing process should be recursive.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   */\n  collapseChildRows(parentIndex, rowsToTrim = [], recursive, doTrimming = false) {\n    if (this.dataManager.hasChildren(parentIndex)) {\n      const parentObject = this.dataManager.getDataObject(parentIndex);\n\n      arrayEach(parentObject.__children, (elem) => {\n        const elemIndex = this.dataManager.getRowIndex(elem);\n\n        rowsToTrim.push(elemIndex);\n        this.collapseChildRows(elemIndex, rowsToTrim);\n      });\n    }\n\n    if (doTrimming) {\n      this.trimRows(rowsToTrim);\n    }\n  }\n\n  /**\n   * Expand a single row.\n   *\n   * @param {number} rowIndex Index of the row to expand.\n   * @param {boolean} [recursive=true] `true` if it should expand the row's children recursively.\n   */\n  expandRow(rowIndex, recursive = true) {\n    this.expandRows([rowIndex], recursive);\n  }\n\n  /**\n   * Expand multiple rows.\n   *\n   * @param {Array} rowIndexes Array of indexes of the rows to expand.\n   * @param {boolean} [recursive=true] `true` if it should expand the rows' children recursively.\n   * @param {boolean} [doTrimming=true] I determine whether collapsing should envolve trimming rows.\n   * @returns {Array} Array of row indexes to be untrimmed.\n   */\n  expandRows(rowIndexes, recursive = true, doTrimming = false) {\n    const rowsToUntrim = [];\n\n    arrayEach(rowIndexes, (elem) => {\n      rowsToUntrim.push(elem);\n\n      if (recursive) {\n        this.expandChildRows(elem, rowsToUntrim);\n      }\n    });\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n\n    return rowsToUntrim;\n  }\n\n  /**\n   * Expand child rows of the provided index.\n   *\n   * @param {number} parentIndex Index of the parent row.\n   * @param {Array} [rowsToUntrim=[]] Array of the rows to be untrimmed.\n   * @param {boolean} [recursive] `true` if it should expand the rows' children recursively.\n   * @param {boolean} [doTrimming=false] I determine whether collapsing should envolve trimming rows.\n   */\n  expandChildRows(parentIndex, rowsToUntrim = [], recursive, doTrimming = false) {\n    if (this.dataManager.hasChildren(parentIndex)) {\n      const parentObject = this.dataManager.getDataObject(parentIndex);\n\n      arrayEach(parentObject.__children, (elem) => {\n        if (!this.isAnyParentCollapsed(elem)) {\n          const elemIndex = this.dataManager.getRowIndex(elem);\n\n          rowsToUntrim.push(elemIndex);\n          this.expandChildRows(elemIndex, rowsToUntrim);\n        }\n      });\n    }\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n  }\n\n  /**\n   * Expand the children of the row passed as an argument.\n   *\n   * @param {number|object} row Parent row.\n   * @param {boolean} [forceRender=true] Whether to render the table after the function ends.\n   * @param {boolean} [doTrimming=true] If set to `true`, the trimming will be applied when the function finishes.\n   * @returns {number[]}\n   */\n  expandChildren(row, forceRender = true, doTrimming = true) {\n    const rowsToExpand = [];\n    let rowObject = null;\n    let rowIndex = null;\n    let rowsToUntrim = null;\n\n    if (isNaN(row)) {\n      rowObject = row;\n      rowIndex = this.dataManager.getRowIndex(row);\n    } else {\n      rowObject = this.dataManager.getDataObject(row);\n      rowIndex = row;\n    }\n\n    this.collapsedRows.splice(this.collapsedRows.indexOf(rowIndex), 1);\n\n    if (this.dataManager.hasChildren(rowObject)) {\n      arrayEach(rowObject.__children, (elem) => {\n        const childIndex = this.dataManager.getRowIndex(elem);\n\n        rowsToExpand.push(childIndex);\n      });\n    }\n\n    rowsToUntrim = this.expandRows(rowsToExpand, true, false);\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n\n    return rowsToUntrim;\n  }\n\n  /**\n   * Expand multiple rows' children.\n   *\n   * @param {Array} rows Array of rows which children are about to be expanded.\n   * @param {boolean} [forceRender=true] `true` if the table should render after finishing the function.\n   * @param {boolean} [doTrimming=true] `true` if the rows should be untrimmed after finishing the function.\n   */\n  expandMultipleChildren(rows, forceRender = true, doTrimming = true) {\n    const rowsToUntrim = [];\n\n    arrayEach(rows, (elem) => {\n      rowsToUntrim.push(...this.expandChildren(elem, false, false));\n    });\n\n    if (doTrimming) {\n      this.untrimRows(rowsToUntrim);\n    }\n\n    if (forceRender) {\n      this.renderAndAdjust();\n    }\n  }\n\n  /**\n   * Collapse all collapsable rows.\n   */\n  collapseAll() {\n    const data = this.dataManager.getData();\n    const parentsToCollapse = [];\n\n    arrayEach(data, (elem) => {\n      if (this.dataManager.hasChildren(elem)) {\n        parentsToCollapse.push(elem);\n      }\n    });\n\n    this.collapseMultipleChildren(parentsToCollapse);\n\n    this.renderAndAdjust();\n  }\n\n  /**\n   * Expand all collapsable rows.\n   */\n  expandAll() {\n    const data = this.dataManager.getData();\n    const parentsToExpand = [];\n\n    arrayEach(data, (elem) => {\n      if (this.dataManager.hasChildren(elem)) {\n        parentsToExpand.push(elem);\n      }\n    });\n\n    this.expandMultipleChildren(parentsToExpand);\n\n    this.renderAndAdjust();\n  }\n\n  /**\n   * Trim rows.\n   *\n   * @param {Array} rows Physical row indexes.\n   */\n  trimRows(rows) {\n    this.hot.batchExecution(() => {\n      arrayEach(rows, (physicalRow) => {\n        this.plugin.collapsedRowsMap.setValueAtIndex(physicalRow, true);\n      });\n    }, true);\n  }\n\n  /**\n   * Untrim rows.\n   *\n   * @param {Array} rows Physical row indexes.\n   */\n  untrimRows(rows) {\n    this.hot.batchExecution(() => {\n      arrayEach(rows, (physicalRow) => {\n        this.plugin.collapsedRowsMap.setValueAtIndex(physicalRow, false);\n      });\n    }, true);\n  }\n\n  /**\n   * Check if all child rows are collapsed.\n   *\n   * @private\n   * @param {number|object|null} row The parent row. `null` for the top level.\n   * @returns {boolean}\n   */\n  areChildrenCollapsed(row) {\n    let rowObj = isNaN(row) ? row : this.dataManager.getDataObject(row);\n    let allCollapsed = true;\n\n    // Checking the children of the top-level \"parent\"\n    if (rowObj === null) {\n      rowObj = {\n        __children: this.dataManager.data\n      };\n\n    }\n\n    if (this.dataManager.hasChildren(rowObj)) {\n      arrayEach(rowObj.__children, (elem) => {\n        const rowIndex = this.dataManager.getRowIndex(elem);\n\n        if (!this.plugin.collapsedRowsMap.getValueAtIndex(rowIndex)) {\n          allCollapsed = false;\n\n          return false;\n        }\n      });\n    }\n\n    return allCollapsed;\n  }\n\n  /**\n   * Check if any of the row object parents are collapsed.\n   *\n   * @private\n   * @param {object} rowObj Row object.\n   * @returns {boolean}\n   */\n  isAnyParentCollapsed(rowObj) {\n    let parent = rowObj;\n\n    while (parent !== null) {\n      parent = this.dataManager.getRowParent(parent);\n      const parentIndex = this.dataManager.getRowIndex(parent);\n\n      if (this.collapsedRows.indexOf(parentIndex) > -1) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Toggle collapsed state. Callback for the `beforeOnCellMousedown` hook.\n   *\n   * @private\n   * @param {MouseEvent} event `mousedown` event.\n   * @param {object} coords Coordinates of the clicked cell/header.\n   */\n  toggleState(event, coords) {\n    if (coords.col >= 0) {\n      return;\n    }\n\n    const row = this.translateTrimmedRow(coords.row);\n\n    if (hasClass(event.target, HeadersUI.CSS_CLASSES.button)) {\n      if (this.areChildrenCollapsed(row)) {\n        this.expandChildren(row);\n      } else {\n        this.collapseChildren(row);\n      }\n\n      stopImmediatePropagation(event);\n    }\n  }\n\n  /**\n   * Translate visual row after trimming to physical base row index.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number} Base row index.\n   */\n  translateTrimmedRow(row) {\n    return this.hot.toPhysicalRow(row);\n  }\n\n  /**\n   * Translate physical row after trimming to visual base row index.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @returns {number} Base row index.\n   */\n  untranslateTrimmedRow(row) {\n    return this.hot.toVisualRow(row);\n  }\n\n  /**\n   * Helper function to render the table and call the `adjustElementsSize` method.\n   *\n   * @private\n   */\n  renderAndAdjust() {\n    this.hot.render();\n\n    // Dirty workaround to prevent scroll height not adjusting to the table height. Needs refactoring in the future.\n    this.hot.view.adjustElementsSize();\n  }\n}\n\nexport default CollapsingUI;\n","/**\n * Base class for the Nested Rows' UI sub-classes.\n *\n * @private\n * @class\n */\nclass BaseUI {\n  /**\n   * Instance of Handsontable.\n   *\n   * @type {Core}\n   */\n  hot;\n  /**\n   * Reference to the main plugin instance.\n   */\n  plugin;\n\n  constructor(pluginInstance, hotInstance) {\n    this.hot = hotInstance;\n    this.plugin = pluginInstance;\n  }\n}\n\nexport default BaseUI;\n","import { arrayEach } from '../../../helpers/array';\nimport { rangeEach } from '../../../helpers/number';\nimport { addClass, setAttribute } from '../../../helpers/dom/element';\nimport BaseUI from './_base';\nimport { A11Y_EXPANDED, A11Y_HIDDEN } from '../../../helpers/a11y';\n\n/**\n * Class responsible for the UI in the Nested Rows' row headers.\n *\n * @private\n * @class HeadersUI\n * @augments BaseUI\n */\nclass HeadersUI extends BaseUI {\n  /**\n   * CSS classes used in the row headers.\n   *\n   * @type {object}\n   */\n  static get CSS_CLASSES() {\n    return {\n      indicatorContainer: 'ht_nestingLevels',\n      parent: 'ht_nestingParent',\n      indicator: 'ht_nestingLevel',\n      emptyIndicator: 'ht_nestingLevel_empty',\n      button: 'ht_nestingButton',\n      expandButton: 'ht_nestingExpand',\n      collapseButton: 'ht_nestingCollapse'\n    };\n  }\n\n  constructor(nestedRowsPlugin, hotInstance) {\n    super(nestedRowsPlugin, hotInstance);\n    /**\n     * Reference to the DataManager instance connected with the Nested Rows plugin.\n     *\n     * @type {DataManager}\n     */\n    this.dataManager = this.plugin.dataManager;\n    // /**\n    //  * Level cache array.\n    //  *\n    //  * @type {Array}\n    //  */\n    // this.levelCache = this.dataManager.cache.levels;\n    /**\n     * Reference to the CollapsingUI instance connected with the Nested Rows plugin.\n     *\n     * @type {CollapsingUI}\n     */\n    this.collapsingUI = this.plugin.collapsingUI;\n    /**\n     * Cache for the row headers width.\n     *\n     * @type {null|number}\n     */\n    this.rowHeaderWidthCache = null;\n  }\n\n  /**\n   * Append nesting indicators and buttons to the row headers.\n   *\n   * @private\n   * @param {number} row Row index.\n   * @param {HTMLElement} TH TH 3element.\n   */\n  appendLevelIndicators(row, TH) {\n    const rowIndex = this.hot.toPhysicalRow(row);\n    const rowLevel = this.dataManager.getRowLevel(rowIndex);\n    const rowObject = this.dataManager.getDataObject(rowIndex);\n    const innerDiv = TH.getElementsByTagName('DIV')[0];\n    const innerSpan = innerDiv.querySelector('span.rowHeader');\n    const previousIndicators = innerDiv.querySelectorAll('[class^=\"ht_nesting\"]');\n    const ariaEnabled = this.hot.getSettings().ariaTags;\n\n    arrayEach(previousIndicators, (elem) => {\n      if (elem) {\n        innerDiv.removeChild(elem);\n      }\n    });\n\n    addClass(TH, HeadersUI.CSS_CLASSES.indicatorContainer);\n\n    if (rowLevel) {\n      const { rootDocument } = this.hot;\n      const initialContent = innerSpan.cloneNode(true);\n\n      innerDiv.innerHTML = '';\n\n      rangeEach(0, rowLevel - 1, () => {\n        const levelIndicator = rootDocument.createElement('SPAN');\n\n        addClass(levelIndicator, HeadersUI.CSS_CLASSES.emptyIndicator);\n        innerDiv.appendChild(levelIndicator);\n      });\n\n      innerDiv.appendChild(initialContent);\n    }\n\n    if (this.dataManager.hasChildren(rowObject)) {\n      const buttonsContainer = this.hot.rootDocument.createElement('DIV');\n\n      if (ariaEnabled) {\n        setAttribute(buttonsContainer, [\n          A11Y_HIDDEN(),\n        ]);\n      }\n\n      addClass(TH, HeadersUI.CSS_CLASSES.parent);\n\n      if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {\n        addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);\n\n        if (ariaEnabled) {\n          setAttribute(TH, [\n            A11Y_EXPANDED(false)\n          ]);\n        }\n\n      } else {\n        addClass(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);\n\n        if (ariaEnabled) {\n          setAttribute(TH, [\n            A11Y_EXPANDED(true)\n          ]);\n        }\n      }\n\n      innerDiv.appendChild(buttonsContainer);\n    }\n  }\n\n  /**\n   * Update the row header width according to number of levels in the dataset.\n   *\n   * @private\n   * @param {number} deepestLevel Cached deepest level of nesting.\n   */\n  updateRowHeaderWidth(deepestLevel) {\n    let deepestLevelIndex = deepestLevel;\n\n    if (!deepestLevelIndex) {\n      deepestLevelIndex = this.dataManager.cache.levelCount;\n    }\n\n    this.rowHeaderWidthCache = Math.max(50, 11 + (10 * deepestLevelIndex) + 25);\n\n    this.hot.render();\n  }\n}\n\nexport default HeadersUI;\n","import { rangeEach } from '../../../helpers/number';\nimport { arrayEach } from '../../../helpers/array';\nimport * as C from '../../../i18n/constants';\nimport BaseUI from './_base';\n\n/**\n * Class responsible for the Context Menu entries for the Nested Rows plugin.\n *\n * @private\n * @class ContextMenuUI\n * @augments BaseUI\n */\nclass ContextMenuUI extends BaseUI {\n  /**\n   * Reference to the DataManager instance connected with the Nested Rows plugin.\n   *\n   * @type {DataManager}\n   */\n  dataManager = this.plugin.dataManager;\n\n  #menuEntries = {\n    row_above: (key, selection) => {\n      const lastSelection = selection[selection.length - 1];\n\n      this.dataManager.addSibling(lastSelection.start.row, 'above');\n    },\n    row_below: (key, selection) => {\n      const lastSelection = selection[selection.length - 1];\n\n      this.dataManager.addSibling(lastSelection.start.row, 'below');\n    }\n  };\n\n  /**\n   * Append options to the context menu. (Propagated from the `afterContextMenuDefaultOptions` hook callback)\n   * f.\n   *\n   * @private\n   * @param {object} defaultOptions Default context menu options.\n   * @returns {*}\n   */\n  appendOptions(defaultOptions) {\n    const newEntries = [\n      {\n        key: 'add_child',\n        name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD);\n        },\n        callback: () => {\n          const translatedRowIndex = this.dataManager.translateTrimmedRow(this.hot.getSelectedLast()[0]);\n          const parent = this.dataManager.getDataObject(translatedRowIndex);\n\n          this.dataManager.addChild(parent);\n        },\n        disabled: () => {\n          const selected = this.hot.getSelectedLast();\n\n          return !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() ||\n            this.hot.countRows() >= this.hot.getSettings().maxRows;\n        }\n      },\n      {\n        key: 'detach_from_parent',\n        name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD);\n        },\n        callback: () => {\n          this.dataManager.detachFromParent(this.hot.getSelectedLast());\n        },\n        disabled: () => {\n          const selected = this.hot.getSelectedLast();\n          const translatedRowIndex = this.dataManager.translateTrimmedRow(selected[0]);\n          const parent = this.dataManager.getRowParent(translatedRowIndex);\n\n          return !parent || !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() ||\n            this.hot.countRows() >= this.hot.getSettings().maxRows;\n        }\n      },\n      {\n        name: '---------',\n      },\n    ];\n\n    rangeEach(0, defaultOptions.items.length - 1, (i) => {\n      if (i === 0) {\n        arrayEach(newEntries, (val, j) => {\n          defaultOptions.items.splice(i + j, 0, val);\n        });\n\n        return false;\n      }\n    });\n\n    return this.modifyRowInsertingOptions(defaultOptions);\n  }\n\n  /**\n   * Modify how the row inserting options work.\n   *\n   * @private\n   * @param {object} defaultOptions Default context menu items.\n   * @returns {*}\n   */\n  modifyRowInsertingOptions(defaultOptions) {\n    rangeEach(0, defaultOptions.items.length - 1, (i) => {\n      const option = this.#menuEntries[defaultOptions.items[i].key];\n\n      if (option !== null && option !== undefined) {\n        defaultOptions.items[i].callback = option;\n      }\n    });\n\n    return defaultOptions;\n  }\n}\n\nexport default ContextMenuUI;\n","import { isUndefined } from '../../../helpers/mixed';\nimport { warn } from '../../../helpers/console';\nimport { toSingleLine } from '../../../helpers/templateLiteralTag';\n\n/**\n * Helper class for the row-move-related operations.\n *\n * @private\n * @class RowMoveController\n */\nexport default class RowMoveController {\n  /**\n   * Reference to the Nested Rows plugin instance.\n   *\n   * @type {NestedRows}\n   */\n  plugin;\n  /**\n   * Reference to the Handsontable instance.\n   *\n   * @type {Handsontable.Core}\n   */\n  hot;\n  /**\n   * Reference to the Data Manager class instance.\n   *\n   * @type {DataManager}\n   */\n  dataManager;\n  /**\n   * Reference to the Collapsing UI class instance.\n   *\n   * @type {CollapsingUI}\n   */\n  collapsingUI;\n\n  constructor(plugin) {\n    this.plugin = plugin;\n    this.hot = plugin.hot;\n    this.dataManager = plugin.dataManager;\n    this.collapsingUI = plugin.collapsingUI;\n  }\n\n  /**\n   * `beforeRowMove` hook callback.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n   *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n   *   are going to drop the moved elements. To check visualization of drop index please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @param {boolean} movePossible Indicates if it's possible to move rows to the desired position.\n   * @fires Hooks#afterRowMove\n   * @returns {boolean}\n   */\n  onBeforeRowMove(rows, finalIndex, dropIndex, movePossible) {\n    const improperUsage = this.displayAPICompatibilityWarning({ rows, finalIndex, dropIndex, movePossible });\n\n    if (improperUsage) {\n      return false;\n    }\n\n    this.movedToCollapsed = false;\n    const dropToLastRow = dropIndex === this.hot.countRows();\n    const physicalDropIndex = dropToLastRow ?\n      this.hot.countSourceRows() :\n      this.dataManager.translateTrimmedRow(dropIndex);\n    let allowMove = true;\n    const physicalStartIndexes = rows.map((rowIndex) => {\n      // Don't do the logic for the rest of the rows, as it's bound to fail anyway.\n      if (!allowMove) {\n        return false;\n      }\n\n      const physicalRowIndex = this.dataManager.translateTrimmedRow(rowIndex);\n\n      allowMove = this.shouldAllowMoving(physicalRowIndex, physicalDropIndex);\n\n      return physicalRowIndex;\n    });\n    const willDataChange = physicalStartIndexes.indexOf(physicalDropIndex) === -1;\n\n    if (!allowMove || !willDataChange) {\n      return false;\n    }\n\n    const baseParent = this.getBaseParent(physicalStartIndexes);\n    const targetParent = this.getTargetParent(dropToLastRow, physicalDropIndex);\n    const sameParent = baseParent === targetParent;\n\n    this.movedToCollapsed = this.collapsingUI.areChildrenCollapsed(targetParent);\n\n    // Stash the current state of collapsed rows\n    this.collapsingUI.collapsedRowsStash.stash();\n\n    this.shiftCollapsibleParentsLocations(physicalStartIndexes, physicalDropIndex, sameParent);\n\n    this.moveRows(physicalStartIndexes, physicalDropIndex, targetParent);\n\n    this.dataManager.rewriteCache();\n\n    this.moveCellsMeta(physicalStartIndexes, physicalDropIndex);\n\n    this.collapsingUI.collapsedRowsStash.applyStash(false);\n\n    // TODO: Trying to mock real work of the `ManualRowMove` plugin. It was blocked by returning `false` below.\n    this.hot.runHooks('afterRowMove',\n      rows, finalIndex, dropIndex, movePossible, movePossible && this.isRowOrderChanged(rows, finalIndex));\n\n    // Not necessary - added to keep compatibility with other plugins (namely: columnSummary).\n    this.hot.render();\n\n    this.selectCells(rows, dropIndex);\n\n    return false;\n  }\n\n  /**\n   * Display a `dragRows`/`moveRows` method compatibility warning if needed.\n   *\n   * @param {object} beforeMoveRowHookArgs A set of arguments from the `beforeMoveRow` hook.\n   * @returns {boolean} `true` if is a result of an improper usage of the moving API.\n   */\n  displayAPICompatibilityWarning(beforeMoveRowHookArgs) {\n    const {\n      rows,\n      finalIndex,\n      dropIndex,\n      movePossible\n    } = beforeMoveRowHookArgs;\n    let shouldTerminate = false;\n\n    if (isUndefined(dropIndex)) {\n      warn(toSingleLine`Since version 8.0.0 of the Handsontable the 'moveRows' method isn't used for moving rows\\x20\n      when the NestedRows plugin is enabled. Please use the 'dragRows' method instead.`);\n\n      // TODO: Trying to mock real work of the `ManualRowMove` plugin. It was blocked by returning `false` below.\n      this.hot.runHooks('afterRowMove', rows, finalIndex, dropIndex, movePossible, false);\n\n      shouldTerminate = true;\n    }\n\n    return shouldTerminate;\n  }\n\n  /**\n   * Check if the moving action should be allowed.\n   *\n   * @param {number} physicalRowIndex Physical start row index.\n   * @param {number} physicalDropIndex Physical drop index.\n   * @returns {boolean} `true` if it should continue with the moving action.\n   */\n  shouldAllowMoving(physicalRowIndex, physicalDropIndex) {\n    /*\n       We can't move rows when any of them is:\n       - a parent\n       - a top-level element\n       - is being moved to the top level\n       - is being moved to the position of any of the moved rows (not changing position)\n    */\n\n    return !(\n      this.dataManager.isParent(physicalRowIndex) ||\n      this.dataManager.isRowHighestLevel(physicalRowIndex) ||\n      physicalRowIndex === physicalDropIndex ||\n      physicalDropIndex === 0\n    );\n  }\n\n  /**\n   * Get the base row parent.\n   *\n   * @param {number} physicalStartIndexes Physical start row index.\n   * @returns {object|null} The base row parent.\n   */\n  getBaseParent(physicalStartIndexes) {\n    return this.dataManager.getRowParent(physicalStartIndexes[0]);\n  }\n\n  /**\n   * Get the target row parent.\n   *\n   * @param {boolean} dropToLastRow `true` if the row is moved to the last row of the table.\n   * @param {number} physicalDropIndex Physical drop row index.\n   * @returns {object|null} The target row parent.\n   */\n  getTargetParent(dropToLastRow, physicalDropIndex) {\n    let targetParent = this.dataManager.getRowParent(dropToLastRow ? physicalDropIndex - 1 : physicalDropIndex);\n\n    // If we try to move an element to the place of a top-level parent, snap the element to the previous top-level\n    // parent's children instead\n    if (targetParent === null || targetParent === undefined) {\n      targetParent = this.dataManager.getRowParent(physicalDropIndex - 1);\n    }\n\n    return targetParent;\n  }\n\n  /**\n   * Shift the cached collapsible rows position according to the move action.\n   *\n   * @param {number[]} physicalStartIndexes Physical start row indexes.\n   * @param {number} physicalDropIndex Physical drop index.\n   * @param {boolean} sameParent `true` if the row's being moved between siblings of the same parent.\n   */\n  shiftCollapsibleParentsLocations(physicalStartIndexes, physicalDropIndex, sameParent) {\n    if (!sameParent) {\n      if (Math.max(...physicalStartIndexes) <= physicalDropIndex) {\n        this.collapsingUI.collapsedRowsStash.shiftStash(physicalStartIndexes[0], physicalDropIndex,\n          (-1) * physicalStartIndexes.length);\n\n      } else {\n        this.collapsingUI.collapsedRowsStash.shiftStash(physicalDropIndex, physicalStartIndexes[0],\n          physicalStartIndexes.length);\n      }\n    }\n  }\n\n  /**\n   * Move the rows at the provided coordinates.\n   *\n   * @param {number[]} physicalStartIndexes Physical indexes of the rows about to be moved.\n   * @param {number} physicalDropIndex Physical drop index.\n   * @param {object} targetParent Parent of the destination row.\n   */\n  moveRows(physicalStartIndexes, physicalDropIndex, targetParent) {\n    const moveToLastChild = physicalDropIndex === this.dataManager.getRowIndex(targetParent) +\n      this.dataManager.countChildren(targetParent) + 1;\n\n    this.hot.batchRender(() => {\n      physicalStartIndexes.forEach((physicalStartIndex) => {\n        this.dataManager.moveRow(physicalStartIndex, physicalDropIndex, this.movedToCollapsed, moveToLastChild);\n      });\n    });\n  }\n\n  /**\n   * Move the cell meta for multiple rows.\n   *\n   * @param {number[]} baseIndexes Array of indexes for the rows being moved.\n   * @param {number} targetIndex Index of the destination of the move.\n   */\n  moveCellsMeta(baseIndexes, targetIndex) {\n    const rowsOfMeta = [];\n    const movingDown = Math.max(...baseIndexes) < targetIndex;\n\n    baseIndexes.forEach((baseIndex) => {\n      rowsOfMeta.push(this.hot.getCellMetaAtRow(baseIndex));\n    });\n\n    this.hot.spliceCellsMeta(baseIndexes[0], baseIndexes.length);\n\n    this.hot.spliceCellsMeta(targetIndex - (movingDown ? rowsOfMeta.length : 0), 0, ...rowsOfMeta);\n  }\n\n  /**\n   * Select cells after the move.\n   *\n   * @param {Array} rows Array of visual row indexes to be moved.\n   * @param {undefined|number} dropIndex Visual row index, being a drop index for the moved rows. Points to where we\n   *   are going to drop the moved elements. To check visualization of drop index please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   */\n  selectCells(rows, dropIndex) {\n    const rowsLen = rows.length;\n    let startRow = 0;\n    let endRow = 0;\n    let selection = null;\n    let lastColIndex = null;\n\n    if (this.movedToCollapsed) {\n      let physicalDropIndex = null;\n\n      if (rows[rowsLen - 1] < dropIndex) {\n        physicalDropIndex = this.dataManager.translateTrimmedRow(dropIndex - rowsLen);\n\n      } else {\n        physicalDropIndex = this.dataManager.translateTrimmedRow(dropIndex);\n      }\n\n      const parentObject = this.dataManager.getRowParent(\n        physicalDropIndex === null ? this.hot.countSourceRows() - 1 : physicalDropIndex - 1\n      );\n      const parentIndex = this.dataManager.getRowIndex(parentObject);\n\n      startRow = this.dataManager.untranslateTrimmedRow(parentIndex);\n      endRow = startRow;\n\n    } else if (rows[rowsLen - 1] < dropIndex) {\n      endRow = dropIndex - 1;\n      startRow = endRow - rowsLen + 1;\n\n    } else {\n      startRow = dropIndex;\n      endRow = startRow + rowsLen - 1;\n    }\n\n    selection = this.hot.selection;\n    lastColIndex = this.hot.countCols() - 1;\n\n    selection.setRangeStart(this.hot._createCellCoords(startRow, 0));\n    selection.setRangeEnd(this.hot._createCellCoords(endRow, lastColIndex), true);\n  }\n\n  // TODO: Reimplementation of function which is inside the `ManualRowMove` plugin.\n  /**\n   * Indicates if order of rows was changed.\n   *\n   * @param {Array} movedRows Array of visual row indexes to be moved.\n   * @param {number} finalIndex Visual row index, being a start index for the moved rows. Points to where the elements\n   *   will be placed after the moving action. To check the visualization of the final index, please take a look at\n   *   [documentation](@/guides/rows/row-moving/row-moving.md).\n   * @returns {boolean}\n   */\n  isRowOrderChanged(movedRows, finalIndex) {\n    return movedRows.some((row, nrOfMovedElement) => row - nrOfMovedElement !== finalIndex);\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport {};","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  PersistentState,\n} from './persistentState';\n","import { BasePlugin } from '../base';\nimport Storage from './storage';\nimport Hooks from '../../pluginHooks';\n\nHooks.getSingleton().register('persistentStateSave');\nHooks.getSingleton().register('persistentStateLoad');\nHooks.getSingleton().register('persistentStateReset');\n\nexport const PLUGIN_KEY = 'persistentState';\nexport const PLUGIN_PRIORITY = 0;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin PersistentState\n * @class PersistentState\n *\n * @description\n * Save the state of column sorting, column positions and column sizes in local storage to preserve table state\n * between page reloads.\n *\n * In order to enable data storage mechanism, {@link Options#persistentState} option must be set to `true`.\n *\n * When persistentState is enabled it exposes 3 hooks:\n * - {@link Hooks#persistentStateSave} - Saves value under given key in browser local storage.\n * - {@link Hooks#persistentStateLoad} - Loads value, saved under given key, from browser local storage. The loaded\n * value will be saved in `saveTo.value`.\n * - {@link Hooks#persistentStateReset} - Clears the value saved under key. If no key is given, all values associated\n * with table will be cleared.\n *\n * __Note:__ The main reason behind using `persistentState` hooks rather than regular LocalStorage API is that it\n * ensures separation of data stored by multiple Handsontable instances. In other words, if you have two (or more)\n * instances of Handsontable on one page, data saved by one instance won't be accessible by the second instance.\n * Those two instances can store data under the same key and no data would be overwritten.\n *\n * __Important:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`.\n *\n */\nexport class PersistentState extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Instance of {@link Storage}.\n   *\n   * @private\n   * @type {Storage}\n   */\n  storage;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link PersistentState#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    if (!this.storage) {\n      this.storage = new Storage(this.hot.rootElement.id, this.hot.rootWindow);\n    }\n\n    this.addHook('persistentStateSave', (key, value) => this.saveValue(key, value));\n    this.addHook('persistentStateLoad', (key, saveTo) => this.loadValue(key, saveTo));\n    this.addHook('persistentStateReset', () => this.resetValue());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.storage = undefined;\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`persistentState`](@/api/options.md#persistentstate)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Loads the value from local storage.\n   *\n   * @param {string} key Storage key.\n   * @param {object} saveTo Saved value from local storage.\n   */\n  loadValue(key, saveTo) {\n    saveTo.value = this.storage.loadValue(key);\n  }\n\n  /**\n   * Saves the data to local storage.\n   *\n   * @param {string} key Storage key.\n   * @param {Mixed} value Value to save.\n   */\n  saveValue(key, value) {\n    this.storage.saveValue(key, value);\n  }\n\n  /**\n   * Resets the data or all data from local storage.\n   *\n   * @param {string} key [optional] Storage key.\n   */\n  resetValue(key) {\n    if (typeof key === 'undefined') {\n      this.storage.resetAll();\n\n    } else {\n      this.storage.reset(key);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import { arrayEach } from '../../helpers/array';\n\n/**\n * @private\n * @class Storage\n */\nclass Storage {\n  /**\n   * Reference to proper window.\n   *\n   * @type {Window}\n   */\n  rootWindow;\n  /**\n   * Prefix for key (id element).\n   *\n   * @type {string}\n   */\n  prefix;\n\n  /**\n   * Saved keys.\n   *\n   * @type {Array}\n   */\n  savedKeys = [];\n\n  // eslint-disable-next-line no-restricted-globals\n  constructor(prefix, rootWindow = window) {\n    this.rootWindow = rootWindow;\n    this.prefix = prefix;\n\n    this.loadSavedKeys();\n  }\n\n  /**\n   * Save data to localStorage.\n   *\n   * @param {string} key Key string.\n   * @param {Mixed} value Value to save.\n   */\n  saveValue(key, value) {\n    this.rootWindow.localStorage.setItem(`${this.prefix}_${key}`, JSON.stringify(value));\n\n    if (this.savedKeys.indexOf(key) === -1) {\n      this.savedKeys.push(key);\n      this.saveSavedKeys();\n    }\n  }\n\n  /**\n   * Load data from localStorage.\n   *\n   * @param {string} key Key string.\n   * @param {object} defaultValue Object containing the loaded data.\n   *\n   * @returns {object|undefined}\n   */\n  loadValue(key, defaultValue) {\n    const itemKey = typeof key === 'undefined' ? defaultValue : key;\n    const value = this.rootWindow.localStorage.getItem(`${this.prefix}_${itemKey}`);\n\n    return value === null ? undefined : JSON.parse(value);\n  }\n\n  /**\n   * Reset given data from localStorage.\n   *\n   * @param {string} key Key string.\n   */\n  reset(key) {\n    this.rootWindow.localStorage.removeItem(`${this.prefix}_${key}`);\n  }\n\n  /**\n   * Reset all data from localStorage.\n   *\n   */\n  resetAll() {\n    arrayEach(this.savedKeys, (value, index) => {\n      this.rootWindow.localStorage.removeItem(`${this.prefix}_${this.savedKeys[index]}`);\n    });\n\n    this.clearSavedKeys();\n  }\n\n  /**\n   * Load and save all keys from localStorage.\n   *\n   * @private\n   */\n  loadSavedKeys() {\n    const keysJSON = this.rootWindow.localStorage.getItem(`${this.prefix}__persistentStateKeys`);\n    const keys = typeof keysJSON === 'string' ? JSON.parse(keysJSON) : undefined;\n\n    this.savedKeys = keys || [];\n  }\n\n  /**\n   * Save saved key in localStorage.\n   *\n   * @private\n   */\n  saveSavedKeys() {\n    this.rootWindow.localStorage.setItem(`${this.prefix}__persistentStateKeys`, JSON.stringify(this.savedKeys));\n  }\n\n  /**\n   * Clear saved key from localStorage.\n   *\n   * @private\n   */\n  clearSavedKeys() {\n    this.savedKeys.length = 0;\n    this.saveSavedKeys();\n  }\n}\n\nexport default Storage;\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  Search,\n} from './search';\n","import { BasePlugin } from '../base';\nimport { isObject } from '../../helpers/object';\nimport { rangeEach } from '../../helpers/number';\nimport { isUndefined } from '../../helpers/mixed';\n\nexport const PLUGIN_KEY = 'search';\nexport const PLUGIN_PRIORITY = 190;\nconst DEFAULT_SEARCH_RESULT_CLASS = 'htSearchResult';\n\nconst DEFAULT_CALLBACK = function(instance, row, col, data, testResult) {\n  instance.getCellMeta(row, col).isSearchResult = testResult;\n};\n\nconst DEFAULT_QUERY_METHOD = function(query, value, cellProperties) {\n  if (isUndefined(query) || query === null || !query.toLocaleLowerCase || query.length === 0) {\n    return false;\n  }\n  if (isUndefined(value) || value === null) {\n    return false;\n  }\n\n  return value.toString().toLocaleLowerCase(cellProperties.locale)\n    .indexOf(query.toLocaleLowerCase(cellProperties.locale)) !== -1;\n};\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin Search\n * @class Search\n *\n * @description\n * The search plugin provides an easy interface to search data across Handsontable.\n *\n * In order to enable search mechanism, {@link Options#search} option must be set to `true`.\n *\n * @example\n * ```js\n * // as boolean\n * search: true\n * // as a object with one or more options\n * search: {\n *   callback: myNewCallbackFunction,\n *   queryMethod: myNewQueryMethod,\n *   searchResultClass: 'customClass'\n * }\n *\n * // Access to search plugin instance:\n * const searchPlugin = hot.getPlugin('search');\n *\n * // Set callback programmatically:\n * searchPlugin.setCallback(myNewCallbackFunction);\n * // Set query method programmatically:\n * searchPlugin.setQueryMethod(myNewQueryMethod);\n * // Set search result cells class programmatically:\n * searchPlugin.setSearchResultClass(customClass);\n * ```\n */\nexport class Search extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Function called during querying for each cell from the {@link DataMap}.\n   *\n   * @private\n   * @type {Function}\n   */\n  callback = DEFAULT_CALLBACK;\n  /**\n   * Query function is responsible for determining whether a query matches the value stored in a cell.\n   *\n   * @private\n   * @type {Function}\n   */\n  queryMethod = DEFAULT_QUERY_METHOD;\n  /**\n   * Class name added to each cell that belongs to the searched query.\n   *\n   * @private\n   * @type {string}\n   */\n  searchResultClass = DEFAULT_SEARCH_RESULT_CLASS;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    const searchSettings = this.hot.getSettings()[PLUGIN_KEY];\n\n    this.updatePluginSettings(searchSettings);\n\n    this.addHook('beforeRenderer', (...args) => this.#onBeforeRenderer(...args));\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    const beforeRendererCallback = (...args) => this.#onBeforeRenderer(...args);\n\n    this.hot.addHook('beforeRenderer', beforeRendererCallback);\n    this.hot.addHookOnce('afterViewRender', () => {\n      this.hot.removeHook('beforeRenderer', beforeRendererCallback);\n    });\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`search`](@/api/options.md#search)\n   */\n  updatePlugin() {\n    this.disablePlugin();\n    this.enablePlugin();\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Makes the query.\n   *\n   * @param {string} queryStr Value to be search.\n   * @param {Function} [callback] Callback function performed on cells with values which matches to the searched query.\n   * @param {Function} [queryMethod] Query function responsible for determining whether a query matches the value stored in a cell.\n   * @returns {object[]} Return an array of objects with `row`, `col`, `data` properties or empty array.\n   */\n  query(queryStr, callback = this.getCallback(), queryMethod = this.getQueryMethod()) {\n    const rowCount = this.hot.countRows();\n    const colCount = this.hot.countCols();\n    const queryResult = [];\n    const instance = this.hot;\n\n    rangeEach(0, rowCount - 1, (rowIndex) => {\n      rangeEach(0, colCount - 1, (colIndex) => {\n        const cellData = this.hot.getDataAtCell(rowIndex, colIndex);\n        const cellProperties = this.hot.getCellMeta(rowIndex, colIndex);\n        const cellCallback = cellProperties.search.callback || callback;\n        const cellQueryMethod = cellProperties.search.queryMethod || queryMethod;\n        const testResult = cellQueryMethod(queryStr, cellData, cellProperties);\n\n        if (testResult) {\n          const singleResult = {\n            row: rowIndex,\n            col: colIndex,\n            data: cellData,\n          };\n\n          queryResult.push(singleResult);\n        }\n\n        if (cellCallback) {\n          cellCallback(instance, rowIndex, colIndex, cellData, testResult);\n        }\n      });\n    });\n\n    return queryResult;\n  }\n\n  /**\n   * Gets the callback function.\n   *\n   * @returns {Function} Return the callback function.\n   */\n  getCallback() {\n    return this.callback;\n  }\n\n  /**\n   * Sets the callback function. This function will be called during querying for each cell.\n   *\n   * @param {Function} newCallback A callback function.\n   */\n  setCallback(newCallback) {\n    this.callback = newCallback;\n  }\n\n  /**\n   * Gets the query method function.\n   *\n   * @returns {Function} Return the query method.\n   */\n  getQueryMethod() {\n    return this.queryMethod;\n  }\n\n  /**\n   * Sets the query method function. The function is responsible for determining whether a query matches the value stored in a cell.\n   *\n   * @param {Function} newQueryMethod A function with specific match logic.\n   */\n  setQueryMethod(newQueryMethod) {\n    this.queryMethod = newQueryMethod;\n  }\n\n  /**\n   * Gets search result cells class name.\n   *\n   * @returns {string} Return the cell class name.\n   */\n  getSearchResultClass() {\n    return this.searchResultClass;\n  }\n\n  /**\n   * Sets search result cells class name. This class name will be added to each cell that belongs to the searched query.\n   *\n   * @param {string} newElementClass CSS class name.\n   */\n  setSearchResultClass(newElementClass) {\n    this.searchResultClass = newElementClass;\n  }\n\n  /**\n   * Updates the settings of the plugin.\n   *\n   * @param {object} searchSettings The plugin settings, taken from Handsontable configuration.\n   * @private\n   */\n  updatePluginSettings(searchSettings) {\n    if (isObject(searchSettings)) {\n      if (searchSettings.searchResultClass) {\n        this.setSearchResultClass(searchSettings.searchResultClass);\n      }\n\n      if (searchSettings.queryMethod) {\n        this.setQueryMethod(searchSettings.queryMethod);\n      }\n\n      if (searchSettings.callback) {\n        this.setCallback(searchSettings.callback);\n      }\n    }\n  }\n\n  /**\n   * The `beforeRenderer` hook callback.\n   *\n   * @param {HTMLTableCellElement} TD The rendered `TD` element.\n   * @param {number} row Visual row index.\n   * @param {number} col Visual column index.\n   * @param {string|number} prop Column property name or a column index, if datasource is an array of arrays.\n   * @param {string} value Value of the rendered cell.\n   * @param {object} cellProperties Object containing the cell's properties.\n   */\n  #onBeforeRenderer(TD, row, col, prop, value, cellProperties) {\n    // TODO: #4972\n    const className = cellProperties.className || [];\n    let classArray = [];\n\n    if (typeof className === 'string') {\n      classArray = className.split(' ');\n\n    } else {\n      classArray.push(...className);\n    }\n\n    if (this.isEnabled() && cellProperties.isSearchResult) {\n      if (!classArray.includes(this.searchResultClass)) {\n        classArray.push(`${this.searchResultClass}`);\n      }\n\n    } else if (classArray.includes(this.searchResultClass)) {\n      classArray.splice(classArray.indexOf(this.searchResultClass), 1);\n    }\n\n    cellProperties.className = classArray.join(' ');\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  TouchScroll,\n} from './touchScroll';\n","import { addClass, removeClass } from '../../helpers/dom/element';\nimport { arrayEach } from '../../helpers/array';\nimport { BasePlugin } from '../base';\nimport { isTouchSupported } from '../../helpers/feature';\n\nexport const PLUGIN_KEY = 'touchScroll';\nexport const PLUGIN_PRIORITY = 200;\n\n/**\n * @private\n * @plugin TouchScroll\n * @class TouchScroll\n */\nexport class TouchScroll extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  static get SETTING_KEYS() {\n    return true;\n  }\n\n  /**\n   * Collection of scrollbars to update.\n   *\n   * @type {Array}\n   */\n  scrollbars = [];\n  /**\n   * Collection of overlays to update.\n   *\n   * @type {Array}\n   */\n  clones = [];\n  /**\n   * Flag which determines if collection of overlays should be refilled on every table render.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  lockedCollection = false;\n  /**\n   * Flag which determines if walkontable should freeze overlays while scrolling.\n   *\n   * @type {boolean}\n   * @default false\n   */\n  freezeOverlays = false;\n\n  /**\n   * Check if plugin is enabled.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return isTouchSupported();\n  }\n\n  /**\n   * Enable the plugin.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.addHook('afterViewRender', () => this.#onAfterViewRender());\n    this.registerEvents();\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin to use the latest options you have specified.\n   */\n  updatePlugin() {\n    this.lockedCollection = false;\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disable plugin for this Handsontable instance.\n   */\n  disablePlugin() {\n    super.disablePlugin();\n  }\n\n  /**\n   * Register all necessary events.\n   *\n   * @private\n   */\n  registerEvents() {\n    this.addHook('beforeTouchScroll', () => this.#onBeforeTouchScroll());\n    this.addHook('afterMomentumScroll', () => this.#onAfterMomentumScroll());\n  }\n\n  /**\n   * After view render listener.\n   */\n  #onAfterViewRender() {\n    if (this.lockedCollection) {\n      return;\n    }\n\n    const {\n      topOverlay,\n      bottomOverlay,\n      inlineStartOverlay,\n      topInlineStartCornerOverlay,\n      bottomInlineStartCornerOverlay\n    } = this.hot.view._wt.wtOverlays;\n\n    this.lockedCollection = true;\n    this.scrollbars.length = 0;\n    this.scrollbars.push(topOverlay);\n\n    if (bottomOverlay.clone) {\n      this.scrollbars.push(bottomOverlay);\n    }\n\n    this.scrollbars.push(inlineStartOverlay);\n\n    if (topInlineStartCornerOverlay) {\n      this.scrollbars.push(topInlineStartCornerOverlay);\n    }\n    if (bottomInlineStartCornerOverlay && bottomInlineStartCornerOverlay.clone) {\n      this.scrollbars.push(bottomInlineStartCornerOverlay);\n    }\n\n    this.clones = [];\n\n    if (topOverlay.needFullRender) {\n      this.clones.push(topOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (bottomOverlay.needFullRender) {\n      this.clones.push(bottomOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (inlineStartOverlay.needFullRender) {\n      this.clones.push(inlineStartOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (topInlineStartCornerOverlay) {\n      this.clones.push(topInlineStartCornerOverlay.clone.wtTable.holder.parentNode);\n    }\n    if (bottomInlineStartCornerOverlay && bottomInlineStartCornerOverlay.clone) {\n      this.clones.push(bottomInlineStartCornerOverlay.clone.wtTable.holder.parentNode);\n    }\n  }\n\n  /**\n   * Touch scroll listener.\n   */\n  #onBeforeTouchScroll() {\n    this.freezeOverlays = true;\n\n    arrayEach(this.clones, (clone) => {\n      addClass(clone, 'hide-tween');\n    });\n  }\n\n  /**\n   * After momentum scroll listener.\n   */\n  #onAfterMomentumScroll() {\n    this.freezeOverlays = false;\n\n    arrayEach(this.clones, (clone) => {\n      removeClass(clone, 'hide-tween');\n      addClass(clone, 'show-tween');\n    });\n\n    this.hot._registerTimeout(() => {\n      arrayEach(this.clones, (clone) => {\n        removeClass(clone, 'show-tween');\n      });\n    }, 400);\n\n    arrayEach(this.scrollbars, (scrollbar) => {\n      scrollbar.refresh();\n      scrollbar.resetFixedPosition();\n    });\n\n    this.hot.view._wt.wtOverlays.syncScrollWithMaster();\n  }\n}\n","export {\n  PLUGIN_KEY,\n  PLUGIN_PRIORITY,\n  TrimRows,\n} from './trimRows';\n","import { BasePlugin } from '../base';\nimport { TrimmingMap } from '../../translations';\nimport { arrayEach, arrayReduce } from '../../helpers/array';\n\nexport const PLUGIN_KEY = 'trimRows';\nexport const PLUGIN_PRIORITY = 330;\n\n/* eslint-disable jsdoc/require-description-complete-sentence */\n\n/**\n * @plugin TrimRows\n * @class TrimRows\n *\n * @description\n * The plugin allows to trim certain rows. The trimming is achieved by applying the transformation algorithm to the data\n * transformation. In this case, when the row is trimmed it is not accessible using `getData*` methods thus the trimmed\n * data is not visible to other plugins.\n *\n * @example\n * ::: only-for javascript\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: getData(),\n *   // hide selected rows on table initialization\n *   trimRows: [1, 2, 5]\n * });\n *\n * // access the trimRows plugin instance\n * const trimRowsPlugin = hot.getPlugin('trimRows');\n *\n * // hide single row\n * trimRowsPlugin.trimRow(1);\n *\n * // hide multiple rows\n * trimRowsPlugin.trimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.trimRows([1, 2, 9]);\n *\n * // show single row\n * trimRowsPlugin.untrimRow(1);\n *\n * // show multiple rows\n * trimRowsPlugin.untrimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.untrimRows([1, 2, 9]);\n *\n * // rerender table to see the changes\n * hot.render();\n * ```\n * :::\n *\n * ::: only-for react\n * ```jsx\n * const hotRef = useRef(null);\n *\n * ...\n *\n * <HotTable\n *   ref={hotRef}\n *   data={getData()}\n *   // hide selected rows on table initialization\n *   trimRows={[1, 2, 5]}\n * />\n *\n * const hot = hotRef.current.hotInstance;\n * // access the trimRows plugin instance\n * const trimRowsPlugin = hot.getPlugin('trimRows');\n *\n * // hide single row\n * trimRowsPlugin.trimRow(1);\n *\n * // hide multiple rows\n * trimRowsPlugin.trimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.trimRows([1, 2, 9]);\n *\n * // show single row\n * trimRowsPlugin.untrimRow(1);\n *\n * // show multiple rows\n * trimRowsPlugin.untrimRow(1, 2, 9);\n *\n * // or as an array\n * trimRowsPlugin.untrimRows([1, 2, 9]);\n *\n * // rerender table to see the changes\n * hot.render();\n * ```\n * :::\n */\nexport class TrimRows extends BasePlugin {\n  static get PLUGIN_KEY() {\n    return PLUGIN_KEY;\n  }\n\n  static get PLUGIN_PRIORITY() {\n    return PLUGIN_PRIORITY;\n  }\n\n  /**\n   * Map of skipped rows by the plugin.\n   *\n   * @private\n   * @type {null|TrimmingMap}\n   */\n  trimmedRowsMap = null;\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` then the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {boolean}\n   */\n  isEnabled() {\n    return !!this.hot.getSettings()[PLUGIN_KEY];\n  }\n\n  /**\n   * Enables the plugin functionality for this Handsontable instance.\n   */\n  enablePlugin() {\n    if (this.enabled) {\n      return;\n    }\n\n    this.trimmedRowsMap = this.hot.rowIndexMapper.registerMap('trimRows', new TrimmingMap());\n    this.trimmedRowsMap.addLocalHook('init', () => this.#onMapInit());\n\n    super.enablePlugin();\n  }\n\n  /**\n   * Updates the plugin's state.\n   *\n   * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:\n   *  - [`trimRows`](@/api/options.md#trimrows)\n   */\n  updatePlugin() {\n    const trimmedRows = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(trimmedRows)) {\n      this.hot.batchExecution(() => {\n        this.trimmedRowsMap.clear();\n\n        arrayEach(trimmedRows, (physicalRow) => {\n          this.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n        });\n      }, true);\n    }\n\n    super.updatePlugin();\n  }\n\n  /**\n   * Disables the plugin functionality for this Handsontable instance.\n   */\n  disablePlugin() {\n    this.hot.rowIndexMapper.unregisterMap('trimRows');\n\n    super.disablePlugin();\n  }\n\n  /**\n   * Get list of trimmed rows.\n   *\n   * @returns {Array} Physical rows.\n   */\n  getTrimmedRows() {\n    return this.trimmedRowsMap.getTrimmedIndexes();\n  }\n\n  /**\n   * Trims the rows provided in the array.\n   *\n   * @param {number[]} rows Array of physical row indexes.\n   * @fires Hooks#beforeTrimRow\n   * @fires Hooks#afterTrimRow\n   */\n  trimRows(rows) {\n    const currentTrimConfig = this.getTrimmedRows();\n\n    const isValidConfig = this.isValidConfig(rows);\n    let destinationTrimConfig = currentTrimConfig;\n\n    if (isValidConfig) {\n      destinationTrimConfig = Array.from(new Set(currentTrimConfig.concat(rows)));\n    }\n\n    const allowTrimRow = this.hot.runHooks('beforeTrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig);\n\n    if (allowTrimRow === false) {\n      return;\n    }\n\n    if (isValidConfig) {\n      this.hot.batchExecution(() => {\n        arrayEach(rows, (physicalRow) => {\n          this.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n        });\n      }, true);\n    }\n\n    this.hot.runHooks('afterTrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig,\n      isValidConfig && destinationTrimConfig.length > currentTrimConfig.length);\n  }\n\n  /**\n   * Trims the row provided as a physical row index (counting from 0).\n   *\n   * @param {...number} row Physical row index.\n   */\n  trimRow(...row) {\n    this.trimRows(row);\n  }\n\n  /**\n   * Untrims the rows provided in the array.\n   *\n   * @param {number[]} rows Array of physical row indexes.\n   * @fires Hooks#beforeUntrimRow\n   * @fires Hooks#afterUntrimRow\n   */\n  untrimRows(rows) {\n    const currentTrimConfig = this.getTrimmedRows();\n    const isValidConfig = this.isValidConfig(rows);\n    let destinationTrimConfig = currentTrimConfig;\n    const trimmingMapValues = this.trimmedRowsMap.getValues().slice();\n    const isAnyRowUntrimmed = rows.length > 0;\n\n    if (isValidConfig && isAnyRowUntrimmed) {\n      // Preparing new values for trimming map.\n      arrayEach(rows, (physicalRow) => {\n        trimmingMapValues[physicalRow] = false;\n      });\n\n      // Preparing new trimming config.\n      destinationTrimConfig = arrayReduce(trimmingMapValues, (trimmedIndexes, isTrimmed, physicalIndex) => {\n        if (isTrimmed) {\n          trimmedIndexes.push(physicalIndex);\n        }\n\n        return trimmedIndexes;\n      }, []);\n    }\n\n    const allowUntrimRow = this.hot\n      .runHooks('beforeUntrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig && isAnyRowUntrimmed);\n\n    if (allowUntrimRow === false) {\n      return;\n    }\n\n    if (isValidConfig && isAnyRowUntrimmed) {\n      this.trimmedRowsMap.setValues(trimmingMapValues);\n    }\n\n    this.hot.runHooks('afterUntrimRow', currentTrimConfig, destinationTrimConfig, isValidConfig && isAnyRowUntrimmed,\n      isValidConfig && destinationTrimConfig.length < currentTrimConfig.length);\n  }\n\n  /**\n   * Untrims the row provided as a physical row index (counting from 0).\n   *\n   * @param {...number} row Physical row index.\n   */\n  untrimRow(...row) {\n    this.untrimRows(row);\n  }\n\n  /**\n   * Checks if given row is hidden.\n   *\n   * @param {number} physicalRow Physical row index.\n   * @returns {boolean}\n   */\n  isTrimmed(physicalRow) {\n    return this.trimmedRowsMap.getValueAtIndex(physicalRow) || false;\n  }\n\n  /**\n   * Untrims all trimmed rows.\n   */\n  untrimAll() {\n    this.untrimRows(this.getTrimmedRows());\n  }\n\n  /**\n   * Get if trim config is valid. Check whether all of the provided physical row indexes are within source data.\n   *\n   * @param {Array} trimmedRows List of physical row indexes.\n   * @returns {boolean}\n   */\n  isValidConfig(trimmedRows) {\n    const sourceRows = this.hot.countSourceRows();\n\n    return trimmedRows\n      .every(trimmedRow => (Number.isInteger(trimmedRow) && trimmedRow >= 0 && trimmedRow < sourceRows));\n  }\n\n  /**\n   * On map initialized hook callback.\n   */\n  #onMapInit() {\n    const trimmedRows = this.hot.getSettings()[PLUGIN_KEY];\n\n    if (Array.isArray(trimmedRows)) {\n      this.hot.batchExecution(() => {\n        arrayEach(trimmedRows, (physicalRow) => {\n          this.trimmedRowsMap.setValueAtIndex(physicalRow, true);\n        });\n      }, true);\n    }\n  }\n\n  /**\n   * Destroys the plugin instance.\n   */\n  destroy() {\n    super.destroy();\n  }\n}\n","import UndoRedo, { PLUGIN_KEY } from './undoRedo';\n\nexport {\n  PLUGIN_KEY,\n  UndoRedo,\n};\n","import Hooks from '../../pluginHooks';\nimport { arrayMap, arrayEach } from '../../helpers/array';\nimport { rangeEach } from '../../helpers/number';\nimport { inherit, deepClone } from '../../helpers/object';\nimport { align } from '../contextMenu/utils';\nimport { getMoves } from '../../helpers/moves';\n\nconst SHORTCUTS_GROUP = 'undoRedo';\n\nexport const PLUGIN_KEY = 'undoRedo';\n\n/**\n * @description\n * Handsontable UndoRedo plugin allows to undo and redo certain actions done in the table.\n *\n * __Note__, that not all actions are currently undo-able. The UndoRedo plugin is enabled by default.\n * @example\n * ```js\n * undo: true\n * ```\n * @class UndoRedo\n * @plugin UndoRedo\n * @param {Core} instance The Handsontable instance.\n */\nfunction UndoRedo(instance) {\n  const plugin = this;\n\n  this.instance = instance;\n  this.doneActions = [];\n  this.undoneActions = [];\n  this.ignoreNewActions = false;\n  this.enabled = false;\n\n  instance.addHook('afterChange', function(changes, source) {\n    const changesLen = changes && changes.length;\n\n    if (!changesLen) {\n      return;\n    }\n\n    const hasDifferences = changes.find((change) => {\n      const [, , oldValue, newValue] = change;\n\n      return oldValue !== newValue;\n    });\n\n    if (!hasDifferences) {\n      return;\n    }\n\n    const wrappedAction = () => {\n      const clonedChanges = changes.reduce((arr, change) => {\n        arr.push([...change]);\n\n        return arr;\n      }, []);\n\n      arrayEach(clonedChanges, (change) => {\n        change[1] = instance.propToCol(change[1]);\n      });\n\n      const selected = changesLen > 1 ? this.getSelected() : [[clonedChanges[0][0], clonedChanges[0][1]]];\n\n      return new UndoRedo.ChangeAction(clonedChanges, selected);\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n\n  instance.addHook('afterCreateRow', (index, amount, source) => {\n    plugin.done(() => new UndoRedo.CreateRowAction(index, amount), source);\n  });\n\n  const getCellMetas = (fromRow, toRow, fromColumn, toColumn) => {\n    const genericKeys = ['visualRow', 'visualCol', 'row', 'col', 'prop'];\n    const genericKeysLength = genericKeys.length;\n    const cellMetas = [];\n\n    rangeEach(fromColumn, toColumn, (columnIndex) => {\n      rangeEach(fromRow, toRow, (rowIndex) => {\n        const cellMeta = instance.getCellMeta(rowIndex, columnIndex);\n\n        if (Object.keys(cellMeta).length !== genericKeysLength) {\n          const uniqueMeta =\n            Object.fromEntries(Object.entries(cellMeta).filter(([key]) => genericKeys.includes(key) === false));\n\n          cellMetas.push([cellMeta.visualRow, cellMeta.visualCol, uniqueMeta]);\n        }\n      });\n    });\n\n    return cellMetas;\n  };\n\n  instance.addHook('beforeRemoveRow', (index, amount, logicRows, source) => {\n    const wrappedAction = () => {\n      const physicalRowIndex = instance.toPhysicalRow(index);\n      const lastRowIndex = physicalRowIndex + amount - 1;\n      const removedData = deepClone(\n        plugin.instance.getSourceData(\n          physicalRowIndex, 0, physicalRowIndex + amount - 1, plugin.instance.countSourceCols() - 1\n        )\n      );\n\n      return new UndoRedo.RemoveRowAction(\n        physicalRowIndex,\n        removedData,\n        instance.getSettings().fixedRowsBottom,\n        instance.getSettings().fixedRowsTop,\n        instance.rowIndexMapper.getIndexesSequence(),\n        getCellMetas(physicalRowIndex, lastRowIndex, 0, instance.countCols() - 1)\n      );\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n\n  instance.addHook('afterCreateCol', (index, amount, source) => {\n    plugin.done(() => new UndoRedo.CreateColumnAction(index, amount), source);\n  });\n\n  instance.addHook('beforeRemoveCol', (index, amount, logicColumns, source) => {\n    const wrappedAction = () => {\n      const originalData = plugin.instance.getSourceDataArray();\n      const columnIndex = (plugin.instance.countCols() + index) % plugin.instance.countCols();\n      const lastColumnIndex = columnIndex + amount - 1;\n      const removedData = [];\n      const headers = [];\n      const indexes = [];\n\n      rangeEach(originalData.length - 1, (i) => {\n        const column = [];\n        const origRow = originalData[i];\n\n        rangeEach(columnIndex, lastColumnIndex, (j) => {\n          column.push(origRow[instance.toPhysicalColumn(j)]);\n        });\n\n        removedData.push(column);\n      });\n\n      rangeEach(amount - 1, (i) => {\n        indexes.push(instance.toPhysicalColumn(columnIndex + i));\n      });\n\n      if (Array.isArray(instance.getSettings().colHeaders)) {\n        rangeEach(amount - 1, (i) => {\n          headers.push(instance.getSettings().colHeaders[instance.toPhysicalColumn(columnIndex + i)] || null);\n        });\n      }\n\n      const columnsMap = instance.columnIndexMapper.getIndexesSequence();\n      const rowsMap = instance.rowIndexMapper.getIndexesSequence();\n\n      return new UndoRedo.RemoveColumnAction(\n        columnIndex,\n        indexes,\n        removedData,\n        headers,\n        columnsMap,\n        rowsMap,\n        instance.getSettings().fixedColumnsStart,\n        getCellMetas(0, instance.countRows(), columnIndex, lastColumnIndex)\n      );\n    };\n\n    plugin.done(wrappedAction, source);\n  });\n\n  instance.addHook('beforeCellAlignment', (stateBefore, range, type, alignment) => {\n    plugin.done(() => new UndoRedo.CellAlignmentAction(stateBefore, range, type, alignment));\n  });\n\n  instance.addHook('beforeFilter', (conditionsStack, previousConditionsStack) => {\n    plugin.done(() => new UndoRedo.FiltersAction(conditionsStack, previousConditionsStack));\n  });\n\n  instance.addHook('beforeRowMove', (rows, finalIndex) => {\n    if (rows === false) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.RowMoveAction(rows, finalIndex));\n  });\n\n  instance.addHook('beforeColumnMove', (columns, finalIndex) => {\n    if (columns === false) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.ColumnMoveAction(columns, finalIndex));\n  });\n\n  instance.addHook('beforeMergeCells', (cellRange, auto) => {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.MergeCellsAction(instance, cellRange));\n  });\n\n  instance.addHook('afterUnmergeCells', (cellRange, auto) => {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.UnmergeCellsAction(instance, cellRange));\n  });\n\n  instance.addHook('beforeColumnSort', (currentSortConfig, destinationSortConfigs, sortPossible) => {\n    if (!sortPossible) {\n      return;\n    }\n\n    plugin.done(() => new UndoRedo.ColumnSortAction(currentSortConfig, destinationSortConfigs));\n  });\n\n  // TODO: Why this callback is needed? One test doesn't pass after calling method right after plugin creation (outside the callback).\n  instance.addHook('afterInit', () => {\n    plugin.init();\n  });\n}\n\n/**\n * Stash information about performed actions.\n *\n * @function done\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @param {Function} wrappedAction The action descriptor wrapped in a closure.\n * @param {string} [source] Source of the action. It is defined just for more general actions (not related to plugins).\n */\nUndoRedo.prototype.done = function(wrappedAction, source) {\n  if (this.ignoreNewActions) {\n    return;\n  }\n\n  const isBlockedByDefault = source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto';\n\n  if (isBlockedByDefault) {\n    return;\n  }\n\n  const doneActionsCopy = this.doneActions.slice();\n  const continueAction = this.instance.runHooks('beforeUndoStackChange', doneActionsCopy, source);\n\n  if (continueAction === false) {\n    return;\n  }\n\n  const newAction = wrappedAction();\n  const undoneActionsCopy = this.undoneActions.slice();\n\n  this.doneActions.push(newAction);\n\n  this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n  this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n\n  this.undoneActions.length = 0;\n\n  this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n};\n\n/**\n * Undo the last action performed to the table.\n *\n * @function undo\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @fires Hooks#beforeUndo\n * @fires Hooks#afterUndo\n */\nUndoRedo.prototype.undo = function() {\n  if (this.isUndoAvailable()) {\n    const doneActionsCopy = this.doneActions.slice();\n\n    this.instance.runHooks('beforeUndoStackChange', doneActionsCopy);\n\n    const action = this.doneActions.pop();\n\n    this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n\n    const actionClone = deepClone(action);\n\n    const continueAction = this.instance.runHooks('beforeUndo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n\n    const that = this;\n    const undoneActionsCopy = this.undoneActions.slice();\n\n    this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n\n    action.undo(this.instance, () => {\n      that.ignoreNewActions = false;\n      that.undoneActions.push(action);\n    });\n\n    this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n    this.instance.runHooks('afterUndo', actionClone);\n  }\n};\n\n/**\n * Redo the previous action performed to the table (used to reverse an undo).\n *\n * @function redo\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndoStackChange\n * @fires Hooks#afterUndoStackChange\n * @fires Hooks#beforeRedoStackChange\n * @fires Hooks#afterRedoStackChange\n * @fires Hooks#beforeRedo\n * @fires Hooks#afterRedo\n */\nUndoRedo.prototype.redo = function() {\n  if (this.isRedoAvailable()) {\n    const undoneActionsCopy = this.undoneActions.slice();\n\n    this.instance.runHooks('beforeRedoStackChange', undoneActionsCopy);\n\n    const action = this.undoneActions.pop();\n\n    this.instance.runHooks('afterRedoStackChange', undoneActionsCopy, this.undoneActions.slice());\n\n    const actionClone = deepClone(action);\n\n    const continueAction = this.instance.runHooks('beforeRedo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n\n    const that = this;\n    const doneActionsCopy = this.doneActions.slice();\n\n    this.instance.runHooks('beforeUndoStackChange', doneActionsCopy);\n\n    action.redo(this.instance, () => {\n      that.ignoreNewActions = false;\n      that.doneActions.push(action);\n    });\n\n    this.instance.runHooks('afterUndoStackChange', doneActionsCopy, this.doneActions.slice());\n    this.instance.runHooks('afterRedo', actionClone);\n  }\n};\n\n/**\n * Checks if undo action is available.\n *\n * @function isUndoAvailable\n * @memberof UndoRedo#\n * @returns {boolean} Return `true` if undo can be performed, `false` otherwise.\n */\nUndoRedo.prototype.isUndoAvailable = function() {\n  return this.doneActions.length > 0;\n};\n\n/**\n * Checks if redo action is available.\n *\n * @function isRedoAvailable\n * @memberof UndoRedo#\n * @returns {boolean} Return `true` if redo can be performed, `false` otherwise.\n */\nUndoRedo.prototype.isRedoAvailable = function() {\n  return this.undoneActions.length > 0;\n};\n\n/**\n * Clears undo history.\n *\n * @function clear\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.clear = function() {\n  this.doneActions.length = 0;\n  this.undoneActions.length = 0;\n};\n\n/**\n * Checks if the plugin is enabled.\n *\n * @function isEnabled\n * @memberof UndoRedo#\n * @returns {boolean}\n */\nUndoRedo.prototype.isEnabled = function() {\n  return this.enabled;\n};\n\n/**\n * Enables the plugin.\n *\n * @function enable\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.enable = function() {\n  if (this.isEnabled()) {\n    return;\n  }\n\n  const hot = this.instance;\n\n  this.enabled = true;\n  exposeUndoRedoMethods(hot);\n\n  this.registerShortcuts();\n  hot.addHook('afterChange', onAfterChange);\n};\n\n/**\n * Disables the plugin.\n *\n * @function disable\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.disable = function() {\n  if (!this.isEnabled()) {\n    return;\n  }\n\n  const hot = this.instance;\n\n  this.enabled = false;\n  removeExposedUndoRedoMethods(hot);\n\n  this.unregisterShortcuts();\n  hot.removeHook('afterChange', onAfterChange);\n};\n\n/**\n * Destroys the instance.\n *\n * @function destroy\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.destroy = function() {\n  this.clear();\n  this.instance = null;\n  this.doneActions = null;\n  this.undoneActions = null;\n};\n\nUndoRedo.Action = function() {};\nUndoRedo.Action.prototype.undo = function() {};\nUndoRedo.Action.prototype.redo = function() {};\n\n/**\n * Change action.\n *\n * @private\n * @param {Array} changes 2D array containing information about each of the edited cells.\n * @param {number[]} selected The cell selection.\n */\nUndoRedo.ChangeAction = function(changes, selected) {\n  this.changes = changes;\n  this.selected = selected;\n  this.actionType = 'change';\n};\ninherit(UndoRedo.ChangeAction, UndoRedo.Action);\n\nUndoRedo.ChangeAction.prototype.undo = function(instance, undoneCallback) {\n  const data = deepClone(this.changes);\n  const emptyRowsAtTheEnd = instance.countEmptyRows(true);\n  const emptyColsAtTheEnd = instance.countEmptyCols(true);\n\n  for (let i = 0, len = data.length; i < len; i++) {\n    data[i].splice(3, 1);\n  }\n\n  instance.addHookOnce('afterChange', undoneCallback);\n\n  instance.setDataAtCell(data, null, null, 'UndoRedo.undo');\n\n  for (let i = 0, len = data.length; i < len; i++) {\n    const [row, column] = data[i];\n\n    if (instance.getSettings().minSpareRows &&\n        row + 1 + instance.getSettings().minSpareRows === instance.countRows() &&\n        emptyRowsAtTheEnd === instance.getSettings().minSpareRows) {\n\n      instance.alter('remove_row', parseInt(row + 1, 10), instance.getSettings().minSpareRows);\n      instance.undoRedo.doneActions.pop();\n    }\n\n    if (instance.getSettings().minSpareCols &&\n        column + 1 + instance.getSettings().minSpareCols === instance.countCols() &&\n        emptyColsAtTheEnd === instance.getSettings().minSpareCols) {\n\n      instance.alter('remove_col', parseInt(column + 1, 10), instance.getSettings().minSpareCols);\n      instance.undoRedo.doneActions.pop();\n    }\n  }\n\n  const selectedLast = instance.getSelectedLast();\n\n  if (selectedLast !== undefined) {\n    const [changedRow, changedColumn] = data[0];\n    const [selectedRow, selectedColumn] = selectedLast;\n    const firstFullyVisibleRow = instance.view.getFirstFullyVisibleRow();\n    const firstFullyVisibleColumn = instance.view.getFirstFullyVisibleColumn();\n    const isInVerticalViewPort = changedRow >= firstFullyVisibleRow;\n    const isInHorizontalViewPort = changedColumn >= firstFullyVisibleColumn;\n    const isInViewport = isInVerticalViewPort && isInHorizontalViewPort;\n    const isChangedSelection = selectedRow !== changedRow || selectedColumn !== changedColumn;\n\n    // Performing scroll only when selection has been changed right after editing a cell.\n    if (isInViewport === false && isChangedSelection === true) {\n      const scrollConfig = {\n        row: changedRow,\n        col: changedColumn,\n      };\n\n      if (isInVerticalViewPort === false) {\n        scrollConfig.verticalSnap = 'top';\n      }\n\n      if (isInHorizontalViewPort === false) {\n        scrollConfig.horizontalSnap = 'start';\n      }\n\n      instance.scrollViewportTo(scrollConfig);\n    }\n  }\n\n  instance.selectCells(this.selected, false, false);\n};\nUndoRedo.ChangeAction.prototype.redo = function(instance, onFinishCallback) {\n  const data = deepClone(this.changes);\n\n  for (let i = 0, len = data.length; i < len; i++) {\n    data[i].splice(2, 1);\n  }\n\n  instance.addHookOnce('afterChange', onFinishCallback);\n  instance.setDataAtCell(data, null, null, 'UndoRedo.redo');\n\n  if (this.selected) {\n    instance.selectCells(this.selected, false, false);\n  }\n};\n\n/**\n * Create row action.\n *\n * @private\n * @param {number} index The visual row index.\n * @param {number} amount The number of created rows.\n */\nUndoRedo.CreateRowAction = function(index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_row';\n};\ninherit(UndoRedo.CreateRowAction, UndoRedo.Action);\n\nUndoRedo.CreateRowAction.prototype.undo = function(instance, undoneCallback) {\n  const rowCount = instance.countRows();\n  const minSpareRows = instance.getSettings().minSpareRows;\n\n  if (this.index >= rowCount && this.index - minSpareRows < rowCount) {\n    this.index -= minSpareRows; // work around the situation where the needed row was removed due to an 'undo' of a made change\n  }\n\n  instance.addHookOnce('afterRemoveRow', undoneCallback);\n  instance.alter('remove_row', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateRowAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterCreateRow', redoneCallback);\n  instance.alter('insert_row_above', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove row action.\n *\n * @private\n * @param {number} index The visual row index.\n * @param {Array} data The removed data.\n * @param {number} fixedRowsBottom Number of fixed rows on the bottom. Remove row action change it sometimes.\n * @param {number} fixedRowsTop Number of fixed rows on the top. Remove row action change it sometimes.\n * @param {Array} rowIndexesSequence Row index sequence taken from the row index mapper.\n * @param {Array} removedCellMetas List of removed cell metas.\n */\nUndoRedo.RemoveRowAction = function(index, data, fixedRowsBottom, fixedRowsTop, rowIndexesSequence, removedCellMetas) {\n  this.index = index;\n  this.data = data;\n  this.actionType = 'remove_row';\n  this.fixedRowsBottom = fixedRowsBottom;\n  this.fixedRowsTop = fixedRowsTop;\n  this.rowIndexesSequence = rowIndexesSequence;\n  this.removedCellMetas = removedCellMetas;\n};\ninherit(UndoRedo.RemoveRowAction, UndoRedo.Action);\n\nUndoRedo.RemoveRowAction.prototype.undo = function(instance, undoneCallback) {\n  const settings = instance.getSettings();\n  const changes = [];\n\n  // Changing by the reference as `updateSettings` doesn't work the best.\n  settings.fixedRowsBottom = this.fixedRowsBottom;\n  settings.fixedRowsTop = this.fixedRowsTop;\n\n  // Prepare the change list to fill the source data.\n  this.data.forEach((dataRow, rowIndexDelta) => {\n    Object.keys(dataRow).forEach((columnProp) => {\n      const columnIndex = parseInt(columnProp, 10);\n\n      changes.push([this.index + rowIndexDelta, isNaN(columnIndex) ? columnProp : columnIndex, dataRow[columnProp]]);\n    });\n  });\n\n  instance.alter('insert_row_above', this.index, this.data.length, 'UndoRedo.undo');\n\n  this.removedCellMetas.forEach(([rowIndex, columnIndex, cellMeta]) => {\n    instance.setCellMetaObject(rowIndex, columnIndex, cellMeta);\n  });\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  instance.setSourceDataAtCell(changes, null, null, 'UndoRedo.undo');\n\n  instance.rowIndexMapper.setIndexesSequence(this.rowIndexesSequence);\n};\n\nUndoRedo.RemoveRowAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveRow', redoneCallback);\n  instance.alter('remove_row', this.index, this.data.length, 'UndoRedo.redo');\n};\n\n/**\n * Create column action.\n *\n * @private\n * @param {number} index The visual column index.\n * @param {number} amount The number of created columns.\n */\nUndoRedo.CreateColumnAction = function(index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_col';\n};\ninherit(UndoRedo.CreateColumnAction, UndoRedo.Action);\n\nUndoRedo.CreateColumnAction.prototype.undo = function(instance, undoneCallback) {\n  instance.addHookOnce('afterRemoveCol', undoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateColumnAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterCreateCol', redoneCallback);\n  instance.alter('insert_col_start', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove column action.\n *\n * @private\n * @param {number} index The visual column index.\n * @param {number[]} indexes The visual column indexes.\n * @param {Array} data The removed data.\n * @param {Array} headers The header values.\n * @param {number[]} columnPositions The column position.\n * @param {number[]} rowPositions The row position.\n * @param {number} fixedColumnsStart Number of fixed columns on the left. Remove column action change it sometimes.\n * @param {Array} removedCellMetas List of removed cell metas.\n */\nUndoRedo.RemoveColumnAction = function(index, indexes, data, headers, columnPositions, rowPositions, fixedColumnsStart, removedCellMetas) { // eslint-disable-line max-len\n  this.index = index;\n  this.indexes = indexes;\n  this.data = data;\n  this.amount = this.data[0].length;\n  this.headers = headers;\n  this.columnPositions = columnPositions.slice(0);\n  this.rowPositions = rowPositions.slice(0);\n  this.actionType = 'remove_col';\n  this.fixedColumnsStart = fixedColumnsStart;\n  this.removedCellMetas = removedCellMetas;\n};\ninherit(UndoRedo.RemoveColumnAction, UndoRedo.Action);\n\nUndoRedo.RemoveColumnAction.prototype.undo = function(instance, undoneCallback) {\n  const settings = instance.getSettings();\n\n  // Changing by the reference as `updateSettings` doesn't work the best.\n  settings.fixedColumnsStart = this.fixedColumnsStart;\n\n  const ascendingIndexes = this.indexes.slice(0).sort();\n  const sortByIndexes = (elem, j, arr) => arr[this.indexes.indexOf(ascendingIndexes[j])];\n\n  const removedDataLength = this.data.length;\n  const sortedData = [];\n\n  for (let rowIndex = 0; rowIndex < removedDataLength; rowIndex++) {\n    sortedData.push(arrayMap(this.data[rowIndex], sortByIndexes));\n  }\n\n  const sortedHeaders = arrayMap(this.headers, sortByIndexes);\n  const changes = [];\n\n  instance.alter('insert_col_start', this.indexes[0], this.indexes.length, 'UndoRedo.undo');\n\n  arrayEach(instance.getSourceDataArray(), (rowData, rowIndex) => {\n    arrayEach(ascendingIndexes, (changedIndex, contiquesIndex) => {\n      rowData[changedIndex] = sortedData[rowIndex][contiquesIndex];\n\n      changes.push([rowIndex, changedIndex, rowData[changedIndex]]);\n    });\n  });\n\n  instance.setSourceDataAtCell(changes, undefined, undefined, 'UndoRedo.undo');\n\n  if (typeof this.headers !== 'undefined') {\n    arrayEach(sortedHeaders, (headerData, columnIndex) => {\n      instance.getSettings().colHeaders[ascendingIndexes[columnIndex]] = headerData;\n    });\n  }\n\n  this.removedCellMetas.forEach(([rowIndex, columnIndex, cellMeta]) => {\n    instance.setCellMetaObject(rowIndex, columnIndex, cellMeta);\n  });\n\n  instance.batchExecution(() => {\n    // Restore row sequence in a case when all columns are removed. the original\n    // row sequence is lost in that case.\n    instance.rowIndexMapper.setIndexesSequence(this.rowPositions);\n    instance.columnIndexMapper.setIndexesSequence(this.columnPositions);\n  }, true);\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  instance.render();\n};\n\nUndoRedo.RemoveColumnAction.prototype.redo = function(instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveCol', redoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Cell alignment action.\n *\n * @private\n * @param {Array} stateBefore The previous state.\n * @param {object} range The cell range.\n * @param {string} type The type of the alignment (\"top\", \"left\", \"bottom\" or \"right\").\n * @param {string} alignment The alignment CSS class.\n */\nUndoRedo.CellAlignmentAction = function(stateBefore, range, type, alignment) {\n  this.stateBefore = stateBefore;\n  this.range = range;\n  this.type = type;\n  this.alignment = alignment;\n};\nUndoRedo.CellAlignmentAction.prototype.undo = function(instance, undoneCallback) {\n  arrayEach(this.range, (range) => {\n    range.forAll((row, col) => {\n      // Alignment classes should only collected within cell ranges. We skip header coordinates.\n      if (row >= 0 && col >= 0) {\n        instance.setCellMeta(row, col, 'className', this.stateBefore[row][col] || ' htLeft');\n      }\n    });\n  });\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.render();\n};\nUndoRedo.CellAlignmentAction.prototype.redo = function(instance, undoneCallback) {\n  align(this.range, this.type, this.alignment, (row, col) => instance.getCellMeta(row, col),\n    (row, col, key, value) => instance.setCellMeta(row, col, key, value));\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n  instance.render();\n};\n\n/**\n * Filters action.\n *\n * @private\n * @param {Array} conditionsStack An array of the filter conditions.\n * @param {Array} previousConditionsStack An array of the previous filter conditions.\n */\nUndoRedo.FiltersAction = function(conditionsStack, previousConditionsStack) {\n  this.previousConditionsStack = previousConditionsStack;\n  this.conditionsStack = conditionsStack;\n  this.actionType = 'filter';\n};\ninherit(UndoRedo.FiltersAction, UndoRedo.Action);\n\nUndoRedo.FiltersAction.prototype.undo = function(instance, undoneCallback) {\n  const filters = instance.getPlugin('filters');\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  if (this.previousConditionsStack) {\n    filters.conditionCollection.importAllConditions(this.previousConditionsStack);\n  }\n\n  filters.filter();\n};\nUndoRedo.FiltersAction.prototype.redo = function(instance, redoneCallback) {\n  const filters = instance.getPlugin('filters');\n\n  instance.addHookOnce('afterViewRender', redoneCallback);\n\n  filters.conditionCollection.importAllConditions(this.conditionsStack);\n  filters.filter();\n};\n\n/**\n * Merge Cells action.\n *\n * @util\n */\nclass MergeCellsAction extends UndoRedo.Action {\n  constructor(instance, cellRange) {\n    super();\n    this.cellRange = cellRange;\n\n    const topStartCorner = this.cellRange.getTopStartCorner();\n    const bottomEndCorner = this.cellRange.getBottomEndCorner();\n\n    this.rangeData = instance.getData(\n      topStartCorner.row,\n      topStartCorner.col,\n      bottomEndCorner.row,\n      bottomEndCorner.col\n    );\n  }\n\n  undo(instance, undoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', undoneCallback);\n\n    mergeCellsPlugin.unmergeRange(this.cellRange, true);\n\n    const topStartCorner = this.cellRange.getTopStartCorner();\n\n    instance.populateFromArray(\n      topStartCorner.row,\n      topStartCorner.col,\n      this.rangeData,\n      undefined,\n      undefined,\n      'MergeCells'\n    );\n  }\n\n  redo(instance, redoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', redoneCallback);\n\n    mergeCellsPlugin.mergeRange(this.cellRange);\n  }\n}\nUndoRedo.MergeCellsAction = MergeCellsAction;\n\n/**\n * Unmerge Cells action.\n *\n * @util\n */\nclass UnmergeCellsAction extends UndoRedo.Action {\n  constructor(instance, cellRange) {\n    super();\n    this.cellRange = cellRange;\n  }\n\n  undo(instance, undoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', undoneCallback);\n\n    mergeCellsPlugin.mergeRange(this.cellRange, true);\n  }\n\n  redo(instance, redoneCallback) {\n    const mergeCellsPlugin = instance.getPlugin('mergeCells');\n\n    instance.addHookOnce('afterViewRender', redoneCallback);\n\n    mergeCellsPlugin.unmergeRange(this.cellRange, true);\n    instance.render();\n  }\n}\nUndoRedo.UnmergeCellsAction = UnmergeCellsAction;\n\n/**\n * ManualRowMove action.\n *\n * @TODO removeRow undo should works on logical index\n * @private\n * @param {number[]} rows An array with moved rows.\n * @param {number} finalIndex The destination index.\n */\nUndoRedo.RowMoveAction = function(rows, finalIndex) {\n  this.rows = rows.slice();\n  this.finalRowIndex = finalIndex;\n  this.actionType = 'row_move';\n};\ninherit(UndoRedo.RowMoveAction, UndoRedo.Action);\n\nUndoRedo.RowMoveAction.prototype.undo = function(instance, undoneCallback) {\n  const manualRowMove = instance.getPlugin('manualRowMove');\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  const rowMoves = getMoves(this.rows, this.finalRowIndex, instance.rowIndexMapper.getNumberOfIndexes());\n\n  rowMoves.reverse().forEach(({ from, to }) => {\n    if (from < to) {\n      to -= 1;\n    }\n\n    manualRowMove.moveRow(to, from);\n  });\n\n  instance.render();\n  instance.deselectCell();\n  instance.selectRows(this.rows[0], this.rows[0] + this.rows.length - 1);\n};\nUndoRedo.RowMoveAction.prototype.redo = function(instance, redoneCallback) {\n  const manualRowMove = instance.getPlugin('manualRowMove');\n\n  instance.addHookOnce('afterViewRender', redoneCallback);\n  manualRowMove.moveRows(this.rows.slice(), this.finalRowIndex);\n  instance.render();\n\n  instance.deselectCell();\n  instance.selectRows(this.finalRowIndex, this.finalRowIndex + this.rows.length - 1);\n};\n\n/**\n * ManualColumnMove action.\n *\n * @private\n * @param {number[]} columns An array with moved columns.\n * @param {number} finalIndex The destination index.\n */\nUndoRedo.ColumnMoveAction = function(columns, finalIndex) {\n  this.columns = columns.slice();\n  this.finalColumnIndex = finalIndex;\n  this.actionType = 'col_move';\n};\ninherit(UndoRedo.ColumnMoveAction, UndoRedo.Action);\n\nUndoRedo.ColumnMoveAction.prototype.undo = function(instance, undoneCallback) {\n  const manualColumnMove = instance.getPlugin('manualColumnMove');\n\n  instance.addHookOnce('afterViewRender', undoneCallback);\n\n  const columnMoves = getMoves(this.columns, this.finalColumnIndex, instance.columnIndexMapper.getNumberOfIndexes());\n\n  columnMoves.reverse().forEach(({ from, to }) => {\n    if (from < to) {\n      to -= 1;\n    }\n\n    manualColumnMove.moveColumn(to, from);\n  });\n\n  instance.render();\n  instance.deselectCell();\n  instance.selectColumns(this.columns[0], this.columns[0] + this.columns.length - 1);\n};\nUndoRedo.ColumnMoveAction.prototype.redo = function(instance, redoneCallback) {\n  const manualColumnMove = instance.getPlugin('manualColumnMove');\n\n  instance.addHookOnce('afterViewRender', redoneCallback);\n  manualColumnMove.moveColumns(this.columns.slice(), this.finalColumnIndex);\n  instance.render();\n\n  instance.deselectCell();\n  instance.selectColumns(this.finalColumnIndex, this.finalColumnIndex + this.columns.length - 1);\n};\n\n/**\n * ColumnSort action.\n *\n * @private\n * @param {Array} currentSortState The current sort state.\n * @param {Array} newSortState The new sort state.\n */\nUndoRedo.ColumnSortAction = function(currentSortState, newSortState) {\n  this.previousSortState = currentSortState;\n  this.nextSortState = newSortState;\n};\ninherit(UndoRedo.ColumnSortAction, UndoRedo.Action);\n\nUndoRedo.ColumnSortAction.prototype.undo = function(instance, undoneCallback) {\n  const sortPlugin = instance.getPlugin('columnSorting');\n  const multiSortPlugin = instance.getPlugin('multiColumnSorting');\n  const enabledSortPlugin = multiSortPlugin.isEnabled() ? multiSortPlugin : sortPlugin;\n\n  if (this.previousSortState.length) {\n    enabledSortPlugin.sort(this.previousSortState);\n\n  } else {\n    enabledSortPlugin.clearSort();\n  }\n\n  undoneCallback();\n};\n\nUndoRedo.ColumnSortAction.prototype.redo = function(instance, redoneCallback) {\n  const sortPlugin = instance.getPlugin('columnSorting');\n  const multiSortPlugin = instance.getPlugin('multiColumnSorting');\n  const enabledSortPlugin = multiSortPlugin.isEnabled() ? multiSortPlugin : sortPlugin;\n\n  enabledSortPlugin.sort(this.nextSortState);\n\n  redoneCallback();\n};\n\n/**\n * Enabling and disabling plugin and attaching its to an instance.\n *\n * @private\n */\nUndoRedo.prototype.init = function() {\n  const settings = this.instance.getSettings().undo;\n  const pluginEnabled = typeof settings === 'undefined' || settings;\n\n  if (!this.instance.undoRedo) {\n    this.instance.undoRedo = this;\n  }\n\n  if (pluginEnabled) {\n    this.instance.undoRedo.enable();\n\n  } else {\n    this.instance.undoRedo.disable();\n  }\n};\n\n/**\n * Registers shortcuts responsible for performing undo/redo.\n *\n * @private\n */\nUndoRedo.prototype.registerShortcuts = function() {\n  const shortcutManager = this.instance.getShortcutManager();\n  const gridContext = shortcutManager.getContext('grid');\n  const runOnlyIf = (event) => {\n    return !event.altKey; // right ALT in some systems triggers ALT+CTR\n  };\n  const config = {\n    runOnlyIf,\n    group: SHORTCUTS_GROUP,\n  };\n\n  gridContext.addShortcuts([{\n    keys: [['Control/Meta', 'z']],\n    callback: () => {\n      this.undo();\n    },\n  }, {\n    keys: [['Control/Meta', 'y'], ['Control/Meta', 'Shift', 'z']],\n    callback: () => {\n      this.redo();\n    },\n  }], config);\n};\n\n/**\n * Unregister shortcuts responsible for performing undo/redo.\n *\n * @private\n */\nUndoRedo.prototype.unregisterShortcuts = function() {\n  const shortcutManager = this.instance.getShortcutManager();\n  const gridContext = shortcutManager.getContext('grid');\n\n  gridContext.removeShortcutsByGroup(SHORTCUTS_GROUP);\n};\n\n/**\n * @param {Array} changes 2D array containing information about each of the edited cells.\n * @param {string} source String that identifies source of hook call.\n * @returns {boolean}\n */\nfunction onAfterChange(changes, source) {\n  const instance = this;\n\n  if (source === 'loadData') {\n    return instance.undoRedo.clear();\n  }\n}\n\n/**\n * @param {Core} instance The Handsontable instance.\n */\nfunction exposeUndoRedoMethods(instance) {\n  /**\n   * {@link UndoRedo#undo}.\n   *\n   * @alias undo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.undo = function() {\n    return instance.undoRedo.undo();\n  };\n\n  /**\n   * {@link UndoRedo#redo}.\n   *\n   * @alias redo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.redo = function() {\n    return instance.undoRedo.redo();\n  };\n\n  /**\n   * {@link UndoRedo#isUndoAvailable}.\n   *\n   * @alias isUndoAvailable\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.isUndoAvailable = function() {\n    return instance.undoRedo.isUndoAvailable();\n  };\n\n  /**\n   * {@link UndoRedo#isRedoAvailable}.\n   *\n   * @alias isRedoAvailable\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.isRedoAvailable = function() {\n    return instance.undoRedo.isRedoAvailable();\n  };\n\n  /**\n   * {@link UndoRedo#clear}.\n   *\n   * @alias clearUndo\n   * @memberof! Core#\n   * @returns {boolean}\n   */\n  instance.clearUndo = function() {\n    return instance.undoRedo.clear();\n  };\n}\n\n/**\n * @param {Core} instance The Handsontable instance.\n */\nfunction removeExposedUndoRedoMethods(instance) {\n  delete instance.undo;\n  delete instance.redo;\n  delete instance.isUndoAvailable;\n  delete instance.isRedoAvailable;\n  delete instance.clearUndo;\n}\n\nconst hook = Hooks.getSingleton();\n\nhook.add('afterUpdateSettings', function() {\n  this.getPlugin('undoRedo')?.init();\n});\n\nhook.register('beforeUndo');\nhook.register('afterUndo');\nhook.register('beforeRedo');\nhook.register('afterRedo');\n\nUndoRedo.PLUGIN_KEY = PLUGIN_KEY;\nUndoRedo.SETTING_KEYS = true;\n\nexport default UndoRedo;\n","'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n  fromEntries: function fromEntries(iterable) {\n    var obj = {};\n    iterate(iterable, function (k, v) {\n      createProperty(obj, k, v);\n    }, { AS_ENTRIES: true });\n    return obj;\n  }\n});\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n  this.stopped = stopped;\n  this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n  var that = options && options.that;\n  var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n  var IS_RECORD = !!(options && options.IS_RECORD);\n  var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n  var INTERRUPTED = !!(options && options.INTERRUPTED);\n  var fn = bind(unboundFunction, that);\n  var iterator, iterFn, index, length, result, next, step;\n\n  var stop = function (condition) {\n    if (iterator) iteratorClose(iterator, 'normal', condition);\n    return new Result(true, condition);\n  };\n\n  var callFn = function (value) {\n    if (AS_ENTRIES) {\n      anObject(value);\n      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n    } return INTERRUPTED ? fn(value, stop) : fn(value);\n  };\n\n  if (IS_RECORD) {\n    iterator = iterable.iterator;\n  } else if (IS_ITERATOR) {\n    iterator = iterable;\n  } else {\n    iterFn = getIteratorMethod(iterable);\n    if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n    // optimisation for array iterators\n    if (isArrayIteratorMethod(iterFn)) {\n      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n        result = callFn(iterable[index]);\n        if (result && isPrototypeOf(ResultPrototype, result)) return result;\n      } return new Result(false);\n    }\n    iterator = getIterator(iterable, iterFn);\n  }\n\n  next = IS_RECORD ? iterable.next : iterator.next;\n  while (!(step = call(next, iterator)).done) {\n    try {\n      result = callFn(step.value);\n    } catch (error) {\n      iteratorClose(iterator, 'throw', error);\n    }\n    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n  } return new Result(false);\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n  throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n    || getMethod(it, '@@iterator')\n    || Iterators[classof(it)];\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n  else object[key] = value;\n};\n","/**\n * @param {Core} Handsontable The Handsontable instance.\n */\nexport default function jQueryWrapper(Handsontable) {\n  // eslint-disable-next-line\n  const jQuery = typeof window === 'undefined' ? false : window.jQuery;\n\n  if (!jQuery) {\n    return;\n  }\n\n  jQuery.fn.handsontable = function(action, ...args) {\n    const $this = this.first(); // Use only first element from list\n    let instance = $this.data('handsontable');\n\n    // Init case\n    if (typeof action !== 'string') {\n      const userSettings = action || {};\n\n      if (instance) {\n        instance.updateSettings(userSettings);\n\n      } else {\n        instance = new Handsontable.Core($this[0], userSettings);\n        $this.data('handsontable', instance);\n        instance.init();\n      }\n\n      return $this;\n    }\n\n    let output;\n\n    // Action case\n    if (instance) {\n      if (typeof instance[action] !== 'undefined') {\n        output = instance[action].call(instance, ...args);\n\n        if (action === 'destroy') {\n          $this.removeData();\n        }\n\n      } else {\n        throw new Error(`Handsontable do not provide action: ${action}`);\n      }\n    }\n\n    return output;\n  };\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Handsontable, { CellCoords, CellRange } from './base';\nimport { registerAllModules } from './registry';\nimport EventManager, { getListenersCounter } from './eventManager';\nimport { getRegisteredMapsCounter } from './translations';\n\nimport jQueryWrapper from './helpers/wrappers/jquery';\n\nimport GhostTable from './utils/ghostTable';\nimport * as parseTableHelpers from './utils/parseTable';\nimport * as arrayHelpers from './helpers/array';\nimport * as browserHelpers from './helpers/browser';\nimport * as dataHelpers from './helpers/data';\nimport * as dateHelpers from './helpers/date';\nimport * as featureHelpers from './helpers/feature';\nimport * as functionHelpers from './helpers/function';\nimport * as mixedHelpers from './helpers/mixed';\nimport * as numberHelpers from './helpers/number';\nimport * as objectHelpers from './helpers/object';\nimport * as stringHelpers from './helpers/string';\nimport * as unicodeHelpers from './helpers/unicode';\nimport * as domHelpers from './helpers/dom/element';\nimport * as domEventHelpers from './helpers/dom/event';\n\nimport {\n  getRegisteredEditorNames,\n  getEditor,\n  registerEditor,\n} from './editors/registry';\nimport {\n  getRegisteredRendererNames,\n  getRenderer,\n  registerRenderer,\n} from './renderers/registry';\nimport {\n  getRegisteredValidatorNames,\n  getValidator,\n  registerValidator,\n} from './validators/registry';\nimport {\n  getRegisteredCellTypeNames,\n  getCellType,\n  registerCellType,\n} from './cellTypes/registry';\nimport {\n  getPluginsNames,\n  getPlugin,\n  registerPlugin,\n} from './plugins/registry';\nimport { BasePlugin } from './plugins/base';\n\nregisterAllModules();\njQueryWrapper(Handsontable);\n\n// TODO: Remove this exports after rewrite tests about this module\nHandsontable.__GhostTable = GhostTable;\n\nHandsontable._getListenersCounter = getListenersCounter; // For MemoryLeak tests\nHandsontable._getRegisteredMapsCounter = getRegisteredMapsCounter; // For MemoryLeak tests\nHandsontable.EventManager = EventManager;\n\n// Export all helpers to the Handsontable object\nconst HELPERS = [\n  arrayHelpers,\n  browserHelpers,\n  dataHelpers,\n  dateHelpers,\n  featureHelpers,\n  functionHelpers,\n  mixedHelpers,\n  numberHelpers,\n  objectHelpers,\n  stringHelpers,\n  unicodeHelpers,\n  parseTableHelpers,\n];\nconst DOM = [\n  domHelpers,\n  domEventHelpers,\n];\n\nHandsontable.helper = {};\nHandsontable.dom = {};\n\n// Fill general helpers.\narrayHelpers.arrayEach(HELPERS, (helper) => {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (key) => {\n    if (key.charAt(0) !== '_') {\n      Handsontable.helper[key] = helper[key];\n    }\n  });\n});\n\n// Fill DOM helpers.\narrayHelpers.arrayEach(DOM, (helper) => {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), (key) => {\n    if (key.charAt(0) !== '_') {\n      Handsontable.dom[key] = helper[key];\n    }\n  });\n});\n\n// Export cell types.\nHandsontable.cellTypes = Handsontable.cellTypes ?? {};\n\narrayHelpers.arrayEach(getRegisteredCellTypeNames(), (cellTypeName) => {\n  Handsontable.cellTypes[cellTypeName] = getCellType(cellTypeName);\n});\n\nHandsontable.cellTypes.registerCellType = registerCellType;\nHandsontable.cellTypes.getCellType = getCellType;\n\n// Export all registered editors from the Handsontable.\nHandsontable.editors = Handsontable.editors ?? {};\n\narrayHelpers.arrayEach(getRegisteredEditorNames(), (editorName) => {\n  Handsontable.editors[`${stringHelpers.toUpperCaseFirst(editorName)}Editor`] = getEditor(editorName);\n});\n\nHandsontable.editors.registerEditor = registerEditor;\nHandsontable.editors.getEditor = getEditor;\n\n// Export all registered renderers from the Handsontable.\nHandsontable.renderers = Handsontable.renderers ?? {};\n\narrayHelpers.arrayEach(getRegisteredRendererNames(), (rendererName) => {\n  const renderer = getRenderer(rendererName);\n\n  if (rendererName === 'base') {\n    Handsontable.renderers.cellDecorator = renderer;\n  }\n  Handsontable.renderers[`${stringHelpers.toUpperCaseFirst(rendererName)}Renderer`] = renderer;\n});\n\nHandsontable.renderers.registerRenderer = registerRenderer;\nHandsontable.renderers.getRenderer = getRenderer;\n\n// Export all registered validators from the Handsontable.\nHandsontable.validators = Handsontable.validators ?? {};\n\narrayHelpers.arrayEach(getRegisteredValidatorNames(), (validatorName) => {\n  Handsontable.validators[`${stringHelpers.toUpperCaseFirst(validatorName)}Validator`] = getValidator(validatorName);\n});\n\nHandsontable.validators.registerValidator = registerValidator;\nHandsontable.validators.getValidator = getValidator;\n\n// Export all registered plugins from the Handsontable.\n// Make sure to initialize the plugin dictionary as an empty object. Otherwise, while\n// transpiling the files into ES and CommonJS format, the injected CoreJS helper\n// `import \"core-js/modules/es.object.get-own-property-names\";` won't be processed\n// by the `./config/plugin/babel/add-import-extension` babel plugin. Thus, the distribution\n// files will be broken. The reason is not known right now (probably it's caused by bug in\n// the Babel or missing something in the plugin).\nHandsontable.plugins = Handsontable.plugins ?? {};\n\narrayHelpers.arrayEach(getPluginsNames(), (pluginName) => {\n  Handsontable.plugins[pluginName] = getPlugin(pluginName);\n});\n\nHandsontable.plugins[`${stringHelpers.toUpperCaseFirst(BasePlugin.PLUGIN_KEY)}Plugin`] = BasePlugin;\n\nHandsontable.plugins.registerPlugin = registerPlugin;\nHandsontable.plugins.getPlugin = getPlugin;\n\nexport {\n  CellCoords,\n  CellRange,\n};\nexport default Handsontable;\n"],"names":["require","_core","_interopRequireDefault","_rootInstance","_dataMap","_pluginHooks","_registry","_registry2","_textType","_baseEditor","_src","exports","CellCoords","CellRange","registerCellType","TextCellType","Handsontable","editors","BaseEditor","rootElement","userSettings","instance","Core","rootInstanceSymbol","init","arguments","length","undefined","DefaultSettings","metaSchemaFactory","hooks","Hooks","getSingleton","packageName","buildDate","version","languages","dictionaryKeys","getLanguageDictionary","getLanguagesDictionaries","registerLanguageDictionary","getTranslatedPhrase","_default","default","_element","_function","_mixed","_browser","_editorManager","_eventManager","_object","_focusManager","_array","_parseTable","_registry3","_registry4","_string","_number","_tableView","_dataSource","_data","_translations","_registry5","_utils","_selection","_index3","_uniqueMap","_shortcuts","_shortcutContexts","activeGuid","foreignHotInstances","Map","deprecationWarns","Set","_userSettings$layoutD","_this","eventManager","EventManager","datamap","dataSource","grid","editorManager","focusManager","viewportScroller","firstRun","hasValidParameter","registerAsRootInstance","rootDocument","ownerDocument","rootWindow","defaultView","isDestroyed","renderSuspendedCounter","executionSuspendedCounter","layoutDirection","rootElementDirection","includes","getComputedStyle","direction","setAttribute","isRtl","isLtr","getDirectionFactor","language","getValidLanguageCode","metaManager","MetaManager","DynamicCellMetaMod","ExtendMetaPropertiesMod","tableMeta","getTableMeta","globalMeta","getGlobalMeta","pluginsRegistry","createUniqueMap","container","createElement","renderCall","insertBefore","firstChild","isRootInstance","_injectProductInfo","licenseKey","guid","randomString","set","columnIndexMapper","IndexMapper","rowIndexMapper","addLocalHook","source","runHooks","DataSource","id","substring","visualToRenderableCoords","coords","row","visualRow","col","visualColumn","_createCellCoords","getRenderableFromVisualIndex","renderableToVisualCoords","renderableRow","renderableColumn","getVisualFromRenderableIndex","findFirstNonHiddenRenderableRow","visualRowFrom","visualRowTo","dir","minIndex","Math","min","maxIndex","max","rowIndex","getNearestNotHiddenIndex","findFirstNonHiddenRenderableColumn","visualColumnFrom","visualColumnTo","columnIndex","selection","Selection","countCols","countRows","propToCol","prop","isEditorOpened","getActiveEditor","isOpened","countRenderableColumns","view","countRenderableRows","countRowHeaders","countColHeaders","countRenderableRowsInRange","countRenderableColumnsInRange","getShortcutManager","createCellCoords","column","createCellRange","highlight","from","to","_createCellRange","isDisabledCellSelection","getSettings","disableVisualSelection","getCellMeta","onIndexMapperCacheUpdate","_ref","hiddenIndexesChanged","commit","cellCoords","isLastSelectionLayer","preventScrolling","createObjectPropListener","selectionRange","getSelectedRange","current","selectionLayerLevel","size","colToProp","isTouched","value","scrollTo","isSelectedByRowHeader","isSelectedByColumnHeader","addClass","removeClass","getSelectionSource","closeEditor","render","prepareEditor","cellRanges","isMultiple","changedIsMultiple","_len","args","Array","_key","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","_len11","_key11","_len12","_key12","_len13","_key13","_len14","_key14","_len15","_key15","totalRows","alter","totalCols","action","index","_index","_index2","amount","keepEmptyRows","normalizeIndexesGroup","indexes","sortedIndexes","sort","_ref2","_ref3","indexA","indexB","normalizedIndexes","arrayReduce","acc","_ref4","groupIndex","groupAmount","previousItem","prevIndex","prevAmount","prevLastIndex","amountToAdd","push","numberOfSourceRows","countSourceRows","maxRows","insertRowMode","delta","rowDelta","startPhysicalIndex","startRowPhysicalIndex","createRow","mode","shiftRows","toVisualRow","insertColumnMode","countSourceCols","colDelta","startColumnPhysicalIndex","createCol","isArray","colHeaders","spliceArray","toVisualColumn","prototype","splice","apply","shiftColumns","removeRow","offset","arrayEach","_ref5","calcIndex","isEmpty","Number","isInteger","wasRemoved","isSelected","getSelectedRangeLast","deselect","refresh","fixedRowsTop","fixedRowsBottom","removeCol","_ref6","physicalColumnIndex","toPhysicalColumn","totalColumns","fixedColumnsStart","Error","adjustRowsAndCols","minRows","minSpareRows","minCols","minSpareCols","nrOfRows","emptyRows","countEmptyRows","emptyRowsMissing","rowsToCreate","emptyCols","countEmptyCols","nrOfColumns","columns","colsToCreate","dataType","emptyColsMissing","maxCols","adjustElementsSize","populateFromArray","start","input","end","method","r","rlen","c","clen","setData","newDataByColumns","startRow","startColumn","columnsPopulationEnd","rowsPopulationEnd","isObject","populatedDataByColumns","pivot","numberOfDataColumns","numberOfColumnsToPopulate","pushedDownDataByRows","getData","slice","pushedDownDataByColumns","concat","fill","numberOfDataRows","numberOfRowsToPopulate","pushedRightDataByRows","map","rowData","i","skippedRow","skippedColumn","pushData","cellMeta","getInputValue","rowValue","rowInputLength","rowSelectionLength","allowInsertRow","colInputLength","colSelectionLength","skipRowOnPaste","allowInsertColumn","skipColumnOnPaste","readOnly","orgValue","getDataAtCell","orgValueSchema","duckSchema","valueSchema","isObjectEqual","deepClone","setDataAtCell","setLanguage","languageCode","normalizedLanguageCode","normalizeLanguageCode","hasLanguageDictionary","warnUserAboutLanguageRegistration","setClassName","className","classSettings","element","table","globalMetaSettingsArray","settingsArray","stringToArray","classNameToRemove","getDifferenceOfArrays","classNameToAdd","data","isMobileBrowser","isIpadOS","updateSettings","TableView","EditorManager","getInstance","createViewportScroller","FocusManager","installFocusCatcher","forceFullRender","offsetParent","observeVisibilityChangeOnce","_wt","wtOverlays","updateLastSpreaderSize","ValidatorsQueue","resolved","validatorsInQueue","valid","addValidatorToQueue","removeValidatorFormQueue","checkIfQueueIsEmpty","onQueueEmpty","getParsedNumber","numericData","unifiedNumericData","replace","isNaN","parseFloat","validateChanges","changes","callback","activeEditor","waitingForValidator","shouldBeCanceled","cancelChanges","newValue","visualCol","cellProperties","Object","getPrototypeOf","type","isNumericLike","getCellValidator","validateCell","cellPropertiesReference","result","allowInvalid","applyChanges","skipThisChange","numberOfCreatedRows","numberOfCreatedColumns","hasChanges","isDefined","refreshValue","validator","done","canBeValidated","hidden","td","getCell","nodeName","getSetting","isRegExp","expression","cellValue","validatorCallback","test","isFunction","_registerImmediate","call","setDataInputToArray","propOrCol","processChanges","beforeChangeResult","filteredChanges","filter","change","changeSource","ilen","getAtCell","toPhysicalRow","processedChanges","setDataAtRowProp","listen","isListening","forEach","foreignHot","unlisten","destroyEditor","revertOriginal","prepareEditorIfNeeded","endRow","endCol","spliceCol","_len16","elements","_key16","spliceRow","_len17","_key17","getSelected","arrayMap","_ref7","getSelectedLast","selected","selectedRange","emptySelectedCells","cellRange","isSingleHeader","topStart","getTopStartCorner","bottomEnd","getBottomEndCorner","rangeEach","isRenderSuspended","suspendRender","resumeRender","nextValue","batchRender","wrappedOperations","isExecutionSuspended","suspendExecution","suspendOperations","resumeExecution","forceFlushChanges","resumeOperations","batchExecution","batch","refreshDimensions","width","lastWidth","height","lastHeight","getLastSize","getBoundingClientRect","isSizeChanged","isResizeBlocked","scrollableElement","setLastSize","updateData","replaceData","newDataMap","fitToLength","getInitialColumnCount","hotInstance","dataMap","internalSource","loadData","clearCellsCache","initIndexMappers","columnsSettings","finalNrOfColumns","nrOfSourceColumns","colToPropCache","dataSchema","schema","getSchema","deepObjectSize","initToLength","row2","column2","isUndefined","getAll","getRange","DESTINATION_RENDERER","getCopyableText","startCol","getCopyableData","getCopyable","settings","dataUpdateFunction","bind","columnsAsFunc","j","rows","cols","ganttChart","tableClassName","syncOverlayTableClassNames","isRegistered","isDeprecated","initialHook","addHook","hasOwnProperty","createMap","columnSetting","cell","cells","clearCache","updateColumnMeta","objectEach","setCellMetaObject","currentHeight","style","parseInt","initialStyle","getAttribute","indexOf","overflow","wtViewport","resetHasOversizedColumnHeadersMarked","exportSettingsAsClassNames","updateMainScrollableElements","getValue","sel","clear","selectAll","topmost","renderableColumnIndex","renderableRowIndex","isHidden","getCellAtCoords","getCoords","renderableCoords","wtTable","getVisualFromPhysicalIndex","getPhysicalFromVisualIndex","get","getDataAtRowProp","getDataAtCol","columnData","dataByRows","getDataAtProp","getSourceData","getByRange","getSourceDataArray","getSourceDataAtCol","getAtColumn","setSourceDataAtCell","isThereAnySetSourceListener","hasHook","changesForHook","_ref8","changeRow","changeProp","changeValue","_ref9","setAtCell","getSourceDataAtRow","getAtRow","getSourceDataAtCell","getDataAtRow","getDataType","rowFrom","columnFrom","rowTo","columnTo","rowStart","columnStart","rowEnd","columnEnd","previousType","currentType","isTypeEqual","cellType","removeCellMeta","key","physicalRow","physicalColumn","cachedValue","getCellMetaKeyValue","hookResult","spliceCellsMeta","visualIndex","deleteAmount","_len18","cellMetaRows","_key18","reverse","cellMetaRow","setCellMeta","allowSetCellMeta","getCellsMeta","getColumnMeta","getCellMetaAtRow","getCellsMetaAtRow","isColumnModificationAllowed","getCellRenderer","rowOrMeta","cellRenderer","renderer","getRenderer","getCellEditor","cellEditor","editor","getEditor","cellValidator","getValidator","validateCells","_validateCells","validateRows","validateColumns","getRowHeader","rowHeader","rowHeaders","hasRowHeaders","hasColHeaders","getColHeader","headerLevel","out","translateVisualIndexToColumns","visualColumnIndex","arr","columnsLen","title","spreadsheetColumnLabel","_getColWidthFromSettings","colWidths","getColWidth","DEFAULT_COLUMN_WIDTH","_getRowHeightFromSettings","rowHeights","getRowHeight","countFirstRowKeys","getLength","dataLen","getNotTrimmedIndexesLength","countRenderedRows","drawn","getRenderedRowsCount","countVisibleRows","getVisibleRowsCount","countRenderedCols","getRenderedColumnsCount","countVisibleCols","getVisibleColumnsCount","getRowHeadersCount","getColumnHeadersCount","ending","rangeEachReverse","isEmptyRow","emptyColumns","isEmptyCol","selectCell","endColumn","scrollToCell","changeListener","selectCells","suspend","wasSelected","resume","selectColumns","focusPosition","selectRows","deselectCell","includeRowHeaders","includeColumnHeaders","options","skipNextScrollCycle","getIndexToScroll","indexMapper","scrollViewportTo","_options","_arguments$","verticalSnap","horizontalSnap","considerHiddenIndexes","snapToTop","snapToBottom","snapToInlineStart","snapToInlineEnd","isValidRowGrid","isValidColumnGrid","visualRowToScroll","visualColumnToScroll","isRowInteger","isColumnInteger","scrollViewport","scrollViewportVertically","scrollViewportHorizontally","scrollToFocusedCell","addHookOnce","isScrolled","toObject","removeHook","destroy","_clearTimeouts","_clearImmediates","delete","licenseInfo","querySelector","parentNode","removeChild","empty","unregisterAll","getItems","_ref10","plugin","property","obj","postMortem","getFirstRenderedVisibleRow","getLastRenderedVisibleRow","getFirstRenderedVisibleColumn","getLastRenderedVisibleColumn","getFirstFullyVisibleRow","getLastFullyVisibleRow","getFirstFullyVisibleColumn","getLastFullyVisibleColumn","getFirstPartiallyVisibleRow","getLastPartiallyVisibleRow","getFirstPartiallyVisibleColumn","getLastPartiallyVisibleColumn","getPlugin","pluginName","unifiedPluginName","toUpperCaseFirst","undoRedo","getItem","getPluginName","constructor","PLUGIN_KEY","getId","orderIndex","add","has","once","remove","p1","p2","p3","p4","p5","p6","run","dictionaryKey","extraArguments","toHTML","instanceToHTML","toTableElement","tempElement","insertAdjacentHTML","firstElementChild","timeouts","_registerTimeout","handle","delay","handleFunc","setTimeout","handler","clearTimeout","immediates","setImmediate","clearImmediate","_getEditorManager","shortcutManager","createShortcutManager","handleEvent","beforeKeyDown","event","afterKeyDown","ownerWindow","ctrlKey","metaKey","releasePressedKeys","getFocusManager","getPluginsNames","PluginClass","addItem","registerAllShortcutContexts","setActiveContextName","_a11y","getParent","level","iteration","parent","elementToCheck","host","nodeType","Node","DOCUMENT_FRAGMENT_NODE","isThisHotChild","thisHotContainer","closestHandsontableContainer","closest","getFrameElement","frame","frameElement","getParentWindow","hasAccessToParentWindow","nodes","until","ELEMENT_NODE","closestDown","matched","contains","isChildOf","child","node","queriedParents","querySelectorAll","previousSibling","overlayContainsElement","overlayType","root","overlayElement","parentElement","filterEmptyClassNames","classNames","x","filterRegexes","list","returnBoth","regexFree","regexes","entry","isRegex","RegExp","hasClass","classList","split","stringClasses","regexClasses","regexClassName","currentClassName","domElement","attributes","attributeValue","attributeInfo","removeAttribute","attributesToRemove","stringAttributes","regexAttributes","attributeNameToRemove","attributeRegex","getAttributeNames","attributeName","removeTextNodes","childs","childNodes","lastChild","HTML_CHARACTERS","fastInnerHTML","content","sanitizeContent","innerHTML","sanitize","fastInnerText","nextSibling","textContent","appendChild","createTextNode","isVisible","documentElement","next","impl","display","offsetLeft","offsetTop","lastElem","body","position","pageXOffset","scrollLeft","pageYOffset","scrollTop","left","top","getWindowScrollTop","window","scrollY","getWindowScrollLeft","scrollX","getScrollTop","getScrollLeft","getScrollableElement","document","props","el","overflowX","overflowY","clientHeight","scrollHeight","clientWidth","scrollWidth","getMaximumScrollTop","getMaximumScrollLeft","getTrimmingContainer","base","computedStyle","allowedProperties","getPropertyValue","propertyY","propertyX","getStyle","innerWidth","innerHeight","styleProp","matchesCSSRules","rule","selectorText","CSSRule","STYLE_RULE","msMatchesSelector","matches","currentStyle","outerWidth","offsetWidth","outerHeight","offsetHeight","addEvent","addEventListener","removeEvent","removeEventListener","getCaretPosition","selectionStart","getSelectionEndPosition","selectionEnd","getSelectionText","text","getSelection","toString","createRange","clearTextSelection","removeAllRanges","setCaretPosition","pos","endPos","setSelectionRange","focus","err","elementParent","parentDisplayValue","cachedScrollbarWidth","walkontableCalculateScrollbarWidth","inner","outer","boxSizing","visibility","w1","w2","getScrollbarWidth","hasVerticalScrollbar","hasHorizontalScrollbar","setOverlayPosition","overlayElem","transform","getCssTransform","resetCssTransform","isInput","inputs","contentEditable","isOutsideInput","hasAttribute","selectElementIfAllowed","activeElement","select","isDetached","elementToBeObserved","visibilityObserver","IntersectionObserver","entries","observer","isIntersecting","unobserve","observe","makeElementContentEditableAndSelectItsContent","invisibleSelection","ariaHidden","range","A11Y_HIDDEN","selectNodeContents","addRange","removeContentEditableFromElementAndDeselect","selectedElement","removeInvisibleSelectionClass","runWithSelectedContendEditableElement","_dompurify","string","toUpperCase","substr","equalsIgnoreCase","unique","strings","stringify","toLowerCase","s4","floor","random","isPercentValue","substitute","template","variables","match","name","charAt","stripTags","ALLOWED_TAGS","DOMPurify","_moment","_templateLiteralTag","variable","_m","_hd","v","_pi","_ss","s","l","_cp","_norm","_extractTime","_ignored","location","_notified","consoleMessages","invalid","toSingleLine","expired","keyValidityDate","hotVersion","missing","non_commercial","domMessages","hasValidType","isNonCommercial","consoleMessageState","domMessageState","schemaValidity","_checkKeySchema","releaseDate","moment","releaseDays","toDate","getTime","keyValidityDays","format","message","console","messageNode","z","p","shift","abs","padStart","expressions","previousValue","currentValue","valueWithoutWhiteSpaces","expressionForIndex","trim","to2dArray","extendArray","extension","pivotedArr","rowCount","colCount","array","iteratee","accumulator","initFromArray","iterable","arrayFilter","predicate","resIndex","arraySum","a","b","arrayMax","arrayMin","arrayAvg","arrayFlatten","initial","arrayUnique","arrays","first","rest","filteredFirstArray","getIntersectionOfArrays","getUnionOfArrays","delimiter","A11Y_TABINDEX","val","A11Y_TREEGRID","A11Y_PRESENTATION","A11Y_GRIDCELL","A11Y_ROWHEADER","A11Y_ROWGROUP","A11Y_COLUMNHEADER","A11Y_ROW","A11Y_MENU","A11Y_MENU_ITEM","A11Y_MENU_ITEM_CHECKBOX","A11Y_COMBOBOX","A11Y_LISTBOX","A11Y_OPTION","A11Y_CHECKBOX","A11Y_SCOPE_COL","A11Y_SCOPE_ROW","A11Y_TEXT","A11Y_LABEL","A11Y_DISABLED","A11Y_MULTISELECTABLE","A11Y_HASPOPUP","A11Y_ROWCOUNT","A11Y_COLCOUNT","A11Y_ROWINDEX","A11Y_COLINDEX","A11Y_EXPANDED","A11Y_SORT","A11Y_READONLY","A11Y_INVALID","A11Y_CHECKED","A11Y_SELECTED","A11Y_AUTOCOMPLETE","A11Y_CONTROLS","A11Y_ACTIVEDESCENDANT","A11Y_LIVE","A11Y_RELEVANT","A11Y_SETSIZE","A11Y_POSINSET","func","throttle","wait","lastCalled","lastCallThrottled","lastTimer","_throttle","stamp","Date","now","needCall","remaining","throttleAfterHits","hits","funcThrottle","remainHits","_clearHits","_throttleAfterHits","clearHits","debounce","_debounce","pipe","functions","firstFunc","restFunc","_pipe","fn","partial","params","_partial","restParams","curry","argsLength","given","argsSoFar","_curry","passedArgsSoFar","curryRight","fastCall","context","arg1","arg2","arg3","arg4","arg5","arg6","_feature","tester","testerFunc","ua","vendor","browsers","chrome","chromeWebKit","edge","edgeWebKit","firefox","firefoxWebKit","mobile","safari","platforms","mac","platform","win","linux","ios","setBrowserMeta","userAgent","navigator","setPlatformMeta","isCSR","isChrome","isChromeWebKit","isFirefox","isFirefoxWebKit","isSafari","isEdge","isEdgeWebKit","isIOS","maxTouchPoints","isWindowsOS","isMacOS","isLinuxOS","object","inherit","Child","Parent","extend","target","writableKeys","hasWritableKeys","deepExtend","JSON","parse","clone","mixin","Base","MIXINS","mixins","mixinItem","MIXIN_NAME","getter","_getter","initialValue","propertyName","initValue","setter","_setter","defineProperty","configurable","object1","object2","defineGetter","writable","enumerable","getProperty","names","nameItem","setProperty","workingObject","propName","recursObjLen","defaultValue","propertyToListen","privateProperty","holder","_touched","requestAnimationFrame","cancelAnimationFrame","isTouchSupported","comparisonFunction","getComparisonFunction","Intl","Collator","compare","String","localeCompare","_unicode","_event","_classPrivateMethodInitSpec","e","_checkPrivateRedeclaration","t","TypeError","_assertClassBrand","n","_EditorManager_brand","WeakSet","_defineProperty2","hot","_onAfterDocumentKeyDown","destroyed","openEditor","update","elem","_onCellDblClick","_this$hot$getSelected","isWaiting","dataSaved","isHeader","modifiedCellCoords","visualRowToCheck","visualColumnToCheck","isCellEditable","clearActiveEditor","editorClass","originalValue","getEditorInstance","prepare","newInitialValue","enableFullEditMode","allowOpening","MouseEvent","getLayerLevel","isSingle","beginEditing","restoreOriginalValue","isCtrlPressed","finishEditing","closeEditorAndSaveChanges","closeEditorAndRestoreOriginalValue","isCellHidden","moveSelectionAfterEnter","enterMoves","shiftKey","transformFocus","transformStart","isImmediatePropagationStopped","keyCode","altKey","isFunctionKey","isCtrlMetaKey","isCell","instances","WeakMap","KEY_CODES","ALT","ARROW_DOWN","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","AUDIO_DOWN","AUDIO_MUTE","AUDIO_UP","BACKSPACE","CAPS_LOCK","COMMA","COMMAND_LEFT","COMMAND_RIGHT","COMMAND_FIREFOX","CONTROL","DELETE","END","ENTER","ESCAPE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F13","F14","F15","F16","F17","F18","F19","HOME","INSERT","MEDIA_NEXT","MEDIA_PLAY_PAUSE","MEDIA_PREV","MEDIA_STOP","NULL","NUM_LOCK","PAGE_DOWN","PAGE_UP","PAUSE","PERIOD","SCROLL_LOCK","SHIFT","SPACE","TAB","A","C","D","F","L","O","P","S","V","X","Y","Z","FUNCTION_KEYS","isPrintableChar","isCtrlKey","keys","isKey","baseCode","stopImmediatePropagation","isImmediatePropagationEnabled","cancelBubble","isRightClick","button","isLeftClick","isTouchEvent","TouchEvent","offsetRelativeTo","untilElement","offsetX","y","offsetY","HTMLElement","_staticRegister","registeredEditorClasses","register","hasItem","getNames","getValues","staticRegister","getRegisteredEditors","getRegisteredEditorNames","hasEditor","RegisteredEditor","Clazz","getConstructor","_getEditorInstance","_register","_getItem","EDITOR_TYPE","editorWrapper","_console","REGISTERED_HOOKS","REMOVED_MESSAGE","REMOVED_HOOKS","DEPRECATED_HOOKS","callbackOrder","getGlobalSingleton","globalBucket","createEmptyBucket","bucket","create","hook","initOrderMap","getBucket","pluginHookBucket","warn","hookName","removedInVersion","skip","foundInitialHook","cb","setCallbackOrderIndex","orderBucketByOrderIndex","runOnce","globalHandlers","res","localHandlers","deregister","getRegistered","normalizedOrderIndex","orderMap","getCallbackOrderMap","flatMap","callbacks","globalSingleton","log","info","error","collection","namespace","subCollection","item","values","listenersCounter","eventListeners","eventName","callbackProxy","extendEvent","onlyOwnEvents","len","tmpEvent","clearEvents","destroyWithOwnEventsOnly","fireEvent","bubbles","cancelable","detail","screenX","screenY","clientX","clientY","relatedTarget","createEvent","initMouseEvent","createEventObject","dispatchEvent","nativeStopImmediatePropagation","_stopImmediatePropagation","getListenersCounter","_classPrivateFieldInitSpec","_classPrivateFieldGet","_classPrivateFieldSet","FOCUS_MODES","freeze","CELL","MIXED","_hot","_focusMode","_refocusDelay","_refocusElementGetter","_debouncedSelect","_FocusManager_brand","hotSettings","imeFastEdit","_onUpdateSettings","_focusCell","_focusEditorElement","getFocusMode","setFocusMode","focusMode","getRefocusDelay","setRefocusDelay","setRefocusElementGetter","getRefocusElementFunction","getRefocusElement","_classPrivateFieldGet2","TEXTAREA","focusOnHighlightedCell","selectedCell","focusElement","_classPrivateFieldGet3","_classPrivateFieldGet4","currentHighlightCoords","elementToBeFocused","preventScroll","_getSelectedCell","refocusToEditorTextarea","_classPrivateFieldGet5","refocusElement","_classPrivateFieldGet6","isCellVisible","blur","newSettings","ESCAPED_HTML_CHARS","regEscapedChars","join","isHTMLTable","hasColumnHeaders","TABLE","THEAD","TBODY","rowModifier","columnModifier","isColumnHeadersRow","CELLS","isRowHeadersColumn","cellData","rowspan","colspan","attrs","TR","_dataToHTML","inputLen","columnsResult","parsedCellData","repeat","htmlToGridSettings","settingsObj","fragment","createDocumentFragment","tempElem","checkElement","escapedAdjacentHTML","cellFragment","openingTag","paragraphRegexp","lastIndexOf","replaceAll","closingTag","generator","trElement","reduce","colSpan","tFoot","thRowsLen","tHead","thRows","tr","isDataRow","nestedHeaders","headersRow","headers","header","currentIndex","nextHeader","label","children","dataRows","tBodies","sections","section","dataArr","mergeCells","cellsLen","cellId","rowSpan","findIndex","rstart","cstart","styleAttr","ignoreMerge","_priorityMap","_uniqueSet","ERROR_PLUGIN_REGISTERED","ERROR_PRIORITY_REGISTERED","priority","ERROR_PRIORITY_NAN","priorityPluginsQueue","createPriorityMap","errorPriorityExists","errorPriorityNaN","uniquePluginsQueue","createUniqueSet","errorItemExists","uniquePluginsList","errorIdExists","hasPlugin","registerPlugin","pluginClass","unifyPluginArguments","_registerPlugin","PLUGIN_PRIORITY","ASC","DESC","ORDER_MAP","DEFAULT_ERROR_PRIORITY_EXISTS","DEFAULT_ERROR_PRIORITY_NAN","priorityMap","isNumeric","order","right","additionalDelimiters","isFinite","d","valueOf","rangeFrom","rangeTo","valueAccordingPercent","percent","clamp","minValue","maxValue","DEFAULT_ERROR_ID_EXISTS","uniqueMap","removeItem","itemId","find","DEFAULT_ERROR_ITEM_EXISTS","uniqueSet","getRegisteredRenderers","getRegisteredRendererNames","hasRenderer","RENDERER_TYPE","getRegisteredValidators","getRegisteredValidatorNames","hasValidator","VALIDATOR_TYPE","_mouseEventHandler","_columnHeadersCount","_rowHeadersCount","_selectionMouseDown","_mouseDown","_table","_lastWidth","_lastHeight","_TableView_brand","createElements","registerEvents","initializeWalkontable","postponedAdjustElementsSize","draw","snapToRight","snapToLeft","originalStyle","ariaTags","isTextSelectionAllowed","preventDefault","fragmentSelection","isInProgress","finish","isOutsideInputElement","isSelectedByAnyHeader","originalTarget","eventX","eventY","scrollbarWidth","elementFromPoint","isTargetWebComponent","outsideClickDeselects","parentWindow","translateFromRenderableToVisualCoords","translateFromRenderableToVisualIndex","countRenderableIndexes","maxElements","consideredElements","firstNotHiddenIndex","countNotHiddenRowIndexes","incrementBy","countNotHiddenIndexes","countNotHiddenColumnIndexes","renderableIndexesCount","firstVisibleIndex","renderableIndex","notHiddenIndexes","countNotHiddenFixedColumnsStart","visualFixedColumnsStart","countNotHiddenFixedRowsTop","visualFixedRowsTop","countNotHiddenFixedRowsBottom","visualFixedRowsBottom","count","isMainTableNotFullyCoveredByOverlays","fixedAllRows","fixedAllColumns","walkontableConfig","rtlMode","externalRowCalculator","isEnabled","isDataViewInstance","preventOverflow","preventWheel","stretchH","shouldRenderInlineStartOverlay","shouldRenderTopOverlay","columnHeaders","shouldRenderBottomOverlay","renderAllRows","renderAllColumns","headerRenderers","TH","visualRowIndex","appendRowHeader","_getAriaColcount","_updateAriaColcount","renderedColumnIndex","visualColumnsIndex","appendColHeader","columnWidth","rowHeight","renderedRowIndex","rowHeightByOverlayName","TD","selections","hideBorderOnMouseDownOver","onWindowResize","onContainerElementResize","onCellMouseDown","wt","visualCoords","controller","activeWt","handleMouseEvent","cellCoordsFactory","onCellContextMenu","onCellMouseOut","onCellMouseOver","onCellMouseUp","onCellCornerMouseDown","onCellCornerDblClick","beforeDraw","force","skipRender","beforeRender","onDraw","afterRender","onBeforeViewportScrollVertically","rowMapper","areColumnHeadersSelected","onBeforeViewportScrollHorizontally","columnMapper","areRowHeadersSelected","onScrollVertically","onScrollHorizontally","onBeforeRemoveCellClassNames","onBeforeHighlightingRowHeader","highlightMeta","newVisualRow","onBeforeHighlightingColumnHeader","newVisualColumn","onAfterDrawSelection","currentRow","currentColumn","layerLevel","cornersOfSelection","selectionRangeSize","selectionForLayer","peekByIndex","onBeforeDrawBorders","corners","borderClassName","startRenderableRow","startRenderableColumn","endRenderableRow","endRenderableColumn","visualCorners","onBeforeTouchScroll","onAfterMomentumScroll","onBeforeStretchingColumnWidth","stretchedWidth","onModifyRowHeaderWidth","rowHeaderWidth","onModifyGetCellCoords","visualIndexes","viewportRowCalculatorOverride","calc","viewportOffset","viewportRowRenderingOffset","renderableRows","firstRenderedRow","lastRenderedRow","ceil","viewportColumnCalculatorOverride","viewportColumnRenderingOffset","renderableColumns","firstRenderedColumn","lastRenderedColumn","columnHeaderHeight","Walkontable","spreader","which","stopPropagation","observeDOMVisibility","drawInterrupted","isChildOfTableBody","isSelectedOnlyCell","isCellEdited","isMouseDown","_this$hot$getSelected2","isSingleCell","updateCellHeader","div","span","getColumnHeaderClassNames","metaHeaderClassNames","headerClassName","renderedIndex","parentOverlay","getParentOverlay","columnFilter","sourceToRendered","rowFilter","fromCharCode","maximumVisibleElementWidth","inlineOffset","workspaceWidth","getWorkspaceWidth","maxWidth","maximumVisibleElementHeight","topOffset","workspaceHeight","getWorkspaceHeight","maxHeight","rowsRenderCalculator","getFirstRenderedRow","getLastRenderedRow","columnsRenderCalculator","getFirstRenderedColumn","getLastRenderedColumn","wtScroll","getFirstVisibleRow","getLastVisibleRow","getFirstVisibleColumn","getLastVisibleColumn","getViewportWidth","getViewportHeight","getElementOverlayName","_this$_wt$wtOverlays$","getOverlayByName","overlayName","_calculator","ViewportColumnsCalculator","ViewportRowsCalculator","DEFAULT_ROW_HEIGHT","_coords","_range","HIGHLIGHT_ACTIVE_HEADER_TYPE","ACTIVE_HEADER_TYPE","HIGHLIGHT_AREA_TYPE","AREA_TYPE","HIGHLIGHT_FOCUS_TYPE","FOCUS_TYPE","HIGHLIGHT_FILL_TYPE","FILL_TYPE","HIGHLIGHT_HEADER_TYPE","HEADER_TYPE","HIGHLIGHT_ROW_TYPE","ROW_TYPE","HIGHLIGHT_COLUMN_TYPE","COLUMN_TYPE","HIGHLIGHT_CUSTOM_SELECTION_TYPE","CUSTOM_SELECTION_TYPE","Renderer","_interopRequireWildcard","_orderView","OrderView","SharedOrderView","_getRequireWildcardCache","__esModule","__proto__","getOwnPropertyDescriptor","u","_fullyVisibleColumns","FullyVisibleColumnsCalculationType","_fullyVisibleRows","FullyVisibleRowsCalculationType","_partiallyVisibleColumns","PartiallyVisibleColumnsCalculationType","_partiallyVisibleRows","PartiallyVisibleRowsCalculationType","_renderedAllColumns","RenderedAllColumnsCalculationType","_renderedAllRows","RenderedAllRowsCalculationType","_renderedColumns","RenderedColumnsCalculationType","_renderedRows","RenderedRowsCalculationType","_viewportColumns","DEFAULT_WIDTH","_viewportRows","DEFAULT_HEIGHT","initialize","process","viewportCalculator","totalCalculatedWidth","zeroBasedScrollOffset","viewportWidth","compensatedViewportWidth","finalize","_startPositions$this$","scrollOffset","inlineStartOffset","needReverse","startPositions","calculatedViewportHeight","startPosition","mostRightScrollOffset","inlineStartColumnOffset","getColumnWidth","at","isVisibleInTrimmingContainer","totalCalculatedHeight","innerViewportHeight","viewportHeight","horizontalScrollbarHeight","mostBottomScrollOffset","topRowOffset","calculatedViewportWidth","overrideFn","_viewportBase","ViewportBaseCalculator","calculationTypes","columnWidthFn","calculate","_initialize","_process","_finalize","calculator","calculationResults","getResultsFor","calculatorId","rowHeightFn","_isRtl","isValid","tableParams","isEqual","isSouthEastOf","testedCoords","isNorthWestOf","isSouthWestOf","isNorthEastOf","normalize","assign","setHighlight","setFrom","setTo","containsHeaders","getOuterHeight","getOuterWidth","getHeight","fromRow","toRow","getWidth","fromCol","toCol","getCellsCount","getOuterTopStartCorner","getOuterBottomEndCorner","includesRange","overlaps","getOuterTopLeftCorner","getOuterBottomRightCorner","isOverlappingHorizontally","getOuterTopEndCorner","isOverlappingVertically","getOuterBottomStartCorner","getOuterTopRightCorner","expand","expandByRange","expandingRange","changeDirection","initialDirection","getDirection","expandingTopStart","expandingBottomEnd","resultTopRow","resultTopCol","resultBottomRow","resultBottomCol","finalFrom","finalTo","setDirection","getVerticalDirection","flipDirectionVertically","getHorizontalDirection","flipDirectionHorizontally","getOuterBottomLeftCorner","getTopLeftCorner","getTopEndCorner","getBottomRightCorner","getBottomStartCorner","getTopRightCorner","getBottomLeftCorner","isCorner","getOppositeCorner","getBordersSharedWith","thisBorders","bottom","rangeBorders","getInner","forAll","breakIteration","_base","WalkontableFacade","settingsOrInstance","CoreAbstract","_wot","_initFromSettings","facade","domBindings","wtSettings","cloneSource","cloneOverlay","selectionManager","wtEvent","lastMouseOver","momentumScrolling","touchApplied","fastDraw","getViewport","getOverlayName","param1","param2","param3","param4","hasSetting","_overlays","_overlay","_settings","_master","_viewport","_manager","Settings","facadeGetter","MasterTable","getTableDao","Viewport","getViewportDao","SelectionManager","Event","Overlays","findOriginalHeaders","toExport","allClassNames","newClassNames","wtRootElement","_this$wtOverlays","CLONE_TYPES","camelCaseOverlay","wot","topOverlayTrimmingContainer","topOverlay","trimmingContainer","inlineStartOverlayTrimmingContainer","inlineStartOverlay","topScrollPosition","getScrollPosition","topParentOffset","getTableParentOffset","inlineStartScrollPosition","inlineStartParentOffset","bottomOverlay","_wtSettings","_domBindings","_wtTable","_selectionManager","_parent","_facadeGetter","_selectedCellBeforeTouchEnd","_dblClickTimeout","_dblClickOrigin","onContextMenu","onMouseOver","onMouseOut","initTouchEvents","onTouchStart","onTouchEnd","_timeout","ongoing","initMouseEvents","onMouseUp","onMouseDown","selectedCellWasTouched","touchTarget","cellUnderFinger","parentCell","coordsOfCellUnderFinger","rowTouched","rowSelected","colTouched","colSelected","getFocusSelection","getAreaSelection","getParentNode","realTarget","callListener","lastTD","nextTD","_this$parentCell","parentCellCoords","isCellsRange","isEventCancelable","interactiveElements","tagName","listener","getSettingPure","_hasRenderingStateChanged","_containerDomResizeCount","_containerDomResizeCountTimeout","wotInstance","ResizeObserver","resizeObserver","disconnect","scrollbarSize","isOverflowHidden","initOverlays","hasScrollbarBottom","hasScrollbarRight","keyPressed","spreaderLastSize","verticalScrolling","horizontalScrolling","initBrowserLineHeight","registerListeners","lastScrollX","lastScrollY","getOverlays","includeMaster","overlays","lineHeight","lineHeightFalback","fontSize","browserLineHeight","TopOverlay","BottomOverlay","InlineStartOverlay","topInlineStartCornerOverlay","TopInlineStartCornerOverlay","bottomInlineStartCornerOverlay","BottomInlineStartCornerOverlay","overlay","hasRenderingStateChanged","updateStateOfRendering","afterDraw","syncScrollWithMaster","needFullRender","reset","refreshAll","onScroll","mainTableScrollableElement","topOverlayScrollableElement","inlineStartOverlayScrollableElement","onKeyDown","onKeyUp","onTableScroll","passive","isHighPixelRatio","devicePixelRatio","isScrollOnWindow","wheelEventOptions","onCloneWheel","resizeTimeout","deregisterListeners","masterHorizontal","masterVertical","syncScrollPositions","shouldNotWheelVertically","shouldNotWheelHorizontally","isScrollPossible","translateMouseWheelToScroll","deltaY","wheelDeltaY","deltaX","wheelDeltaX","deltaMode","isScrollVerticallyPossible","scrollVertically","isScrollHorizontallyPossible","scrollHorizontally","previousScroll","topHolder","leftHolder","bottomHolder","master","updateMainScrollableElement","wasSpreaderSizeUpdated","needsUpdating","isWindowScrolled","headerRowSize","getRowHeaderWidth","headerColumnSize","getColumnHeaderHeight","proposedHiderHeight","sumCellSizes","proposedHiderWidth","hiderElement","hider","hiderStyle","isScrolledBeyondHiderHeight","isScrolledBeyondHiderWidth","columnHeaderBorderCompensation","rowHeaderBorderCompensation","rootElemScrollHeight","rootElemScrollWidth","holderScrollHeight","holderScrollWidth","expandHiderVerticallyBy","heightDelta","expandHiderHorizontallyBy","widthDelta","applyToDOM","masterTable","_bottomInlineStartCorner","_bottom","_inlineStart","Overlay","_topInlineStartCorner","_top","_constants","_exportNames","CLONE_BOTTOM_INLINE_START_CORNER","createTable","BottomInlineStartCornerOverlayTable","shouldBeRendered","resetFixedPosition","updateTrimmingContainer","overlayRoot","getOverlayOffset","repositionOverlay","tableHeight","tableWidth","hasDefinedSize","cloneRoot","bottomOffset","hasVerticalScroll","getTotalHeight","hasHorizontalScroll","_stickyRowsBottom","_stickyColumnsStart","Table","dataAccessObject","stickyRowsBottom","stickyColumnsStart","_column","_row","_renderer","_column2","_row2","isMaster","rootTable","createSpreader","createHider","createHolder","alignOverlaysWithTrimmingContainer","fixTableDomTree","correctHeaderWidth","origRowHeaderWidth","_modifyRowHeaderWidth","rowUtils","RowUtils","columnUtils","ColumnUtils","tableRenderer","COLGROUP","is","overlayTypeName","rowHeadersCount","columnHeadersCount","runFastDraw","holderOffset","createCalculators","leftScrollPos","previousState","tableOffset","parentTableOffset","RowFilter","ColumnFilter","performRedraw","setHeaderContentRenderers","CLONE_BOTTOM","resetOversizedRows","setActiveOverlayName","setViewportSize","setFilters","containerWidth","markOversizedColumnHeaders","adjustColumnHeaderHeights","markOversizedRows","createVisibleCalculators","hiderWidth","calculateWidths","colGroup","positionChanged","setActiveOverlay","markIfOversizedColumnHeader","sourceColIndex","renderedToSource","defaultRowHeight","previousColHeaderHeight","currentHeader","currentHeaderHeight","columnHeaderHeightSetting","getColumnHeader","oversizedColumnHeaders","rowsToRender","visibleRowIndex","sourceRow","oversizedRows","isRowBeforeRenderedRows","isRowAfterRenderedRows","isColumnBeforeRenderedColumns","isColumnAfterRenderedColumns","getRow","sourceColumnToVisibleRowHeadedColumn","_this$rowFilter","sourceRowToVisibleColHeadedRow","_this$rowFilter2","getColumnHeaders","THs","visibleColumn","renderedRow","visibleRow","getRowHeaders","cellElement","CONTAINER","cellIndex","CLONE_TOP_INLINE_START_CORNER","CLONE_TOP","visibleColHeadedRowToSourceRow","CLONE_INLINE_START","offsettedTH","visibleRowHeadedColumnToSourceColumn","expectedTableHeight","actualTableHeight","previousRowHeight","rowInnerHeight","sourceRowIndex","currentTr","getTrForRow","isColumnHeaderRendered","isRowHeaderRendered","isColumnAfterViewport","isRowAfterViewport","isColumnBeforeViewport","isLastRowFullyVisible","isLastColumnFullyVisible","allRowsInViewport","allColumnsInViewport","getHeaderHeight","sourceColumn","getStretchedColumnWidth","hasTableHeight","hasTableWidth","getTotalWidth","rowHeaderWidthFactory","widths","_correctRowHeaderWidth","total","countTH","offsetted","unOffsetted","unOffsettedTH","_rowHeaders","RowHeadersRenderer","_columnHeaders","ColumnHeadersRenderer","_colGroup","ColGroupRenderer","_rows","RowsRenderer","_cells","CellsRenderer","TableRenderer","setRenderers","setAxisUtils","rowsCount","columnsCount","adjust","BaseRenderer","obtainOrderView","rootNode","orderView","orderViews","sourceColumnIndex","nodesPool","obtain","rowHeaderFunctions","renderedRowToSource","getRenderedNode","cellsView","appendView","setSize","setOffset","renderedColumnToSource","visibleColumnIndex","getCurrentNode","isAriaEnabled","_view","_sharedView","_viewSizeSet","childNodeType","ViewSizeSet","sizeSet","isSharedViewSet","isShared","getNode","collectedNodes","getRenderedChildCount","childElementCount","isPlaceOn","WORKING_SPACE_TOP","nextElementSibling","nextSize","getViewSize","newNode","WORKING_SPACE_BOTTOM","isSharedPlacedOnTop","sharedSize","replaceChild","WORKING_SPACE_ALL","_viewSize","ViewSize","workingSpace","append","viewSize","prepend","currentSize","currentOffset","nextOffset","prependView","_nodesPool","NodesPool","setTable","setRootDocument","columnsToRender","allColumnsToRender","renderedNodes","theadChildrenLength","rowHeaderIndex","columnHeaderFunctions","performanceWarningAppeared","getHeaderWidth","ROW_CLASSNAMES","rowEven","rowOdd","_this$table$rowUtils$","_this$table$rowUtils","rowHeadersView","activeOverlayName","getHeightByOverlayName","_columnStretching","stretching","ColumnStretching","stretchMode","stretchingColumnWidthFn","sourceCol","sourceIndex","oversizedHeight","headerWidths","refreshStretching","mainHolder","scrollbarCompensation","rowHeaderWidthSetting","defaultColumnWidth","_totalTargetWidth","_totalColumns","_stretchingColumnWidthFn","_columnWidthFn","_stretchMode","totalWidth","stretchAllRatio","stretchAllColumnsWidth","needVerifyLastColumnWidth","stretchLastWidth","sumAll","_getColumnWidth","permanentColumnWidth","remainingSize","Infinity","lastColumnWidth","baseWidth","_getStretchedAllColumnWidth","_getStretchedLastColumnWidth","sumRatioWidth","round","newStretchedWidth","_clone","makeClone","drawPhase","getRelativeCellPosition","windowScroll","fixedColumnStart","fixedRowTop","fixedRowBottom","spreaderOffset","getRelativeStartPosition","elementOffset","offsetObject","getRelativeCellPositionWithinWindow","getRelativeCellPositionWithinHolder","onFixedRowTop","onFixedColumn","absoluteRootElementPosition","horizontalOffset","verticalOffset","absoluteRootElementStartPosition","absoluteOverlayPosition","onFixedRowBottom","tableScrollPosition","horizontal","vertical","clonedTable","tableParent","CLONE_CLASS_NAMES","mainTableRole","Clone","viewport","holderStyle","rootStyle","_scroll","Scroll","createScrollDao","originalHeaders","startColumnRendered","startColumnVisible","columnsVisibleCalculator","startColumnPartiallyVisible","columnsPartiallyVisibleCalculator","endColumnRendered","endColumnVisible","endColumnPartiallyVisible","countColumnsRendered","countColumnsVisible","startRowRendered","startRowVisible","rowsVisibleCalculator","startRowPartiallyVisible","rowsPartiallyVisibleCalculator","endRowRendered","endRowVisible","endRowPartiallyVisible","countRowsRendered","countRowsVisible","_Scroll_brand","scrolledHorizontally","scrolledVertically","autoSnapping","firstColumn","lastColumn","firstRow","lastRow","_getLastRowIndex","_getLastColumnIndex","lastColumnIndex","inlineStartRootElementOffset","tableRect","docOffsetWidth","rootElementOffset","windowScrollLeft","windowWidth","columnsWidth","lastRowIndex","windowScrollTop","windowHeight","rowsHeight","cachedFixedRowsBottom","BottomOverlayTable","overlayPosition","adjustHeaderBordersPosition","setScrollPosition","sum","adjustRootElementSize","adjustRootChildrenSize","overlayRootStyle","syncOverlayOffset","styleProperty","bottomEdge","newY","sourceInstance","overlayOffset","rootHeight","overlayRootHeight","maxOffset","docClientHeight","areFixedRowsBottomChanged","masterParent","_calculatedColumns","calculatedColumns","InlineStartOverlayTable","scrollbarHeight","selectionCornerOffset","CORNER_DEFAULT_STYLE","beyondRendered","newX","rootWidth","overlayRootWidth","preventVerticalOverflow","_calculatedRows","calculatedRows","_constants2","_localHooks","oldCoords","newCoords","getCorners","runLocalHooks","localHooks","clearLocalHooks","borderWidth","borderStyle","borderColor","_scanner2","_border","_activeOverlaysWot","_selections","_scanner","_appliedClasses","_destroyListeners","_selectionBorders","_SelectionManager_brand","SelectionScanner","activeWot","getFocus","createLayeredArea","getBorderInstance","border","borders","Border","getBorderInstances","destroyBorders","_resetCells","classNamesMap","headerAttributesMap","headerAttributes","createLayers","selectionType","borderInstance","disappear","setActiveSelection","scan","classNamesLayers","appear","occurrenceCount","_","flat","cellAttributes","appliedOverlaysClasses","classesToRemove","_SelectionScanner_brand","activeOverlaysWot","scanColumnsInHeadersRange","scanRowsInHeadersRange","scanCellsRange","scanRowsInCellsRange","scanColumnsInCellsRange","topRow","topColumn","bottomRow","bottomColumn","renderedColumnsCount","cursor","positiveBasedHeaderLevel","newSourceCol","columnCursor","selectionWidth","renderedRowsCount","newSourceRow","rowCursor","selectionHeight","_scanCellsRange","additionalSelectionClass","mouseDown","main","topStyle","bottomStyle","startStyle","endStyle","cornerDefaultStyle","cornerCenterPointOffset","corner","cornerStyle","createBorders","documentBody","onMouseEnter","bounds","isOutside","mouseEvent","handlerEvent","borderDivs","hide","backgroundColor","color","createMultipleSelectorHandles","bordersHolder","selectionHandles","topHitArea","bottomHitArea","hitAreaWidth","styles","hitAreaStyle","handleStyle","background","isPartRange","areaSelection","updateMultipleSelectionHandlesPosition","inlinePosProperty","topStyles","topHitAreaStyles","bottomStyles","bottomHitAreaStyles","handleBorderSize","handleSize","hitAreaSize","totalTableWidth","totalTableHeight","bottomHandlerInline","bottomHandlerAreaInline","bottomHandlerTop","bottomHandlerAreaTop","cornerVisible","zIndex","disabled","fromColumn","toColumn","columnHeader","fromTD","toTD","fromOffset","toOffset","containerOffset","minTop","minLeft","inlineStartPos","fromWidth","gridRightPos","isEntireColumnSelected","modifiedValues","getDimensionsFromHeader","fromTH","isEntireRowSelected","borderTopWidth","cornerVisibleSetting","checkRow","checkCol","borderRightWidth","trimToWindow","cornerHalfWidth","cornerHalfHeight","toTdOffsetLeft","cornerOverlappingContainer","cornerEdge","toTdOffsetTop","cornerBottomEdge","borderBottomWidth","startRowIndex","endRowIndex","startColumnIndex","endColumnIndex","fromIndex","toIndex","headerIndex","rootHotElement","getHeaderFn","dimensionFn","entireSelectionClassname","dimension","dimensionProperty","startHeader","endHeader","columnHeaderLevelCount","startHeaderOffset","endOffset","changeBorderStyle","borderElement","changeBorderToDefaultStyle","defaultBorder","toggleHiddenClass","TopInlineStartCornerOverlayTable","_stickyRowsTop","stickyRowsTop","cachedFixedRowsTop","TopOverlayTable","skipInnerBorderAdjusting","hiderRect","preventHorizontalOverflow","areFixedRowsTopChanged","getDefaults","defaults","currentRowClassName","currentColumnClassName","freezeOverlays","onCellDblClick","groups","settingValue","trimmingElement","trimmingElementParent","trimmingHeight","trimmingOverflow","cloneNode","cloneHeight","isTableVisible","hasOversizedColumnHeadersMarked","rowHeaderCount","columnCount","NaN","rowsCalculatorTypes","columnsCalculatorTypes","currentDocument","elemHeight","inlineStart","getContainerFillWidth","sumColumnWidths","stretchSetting","mainContainer","dummyElement","fillWidth","getWorkspaceOffset","containerHeight","rowHeadersWidthSetting","createRowsCalculator","calculatorTypes","fixedRowsHeight","createColumnsCalculator","fixedColumnsWidth","rowsCalculator","columnsCalculator","proposedRowsVisibleCalculator","areAllProposedVisibleRowsAlreadyRendered","proposedColumnsVisibleCalculator","areAllProposedVisibleColumnsAlreadyRendered","renderedStartRow","renderedEndRow","renderedStartColumn","renderedEndColumn","isShiftKey","currentSelection","selectedCorner","isSelectedByCorner","selectedRow","markSource","setRangeEnd","allowRightClickSelection","inInSelection","performSelection","setRangeStart","disableHeadersHighlight","markEndSource","mouseOver","selectedColumn","tableProps","handlers","isLeftClickEvent","isRightClickEvent","Symbol","rootSymbol","modifyRowData","toArray","getAllProps","dataDotNotation","dataRow","newDataRow","getAtPhysicalCell","rangeStart","rangeEnd","valueHolder","columnOrProp","modifiedSourceLength","COLUMN_LABEL_BASE","COLUMN_LABEL_BASE_LENGTH","dividend","columnLabel","modulo","spreadsheetColumnIndex","createSpreadsheetData","createSpreadsheetObjectData","createEmptySpreadsheetData","dataRowToChangesArray","rowOffset","changesArray","isArrayOfArrays","every","isArrayOfObjects","_indexMapper","_mapCollection","getRegisteredMapsCounter","getIncreasedIndexes","getDecreasedIndexes","alterUtilsFactory","_maps","_mapCollections","_observable","IndexesSequence","AggregatedCollection","valuesForIndex","some","MapCollection","ChangesObservable","initialIndexValue","indexesSequence","indexesSequenceChanged","updateCache","indexesChangeSource","trimmingMapsCollection","changedMap","trimmedIndexesChanged","hidingMapsCollection","variousMapsCollection","isBatched","createChangesObserver","indexMapType","hidingChangesObservable","createObserver","createAndRegisterIndexMap","indexName","mapType","initValueOrFn","registerMap","createIndexMap","uniqueName","indexMap","TrimmingMap","HidingMap","numberOfIndexes","getNumberOfIndexes","unregisterMap","unregister","physicalIndex","notTrimmedIndexesCache","getPhysicalFromRenderableIndex","renderablePhysicalIndexesCache","fromPhysicalToVisualIndexesCache","fromVisualToRenderableIndexesCache","fromVisualIndex","searchDirection","searchAlsoOtherWayAround","visibleIndexes","notHiddenIndexesCache","initEvery","currentIndexCount","indexesToBeRemoved","removeIndexes","insertIndexes","getIndexesSequence","setIndexesSequence","setValues","getNotTrimmedIndexes","readFromCache","isTrimmed","getNotHiddenIndexes","getNotHiddenIndexesLength","getRenderableIndexes","notTrimmedIndexes","getRenderableIndexesLength","moveIndexes","movedIndexes","finalIndex","physicalMovedIndexes","notTrimmedIndexesLength","movedIndexesLength","notMovedIndexes","getListWithRemovedItems","notTrimmedNotMovedItems","destinationPosition","getListWithInsertedItems","getMergedValueAtIndex","firstInsertedVisualIndex","amountOfIndexes","nthVisibleIndex","firstInsertedPhysicalIndex","insertionIndex","insertedIndexes","nextIndex","stepsFromStart","insert","insertToEvery","removedIndexes","removeFromEvery","anyCachedIndexChanged","cacheFromPhysicalToVisualIndexes","cacheFromVisualToRenderableIndexes","emit","getMergedValues","nrOfNotTrimmedIndexes","nrOfRenderableIndexes","_hidingMap","_indexMap","IndexMap","_linkedPhysicalIndexToValueMap","LinkedPhysicalIndexToValueMap","_physicalIndexToValueMap","PhysicalIndexToValueMap","_trimmingMap","_indexesSequence","_indexesSequence2","availableIndexMapTypes","getHiddenIndexes","indexesList","_physicallyIndexed","indexedValues","getValueAtIndex","setValueAtIndex","setDefaultValues","insertedValuesMapping","firstInsertedIndex","insertedIndex","ordinalNumber","_actionsOnIndexes","orderOfIndexes","clearValue","getListWithoutIndexes","getEntries","removedIndex","getTrimmedIndexes","listAfterUpdate","alterStrategies","sequenceStrategyInsert","sequenceStrategyRemove","physicalStrategyInsert","physicalStrategyRemove","indexationStrategy","_aggregatedCollection","aggregationFunction","fallbackValue","mergedValuesCache","mapsValuesMatrix","indexesValuesMatrix","mapsLength","mapIndex","valueAtIndex","registeredMaps","_observer","_observers","_indexMatrix","_currentIndexState","_isMatrixIndexesInitialized","_initialIndexValue","ChangesObserver","_writeInitialChanges","arrayDiff","indexesState","currentIndexState","_write","_currentInitialChanges","subscribe","unsubscribe","initialChanges","baseArray","newArray","op","oldValue","_phraseFormatters","_enUS","_dictionaryKeys","DEFAULT_LANGUAGE_CODE","DEFAULT_DICTIONARY","registerGloballyLanguageDictionary","getGlobalLanguageDictionary","hasGlobalLanguageDictionary","getGlobalLanguagesDictionaries","languageCodeOrDictionary","dictionary","dictionaryObject","extendLanguageDictionary","extendNotExistingKeys","getDefaultLanguageDictionary","argumentsForFormatters","languageDictionary","phrasePropositions","formattedPhrase","getFormattedPhrase","formattedPhrasePropositions","getPhraseFormatters","formatter","createCellHeadersRange","firstRowIndex","nextRowIndex","fromValue","toValue","languageCodePattern","partsOfLanguageCode","exec","_pluralize","registerGloballyPhraseFormatter","getGlobalPhraseFormatters","formatterFn","pluralizeFn","pluralize","pluralForm","isPluralizable","CONTEXTMENU_ITEMS_NO_ITEMS","CONTEXTMENU_ITEMS_ROW_ABOVE","CONTEXTMENU_ITEMS_ROW_BELOW","CONTEXTMENU_ITEMS_INSERT_LEFT","CONTEXTMENU_ITEMS_INSERT_RIGHT","CONTEXTMENU_ITEMS_REMOVE_ROW","CONTEXTMENU_ITEMS_REMOVE_COLUMN","CONTEXTMENU_ITEMS_UNDO","CONTEXTMENU_ITEMS_REDO","CONTEXTMENU_ITEMS_READ_ONLY","CONTEXTMENU_ITEMS_CLEAR_COLUMN","CONTEXTMENU_ITEMS_ALIGNMENT","CONTEXTMENU_ITEMS_ALIGNMENT_LEFT","CONTEXTMENU_ITEMS_ALIGNMENT_CENTER","CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT","CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY","CONTEXTMENU_ITEMS_ALIGNMENT_TOP","CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE","CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM","CONTEXTMENU_ITEMS_FREEZE_COLUMN","CONTEXTMENU_ITEMS_UNFREEZE_COLUMN","CONTEXTMENU_ITEMS_BORDERS","CONTEXTMENU_ITEMS_BORDERS_TOP","CONTEXTMENU_ITEMS_BORDERS_RIGHT","CONTEXTMENU_ITEMS_BORDERS_BOTTOM","CONTEXTMENU_ITEMS_BORDERS_LEFT","CONTEXTMENU_ITEMS_REMOVE_BORDERS","CONTEXTMENU_ITEMS_ADD_COMMENT","CONTEXTMENU_ITEMS_EDIT_COMMENT","CONTEXTMENU_ITEMS_REMOVE_COMMENT","CONTEXTMENU_ITEMS_READ_ONLY_COMMENT","CONTEXTMENU_ITEMS_MERGE_CELLS","CONTEXTMENU_ITEMS_UNMERGE_CELLS","CONTEXTMENU_ITEMS_COPY","CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_HEADERS","CONTEXTMENU_ITEMS_COPY_WITH_COLUMN_GROUP_HEADERS","CONTEXTMENU_ITEMS_COPY_COLUMN_HEADERS_ONLY","CONTEXTMENU_ITEMS_CUT","CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD","CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD","CONTEXTMENU_ITEMS_HIDE_COLUMN","CONTEXTMENU_ITEMS_SHOW_COLUMN","CONTEXTMENU_ITEMS_HIDE_ROW","CONTEXTMENU_ITEMS_SHOW_ROW","FILTERS_CONDITIONS_NONE","FILTERS_CONDITIONS_EMPTY","FILTERS_CONDITIONS_NOT_EMPTY","FILTERS_CONDITIONS_EQUAL","FILTERS_CONDITIONS_NOT_EQUAL","FILTERS_CONDITIONS_BEGINS_WITH","FILTERS_CONDITIONS_ENDS_WITH","FILTERS_CONDITIONS_CONTAINS","FILTERS_CONDITIONS_NOT_CONTAIN","FILTERS_CONDITIONS_GREATER_THAN","FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL","FILTERS_CONDITIONS_LESS_THAN","FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL","FILTERS_CONDITIONS_BETWEEN","FILTERS_CONDITIONS_NOT_BETWEEN","FILTERS_CONDITIONS_AFTER","FILTERS_CONDITIONS_BEFORE","FILTERS_CONDITIONS_TODAY","FILTERS_CONDITIONS_TOMORROW","FILTERS_CONDITIONS_YESTERDAY","FILTERS_VALUES_BLANK_CELLS","FILTERS_DIVS_FILTER_BY_CONDITION","FILTERS_DIVS_FILTER_BY_VALUE","FILTERS_LABELS_CONJUNCTION","FILTERS_LABELS_DISJUNCTION","FILTERS_BUTTONS_SELECT_ALL","FILTERS_BUTTONS_CLEAR","FILTERS_BUTTONS_OK","FILTERS_BUTTONS_CANCEL","FILTERS_BUTTONS_PLACEHOLDER_SEARCH","FILTERS_BUTTONS_PLACEHOLDER_VALUE","FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE","CHECKBOX_CHECKED","CHECKBOX_UNCHECKED","CONTEXT_MENU_ITEMS_NAMESPACE","CM_ALIAS","FILTERS_NAMESPACE","FILTERS_CONDITIONS_NAMESPACE","FILTERS_CONDITIONS_BY_VALUE","CHECKBOX_RENDERER_NAMESPACE","detectSelectionType","normalizeSelectionFactory","_highlight","_transformation2","_transformation","_focusTransformation","_isFocusSelectionChanged","_disableHeadersHighlight","_selectionSource","_expectedLayersCount","SelectionRange","Highlight","currentHeaderClassName","activeHeaderClassName","rowClassName","columnClassName","currentColClassName","disabledCellSelection","cellCornerVisible","isCellCornerVisible","areaCornerVisible","isAreaCornerVisible","Transformation","autoWrapRow","autoWrapCol","sourceName","setExpectedLayers","layersCount","begin","inProgress","multipleSelection","highlightCoords","isMultipleMode","selectionMode","isMultipleSelection","coordsClone","selectedByRowHeader","selectedByColumnHeader","setRangeStartOnly","navigableHeaders","horizontalDir","verticalDir","setRangeFocus","applyAndCommit","isLastLayer","getAreas","getLayeredAreas","getActiveRowHeaders","getActiveColumnHeaders","getActiveCornerHeaders","getRowHighlights","getColumnHighlights","useLayerLevel","areaHighlight","createArea","layeredAreaHighlight","rowHeaderHighlight","createRowHeader","columnHeaderHighlight","createColumnHeader","activeRowHeaderHighlight","createActiveRowHeader","activeColumnHeaderHighlight","createActiveColumnHeader","activeCornerHeaderHighlight","createActiveCornerHeader","rowHighlight","createRowHighlight","columnHighlight","createColumnHighlight","isEnabledFor","previousRange","previous","syncWith","rowCoordsFrom","rowCoordsTo","columnCoordsFrom","columnCoordsTo","highlightRowHeaders","highlightColumnHeaders","focusHighlight","createMissingRecords","setOffsetSize","resetOffsetSize","transformEnd","columnsInRange","rowsInRange","focusCoords","minRow","coordsStartAmount","pop","coordsStart","coordsEnd","minColumn","isMultipleListener","isFocusSelectionChanged","fillHandle","_this$getSelectedRang","startCoords","endCoords","selectionRanges","_this2","SELECTION_TYPE_EMPTY","SELECTION_TYPE_UNRECOGNIZED","selectionSchemaNormalizer","keepDirection","rangeValidity","columnHeaderLastIndex","fromCoords","toCoords","highlightRow","highlightColumn","rowHeaderLastIndex","countColumns","ranges","customSelections","getCustomSelections","customSelection","currentLayer","areaLayeredHighlight","_activeHeader","_areaLayered","_area","_focus","_customSelection","_fill","_header","_Highlight_brand","createFocusHighlight","createFillHighlight","highlightType","disableHighlight","getFill","_createHighlight","layeredAreas","createAreaLayeredHighlight","areas","createAreaHighlight","createHeaderHighlight","activeRowHeaders","createActiveHighlight","activeColumnHeaders","activeCornerHeaders","rowHighlights","columnHighlights","addCustomSelection","selectionInstance","createCustomHighlight","iterator","cacheMap","highlightFactory","_visualSelection","createHighlight","restOptions","VisualSelection","visualCellRange","trimToVisibleCellsRangeOnly","visibleFromCoords","getNearestNotHiddenCoords","visibleToCoords","rowSearchDirection","columnSearchDirection","nextVisibleRow","nextVisibleColumn","trimmedCellRange","createRenderableCellRange","broaderCellRange","coordsFrom","rowDirection","columnDirection","renderableHighlight","cellCoordsVisual","currentHighlight","cellCoordsRenderable","getVisualCorners","visualFromCoords","visualToCoords","renderableFromCoords","renderableToCoords","_offset","_Transformation_brand","highlightRenderableCoords","rowTransformDir","colTransformDir","_getTableSize","_visualToZeroBasedCoords","zeroBasedCoords","isActionInterrupted","nextColumn","_zeroBasedToVisualCoords","previousColumn","nextRow","previousRow","rowDir","colDir","_clampCoords","_findFirstNonHiddenZeroBasedRow","_findFirstNonHiddenZeroBasedColumn","topStartCorner","topEndCorner","bottomEndCorner","columnRestDelta","rowRestDelta","bottomRowIndex","newVisualCoords","SELECTION_TYPE_ARRAY","SELECTION_TYPE_OBJECT","SELECTION_TYPES","ARRAY_TYPE_PATTERN","rootCall","childCall","_callSymbol","isRootCall","firstItem","isArrayType","isObjectType","origRowStart","origColumnStart","origRowEnd","origColumnEnd","transformSelectionToColumnDistance","unorderedIndexes","columnNonHeaderStart","orderedIndexes","normalizedColumnRanges","transformSelectionToRowDistance","rowNonHeaderStart","normalizedRowRanges","DataMap","_metaManager","_metaSchema","_replaceData","_dynamicCellMeta","_extendMetaProperties","_SheetClip","DESTINATION_CLIPBOARD_GENERATOR","createDuckSchema","propToColCache","filteredIndex","schemaLen","recursiveDuckColumns","lastCol","propertyParent","cachedPhysicalIndex","refreshDuckSchema","sourceRowsCount","physicalRowIndex","continueProcess","rowsToAdd","spliceData","newVisualRowIndex","numberOfCreatedCols","createColumn","newVisualColumnIndex","removedPhysicalIndexes","visualRowsToPhysical","sourceRowsLength","actionWasNotCancelled","numberOfRemovedIndexes","filterData","customDefinedColumns","descendingPhysicalRows","rowPhysicalIndex","visualColumnsToPhysical","descendingPhysicalColumns","isTableUniform","removedColumnsCount","removeColumn","colData","removed","after","deleteCount","continueSplicing","newData","physicalRows","modifiedRowData","sliced","copyable","logicRows","physicRow","rowsToRemove","visualCols","physicalCol","colsToRemove","maxRowsFromSettings","countCachedColumns","destination","output","getFn","getText","regUniversalNewLine","regNextCellNoQuotes","regNextEmptyCell","str","lastLength","nextCell","startsWith","quoteNo","isStillCell","nextChar","matchedText","rLen","cLen","_globalMeta","_tableMeta","_columnMeta","_cellMeta","customSettings","metaMods","GlobalMeta","TableMeta","columnMeta","ColumnMeta","CellMeta","ModifierClass","updateMeta","getMeta","updateGlobalMeta","updateTableMeta","setMeta","updateCellMeta","removeMeta","getMetas","getMetasAtRow","createTableMetaEmptyClass","meta","metaCtor","getMetaConstructor","_settings$type","extendByMetaType","canBeOverwritten","metaObject","_metaObject$_automati","_automaticallyAssignedMetaProps","settingsToCompareWith","validType","getCellType","expandedType","_metaObject$_automati2","columnFactory","conflictList","isUnsignedNumber","assert","condition","errorMessage","isNullish","getRegisteredCellTypes","getRegisteredCellTypeNames","hasCellType","CELL_TYPE","registerEditor","registerRenderer","registerValidator","allowEmpty","allowHtml","allowRemoveColumn","allowRemoveRow","autoColumnSize","autoRowSize","bindRowsWithHeaders","checkedTemplate","collapsibleColumns","columnSorting","columnSummary","commentedCellClassName","comments","contextMenu","copyPaste","correctFormat","customBorders","dateFormat","timeFormat","datePickerConfig","defaultDate","dragToScroll","dropdownMenu","enterBeginsEditing","autoInsertRow","filteringCaseSensitive","filters","fixedColumnsLeft","formulas","hiddenColumns","hiddenRows","invalidCellClassName","rowLen","colLen","locale","manualColumnFreeze","manualColumnMove","manualColumnResize","manualRowMove","manualRowResize","multiColumnSorting","tabNavigation","nestedRows","noWordWrapClassName","numericFormat","persistentState","placeholder","placeholderCellClassName","readOnlyCellClassName","search","selectOptions","sortByRelevance","startCols","startRows","strict","tabMoves","trimDropdown","trimRows","trimWhitespace","uncheckedTemplate","undo","visibleRows","wordWrap","MetaCtor","_lazyFactoryMap","COLUMNS_PROPS_CONFLICTS","LazyFactoryMap","_createMeta","metas","valueFactory","dataIndex","_getStorageIndexByKey","holes","reuseIndex","newIndexes","dataLength","validEntries","keyIndex","_getKeyByStorageIndex","_createRow","_cellMeta$_automatica","rowsMeta","setDataMapFunction","callbackFunction","config","capitalizedInternalSource","extendCellMeta","metaSyncMemo","_this$metaSyncMemo$ge","cellSettings","_cellSettings$type","initOnly","onChange","usageTracker","_initOnlyCallback","isInitialChange","extendMetaProps","propDescriptors","descriptor","alias","hasTarget","targetProp","origProp","installPropWatcher","_initOnlySettings","self","_focusCatcher","_viewportScroll","_focusDetector","clampCoordsIfNeeded","normalizeCoordsIfNeeded","recentlyAddedFocusCoords","activate","deactivate","installFocusDetector","onFocusFromTop","_clampCoordsIfNeeded","mostTopStartCoords","getMostTopStartPosition","onFocusFromBottom","_clampCoordsIfNeeded2","mostBottomEndCoords","getMostBottomEndPosition","rowWrapState","wrapped","flipped","isSavingCoordsEnabled","isTabOrShiftTabPressed","preventViewportScroll","_hot$getSelectedRange","interruptedByAutoInsertMode","isFlipped","deactivateTable","shortcutOptions","relativeToGroup","GRID_GROUP","group","getContext","addShortcuts","_rowIndexMapper$getVi","_columnIndexMapper$ge","_editor","_grid","shortcutsGridContext","shortcutsEditorContext","_commands","addContext","commandsPool","createKeyboardShortcutCommandsPool","EDITOR_EDIT_GROUP","editorCloseAndSaveByEnter","captureCtrl","forwardToContext","editorCloseAndSave","editorCloseAndSaveByArrowKeys","editorCloseWithoutSaving","_extendCellsSelection","_moveCellSelection","_emptySelectedCells","_scrollToFocusedCell","_selectAllCells","_selectAllCellsAndHeaders","_populateSelectedCellsData","allCommands","getAllEditorCommands","getAllSelectionExtendCommands","getAllSelectionMoveCommands","selectAllCells","selectAllCellsAndHeaders","populateSelectedCellsData","commands","_closeAndSave","_closeAndSaveByArrowKeys","_closeAndSaveByEnter","_closeWithoutSaving","_fastOpen","_open","getAllCommands","closeAndSave","closeAndSaveByArrowKeys","closeAndSaveByEnter","closeWithoutSaving","fastOpen","open","command","isInFullEditMode","state","EDITOR_STATE","EDITING","_hooksRefRegisterer","VIRGIN","WAITING","FINISHED","_fireCallbacks","_closeCallback","setValue","close","Editor","saveValue","ctrlDown","selectedLast","stringifiedInitialValue","_opened","previousCloseCallback","discardEditor","_fullEditMode","getEditedCellRect","_wtOverlays$getParent","getEditedCell","cellWidth","scrollableContainerTop","scrollableContainerLeft","containerScrollTop","containerScrollLeft","gridMostRightPos","overlayTable","editTopModifier","topPos","nrOfRenderableRowIndexes","firstRowIndexOfTheBottomOverlay","firstRowOffset","firstColumnOffset","horizontalScrollPosition","verticalScrollPosition","cellTopOffset","bottomWtViewport","bottomWtTable","cellStartOffset","cellComputedStyle","borderPhysicalWidthProp","inlineStartBorderCompensation","topBorderCompensation","actualVerticalScrollbarWidth","actualHorizontalScrollbarWidth","getEditedCellsLayerClass","editorSection","checkEditorSection","hooksRefRegisterer","_hooksStorage","removeHooksByKey","clearHooks","_down","_downByViewportHeight","_left","_right","_toColumns","_toMostBottom","_toMostInlineEnd","_toMostInlineStart","_toMostLeft","_toMostRight","_toMostTop","_toRows","_up","_upByViewportHeight","down","downByViewportHeight","toColumns","toMostBottom","toMostInlineEnd","toMostInlineStart","toMostLeft","toMostRight","toMostTop","toRows","up","upByViewportHeight","nextRowIndexToSelect","scrollPadding","nextVerticalScroll","isFocusHighlightedByHeader","newFrom","fixedColumns","_inlineEnd","_toMostBottomInlineEnd","_toMostTopInlineStart","inlineEnd","toMostBottomInlineEnd","toMostTopInlineStart","rowsStep","fixedRows","firstVisibleRow","firstVisibleColumn","lastVisibleRow","lastVisibleColumn","visibleCoordsFrom","visibleCoordsTo","visibleRange","scrollCoords","offsetColumns","offsetRows","valueToPopulate","cellValues","runOnlyIf","editorFastOpen","editorOpen","_hot$getSelectedRange2","_hot$getSelectedRange3","_hot$getSelectedRange4","extendCellsSelectionToColumns","extendCellsSelectionToRows","moveCellSelectionUp","moveCellSelectionToMostTop","extendCellsSelectionUp","extendCellsSelectionToMostTop","moveCellSelectionDown","moveCellSelectionToMostBottom","extendCellsSelectionDown","extendCellsSelectionToMostBottom","moveCellSelectionLeft","moveCellSelectionToMostLeft","extendCellsSelectionLeft","extendCellsSelectionToMostLeft","moveCellSelectionRight","moveCellSelectionToMostRight","extendCellsSelectionRight","extendCellsSelectionToMostRight","moveCellSelectionToMostInlineStart","extendCellsSelectionToMostInlineStart","moveCellSelectionToMostTopInlineStart","moveCellSelectionToMostInlineEnd","extendCellsSelectionToMostInlineEnd","moveCellSelectionToMostBottomInlineEnd","moveCellSelectionUpByViewportHight","extendCellsSelectionUpByViewportHeight","moveCellSelectionDownByViewportHeight","extendCellsSelectionDownByViewportHeight","moveCellSelectionInlineStart","moveCellSelectionInlineEnd","inputTrapTop","createInputElement","inputTrapBottom","before","tabIndex","_columnHeaderScroll","_cornerHeaderScroll","_focusScroll","_multipleScroll","_noncontiguousScroll","_rowHeaderScroll","_singleScroll","skipNextCall","isSuspended","_scrollStrategy","scrollStrategy","focusScrollStrategy","cornerHeaderScrollStrategy","rowHeaderScrollStrategy","columnHeaderScrollStrategy","multipleScrollStrategy","singleScrollStrategy","noncontiguousScrollStrategy","selectionSource","_context","_recorder","CONTEXTS","activeContextName","contextName","createContext","getActiveContextName","isCtrlKeySilenced","recorderCallback","activeContext","isContextObject","isExecutionCancelled","hasShortcut","shortcuts","getShortcuts","keyRecorder","useRecorder","mount","isPressed","unmount","__kindOf","objectToCheck","SHORTCUTS","addShortcut","newShortcut","keyCombination","normalizedKeys","normalizeKeys","hasKeyCombination","shortcut","removeShortcutsByKeys","removeShortcutsByGroup","leftOptions","option","getKeysList","mappings","lowercaseKey","specialCharactersSet","normalizeEventKey","normalizedKey","_keyObserver","MODIFIER_KEYS","modifierKeysObserver","createKeysObserver","modKeyListeners","instanceCounter","isModifierKey","pressedKey","getPressedModifierKeys","mergeMetaKeys","pressedModifierKeys","onkeydown","extraModifierKeys","pressedKeys","onkeydownForModKeys","press","onkeyupForModKeys","release","onblur","releaseAll","eventTarget","PRESSED_KEYS","_textEditor","_textRenderer","TextEditor","textRenderer","_autoResize","_caretPositioner","EDITOR_VISIBLE_CLASS_NAME","EDITOR_HIDDEN_CLASS_NAME","SHORTCUTS_GROUP","createInputElementResizer","bindEvents","showEditableElement","registerShortcuts","autoResize","unObserve","hideEditableElement","unregisterShortcuts","textareaStyle","TEXTAREA_PARENT","layerClass","textareaParentStyle","textIndent","opacity","hasClassHandsontableEditor","childNode","sourceData","fontFamily","textareaComputedStyle","horizontalPadding","paddingLeft","paddingRight","verticalPadding","paddingTop","paddingBottom","finalWidth","finalHeight","finalMaxWidth","finalMaxHeight","minWidth","minHeight","allowKeyEventPropagation","editorContext","contextConfig","insertNewLine","execCommand","keyName","updateCaretPosition","textHolder","textContainer","observedElement","resize","whiteSpace","elementStyle","delayedResize","extendDefaults","elementToObserve","doObserve","actionName","textareaElement","caretPosition","textLines","newCaretPosition","lineStartIndex","textLine","lineEndIndex","_baseRenderer","baseRenderer","escaped","rendererTemplate","TEMPLATE","HTMLTemplateElement","decorate","model","ariaEnabled","classesToAdd","attributesToAdd","_editors","registerAllEditors","_renderers","registerAllRenderers","_validators","registerAllValidators","_cellTypes","registerAllCellTypes","_plugins","registerAllPlugins","registerAllModules","_autocompleteEditor","AutocompleteEditor","AUTOCOMPLETE_EDITOR","BASE_EDITOR","_checkboxEditor","CheckboxEditor","CHECKBOX_EDITOR","_dateEditor","DateEditor","DATE_EDITOR","_dropdownEditor","DropdownEditor","DROPDOWN_EDITOR","_handsontableEditor","HandsontableEditor","HANDSONTABLE_EDITOR","_numericEditor","NumericEditor","NUMERIC_EDITOR","_passwordEditor","PasswordEditor","PASSWORD_EDITOR","_selectEditor","SelectEditor","SELECT_EDITOR","TEXT_EDITOR","_timeEditor","TimeEditor","TIME_EDITOR","_idPrefix","choices","caseSensitive","choicesRelevance","valueLength","choicesCount","charsLeft","currentItem","valueIndex","toLocaleLowerCase","baseIndex","selectedValue","rawChoices","strippedValue","stripValueIfNeeded","htContainer","rootInstanceAriaTagsEnabled","sourceArray","sourceSize","colIndex","onBeforeKeyDown","htEditor","query","indexOfMatch","afterSelectionEnd","queryChoices","updateChoicesList","stripValuesIfNeeded","choicesList","sortByRelevanceSetting","filterSetting","orderByRelevance","highlightIndex","orderByRelevanceLength","sorted","strippedChoices","updateDropdownDimensions","flipDropdownIfNeeded","highlightBestMatchingChoice","isWindowAsScrollableElement","textareaOffset","textareaHeight","dropdownHeight","getDropdownHeight","trimmingContainerScrollTop","headersHeight","spaceAbove","spaceBelow","flipNeeded","flipDropdown","unflipDropdown","limitDropdownIfNeeded","spaceAvailable","tempHeight","lastRowHeight","setDropdownHeight","dropdownStyle","currentDropdownWidth","firstRowHeight","stringifiedValues","strippedValues","allowed","timeOffset","htOptions","afterOnCellMouseDown","sourceValue","handsontable","onBeginEditing","DIV","assignHooks","rowToSelect","innerHOT","checkbox","click","_pikaday","SHORTCUTS_GROUP_EDITOR","Pikaday","parentDestroyed","destroyElements","datePicker","datePickerStyle","hideDatepicker","datePickerParentElement","$datePicker","showDatepicker","adjustDate","_this$$datePicker","defaultDateFormat","isMeta","dateStr","getDatePickerConfig","useMoment","_onInputFocus","setMoment","gotoToday","htInput","origOnSelect","onSelect","origOnClose","onClose","field","trigger","bound","keyboardInput","reposition","isRTL","pickerLeftPosition","registerHooks","prepareOptions","optionValue","optionElement","optionsToPrepare","preparedOptions","selectStyle","margin","previousOptionIndex","selectedIndex","nextOptionIndex","_autocompleteRenderer","autocompleteRenderer","AUTOCOMPLETE_RENDERER","BASE_RENDERER","_dropdownRenderer","dropdownRenderer","DROPDOWN_RENDERER","_checkboxRenderer","checkboxRenderer","CHECKBOX_RENDERER","_handsontableRenderer","handsontableRenderer","HANDSONTABLE_RENDERER","_htmlRenderer","htmlRenderer","HTML_RENDERER","_numericRenderer","numericRenderer","NUMERIC_RENDERER","_passwordRenderer","passwordRenderer","PASSWORD_RENDERER","_selectRenderer","selectRenderer","SELECT_RENDERER","TEXT_RENDERER","_timeRenderer","timeRenderer","TIME_RENDERER","rendererFunc","ARROW","acArrowListener","isListeningKeyDownEvent","isCheckboxListenerAdded","BAD_VALUE_CLASS","ATTR_ROW","ATTR_COLUMN","bundleSeed","labelValue","labelProperty","labelText","labelData","createInput","labelOptions","badValue","checked","createLabel","separated","gridContext","changeSelectedCheckboxesState","areSelectedCheckboxCells","_hotInstance$getSelec","_hotInstance$getSelec2","uncheckCheckbox","selRange","changesPerSubSelection","nonCheckboxChanges","changeCounter","cachedCellProperties","templates","dataAtCell","changesCount","sectionCount","changesChunk","topLeft","bottomRight","checkboxes","onClick","fullWidth","isCheckboxInput","newCheckboxValue","getRenderedValue","_numbro","cellCulture","culture","cellFormatPattern","pattern","numbro","shortTag","langData","allLanguages","registerLanguage","classArr","hashLength","hashSymbol","hash","_autocompleteValidator","autocompleteValidator","AUTOCOMPLETE_VALIDATOR","_dateValidator","dateValidator","DATE_VALIDATOR","_dropdownValidator","dropdownValidator","DROPDOWN_VALIDATOR","_numericValidator","numericValidator","NUMERIC_VALIDATOR","_timeValidator","timeValidator","TIME_VALIDATOR","valueToValidate","originalVal","found","slen","_date","dateEditor","DATE_EDITOR_TYPE","isValidFormat","isValidDate","correctedValue","dateFromDate","getNormalizedDate","dateFromMoment","isAlphanumeric","date","dateString","nativeDate","getDate","getTimezoneOffset","STRICT_FORMATS","twoDigitValue","isValidTime","_autocompleteType","AutocompleteCellType","AUTOCOMPLETE_TYPE","_checkboxType","CheckboxCellType","CHECKBOX_TYPE","_dateType","DateCellType","DATE_TYPE","_dropdownType","DropdownCellType","DROPDOWN_TYPE","_handsontableType","HandsontableCellType","HANDSONTABLE_TYPE","_numericType","NumericCellType","NUMERIC_TYPE","_passwordType","PasswordCellType","PASSWORD_TYPE","_selectType","SelectCellType","SELECT_TYPE","TEXT_TYPE","_timeType","TimeCellType","TIME_TYPE","_dateRenderer","dateRenderer","_autoColumnSize","AutoColumnSize","_autofill","Autofill","_autoRowSize","AutoRowSize","BasePlugin","_bindRowsWithHeaders","BindRowsWithHeaders","_collapsibleColumns","CollapsibleColumns","_columnSorting","ColumnSorting","_columnSummary","ColumnSummary","_comments","Comments","_contextMenu","ContextMenu","_copyPaste","CopyPaste","_customBorders","CustomBorders","_dragToScroll","DragToScroll","_dropdownMenu","DropdownMenu","_exportFile","ExportFile","_filters","Filters","_formulas","Formulas","_hiddenColumns","HiddenColumns","_hiddenRows","HiddenRows","_manualColumnFreeze","ManualColumnFreeze","_manualColumnMove","ManualColumnMove","_manualColumnResize","ManualColumnResize","_manualRowMove","ManualRowMove","_manualRowResize","ManualRowResize","_mergeCells","MergeCells","_multiColumnSorting","MultiColumnSorting","_multipleSelectionHandles","MultipleSelectionHandles","_nestedHeaders","NestedHeaders","_nestedRows","NestedRows","_persistentState","PersistentState","_search","Search","_touchScroll","TouchScroll","_trimRows","TrimRows","_undoRedo","UndoRedo","_ghostTable","_samplesGenerator","COLUMN_SIZE_MAP_NAME","_cachedColumnHeaders","_visualColumnsToRefresh","_AutoColumnSize_brand","SETTING_KEYS","CALCULATION_STEP","SYNC_CALCULATION_LIMIT","GhostTable","SamplesGenerator","spanned","IndexToValueMap","columnWidthsMap","isDblClick","_onBeforeColumnResize","enablePlugin","enabled","setting","useHeaders","ghostTable","setSetting","setSamplingOptions","_onAfterLoadData","_onBeforeChange","_onAfterFormulasValuesUpdate","_onBeforeRender","_onInit","updatePlugin","findColumnsWhereHeaderWasChanged","disablePlugin","calculateVisibleColumnsWidth","overwriteCache","calculateColumnsWidth","colRange","rowRange","columnsRange","rowsRange","samples","samplesGenerator","generateColumnSamples","sample","addColumn","getWidths","measuredColumns","clean","calculateAllColumnsWidth","timer","loop","syncLimit","getSyncCalculationLimit","samplingRatio","allowSampleDuplicates","setSampleCount","setAllowDuplicates","recalculateAllColumnsWidth","limit","colsLimit","defaultWidth","keepMinimum","_this$hot$view$getFir","_this$hot$view$getLas","changedColumns","columnTitle","cachedColumnsLength","physicalColumns","isNeedRecalculate","_calculateSpecificColumnsWidth","visualColumns","isFirstLoad","columnProperty","newSize","_change$address","address","DEPS_TYPE_CHECKERS","missingDepsMsgs","initializedPlugins","_hooks","_BasePlugin_brand","onAfterPluginsInitialized","onUpdateSettings","pluginDeps","PLUGIN_DEPS","deps","missingDependencies","dependency","moduleName","errorMsg","isAllPluginsAreInitialized","initialized","_this$eventManager","removeHooks","callOnPluginsReady","isPluginsReady","pluginsInitializedCallbacks","relevantToSettings","_isRelevantToSettings","_this$eventManager2","settingKeys","addRow","createContainer","rowObject","createColGroupsCol","addColumnHeadersRow","colHeader","appendColumnHeadersRow","columnObject","th","tBody","getHeights","injected","injectTable","setSettings","createColElement","domFragment","removeTable","isVertical","isHorizontal","tableLayout","containerClassName","SAMPLE_COUNT","dataFactory","getSampleCount","customSampleCount","sampleCount","allowDuplicates","generateRowSamples","generateSamples","specifierRange","generateSample","specifierValue","computedKey","sampledValues","hasCustomBundleSeed","seed","needed","duplicate","INSERT_ROW_ALTER_ACTION_NAME","INTERVAL_FOR_ADDING_ROW","_Autofill_brand","mapSettings","_onAfterCellCornerMouseDown","_onCellCornerDblClick","_onBeforeCellMouseOver","clearMappedSettings","getSelectionData","copyableRanges","copyableRows","copyableColumns","rowSet","fillIn","fillStartRow","fillStartColumn","fillEndRow","fillEndColumn","selectionRangeLast","resetSelectionOfDraggedArea","cornersOfSelectedCells","cornersOfSelectionAndDragAreas","directionOfDrag","startOfDragCoords","endOfDragCoords","getDragDirectionAndRange","selectionData","sourceRange","targetRange","beforeAutofillHookResult","fillData","dragLength","fillOffset","setSelection","reduceSelectionAreaIfNeeded","getCoordsOfDragAndDropBorders","coordsOfSelection","bottomRightCorner","directions","DIRECTIONS","showBorder","coordsOfDragAndDropBorders","redrawBorders","addingStarted","addNewRowIfNeeded","cornersOfSelectedDragArea","nrOfTableRows","getIndexOfLastAdjacentFilledInRow","lastFilledInRowIndex","dataInCell","dataInNextLeftCell","dataInNextRightCell","addSelectionFromStartAreaToSpecificRowIndex","selectStartArea","cornersOfArea","selectAdjacent","handleDraggedCells","getIfMouseWasDraggedOutside","tableBottom","tableRight","_onMouseUp","_onMouseMove","mappedSettings","getMappedFillHandleSetting","selectionApplied","mouseDownOnCellCorner","mouseWasDraggedOutside","mouseDragOutside","startSelection","endSelection","ROW_WIDTHS_MAP_NAME","_visualRowsToRefresh","_AutoRowSize_brand","rowHeightsMap","_onBeforeRowResize","recalculateAllRowsHeight","headerHeight","calculateVisibleRowsHeight","calculateRowsHeight","measuredRows","calculateAllRowsHeight","rowsLimit","defaultHeight","cachedHeight","clearCacheByRange","_calculateSpecificRowsHeight","visualRows","changedRows","_looseBindsMap","_strictBindsMap","DEFAULT_BIND","bindTypeToMapStrategy","LooseBindsMap","StrictBindsMap","_BindRowsWithHeaders_brand","bindType","MapStrategy","headerIndexes","_onModifyRowHeader","getNextValue","COLLAPSIBLE_ELEMENT_CLASS","actionDictionary","hideColumn","beforeHook","afterHook","_collapsedColumnsMap","_CollapsibleColumns_brand","nestedHeadersPlugin","headerStateManager","getStateManager","_onAfterGetColHeader","_onBeforeOnCellMouseDown","detectedOverlappedHeaders","mapState","headerSettings","collapsible","origColspan","mergeStateWith","clearButtons","_this$headerStateMana","isCollapsed","getHeaderTreeNodeData","expandSection","collapseSection","headerLevels","mainHeaders","topHeaders","topLeftCornerHeaders","removeButton","masterLevel","topLevel","topLeftCornerLevel","toggleCollapsibleSection","toggleAllCollapsibleSections","mapNodes","levelToRowCoords","collapseAll","expandAll","filteredCoords","isActionPossible","_this$headerStateMana2","getHeaderSettings","nodeModRollbacks","affectedColumnsIndexes","colspanCompensation","affectedColumns","rollbackModification","triggerNodeModification","currentCollapsedColumns","getCollapsedColumns","destinationCollapsedColumns","actionTranslator","isActionAllowed","nodeModRollback","isActionPerformed","_this$headerStateMana3","isNodeCollapsible","isAriaTagsEnabled","collapsibleElement","_collapsibleElement","initialLoad","APPEND_COLUMN_CONFIG_STRATEGY","REPLACE_COLUMN_CONFIG_STRATEGY","_columnStatesManager","_domHelpers","_rootComparator","_sortService","registerRootComparator","rootComparator","_ColumnSorting_brand","pluginKey","columnStatesManager","ColumnStatesManager","columnMetaCache","getMergedPluginSettings","onAfterOnCellMouseDown","_loadOrSortBySettings","clearColHeader","headerSpanElement","getHeaderSpanElement","isFirstLevelColumnHeader","updateHeaderClasses","indexesSequenceCache","getColumnNextConfig","sortConfig","currentSortConfig","getSortConfig","destinationSortConfigs","getNormalizedSortConfigs","sortPossible","areValidSortConfigs","allowSort","setSortStates","sortByPresetSortStates","saveAllSortSettings","clearSort","isSorted","isListOfSortedColumnsEmpty","getColumnSortState","getSortStates","setSortConfig","sortConfigs","numberOfColumns","areValidSortStates","allSortSettings","getAllColumnsProperties","translateColumnToPhysical","restOfProperties","initialConfig","getAllSavedSortSettings","storedAllSortSettings","translateColumnToVisual","sortOrder","getSortOrderOfColumn","nextSortOrder","getNextSortOrder","getNextSortConfig","columnToChange","strategyId","indexOfColumnToChange","getIndexOfColumnInSortQueue","isColumnSorted","nextColumnConfig","getPluginColumnConfig","columnConfig","pluginColumnConfig","pluginMainSettings","storedColumnProperties","getFirstCellSettings","cellMetaCopy","getNumberOfRowsToSort","numberOfRows","indexesWithData","getDataForSortedColumns","indexesBefore","indexWithData","indexesAfter","indexMapping","indexBefore","indexInsideArray","newIndexesSequence","sortBySettings","updateAllColumnsProperties","getClassesToRemove","getClassesToAdd","wasClickableHeaderClicked","pluginSettingsForColumn","headerActionEnabled","headerAction","HEADER_SPAN_CLASS","wasHeaderClickedProperly","nextConfig","_this$columnStatesMan","showSortIndicator","indicator","currentSortState","inheritedColumnProperties","SORT_EMPTY_CELLS_DEFAULT","SHOW_SORT_INDICATOR_DEFAULT","HEADER_ACTION_DEFAULT","mapName","sortingStates","columnProperties","sortEmptyCells","compareFunctionFactory","searchedColumn","_this$sortingStates$g","getNumberOfSortedColumns","sortingStatesQueue","sortStates","ASC_SORT_STATE","DESC_SORT_STATE","isValidColumnState","columnState","sortedColumns","TRs","clickEvent","createDateTimeCompareFunction","columnPluginSettings","DO_NOT_SWAP","FIRST_BEFORE_SECOND","FIRST_AFTER_SECOND","firstDate","nextDate","isAfter","isBefore","getRootComparator","getCompareFunctionFactory","_engine","_numeric","_checkbox","_time","registerCompareFunctionFactory","getGloballyCompareFunctionFactory","hasGloballyCompareFunctionFactory","DEFAULT_DATA_TYPE","CHECKBOX_DATA_TYPE","checkboxSort","DATE_DATA_TYPE","dateSort","defaultSort","NUMERIC_DATA_TYPE","numericSort","TIME_DATA_TYPE","timeSort","COLUMN_DATA_TYPE","parsedFirstValue","parsedSecondValue","isEmptyValue","isEmptyNextValue","unifiedValue","unifiedNextValue","isValueFromTemplate","isNextValueFromTemplate","defaultCompareFunctionFactory","rootComparatorId","argsForRootComparator","HEADER_CLASS_ASC_SORT","HEADER_CLASS_DESC_SORT","HEADER_CLASS_INDICATOR_DISABLED","HEADER_SORT_CLASS","HEADER_ACTION_CLASS","orderToCssClass","cssClasses","columnOrder","sortingOrders","columnMetas","rowIndexWithValues","nextRowIndexWithValues","nextValues","getCompareResult","sortingOrder","pluginSettings","compareResult","_endpoints","_ColumnSummary_brand","endpoints","Endpoints","_onAfterInit","_onAfterChange","_onAfterUpdateSettings","resetSetupBeforeStructureAlteration","resetSetupAfterStructureAlteration","_onAfterRowMove","currentEndpoint","initEndpoints","endpoint","calculateSum","calculateMinMax","countEntries","calculateAverage","customFunction","getPartialSum","biggestDecimalPlacesCount","getCellValue","isNullishOrNaN","decimalPlaces","partialResult","getPartialMinMax","countEmpty","counter","emptyCount","entriesCount","cellClassName","forceNumeric","suppressDataTypeErrors","refreshCellMetas","refreshChangedEndpoints","parseSettings","refreshAllEndpoints","getEndpoint","settingsType","fillMissingEndpointData","getAllEndpoints","endpointsArray","newEndpoint","assignSetting","destinationColumn","reversedRowCoords","number","destinationRow","alterRowOffset","alterColumnOffset","resetAllEndpoints","forceRefresh","beforeViewRenderCallback","multiplier","rowMoving","placeOfAlteration","extendEndpointRanges","recreatePhysicalRanges","clearOffsetInformation","shiftEndpointCoordinates","previousPosition","newRanges","allIndexes","newRange","coord","offsetStartIndex","subElement","useOffset","anyEndpointOutOfRange","alterColOffset","cellsToSetCache","resetEndpointValue","setEndpointValue","needToRefresh","changesObj","refreshEndpoint","destinationVisualRow","visualEndpointRowIndex","throwOutOfBoundsWarning","roundFloat","roundFloatValue","decimalPlacesCount","toFixed","_commentEditor","_displaySwitch2","_predefinedItems","_addEditComment","_removeComment","_readOnlyComment","META_COMMENT","META_COMMENT_VALUE","META_STYLE","META_READONLY","SHORTCUTS_CONTEXT_NAME","_displaySwitch","_preventEditorAutoSwitch","_preventEditorHiding","_cellBelowCursor","_commentValueBeforeSave","_Comments_brand","CommentEditor","_onEditorResize","DisplaySwitch","getDisplayDelaySetting","addToContextMenu","_onAfterRenderer","_onAfterScroll","showAtCell","updateDelay","manager","pluginContext","setRange","show","focusEditor","isFocused","editorElement","getEditorInputElement","_onMouseOver","_onMouseDown","_onEditorFocus","_onEditorBlur","clearRange","targetIsCellWithComment","closestCell","targetIsCommentTextArea","setComment","editorValue","comment","updateCommentMeta","setCommentAtCell","removeComment","forceRender","removeCommentAtCell","getComment","getCommentMeta","getCommentAtCell","cancelHiding","refreshEditor","_renderableRow","_renderableColumn","targetingPreviousRow","setPosition","isBeforeRenderedRows","isBeforeRenderedColumns","commentStyle","resetSize","lastColWidth","cellHeight","editorWidth","editorHeight","getSize","setReadOnlyState","observeSize","oldComment","newComment","items","SEPARATOR","addEditCommentItem","removeCommentItem","readOnlyCommentItem","commentSetting","displayDelay","getInputElement","eventCell","coordinates","_editorResizeObserver","_rootDocument","_container","_editorStyle","_hidden","_resizeObserver","CLASS_EDITOR_CONTAINER","CLASS_EDITOR","CLASS_INPUT","CLASS_CELL","EditorResizeObserver","createEditor","setObservedElement","textarea","containerParentElement","_ignoreInitialCall","_observedElement","_EditorResizeObserver_brand","_onResize","borderBoxSize","inlineSize","blockSize","DEFAULT_DISPLAY_DELAY","DEFAULT_HIDE_DELAY","wasLastActionShow","hidingTimer","showDebounced","_alignment","ALIGNMENT","KEY","_clearColumn","CLEAR_COLUMN","_columnLeft","COLUMN_LEFT","_columnRight","COLUMN_RIGHT","_readOnly","READ_ONLY","_redo","REDO","_removeColumn","REMOVE_COLUMN","_removeRow","REMOVE_ROW","_rowAbove","ROW_ABOVE","_rowBelow","ROW_BELOW","_separator","_noItems","NO_ITEMS","_undo","UNDO","ITEMS","separatorItem","noItemsItem","rowAboveItem","rowBelowItem","columnLeftItem","columnRightItem","clearColumnItem","removeRowItem","removeColumnItem","undoItem","redoItem","readOnlyItem","alignmentItem","predefinedItems","itemFactory","submenu","checkable","ariaLabel","ariaChecked","hasSelectionAClass","markLabelAsSelected","stateBefore","getAlignmentClasses","alignment","align","prepareVerticalAlignClass","replacedClassName","prepareHorizontalAlignClass","classes","cellDescriptor","propertySetter","applyAlignClassName","checkSelectionConsistency","comparator","getDocumentOffsetByElement","baseDocument","getAlignmentComparatorByClass","htClassName","latestSelection","alterAction","atLeastOneReadOnly","redo","isRedoAvailable","isCommand","isUndoAvailable","areReadOnly","currentState","_commandExecutor","_itemsFactory","_menu","_ContextMenu_brand","CommandExecutor","DEFAULT_ITEMS","commandExecutor","setCommonCallback","menu","Menu","keepInViewport","uiContainer","_onMenuBeforeOpen","_onMenuAfterOpen","_onMenuAfterClose","executeCommand","_onAfterOnCellContextMenu","rect","above","getNavigator","toFirstItem","_this$menu","below","prepareMenuItems","themeHasTableBorder","tableBorderWidth","_this$menu2","itemsFactory","commandName","execute","ItemsFactory","setPredefinedItems","menuItems","setMenuItems","registerCommand","showRowHeaders","showColHeaders","isValidElement","commandDescriptor","commonCallback","commandSplit","commandNamePrimary","subCommandName","findSubCommand","unshift","subCommands","cmd","cmds","orderPattern","defaultOrderPattern","predefinedItemsCollection","menuItemKey","itemsPattern","defaultPattern","_positioner","_navigator2","_menuItemRenderer","MIN_WIDTH","_navigator","_shortcutsCtrl","_tableBorderWidth","hotMenu","standalone","positioner","Positioner","parentMenu","isSubMenu","onDocumentMouseDown","onDocumentContextMenu","getKeyboardShortcutsCtrl","getSelectedItem","hasSelectedItem","delayedOpenSubMenu","openSubMenu","minWidthOfMenu","noItemsDefined","filteredItems","isItemHidden","filterSeparators","shouldAutoCloseMenu","modifyColWidth","createMenuItemRenderer","beforeOnCellMouseOver","setCurrentPage","afterOnCellMouseOver","isAllSubMenusClosed","afterOnCellContextMenu","afterSelection","beforeOnCellMouseUp","isCommandPassive","afterOnCellMouseUp","afterUnlisten","origOutsideClickDeselects","onAfterInit","createMenuNavigator","createKeyboardShortcutsCtrl","closeParent","closeAllSubMenus","hasSubMenu","dataItem","subMenu","hotSubMenus","closeSubMenu","menus","menuContainerParentElement","selectedItem","selRanges","normalizedSelection","normalizeSelection","isItemSeparator","isItemDisabled","isItemSubMenu","area","setParentElement","setElement","updatePosition","updateMenuDimensions","currentHiderWidth","realHeight","itemCell","currentRowHeight","doc","_cursor2","_parentContainer","_cursor","_keepInViewport","Cursor","fitsBelow","setPositionBelowCursor","fitsAbove","setPositionAboveCursor","updateHorizontalPosition","setPositionOnRightOfCursor","fitsOnLeft","setPositionOnLeftOfCursor","fitsOnRight","borderLeftWidth","topRelative","leftRelative","getSourceType","pageY","pageX","_paginator","createPaginator","onItemSelect","directItemChange","isSeparator","isDisabled","isSelectionDisabled","onClear","initialPage","visitedPages","_updateState","newIndex","lastIndex","changeProceed","getCurrentPage","toLastItem","toNextItem","toPreviousItem","itemToTest","isItemSelectionDisabled","shiftSeparators","separator","popSeparators","removeDuplicatedSeparators","isItemCheckable","_defaultShortcutsList","SHORTCUTS_CONTEXT","customKeyboardShortcuts","customShortcuts","_addShortcuts","createDefaultShortcutsList","addCustomShortcuts","k","getCustomShortcuts","_getContextName","_manager$getContext","mainTableHot","menuHot","wrapper","itemValue","isFocusable","_copy","_copyColumnHeadersOnly","_copyWithColumnGroupHeaders","_copyWithColumnHeaders","_cut","_pasteEvent","_copyableRanges","META_HEAD","_enableCopyColumnHeaders","_enableCopyColumnGroupHeaders","_enableCopyColumnHeadersOnly","_copyMode","_isTriggeredByCopy","_isTriggeredByCut","_copyableRangesFactory","_preventViewportScrollOnPaste","_CopyPaste_brand","CopyableRangesFactory","columnsLimit","countColumnHeaders","_settings$pasteMode","_settings$uiContainer","pasteMode","copyColumnHeaders","copyColumnGroupHeaders","copyColumnHeadersOnly","_onAfterContextMenuDefaultOptions","_onAfterSelection","_onAfterSelectionEnd","onCopy","onCut","onPaste","_onSafariMouseEnter","_onSafariMouseLeave","_onSafariAfterSelection","copy","copyMode","_ensureClipboardEventsGetTriggered","copyCellsOnly","copyWithAllColumnHeaders","copyWithColumnHeaders","cut","getRangedCopyableData","getRangedData","normalizeRanges","paste","pastableText","pastableHtml","pasteData","PasteEvent","clipboardData","setCopyableText","setSelectedRange","groupedRanges","getMostBottomColumnHeadersRange","getAllColumnHeadersRange","getCellsRange","cellsRange","isRangeTrimmed","_this$hot$getActiveEd","populateValues","inputArray","populatedRowsLength","populatedColumnsLength","newRows","endRowFromSelection","endColumnFromSelection","visualRowForPopulatedData","visualColumnForPopulatedData","lastVisualRow","lastVisualColumn","newRow","insertedRow","insertedColumn","_event$target","focusedElement","isHotInput","copiedHeadersCount","_countCopiedHeaders","allowCopying","textPlain","textHTML","ClipboardEvent","_event$target2","rangedData","allowCuttingOut","_event$target3","pastedData","ADD_TAGS","ADD_ATTR","FORCE_BODY","parsedConfig","lastSelectedRange","currentlySelectedCell","_addContentEditableToHighlightedCell","_removeContentEditableFromHighlightedCell","copyItem","copyWithColumnHeadersItem","copyWithColumnGroupHeadersItem","copyColumnHeadersOnlyItem","cutItem","copyPastePlugin","nounForm","_clipboardData","ClipboardData","_selectedRange","_countRows","_countColumns","_rowsLimit","_columnsLimit","_countColumnHeaders","_CopyableRangesFactory_brand","finalEndRow","_trimRowsRange","finalEndCol","_trimColumnsRange","maxRow","maxColumn","_contextMenuItem","_CustomBorders_brand","hideBorders","changeBorderSettings","setBorders","borderObject","borderKeys","normBorder","checkSettingsCohesion","normalizeBorder","borderKey","prepareBorderFromCustomAdded","toInlinePropName","getBorders","savedBorders","selectedBorders","denormalizeBorder","clearBorders","clearBordersFromSelectionSettings","clearNullCellRange","insertBorderIntoSettings","place","hasSavedBorders","checkSavedBorders","hasCustomSelections","checkCustomSelections","borderDescriptor","createEmptyBorders","extendDefaultBorder","prepareBorderFromCustomAddedRange","customBorder","removeAllBorders","borderId","createId","spliceBorder","setBorder","bordersMeta","createSingleEmptyBorder","hideCount","countHide","customSelectionsChecker","checkCustomSelectionsFromContextMenu","createDefaultCustomBorder","prepareBorder","topCol","bottomCol","createCustomBorders","normCustomBorder","check","savedBorder","bordersClone","hasLeftOrRight","hasLeftRightTypeOptions","hasStartOrEnd","hasStartEndTypeOptions","defaultOptions","menuItemTop","menuItemRight","menuItemBottom","menuItemLeft","menuItemNoBorders","_noBorders","noBorders","customBordersPlugin","hasBorder","checkSelectionBorders","markSelected","createDefaultHtBorder","_border$start","_border$end","atLeastOneHasBorder","metaBorders","physicalToInlinePropNames","_physicalToInlineProp","borderDirection","_DragToScroll_brand","_setupListening","unregisterEvents","setBoundaries","boundaries","setCallback","diffX","diffY","listening","onMouseMove","scrollHandler","_scrollHandler$scroll","_scrollHandler$scroll2","horizontalScrollValue","verticalScrollValue","scroll","sign","BUTTON_CLASS_NAME","_isButtonClicked","_DropdownMenu_brand","_onBeforeViewportScrollHorizontally","subMenuInstance","_onSubMenuAfterOpen","_onTableClick","setListening","_addCustomShortcuts","menuInstance","headerRow","headerRowList","existingButton","onclick","_dataProvider","_typeFactory","exportAsString","_createTypeFormatter","export","exportAsBlob","_createBlob","downloadFile","blob","URL","webkitURL","filename","fileExtension","download","url","createObjectURL","revokeObjectURL","msSaveOrOpenBlob","EXPORT_TYPES","typeFactory","DataProvider","typeFormatter","Blob","mimeType","encoding","setOptions","_getDataRange","exportHiddenRows","_isHiddenRow","exportHiddenColumns","_isHiddenColumn","_csv","TYPE_CSV","TYPE_EXCEL","TYPE_PDF","Csv","dataProvider","CHAR_CARRIAGE_RETURN","CHAR_DOUBLE_QUOTES","CHAR_LINE_FEED","BaseType","DEFAULT_OPTIONS","bom","columnDelimiter","rowDelimiter","_escapeCell","escapedValue","_mergeOptions","YYYY","getFullYear","MM","getMonth","DD","constants","_condition","_operators","_value","_actionBar","_conditionCollection","_dataFilter","_conditionUpdateObserver","_focusController","_menuFocusNavigator","_Filters_brand","filtersRowsMap","dropdownMenuPlugin","dropdownSettings","menuContainer","addConfirmationHooks","component","_onActionBarSubmit","_onComponentChange","filterByConditionLabel","filterValueLabel","components","conditionComponent","ConditionComponent","addSeparator","_onSelectUIClosed","OperatorsComponent","ValueComponent","ActionBarComponent","conditionCollection","ConditionCollection","conditionUpdateObserver","ConditionUpdateObserver","getDataMapAtColumn","conditionState","_updateComponents","_onAfterDropdownMenuDefaultOptions","_onAfterDropdownMenuShow","_onAfterDropdownMenuHide","mainMenu","focusableItems","menuNavigator","lastSelectedMenuItem","getLastMenuPage","getElements","createMenuFocusController","forwardToFocusNavigation","_this$dropdownMenuPlu","clearConditions","addCondition","operationId","OPERATION_AND","removeConditions","dataFilter","_createDataFilter","needToFilter","visibleVisualRows","conditions","exportAllConditions","allowFiltering","previousConditionStack","trimmedRows","visibleVisualRowsAssertion","createArrayAssertion","setPreviousConditionStack","getSelectedColumn","_this$hot$getDataAtCe","dataValue","toEmptyString","updateValueComponentCondition","dataAtCol","selectedValues","unifyColumnValues","updateStatesAtColumn","restoreComponents","_this$getSelectedColu","restoreState","updateDependentComponentsVisibility","getOperationBasedOnArguments","suggestedOperation","byConditionState1","byConditionState2","byValueState","operation","OPERATION_OR","CONDITION_NONE","OPERATION_OR_THEN_VARIABLE","setListeningDropdownMenu","getState","componentsToShow","showOperators","showComponents","hideComponents","DataFilter","getIndexesOfComponents","getMenuItemDescriptor","changeComponentsVisibility","visible","showRows","hideRows","hasConditions","getSelectElement","closeOptions","submitType","_this$dropdownMenuPlu3","_this$dropdownMenuPlu2","getActiveOperationId","groupChanges","columnStackPosition","getColumnStackPosition","flush","saveState","inputsCount","conditionsState","_this$dropdownMenuPlu4","editedConditionStack","conditionsByValue","CONDITION_BY_VALUE","conditionsWithoutByValue","operationType","getOperation","updateState","_input","_select","_conditionRegisterer","_ConditionComponent_brand","BaseComponent","stateless","SelectUI","InputUI","_onConditionSelect","getInputElements","_onInputKeyDown","setState","copyOfCommand","arg","getConditionDescriptor","disableSelection","ui","getOptionsList","setItems","stateId","_none","CONDITION_NAME","_empty","CONDITION_EMPTY","_notEmpty","CONDITION_NOT_EMPTY","_equal","CONDITION_EQUAL","_notEqual","CONDITION_NOT_EQUAL","_greaterThan","CONDITION_GREATER_THAN","_greaterThanOrEqual","CONDITION_GREATER_THAN_OR_EQUAL","_lessThan","CONDITION_LESS_THAN","_lessThanOrEqual","CONDITION_LESS_THAN_OR_EQUAL","_between","CONDITION_BETWEEN","_notBetween","CONDITION_NOT_BETWEEN","_beginsWith","CONDITION_BEGINS_WITH","_endsWith","CONDITION_ENDS_WITH","_contains","CONDITION_CONTAINS","_notContains","CONDITION_NOT_CONTAINS","_before","CONDITION_DATE_BEFORE","_after","CONDITION_DATE_AFTER","_tomorrow","CONDITION_TOMORROW","_today","CONDITION_TODAY","_yesterday","CONDITION_YESTERDAY","_byValue","_true","CONDITION_TRUE","_false","CONDITION_FALSE","_conjunction","OPERATION_ID","_disjunction","_disjunctionWithExtraCondition","TYPE_NUMERIC","TYPE_TEXT","TYPE_DATE","TYPES","typeName","typeValue","getCondition","conditionArguments","inputValuesDecorator","registerCondition","inputValues","conditionValue","_from","_to","dateBefore","dateAfter","inputDate","diff","endsWith","isSame","subtract","startOf","sortCompare","sortComparison","toVisualValue","defaultEmptyValue","visualValue","SUPPORT_SET_CONSTRUCTOR","SUPPORT_FAST_DEDUPE","initialData","dataset","unifiedValues","intersectValues","same","selectedItemsAssertion","_logicalOperationRegisterer","SHORT_NAME_FOR_COMPONENT","operationResult","registerOperation","operations","getOperationFunc","getOperationName","_InputUI_brand","BaseUI","DEFAULTS","_onKeyup","build","icon","isBuilt","translateIfPossible","STATE_BUILT","STATE_BUILDING","EVENTS_TO_REGISTER","wrapIt","buildState","registerEvent","role","_menu2","_items","_caption","_captionElement","_dropdown","_SelectUI_brand","getMenu","_onClick","translateNames","caption","dropdown","_onMenuSelect","_onMenuClosed","conditionName","openOptions","_radioInput","SELECTED_AT_START_ELEMENT_INDEX","_OperatorsComponent_brand","buildOperatorsElement","operationKeys","radioInput","RadioInputUI","htmlFor","_onRadioInputChange","setChecked","searchedIndex","operationElement","isChecked","selectedOperationId","_label","_multipleSelect","_ValueComponent_brand","MultipleSelectUI","getMultipleSelectElement","_onModifyDisplayedValue","selectElement","getSearchInputElement","getSelectAllElement","getClearAllElement","itemsSnapshot","setLocale","availableItems","isSelectedAllValues","stateInfo","updateColumnState","conditionArgsChange","filteredRowsFactory","conditionsStack","firstByValueCondition","defaultBlankCellValue","filteredRows","rowValues","rowMetaMap","unifiedRowValues","_triggerModifyMultipleSelectionValueHook","dependentConditionStacks","rowEntries","_getColumnVisibleValues","metaMap","getRenderedNumericValue","_link","_itemsBox","_locale","_searchInput","_selectAllUI","_clearAllUI","_MultipleSelectUI_brand","LinkUI","getItemsBox","_onInput","_onSelectAllClick","_onClearAllClick","getLocale","itemsToValue","itemsBoxWrapper","selectionControl","hotInitializer","beforeRenderer","afterListen","valueToItems","isKeyCode","arrayAssertion","href","_ActionBarComponent","_ActionBarComponent_brand","BUTTON_OK","BUTTON_CANCEL","identifier","_onButtonClick","accept","cancel","MAP_NAME","isMapRegistrable","filteringStates","getFilteredColumns","isMatch","_stateForColumn$condi","stateForColumn","isMatchInConditions","conditionDefinition","localeForColumn","columnType","conditionsForColumn","getConditions","_this$filteringStates","_this$filteringStates2","_this$filteringStates3","allConditions","importAllConditions","stack","columnDataFactory","filteredData","_getIntersectData","filterByColumn","needles","needleRow","_ConditionUpdateObserver_brand","_onConditionBeforeModify","_onConditionBeforeClean","_onConditionAfterClean","grouping","editedColumnPosition","latestEditedColumnPosition","conditionsBefore","conditionsAfter","visibleDataFactory","curriedConditionsBefore","curriedColumn","splitConditionCollection","curriedConditionsBeforeArray","allRows","visibleRowsAssertion","editedConditions","latestOrderStack","_focusNavigator","SHORTCUTS_MENU_CONTEXT","focusNavigator","createFocusNavigator","updateNavigatorPosition","addKeyboardShortcuts","mainMenuShortcutsCtrl","currentMenuShortcutsCtrl","_indexSyncer","isBlockedSource","_internalOperationPending","_hotWasInitializedWithEmptyData","_engineListeners","_Formulas_brand","this","_onEngineValuesUpdated","_onEngineNamedExpressionsAdded","_onEngineNamedExpressionsRemoved","_onEngineSheetAdded","_onEngineSheetRenamed","_onEngineSheetRemoved","sheetId","sheetName","engine","getSheetId","_setupEngine","setupEngine","doesSheetExist","newSheetName","addSheet","_onBeforeLoadData","_onModifyData","_onModifySourceData","_onBeforeValidate","_onAfterSetSourceDataAtCell","_onAfterSetDataAtCell","_onBeforeCreateRow","_onBeforeCreateCol","_len19","_key19","_onAfterCreateRow","_len20","_key20","_onAfterCreateCol","_len21","_key21","_onBeforeRemoveRow","_len22","_key22","_onBeforeRemoveCol","_len23","_key23","_onAfterRemoveRow","_len24","_key24","_onAfterRemoveCol","indexSyncer","IndexSyncer","postponedAction","rowAxisSyncer","getForAxis","columnAxisSyncer","getIndexesChangeSyncMethod","movedRows","movePossible","storeMovesInformation","movedColumns","dropIndex","orderChanged","calculateAndSyncMoves","freezePerformed","unfreezePerformed","_len25","_key25","_onAfterCellMetaReset","setPerformUndo","setPerformRedo","_len26","_key26","_onAfterDetachChild","_len27","_key27","_onBeforeAutofill","on","off","unregisterEngine","newEngineSettings","getEngineSettingsWithOverrides","haveEngineSettingsChanged","getConfig","updateConfig","switchSheet","_this$engine","sheetData","actualSheetName","setSheetContent","serialized","getSheetSerialized","sheet","getHfIndexFromVisualIndex","isFormulaCellType","doesCellHaveFormula","renderDependentSheets","dependentCells","renderSelf","affectedSheetIds","getRegisteredHotInstances","relatedHot","_relatedHot$view","validateDependentCells","changedCells","stringifyAddress","_change$address2","changedCellsSet","_change$address3","_change$address4","addressId","boundHot","syncChangeWithEngine","isItPossibleToSetCellContents","isDate","isDateValid","getDateInHfFormat","isFormula","setCellContents","getDateFromExcelDate","sourceTopStartRow","sourceTopStartColumn","sourceBottomEndRow","sourceBottomEndColumn","targetTopStartRow","targetTopStartColumn","targetBottomEndRow","targetBottomEndColumn","engineSourceRange","engineTargetRange","fillRangeData","getFillRangeData","sourceStartRow","sourceStartColumn","sourceEndRow","sourceEndColumn","populationRowLength","populationColumnLength","populatedRowIndex","populatedColumnIndex","populatedValue","sourceCellMeta","getDateInHotFormat","sourceDataArray","valueChanged","setupSheet","isItPossibleToReplaceSheetContent","setupSyncEndpoint","ioMode","isEscapedFormulaExpression","unescapeFormulaExpression","singleCellMeta","dimensions","getSheetDimensions","getCellSerialized","outOfBoundsChanges","outOfBoundsDependentCells","hfRowIndex","isItPossibleToAddRows","hfColumnIndex","isItPossibleToAddColumns","hfRows","setRemovedHfIndexes","possible","hfRow","isItPossibleToRemoveRows","hfColumns","hfColumn","isItPossibleToRemoveColumns","addRows","addColumns","descendingHfRows","getRemovedHfIndexes","removeRows","descendingHfColumns","removeColumns","finalElementRowIndex","_element$__children","rowsData","__children","relativeRowIndex","namedExpressionName","addedSheetDisplayName","oldDisplayName","newDisplayName","removedSheetDisplayName","getEngineRelationshipRegistry","registryKey","pluginStaticRegistry","getSharedEngineUsageRegistry","engineConfigItem","hyperformula","_engineConfigItem$hyp","registerEngine","engineRelationship","sharedEngineUsage","DEFAULT_LICENSE_KEY","leapYear1900","DEFAULT_SETTINGS","nullDate","engineClass","engineSettings","getEngineSettingsWithDefaultsAndOverrides","engineRegistry","sharedEngineRegistry","registerCustomFunctions","engineInstance","buildEmpty","registerNamedExpressions","namedExpressions","rebuildAndRecalculate","_engineRegistry$get","hotInstances","engineHotRelationship","customFunctions","translations","registerFunction","languageSetting","langCode","suspendEvaluation","namedExp","scope","addNamedExpression","resumeEvaluation","useArrayArithmetic","useColumnIndex","useStats","evaluateNullToZero","precisionEpsilon","precisionRounding","smartRounding","year","month","day","nullYear","dateFormats","timeFormats","matchWholeCell","useRegularExpressions","useWildcards","functionArgSeparator","thousandSeparator","decimalSeparator","getEngineSettingsOverrides","_hotSettings$PLUGIN_K","maxColumns","cleanEngineSettings","_pluginSettings$engin","overrides","_pluginSettings$engin2","currentEngineSettings","settingOption","DEFAULT_DATE_FORMAT_HYPERFORMULA","numericDate","dateOffset","dateForFormatting","UTC","_axisSyncer","_rowIndexSyncer","_columnIndexSyncer","_postponeAction","_isPerformingUndo","_isPerformingRedo","_sheetId","postponeAction","AxisSyncer","indexType","flagValue","isPerformingUndoRedo","getEngine","getPostponeAction","_moves","_axis","_movedIndexes","_finalIndex","_removedIndexes","axis","syncMoves","moves","NUMBER_OF_MOVED_INDEXES","SYNC_MOVE_METHOD_NAME","move","moveToTheSamePosition","anotherMoveWithoutEffect","movedVisualIndexes","visualFinalIndex","calculatedMoves","getMoves","SYNC_ORDER_CHANGE_METHOD_NAME","newSequence","relativeTransformation","sheetDimensions","sizeForAxis","numberOfReorganisedIndexes","getMoveLine","notMovedElements","_notMovedElements$fin","getInitiallyCalculatedMoves","moveLine","movedIndex","previouslyMovedIndex","isMovingFromEndToStart","isMovingElementBefore","isMovingAfterElement","adjustedCalculatedMoves","nextMoved","nextMovedIndex","isMovingFromStartToEnd","_hideColumn","_showColumn","_hiddenColumnsMap","_HiddenColumns_brand","copyPasteEnabled","_onMapInit","_onAfterGetCellMeta","_onModifyColWidth","_onModifyCopyableRange","resetCellsMeta","showColumns","currentHideConfig","getHiddenColumns","isValidConfig","destinationHideConfig","hidingMapValues","isAnyColumnShowed","hiddenIndexes","continueHiding","showColumn","hideColumns","isConfigValid","indicators","containAfterHiddenColumn","pushRange","hideColumnItem","showColumnItem","hiddenColumnsPlugin","columnsToHide","lastHiddenColumn","columnToSelect","_this$columnIndexMapp","_this$columnIndexMapp2","startVisualColumn","endVisualColumn","allColumnsSelected","hiddenPhysicalColumns","selectedRangeLast","visualStartColumn","visualEndColumn","renderableStartColumn","renderableEndColumn","notTrimmedColumnIndexes","physicalColumnIndexes","visualColumnsInRange","renderedColumnsInRange","physicalIndexesInRange","lastVisualIndex","lastRenderableIndex","_hideRow","_showRow","_hiddenRowsMap","_HiddenRows_brand","_onModifyRowHeight","_onAfterGetRowHeader","getHiddenRows","isAnyRowShowed","showRow","hideRow","containAfterHiddenRow","hideRowItem","showRowItem","hiddenRowsPlugin","rowsToHide","lastHiddenRow","_this$rowIndexMapper$","_this$rowIndexMapper$2","startVisualRow","endVisualRow","allRowsSelected","hiddenPhysicalRows","visualStartRow","visualEndRow","renderableStartRow","renderableEndRow","notTrimmedRowIndexes","physicalRowIndexes","visualRowsInRange","renderedRowsInRange","_freezeColumn","_unfreezeColumn","_afterFirstUse","_ManualColumnFreeze_brand","_addContextMenuEntry","_onBeforeColumnMove","freezeColumn","beforeColumnFreezeHook","_fixedColumnsStart","unfreezeColumn","beforeColumnUnfreezeHook","freezeColumnItem","unfreezeColumnItem","freezeLine","manualColumnFreezePlugin","_backlight2","_guideline2","CSS_PLUGIN","CSS_SHOW_UI","CSS_ON_MOVING","CSS_AFTER_SELECTION","_backlight","_guideline","_columnsToMove","_countCols","_pressed","_target","_cachedDropIndex","_hoveredColumn","_rootElementOffset","_hasRowHeaders","_ManualColumnMove_brand","BacklightUI","GuidelineUI","_onBeforeOnCellMouseOver","_onAfterScrollVertically","buildPluginUI","moveBySettingsOrLoad","moveColumn","moveColumns","isMovePossible","beforeMoveHook","movePerformed","isColumnOrderChanged","dragColumn","dragColumns","countFinalIndex","tooHighDestinationIndex","tooLowDestinationIndex","tooLowMovedColumnIndex","movedColumn","tooHighMovedColumnIndex","nrOfMovedElement","numberOfColumnsLowerThanDropIndex","currentColumnIndex","getColumnsWidth","persistentStateLoad","isFixedColumnsStart","persistentStateSave","storedState","prepareColumnsToMoving","selectedColumns","refreshPositions","firstVisible","scrollStart","tdOffsetStart","tbodyOffsetLeft","backlightElemMarginStart","getOffset","backlightElemWidth","mouseOffsetStart","eventPageX","newCoordsCol","backlightStart","guidelineStart","isHeaderSelection","isSortingElement","guidelineIsNotReady","isAppended","backlightIsNotReady","appendTo","eventOffsetX","countColumnsFrom","inlinePos","firstMovedVisualColumn","firstMovedPhysicalColumn","posTop","CSS_CLASSNAME","STATE_INITIALIZED","STATE_APPENDED","UNIT","inlineProperty","inlinePosition","getPosition","marginTop","inlineProp","PERSISTENT_STATE_KEY","_currentTH","_currentCol","_selectedCols","_currentWidth","_newSize","_startY","_startWidth","_startOffset","_handle","_guide","_isTriggeredByRMB","_dblclick","_autoresizeTimeout","_columnWidthsMap","_config","_ManualColumnResize_brand","inlineDir","_onBeforeStretchingColumnWidth","isDoubleClick","saveManualColumnWidths","loadManualColumnWidths","setManualSize","newWidth","clearManualSize","setupHandlePosition","box","fixedColumn","relativeHeaderPosition","isFullColumnSelected","refreshHandlePosition","setupGuidePosition","handleHeight","handleBottomPosition","refreshGuidePosition","hideHandleAndGuide","checkIfColumnHeader","thead","getClosestTHParent","afterMouseDownTimeout","hookNewSize","selectedColsLength","selectedCol","_onContextMenu","initialSetting","loadedManualColumnWidths","startX","_rowsToMove","_ManualRowMove_brand","_onAfterScrollHorizontally","moveRow","moveRows","isRowOrderChanged","dragRow","dragRows","tooLowMovedRowIndex","movedRow","tooHighMovedRowIndex","numberOfRowsLowerThanDropIndex","currentRowIndex","getRowsHeight","isFixedRowTop","isFixedRowBottom","prepareRowsToMoving","selectedRows","lastVisible","tableScroll","trimmingContainerScroll","pixelsAbove","pixelsRelToTableStart","eventPageY","hiderHeight","tbodyOffsetTop","backlightElemMarginTop","backlightElemHeight","tdMiddle","tdHeight","tdStartPixel","isBelowTable","backlightTop","guidelineTop","leftPos","rowsLen","firstMovedVisualRow","firstMovedPhysicalRow","headerWidth","posLeft","marginLeft","_currentRow","_selectedRows","_currentHeight","_startHeight","_rowHeightsMap","_ManualRowResize_brand","saveManualRowHeights","loadManualRowHeights","newHeight","getLastDesiredRowHeight","isFullRowSelected","handleWidth","handleEndPosition","checkIfRowHeader","tbody","getActualRowHeight","walkontableHeight","selectedRowsLength","loadedManualRowHeights","_cellsCollection","_cellCoords","_toggleMerge","_focusOrder2","_lastSelectedFocus","_lastFocusDelta","_focusOrder","_cellRenderer","_MergeCells_brand","FocusOrder","mergedCellsGetter","mergedCellsCollection","createMergeCellRenderer","MergedCellsCollection","autofillCalculations","AutofillCalculations","selectionCalculations","SelectionCalculations","_onModifyTransformFocus","_onModifyTransformStart","_onModifyTransformEnd","_onBeforeSelectionHighlightSet","_onBeforeSetRangeStart","_onBeforeSelectionFocusSet","_onAfterSelectionFocusSet","_onModifyGetCellCoords","_onAfterIsMultipleSelection","_addMergeActionsToContextMenu","_onAfterViewportRowCalculatorOverride","_onAfterViewportColumnCalculatorOverride","_onModifyAutofillRange","_onBeforeDrawAreaBorders","_onAfterDrawSelection","_onBeforeRemoveCellClassNames","_onBeforeBeginEditing","_onModifyRowHeightByOverlayName","clearCollections","generateFromSettings","ifChromeForceRepaint","rowsToRefresh","rowIndexesToRefresh","mergedCells","mergedCell","wtTableRef","rowToRefresh","rowElement","validateSetting","MergedCellCoords","containsNegativeValues","NEGATIVE_VALUES_WARNING","isOutOfBounds","IS_OUT_OF_BOUNDS_WARNING","IS_SINGLE_CELL","containsZeroSpan","ZERO_SPAN_WARNING","validSettings","mergeCellInfo","nonOverlappingSettings","filterOverlappingMergeCells","populatedNulls","mergeRange","canMergeRange","newMergedCellInfo","auto","mergeSelection","unmergeRange","unmergeSelection","preventPopulation","mergeParent","clearedData","populationInfo","clearedValue","mergedCellAdded","getWithinRange","currentCollection","toggleMerge","mergedCellCoversWholeRange","merge","unmerge","modifyViewportRowStart","mergeParentForViewportStart","renderableIndexAtMergeStart","modifyViewportRowEnd","mergeParentForViewportEnd","mergeEnd","renderableIndexAtMergeEnd","modifyViewportColumnStart","visualStartCol","modifyViewportColumnEnd","visualEndCol","translateMergedCellToRenderable","parentRow","parentColumn","firstNonHiddenRow","firstNonHiddenColumn","topStartCoords","bottomEndCoords","mergedParent","visualColumnIndexStart","visualColumnIndexEnd","notHiddenColumnIndex","visualRowIndexStart","visualRowIndexEnd","notHiddenRowIndex","cloneRange","expandCloneRange","getStartMostColumnIndex","getEndMostColumnIndex","getTopMostRowIndex","getBottomMostRowIndex","mergeRow","mergeColumn","toggleMergeItem","setActiveNode","setPrevNodeAsActive","setNextNodeAsActive","colEnd","getPrevHorizontalNode","colStart","getNextHorizontalNode","getPrevVerticalNode","getNextVerticalNode","buildFocusOrder","drag","correctSelectionAreaSize","dragDirection","dragArea","dragAreaOverlapsCollections","mergedCellsWithinSelectionArea","snapDragArea","shiftCollections","recreateAfterDataPopulation","mergedCellsWithinRange","getLastRow","getLastColumn","getSelectedMergedCellClassName","getSelectedMergedCellClassNameToRemove","mergeCell","activeOverlay","firstMergedCellInRow","viewportRange","maxRowspan","rowspanCorrection","_height","rowspanAfterCorrection","_sumCellsHeights","autoRowSizePlugin","_autoRowSizePlugin$ge","_MergedCellsCollection_brand","mergeCellsPlugin","IS_OVERLAPPING_WARNING","_this$mergedCellsMatr","mergedCellsMatrix","mergedCellsInfo","occupiedCells","filteredMergeCells","localOccupiedCells","isOverlapping","countPartials","mergedCellInfo","newMergedCell","alreadyExists","_addMergedCellToMatrix","mergedCellIndex","_removeMergedCellFromMatrix","mergedCellRange","otherMergedCell","otherMergedCellRange","isFirstRenderableMergedCell","getFirstRenderableCoords","firstRenderableRow","firstRenderableColumn","_getNonIntersectingIndexes","startMostIndex","endMostIndex","topMostIndex","bottomMostIndex","shiftVector","removedMergedCells","currentMerge","removedMerge","scanDirection","_cellRange","cellRangeFactory","includesHorizontally","includesVertically","indexOfChange","shiftValue","shiftedIndex","changeStart","changeEnd","mergeStart","removedOffset","preRemovedOffset","removedPart","isFarther","selectionArea","finalArea","baseArea","foundMergedCells","newDragArea","fillSize","getAutofillSize","baseAreaStartRow","baseAreaStartColumn","baseAreaEndRow","baseAreaEndColumn","verticalDirection","fullCycle","fulls","partials","farthestCollection","getFarthestCollection","newLimit","updateCurrentFillCache","cycleLength","updateObject","currentFillData","dragAreaStartRow","dragAreaStartColumn","dragAreaEndRow","dragAreaEndColumn","getDragArea","mergedCellArray","baseEnd","baseStart","inclusionFunctionName","endOfDragRecreationIndex","fillRange","getRangeFromChanges","inBounds","fullArea","dragRange","mergeRowEnd","mergeColumnEnd","fullMergeAreaWithinSelection","fullySelectedMergedCellClassName","isMergeCellFullySelected","selectionRangesArray","mergedCellIndividualCoords","insideSelections","currentRange","_linkedList","_cellsHorizontalOrder","_cellsVerticalOrder","_currentHorizontalLinkedNode","_currentVerticalLinkedNode","_mergedCellsGetter","_rowIndexMapper","_columnIndexMapper","_FocusOrder_brand","LinkedList","getCurrentVerticalNode","getFirstVerticalNode","prev","getCurrentHorizontalNode","getFirstHorizontalNode","visitedHorizontalCells","_pushOrderNode","last","visitedVerticalCells","inorder","listOrder","mergeCellsVisitor","linkedNode","NodeStructure","temp","interrupt","hasCycle","fast","slow","recursiveReverse","inverse","origRow","origColumn","origRowspan","lastMergedRowIndex","lastMergedColumnIndex","maxRowSpan","maxColSpan","notHiddenRow","notHiddenColumn","notHiddenRowspan","notHiddenColspan","_utils2","CONFLICTED_PLUGIN_KEY","warnAboutPluginsConflict","nextSortedColumn","COLUMN_ORDER_PREFIX","htmlElement","sortSequenceRegExp","cssClass","removeFromDragged","dragged","entryPosition","touchStartRange","targetCoords","rangeWidth","rangeHeight","rangeDirection","newRangeCoords","endTarget","touches","lastSetCell","getCurrentRangeCoords","currentTouch","touchStartDirection","currentDirection","draggedHandle","bottomStartCorner","isDragged","_stateManager2","_stateManager","_hidingIndexMapObserver","_focusInitialCoords","_isColumnsSelectionInProgress","_NestedHeaders_brand","StateManager","_onAfterOnCellMouseDown","_onBeforeOnCellMouseUp","_updateFocusHighlightPosition","_onAfterGetColumnHeaderRenderers","_onModifyColumnHeaderValue","_onBeforeHighlightingColumnHeader","_onBeforeCopy","_onBeforeSelectColumns","_onModifyFocusedElement","setColumnsLimit","isColumnHidden","triggerColumnModification","buildWidthsMap","setLayersCount","getLayersCount","clearColspans","masterNodes","headerRendererFactory","isPlaceholder","headerClassNames","_wtOverlays$topInline","_wtOverlays$inlineSta","isTopInlineStartOverlay","isInlineStartOverlay","correctedColspan","getColumnHeaderValue","innerHeaderDiv","_getHeaderTreeNodeDataByCoords","_this$hot","isNestedHeadersRange","findLeftMostColumnIndex","mostLeftColumnIndex","mostRightColumnIndex","findRightMostColumnIndex","headerNodeData","isRoot","rangeIndex","zeroBasedColumnHeaderLevel","zeroBasedColumnIndex","columnsToSelect","findTopMostEntireHeaderLevel","nextCoords","startNodeData","endNodeData","renderersArray","headerLayer","headerLayersCount","newStartColumn","nonRenderable","cachedWidth","_sourceSettings2","_headersTree2","_nodeModifiers","_matrixGenerator","_tree","_sourceSettings","_headersTree","_stateMatrix","SourceSettings","HeadersTree","nestedHeadersSettings","hasError","buildTree","ex","generateMatrix","getRoots","transformedSettings","rowCoordsToLevel","mergeWith","walkDown","nodeToProcess","actionResult","getHeaderTreeNode","columnIndexFrom","_headerLevel","columnIndexTo","atLeastOneRootFound","getRootByColumn","nodeColumnIndex","nodeHeaderLevel","TRAVERSAL_DF_PRE","_this$getHeaderSettin","stepBackColumn","_this$getHeaderSettin2","isRootNode","_this$getHeaderSettin3","stepForthColumn","getColumnsCount","_this$getHeaderSettin4","_settingsNormalizer","HEADER_CONFIGURABLE_PROPS","_dataLength","normalizeSettings","additionalSettings","propsToExtend","_headersSettings$colu","headersSettings","getHeadersSettings","columnsLength","headersSettingsChunks","currentLength","sourceSettings","normalizedSettings","sourceHeaderSettings","createDefaultHeaderSettings","cancelProcessing","createPlaceholderHeaderSettings","defaultSettings","crossHiddenColumns","_rootNodes","_rootsIndex","normColumnIndex","treeNode","rebuildTreeIndex","columnSettings","TreeNode","buildLeaves","extractionLength","nodeData","addChild","depthFirstPreOrder","continueTraverse","TRAVERSAL_DF_POST","depthFirstPostOrder","TRAVERSAL_BF","breadthFirst","queue","DEFAULT_TRAVERSAL_STRATEGY","TRAVERSAL_STRATEGIES","cloneTree","nodeTree","clonedNode","replaceTreeWith","traversalStrategy","walkUp","_collapse","_expand","availableModifiers","collapseNode","expandNode","gridColumnIndex","_getFirstChildPropert","nodeChilds","isNodeReflected","isNodeReflectsFirstChildColspan","allLeavesExceptMostLeft","traverseHiddenNodeColumnIndexes","clonedTree","getFirstChildProperty","leafData","isCollapsibleNode","headerRoots","matrix","colspanHeaderLayer","createNestedArrayIfNecessary","isRootSettingsFound","headerRootSettings","createHeaderSettings","subArray","nestedHeaderSettingsGetter","widthsMap","_buildGhostTable","isDropdownEnabled","maxRenderedCols","_dataManager","_collapsing","_headers","_rowMoveController","WRONG_DATA_TYPE_ERROR","_skipRender","_skipCoreAPIModifiers","_NestedRows_brand","collapsedRowsMap","dataManager","DataManager","collapsingUI","CollapsingUI","headersUI","HeadersUI","contextMenuUI","ContextMenuUI","rowMoveController","RowMoveController","_onBeforeViewRender","onModifyRowData","onModifySourceLength","onBeforeDataSplice","_onFilterData","_onBeforeAddChild","_onAfterAddChild","_onBeforeDetachChild","_onModifyRowHeaderWidth","_onBeforeRowMove","currentSourceData","updateWithData","translateTrimmedRow","areChildrenCollapsed","expandChildren","collapseChildren","disableCoreAPIModifiers","enableCoreAPIModifiers","getDataObject","countAllRows","isRowHighestLevel","onBeforeRowMove","toggleState","collapsedRowsStash","stash","trimStash","shiftStash","appendOptions","appendLevelIndicators","rowHeaderWidthCache","updateRowHeaderWidth","applyStash","modifiedPhysicalRows","removedRows","isParent","getRowIndex","rewriteCache","nestedRowsPlugin","levels","levelCount","nodeInfo","getRawSourceData","rawSourceData","cache","cacheNode","hasChildren","readTreeNodes","readCount","neededIndex","neededObject","rootLevel","readNodesCount","parentObj","parentReference","mockParent","fakeParent","mockNode","fakeNode","rowObj","getRowIndexWithinParent","getRowParent","rootNodeMock","countChildren","getRowObjectParent","getRowLevel","getRowObjectLevel","isChild","getChild","_parent$__children","_rowObj$__children","childElement","parentIndex","functionalParent","newRowIndex","addChildAtIndex","flattenedIndex","finalChildIndex","addSibling","where","translatedIndex","indexWithinParent","detachFromParent","rowObjects","childRowIndex","childCount","grandparent","grandparentRowIndex","movedElementRowIndex","removedRowIndexes","lastGrandparentChild","lastGrandparentChildIndex","elementsToRemove","tempParent","previousElement","newRowParent","syncRowWithRawSource","upmostParent","moveToCollapsed","moveToLastChild","moveToLastRow","fromParent","indexInFromParent","elemToMove","movingUp","toParent","indexInTargetParent","sameParent","untranslateTrimmedRow","collapsedRows","lastCollapsedRows","expandMultipleChildren","targetIndex","collapseMultipleChildren","realElementIndex","indexOfElement","doTrimming","rowsToCollapse","rowsToTrim","collapseRows","renderAndAdjust","collapseRow","recursive","rowIndexes","collapseChildRows","parentObject","elemIndex","expandRow","expandRows","rowsToUntrim","expandChildRows","untrimRows","isAnyParentCollapsed","rowsToExpand","childIndex","parentsToCollapse","parentsToExpand","allCollapsed","CSS_CLASSES","pluginInstance","indicatorContainer","emptyIndicator","expandButton","collapseButton","rowLevel","innerDiv","getElementsByTagName","innerSpan","previousIndicators","initialContent","levelIndicator","buttonsContainer","deepestLevel","deepestLevelIndex","_menuEntries","row_above","lastSelection","row_below","newEntries","translatedRowIndex","modifyRowInsertingOptions","improperUsage","displayAPICompatibilityWarning","movedToCollapsed","dropToLastRow","physicalDropIndex","allowMove","physicalStartIndexes","shouldAllowMoving","willDataChange","baseParent","getBaseParent","targetParent","getTargetParent","shiftCollapsibleParentsLocations","moveCellsMeta","beforeMoveRowHookArgs","shouldTerminate","physicalStartIndex","baseIndexes","rowsOfMeta","movingDown","lastColIndex","_storage","storage","Storage","saveTo","loadValue","resetValue","resetAll","prefix","loadSavedKeys","localStorage","setItem","savedKeys","saveSavedKeys","itemKey","clearSavedKeys","keysJSON","DEFAULT_SEARCH_RESULT_CLASS","DEFAULT_CALLBACK","testResult","isSearchResult","DEFAULT_QUERY_METHOD","_Search_brand","searchSettings","updatePluginSettings","_onBeforeRenderer","beforeRendererCallback","queryStr","getCallback","queryMethod","getQueryMethod","queryResult","cellCallback","cellQueryMethod","singleResult","newCallback","setQueryMethod","newQueryMethod","getSearchResultClass","searchResultClass","setSearchResultClass","newElementClass","classArray","_TouchScroll_brand","_onAfterViewRender","lockedCollection","_onBeforeTouchScroll","_onAfterMomentumScroll","scrollbars","clones","scrollbar","_TrimRows_brand","trimmedRowsMap","getTrimmedRows","currentTrimConfig","destinationTrimConfig","allowTrimRow","trimRow","trimmingMapValues","isAnyRowUntrimmed","trimmedIndexes","allowUntrimRow","untrimRow","untrimAll","sourceRows","trimmedRow","doneActions","undoneActions","ignoreNewActions","changesLen","hasDifferences","wrappedAction","clonedChanges","ChangeAction","CreateRowAction","getCellMetas","genericKeys","genericKeysLength","cellMetas","uniqueMeta","fromEntries","removedData","RemoveRowAction","CreateColumnAction","logicColumns","originalData","columnsMap","rowsMap","RemoveColumnAction","CellAlignmentAction","previousConditionsStack","FiltersAction","RowMoveAction","ColumnMoveAction","MergeCellsAction","UnmergeCellsAction","ColumnSortAction","isBlockedByDefault","doneActionsCopy","continueAction","newAction","undoneActionsCopy","actionClone","that","enable","exposeUndoRedoMethods","onAfterChange","disable","removeExposedUndoRedoMethods","Action","actionType","undoneCallback","emptyRowsAtTheEnd","emptyColsAtTheEnd","changedRow","changedColumn","firstFullyVisibleRow","firstFullyVisibleColumn","isInVerticalViewPort","isInHorizontalViewPort","isInViewport","isChangedSelection","scrollConfig","onFinishCallback","redoneCallback","rowIndexesSequence","removedCellMetas","rowIndexDelta","columnProp","columnPositions","rowPositions","ascendingIndexes","sortByIndexes","removedDataLength","sortedData","sortedHeaders","changedIndex","contiquesIndex","headerData","rangeData","finalRowIndex","rowMoves","finalColumnIndex","columnMoves","newSortState","previousSortState","nextSortState","sortPlugin","multiSortPlugin","enabledSortPlugin","pluginEnabled","clearUndo","_this$getPlugin","jQueryWrapper","jQuery","$this","removeData","_jquery","parseTableHelpers","arrayHelpers","browserHelpers","dataHelpers","dateHelpers","featureHelpers","functionHelpers","mixedHelpers","numberHelpers","objectHelpers","stringHelpers","unicodeHelpers","domHelpers","domEventHelpers","_registry6","_base2","_Handsontable$cellTyp","_Handsontable$editors","_Handsontable$rendere","_Handsontable$validat","_Handsontable$plugins","__GhostTable","_getListenersCounter","_getRegisteredMapsCounter","HELPERS","DOM","helper","dom","getOwnPropertyNames","cellTypes","cellTypeName","editorName","renderers","rendererName","cellDecorator","validators","validatorName","plugins"],"sourceRoot":""}
\ No newline at end of file
diff --git a/handsontable/dist/handsontable.min.css b/handsontable/dist/handsontable.min.css
index 9a49b11f23..3bbe87cba8 100644
--- a/handsontable/dist/handsontable.min.css
+++ b/handsontable/dist/handsontable.min.css
@@ -25,8 +25,8 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:35:03)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:38)
  */.handsontable .table td,.handsontable .table th{border-top:none}.handsontable tr{background:#fff}.handsontable td{background-color:inherit}.handsontable .table caption+thead tr:first-child td,.handsontable .table caption+thead tr:first-child th,.handsontable .table colgroup+thead tr:first-child td,.handsontable .table colgroup+thead tr:first-child th,.handsontable .table thead:first-child tr:first-child td,.handsontable .table thead:first-child tr:first-child th{border-top:1px solid #ccc}.handsontable .table-bordered{border:0;border-collapse:separate}.handsontable .table-bordered td,.handsontable .table-bordered th{border-left:none}.handsontable .table-bordered td:first-child,.handsontable .table-bordered th:first-child{border-left:1px solid #ccc}.handsontable .table>tbody>tr>td,.handsontable .table>tbody>tr>th,.handsontable .table>tfoot>tr>td,.handsontable .table>tfoot>tr>th,.handsontable .table>thead>tr>td,.handsontable .table>thead>tr>th{line-height:21px;padding:0}.col-lg-1.handsontable,.col-lg-10.handsontable,.col-lg-11.handsontable,.col-lg-12.handsontable,.col-lg-2.handsontable,.col-lg-3.handsontable,.col-lg-4.handsontable,.col-lg-5.handsontable,.col-lg-6.handsontable,.col-lg-7.handsontable,.col-lg-8.handsontable,.col-lg-9.handsontable,.col-md-1.handsontable,.col-md-10.handsontable,.col-md-11.handsontable,.col-md-12.handsontable,.col-md-2.handsontable,.col-md-3.handsontable,.col-md-4.handsontable,.col-md-5.handsontable,.col-md-6.handsontable,.col-md-7.handsontable,.col-md-8.handsontable,.col-md-9.handsontable .col-sm-1.handsontable,.col-sm-10.handsontable,.col-sm-11.handsontable,.col-sm-12.handsontable,.col-sm-2.handsontable,.col-sm-3.handsontable,.col-sm-4.handsontable,.col-sm-5.handsontable,.col-sm-6.handsontable,.col-sm-7.handsontable,.col-sm-8.handsontable,.col-sm-9.handsontable .col-xs-1.handsontable,.col-xs-10.handsontable,.col-xs-11.handsontable,.col-xs-12.handsontable,.col-xs-2.handsontable,.col-xs-3.handsontable,.col-xs-4.handsontable,.col-xs-5.handsontable,.col-xs-6.handsontable,.col-xs-7.handsontable,.col-xs-8.handsontable,.col-xs-9.handsontable{padding-left:0;padding-right:0}.handsontable .table-striped>tbody>tr:nth-of-type(2n){background-color:#fff}.handsontable{position:relative}.handsontable .hide{display:none}.handsontable .relative{position:relative}.handsontable .wtHider{width:0}.handsontable .wtSpreader{height:auto;position:relative;width:0}.handsontable div,.handsontable input,.handsontable table,.handsontable tbody,.handsontable td,.handsontable textarea,.handsontable th,.handsontable thead{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}.handsontable input,.handsontable textarea{min-height:auto}.handsontable table.htCore{border-collapse:separate;border-spacing:0;border-width:0;cursor:default;margin:0;max-height:none;max-width:none;outline-width:0;table-layout:fixed;width:0}.handsontable col,.handsontable col.rowHeader{width:50px}.handsontable td,.handsontable th{background-color:#fff;border-bottom:1px solid #ccc;border-left-width:0;border-right:1px solid #ccc;border-top-width:0;empty-cells:show;height:22px;line-height:21px;outline:none;outline-width:0;overflow:hidden;padding:0 4px;vertical-align:top;white-space:pre-wrap}[dir=rtl].handsontable td,[dir=rtl].handsontable th{border-left:1px solid #ccc;border-right-width:0}.handsontable th:last-child{border-bottom:1px solid #ccc;border-left:none;border-right:1px solid #ccc}[dir=rtl].handsontable th:last-child{border-left:1px solid #ccc;border-right:none}.handsontable td:first-of-type,.handsontable th:first-child{border-left:1px solid #ccc}[dir=rtl].handsontable td:first-of-type,[dir=rtl].handsontable th:first-child{border-right:1px solid #ccc}.handsontable .ht_clone_top th:nth-child(2){border-left-width:0;border-right:1px solid #ccc}[dir=rtl].handsontable .ht_clone_top th:nth-child(2){border-left:1px solid #ccc;border-right-width:0}.handsontable.htRowHeaders thead tr th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable.htRowHeaders thead tr th:nth-child(2){border-right:1px solid #ccc}.handsontable tr:first-child td,.handsontable tr:first-child th{border-top:1px solid #ccc}.ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child{border-left:1px solid #ccc;border-right-width:0}[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.htGhostTable) tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child{border-left-width:0;border-right:1px solid #ccc}.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr:last-child th{border-bottom-width:0}.handsontable th{background-color:#f0f0f0;color:#222;font-weight:400;text-align:center;white-space:nowrap}.handsontable thead th{padding:0}.handsontable th.active{background-color:#ccc}.handsontable thead th .relative{padding:2px 4px}.handsontable span.colHeader{display:inline-block;line-height:1.1}.handsontable .wtBorder{font-size:0;position:absolute}.handsontable .wtBorder.hidden{display:none!important}.handsontable .wtBorder.current{z-index:10}.handsontable .wtBorder.area{z-index:8}.handsontable .wtBorder.fill{z-index:6}.handsontable .wtBorder.corner{cursor:crosshair;font-size:0}.ht_clone_master{z-index:100}.ht_clone_inline_start{z-index:120}.ht_clone_bottom{z-index:130}.ht_clone_bottom_inline_start_corner{z-index:150}.ht_clone_top{z-index:160}.ht_clone_top_inline_start_corner{z-index:180}.handsontable col.hidden{width:0!important}.handsontable tr.hidden,.handsontable tr.hidden td,.handsontable tr.hidden th{display:none}.ht_clone_bottom,.ht_clone_inline_start,.ht_clone_top,.ht_master{overflow:hidden}.ht_master .wtHolder{overflow:auto}.handsontable .ht_clone_inline_start table.htCore>thead,.handsontable .ht_master table.htCore>tbody>tr>th,.handsontable .ht_master table.htCore>thead{visibility:hidden}.ht_clone_bottom .wtHolder,.ht_clone_inline_start .wtHolder,.ht_clone_top .wtHolder{overflow:hidden}.handsontable{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;touch-action:manipulation}.handsontable a{color:#104acc}.handsontable.htAutoSize{left:-99000px;position:absolute;top:-99000px;visibility:hidden}.handsontable td.htInvalid{background-color:#ffbeba!important}.handsontable td.htNoWrap{white-space:nowrap}.handsontable td.invisibleSelection,.handsontable th.invisibleSelection{outline:none}.handsontable td.invisibleSelection::selection,.handsontable th.invisibleSelection::selection{background:hsla(0,0%,100%,0)}.hot-display-license-info{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:10px;font-weight:400;padding:5px 0 3px;text-align:left}.hot-display-license-info a{color:#104acc;font-size:10px}.handsontable .htFocusCatcher{border:0;height:0;margin:0;opacity:0;padding:0;position:absolute;width:0;z-index:-1}.handsontable .manualColumnResizer{cursor:col-resize;height:25px;position:absolute;top:0;width:5px;z-index:210}.handsontable .manualRowResizer{cursor:row-resize;height:5px;left:0;position:absolute;width:50px;z-index:210}.handsontable .manualColumnResizer.active,.handsontable .manualColumnResizer:hover,.handsontable .manualRowResizer.active,.handsontable .manualRowResizer:hover{background-color:#34a9db}.handsontable .manualColumnResizerGuide{background-color:#34a9db;border-left:none;border-right:1px dashed #777;display:none;margin-left:5px;margin-right:unset;position:absolute;right:unset;top:0;width:0}[dir=rtl].handsontable .manualColumnResizerGuide{border-left:1px dashed #777;border-right:none;left:unset;margin-left:unset;margin-right:5px}.handsontable .manualRowResizerGuide{background-color:#34a9db;border-bottom:1px dashed #777;bottom:0;display:none;height:0;left:0;margin-top:5px;position:absolute}.handsontable .manualColumnResizerGuide.active,.handsontable .manualRowResizerGuide.active{display:block;z-index:209}.handsontable td.area,.handsontable td.area-1,.handsontable td.area-2,.handsontable td.area-3,.handsontable td.area-4,.handsontable td.area-5,.handsontable td.area-6,.handsontable td.area-7{position:relative}.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{background:#005eff;bottom:0;content:"";left:0;position:absolute;right:0;top:0}.handsontable td.area:before{opacity:.1}.handsontable td.area-1:before{opacity:.2}.handsontable td.area-2:before{opacity:.27}.handsontable td.area-3:before{opacity:.35}.handsontable td.area-4:before{opacity:.41}.handsontable td.area-5:before{opacity:.47}.handsontable td.area-6:before{opacity:.54}.handsontable td.area-7:before{opacity:.58}.handsontable tbody th.current,.handsontable thead th.current{box-shadow:inset 0 0 0 2px #4b89ff}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:#dcdcdc}.handsontable tbody th.ht__active_highlight,.handsontable thead th.ht__active_highlight{background-color:#8eb0e7;color:#000}.handsontableInput{background-color:#fff;border:none;border-radius:0;box-shadow:inset 0 0 0 2px #5292f7;color:#000;display:block;font-family:inherit;font-size:inherit;line-height:21px;margin:0;outline-width:0;padding:1px 5px 0;resize:none}.handsontableInput:focus{outline:none}.handsontableInputHolder{left:0;position:absolute;top:0}.htSelectEditor{-webkit-appearance:menulist-button!important;border:2px solid #4b89ff;position:absolute;width:auto}.htSelectEditor:focus{outline:none}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{color:#777;content:"▶";font-size:9px;position:absolute;right:5px}[dir=rtl].handsontable .htSubmenu :after{content:""}[dir=rtl].handsontable .htSubmenu :before{color:#777;content:"◀";font-size:9px;left:5px;position:absolute}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable.listbox{margin:0}.handsontable.listbox .ht_master table{background:#fff;border:1px solid #ccc;border-collapse:separate}.handsontable.listbox td,.handsontable.listbox th,.handsontable.listbox tr:first-child td,.handsontable.listbox tr:first-child th,.handsontable.listbox tr:last-child th{border-color:transparent!important}.handsontable.listbox td,.handsontable.listbox th{text-overflow:ellipsis;white-space:nowrap}.handsontable.listbox td.htDimmed{color:inherit;cursor:default;font-style:inherit}.handsontable.listbox .wtBorder{visibility:hidden}.handsontable.listbox tr td.current,.handsontable.listbox tr:hover td{background:#eee}.ht_editor_hidden{z-index:-1}.ht_editor_visible{z-index:200}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.handsontable.mobile,.handsontable.mobile .wtHolder{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-overflow-scrolling:touch}.handsontable.mobile .handsontableInput:focus{-webkit-appearance:none;-webkit-box-shadow:inset 0 0 0 2px #5292f7;-moz-box-shadow:inset 0 0 0 2px #5292f7;box-shadow:inset 0 0 0 2px #5292f7}.handsontable .bottomSelectionHandle,.handsontable .bottomSelectionHandle-HitArea,.handsontable .topSelectionHandle,.handsontable .topSelectionHandle-HitArea{left:-10000px;right:unset;top:-10000px;z-index:9999}[dir=rtl].handsontable .bottomSelectionHandle,[dir=rtl].handsontable .bottomSelectionHandle-HitArea,[dir=rtl].handsontable .topSelectionHandle,[dir=rtl].handsontable .topSelectionHandle-HitArea{left:unset;right:-10000px}.handsontable.hide-tween{-webkit-animation:opacity-hide .3s;animation:opacity-hide .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable.show-tween{-webkit-animation:opacity-show .3s;animation:opacity-show .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable .htAutocompleteArrow{color:#bbb;cursor:default;float:right;font-size:10px;text-align:center;width:16px}[dir=rtl].handsontable .htAutocompleteArrow{float:left}.handsontable td.htInvalid .htAutocompleteArrow{color:#555}.handsontable td.htInvalid .htAutocompleteArrow:hover{color:#1a1a1a}.handsontable td .htAutocompleteArrow:hover{color:#777}.handsontable td.area .htAutocompleteArrow{color:#d3d3d3}.handsontable .htCheckboxRendererInput{display:inline-block}.handsontable .htCheckboxRendererInput.noValue{opacity:.5}.handsontable .htCheckboxRendererLabel{cursor:pointer;display:inline-block;font-size:inherit;vertical-align:middle}.handsontable .htCheckboxRendererLabel.fullWidth{width:100%}.handsontable .collapsibleIndicator{background:#eee;border:1px solid #a6a6a6;border-radius:10px;-webkit-box-shadow:0 0 0 6px #eee;-moz-box-shadow:0 0 0 6px #eee;box-shadow:0 0 0 3px #eee;color:#222;cursor:pointer;font-size:10px;height:10px;left:unset;line-height:8px;position:absolute;right:5px;text-align:center;top:50%;transform:translateY(-50%);width:10px}[dir=rtl].handsontable .collapsibleIndicator{left:5px;right:unset}.handsontable[dir=ltr] thead th:has(.collapsibleIndicator) div.htRight span.colHeader{margin-right:20px}.handsontable[dir=rtl] thead th:has(.collapsibleIndicator) div.htLeft span.colHeader{margin-left:20px}.handsontable .columnSorting{position:relative}.handsontable[dir=ltr] div.htRight span[class*=ascending],.handsontable[dir=ltr] div.htRight span[class*=descending]{margin-left:-10px;margin-right:10px}.handsontable[dir=rtl] div.htLeft span[class*=ascending],.handsontable[dir=rtl] div.htLeft span[class*=descending]{margin-left:10px;margin-right:-10px}.handsontable[dir=ltr] div.htRight span[class*=ascending]:only-child,.handsontable[dir=ltr] div.htRight span[class*=descending]:only-child{margin-left:-15px;margin-right:15px}.handsontable[dir=rtl] div.htLeft span[class*=ascending]:only-child,.handsontable[dir=rtl] div.htLeft span[class*=descending]:only-child{margin-left:15px;margin-right:-15px}.handsontable .columnSorting.sortAction:hover{cursor:pointer;text-decoration:underline}.handsontable span.colHeader.columnSorting:before{background-position-x:right;background-repeat:no-repeat;background-size:contain;content:"";height:10px;left:unset;margin-top:-6px;padding-left:8px;padding-right:0;position:absolute;right:-9px;top:50%;width:5px}[dir=rtl].handsontable span.colHeader.columnSorting:before{background-position-x:left;left:-9px;padding-left:0;padding-right:8px;right:unset}.handsontable span.colHeader.columnSorting.ascending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC)}.handsontable span.colHeader.columnSorting.descending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=)}.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled):before{content:"*";display:inline-block;padding-right:20px;position:relative}.handsontable .htCommentCell{position:relative}.handsontable .htCommentCell:after{border-left:6px solid transparent;border-right:none;border-top:6px solid #000;content:"";left:unset;position:absolute;right:0;top:0}[dir=rtl].handsontable .htCommentCell:after{border-left:none;border-right:6px solid transparent;left:0;right:unset}.htCommentsContainer .htComments{display:none;position:absolute;z-index:1059}.htCommentsContainer .htCommentTextArea{-webkit-appearance:none;background-color:#fff;border:none;border-left:3px solid #ccc;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:12px;height:90px;outline:0!important;padding:5px;width:215px}[dir=rtl].htCommentsContainer .htCommentTextArea{border-left:none;border-right:3px solid #ccc}.htCommentsContainer .htCommentTextArea:focus{border-left:3px solid #5292f7;border-right:none;box-shadow:0 1px 3px rgba(0,0,0,.118),0 1px 2px rgba(0,0,0,.239),inset 0 0 0 1px #5292f7}[dir=rtl].htCommentsContainer .htCommentTextArea:focus{border-left:none;border-right:3px solid #5292f7}
 /*!
  * Handsontable ContextMenu
diff --git a/handsontable/dist/handsontable.min.js b/handsontable/dist/handsontable.min.js
index 427c26507e..ba6591b65e 100644
--- a/handsontable/dist/handsontable.min.js
+++ b/handsontable/dist/handsontable.min.js
@@ -25,14 +25,14 @@
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
  * USE OR INABILITY TO USE THIS SOFTWARE.
  *
- * Version: 14.6.0
- * Release date: 01/10/2024 (built at 30/09/2024 12:35:03)
+ * Version: 14.6.1
+ * Release date: 17/10/2024 (built at 15/10/2024 15:43:38)
  */
 !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("dompurify"),require("@handsontable/pikaday"),require("moment"),require("numbro")):"function"==typeof define&&define.amd?define("Handsontable",["dompurify","@handsontable/pikaday","moment","numbro"],t):"object"==typeof exports?exports.Handsontable=t(require("dompurify"),require("@handsontable/pikaday"),require("moment"),require("numbro")):e.Handsontable=t(e.DOMPurify,e.Pikaday,e.moment,e.numbro)}("undefined"!=typeof self?self:this,((e,t,o,s)=>(()=>{var n={17728:()=>{},32779:(e,t)=>{"use strict";t.__esModule=!0,t.parse=function(e){const t=[[""]];if(0===e.length)return t;let i,r=0,l=0;for(;e.length>0&&i!==e.length;)if(i=e.length,e.match(n))e=e.replace(n,""),r+=1,t[l][r]="";else if(e.match(o))e=e.replace(o,""),r=0,l+=1,t[l]=[""];else{let o="";if(e.startsWith('"')){let t=0,s=!0;for(;s;){const n=e.slice(0,1);'"'===n&&(t+=1),o+=n,(0===(e=e.slice(1)).length||e.match(/^[\t\r\n]/)&&t%2==0)&&(s=!1)}o=o.replace(/^"/,"").replace(/"$/,"").replace(/["]*/g,(e=>new Array(Math.floor(e.length/2)).fill('"').join("")))}else{const t=e.match(s);o=t?t[0]:"",e=e.slice(o.length)}t[l][r]=o}return t},t.stringify=function(e){let t,o,s,n,i,r="";for(t=0,o=e.length;t<o;t+=1){for(n=e[t].length,s=0;s<n;s+=1)s>0&&(r+="\t"),i=e[t][s],"string"==typeof i?i.indexOf("\n")>-1?r+=`"${i.replace(/"/g,'""')}"`:r+=i:r+=null==i?"":i;t!==o-1&&(r+="\n")}return r};const o=/^(\r\n|\n\r|\r|\n)/,s=/^[^\t\r\n]+/,n=/^\t/},55518:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(32779);t.parse=s.parse,t.stringify=s.stringify},45060:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(95913),o(12587);var n=s(o(85707));t.FullyVisibleColumnsCalculationType=class{constructor(){(0,n.default)(this,"count",0),(0,n.default)(this,"startColumn",null),(0,n.default)(this,"endColumn",null),(0,n.default)(this,"startPosition",null),(0,n.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedWidth:o,zeroBasedScrollOffset:s,viewportWidth:n,columnWidth:i}=t;o>=s&&o+i<=s+(s>0?n+1:n)&&(null!==this.startColumn&&void 0!==this.startColumn||(this.startColumn=e),this.endColumn=e)}finalize(e){var t;const{scrollOffset:o,viewportWidth:s,inlineStartOffset:n,zeroBasedScrollOffset:i,totalColumns:r,needReverse:l,startPositions:a,columnWidth:h}=e;if(this.endColumn===r-1&&l)for(this.startColumn=this.endColumn;this.startColumn>0;){const e=a[this.endColumn]+h-a[this.startColumn-1];if(e<=s&&(this.startColumn-=1),e>=s)break}this.startPosition=null!==(t=a[this.startColumn])&&void 0!==t?t:null;const c=o+s-(i>0?s+1:s),u=null===this.startColumn?0:e.getColumnWidth(this.startColumn);c<-1*n||o>a.at(-1)||-1*o-s>-1*u?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,r<this.endColumn&&(this.endColumn=r-1),null!==this.startColumn&&(this.count=this.endColumn-this.startColumn+1)}}},41322:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(95913),o(12587);var n=s(o(85707));t.FullyVisibleRowsCalculationType=class{constructor(){(0,n.default)(this,"count",0),(0,n.default)(this,"startRow",null),(0,n.default)(this,"endRow",null),(0,n.default)(this,"startPosition",null),(0,n.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedHeight:o,zeroBasedScrollOffset:s,innerViewportHeight:n,rowHeight:i}=t;o>=s&&o+i<=n&&(null===this.startRow&&(this.startRow=e),this.endRow=e)}finalize(e){var t;const{scrollOffset:o,viewportHeight:s,horizontalScrollbarHeight:n,totalRows:i,needReverse:r,startPositions:l,rowHeight:a}=e;if(this.endRow===i-1&&r)for(this.startRow=this.endRow;this.startRow>0;){const e=l[this.endRow]+a-l[this.startRow-1];if(e<=s-n&&(this.startRow-=1),e>=s-n)break}this.startPosition=null!==(t=l[this.startRow])&&void 0!==t?t:null;o+s-n<(null===this.startRow?0:e.getRowHeight(this.startRow))||o>l.at(-1)?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,i<this.endRow&&(this.endRow=i-1),null!==this.startRow&&(this.count=this.endRow-this.startRow+1)}}},77970:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(95913),o(12587);var n=s(o(85707));t.PartiallyVisibleColumnsCalculationType=class{constructor(){(0,n.default)(this,"count",0),(0,n.default)(this,"startColumn",null),(0,n.default)(this,"endColumn",null),(0,n.default)(this,"startPosition",null),(0,n.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedWidth:o,zeroBasedScrollOffset:s,viewportWidth:n}=t;o<=s&&(this.startColumn=e);o>=s&&o<=s+(s>0?n+1:n)&&(null!==this.startColumn&&void 0!==this.startColumn||(this.startColumn=e)),this.endColumn=e}finalize(e){var t;const{scrollOffset:o,viewportWidth:s,inlineStartOffset:n,zeroBasedScrollOffset:i,totalColumns:r,needReverse:l,startPositions:a,columnWidth:h}=e;if(this.endColumn===r-1&&l)for(this.startColumn=this.endColumn;this.startColumn>0;){const e=a[this.endColumn]+h-a[this.startColumn-1];if(this.startColumn-=1,e>s)break}this.startPosition=null!==(t=a[this.startColumn])&&void 0!==t?t:null;o+s-(i>0?s+1:s)<-1*n||o>a.at(-1)+h||-1*o-s>0?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,r<this.endColumn&&(this.endColumn=r-1),null!==this.startColumn&&(this.count=this.endColumn-this.startColumn+1)}}},20788:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(95913),o(12587);var n=s(o(85707));t.PartiallyVisibleRowsCalculationType=class{constructor(){(0,n.default)(this,"count",0),(0,n.default)(this,"startRow",null),(0,n.default)(this,"endRow",null),(0,n.default)(this,"startPosition",null),(0,n.default)(this,"isVisibleInTrimmingContainer",!1)}initialize(){}process(e,t){const{totalCalculatedHeight:o,zeroBasedScrollOffset:s,innerViewportHeight:n}=t;o<=s&&(this.startRow=e),o>=s&&o<=n&&null===this.startRow&&(this.startRow=e),this.endRow=e}finalize(e){var t;const{scrollOffset:o,viewportHeight:s,horizontalScrollbarHeight:n,totalRows:i,needReverse:r,startPositions:l,rowHeight:a}=e;if(this.endRow===i-1&&r)for(this.startRow=this.endRow;this.startRow>0;){const e=l[this.endRow]+a-l[this.startRow-1];if(this.startRow-=1,e>=s-n)break}this.startPosition=null!==(t=l[this.startRow])&&void 0!==t?t:null;o+s-n<0||o>l.at(-1)+a?this.isVisibleInTrimmingContainer=!1:this.isVisibleInTrimmingContainer=!0,i<this.endRow&&(this.endRow=i-1),null!==this.startRow&&(this.count=this.endRow-this.startRow+1)}}},6782:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.RenderedAllColumnsCalculationType=class{constructor(){(0,n.default)(this,"count",0),(0,n.default)(this,"startColumn",0),(0,n.default)(this,"endColumn",0),(0,n.default)(this,"startPosition",0),(0,n.default)(this,"isVisibleInTrimmingContainer",!0)}initialize(e){let{totalColumns:t}=e;this.count=t,this.endColumn=this.count-1}process(){}finalize(){}}},78128:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.RenderedAllRowsCalculationType=class{constructor(){(0,n.default)(this,"count",0),(0,n.default)(this,"startRow",0),(0,n.default)(this,"endRow",0),(0,n.default)(this,"startPosition",0),(0,n.default)(this,"isVisibleInTrimmingContainer",!0)}initialize(e){let{totalRows:t}=e;this.count=t,this.endRow=this.count-1}process(){}finalize(){}}},98081:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(77970);class n extends s.PartiallyVisibleColumnsCalculationType{finalize(e){var t;super.finalize(e);const{overrideFn:o,totalColumns:s,startPositions:n}=e;null!==this.startColumn&&"function"==typeof o&&o(this),this.startColumn<0&&(this.startColumn=0),this.startPosition=null!==(t=n[this.startColumn])&&void 0!==t?t:null,s<this.endColumn&&(this.endColumn=s-1),null!==this.startColumn&&(this.count=this.endColumn-this.startColumn+1)}}t.RenderedColumnsCalculationType=n},51681:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(20788);class n extends s.PartiallyVisibleRowsCalculationType{finalize(e){var t;super.finalize(e);const{overrideFn:o,totalRows:s,startPositions:n}=e;null!==this.startRow&&"function"==typeof o&&o(this),this.startRow<0&&(this.startRow=0),this.startPosition=null!==(t=n[this.startRow])&&void 0!==t?t:null,s<this.endRow&&(this.endRow=s-1),null!==this.startRow&&(this.count=this.endRow-this.startRow+1)}}t.RenderedRowsCalculationType=n},26679:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(45060);t.FullyVisibleColumnsCalculationType=s.FullyVisibleColumnsCalculationType;var n=o(41322);t.FullyVisibleRowsCalculationType=n.FullyVisibleRowsCalculationType;var i=o(77970);t.PartiallyVisibleColumnsCalculationType=i.PartiallyVisibleColumnsCalculationType;var r=o(20788);t.PartiallyVisibleRowsCalculationType=r.PartiallyVisibleRowsCalculationType;var l=o(6782);t.RenderedAllColumnsCalculationType=l.RenderedAllColumnsCalculationType;var a=o(78128);t.RenderedAllRowsCalculationType=a.RenderedAllRowsCalculationType;var h=o(98081);t.RenderedColumnsCalculationType=h.RenderedColumnsCalculationType;var c=o(51681);t.RenderedRowsCalculationType=c.RenderedRowsCalculationType;var u=o(54886);t.ViewportColumnsCalculator=u.ViewportColumnsCalculator,t.DEFAULT_COLUMN_WIDTH=u.DEFAULT_WIDTH;var d=o(46616);t.ViewportRowsCalculator=d.ViewportRowsCalculator,t.DEFAULT_ROW_HEIGHT=d.DEFAULT_HEIGHT},81568:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.ViewportBaseCalculator=class{constructor(e){(0,n.default)(this,"calculationTypes",[]),(0,n.default)(this,"calculationResults",new Map),this.calculationTypes=e}_initialize(e){this.calculationTypes.forEach((t=>{let[o,s]=t;this.calculationResults.set(o,s),s.initialize(e)}))}_process(e,t){this.calculationTypes.forEach((o=>{let[,s]=o;return s.process(e,t)}))}_finalize(e){this.calculationTypes.forEach((t=>{let[,o]=t;return o.finalize(e)}))}getResultsFor(e){return this.calculationResults.get(e)}}},54886:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(81568);const r=t.DEFAULT_WIDTH=50;class l extends i.ViewportBaseCalculator{constructor(e){let{calculationTypes:t,viewportWidth:o,scrollOffset:s,totalColumns:i,columnWidthFn:r,overrideFn:l,inlineStartOffset:a}=e;super(t),(0,n.default)(this,"viewportWidth",0),(0,n.default)(this,"scrollOffset",0),(0,n.default)(this,"zeroBasedScrollOffset",0),(0,n.default)(this,"totalColumns",0),(0,n.default)(this,"columnWidthFn",null),(0,n.default)(this,"columnWidth",0),(0,n.default)(this,"overrideFn",null),(0,n.default)(this,"inlineStartOffset",0),(0,n.default)(this,"totalCalculatedWidth",0),(0,n.default)(this,"startPositions",[]),(0,n.default)(this,"needReverse",!0),this.viewportWidth=o,this.scrollOffset=s,this.zeroBasedScrollOffset=Math.max(s,0),this.totalColumns=i,this.columnWidthFn=r,this.overrideFn=l,this.inlineStartOffset=a,this.calculate()}calculate(){this._initialize(this);for(let e=0;e<this.totalColumns;e++)if(this.columnWidth=this.getColumnWidth(e),this._process(e,this),this.startPositions.push(this.totalCalculatedWidth),this.totalCalculatedWidth+=this.columnWidth,this.totalCalculatedWidth>=this.zeroBasedScrollOffset+this.viewportWidth){this.needReverse=!1;break}this._finalize(this)}getColumnWidth(e){const t=this.columnWidthFn(e);return isNaN(t)?r:t}}t.ViewportColumnsCalculator=l},46616:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(81568);const r=t.DEFAULT_HEIGHT=23;class l extends i.ViewportBaseCalculator{constructor(e){let{calculationTypes:t,viewportHeight:o,scrollOffset:s,totalRows:i,rowHeightFn:r,overrideFn:l,horizontalScrollbarHeight:a}=e;super(t),(0,n.default)(this,"viewportHeight",0),(0,n.default)(this,"scrollOffset",0),(0,n.default)(this,"zeroBasedScrollOffset",0),(0,n.default)(this,"totalRows",0),(0,n.default)(this,"rowHeightFn",null),(0,n.default)(this,"rowHeight",0),(0,n.default)(this,"overrideFn",null),(0,n.default)(this,"horizontalScrollbarHeight",0),(0,n.default)(this,"innerViewportHeight",0),(0,n.default)(this,"totalCalculatedHeight",0),(0,n.default)(this,"startPositions",[]),(0,n.default)(this,"needReverse",!0),this.viewportHeight=o,this.scrollOffset=s,this.zeroBasedScrollOffset=Math.max(s,0),this.totalRows=i,this.rowHeightFn=r,this.overrideFn=l,this.horizontalScrollbarHeight=null!=a?a:0,this.innerViewportHeight=this.zeroBasedScrollOffset+this.viewportHeight-this.horizontalScrollbarHeight,this.calculate()}calculate(){this._initialize(this);for(let e=0;e<this.totalRows;e++)if(this.rowHeight=this.getRowHeight(e),this._process(e,this),this.startPositions.push(this.totalCalculatedHeight),this.totalCalculatedHeight+=this.rowHeight,this.totalCalculatedHeight>=this.innerViewportHeight){this.needReverse=!1;break}this._finalize(this)}getRowHeight(e){const t=this.rowHeightFn(e);return isNaN(t)?r:t}}t.ViewportRowsCalculator=l},28537:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707));function i(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function r(e,t){return e.get(a(e,t))}function l(e,t,o){return e.set(a(e,t),o),o}function a(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var h=new WeakMap;class c{constructor(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,n.default)(this,"row",null),(0,n.default)(this,"col",null),i(this,h,!1),l(h,this,o),void 0!==e&&void 0!==t&&(this.row=e,this.col=t)}isValid(e){const{countRows:t,countCols:o,countRowHeaders:s,countColHeaders:n}={countRows:0,countCols:0,countRowHeaders:0,countColHeaders:0,...e};return!(!Number.isInteger(this.row)||!Number.isInteger(this.col))&&(!(this.row<-n||this.col<-s)&&!(this.row>=t||this.col>=o))}isEqual(e){return e===this||this.row===e.row&&this.col===e.col}isHeader(){return!this.isCell()}isCell(){return this.row>=0&&this.col>=0}isRtl(){return r(h,this)}isSouthEastOf(e){return this.row>=e.row&&(r(h,this)?this.col<=e.col:this.col>=e.col)}isNorthWestOf(e){return this.row<=e.row&&(r(h,this)?this.col>=e.col:this.col<=e.col)}isSouthWestOf(e){return this.row>=e.row&&(r(h,this)?this.col>=e.col:this.col<=e.col)}isNorthEastOf(e){return this.row<=e.row&&(r(h,this)?this.col<=e.col:this.col>=e.col)}normalize(){return this.row=null===this.row?this.row:Math.max(this.row,0),this.col=null===this.col?this.col:Math.max(this.col,0),this}assign(e){return Number.isInteger(null==e?void 0:e.row)&&(this.row=e.row),Number.isInteger(null==e?void 0:e.col)&&(this.col=e.col),e instanceof c&&l(h,this,e.isRtl()),this}clone(){return new c(this.row,this.col,r(h,this))}toObject(){return{row:this.row,col:this.col}}}t.default=c},30422:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=s(o(28537));function r(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function l(e,t){return e.get(a(e,t))}function a(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var h=new WeakMap;class c{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];var i,l,c;(0,n.default)(this,"highlight",null),(0,n.default)(this,"from",null),(0,n.default)(this,"to",null),r(this,h,!1),this.highlight=e.clone(),this.from=t.clone(),this.to=o.clone(),l=this,c=s,(i=h).set(a(i,l),c)}setHighlight(e){return this.highlight=e.clone(),this}setFrom(e){return this.from=e.clone(),this}setTo(e){return this.to=e.clone(),this}isValid(e){return this.from.isValid(e)&&this.to.isValid(e)}isSingle(){return this.isSingleCell()||this.isSingleHeader()}isSingleCell(){return this.from.row>=0&&this.from.row===this.to.row&&this.from.col>=0&&this.from.col===this.to.col}isSingleHeader(){return(this.from.row<0||this.from.col<0)&&this.from.row===this.to.row&&this.from.col===this.to.col}isHeader(){return!(!this.from.isHeader()||!this.to.isHeader())||(this.from.col<0&&this.to.col<0||this.from.row<0&&this.to.row<0)}containsHeaders(){return this.from.isHeader()||this.to.isHeader()}getOuterHeight(){return Math.max(this.from.row,this.to.row)-Math.min(this.from.row,this.to.row)+1}getOuterWidth(){return Math.max(this.from.col,this.to.col)-Math.min(this.from.col,this.to.col)+1}getHeight(){if(this.from.row<0&&this.to.row<0)return 0;const e=Math.max(this.from.row,0),t=Math.max(this.to.row,0);return Math.max(e,t)-Math.min(e,t)+1}getWidth(){if(this.from.col<0&&this.to.col<0)return 0;const e=Math.max(this.from.col,0),t=Math.max(this.to.col,0);return Math.max(e,t)-Math.min(e,t)+1}getCellsCount(){return this.getWidth()*this.getHeight()}includes(e){const{row:t,col:o}=e,s=this.getOuterTopStartCorner(),n=this.getOuterBottomEndCorner();return s.row<=t&&n.row>=t&&s.col<=o&&n.col>=o}includesRange(e){return this.includes(e.getOuterTopStartCorner())&&this.includes(e.getOuterBottomEndCorner())}isEqual(e){return Math.min(this.from.row,this.to.row)===Math.min(e.from.row,e.to.row)&&Math.max(this.from.row,this.to.row)===Math.max(e.from.row,e.to.row)&&Math.min(this.from.col,this.to.col)===Math.min(e.from.col,e.to.col)&&Math.max(this.from.col,this.to.col)===Math.max(e.from.col,e.to.col)}overlaps(e){return e.isSouthEastOf(this.getOuterTopLeftCorner())&&e.isNorthWestOf(this.getOuterBottomRightCorner())}isSouthEastOf(e){return this.getOuterTopLeftCorner().isSouthEastOf(e)||this.getOuterBottomRightCorner().isSouthEastOf(e)}isNorthWestOf(e){return this.getOuterTopLeftCorner().isNorthWestOf(e)||this.getOuterBottomRightCorner().isNorthWestOf(e)}isOverlappingHorizontally(e){return this.getOuterTopEndCorner().col>=e.getOuterTopStartCorner().col&&this.getOuterTopEndCorner().col<=e.getOuterTopEndCorner().col||this.getOuterTopStartCorner().col<=e.getOuterTopEndCorner().col&&this.getOuterTopStartCorner().col>=e.getOuterTopStartCorner().col}isOverlappingVertically(e){return this.getOuterBottomStartCorner().row>=e.getOuterTopRightCorner().row&&this.getOuterBottomStartCorner().row<=e.getOuterBottomStartCorner().row||this.getOuterTopEndCorner().row<=e.getOuterBottomStartCorner().row&&this.getOuterTopEndCorner().row>=e.getOuterTopRightCorner().row}expand(e){const t=this.getOuterTopStartCorner(),o=this.getOuterBottomEndCorner();return(e.row<t.row||e.col<t.col||e.row>o.row||e.col>o.col)&&(this.from=this._createCellCoords(Math.min(t.row,e.row),Math.min(t.col,e.col)),this.to=this._createCellCoords(Math.max(o.row,e.row),Math.max(o.col,e.col)),!0)}expandByRange(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(this.includesRange(e)||!this.overlaps(e))return!1;const o=this.getOuterTopStartCorner(),s=this.getOuterBottomEndCorner(),n=this.getDirection(),i=e.getOuterTopStartCorner(),r=e.getOuterBottomEndCorner(),l=Math.min(o.row,i.row),a=Math.min(o.col,i.col),h=Math.max(s.row,r.row),c=Math.max(s.col,r.col),u=this._createCellCoords(l,a),d=this._createCellCoords(h,c);return this.from=u,this.to=d,this.setDirection(n),t&&(this.highlight.row===this.getOuterBottomRightCorner().row&&"N-S"===this.getVerticalDirection()&&this.flipDirectionVertically(),this.highlight.col===this.getOuterTopRightCorner().col&&"W-E"===this.getHorizontalDirection()&&this.flipDirectionHorizontally()),!0}getDirection(){return this.from.isNorthWestOf(this.to)?"NW-SE":this.from.isNorthEastOf(this.to)?"NE-SW":this.from.isSouthEastOf(this.to)?"SE-NW":this.from.isSouthWestOf(this.to)?"SW-NE":void 0}setDirection(e){switch(e){case"NW-SE":[this.from,this.to]=[this.getOuterTopLeftCorner(),this.getOuterBottomRightCorner()];break;case"NE-SW":[this.from,this.to]=[this.getOuterTopRightCorner(),this.getOuterBottomLeftCorner()];break;case"SE-NW":[this.from,this.to]=[this.getOuterBottomRightCorner(),this.getOuterTopLeftCorner()];break;case"SW-NE":[this.from,this.to]=[this.getOuterBottomLeftCorner(),this.getOuterTopRightCorner()]}}getVerticalDirection(){return["NE-SW","NW-SE"].indexOf(this.getDirection())>-1?"N-S":"S-N"}getHorizontalDirection(){return["NW-SE","SW-NE"].indexOf(this.getDirection())>-1?"W-E":"E-W"}flipDirectionVertically(){switch(this.getDirection()){case"NW-SE":this.setDirection("SW-NE");break;case"NE-SW":this.setDirection("SE-NW");break;case"SE-NW":this.setDirection("NE-SW");break;case"SW-NE":this.setDirection("NW-SE")}}flipDirectionHorizontally(){switch(this.getDirection()){case"NW-SE":this.setDirection("NE-SW");break;case"NE-SW":this.setDirection("NW-SE");break;case"SE-NW":this.setDirection("SW-NE");break;case"SW-NE":this.setDirection("SE-NW")}}getTopStartCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.min(this.from.col,this.to.col)).normalize()}getTopLeftCorner(){return l(h,this)?this.getTopEndCorner():this.getTopStartCorner()}getBottomEndCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.max(this.from.col,this.to.col)).normalize()}getBottomRightCorner(){return l(h,this)?this.getBottomStartCorner():this.getBottomEndCorner()}getTopEndCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.max(this.from.col,this.to.col)).normalize()}getTopRightCorner(){return l(h,this)?this.getTopStartCorner():this.getTopEndCorner()}getBottomStartCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.min(this.from.col,this.to.col)).normalize()}getBottomLeftCorner(){return l(h,this)?this.getBottomEndCorner():this.getBottomStartCorner()}getOuterTopStartCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}getOuterTopLeftCorner(){return l(h,this)?this.getOuterTopEndCorner():this.getOuterTopStartCorner()}getOuterBottomEndCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}getOuterBottomRightCorner(){return l(h,this)?this.getOuterBottomStartCorner():this.getOuterBottomEndCorner()}getOuterTopEndCorner(){return this._createCellCoords(Math.min(this.from.row,this.to.row),Math.max(this.from.col,this.to.col))}getOuterTopRightCorner(){return l(h,this)?this.getOuterTopStartCorner():this.getOuterTopEndCorner()}getOuterBottomStartCorner(){return this._createCellCoords(Math.max(this.from.row,this.to.row),Math.min(this.from.col,this.to.col))}getOuterBottomLeftCorner(){return l(h,this)?this.getOuterBottomEndCorner():this.getOuterBottomStartCorner()}isCorner(e){return e.isEqual(this.getOuterTopLeftCorner())||e.isEqual(this.getOuterTopRightCorner())||e.isEqual(this.getOuterBottomLeftCorner())||e.isEqual(this.getOuterBottomRightCorner())}getOppositeCorner(e){return e instanceof i.default&&(e.isEqual(this.getOuterBottomEndCorner())?this.getOuterTopStartCorner():e.isEqual(this.getOuterTopStartCorner())?this.getOuterBottomEndCorner():e.isEqual(this.getOuterTopEndCorner())?this.getOuterBottomStartCorner():e.isEqual(this.getOuterBottomStartCorner())?this.getOuterTopEndCorner():void 0)}getBordersSharedWith(e){if(!this.includesRange(e))return[];const t=Math.min(this.from.row,this.to.row),o=Math.max(this.from.row,this.to.row),s=Math.min(this.from.col,this.to.col),n=Math.max(this.from.col,this.to.col),i=Math.min(e.from.row,e.to.row),r=Math.max(e.from.row,e.to.row),a=Math.min(e.from.col,e.to.col),c=Math.max(e.from.col,e.to.col),u=[];return t===i&&u.push("top"),n===c&&u.push(l(h,this)?"left":"right"),o===r&&u.push("bottom"),s===a&&u.push(l(h,this)?"right":"left"),u}getInner(){const e=this.getOuterTopStartCorner(),t=this.getOuterBottomEndCorner(),o=[];for(let s=e.row;s<=t.row;s++)for(let n=e.col;n<=t.col;n++)this.from.row===s&&this.from.col===n||this.to.row===s&&this.to.col===n||o.push(this._createCellCoords(s,n));return o}getAll(){const e=this.getOuterTopStartCorner(),t=this.getOuterBottomEndCorner(),o=[];for(let s=e.row;s<=t.row;s++)for(let n=e.col;n<=t.col;n++)e.row===s&&e.col===n?o.push(e):t.row===s&&t.col===n?o.push(t):o.push(this._createCellCoords(s,n));return o}forAll(e){const t=this.getOuterTopStartCorner(),o=this.getOuterBottomEndCorner();for(let s=t.row;s<=o.row;s++)for(let n=t.col;n<=o.col;n++){if(!1===e(s,n))return}}clone(){return new c(this.highlight,this.from,this.to,l(h,this))}toObject(){return{from:this.from.toObject(),to:this.to.toObject()}}_createCellCoords(e,t){return new i.default(e,t,l(h,this))}}t.default=c},25192:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(9893),r=o(59777),l=s(o(82629)),a=s(o(61677)),h=s(o(28537)),c=s(o(30422));t.default=class{get eventManager(){return new l.default(this)}constructor(e,t){(0,n.default)(this,"wtTable",void 0),(0,n.default)(this,"wtScroll",void 0),(0,n.default)(this,"wtViewport",void 0),(0,n.default)(this,"wtOverlays",void 0),(0,n.default)(this,"selectionManager",void 0),(0,n.default)(this,"wtEvent",void 0),(0,n.default)(this,"guid",`wt_${(0,r.randomString)()}`),(0,n.default)(this,"drawInterrupted",!1),(0,n.default)(this,"drawn",!1),(0,n.default)(this,"domBindings",void 0),(0,n.default)(this,"wtSettings",void 0),this.domBindings={rootTable:e,rootDocument:e.ownerDocument,rootWindow:e.ownerDocument.defaultView},this.wtSettings=t,this.wtScroll=new a.default(this.createScrollDao())}findOriginalHeaders(){const e=[];if(this.wtTable.THEAD.childNodes.length&&this.wtTable.THEAD.childNodes[0].childNodes.length){for(let t=0,o=this.wtTable.THEAD.childNodes[0].childNodes.length;t<o;t++)e.push(this.wtTable.THEAD.childNodes[0].childNodes[t].innerHTML);this.wtSettings.getSetting("columnHeaders").length||this.wtSettings.update("columnHeaders",[function(t,o){(0,i.fastInnerText)(o,e[t])}])}}createCellCoords(e,t){return new h.default(e,t,this.wtSettings.getSetting("rtlMode"))}createCellRange(e,t,o){return new c.default(e,t,o,this.wtSettings.getSetting("rtlMode"))}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.drawInterrupted=!1,this.wtTable.isVisible()?this.wtTable.draw(e):this.drawInterrupted=!0,this}getCell(e){if(!(arguments.length>1&&void 0!==arguments[1]&&arguments[1]))return this.wtTable.getCell(e);const t=this.wtSettings.getSetting("totalRows"),o=this.wtSettings.getSetting("fixedRowsTop"),s=this.wtSettings.getSetting("fixedRowsBottom"),n=this.wtSettings.getSetting("fixedColumnsStart");if(e.row<o&&e.col<n)return this.wtOverlays.topInlineStartCornerOverlay.clone.wtTable.getCell(e);if(e.row<o)return this.wtOverlays.topOverlay.clone.wtTable.getCell(e);if(e.col<n&&e.row>=t-s){if(this.wtOverlays.bottomInlineStartCornerOverlay&&this.wtOverlays.bottomInlineStartCornerOverlay.clone)return this.wtOverlays.bottomInlineStartCornerOverlay.clone.wtTable.getCell(e)}else{if(e.col<n)return this.wtOverlays.inlineStartOverlay.clone.wtTable.getCell(e);if(e.row<t&&e.row>=t-s&&this.wtOverlays.bottomOverlay&&this.wtOverlays.bottomOverlay.clone)return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(e)}return this.wtTable.getCell(e)}scrollViewport(e,t,o,s,n){return!(e.col<0||e.row<0)&&this.wtScroll.scrollViewport(e,t,o,s,n)}scrollViewportHorizontally(e,t,o){return!(e<0)&&this.wtScroll.scrollViewportHorizontally(e,t,o)}scrollViewportVertically(e,t,o){return!(e<0)&&this.wtScroll.scrollViewportVertically(e,t,o)}getViewport(){return[this.wtTable.getFirstVisibleRow(),this.wtTable.getFirstVisibleColumn(),this.wtTable.getLastVisibleRow(),this.wtTable.getLastVisibleColumn()]}destroy(){this.wtOverlays.destroy(),this.wtEvent.destroy()}createScrollDao(){const e=this;return{get drawn(){return e.drawn},get topOverlay(){return e.wtOverlays.topOverlay},get inlineStartOverlay(){return e.wtOverlays.inlineStartOverlay},get wtTable(){return e.wtTable},get wtViewport(){return e.wtViewport},get wtSettings(){return e.wtSettings},get rootWindow(){return e.domBindings.rootWindow},get totalRows(){return e.wtSettings.getSetting("totalRows")},get totalColumns(){return e.wtSettings.getSetting("totalColumns")},get fixedRowsTop(){return e.wtSettings.getSetting("fixedRowsTop")},get fixedRowsBottom(){return e.wtSettings.getSetting("fixedRowsBottom")},get fixedColumnsStart(){return e.wtSettings.getSetting("fixedColumnsStart")}}}getTableDao(){const e=this;return{get wot(){return e},get parentTableOffset(){return e.cloneSource.wtTable.tableOffset},get cloneSource(){return e.cloneSource},get workspaceWidth(){return e.wtViewport.getWorkspaceWidth()},get wtViewport(){return e.wtViewport},get wtOverlays(){return e.wtOverlays},get selectionManager(){return e.selectionManager},get drawn(){return e.drawn},set drawn(t){e.drawn=t},get wtTable(){return e.wtTable},get startColumnRendered(){return e.wtViewport.columnsRenderCalculator.startColumn},get startColumnVisible(){return e.wtViewport.columnsVisibleCalculator.startColumn},get startColumnPartiallyVisible(){return e.wtViewport.columnsPartiallyVisibleCalculator.startColumn},get endColumnRendered(){return e.wtViewport.columnsRenderCalculator.endColumn},get endColumnVisible(){return e.wtViewport.columnsVisibleCalculator.endColumn},get endColumnPartiallyVisible(){return e.wtViewport.columnsPartiallyVisibleCalculator.endColumn},get countColumnsRendered(){return e.wtViewport.columnsRenderCalculator.count},get countColumnsVisible(){return e.wtViewport.columnsVisibleCalculator.count},get startRowRendered(){return e.wtViewport.rowsRenderCalculator.startRow},get startRowVisible(){return e.wtViewport.rowsVisibleCalculator.startRow},get startRowPartiallyVisible(){return e.wtViewport.rowsPartiallyVisibleCalculator.startRow},get endRowRendered(){return e.wtViewport.rowsRenderCalculator.endRow},get endRowVisible(){return e.wtViewport.rowsVisibleCalculator.endRow},get endRowPartiallyVisible(){return e.wtViewport.rowsPartiallyVisibleCalculator.endRow},get countRowsRendered(){return e.wtViewport.rowsRenderCalculator.count},get countRowsVisible(){return e.wtViewport.rowsVisibleCalculator.count},get columnHeaders(){return e.wtSettings.getSetting("columnHeaders")},get rowHeaders(){return e.wtSettings.getSetting("rowHeaders")}}}}},7861:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=s(o(41906)),r=s(o(25192));class l extends r.default{constructor(e,t,o){super(e,t),(0,n.default)(this,"cloneSource",void 0),(0,n.default)(this,"cloneOverlay",void 0);const s=this.wtSettings.getSetting("facade",this);this.cloneSource=o.source,this.cloneOverlay=o.overlay,this.wtTable=this.cloneOverlay.createTable(this.getTableDao(),s,this.domBindings,this.wtSettings),this.wtViewport=o.viewport,this.selectionManager=o.selectionManager,this.wtEvent=new i.default(s,this.domBindings,this.wtSettings,this.eventManager,this.wtTable,this.selectionManager,o.event),this.findOriginalHeaders()}}t.default=l},82881:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(41906)),i=s(o(85737)),r=o(34009),l=s(o(47241)),a=s(o(26235)),h=s(o(85690)),c=s(o(25192)),u=o(42492),d=o(13911),g=o(9893);class f extends c.default{constructor(e,t){super(e,new l.default(t));const o=this.wtSettings.getSetting("facade",this);this.wtTable=new a.default(this.getTableDao(),o,this.domBindings,this.wtSettings),this.wtViewport=new h.default(this.getViewportDao(),this.domBindings,this.wtSettings,this.eventManager,this.wtTable),this.selectionManager=new u.SelectionManager(this.wtSettings.getSetting("selections")),this.wtEvent=new n.default(o,this.domBindings,this.wtSettings,this.eventManager,this.wtTable,this.selectionManager),this.wtOverlays=new i.default(this,o,this.domBindings,this.wtSettings,this.eventManager,this.wtTable),this.exportSettingsAsClassNames(),this.findOriginalHeaders()}exportSettingsAsClassNames(){const e=[],t=[];(0,d.objectEach)({rowHeaders:"htRowHeaders",columnHeaders:"htColumnHeaders"},((o,s)=>{this.wtSettings.getSetting(s).length&&t.push(o),e.push(o)})),(0,g.removeClass)(this.wtTable.wtRootElement.parentNode,e),(0,g.addClass)(this.wtTable.wtRootElement.parentNode,t)}getOverlayByName(e){var t;if(!r.CLONE_TYPES.includes(e))return null;const o=e.replace(/_([a-z])/g,(e=>e[1].toUpperCase()));return null!==(t=this.wtOverlays[`${o}Overlay`])&&void 0!==t?t:null}getViewportDao(){const e=this;return{get wot(){return e},get topOverlayTrimmingContainer(){return e.wtOverlays.topOverlay.trimmingContainer},get inlineStartOverlayTrimmingContainer(){return e.wtOverlays.inlineStartOverlay.trimmingContainer},get topScrollPosition(){return e.wtOverlays.topOverlay.getScrollPosition()},get topParentOffset(){return e.wtOverlays.topOverlay.getTableParentOffset()},get inlineStartScrollPosition(){return e.wtOverlays.inlineStartOverlay.getScrollPosition()},get inlineStartParentOffset(){return e.wtOverlays.inlineStartOverlay.getTableParentOffset()},get topOverlay(){return e.wtOverlays.topOverlay},get inlineStartOverlay(){return e.wtOverlays.inlineStartOverlay},get bottomOverlay(){return e.wtOverlays.bottomOverlay}}}}t.default=f},41906:(e,t,o)=>{"use strict";t.__esModule=!0,o(67834);var s=o(9893),n=o(78832),i=o(93980),r=o(28890),l=o(38893);function a(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function h(e,t){return e.get(u(e,t))}function c(e,t,o){return e.set(u(e,t),o),o}function u(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var d=new WeakMap,g=new WeakMap,f=new WeakMap,p=new WeakMap,m=new WeakMap,w=new WeakMap,C=new WeakMap,v=new WeakMap,y=new WeakMap,E=new WeakMap;t.default=class{constructor(e,t,o,s,n,i){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null;a(this,d,void 0),a(this,g,void 0),a(this,f,void 0),a(this,p,void 0),a(this,m,void 0),a(this,w,void 0),a(this,C,void 0),a(this,v,void 0),a(this,y,[null,null]),a(this,E,[null,null]),c(d,this,o),c(g,this,t),c(f,this,n),c(p,this,i),c(m,this,r),c(w,this,s),c(C,this,e),this.registerEvents()}registerEvents(){h(w,this).addEventListener(h(f,this).holder,"contextmenu",(e=>this.onContextMenu(e))),h(w,this).addEventListener(h(f,this).TABLE,"mouseover",(e=>this.onMouseOver(e))),h(w,this).addEventListener(h(f,this).TABLE,"mouseout",(e=>this.onMouseOut(e)));const e=()=>{h(w,this).addEventListener(h(f,this).holder,"touchstart",(e=>this.onTouchStart(e))),h(w,this).addEventListener(h(f,this).holder,"touchend",(e=>this.onTouchEnd(e))),this.momentumScrolling||(this.momentumScrolling={}),h(w,this).addEventListener(h(f,this).holder,"scroll",(()=>{clearTimeout(this.momentumScrolling._timeout),this.momentumScrolling.ongoing||h(d,this).getSetting("onBeforeTouchScroll"),this.momentumScrolling.ongoing=!0,this.momentumScrolling._timeout=setTimeout((()=>{this.touchApplied||(this.momentumScrolling.ongoing=!1,h(d,this).getSetting("onAfterMomentumScroll"))}),200)}))},t=()=>{h(w,this).addEventListener(h(f,this).holder,"mouseup",(e=>this.onMouseUp(e))),h(w,this).addEventListener(h(f,this).holder,"mousedown",(e=>this.onMouseDown(e)))};(0,r.isMobileBrowser)()?e():((0,i.isTouchSupported)()&&e(),t())}selectedCellWasTouched(e){const t=this.parentCell(e).coords;if(h(v,this)&&t){const[e,o]=[t.row,h(v,this).from.row],[s,n]=[t.col,h(v,this).from.col];return e===o&&s===n}return!1}parentCell(e){const t={},o=h(f,this).TABLE,n=(0,s.closestDown)(e,["TD","TH"],o);return n?(t.coords=h(f,this).getCoords(n),t.TD=n):(0,s.hasClass)(e,"wtBorder")&&(0,s.hasClass)(e,"current")?(t.coords=h(p,this).getFocusSelection().cellRange.highlight,t.TD=h(f,this).getCell(t.coords)):(0,s.hasClass)(e,"wtBorder")&&(0,s.hasClass)(e,"area")&&h(p,this).getAreaSelection().cellRange&&(t.coords=h(p,this).getAreaSelection().cellRange.to,t.TD=h(f,this).getCell(t.coords)),t}onMouseDown(e){const t=h(g,this).rootDocument.activeElement,o=(0,n.partial)(s.getParent,e.target),i=e.target;if(!["TD","TH"].includes(t.nodeName)&&(i===t||o(0)===t||o(1)===t))return;const r=this.parentCell(i);(0,s.hasClass)(i,"corner")?h(d,this).getSetting("onCellCornerMouseDown",e,i):r.TD&&h(d,this).has("onCellMouseDown")&&this.callListener("onCellMouseDown",e,r.coords,r.TD),(0===e.button||this.touchApplied)&&r.TD&&(h(E,this)[0]=r.TD,clearTimeout(h(y,this)[0]),h(y,this)[0]=setTimeout((()=>{h(E,this)[0]=null}),1e3))}onContextMenu(e){if(h(d,this).has("onCellContextMenu")){const t=this.parentCell(e.target);t.TD&&this.callListener("onCellContextMenu",e,t.coords,t.TD)}}onMouseOver(e){if(!h(d,this).has("onCellMouseOver"))return;const t=h(f,this).TABLE,o=(0,s.closestDown)(e.target,["TD","TH"],t),n=h(m,this)||this;o&&o!==n.lastMouseOver&&(0,s.isChildOf)(o,t)&&(n.lastMouseOver=o,this.callListener("onCellMouseOver",e,h(f,this).getCoords(o),o))}onMouseOut(e){if(!h(d,this).has("onCellMouseOut"))return;const t=h(f,this).TABLE,o=(0,s.closestDown)(e.target,["TD","TH"],t),n=(0,s.closestDown)(e.relatedTarget,["TD","TH"],t),i=h(m,this)||this;o&&o!==n&&(0,s.isChildOf)(o,t)&&(this.callListener("onCellMouseOut",e,h(f,this).getCoords(o),o),null===n&&(i.lastMouseOver=null))}onMouseUp(e){const t=this.parentCell(e.target);t.TD&&h(d,this).has("onCellMouseUp")&&this.callListener("onCellMouseUp",e,t.coords,t.TD),(0===e.button||this.touchApplied)&&(t.TD===h(E,this)[0]&&t.TD===h(E,this)[1]?((0,s.hasClass)(e.target,"corner")?this.callListener("onCellCornerDblClick",e,t.coords,t.TD):this.callListener("onCellDblClick",e,t.coords,t.TD),h(E,this)[0]=null,h(E,this)[1]=null):t.TD===h(E,this)[0]&&(h(E,this)[1]=t.TD,clearTimeout(h(y,this)[1]),h(y,this)[1]=setTimeout((()=>{h(E,this)[1]=null}),500)))}onTouchStart(e){c(v,this,h(p,this).getFocusSelection().cellRange),this.touchApplied=!0,this.onMouseDown(e)}onTouchEnd(e){var t;const o=e.target,s=null===(t=this.parentCell(o))||void 0===t?void 0:t.coords,n=(0,l.isDefined)(s)&&s.row>=0&&s.col>=0;if(e.cancelable&&n&&h(d,this).getSetting("isDataViewInstance")){const t=["A","BUTTON","INPUT"];(0,r.isIOS)()&&((0,r.isChromeWebKit)()||(0,r.isFirefoxWebKit)())&&this.selectedCellWasTouched(o)&&!t.includes(o.tagName)?e.preventDefault():this.selectedCellWasTouched(o)||e.preventDefault()}this.onMouseUp(e),this.touchApplied=!1}callListener(e,t,o,s){const n=h(d,this).getSettingPure(e);n&&n(t,o,s,h(C,this).call(this))}destroy(){clearTimeout(h(y,this)[0]),clearTimeout(h(y,this)[1]),h(w,this).destroy()}}},56718:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(82881)),i=s(o(25192));class r{constructor(e){e instanceof i.default?this._wot=e:this._initFromSettings(e)}_initFromSettings(e){e.facade=e=>{const t=new r(e);return()=>t},this._wot=new n.default(e.table,e)}get guid(){return this._wot.guid}get rootDocument(){return this._wot.domBindings.rootDocument}get rootWindow(){return this._wot.domBindings.rootWindow}get wtSettings(){return this._wot.wtSettings}get cloneSource(){return this._wot.cloneSource}get cloneOverlay(){return this._wot.cloneOverlay}get selectionManager(){return this._wot.selectionManager}get wtViewport(){return this._wot.wtViewport}get wtOverlays(){return this._wot.wtOverlays}get wtTable(){return this._wot.wtTable}get wtEvent(){return this._wot.wtEvent}get wtScroll(){return this._wot.wtScroll}get drawn(){return this._wot.drawn}set drawn(e){this._wot.drawn=e}get drawInterrupted(){return this._wot.drawInterrupted}set drawInterrupted(e){this._wot.drawInterrupted=e}get lastMouseOver(){return this._wot.lastMouseOver}set lastMouseOver(e){this._wot.lastMouseOver=e}get momentumScrolling(){return this._wot.momentumScrolling}set momentumScrolling(e){this._wot.momentumScrolling=e}get touchApplied(){return this._wot.touchApplied}set touchApplied(e){this._wot.touchApplied=e}get domBindings(){return this._wot.domBindings}get eventListeners(){return this._wot.eventListeners}set eventListeners(e){this._wot.eventListeners=e}get eventManager(){return this._wot.eventManager}createCellCoords(e,t){return this._wot.createCellCoords(e,t)}createCellRange(e,t,o){return this._wot.createCellRange(e,t,o)}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._wot.draw(e),this}getCell(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this._wot.getCell(e,t)}scrollViewport(e,t,o,s,n){return this._wot.scrollViewport(e,t,o,s,n)}scrollViewportHorizontally(e,t,o){return this._wot.scrollViewportHorizontally(e,t,o)}scrollViewportVertically(e,t,o){return this._wot.scrollViewportVertically(e,t,o)}getViewport(){return this._wot.getViewport()}getOverlayName(){return this._wot.cloneOverlay?this._wot.cloneOverlay.type:"master"}getOverlayByName(e){return this._wot.getOverlayByName(e)}exportSettingsAsClassNames(){return this._wot.exportSettingsAsClassNames()}update(e,t){return this._wot.wtSettings.update(e,t),this}getSetting(e,t,o,s,n){return this._wot.wtSettings.getSetting(e,t,o,s,n)}hasSetting(e){return this._wot.wtSettings.hasSetting(e)}destroy(){this._wot.destroy()}}t.default=r},16979:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e,t,o){(0,n.default)(this,"offset",void 0),(0,n.default)(this,"total",void 0),(0,n.default)(this,"countTH",void 0),this.offset=e,this.total=t,this.countTH=o}offsetted(e){return e+this.offset}unOffsetted(e){return e-this.offset}renderedToSource(e){return this.offsetted(e)}sourceToRendered(e){return this.unOffsetted(e)}offsettedTH(e){return e-this.countTH}unOffsettedTH(e){return e+this.countTH}visibleRowHeadedColumnToSourceColumn(e){return this.renderedToSource(this.offsettedTH(e))}sourceColumnToVisibleRowHeadedColumn(e){return this.unOffsettedTH(this.sourceToRendered(e))}}},39277:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e,t,o){(0,n.default)(this,"offset",void 0),(0,n.default)(this,"total",void 0),(0,n.default)(this,"countTH",void 0),this.offset=e,this.total=t,this.countTH=o}offsetted(e){return e+this.offset}unOffsetted(e){return e-this.offset}renderedToSource(e){return this.offsetted(e)}sourceToRendered(e){return this.unOffsetted(e)}offsettedTH(e){return e-this.countTH}unOffsettedTH(e){return e+this.countTH}visibleColHeadedRowToSourceRow(e){return this.renderedToSource(this.offsettedTH(e))}sourceRowToVisibleColHeadedRow(e){return this.unOffsettedTH(this.sourceToRendered(e))}}},90:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(26679);t.ViewportColumnsCalculator=n.ViewportColumnsCalculator,t.ViewportRowsCalculator=n.ViewportRowsCalculator,t.DEFAULT_ROW_HEIGHT=n.DEFAULT_ROW_HEIGHT,t.DEFAULT_COLUMN_WIDTH=n.DEFAULT_COLUMN_WIDTH;var i=s(o(28537));t.CellCoords=i.default;var r=s(o(30422));t.CellRange=r.default;var l=s(o(56718));t.default=l.default,t.Core=l.default;var a=o(98779);t.Selection=a.Selection,t.HIGHLIGHT_ACTIVE_HEADER_TYPE=a.ACTIVE_HEADER_TYPE,t.HIGHLIGHT_AREA_TYPE=a.AREA_TYPE,t.HIGHLIGHT_FOCUS_TYPE=a.FOCUS_TYPE,t.HIGHLIGHT_FILL_TYPE=a.FILL_TYPE,t.HIGHLIGHT_HEADER_TYPE=a.HEADER_TYPE,t.HIGHLIGHT_ROW_TYPE=a.ROW_TYPE,t.HIGHLIGHT_COLUMN_TYPE=a.COLUMN_TYPE,t.HIGHLIGHT_CUSTOM_SELECTION_TYPE=a.CUSTOM_SELECTION_TYPE;var h=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=d(t);if(o&&o.has(e))return o.get(e);var s={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var r=n?Object.getOwnPropertyDescriptor(e,i):null;r&&(r.get||r.set)?Object.defineProperty(s,i,r):s[i]=e[i]}return s.default=e,o&&o.set(e,s),s}(o(20524));t.Renderer=h;var c=o(21682);t.OrderView=c.OrderView,t.SharedOrderView=c.SharedOrderView;var u=o(82629);function d(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(d=function(e){return e?o:t})(e)}t.getListenersCounter=u.getListenersCounter},85821:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(9893),r=o(13911),l=o(83119),a=o(90368),h=s(o(7861)),c=o(92692);t.Overlay=class{constructor(e,t,o,s,l){(0,n.default)(this,"wtSettings",null),(0,r.defineGetter)(this,"wot",e,{writable:!1}),this.domBindings=l,this.facadeGetter=t,this.wtSettings=s;const{TABLE:a,hider:h,spreader:c,holder:u,wtRootElement:d}=this.wot.wtTable;this.instance=this.wot,this.type=o,this.mainTableScrollableElement=null,this.TABLE=a,this.hider=h,this.spreader=c,this.holder=u,this.wtRootElement=d,this.trimmingContainer=(0,i.getTrimmingContainer)(this.hider.parentNode.parentNode),this.needFullRender=this.shouldBeRendered(),this.clone=this.makeClone()}hasRenderingStateChanged(){return this.needFullRender!==this.shouldBeRendered()}updateStateOfRendering(e){"before"===e&&this.shouldBeRendered()?this.needFullRender=!0:"after"!==e||this.shouldBeRendered()||(this.needFullRender=!1)}shouldBeRendered(){return!0}updateTrimmingContainer(){this.trimmingContainer=(0,i.getTrimmingContainer)(this.hider.parentNode.parentNode)}updateMainScrollableElement(){const{wtTable:e}=this.wot,{rootWindow:t}=this.domBindings;"hidden"===t.getComputedStyle(e.wtRootElement.parentNode).getPropertyValue("overflow")?this.mainTableScrollableElement=this.wot.wtTable.holder:this.mainTableScrollableElement=(0,i.getScrollableElement)(e.TABLE)}getRelativeCellPosition(e,t,o){if(!1===this.clone.wtTable.holder.contains(e))return void(0,l.warn)(`The provided element is not a child of the ${this.type} overlay`);const s=this.mainTableScrollableElement===this.domBindings.rootWindow,n=o<this.wtSettings.getSetting("fixedColumnsStart"),i=t<this.wtSettings.getSetting("fixedRowsTop"),r=t>=this.wtSettings.getSetting("totalRows")-this.wtSettings.getSetting("fixedRowsBottom"),a=this.clone.wtTable.spreader,h={start:this.getRelativeStartPosition(a),top:a.offsetTop},c={start:this.getRelativeStartPosition(e),top:e.offsetTop};let u=null;return u=s?this.getRelativeCellPositionWithinWindow(i,n,c,h):this.getRelativeCellPositionWithinHolder(i,r,n,c,h),u}getRelativeStartPosition(e){return this.isRtl()?e.offsetParent.offsetWidth-e.offsetLeft-e.offsetWidth:e.offsetLeft}getRelativeCellPositionWithinWindow(e,t,o,s){const n=this.wot.wtTable.wtRootElement.getBoundingClientRect();let r=0,l=0;if(t){let e=n.left;this.isRtl()&&(e=this.domBindings.rootWindow.innerWidth-(n.left+n.width+(0,i.getScrollbarWidth)())),r=e<=0?-1*e:0}else r=s.start;if(e){l=this.clone.wtTable.TABLE.getBoundingClientRect().top-n.top}else l=s.top;return{start:o.start+r,top:o.top+l}}getRelativeCellPositionWithinHolder(e,t,o,s,n){const i=this.wot.wtOverlays.inlineStartOverlay.getScrollPosition(),r=this.wot.wtOverlays.topOverlay.getScrollPosition();let l=0,a=0;if(o||(l=i-n.start),t){const e=this.wot.wtTable.wtRootElement.getBoundingClientRect();a=-1*this.clone.wtTable.TABLE.getBoundingClientRect().top+e.top}else e||(a=r-n.top);return{start:s.start-l,top:s.top-a}}makeClone(){if(-1===a.CLONE_TYPES.indexOf(this.type))throw new Error(`Clone type "${this.type}" is not supported.`);const{wtTable:e,wtSettings:t}=this.wot,{rootDocument:o,rootWindow:s}=this.domBindings,n=o.createElement("div"),r=o.createElement("table"),l=e.wtRootElement.parentNode;n.className=`${a.CLONE_CLASS_NAMES.get(this.type)} handsontable`,n.setAttribute("dir",this.isRtl()?"rtl":"ltr"),n.style.position="absolute",n.style.top=0,n.style.overflow="visible",this.isRtl()?n.style.right=0:n.style.left=0,t.getSetting("ariaTags")&&(0,i.setAttribute)(n,[(0,c.A11Y_PRESENTATION)()]),r.className=e.TABLE.className;e.TABLE.getAttribute("role")&&r.setAttribute("role",e.TABLE.getAttribute("role")),n.appendChild(r),l.appendChild(n);const u=this.wtSettings.getSetting("preventOverflow");return!0===u||"horizontal"===u&&this.type===a.CLONE_TOP||"vertical"===u&&this.type===a.CLONE_INLINE_START?this.mainTableScrollableElement=s:"hidden"===s.getComputedStyle(l).getPropertyValue("overflow")?this.mainTableScrollableElement=e.holder:this.mainTableScrollableElement=(0,i.getScrollableElement)(e.TABLE),new h.default(r,this.wtSettings,{source:this.wot,overlay:this,viewport:this.wot.wtViewport,event:this.wot.wtEvent,selectionManager:this.wot.selectionManager})}refresh(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.needFullRender&&this.clone.draw(e)}reset(){const e=this.clone.wtTable.holder,t=this.clone.wtTable.hider;[e.style,t.style,e.parentNode.style].forEach((e=>{e.width="",e.height=""}))}isRtl(){return this.wtSettings.getSetting("rtlMode")}destroy(){this.clone.eventManager.destroy()}}},60810:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(9893),r=s(o(31542)),l=o(85821),a=o(90368);class h extends l.Overlay{constructor(e,t,o,s){super(e,t,a.CLONE_BOTTOM,o,s),(0,n.default)(this,"cachedFixedRowsBottom",-1),this.cachedFixedRowsBottom=this.wtSettings.getSetting("fixedRowsBottom")}createTable(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return new r.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderBottomOverlay")}resetFixedPosition(){if(!this.needFullRender||!this.shouldBeRendered()||!this.wot.wtTable.holder.parentNode)return!1;const{rootWindow:e}=this.domBindings,t=this.clone.wtTable.holder.parentNode;t.style.top="";let o=0;const s=this.wtSettings.getSetting("preventOverflow");this.trimmingContainer!==e||s&&"vertical"===s?(o=this.getScrollPosition(),this.repositionOverlay()):(o=this.getOverlayOffset(),t.style.bottom=`${o}px`);const n=this.adjustHeaderBordersPosition(o);return this.adjustElementsSize(),n}repositionOverlay(){const{wtTable:e,wtViewport:t}=this.wot,{rootDocument:o}=this.domBindings,s=this.clone.wtTable.holder.parentNode;let n=0;t.hasVerticalScroll()||(n+=t.getWorkspaceHeight()-e.getTotalHeight()),t.hasVerticalScroll()&&t.hasHorizontalScroll()&&(n+=(0,i.getScrollbarWidth)(o)),s.style.bottom=`${n}px`}setScrollPosition(e){const{rootWindow:t}=this.domBindings;let o=!1;return this.mainTableScrollableElement===t?(t.scrollTo((0,i.getWindowScrollLeft)(t),e),o=!0):this.mainTableScrollableElement.scrollTop!==e&&(this.mainTableScrollableElement.scrollTop=e,o=!0),o}onScroll(){this.wtSettings.getSetting("onScrollHorizontally")}sumCellSizes(e,t){const{wtTable:o,wtSettings:s}=this.wot,n=s.getSetting("defaultRowHeight");let i=e,r=0;for(;i<t;){const e=o.getRowHeight(i);r+=void 0===e?n:e,i+=1}return r}adjustElementsSize(){this.updateTrimmingContainer(),this.needFullRender&&(this.adjustRootElementSize(),this.adjustRootChildrenSize())}adjustRootElementSize(){const{wtTable:e,wtViewport:t}=this.wot,{rootDocument:o,rootWindow:s}=this.domBindings,n=(0,i.getScrollbarWidth)(o),r=this.clone.wtTable.holder.parentNode.style,l=this.wtSettings.getSetting("preventOverflow");if(this.trimmingContainer!==s||"horizontal"===l){let o=t.getWorkspaceWidth();this.wot.wtOverlays.hasScrollbarRight&&(o-=n),o=Math.min(o,e.wtRootElement.scrollWidth),r.width=`${o}px`}else r.width="";this.clone.wtTable.holder.style.width=r.width;let a=(0,i.outerHeight)(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(a=0),r.height=`${a}px`}adjustRootChildrenSize(){const{holder:e}=this.clone.wtTable;this.clone.wtTable.hider.style.width=this.hider.style.width,e.style.width=e.parentNode.style.width,e.style.height=e.parentNode.style.height}applyToDOM(){const e=this.wtSettings.getSetting("totalRows");if("number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition)this.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;else{if(0!==e)throw new Error("Incorrect value of the rowsRenderCalculator");this.spreader.style.top="0"}this.spreader.style.bottom="",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){const e=this.isRtl()?"right":"left",{spreader:t}=this.clone.wtTable;"number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition?t.style[e]=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`:t.style[e]=""}scrollTo(e,t){let o=this.getTableParentOffset();const s=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder;let n=0;t&&s.offsetHeight!==s.clientHeight&&(n=(0,i.getScrollbarWidth)(this.domBindings.rootDocument)),t?(o+=this.sumCellSizes(0,e+1),o-=this.wot.wtViewport.getViewportHeight(),o+=1):o+=this.sumCellSizes(this.wtSettings.getSetting("fixedRowsBottom"),e),o+=n,this.setScrollPosition(o)}getTableParentOffset(){return this.mainTableScrollableElement===this.domBindings.rootWindow?this.wot.wtTable.holderOffset.top:0}getScrollPosition(){return(0,i.getScrollTop)(this.mainTableScrollableElement,this.domBindings.rootWindow)}getOverlayOffset(){const{rootWindow:e}=this.domBindings,t=this.wtSettings.getSetting("preventOverflow");let o=0;if(this.trimmingContainer===e&&(!t||"vertical"!==t)){const e=this.wot.wtTable.getTotalHeight(),t=e-this.clone.wtTable.getTotalHeight(),s=this.domBindings.rootDocument.documentElement.clientHeight;o=Math.max(this.getTableParentOffset()-this.getScrollPosition()-s+e,0),o>t&&(o=0)}return o}adjustHeaderBordersPosition(e){const t=this.wtSettings.getSetting("fixedRowsBottom"),o=this.cachedFixedRowsBottom!==t,s=this.wtSettings.getSetting("columnHeaders");let n=!1;if((o||0===t)&&s.length>0){const t=this.wot.wtTable.holder.parentNode,o=(0,i.hasClass)(t,"innerBorderBottom");this.cachedFixedRowsBottom=this.wtSettings.getSetting("fixedRowsBottom"),e||0===this.wtSettings.getSetting("totalRows")?((0,i.addClass)(t,"innerBorderBottom"),n=!o):((0,i.removeClass)(t,"innerBorderBottom"),n=o)}return n}}t.BottomOverlay=h},89130:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(9893),i=s(o(93638)),r=o(85821),l=o(90368);class a extends r.Overlay{constructor(e,t,o,s,n,i){super(e,t,l.CLONE_BOTTOM_INLINE_START_CORNER,o,s),this.bottomOverlay=n,this.inlineStartOverlay=i}createTable(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return new i.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderBottomOverlay")&&this.wtSettings.getSetting("shouldRenderInlineStartOverlay")}resetFixedPosition(){const{wot:e}=this;if(this.updateTrimmingContainer(),!e.wtTable.holder.parentNode)return!1;const t=this.clone.wtTable.holder.parentNode;if(t.style.top="",this.trimmingContainer===this.domBindings.rootWindow){const e=this.inlineStartOverlay.getOverlayOffset(),o=this.bottomOverlay.getOverlayOffset();t.style[this.isRtl()?"right":"left"]=`${e}px`,t.style.bottom=`${o}px`}else(0,n.resetCssTransform)(t),this.repositionOverlay();let o=(0,n.outerHeight)(this.clone.wtTable.TABLE);const s=(0,n.outerWidth)(this.clone.wtTable.TABLE);return this.wot.wtTable.hasDefinedSize()||(o=0),t.style.height=`${o}px`,t.style.width=`${s}px`,!1}repositionOverlay(){const{wtTable:e,wtViewport:t}=this.wot,{rootDocument:o}=this.domBindings,s=this.clone.wtTable.holder.parentNode;let i=0;t.hasVerticalScroll()||(i+=t.getWorkspaceHeight()-e.getTotalHeight()),t.hasVerticalScroll()&&t.hasHorizontalScroll()&&(i+=(0,n.getScrollbarWidth)(o)),s.style.bottom=`${i}px`}}t.BottomInlineStartCornerOverlay=a},90368:(e,t)=>{"use strict";t.__esModule=!0;const o=t.CLONE_TOP="top",s=t.CLONE_BOTTOM="bottom",n=t.CLONE_INLINE_START="inline_start",i=t.CLONE_TOP_INLINE_START_CORNER="top_inline_start_corner",r=t.CLONE_BOTTOM_INLINE_START_CORNER="bottom_inline_start_corner";t.CLONE_TYPES=[o,s,n,i,r],t.CLONE_CLASS_NAMES=new Map([[o,`ht_clone_${o}`],[s,`ht_clone_${s}`],[n,`ht_clone_${n} ht_clone_left`],[i,`ht_clone_${i} ht_clone_top_left_corner`],[r,`ht_clone_${r} ht_clone_bottom_left_corner`]])},34009:(e,t,o)=>{"use strict";t.__esModule=!0;var s={BottomInlineStartCornerOverlay:!0,BottomOverlay:!0,InlineStartOverlay:!0,Overlay:!0,TopInlineStartCornerOverlay:!0,TopOverlay:!0},n=o(89130);t.BottomInlineStartCornerOverlay=n.BottomInlineStartCornerOverlay;var i=o(60810);t.BottomOverlay=i.BottomOverlay;var r=o(7110);t.InlineStartOverlay=r.InlineStartOverlay;var l=o(85821);t.Overlay=l.Overlay;var a=o(51718);t.TopInlineStartCornerOverlay=a.TopInlineStartCornerOverlay;var h=o(1686);t.TopOverlay=h.TopOverlay;var c=o(90368);Object.keys(c).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(s,e)||e in t&&t[e]===c[e]||(t[e]=c[e]))}))},7110:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=o(9893),i=s(o(14658)),r=o(85821),l=o(98779),a=o(90368);class h extends r.Overlay{constructor(e,t,o,s){super(e,t,a.CLONE_INLINE_START,o,s)}createTable(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return new i.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderInlineStartOverlay")}resetFixedPosition(){const{wtTable:e}=this.wot;if(!this.needFullRender||!this.shouldBeRendered()||!e.holder.parentNode)return!1;const{rootWindow:t}=this.domBindings,o=this.clone.wtTable.holder.parentNode,s=this.wtSettings.getSetting("preventOverflow");let i=0;this.trimmingContainer!==t||s&&"horizontal"===s?(i=this.getScrollPosition(),(0,n.resetCssTransform)(o)):(i=this.getOverlayOffset()*(this.isRtl()?-1:1),(0,n.setOverlayPosition)(o,`${i}px`,"0px"));const r=this.adjustHeaderBordersPosition(i);return this.adjustElementsSize(),r}setScrollPosition(e){const{rootWindow:t}=this.domBindings;let o=!1;return this.isRtl()&&(e=-e),this.mainTableScrollableElement===t&&t.scrollX!==e?(t.scrollTo(e,(0,n.getWindowScrollTop)(t)),o=!0):this.mainTableScrollableElement.scrollLeft!==e&&(this.mainTableScrollableElement.scrollLeft=e,o=!0),o}onScroll(){this.wtSettings.getSetting("onScrollVertically")}sumCellSizes(e,t){const o=this.wtSettings.getSetting("defaultColumnWidth");let s=e,n=0;for(;s<t;)n+=this.wot.wtTable.getStretchedColumnWidth(s)||o,s+=1;return n}adjustElementsSize(){this.updateTrimmingContainer(),this.needFullRender&&(this.adjustRootElementSize(),this.adjustRootChildrenSize())}adjustRootElementSize(){const{wtTable:e}=this.wot,{rootDocument:t,rootWindow:o}=this.domBindings,s=(0,n.getScrollbarWidth)(t),i=this.clone.wtTable.holder.parentNode.style,r=this.wtSettings.getSetting("preventOverflow");if(this.trimmingContainer!==o||"vertical"===r){let t=this.wot.wtViewport.getWorkspaceHeight();this.wot.wtOverlays.hasScrollbarBottom&&(t-=s),t=Math.min(t,e.wtRootElement.scrollHeight),i.height=`${t}px`}else i.height="";this.clone.wtTable.holder.style.height=i.height;const l=(0,n.outerWidth)(this.clone.wtTable.TABLE);i.width=`${l}px`}adjustRootChildrenSize(){const{holder:e}=this.clone.wtTable,t=this.wot.selectionManager.getFocusSelection()?parseInt(l.CORNER_DEFAULT_STYLE.width,10)/2:0;this.clone.wtTable.hider.style.height=this.hider.style.height,e.style.height=e.parentNode.style.height,e.style.width=`${parseInt(e.parentNode.style.width,10)+t}px`}applyToDOM(){const e=this.wtSettings.getSetting("totalColumns"),t=this.isRtl()?"right":"left";if("number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition)this.spreader.style[t]=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`;else{if(0!==e)throw new Error("Incorrect value of the columnsRenderCalculator");this.spreader.style[t]="0"}this.isRtl()?this.spreader.style.left="":this.spreader.style.right="",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){"number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition?this.clone.wtTable.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`:this.clone.wtTable.spreader.style.top=""}scrollTo(e,t){const{wtSettings:o}=this,s=o.getSetting("rowHeaders"),i=o.getSetting("fixedColumnsStart"),r=(this.wot.cloneSource?this.wot.cloneSource:this.wot).wtTable.holder,l=0===i&&s.length>0&&!(0,n.hasClass)(r.parentNode,"innerBorderInlineStart")?1:0;let a=this.getTableParentOffset(),h=0;if(t){this.wot.wtTable.getColumnWidth(e)>this.wot.wtViewport.getViewportWidth()&&(t=!1)}return t&&r.offsetWidth!==r.clientWidth&&(h=(0,n.getScrollbarWidth)(this.domBindings.rootDocument)),t?(a+=this.sumCellSizes(0,e+1),a-=this.wot.wtViewport.getViewportWidth(),a+=l):a+=this.sumCellSizes(this.wtSettings.getSetting("fixedColumnsStart"),e),a+=h,(0,n.getMaximumScrollLeft)(this.mainTableScrollableElement)===a-l&&l>0&&this.wot.wtOverlays.expandHiderHorizontallyBy(l),this.setScrollPosition(a)}getTableParentOffset(){let e=0;return this.wtSettings.getSetting("preventOverflow")||this.trimmingContainer!==this.domBindings.rootWindow||(e=this.wot.wtTable.holderOffset.left),e}getScrollPosition(){return Math.abs((0,n.getScrollLeft)(this.mainTableScrollableElement,this.domBindings.rootWindow))}getOverlayOffset(){const{rootWindow:e}=this.domBindings,t=this.wtSettings.getSetting("preventOverflow");let o=0;if(this.trimmingContainer===e&&(!t||"horizontal"!==t)){o=this.isRtl()?Math.abs(Math.min(this.getTableParentOffset()-this.getScrollPosition(),0)):Math.max(this.getScrollPosition()-this.getTableParentOffset(),0);o>this.wot.wtTable.getTotalWidth()-this.clone.wtTable.getTotalWidth()&&(o=0)}return o}adjustHeaderBordersPosition(e){const{wtSettings:t}=this,o=this.wot.wtTable.holder.parentNode,s=t.getSetting("rowHeaders"),i=t.getSetting("fixedColumnsStart"),r=t.getSetting("totalRows"),l="vertical"===t.getSetting("preventOverflow");r?(0,n.removeClass)(o,"emptyRows"):(0,n.addClass)(o,"emptyRows");let a=!1;if(!l)if(i&&!s.length)(0,n.addClass)(o,"innerBorderLeft innerBorderInlineStart");else if(!i&&s.length){const t=(0,n.hasClass)(o,"innerBorderInlineStart");e?((0,n.addClass)(o,"innerBorderLeft innerBorderInlineStart"),a=!t):((0,n.removeClass)(o,"innerBorderLeft innerBorderInlineStart"),a=t)}return a}}t.InlineStartOverlay=h},1686:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(9893),r=s(o(61234)),l=o(85821),a=o(98779),h=o(90368);class c extends l.Overlay{constructor(e,t,o,s){super(e,t,h.CLONE_TOP,o,s),(0,n.default)(this,"cachedFixedRowsTop",-1),this.cachedFixedRowsTop=this.wtSettings.getSetting("fixedRowsTop")}createTable(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return new r.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderTopOverlay")}resetFixedPosition(){if(!this.needFullRender||!this.shouldBeRendered()||!this.wot.wtTable.holder.parentNode)return!1;const e=this.clone.wtTable.holder.parentNode,{rootWindow:t}=this.domBindings,o=this.wtSettings.getSetting("preventOverflow");let s=0,n=!1;if(this.trimmingContainer!==t||o&&"vertical"===o)s=this.getScrollPosition(),(0,i.resetCssTransform)(e);else{const{wtTable:t}=this.wot,o=t.hider.getBoundingClientRect();n=Math.ceil(o.bottom)===e.offsetHeight,s=this.getOverlayOffset(),(0,i.setOverlayPosition)(e,"0px",`${s}px`)}const r=this.adjustHeaderBordersPosition(s,n);return this.adjustElementsSize(),r}setScrollPosition(e){const t=this.domBindings.rootWindow;let o=!1;return this.mainTableScrollableElement===t&&t.scrollY!==e?(t.scrollTo((0,i.getWindowScrollLeft)(t),e),o=!0):this.mainTableScrollableElement.scrollTop!==e&&(this.mainTableScrollableElement.scrollTop=e,o=!0),o}onScroll(){this.wtSettings.getSetting("onScrollHorizontally")}sumCellSizes(e,t){const o=this.wtSettings.getSetting("defaultRowHeight");let s=e,n=0;for(;s<t;){const e=this.wot.wtTable.getRowHeight(s);n+=void 0===e?o:e,s+=1}return n}adjustElementsSize(){this.updateTrimmingContainer(),this.needFullRender&&(this.adjustRootElementSize(),this.adjustRootChildrenSize())}adjustRootElementSize(){const{wtTable:e}=this.wot,{rootDocument:t,rootWindow:o}=this.domBindings,s=(0,i.getScrollbarWidth)(t),n=this.clone.wtTable.holder.parentNode.style,r=this.wtSettings.getSetting("preventOverflow");if(this.trimmingContainer!==o||"horizontal"===r){let t=this.wot.wtViewport.getWorkspaceWidth();this.wot.wtOverlays.hasScrollbarRight&&(t-=s),t=Math.min(t,e.wtRootElement.scrollWidth),n.width=`${t}px`}else n.width="";this.clone.wtTable.holder.style.width=n.width;let l=(0,i.outerHeight)(this.clone.wtTable.TABLE);this.wot.wtTable.hasDefinedSize()||(l=0),n.height=`${l}px`}adjustRootChildrenSize(){const{holder:e}=this.clone.wtTable,t=this.wot.selectionManager.getFocusSelection()?parseInt(a.CORNER_DEFAULT_STYLE.height,10)/2:0;this.clone.wtTable.hider.style.width=this.hider.style.width,e.style.width=e.parentNode.style.width,e.style.height=`${parseInt(e.parentNode.style.height,10)+t}px`}applyToDOM(){const e=this.wtSettings.getSetting("totalRows");if("number"==typeof this.wot.wtViewport.rowsRenderCalculator.startPosition)this.spreader.style.top=`${this.wot.wtViewport.rowsRenderCalculator.startPosition}px`;else{if(0!==e)throw new Error("Incorrect value of the rowsRenderCalculator");this.spreader.style.top="0"}this.spreader.style.bottom="",this.needFullRender&&this.syncOverlayOffset()}syncOverlayOffset(){const e=this.isRtl()?"right":"left",{spreader:t}=this.clone.wtTable;"number"==typeof this.wot.wtViewport.columnsRenderCalculator.startPosition?t.style[e]=`${this.wot.wtViewport.columnsRenderCalculator.startPosition}px`:t.style[e]=""}scrollTo(e,t){const{wot:o,wtSettings:s}=this,n=(o.cloneSource?o.cloneSource:o).wtTable.holder,r=s.getSetting("columnHeaders"),l=0===s.getSetting("fixedRowsTop")&&r.length>0&&!(0,i.hasClass)(n.parentNode,"innerBorderTop")?1:0;let a=this.getTableParentOffset(),h=0;if(t){this.wot.wtTable.getRowHeight(e)>this.wot.wtViewport.getViewportHeight()&&(t=!1)}if(t&&n.offsetHeight!==n.clientHeight&&(h=(0,i.getScrollbarWidth)(this.domBindings.rootDocument)),t){const t=s.getSetting("fixedRowsBottom"),n=s.getSetting("totalRows");a+=this.sumCellSizes(0,e+1),a-=o.wtViewport.getViewportHeight()-this.sumCellSizes(n-t,n),a+=1,a+=l}else a+=this.sumCellSizes(s.getSetting("fixedRowsTop"),e);return a+=h,(0,i.getMaximumScrollTop)(this.mainTableScrollableElement)===a-l&&l>0&&this.wot.wtOverlays.expandHiderVerticallyBy(l),this.setScrollPosition(a)}getTableParentOffset(){return this.mainTableScrollableElement===this.domBindings.rootWindow?this.wot.wtTable.holderOffset.top:0}getScrollPosition(){return(0,i.getScrollTop)(this.mainTableScrollableElement,this.domBindings.rootWindow)}getOverlayOffset(){const{rootWindow:e}=this.domBindings,t=this.wtSettings.getSetting("preventOverflow");let o=0;if(this.trimmingContainer===e&&(!t||"vertical"!==t)){const e=this.wot.wtTable.getTotalHeight()-this.clone.wtTable.getTotalHeight();o=Math.max(this.getScrollPosition()-this.getTableParentOffset(),0),o>e&&(o=0)}return o}adjustHeaderBordersPosition(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{wtSettings:o}=this,s=this.wot.wtTable.holder.parentNode,n=o.getSetting("totalColumns"),r="horizontal"===o.getSetting("preventOverflow");n?(0,i.removeClass)(s,"emptyColumns"):(0,i.addClass)(s,"emptyColumns");let l=!1;if(!t&&!r){const t=o.getSetting("fixedRowsTop"),n=this.cachedFixedRowsTop!==t,r=o.getSetting("columnHeaders");if((n||0===t)&&r.length>0){const t=(0,i.hasClass)(s,"innerBorderTop");this.cachedFixedRowsTop=o.getSetting("fixedRowsTop"),e||0===o.getSetting("totalRows")?((0,i.addClass)(s,"innerBorderTop"),l=!t):((0,i.removeClass)(s,"innerBorderTop"),l=t)}}return l}}t.TopOverlay=c},51718:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(9893),r=s(o(60882)),l=o(85821),a=o(90368);class h extends l.Overlay{constructor(e,t,o,s,i,r){super(e,t,a.CLONE_TOP_INLINE_START_CORNER,o,s),(0,n.default)(this,"topOverlay",void 0),(0,n.default)(this,"inlineStartOverlay",void 0),this.topOverlay=i,this.inlineStartOverlay=r}createTable(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return new r.default(...t)}shouldBeRendered(){return this.wtSettings.getSetting("shouldRenderTopOverlay")&&this.wtSettings.getSetting("shouldRenderInlineStartOverlay")}resetFixedPosition(){if(this.updateTrimmingContainer(),!this.wot.wtTable.holder.parentNode)return!1;const e=this.clone.wtTable.holder.parentNode;if(this.trimmingContainer===this.domBindings.rootWindow){const t=this.inlineStartOverlay.getOverlayOffset()*(this.isRtl()?-1:1),o=this.topOverlay.getOverlayOffset();(0,i.setOverlayPosition)(e,`${t}px`,`${o}px`)}else(0,i.resetCssTransform)(e);let t=(0,i.outerHeight)(this.clone.wtTable.TABLE);const o=(0,i.outerWidth)(this.clone.wtTable.TABLE);return this.wot.wtTable.hasDefinedSize()||(t=0),e.style.height=`${t}px`,e.style.width=`${o}px`,!1}}t.TopInlineStartCornerOverlay=h},85737:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=o(9893),r=o(93980),l=o(9175),a=o(71257),h=o(28890),c=o(83119),u=o(34009);function d(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function g(e,t,o){return e.set(p(e,t),o),o}function f(e,t){return e.get(p(e,t))}function p(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var m=new WeakMap,w=new WeakMap,C=new WeakMap,v=new WeakMap;t.default=class{constructor(e,t,o,s,l,a){(0,n.default)(this,"wot",null),d(this,m,[]),(0,n.default)(this,"topOverlay",null),(0,n.default)(this,"bottomOverlay",null),(0,n.default)(this,"inlineStartOverlay",null),(0,n.default)(this,"topInlineStartCornerOverlay",null),(0,n.default)(this,"bottomInlineStartCornerOverlay",null),(0,n.default)(this,"browserLineHeight",void 0),(0,n.default)(this,"wtSettings",null),d(this,w,!1),d(this,C,0),d(this,v,null),(0,n.default)(this,"resizeObserver",new ResizeObserver((e=>{(0,r.requestAnimationFrame)((()=>{Array.isArray(e)&&e.length&&(g(C,this,f(C,this)+1),100===f(C,this)&&((0,c.warn)("The ResizeObserver callback was fired too many times in direct succession.\nThis may be due to an infinite loop caused by setting a dynamic height/width (for example, with the `dvh` units) to a Handsontable container's parent. \nThe observer will be disconnected."),this.resizeObserver.disconnect()),null!==f(v,this)&&clearTimeout(f(v,this)),g(v,this,setTimeout((()=>{g(C,this,0)}),100)),this.wtSettings.getSetting("onContainerElementResize"))}))}))),this.wot=e,this.wtSettings=s,this.domBindings=o,this.facadeGetter=t,this.wtTable=a;const{rootDocument:h,rootWindow:u}=this.domBindings;this.instance=this.wot,this.eventManager=l,this.scrollbarSize=(0,i.getScrollbarWidth)(h);const p="hidden"===u.getComputedStyle(a.wtRootElement.parentNode).getPropertyValue("overflow");this.scrollableElement=p?a.holder:(0,i.getScrollableElement)(a.TABLE),this.initOverlays(),this.hasScrollbarBottom=!1,this.hasScrollbarRight=!1,this.destroyed=!1,this.keyPressed=!1,this.spreaderLastSize={width:null,height:null},this.verticalScrolling=!1,this.horizontalScrolling=!1,this.initBrowserLineHeight(),this.registerListeners(),this.lastScrollX=u.scrollX,this.lastScrollY=u.scrollY}getOverlays(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=[...f(m,this)];return e&&t.push(this.wtTable),t}initBrowserLineHeight(){const{rootWindow:e,rootDocument:t}=this.domBindings,o=e.getComputedStyle(t.body),s=parseInt(o.lineHeight,10),n=1.2*parseInt(o.fontSize,10);this.browserLineHeight=s||n}initOverlays(){const e=[this.wot,this.facadeGetter,this.wtSettings,this.domBindings];this.topOverlay=new u.TopOverlay(...e),this.bottomOverlay=new u.BottomOverlay(...e),this.inlineStartOverlay=new u.InlineStartOverlay(...e),this.topInlineStartCornerOverlay=new u.TopInlineStartCornerOverlay(...e,this.topOverlay,this.inlineStartOverlay),this.bottomInlineStartCornerOverlay=new u.BottomInlineStartCornerOverlay(...e,this.bottomOverlay,this.inlineStartOverlay),g(m,this,[this.topOverlay,this.bottomOverlay,this.inlineStartOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay])}beforeDraw(){g(w,this,f(m,this).reduce(((e,t)=>t.hasRenderingStateChanged()||e),!1)),f(m,this).forEach((e=>e.updateStateOfRendering("before")))}afterDraw(){this.syncScrollWithMaster(),f(m,this).forEach((e=>{const t=e.hasRenderingStateChanged();e.updateStateOfRendering("after"),t&&!e.needFullRender&&e.reset()}))}refreshAll(){this.wot.drawn&&(this.wtTable.holder.parentNode?(this.wot.draw(!0),this.verticalScrolling&&this.inlineStartOverlay.onScroll(),this.horizontalScrolling&&this.topOverlay.onScroll(),this.verticalScrolling=!1,this.horizontalScrolling=!1):this.destroy())}registerListeners(){const{rootDocument:e,rootWindow:t}=this.domBindings,{mainTableScrollableElement:o}=this.topOverlay,{mainTableScrollableElement:s}=this.inlineStartOverlay;this.eventManager.addEventListener(e.documentElement,"keydown",(e=>this.onKeyDown(e))),this.eventManager.addEventListener(e.documentElement,"keyup",(()=>this.onKeyUp())),this.eventManager.addEventListener(e,"visibilitychange",(()=>this.onKeyUp())),this.eventManager.addEventListener(o,"scroll",(e=>this.onTableScroll(e)),{passive:!0}),o!==s&&this.eventManager.addEventListener(s,"scroll",(e=>this.onTableScroll(e)),{passive:!0});const n=t.devicePixelRatio&&t.devicePixelRatio>1,i=this.scrollableElement===t,r=this.wtSettings.getSetting("preventWheel"),l={passive:i};(r||n||!(0,h.isChrome)())&&this.eventManager.addEventListener(this.wtTable.wtRootElement,"wheel",(e=>this.onCloneWheel(e,r)),l);let a;[this.topOverlay,this.bottomOverlay,this.inlineStartOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay].forEach((e=>{if(e&&e.needFullRender){const{holder:t}=e.clone.wtTable;this.eventManager.addEventListener(t,"wheel",(e=>this.onCloneWheel(e,r)),l)}})),this.eventManager.addEventListener(t,"resize",(()=>{clearTimeout(a),a=setTimeout((()=>{this.wtSettings.getSetting("onWindowResize"),g(C,this,0)}),200)})),i||this.resizeObserver.observe(this.wtTable.wtRootElement.parentElement)}deregisterListeners(){this.eventManager.clearEvents(!0)}onTableScroll(e){const t=this.domBindings.rootWindow,o=this.inlineStartOverlay.mainTableScrollableElement,s=this.topOverlay.mainTableScrollableElement,n=e.target;this.keyPressed&&(s!==t&&n!==t&&!e.target.contains(s)||o!==t&&n!==t&&!e.target.contains(o))||this.syncScrollPositions(e)}onCloneWheel(e,t){const{rootWindow:o}=this.domBindings,s=this.inlineStartOverlay.mainTableScrollableElement,n=this.topOverlay.mainTableScrollableElement,i=e.target,r=n!==o&&i!==o&&!i.contains(n),l=s!==o&&i!==o&&!i.contains(s);if(this.keyPressed&&(r||l)||this.scrollableElement===o)return;const a=this.translateMouseWheelToScroll(e);(t||this.scrollableElement!==o&&a)&&e.preventDefault()}onKeyDown(e){this.keyPressed=(0,a.isKey)(e.keyCode,"ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT")}onKeyUp(){this.keyPressed=!1}translateMouseWheelToScroll(e){let t=isNaN(e.deltaY)?-1*e.wheelDeltaY:e.deltaY,o=isNaN(e.deltaX)?-1*e.wheelDeltaX:e.deltaX;1===e.deltaMode&&(o+=o*this.browserLineHeight,t+=t*this.browserLineHeight);const s=this.scrollVertically(t),n=this.scrollHorizontally(o);return s||n}scrollVertically(e){const t=this.scrollableElement.scrollTop;return this.scrollableElement.scrollTop+=e,t!==this.scrollableElement.scrollTop}scrollHorizontally(e){const t=this.scrollableElement.scrollLeft;return this.scrollableElement.scrollLeft+=e,t!==this.scrollableElement.scrollLeft}syncScrollPositions(){if(this.destroyed)return;const{rootWindow:e}=this.domBindings,t=this.topOverlay.clone.wtTable.holder,o=this.inlineStartOverlay.clone.wtTable.holder,[s,n]=[this.scrollableElement.scrollLeft,this.scrollableElement.scrollTop];if(this.horizontalScrolling=t.scrollLeft!==s||this.lastScrollX!==e.scrollX,this.verticalScrolling=o.scrollTop!==n||this.lastScrollY!==e.scrollY,this.lastScrollX=e.scrollX,this.lastScrollY=e.scrollY,this.horizontalScrolling){t.scrollLeft=s;const e=this.bottomOverlay.needFullRender?this.bottomOverlay.clone.wtTable.holder:null;e&&(e.scrollLeft=s)}this.verticalScrolling&&(o.scrollTop=n),this.refreshAll()}syncScrollWithMaster(){if(!f(w,this))return;const e=this.topOverlay.mainTableScrollableElement,{scrollLeft:t,scrollTop:o}=e;this.topOverlay.needFullRender&&(this.topOverlay.clone.wtTable.holder.scrollLeft=t),this.bottomOverlay.needFullRender&&(this.bottomOverlay.clone.wtTable.holder.scrollLeft=t),this.inlineStartOverlay.needFullRender&&(this.inlineStartOverlay.clone.wtTable.holder.scrollTop=o),g(w,this,!1)}updateMainScrollableElements(){this.deregisterListeners(),this.inlineStartOverlay.updateMainScrollableElement(),this.topOverlay.updateMainScrollableElement(),this.bottomOverlay.needFullRender&&this.bottomOverlay.updateMainScrollableElement();const{wtTable:e}=this,{rootWindow:t}=this.domBindings;"hidden"===t.getComputedStyle(e.wtRootElement.parentNode).getPropertyValue("overflow")?this.scrollableElement=e.holder:this.scrollableElement=(0,i.getScrollableElement)(e.TABLE),this.registerListeners()}destroy(){this.resizeObserver.disconnect(),this.eventManager.destroy(),this.topOverlay.destroy(),this.bottomOverlay.clone&&this.bottomOverlay.destroy(),this.inlineStartOverlay.destroy(),this.topInlineStartCornerOverlay&&this.topInlineStartCornerOverlay.destroy(),this.bottomInlineStartCornerOverlay&&this.bottomInlineStartCornerOverlay.clone&&this.bottomInlineStartCornerOverlay.destroy(),this.destroyed=!0}refresh(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.updateLastSpreaderSize()&&this.adjustElementsSize(),this.bottomOverlay.clone&&this.bottomOverlay.refresh(e),this.inlineStartOverlay.refresh(e),this.topOverlay.refresh(e),this.topInlineStartCornerOverlay&&this.topInlineStartCornerOverlay.refresh(e),this.bottomInlineStartCornerOverlay&&this.bottomInlineStartCornerOverlay.clone&&this.bottomInlineStartCornerOverlay.refresh(e)}updateLastSpreaderSize(){const e=this.wtTable.spreader,t=e.clientWidth,o=e.clientHeight,s=t!==this.spreaderLastSize.width||o!==this.spreaderLastSize.height;return s&&(this.spreaderLastSize.width=t,this.spreaderLastSize.height=o),s}adjustElementsSize(){const{wtViewport:e}=this.wot,{wtTable:t}=this,{rootWindow:o}=this.domBindings,s=this.scrollableElement===o,n=this.wtSettings.getSetting("totalColumns"),i=this.wtSettings.getSetting("totalRows"),r=e.getRowHeaderWidth(),l=e.getColumnHeaderHeight()+this.topOverlay.sumCellSizes(0,i)+1,a=r+this.inlineStartOverlay.sumCellSizes(0,n),h=t.hider.style,c=(()=>!s&&this.scrollableElement.scrollTop>Math.max(0,l-t.holder.clientHeight))()?1:0,u=(()=>!s&&this.scrollableElement.scrollLeft>Math.max(0,a-t.holder.clientWidth))()?1:0;if(h.width=`${a+u}px`,h.height=`${l+c}px`,this.scrollbarSize>0){const{scrollHeight:e,scrollWidth:o}=t.wtRootElement,{scrollHeight:s,scrollWidth:n}=t.holder;this.hasScrollbarRight=e<s,this.hasScrollbarBottom=o<n,this.hasScrollbarRight&&t.hider.scrollWidth+this.scrollbarSize>o?this.hasScrollbarBottom=!0:this.hasScrollbarBottom&&t.hider.scrollHeight+this.scrollbarSize>e&&(this.hasScrollbarRight=!0)}this.topOverlay.adjustElementsSize(),this.inlineStartOverlay.adjustElementsSize(),this.bottomOverlay.adjustElementsSize()}expandHiderVerticallyBy(e){const{wtTable:t}=this;t.hider.style.height=`${parseInt(t.hider.style.height,10)+e}px`}expandHiderHorizontallyBy(e){const{wtTable:t}=this;t.hider.style.width=`${parseInt(t.hider.style.width,10)+e}px`}applyToDOM(){this.wtTable.isVisible()&&(this.topOverlay.applyToDOM(),this.bottomOverlay.clone&&this.bottomOverlay.applyToDOM(),this.inlineStartOverlay.applyToDOM())}getParentOverlay(e){if(!e)return null;const t=[this.topOverlay,this.inlineStartOverlay,this.bottomOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay];let o=null;return(0,l.arrayEach)(t,(t=>{t&&t.clone&&t.clone.wtTable.TABLE.contains(e)&&(o=t.clone)})),o}syncOverlayTableClassNames(){const e=this.wtTable.TABLE,t=[this.topOverlay,this.inlineStartOverlay,this.bottomOverlay,this.topInlineStartCornerOverlay,this.bottomInlineStartCornerOverlay];(0,l.arrayEach)(t,(t=>{t&&(t.clone.wtTable.TABLE.className=e.className)}))}}},77140:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=s(o(42715));t.default=class{constructor(e,t){(0,n.default)(this,"nodesPool",null),(0,n.default)(this,"nodeType",void 0),(0,n.default)(this,"rootNode",void 0),(0,n.default)(this,"table",null),(0,n.default)(this,"renderedNodes",0),this.nodesPool="string"==typeof e?new i.default(e):null,this.nodeType=e,this.rootNode=t}setTable(e){this.nodesPool&&this.nodesPool.setRootDocument(e.rootDocument),this.table=e}adjust(){}render(){}}},83553:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(9893),r=o(21682),l=s(o(77140)),a=o(92692);class h extends l.default{constructor(){super("TD"),(0,n.default)(this,"orderViews",new WeakMap),(0,n.default)(this,"sourceRowIndex",0)}obtainOrderView(e){let t;return this.orderViews.has(e)?t=this.orderViews.get(e):(t=new r.SharedOrderView(e,(e=>this.nodesPool.obtain(this.sourceRowIndex,e)),this.nodeType),this.orderViews.set(e,t)),t}render(){const{rowsToRender:e,columnsToRender:t,rows:o,rowHeaders:s}=this.table;for(let l=0;l<e;l++){const e=this.table.renderedRowToSource(l),h=o.getRenderedNode(l);this.sourceRowIndex=e;const c=this.obtainOrderView(h),u=s.obtainOrderView(h);c.prependView(u).setSize(t).setOffset(this.table.renderedColumnToSource(0)).start();for(let o=0;o<t;o++){c.render();const t=c.getCurrentNode(),s=this.table.renderedColumnToSource(o);var n,r;if((0,i.hasClass)(t,"hide")||(t.className=""),t.removeAttribute("style"),t.removeAttribute("dir"),(0,i.removeAttribute)(t,[new RegExp("aria-(.*)"),new RegExp("role")]),this.table.cellRenderer(e,s,t),this.table.isAriaEnabled())(0,i.setAttribute)(t,[...t.hasAttribute("role")?[]:[(0,a.A11Y_GRIDCELL)()],(0,a.A11Y_TABINDEX)(-1),(0,a.A11Y_COLINDEX)(s+(null!==(n=null===(r=this.table.rowUtils)||void 0===r||null===(r=r.dataAccessObject)||void 0===r?void 0:r.rowHeaders.length)&&void 0!==n?n:0)+1)])}c.end()}}}t.default=h},73827:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(77140)),i=o(83119),r=o(28927),l=o(9893);let a=!1;class h extends n.default{constructor(e){super(null,e)}adjust(){const{columnsToRender:e,rowHeadersCount:t}=this.table,o=e+t;for(;this.renderedNodes<o;)this.rootNode.appendChild(this.table.rootDocument.createElement("col")),this.renderedNodes+=1;for(;this.renderedNodes>o;)this.rootNode.removeChild(this.rootNode.lastChild),this.renderedNodes-=1}render(){this.adjust();const{columnsToRender:e,rowHeadersCount:t}=this.table;!a&&e>1e3&&(a=!0,(0,i.warn)(r.toSingleLine`Performance tip: Handsontable rendered more than 1000 visible columns.\x20
         Consider limiting the number of rendered columns by specifying the table width and/or\x20
         turning off the "renderAllColumns" option.`));for(let e=0;e<t;e++){const t=this.table.renderedColumnToSource(e),o=this.table.columnUtils.getHeaderWidth(t);this.rootNode.childNodes[e].style.width=`${o}px`}for(let o=0;o<e;o++){const e=this.table.renderedColumnToSource(o),s=this.table.columnUtils.getStretchedColumnWidth(e);this.rootNode.childNodes[o+t].style.width=`${s}px`}const o=this.rootNode.firstChild;o&&(0,l.addClass)(o,"rowHeader")}}t.default=h},85680:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(9893),i=s(o(77140)),r=o(92692);class l extends i.default{constructor(e){super(null,e)}adjust(){const{columnHeadersCount:e,rowHeadersCount:t}=this.table;let o=this.rootNode.firstChild;if(e){const{columnsToRender:s}=this.table,n=s+t;for(let t=0,s=e;t<s;t++){for(o=this.rootNode.childNodes[t],o||(o=this.table.rootDocument.createElement("tr"),this.rootNode.appendChild(o)),this.renderedNodes=o.childNodes.length;this.renderedNodes<n;)o.appendChild(this.table.rootDocument.createElement("th")),this.renderedNodes+=1;for(;this.renderedNodes>n;)o.removeChild(o.lastChild),this.renderedNodes-=1}const i=this.rootNode.childNodes.length;if(i>e)for(let t=e;t<i;t++)this.rootNode.removeChild(this.rootNode.lastChild)}else o&&(0,n.empty)(o)}render(){const{columnHeadersCount:e}=this.table;this.table.isAriaEnabled()&&(0,n.setAttribute)(this.rootNode,[(0,r.A11Y_ROWGROUP)()]);for(let t=0;t<e;t+=1){const{columnHeaderFunctions:e,columnsToRender:o,rowHeadersCount:s}=this.table,i=this.rootNode.childNodes[t];this.table.isAriaEnabled()&&(0,n.setAttribute)(i,[(0,r.A11Y_ROW)(),(0,r.A11Y_ROWINDEX)(t+1)]);for(let l=-1*s;l<o;l+=1){const o=this.table.renderedColumnToSource(l),a=i.childNodes[l+s];a.className="",a.removeAttribute("style"),(0,n.removeAttribute)(a,[new RegExp("aria-(.*)"),new RegExp("role")]),this.table.isAriaEnabled()&&(0,n.setAttribute)(a,[(0,r.A11Y_COLINDEX)(l+1+this.table.rowHeadersCount),(0,r.A11Y_TABINDEX)(-1),(0,r.A11Y_COLUMNHEADER)(),...l>=0?[(0,r.A11Y_SCOPE_COL)()]:[(0,r.A11Y_ROW)()]]),e[t](o,a,t)}}}}t.default=l},20524:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(14348));t.RowHeadersRenderer=n.default;var i=s(o(85680));t.ColumnHeadersRenderer=i.default;var r=s(o(73827));t.ColGroupRenderer=r.default;var l=s(o(88371));t.RowsRenderer=l.default;var a=s(o(83553));t.CellsRenderer=a.default;var h=s(o(67016));t.TableRenderer=h.default;t.Renderer=class{constructor(){let{TABLE:e,THEAD:t,COLGROUP:o,TBODY:s,rowUtils:c,columnUtils:u,cellRenderer:d}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.renderer=new h.default(e,{cellRenderer:d}),this.renderer.setRenderers({rowHeaders:new n.default,columnHeaders:new i.default(t),colGroup:new r.default(o),rows:new l.default(s),cells:new a.default}),this.renderer.setAxisUtils(c,u)}setActiveOverlayName(e){return this.renderer.setActiveOverlayName(e),this}setFilters(e,t){return this.renderer.setFilters(e,t),this}setViewportSize(e,t){return this.renderer.setViewportSize(e,t),this}setHeaderContentRenderers(e,t){return this.renderer.setHeaderContentRenderers(e,t),this}adjust(){this.renderer.adjust()}render(){this.renderer.render()}}},14348:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(21682),r=s(o(77140)),l=o(9893),a=o(92692);class h extends r.default{constructor(){super("TH"),(0,n.default)(this,"orderViews",new WeakMap),(0,n.default)(this,"sourceRowIndex",0)}obtainOrderView(e){let t;return this.orderViews.has(e)?t=this.orderViews.get(e):(t=new i.SharedOrderView(e,(e=>this.nodesPool.obtain(this.sourceRowIndex,e)),this.nodeType),this.orderViews.set(e,t)),t}render(){const{rowsToRender:e,rowHeaderFunctions:t,rowHeadersCount:o,rows:s,cells:n}=this.table;for(let i=0;i<e;i++){const e=this.table.renderedRowToSource(i),r=s.getRenderedNode(i);this.sourceRowIndex=e;const h=this.obtainOrderView(r),c=n.obtainOrderView(r);h.appendView(c).setSize(o).setOffset(this.table.renderedColumnToSource(0)).start();for(let s=0;s<o;s++){h.render();const o=h.getCurrentNode();o.className="",o.removeAttribute("style"),(0,l.removeAttribute)(o,[new RegExp("aria-(.*)"),new RegExp("role")]),this.table.isAriaEnabled()&&(0,l.setAttribute)(o,[(0,a.A11Y_ROWHEADER)(),(0,a.A11Y_SCOPE_ROW)(),(0,a.A11Y_COLINDEX)(s+1),(0,a.A11Y_TABINDEX)(-1)]),t[s](e,o,s)}h.end()}}}t.default=h},88371:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=s(o(77140)),r=o(83119),l=o(28927),a=o(21682),h=o(9893),c=o(92692);const u="ht__row_even",d="ht__row_odd";let g=!1;class f extends i.default{constructor(e){super("TR",e),(0,n.default)(this,"orderView",void 0),this.orderView=new a.OrderView(e,(e=>this.nodesPool.obtain(e)),this.nodeType)}getRenderedNode(e){return this.orderView.getNode(e)}render(){const{rowsToRender:e}=this.table;!g&&e>1e3&&(g=!0,(0,r.warn)(l.toSingleLine`Performance tip: Handsontable rendered more than 1000 visible rows.\x20
         Consider limiting the number of rendered rows by specifying the table height and/or\x20
-        turning off the "renderAllRows" option.`)),this.table.isAriaEnabled()&&(0,h.setAttribute)(this.rootNode,[(0,c.A11Y_ROWGROUP)()]),this.orderView.setSize(e).setOffset(this.table.renderedRowToSource(0)).start();for(let s=0;s<e;s++){this.orderView.render();const e=this.orderView.getCurrentNode(),n=this.table.renderedRowToSource(s);var t,o;if(this.table.isAriaEnabled())(0,h.setAttribute)(e,[(0,c.A11Y_ROW)(),(0,c.A11Y_ROWINDEX)(n+(null!==(t=null===(o=this.table.rowUtils)||void 0===o||null===(o=o.dataAccessObject)||void 0===o?void 0:o.columnHeaders.length)&&void 0!==t?t:0)+1)]);(0,h.removeClass)(e,[u,d]),(n+1)%2==0?(0,h.addClass)(e,u):(0,h.addClass)(e,d)}this.orderView.end()}}t.default=f},67016:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e){let{cellRenderer:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,n.default)(this,"rootNode",void 0),(0,n.default)(this,"rootDocument",void 0),(0,n.default)(this,"rowHeaders",null),(0,n.default)(this,"columnHeaders",null),(0,n.default)(this,"colGroup",null),(0,n.default)(this,"rows",null),(0,n.default)(this,"cells",null),(0,n.default)(this,"rowFilter",null),(0,n.default)(this,"columnFilter",null),(0,n.default)(this,"rowUtils",null),(0,n.default)(this,"columnUtils",null),(0,n.default)(this,"rowsToRender",0),(0,n.default)(this,"columnsToRender",0),(0,n.default)(this,"rowHeaderFunctions",[]),(0,n.default)(this,"rowHeadersCount",0),(0,n.default)(this,"columnHeaderFunctions",[]),(0,n.default)(this,"columnHeadersCount",0),(0,n.default)(this,"cellRenderer",void 0),(0,n.default)(this,"activeOverlayName",void 0),this.rootNode=e,this.rootDocument=this.rootNode.ownerDocument,this.cellRenderer=t}setActiveOverlayName(e){this.activeOverlayName=e}setAxisUtils(e,t){this.rowUtils=e,this.columnUtils=t}setViewportSize(e,t){this.rowsToRender=e,this.columnsToRender=t}setFilters(e,t){this.rowFilter=e,this.columnFilter=t}setHeaderContentRenderers(e,t){this.rowHeaderFunctions=e,this.rowHeadersCount=e.length,this.columnHeaderFunctions=t,this.columnHeadersCount=t.length}setRenderers(){let{rowHeaders:e,columnHeaders:t,colGroup:o,rows:s,cells:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.setTable(this),t.setTable(this),o.setTable(this),s.setTable(this),n.setTable(this),this.rowHeaders=e,this.columnHeaders=t,this.colGroup=o,this.rows=s,this.cells=n}renderedRowToSource(e){return this.rowFilter.renderedToSource(e)}renderedColumnToSource(e){return this.columnFilter.renderedToSource(e)}isAriaEnabled(){return this.rowUtils.wtSettings.getSetting("ariaTags")}render(){this.colGroup.adjust(),this.columnHeaders.adjust(),this.rows.adjust(),this.rowHeaders.adjust(),this.columnHeaders.render(),this.rows.render(),this.rowHeaders.render(),this.cells.render(),this.columnUtils.calculateWidths(),this.colGroup.render();const{rowsToRender:e,rows:t}=this;for(let o=0;o<e;o++){const e=t.getRenderedNode(o);if(e.firstChild){const t=this.renderedRowToSource(o),s=this.rowUtils.getHeightByOverlayName(t,this.activeOverlayName);e.firstChild.style.height=s?s-1+"px":""}}}}},61677:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(9893);function r(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var a=new WeakSet;function h(e){const{wtSettings:t,inlineStartOverlay:o,wtTable:s,wtViewport:n,totalColumns:r,rootWindow:l}=this.dataAccessObject;if(o.mainTableScrollableElement===l){let a=null;if(t.getSetting("rtlMode")){const e=s.TABLE.getBoundingClientRect(),t=this.dataAccessObject.rootWindow.document.documentElement.offsetWidth;a=Math.abs(e.right-t)}else{a=(0,i.offset)(s.wtRootElement).left}const h=Math.abs((0,i.getScrollLeft)(l,l));if(a>h){const t=(0,i.innerWidth)(l);let s=n.getRowHeaderWidth();for(let n=1;n<=r;n++)if(s+=o.sumCellSizes(n-1,n),a+s-h>=t){e=n-2;break}}}return e}function c(e){const{topOverlay:t,wtTable:o,wtViewport:s,totalRows:n,rootWindow:r}=this.dataAccessObject;if(t.mainTableScrollableElement===r){const l=(0,i.offset)(o.wtRootElement),a=(0,i.getScrollTop)(r,r);if(l.top>a){const o=(0,i.innerHeight)(r);let h=s.getColumnHeaderHeight();for(let s=1;s<=n;s++)if(h+=t.sumCellSizes(s-1,s),l.top+h-a>=o){e=s-2;break}}}return e}t.default=class{constructor(e){r(this,a),(0,n.default)(this,"dataAccessObject",void 0),this.dataAccessObject=e}scrollViewport(e,t,o,s,n){const i=this.scrollViewportHorizontally(e.col,o,n),r=this.scrollViewportVertically(e.row,t,s);return i||r}scrollViewportHorizontally(e,t,o){const{drawn:s,totalColumns:n}=this.dataAccessObject;if(!s||!Number.isInteger(e)||e<0||e>n)return!1;const i=void 0===t&&void 0===o,{fixedColumnsStart:r,inlineStartOverlay:l}=this.dataAccessObject;if(i&&e<r)return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollHorizontally",e),!Number.isInteger(e)||e<0||e>n)return!1;const a=this.getFirstVisibleColumn(),h=this.getLastVisibleColumn();let c=!1;return(i&&(e<a||e>h)||!i)&&(c=l.scrollTo(e,i?e>=this.getLastPartiallyVisibleColumn():t)),c}scrollViewportVertically(e,t,o){const{drawn:s,totalRows:n}=this.dataAccessObject;if(!s||!Number.isInteger(e)||e<0||e>n)return!1;const i=void 0===t&&void 0===o,{fixedRowsBottom:r,fixedRowsTop:l,topOverlay:a}=this.dataAccessObject;if(i&&(e<l||e>n-r-1))return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollVertically",e),!Number.isInteger(e)||e<0||e>n)return!1;const h=this.getFirstVisibleRow(),c=this.getLastVisibleRow();let u=!1;return(i&&(e<h||e>c)||!i)&&(u=a.scrollTo(e,i?e>=this.getLastPartiallyVisibleRow():o)),u}getFirstVisibleRow(){return this.dataAccessObject.wtTable.getFirstVisibleRow()}getLastVisibleRow(){return l(a,this,c).call(this,this.dataAccessObject.wtTable.getLastVisibleRow())}getFirstPartiallyVisibleRow(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleRow()}getLastPartiallyVisibleRow(){return l(a,this,c).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleRow())}getFirstVisibleColumn(){return this.dataAccessObject.wtTable.getFirstVisibleColumn()}getLastVisibleColumn(){return l(a,this,h).call(this,this.dataAccessObject.wtTable.getLastVisibleColumn())}getFirstPartiallyVisibleColumn(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleColumn()}getLastPartiallyVisibleColumn(){return l(a,this,h).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleColumn())}}},15934:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9893),n=o(79729),i=o(13911),r=o(28890),l=o(30563);t.default=class{constructor(e,t){t&&(this.eventManager=e.eventManager,this.instance=e,this.wot=e,this.settings=t,this.mouseDown=!1,this.main=null,this.top=null,this.bottom=null,this.start=null,this.end=null,this.topStyle=null,this.bottomStyle=null,this.startStyle=null,this.endStyle=null,this.cornerDefaultStyle=l.CORNER_DEFAULT_STYLE,this.cornerCenterPointOffset=-parseInt(this.cornerDefaultStyle.width,10)/2,this.corner=null,this.cornerStyle=null,this.createBorders(t),this.registerListeners())}registerListeners(){const e=this.wot.rootDocument.body;this.eventManager.addEventListener(e,"mousedown",(()=>this.onMouseDown())),this.eventManager.addEventListener(e,"mouseup",(()=>this.onMouseUp()));for(let e=0,t=this.main.childNodes.length;e<t;e++){const t=this.main.childNodes[e];this.eventManager.addEventListener(t,"mouseenter",(t=>this.onMouseEnter(t,this.main.childNodes[e])))}}onMouseDown(){this.mouseDown=!0}onMouseUp(){this.mouseDown=!1}onMouseEnter(e,t){if(!this.mouseDown||!this.wot.getSetting("hideBorderOnMouseDownOver"))return;e.preventDefault(),(0,n.stopImmediatePropagation)(e);const o=this,s=this.wot.rootDocument.body,i=t.getBoundingClientRect();t.style.display="none",this.eventManager.addEventListener(s,"mousemove",(function e(n){var r;((r=n).clientY<Math.floor(i.top)||r.clientY>Math.ceil(i.top+i.height)||r.clientX<Math.floor(i.left)||r.clientX>Math.ceil(i.left+i.width))&&(o.eventManager.removeEventListener(s,"mousemove",e),t.style.display="block")}))}createBorders(e){const{rootDocument:t}=this.wot;this.main=t.createElement("div");const o=["top","start","bottom","end","corner"];let s=this.main.style;s.position="absolute",s.top=0,s.left=0;for(let n=0;n<5;n++){const i=o[n],r=t.createElement("div");r.className=`wtBorder ${this.settings.className||""}`,this.settings[i]&&this.settings[i].hide&&(r.className+=" hidden"),s=r.style,s.backgroundColor=this.settings[i]&&this.settings[i].color?this.settings[i].color:e.border.color,s.height=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,s.width=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,this.main.appendChild(r)}this.top=this.main.childNodes[0],this.start=this.main.childNodes[1],this.bottom=this.main.childNodes[2],this.end=this.main.childNodes[3],this.topStyle=this.top.style,this.startStyle=this.start.style,this.bottomStyle=this.bottom.style,this.endStyle=this.end.style,this.corner=this.main.childNodes[4],this.corner.className+=" corner",this.cornerStyle=this.corner.style,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.height=this.cornerDefaultStyle.height,this.cornerStyle.border=[this.cornerDefaultStyle.borderWidth,this.cornerDefaultStyle.borderStyle,this.cornerDefaultStyle.borderColor].join(" "),(0,r.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.createMultipleSelectorHandles(),this.disappear();const{wtTable:n}=this.wot;let i=n.bordersHolder;i||(i=t.createElement("div"),i.className="htBorders",n.bordersHolder=i,n.spreader.appendChild(i)),i.appendChild(this.main)}createMultipleSelectorHandles(){const{rootDocument:e}=this.wot;this.selectionHandles={top:e.createElement("DIV"),topHitArea:e.createElement("DIV"),bottom:e.createElement("DIV"),bottomHitArea:e.createElement("DIV")};this.selectionHandles.top.className="topSelectionHandle topLeftSelectionHandle",this.selectionHandles.topHitArea.className="topSelectionHandle-HitArea topLeftSelectionHandle-HitArea",this.selectionHandles.bottom.className="bottomSelectionHandle bottomRightSelectionHandle",this.selectionHandles.bottomHitArea.className="bottomSelectionHandle-HitArea bottomRightSelectionHandle-HitArea",this.selectionHandles.styles={top:this.selectionHandles.top.style,topHitArea:this.selectionHandles.topHitArea.style,bottom:this.selectionHandles.bottom.style,bottomHitArea:this.selectionHandles.bottomHitArea.style};const t={position:"absolute",height:"40px",width:"40px","border-radius":`${parseInt(40/1.5,10)}px`};(0,i.objectEach)(t,((e,t)=>{this.selectionHandles.styles.bottomHitArea[t]=e,this.selectionHandles.styles.topHitArea[t]=e}));const o={position:"absolute",height:"10px",width:"10px","border-radius":`${parseInt(10/1.5,10)}px`,background:"#F5F5FF",border:"1px solid #4285c8"};(0,i.objectEach)(o,((e,t)=>{this.selectionHandles.styles.bottom[t]=e,this.selectionHandles.styles.top[t]=e})),this.main.appendChild(this.selectionHandles.top),this.main.appendChild(this.selectionHandles.bottom),this.main.appendChild(this.selectionHandles.topHitArea),this.main.appendChild(this.selectionHandles.bottomHitArea)}isPartRange(e,t){const o=this.wot.selectionManager.getAreaSelection();return!(!o.cellRange||e===o.cellRange.to.row&&t===o.cellRange.to.col)}updateMultipleSelectionHandlesPosition(e,t,o,s,n,i){const r=this.wot.wtSettings.getSetting("rtlMode")?"right":"left",{top:l,topHitArea:a,bottom:h,bottomHitArea:c}=this.selectionHandles.styles,u=parseInt(l.borderWidth,10),d=parseInt(l.width,10),g=parseInt(a.width,10),f=this.wot.wtTable.getWidth(),p=this.wot.wtTable.getHeight();l.top=`${parseInt(o-d-1,10)}px`,l[r]=`${parseInt(s-d-1,10)}px`,a.top=`${parseInt(o-g/4*3,10)}px`,a[r]=`${parseInt(s-g/4*3,10)}px`;const m=Math.min(parseInt(s+n,10),f-d-2*u),w=Math.min(parseInt(s+n-g/4,10),f-g-2*u);h[r]=`${m}px`,c[r]=`${w}px`;const C=Math.min(parseInt(o+i,10),p-d-2*u),v=Math.min(parseInt(o+i-g/4,10),p-g-2*u);h.top=`${C}px`,c.top=`${v}px`,this.settings.border.cornerVisible&&this.settings.border.cornerVisible()?(l.display="block",a.display="block",this.isPartRange(e,t)?(h.display="none",c.display="none"):(h.display="block",c.display="block")):(l.display="none",h.display="none",a.display="none",c.display="none"),e===this.wot.wtSettings.getSetting("fixedRowsTop")||t===this.wot.wtSettings.getSetting("fixedColumnsStart")?(l.zIndex="9999",a.zIndex="9999"):(l.zIndex="",a.zIndex="")}appear(e){if(this.disabled)return;const{wtTable:t,rootDocument:o,rootWindow:n}=this.wot;let i,l,a,h,c,u;const d=t.getRenderedRowsCount();for(let o=0;o<d;o+=1){const s=t.rowFilter.renderedToSource(o);if(s>=e[0]&&s<=e[2]){i=s,c=e[0];break}}for(let o=d-1;o>=0;o-=1){const s=t.rowFilter.renderedToSource(o);if(s>=e[0]&&s<=e[2]){l=s;break}}const g=t.getRenderedColumnsCount();for(let o=0;o<g;o+=1){const s=t.columnFilter.renderedToSource(o);if(s>=e[1]&&s<=e[3]){a=s,u=e[1];break}}for(let o=g-1;o>=0;o-=1){const s=t.columnFilter.renderedToSource(o);if(s>=e[1]&&s<=e[3]){h=s;break}}if(void 0===i||void 0===a)return void this.disappear();let f=t.getCell(this.wot.createCellCoords(i,a));const p=i!==l||a!==h,m=p?t.getCell(this.wot.createCellCoords(l,h)):f,w=(0,s.offset)(f),C=p?(0,s.offset)(m):w,v=(0,s.offset)(t.TABLE),y=(0,s.outerWidth)(t.TABLE),E=w.top,S=w.left,R=this.wot.wtSettings.getSetting("rtlMode");let b=0,_=0;if(R){const e=(0,s.outerWidth)(f),t=n.innerWidth-v.left-y;_=S+e-C.left,b=n.innerWidth-S-e-t-1}else _=C.left+(0,s.outerWidth)(m)-S,b=S-v.left-1;if(this.isEntireColumnSelected(i,l)){const e=this.getDimensionsFromHeader("columns",a,h,c,v);let t=null;e&&([t,b,_]=e),t&&(f=t)}let T=E-v.top-1,M=C.top+(0,s.outerHeight)(m)-E;if(this.isEntireRowSelected(a,h)){const e=this.getDimensionsFromHeader("rows",i,l,u,v);let t=null;e&&([t,T,M]=e),t&&(f=t)}const O=(0,s.getComputedStyle)(f,n);parseInt(O.borderTopWidth,10)>0&&(T+=1,M=M>0?M-1:0),parseInt(O[R?"borderRightWidth":"borderLeftWidth"],10)>0&&(b+=1,_=_>0?_-1:0);const I=R?"right":"left";this.topStyle.top=`${T}px`,this.topStyle[I]=`${b}px`,this.topStyle.width=`${_}px`,this.topStyle.display="block",this.startStyle.top=`${T}px`,this.startStyle[I]=`${b}px`,this.startStyle.height=`${M}px`,this.startStyle.display="block";const N=Math.floor(this.settings.border.width/2);this.bottomStyle.top=T+M-N+"px",this.bottomStyle[I]=`${b}px`,this.bottomStyle.width=`${_}px`,this.bottomStyle.display="block",this.endStyle.top=`${T}px`,this.endStyle[I]=b+_-N+"px",this.endStyle.height=`${M+1}px`,this.endStyle.display="block";let A=this.settings.border.cornerVisible;A="function"==typeof A?A(this.settings.layerLevel):A;const P=this.wot.getSetting("onModifyGetCellCoords",l,h);let[x,H]=[l,h];if(P&&Array.isArray(P)&&([,,x,H]=P),(0,r.isMobileBrowser)()||!A||this.isPartRange(x,H))this.cornerStyle.display="none";else{this.cornerStyle.top=T+M+this.cornerCenterPointOffset-1+"px",this.cornerStyle[I]=b+_+this.cornerCenterPointOffset-1+"px",this.cornerStyle.borderRightWidth=this.cornerDefaultStyle.borderWidth,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.display="none";let e=(0,s.getTrimmingContainer)(t.TABLE);const i=e===n;i&&(e=o.documentElement);const r=parseInt(this.cornerDefaultStyle.width,10)/2,a=parseInt(this.cornerDefaultStyle.height,10)/2;if(h===this.wot.getSetting("totalColumns")-1){const t=i?m.getBoundingClientRect().left:m.offsetLeft;let o=!1,n=0;R?(n=t-parseInt(this.cornerDefaultStyle.width,10)/2,o=n<0):(n=t+(0,s.outerWidth)(m)+parseInt(this.cornerDefaultStyle.width,10)/2,o=n>=(0,s.innerWidth)(e)),o&&(this.cornerStyle[I]=`${Math.floor(b+_+this.cornerCenterPointOffset-r)}px`,this.cornerStyle[R?"borderLeftWidth":"borderRightWidth"]=0)}if(l===this.wot.getSetting("totalRows")-1){(i?m.getBoundingClientRect().top:m.offsetTop)+(0,s.outerHeight)(m)+parseInt(this.cornerDefaultStyle.height,10)/2>=(0,s.innerHeight)(e)&&(this.cornerStyle.top=`${Math.floor(T+M+this.cornerCenterPointOffset-a)}px`,this.cornerStyle.borderBottomWidth=0)}this.cornerStyle.display="block"}(0,r.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.updateMultipleSelectionHandlesPosition(l,h,T,b,_,M)}isEntireColumnSelected(e,t){return e===this.wot.wtTable.getFirstRenderedRow()&&t===this.wot.wtTable.getLastRenderedRow()}isEntireRowSelected(e,t){return e===this.wot.wtTable.getFirstRenderedColumn()&&t===this.wot.wtTable.getLastRenderedColumn()}getDimensionsFromHeader(e,t,o,n,i){const{wtTable:r}=this.wot,l=r.wtRootElement.parentNode;let a=null,h=null,c=null,u=null,d=null,g=null,f=null,p=null;switch(e){case"rows":a=function(){return r.getRowHeader(...arguments)},h=function(){return(0,s.outerHeight)(...arguments)},c="ht__selection--rows",g="top";break;case"columns":a=function(){return r.getColumnHeader(...arguments)},h=function(){return(0,s.outerWidth)(...arguments)},c="ht__selection--columns",g="left"}if(l.classList.contains(c)){const e=this.wot.getSetting("columnHeaders").length;if(f=a(t,e-n),p=a(o,e-n),!f||!p)return!1;const r=(0,s.offset)(f),l=(0,s.offset)(p);return f&&p&&(u=r[g]-i[g]-1,d=l[g]+h(p)-r[g]),[f,u,d]}return!1}changeBorderStyle(e,t){const o=this[e].style,n=t[e];!n||n.hide?(0,s.addClass)(this[e],"hidden"):((0,s.hasClass)(this[e],"hidden")&&(0,s.removeClass)(this[e],"hidden"),o.backgroundColor=n.color,"top"!==e&&"bottom"!==e||(o.height=`${n.width}px`),"start"!==e&&"end"!==e||(o.width=`${n.width}px`))}changeBorderToDefaultStyle(e){const t=1,o="#000",s=this[e].style;s.backgroundColor=o,s.width=`${t}px`,s.height=`${t}px`}toggleHiddenClass(e,t){this.changeBorderToDefaultStyle(e),t?(0,s.addClass)(this[e],"hidden"):(0,s.removeClass)(this[e],"hidden")}disappear(){this.topStyle.display="none",this.bottomStyle.display="none",this.startStyle.display="none",this.endStyle.display="none",this.cornerStyle.display="none",(0,r.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&(this.selectionHandles.styles.top.display="none",this.selectionHandles.styles.topHitArea.display="none",this.selectionHandles.styles.bottom.display="none",this.selectionHandles.styles.bottomHitArea.display="none")}destroy(){this.eventManager.destroyWithOwnEventsOnly(),this.main.parentNode.removeChild(this.main)}}},30563:(e,t)=>{"use strict";t.__esModule=!0;t.CORNER_DEFAULT_STYLE=Object.freeze({width:"6px",height:"6px",borderWidth:"1px",borderStyle:"solid",borderColor:"#FFF"})},30782:(e,t)=>{"use strict";t.__esModule=!0;t.ACTIVE_HEADER_TYPE="active-header",t.HEADER_TYPE="header",t.AREA_TYPE="area",t.FOCUS_TYPE="focus",t.FILL_TYPE="fill",t.ROW_TYPE="row",t.COLUMN_TYPE="column",t.CUSTOM_SELECTION_TYPE="custom-selection"},98779:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n={SelectionManager:!0,Selection:!0},i=s(o(8313));t.Selection=i.default;var r=o(30782);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===r[e]||(t[e]=r[e]))}));var l=o(30563);Object.keys(l).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===l[e]||(t[e]=l[e]))}));var a=o(42492);t.SelectionManager=a.SelectionManager},42492:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724),o(25352),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=o(9893),i=o(51785),r=s(o(15934));function l(e,t,o){a(e,t),t.set(e,o)}function a(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function h(e,t){return e.get(u(e,t))}function c(e,t,o){return e.set(u(e,t),o),o}function u(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var d=new WeakMap,g=new WeakMap,f=new WeakMap,p=new WeakMap,m=new WeakMap,w=new WeakMap,C=new WeakSet;function v(){const e=h(p,this).get(h(d,this)),t=h(d,this).wtSettings.getSetting("onBeforeRemoveCellClassNames");if(Array.isArray(t))for(let o=0;o<t.length;o++)e.add(t[o]);e.forEach((e=>{var t,o;const s=h(d,this).wtTable.TABLE.querySelectorAll(`.${e}`);let i=[];Array.isArray(null===(t=h(g,this).options)||void 0===t?void 0:t.cellAttributes)&&(i=h(g,this).options.cellAttributes.map((e=>e[0]))),Array.isArray(null===(o=h(g,this).options)||void 0===o?void 0:o.headerAttributes)&&(i=[...i,...h(g,this).options.headerAttributes.map((e=>e[0]))]);for(let t=0,o=s.length;t<o;t++)(0,n.removeClass)(s[t],e),(0,n.removeAttribute)(s[t],i)})),e.clear()}t.SelectionManager=class{constructor(e){var t,o;a(t=this,o=C),o.add(t),l(this,d,void 0),l(this,g,void 0),l(this,f,new i.SelectionScanner),l(this,p,new WeakMap),l(this,m,new WeakSet),l(this,w,new Map),c(g,this,e)}setActiveOverlay(e){return c(d,this,e),h(f,this).setActiveOverlay(h(d,this)),h(p,this).has(h(d,this))||h(p,this).set(h(d,this),new Set),this}getFocusSelection(){return null!==h(g,this)?h(g,this).getFocus():null}getAreaSelection(){return null!==h(g,this)?h(g,this).createLayeredArea():null}getBorderInstance(e){if(!e.settings.border)return null;if(h(w,this).has(e)){const t=h(w,this).get(e);if(t.has(h(d,this)))return t.get(h(d,this));const o=new r.default(h(d,this),e.settings);return t.set(h(d,this),o),o}const t=new r.default(h(d,this),e.settings);return h(w,this).set(e,new Map([[h(d,this),t]])),t}getBorderInstances(e){var t,o;return Array.from(null!==(t=null===(o=h(w,this).get(e))||void 0===o?void 0:o.values())&&void 0!==t?t:[])}destroyBorders(e){h(w,this).get(e).forEach((e=>e.destroy())),h(w,this).delete(e)}render(e){if(null===h(g,this))return;e&&u(C,this,v).call(this);const t=Array.from(h(g,this)),o=new Map,s=new Map;for(let e=0;e<t.length;e++){const n=t[e],{className:i,headerAttributes:r,createLayers:l,selectionType:a}=n.settings;h(m,this).has(n)||(h(m,this).add(n),n.addLocalHook("destroy",(()=>this.destroyBorders(n))));const c=this.getBorderInstance(n);if(n.isEmpty()){null==c||c.disappear();continue}if(i){h(f,this).setActiveSelection(n).scan().forEach((e=>{if(o.has(e)){const t=o.get(e);t.has(i)&&!0===l?t.set(i,t.get(i)+1):t.set(i,1)}else o.set(e,new Map([[i,1]]));r&&(s.has(e)||s.set(e,[]),"TH"===e.nodeName&&s.get(e).push(...r))}))}const u=n.getCorners();h(d,this).getSetting("onBeforeDrawBorders",u,a),null==c||c.appear(u)}o.forEach(((e,t)=>{var o;const s=Array.from(e).map((e=>{let[t,o]=e;return 1===o?t:[t,...Array.from({length:o-1},((e,o)=>`${t}-${o+1}`))]})).flat();s.forEach((e=>h(p,this).get(h(d,this)).add(e))),(0,n.addClass)(t,s),"TD"===t.nodeName&&Array.isArray(null===(o=h(g,this).options)||void 0===o?void 0:o.cellAttributes)&&(0,n.setAttribute)(t,h(g,this).options.cellAttributes)})),Array.from(s.keys()).forEach((e=>{(0,n.setAttribute)(e,[...s.get(e)])}))}}},51785:(e,t,o)=>{"use strict";t.__esModule=!0,o(67834),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var s=o(9893);function n(e,t,o){i(e,t),t.set(e,o)}function i(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function r(e,t){return e.get(a(e,t))}function l(e,t,o){return e.set(a(e,t),o),o}function a(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var h=new WeakMap,c=new WeakMap,u=new WeakSet;function d(e){const{wtTable:t}=r(c,this),o=t.getRenderedRowsCount(),s=t.getRenderedColumnsCount();for(let n=0;n<o;n+=1){const o=t.rowFilter.renderedToSource(n);for(let n=0;n<s;n+=1)e(o,t.columnFilter.renderedToSource(n))}}t.SelectionScanner=class{constructor(){var e,t;i(e=this,t=u),t.add(e),n(this,h,void 0),n(this,c,void 0)}setActiveOverlay(e){return l(c,this,e),this}setActiveSelection(e){return l(h,this,e),this}scan(){const e=r(h,this).settings.selectionType,t=new Set;return"active-header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"area"===e?this.scanCellsRange((e=>t.add(e))):"focus"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e))),this.scanCellsRange((e=>t.add(e)))):"fill"===e?this.scanCellsRange((e=>t.add(e))):"header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"row"===e?(this.scanRowsInHeadersRange((e=>t.add(e))),this.scanRowsInCellsRange((e=>t.add(e)))):"column"===e&&(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanColumnsInCellsRange((e=>t.add(e)))),t}scanColumnsInHeadersRange(e){const[t,o,s,n]=r(h,this).getCorners(),{wtTable:i}=r(c,this),l=i.getRenderedColumnsCount(),a=i.getColumnHeadersCount();let u=0;for(let d=-i.getRowHeadersCount();d<l;d++){const l=i.columnFilter.renderedToSource(d);if(!(l<o||l>n)){for(let d=-a;d<0;d++){if(d<t||d>s)continue;const g=d+a;let f=i.getColumnHeader(l,g);const p=r(c,this).getSetting("onBeforeHighlightingColumnHeader",l,g,{selectionType:r(h,this).settings.selectionType,columnCursor:u,selectionWidth:n-o+1});null!==p&&(p!==l&&(f=i.getColumnHeader(p,g)),e(f))}u+=1}}}scanRowsInHeadersRange(e){const[t,o,s,n]=r(h,this).getCorners(),{wtTable:i}=r(c,this),l=i.getRenderedRowsCount(),a=i.getRowHeadersCount();let u=0;for(let d=-i.getColumnHeadersCount();d<l;d++){const l=i.rowFilter.renderedToSource(d);if(!(l<t||l>s)){for(let d=-a;d<0;d++){if(d<o||d>n)continue;const g=d+a;let f=i.getRowHeader(l,g);const p=r(c,this).getSetting("onBeforeHighlightingRowHeader",l,g,{selectionType:r(h,this).settings.selectionType,rowCursor:u,selectionHeight:s-t+1});null!==p&&(p!==l&&(f=i.getRowHeader(p,g)),e(f))}u+=1}}}scanCellsRange(e){const[t,o,n,i]=r(h,this).getCorners(),{wtTable:l}=r(c,this);a(u,this,d).call(this,((a,u)=>{if(a>=t&&a<=n&&u>=o&&u<=i){const t=l.getCell(r(c,this).createCellCoords(a,u)),o=r(c,this).getSetting("onAfterDrawSelection",a,u,r(h,this).settings.layerLevel);"string"==typeof o&&(0,s.addClass)(t,o),e(t)}}))}scanRowsInCellsRange(e){const[t,,o]=r(h,this).getCorners(),{wtTable:s}=r(c,this);a(u,this,d).call(this,((n,i)=>{if(n>=t&&n<=o){const t=s.getCell(r(c,this).createCellCoords(n,i));e(t)}}))}scanColumnsInCellsRange(e){const[,t,,o]=r(h,this).getCorners(),{wtTable:s}=r(c,this);a(u,this,d).call(this,((n,i)=>{if(i>=t&&i<=o){const t=s.getCell(r(c,this).createCellCoords(n,i));e(t)}}))}}},8313:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(13911),i=s(o(63870));class r{constructor(e,t){this.settings=e,this.cellRange=t||null}isEmpty(){return null===this.cellRange}add(e){return this.isEmpty()?this.cellRange=this.settings.createCellRange(e):this.cellRange.expand(e),this}replace(e,t){if(!this.isEmpty()){if(this.cellRange.from.isEqual(e))return this.cellRange.from=t,!0;if(this.cellRange.to.isEqual(e))return this.cellRange.to=t,!0}return!1}clear(){return this.cellRange=null,this}getCorners(){const e=this.cellRange.getOuterTopStartCorner(),t=this.cellRange.getOuterBottomEndCorner();return[e.row,e.col,t.row,t.col]}destroy(){this.runLocalHooks("destroy")}}(0,n.mixin)(r,i.default);t.default=r},47241:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(9893),r=o(13911);t.default=class{constructor(e){(0,n.default)(this,"settings",{}),(0,n.default)(this,"defaults",Object.freeze(this.getDefaults())),(0,r.objectEach)(this.defaults,((t,o)=>{if(void 0!==e[o])this.settings[o]=e[o];else{if(void 0===t)throw new Error(`A required setting "${o}" was not provided`);this.settings[o]=t}}))}getDefaults(){return{facade:void 0,table:void 0,isDataViewInstance:!0,externalRowCalculator:!1,stretchH:"none",currentRowClassName:null,currentColumnClassName:null,preventOverflow:()=>!1,preventWheel:!1,data:void 0,freezeOverlays:!1,fixedColumnsStart:0,fixedRowsTop:0,fixedRowsBottom:0,shouldRenderInlineStartOverlay:()=>this.getSetting("fixedColumnsStart")>0||this.getSetting("rowHeaders").length>0,shouldRenderTopOverlay:()=>this.getSetting("fixedRowsTop")>0||this.getSetting("columnHeaders").length>0,shouldRenderBottomOverlay:()=>this.getSetting("fixedRowsBottom")>0,minSpareRows:0,rowHeaders:()=>[],columnHeaders:()=>[],totalRows:void 0,totalColumns:void 0,cellRenderer:(e,t,o)=>{const s=this.getSetting("data",e,t);(0,i.fastInnerText)(o,null==s?"":s)},columnWidth(){},rowHeight(){},rowHeightByOverlayName(){},defaultRowHeight:23,defaultColumnWidth:50,selections:null,hideBorderOnMouseDownOver:!1,viewportRowCalculatorOverride:null,viewportColumnCalculatorOverride:null,onCellMouseDown:null,onCellContextMenu:null,onCellMouseOver:null,onCellMouseOut:null,onCellMouseUp:null,onCellDblClick:null,onCellCornerMouseDown:null,onCellCornerDblClick:null,beforeDraw:null,onDraw:null,onBeforeRemoveCellClassNames:null,onAfterDrawSelection:null,onBeforeDrawBorders:null,onBeforeViewportScrollHorizontally:e=>e,onBeforeViewportScrollVertically:e=>e,onScrollHorizontally:null,onScrollVertically:null,onBeforeTouchScroll:null,onAfterMomentumScroll:null,onBeforeStretchingColumnWidth:e=>e,onModifyRowHeaderWidth:null,onModifyGetCellCoords:null,onBeforeHighlightingRowHeader:e=>e,onBeforeHighlightingColumnHeader:e=>e,onWindowResize:null,onContainerElementResize:null,renderAllColumns:!1,renderAllRows:!1,groups:!1,rowHeaderWidth:null,columnHeaderHeight:null,headerClassName:null,rtlMode:!1,ariaTags:!0}}update(e,t){return void 0===t?(0,r.objectEach)(e,((e,t)=>{this.settings[t]=e})):this.settings[e]=t,this}getSetting(e,t,o,s,n){return"function"==typeof this.settings[e]?this.settings[e](t,o,s,n):void 0!==t&&Array.isArray(this.settings[e])?this.settings[e][t]:this.settings[e]}getSettingPure(e){return this.settings[e]}has(e){return!!this.settings[e]}}},63646:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=o(9893),r=o(78832),l=s(o(16979)),a=s(o(39277)),h=o(20524),c=s(o(87736)),u=s(o(46372)),d=o(34009),g=o(92692);t.default=class{constructor(e,t,o,s,r){(0,n.default)(this,"wtSettings",null),(0,n.default)(this,"domBindings",void 0),(0,n.default)(this,"TBODY",null),(0,n.default)(this,"THEAD",null),(0,n.default)(this,"COLGROUP",null),(0,n.default)(this,"hasTableHeight",!0),(0,n.default)(this,"hasTableWidth",!0),(0,n.default)(this,"isTableVisible",!1),(0,n.default)(this,"tableOffset",0),(0,n.default)(this,"holderOffset",0),this.domBindings=o,this.isMaster="master"===r,this.name=r,this.dataAccessObject=e,this.facadeGetter=t,this.wtSettings=s,this.instance=this.dataAccessObject.wot,this.wot=this.dataAccessObject.wot,this.TABLE=o.rootTable,(0,i.removeTextNodes)(this.TABLE),this.spreader=this.createSpreader(this.TABLE),this.hider=this.createHider(this.spreader),this.holder=this.createHolder(this.hider),this.wtRootElement=this.holder.parentNode,this.isMaster&&this.alignOverlaysWithTrimmingContainer(),this.fixTableDomTree(),this.rowFilter=null,this.columnFilter=null,this.correctHeaderWidth=!1;const l=this.wtSettings.getSettingPure("rowHeaderWidth");this.wtSettings.update("rowHeaderWidth",(()=>this._modifyRowHeaderWidth(l))),this.rowUtils=new u.default(this.dataAccessObject,this.wtSettings),this.columnUtils=new c.default(this.dataAccessObject,this.wtSettings),this.tableRenderer=new h.Renderer({TABLE:this.TABLE,THEAD:this.THEAD,COLGROUP:this.COLGROUP,TBODY:this.TBODY,rowUtils:this.rowUtils,columnUtils:this.columnUtils,cellRenderer:this.wtSettings.getSettingPure("cellRenderer")})}is(e){return this.name===e}fixTableDomTree(){const e=this.domBindings.rootDocument;this.TBODY=this.TABLE.querySelector("tbody"),this.TBODY||(this.TBODY=e.createElement("tbody"),this.TABLE.appendChild(this.TBODY)),this.THEAD=this.TABLE.querySelector("thead"),this.THEAD||(this.THEAD=e.createElement("thead"),this.TABLE.insertBefore(this.THEAD,this.TBODY)),this.COLGROUP=this.TABLE.querySelector("colgroup"),this.COLGROUP||(this.COLGROUP=e.createElement("colgroup"),this.TABLE.insertBefore(this.COLGROUP,this.THEAD))}createSpreader(e){const t=e.parentNode;let o;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(o=this.domBindings.rootDocument.createElement("div"),o.className="wtSpreader",t&&t.insertBefore(o,e),o.appendChild(e)),o.style.position="relative",this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o,[(0,g.A11Y_PRESENTATION)()]),o}createHider(e){const t=e.parentNode;let o;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(o=this.domBindings.rootDocument.createElement("div"),o.className="wtHider",t&&t.insertBefore(o,e),o.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o,[(0,g.A11Y_PRESENTATION)()]),o}createHolder(e){const t=e.parentNode;let o;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(o=this.domBindings.rootDocument.createElement("div"),o.style.position="relative",o.className="wtHolder",t&&t.insertBefore(o,e),this.isMaster&&(o.parentNode.className+="ht_master handsontable",o.parentNode.setAttribute("dir",this.wtSettings.getSettingPure("rtlMode")?"rtl":"ltr"),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o.parentNode,[(0,g.A11Y_PRESENTATION)()])),o.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o,[(0,g.A11Y_PRESENTATION)()]),o}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,{wtOverlays:o,wtViewport:s}=this.dataAccessObject,n=t.getSetting("totalRows"),r=t.getSetting("totalColumns"),h=t.getSetting("rowHeaders"),c=h.length,u=t.getSetting("columnHeaders"),g=u.length;let f=e;if(this.isMaster&&(o.beforeDraw(),this.holderOffset=(0,i.offset)(this.holder),f=s.createCalculators(f),c&&!t.getSetting("fixedColumnsStart"))){const e=o.inlineStartOverlay.getScrollPosition(),t=this.correctHeaderWidth;this.correctHeaderWidth=0!==e,t!==this.correctHeaderWidth&&(f=!1)}if(f)this.isMaster&&o.refresh(!0);else{this.isMaster?this.tableOffset=(0,i.offset)(this.TABLE):this.tableOffset=this.dataAccessObject.parentTableOffset;const e=n>0?this.getFirstRenderedRow():0,t=r>0?this.getFirstRenderedColumn():0;this.rowFilter=new a.default(e,n,g),this.columnFilter=new l.default(t,r,c);let f=!0;if(this.isMaster){this.alignOverlaysWithTrimmingContainer();const e={};this.wtSettings.getSetting("beforeDraw",!0,e),f=!0!==e.skipRender}if(f){let e;if(this.tableRenderer.setHeaderContentRenderers(h,u),(this.is(d.CLONE_BOTTOM)||this.is(d.CLONE_BOTTOM_INLINE_START_CORNER))&&this.tableRenderer.setHeaderContentRenderers(h,[]),this.resetOversizedRows(),this.tableRenderer.setActiveOverlayName(this.name).setViewportSize(this.getRenderedRowsCount(),this.getRenderedColumnsCount()).setFilters(this.rowFilter,this.columnFilter).render(),this.isMaster&&(e=this.dataAccessObject.workspaceWidth,s.containerWidth=null,this.markOversizedColumnHeaders()),this.adjustColumnHeaderHeights(),(this.isMaster||this.is(d.CLONE_BOTTOM))&&this.markOversizedRows(),this.isMaster){this.wtSettings.getSetting("externalRowCalculator")||s.createVisibleCalculators(),o.refresh(!1),o.applyToDOM();const t=(0,i.outerWidth)(this.hider),n=(0,i.outerWidth)(this.TABLE);0!==t&&n!==t&&(this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),e!==s.getWorkspaceWidth()&&(s.containerWidth=null,this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),this.wtSettings.getSetting("onDraw",!0)}else this.is(d.CLONE_BOTTOM)&&this.dataAccessObject.cloneSource.wtOverlays.adjustElementsSize()}}let p=!1;return this.isMaster&&(p=o.topOverlay.resetFixedPosition(),o.bottomOverlay.clone&&(p=o.bottomOverlay.resetFixedPosition()||p),p=o.inlineStartOverlay.resetFixedPosition()||p,o.topInlineStartCornerOverlay&&o.topInlineStartCornerOverlay.resetFixedPosition(),o.bottomInlineStartCornerOverlay&&o.bottomInlineStartCornerOverlay.clone&&o.bottomInlineStartCornerOverlay.resetFixedPosition()),p?(o.refreshAll(),o.adjustElementsSize()):this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(f),this.isMaster&&o.afterDraw(),this.dataAccessObject.drawn=!0,this}markIfOversizedColumnHeader(e){const t=this.columnFilter.renderedToSource(e);let o=this.wtSettings.getSetting("columnHeaders").length;const s=this.wtSettings.getSetting("defaultRowHeight");let n,r,l;const a=this.wtSettings.getSetting("columnHeaderHeight")||[];for(;o;)o-=1,n=this.getColumnHeaderHeight(o),r=this.getColumnHeader(t,o),r&&(l=(0,i.innerHeight)(r),(!n&&s<l||n<l)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=l),Array.isArray(a)?null!==a[o]&&void 0!==a[o]&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=a[o]):isNaN(a)||(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=a),this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]<(a[o]||a)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=a[o]||a))}adjustColumnHeaderHeights(){const{wtSettings:e}=this,t=this.THEAD.childNodes,o=this.dataAccessObject.wtViewport.oversizedColumnHeaders;for(let s=0,n=e.getSetting("columnHeaders").length;s<n;s++)if(o[s]){if(!t[s]||0===t[s].childNodes.length)return;t[s].childNodes[0].style.height=`${o[s]}px`}}resetOversizedRows(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject;if((this.isMaster||this.is(d.CLONE_BOTTOM))&&!e.getSetting("externalRowCalculator")){const e=this.getRenderedRowsCount();for(let o=0;o<e;o++){const e=this.rowFilter.renderedToSource(o);t.oversizedRows&&t.oversizedRows[e]&&(t.oversizedRows[e]=void 0)}}}getCell(e){let t=e.row,o=e.col;const s=this.wtSettings.getSetting("onModifyGetCellCoords",t,o);if(s&&Array.isArray(s)&&([t,o]=s),this.isRowBeforeRenderedRows(t))return-1;if(this.isRowAfterRenderedRows(t))return-2;if(this.isColumnBeforeRenderedColumns(o))return-3;if(this.isColumnAfterRenderedColumns(o))return-4;const n=this.getRow(t);if(!n&&t>=0)throw new Error("TR was expected to be rendered but is not");const i=n.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(o)];if(!i&&o>=0)throw new Error("TD or TH was expected to be rendered but is not");return i}getRow(e){let t=null,o=null;var s,n;e<0?(t=null===(s=this.rowFilter)||void 0===s?void 0:s.sourceRowToVisibleColHeadedRow(e),o=this.THEAD):(t=null===(n=this.rowFilter)||void 0===n?void 0:n.sourceToRendered(e),o=this.TBODY);return void 0!==t&&void 0!==o&&(!(o.childNodes.length<t+1)&&o.childNodes[t])}getColumnHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const o=this.THEAD.childNodes[t];return null==o?void 0:o.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e)]}getColumnHeaders(e){const t=[],o=this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e);return this.THEAD.childNodes.forEach((e=>{const s=e.childNodes[o];s&&t.push(s)})),t}getRowHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t>=this.wtSettings.getSetting("rowHeaders").length)return;const o=this.rowFilter.sourceToRendered(e),s=o<0?this.rowFilter.sourceRowToVisibleColHeadedRow(e):o,n=(o<0?this.THEAD:this.TBODY).childNodes[s];return null==n?void 0:n.childNodes[t]}getRowHeaders(e){const t=[],o=this.wtSettings.getSetting("rowHeaders").length;for(let s=0;s<o;s++){const o=this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)],n=null==o?void 0:o.childNodes[s];n&&t.push(n)}return t}getCoords(e){let t=e;if("TD"!==t.nodeName&&"TH"!==t.nodeName&&(t=(0,i.closest)(t,["TD","TH"])),null===t)return null;const o=t.parentNode,s=o.parentNode;let n=(0,i.index)(o),r=t.cellIndex;if((0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_TOP,t,this.wtRootElement))"THEAD"===s.nodeName&&(n-=s.childNodes.length);else if((0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM,t,this.wtRootElement)){n=this.wtSettings.getSetting("totalRows")-s.childNodes.length+n}else n=s===this.THEAD?this.rowFilter.visibleColHeadedRowToSourceRow(n):this.rowFilter.renderedToSource(n);return r=(0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_INLINE_START,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)?this.columnFilter.offsettedTH(r):this.columnFilter.visibleRowHeadedColumnToSourceColumn(r),this.wot.createCellCoords(n,r)}markOversizedRows(){if(this.wtSettings.getSetting("externalRowCalculator"))return;let e=this.TBODY.childNodes.length;let t,o,s,n,r;if(e*this.wtSettings.getSetting("defaultRowHeight")!==(0,i.innerHeight)(this.TBODY)-1||this.wtSettings.getSetting("fixedRowsBottom"))for(;e;)e-=1,s=this.rowFilter.renderedToSource(e),t=this.getRowHeight(s),n=this.getTrForRow(s),r=n.querySelector("th"),o=r?(0,i.innerHeight)(r):(0,i.innerHeight)(n)-1,(!t&&this.wtSettings.getSetting("defaultRowHeight")<o||t<o)&&(o+=1,this.dataAccessObject.wtViewport.oversizedRows[s]=o)}getTrForRow(e){return this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)]}isColumnHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("rowHeaders").length;return Math.abs(e)<=t}isRowHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("columnHeaders").length;return Math.abs(e)<=t}isRowBeforeRenderedRows(e){const t=this.getFirstRenderedRow();return e<0&&t<=0?!this.isRowHeaderRendered(e):e<t}isRowAfterRenderedRows(e){return e>this.getLastRenderedRow()}isColumnBeforeRenderedColumns(e){const t=this.getFirstRenderedColumn();return e<0&&t<=0?!this.isColumnHeaderRendered(e):e<t}isColumnAfterRenderedColumns(e){return this.columnFilter&&e>this.getLastRenderedColumn()}isColumnAfterViewport(e){return this.columnFilter&&e>this.getLastVisibleColumn()}isRowAfterViewport(e){return this.rowFilter&&e>this.getLastVisibleRow()}isColumnBeforeViewport(e){return this.columnFilter&&this.columnFilter.sourceToRendered(e)<0&&e>=0}isLastRowFullyVisible(){return this.getLastVisibleRow()===this.getLastRenderedRow()}isLastColumnFullyVisible(){return this.getLastVisibleColumn()===this.getLastRenderedColumn()}allRowsInViewport(){return this.wtSettings.getSetting("totalRows")===this.getVisibleRowsCount()}allColumnsInViewport(){return this.wtSettings.getSetting("totalColumns")===this.getVisibleColumnsCount()}getRowHeight(e){return this.rowUtils.getHeight(e)}getColumnHeaderHeight(e){return this.columnUtils.getHeaderHeight(e)}getColumnWidth(e){return this.columnUtils.getWidth(e)}getStretchedColumnWidth(e){return this.columnUtils.getStretchedColumnWidth(e)}hasDefinedSize(){return this.hasTableHeight&&this.hasTableWidth}getWidth(){return(0,i.outerWidth)(this.TABLE)}getHeight(){return(0,i.outerHeight)(this.TABLE)}getTotalWidth(){const e=(0,i.outerWidth)(this.hider);return 0!==e?e:this.getWidth()}getTotalHeight(){const e=(0,i.outerHeight)(this.hider);return 0!==e?e:this.getHeight()}isVisible(){return(0,i.isVisible)(this.TABLE)}_modifyRowHeaderWidth(e){let t=(0,r.isFunction)(e)?e():null;return Array.isArray(t)?(t=[...t],t[t.length-1]=this._correctRowHeaderWidth(t[t.length-1])):t=this._correctRowHeaderWidth(t),t}_correctRowHeaderWidth(e){let t=e;return"number"!=typeof e&&(t=this.wtSettings.getSetting("defaultColumnWidth")),this.correctHeaderWidth&&(t+=1),t}}},31542:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(58166)),r=s(o(17800)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_BOTTOM)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},93638:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(58166)),r=s(o(85449)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_BOTTOM_INLINE_START_CORNER)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},14658:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(95374)),r=s(o(85449)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_INLINE_START)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},26235:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(9893),i=s(o(63646)),r=s(o(95374)),l=s(o(17800)),a=o(13911);class h extends i.default{constructor(e,t,o,s){super(e,t,o,s,"master")}alignOverlaysWithTrimmingContainer(){const e=(0,n.getTrimmingContainer)(this.wtRootElement),{rootWindow:t}=this.domBindings;if(e===t){this.wtSettings.getSetting("preventOverflow")||(this.holder.style.overflow="visible",this.wtRootElement.style.overflow="visible")}else{const o=e.parentElement,s=(0,n.getStyle)(e,"height",t),i=(0,n.getStyle)(e,"overflow",t),r=this.holder.style,{scrollWidth:l,scrollHeight:a}=e;let h=e.offsetWidth,c=e.offsetHeight;if(o&&["auto","hidden","scroll"].includes(i)){const s=e.cloneNode(!1);s.style.overflow="auto",s.style.position="absolute",e.nextElementSibling?o.insertBefore(s,e.nextElementSibling):o.appendChild(s);const i=parseInt((0,n.getComputedStyle)(s,t).height,10);o.removeChild(s),0===i&&(c=0)}c=Math.min(c,a),r.height="auto"===s?"auto":`${c}px`,h=Math.min(h,l),r.width=`${h}px`,r.overflow="",this.hasTableHeight="auto"===r.height||c>0,this.hasTableWidth=h>0}this.isTableVisible=(0,n.isVisible)(this.TABLE)}markOversizedColumnHeaders(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject,o="master",s=e.getSetting("columnHeaders").length;if(s&&!t.hasOversizedColumnHeadersMarked[o]){const n=e.getSetting("rowHeaders").length,i=this.getRenderedColumnsCount();for(let e=0;e<s;e++)for(let e=-1*n;e<i;e++)this.markIfOversizedColumnHeader(e);t.hasOversizedColumnHeadersMarked[o]=!0}}}(0,a.mixin)(h,r.default),(0,a.mixin)(h,l.default);t.default=h},17800:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedColumn(){const e=this.dataAccessObject.startColumnRendered;return null===e?-1:e},getFirstVisibleColumn(){const e=this.dataAccessObject.startColumnVisible;return null===e?-1:e},getFirstPartiallyVisibleColumn(){const e=this.dataAccessObject.startColumnPartiallyVisible;return null===e?-1:e},getLastRenderedColumn(){const e=this.dataAccessObject.endColumnRendered;return null===e?-1:e},getLastVisibleColumn(){const e=this.dataAccessObject.endColumnVisible;return null===e?-1:e},getLastPartiallyVisibleColumn(){const e=this.dataAccessObject.endColumnPartiallyVisible;return null===e?-1:e},getRenderedColumnsCount(){return this.dataAccessObject.countColumnsRendered},getVisibleColumnsCount(){return this.dataAccessObject.countColumnsVisible},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","calculatedColumns",{writable:!1,enumerable:!1});t.default=n},95374:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedRow(){const e=this.dataAccessObject.startRowRendered;return null===e?-1:e},getFirstVisibleRow(){const e=this.dataAccessObject.startRowVisible;return null===e?-1:e},getFirstPartiallyVisibleRow(){const e=this.dataAccessObject.startRowPartiallyVisible;return null===e?-1:e},getLastRenderedRow(){const e=this.dataAccessObject.endRowRendered;return null===e?-1:e},getLastVisibleRow(){const e=this.dataAccessObject.endRowVisible;return null===e?-1:e},getLastPartiallyVisibleRow(){const e=this.dataAccessObject.endRowPartiallyVisible;return null===e?-1:e},getRenderedRowsCount(){return this.dataAccessObject.countRowsRendered},getVisibleRowsCount(){return this.dataAccessObject.countRowsVisible},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","calculatedRows",{writable:!1,enumerable:!1});t.default=n},85449:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedColumn(){return 0===this.wtSettings.getSetting("totalColumns")?-1:0},getFirstVisibleColumn(){return this.getFirstRenderedColumn()},getFirstPartiallyVisibleColumn(){return this.getFirstRenderedColumn()},getLastRenderedColumn(){return this.getRenderedColumnsCount()-1},getLastVisibleColumn(){return this.getLastRenderedColumn()},getLastPartiallyVisibleColumn(){return this.getLastRenderedColumn()},getRenderedColumnsCount(){const e=this.wtSettings.getSetting("totalColumns");return Math.min(this.wtSettings.getSetting("fixedColumnsStart"),e)},getVisibleColumnsCount(){return this.getRenderedColumnsCount()},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","stickyColumnsStart",{writable:!1,enumerable:!1});t.default=n},58166:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedRow(){const e=this.wtSettings.getSetting("totalRows"),t=this.wtSettings.getSetting("fixedRowsBottom"),o=e-t;return 0===e||0===t?-1:o<0?0:o},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.wtSettings.getSetting("totalRows")-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsBottom"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount:()=>0};(0,s.defineGetter)(n,"MIXIN_NAME","stickyRowsBottom",{writable:!1,enumerable:!1});t.default=n},61138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedRow(){return 0===this.wtSettings.getSetting("totalRows")?-1:0},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.getRenderedRowsCount()-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsTop"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","stickyRowsTop",{writable:!1,enumerable:!1});t.default=n},61234:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(61138)),r=s(o(17800)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_TOP)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},60882:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(61138)),r=s(o(85449)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_TOP_INLINE_START_CORNER)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},87736:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(9893),r=o(61311);t.default=class{constructor(e,t){(0,n.default)(this,"dataAccessObject",void 0),(0,n.default)(this,"wtSettings",void 0),(0,n.default)(this,"headerWidths",new Map),(0,n.default)(this,"stretching",void 0),this.dataAccessObject=e,this.wtSettings=t,this.stretching=new r.ColumnStretching({totalColumns:()=>this.wtSettings.getSetting("totalColumns"),stretchMode:()=>this.wtSettings.getSetting("stretchH"),stretchingColumnWidthFn:(e,t)=>this.wtSettings.getSetting("onBeforeStretchingColumnWidth",e,t),columnWidthFn:e=>this.dataAccessObject.wtTable.getColumnWidth(e)})}getWidth(e){return this.wtSettings.getSetting("columnWidth",e)||this.wtSettings.getSetting("defaultColumnWidth")}getStretchedColumnWidth(e){let t=this.getWidth(e);const o=this.stretching.getStretchedColumnWidth(e,t);return o&&(t=o),t}getHeaderHeight(e){let t=this.wtSettings.getSetting("defaultRowHeight");const o=this.dataAccessObject.wtViewport.oversizedColumnHeaders[e];return void 0!==o&&(t=t?Math.max(t,o):o),t}getHeaderWidth(e){return this.headerWidths.get(this.dataAccessObject.wtTable.columnFilter.sourceToRendered(e))}refreshStretching(){const{wtTable:e,wtViewport:t,cloneSource:o}=this.dataAccessObject,s=o?o.wtTable.holder:e.holder,n=s.offsetHeight<s.scrollHeight?(0,i.getScrollbarWidth)():0;this.stretching.refreshStretching(t.getViewportWidth()-n)}calculateWidths(){const{wtSettings:e}=this;let t=e.getSetting("rowHeaderWidth");if(this.refreshStretching(),t=e.getSetting("onModifyRowHeaderWidth",t),null!=t){const o=e.getSetting("rowHeaders").length,s=e.getSetting("defaultColumnWidth");for(let e=0;e<o;e++){let o=Array.isArray(t)?t[e]:t;o=null==o?s:o,this.headerWidths.set(e,o)}}}}},61311:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(26679);function r(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function l(e,t){return e.get(h(e,t))}function a(e,t,o){return e.set(h(e,t),o),o}function h(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var c=new WeakMap,u=new WeakMap,d=new WeakMap,g=new WeakMap,f=new WeakMap;t.ColumnStretching=class{constructor(e){let{totalColumns:t,stretchMode:o,stretchingColumnWidthFn:s,columnWidthFn:i}=e;(0,n.default)(this,"stretchAllRatio",0),(0,n.default)(this,"stretchLastWidth",0),(0,n.default)(this,"stretchAllColumnsWidth",[]),r(this,c,0),(0,n.default)(this,"needVerifyLastColumnWidth",!0),r(this,u,(()=>0)),r(this,d,(e=>e)),r(this,g,(e=>e)),r(this,f,(()=>"none")),a(u,this,t),a(f,this,o),a(d,this,null!=s?s:l(d,this)),a(g,this,null!=i?i:l(g,this))}refreshStretching(e){if("none"===l(f,this).call(this))return;this.stretchAllRatio=0,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0,this.stretchLastWidth=0,a(c,this,e);let t=0;for(let o=0;o<l(u,this).call(this);o++){const s=this._getColumnWidth(o),n=l(d,this).call(this,void 0,o);"number"==typeof n?e-=n:t+=s}const o=e-t;if("all"===l(f,this).call(this)&&o>0)this.stretchAllRatio=e/t,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0;else if("last"===l(f,this).call(this)&&e!==1/0){const e=this._getColumnWidth(l(u,this).call(this)-1),t=o+e;this.stretchLastWidth=t>=0?t:e}}getStretchedColumnWidth(e,t){let o=null;return"all"===l(f,this).call(this)&&0!==this.stretchAllRatio?o=this._getStretchedAllColumnWidth(e,t):"last"===l(f,this).call(this)&&0!==this.stretchLastWidth&&(o=this._getStretchedLastColumnWidth(e)),o}_getStretchedAllColumnWidth(e,t){let o=0;if(!this.stretchAllColumnsWidth[e]){const o=Math.round(t*this.stretchAllRatio),s=l(d,this).call(this,o,e);this.stretchAllColumnsWidth[e]=void 0===s?o:isNaN(s)?this._getColumnWidth(e):s}if(this.stretchAllColumnsWidth.length===l(u,this).call(this)&&this.needVerifyLastColumnWidth){this.needVerifyLastColumnWidth=!1;for(let e=0;e<this.stretchAllColumnsWidth.length;e++)o+=this.stretchAllColumnsWidth[e];o!==l(c,this)&&(this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length-1]+=l(c,this)-o)}return this.stretchAllColumnsWidth[e]}_getStretchedLastColumnWidth(e){return e===l(u,this).call(this)-1?this.stretchLastWidth:null}_getColumnWidth(e){let t=l(g,this).call(this,e);return isNaN(t)&&(t=i.DEFAULT_COLUMN_WIDTH),t}}},42715:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e){(0,n.default)(this,"nodeType",void 0),this.nodeType=e.toUpperCase()}setRootDocument(e){this.rootDocument=e}obtain(){return this.rootDocument.createElement(this.nodeType)}}},60739:(e,t)=>{"use strict";t.__esModule=!0;t.WORKING_SPACE_ALL=0,t.WORKING_SPACE_TOP=1,t.WORKING_SPACE_BOTTOM=2},21682:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(23225));t.OrderView=n.default;var i=s(o(47664));t.SharedOrderView=i.default},47664:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(23225));class i extends n.default{prependView(e){return this.sizeSet.prepend(e.sizeSet),e.sizeSet.append(this.sizeSet),this}appendView(e){return this.sizeSet.append(e.sizeSet),e.sizeSet.prepend(this.sizeSet),this}}t.default=i},23225:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(60739),r=s(o(83638));t.default=class{constructor(e,t,o){(0,n.default)(this,"rootNode",void 0),(0,n.default)(this,"nodesPool",void 0),(0,n.default)(this,"sizeSet",new r.default),(0,n.default)(this,"childNodeType",void 0),(0,n.default)(this,"visualIndex",0),(0,n.default)(this,"collectedNodes",[]),this.rootNode=e,this.nodesPool=t,this.childNodeType=o.toUpperCase()}setSize(e){return this.sizeSet.setSize(e),this}setOffset(e){return this.sizeSet.setOffset(e),this}isSharedViewSet(){return this.sizeSet.isShared()}getNode(e){return e<this.collectedNodes.length?this.collectedNodes[e]:null}getCurrentNode(){const e=this.collectedNodes.length;return e>0?this.collectedNodes[e-1]:null}getRenderedChildCount(){const{rootNode:e,sizeSet:t}=this;let o=0;if(this.isSharedViewSet()){let s=e.firstElementChild;for(;s;){if(s.tagName===this.childNodeType)o+=1;else if(t.isPlaceOn(i.WORKING_SPACE_TOP))break;s=s.nextElementSibling}}else o=e.childElementCount;return o}start(){this.collectedNodes.length=0,this.visualIndex=0;const{rootNode:e,sizeSet:t}=this,o=this.isSharedViewSet(),{nextSize:s}=t.getViewSize();let n=this.getRenderedChildCount();for(;n<s;){const s=this.nodesPool();!o||o&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)?e.appendChild(s):e.insertBefore(s,e.firstChild),n+=1}const r=o&&t.isPlaceOn(i.WORKING_SPACE_TOP);for(;n>s;)e.removeChild(r?e.firstChild:e.lastChild),n-=1}render(){const{rootNode:e,sizeSet:t}=this;let o=this.visualIndex;this.isSharedViewSet()&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)&&(o+=t.sharedSize.nextSize);let s=e.childNodes[o];if(s.tagName!==this.childNodeType){const t=this.nodesPool();e.replaceChild(t,s),s=t}this.collectedNodes.push(s),this.visualIndex+=1}end(){}}},92820:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(){(0,n.default)(this,"currentSize",0),(0,n.default)(this,"nextSize",0),(0,n.default)(this,"currentOffset",0),(0,n.default)(this,"nextOffset",0)}setSize(e){this.currentSize=this.nextSize,this.nextSize=e}setOffset(e){this.currentOffset=this.nextOffset,this.nextOffset=e}}},83638:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=s(o(92820)),r=o(60739);t.default=class{constructor(){(0,n.default)(this,"size",new i.default),(0,n.default)(this,"workingSpace",r.WORKING_SPACE_ALL),(0,n.default)(this,"sharedSize",null)}setSize(e){this.size.setSize(e)}setOffset(e){this.size.setOffset(e)}getViewSize(){return this.size}isShared(){return this.sharedSize instanceof i.default}isPlaceOn(e){return this.workingSpace===e}append(e){this.workingSpace=r.WORKING_SPACE_TOP,e.workingSpace=r.WORKING_SPACE_BOTTOM,this.sharedSize=e.getViewSize()}prepend(e){this.workingSpace=r.WORKING_SPACE_BOTTOM,e.workingSpace=r.WORKING_SPACE_TOP,this.sharedSize=e.getViewSize()}}},46372:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e,t){(0,n.default)(this,"dataAccessObject",void 0),(0,n.default)(this,"wtSettings",void 0),this.dataAccessObject=e,this.wtSettings=t}getHeight(e){let t=this.wtSettings.getSetting("rowHeight",e);const o=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==o&&(t=void 0===t?o:Math.max(t,o)),t}getHeightByOverlayName(e,t){let o=this.wtSettings.getSetting("rowHeightByOverlayName",e,t);const s=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==s&&(o=void 0===o?s:Math.max(o,s)),o}}},85690:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9893),n=o(13911),i=o(26679);t.default=class{constructor(e,t,o,s,n){this.dataAccessObject=e,this.wot=e.wot,this.instance=this.wot,this.domBindings=t,this.wtSettings=o,this.wtTable=n,this.oversizedRows=[],this.oversizedColumnHeaders=[],this.hasOversizedColumnHeadersMarked={},this.clientHeight=0,this.containerWidth=NaN,this.rowHeaderWidth=NaN,this.rowsVisibleCalculator=null,this.columnsVisibleCalculator=null,this.rowsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllRows")?new i.RenderedAllRowsCalculationType:new i.RenderedRowsCalculationType],["fullyVisible",()=>new i.FullyVisibleRowsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleRowsCalculationType]]),this.columnsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllColumns")?new i.RenderedAllColumnsCalculationType:new i.RenderedColumnsCalculationType],["fullyVisible",()=>new i.FullyVisibleColumnsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleColumnsCalculationType]]),this.eventManager=s,this.eventManager.addEventListener(this.domBindings.rootWindow,"resize",(()=>{this.clientHeight=this.getWorkspaceHeight()}))}getWorkspaceHeight(){const e=this.domBindings.rootDocument,t=this.dataAccessObject.topOverlayTrimmingContainer;let o=0;if(t===this.domBindings.rootWindow)o=e.documentElement.clientHeight;else{o=(0,s.outerHeight)(t)>0&&t.clientHeight>0?t.clientHeight:1/0}return o}getWorkspaceWidth(){const{wtSettings:e}=this,{rootDocument:t,rootWindow:o}=this.domBindings,n=this.dataAccessObject.inlineStartOverlayTrimmingContainer,i=t.documentElement.offsetWidth,r=e.getSetting("totalColumns"),l=e.getSetting("preventOverflow"),a=e.getSetting("rtlMode"),h=this.wtTable.TABLE.getBoundingClientRect(),c=i-(a?h.right-i:h.left);let u,d;if(l)return(0,s.outerWidth)(this.wtTable.wtRootElement);if(u=e.getSetting("freezeOverlays")?Math.min(c,i):Math.min(this.getContainerFillWidth(),c,i),n===o&&r>0&&this.sumColumnWidths(0,r-1)>u)return t.documentElement.clientWidth;if(n!==o&&(d=(0,s.getStyle)(this.dataAccessObject.inlineStartOverlayTrimmingContainer,"overflow",o),"scroll"===d||"hidden"===d||"auto"===d))return Math.max(u,n.clientWidth);const g=e.getSetting("stretchH");return"none"!==g&&g?u:Math.max(u,(0,s.outerWidth)(this.wtTable.TABLE))}hasVerticalScroll(){return this.wtTable.hider.offsetHeight>this.getWorkspaceHeight()}hasHorizontalScroll(){return this.wtTable.hider.offsetWidth>this.getWorkspaceWidth()}sumColumnWidths(e,t){let o=0,s=e;for(;s<t;)o+=this.wtTable.getColumnWidth(s),s+=1;return o}getContainerFillWidth(){if(this.containerWidth)return this.containerWidth;const e=this.wtTable.holder,t=this.domBindings.rootDocument.createElement("div");t.style.width="100%",t.style.height="1px",e.appendChild(t);const o=t.offsetWidth;return this.containerWidth=o,e.removeChild(t),o}getWorkspaceOffset(){return(0,s.offset)(this.wtTable.TABLE)}getColumnHeaderHeight(){return this.wtSettings.getSetting("columnHeaders").length?isNaN(this.columnHeaderHeight)&&(this.columnHeaderHeight=(0,s.outerHeight)(this.wtTable.THEAD)):this.columnHeaderHeight=0,this.columnHeaderHeight}getViewportHeight(){let e=this.getWorkspaceHeight();if(e===1/0)return e;const t=this.getColumnHeaderHeight();return t>0&&(e-=t),e}getRowHeaderWidth(){const e=this.wtSettings.getSetting("rowHeaderWidth"),t=this.wtSettings.getSetting("rowHeaders");if(e){this.rowHeaderWidth=0;for(let o=0,s=t.length;o<s;o++)this.rowHeaderWidth+=e[o]||e}if(isNaN(this.rowHeaderWidth))if(t.length){let e=this.wtTable.TABLE.querySelector("TH");this.rowHeaderWidth=0;for(let o=0,n=t.length;o<n;o++)e?(this.rowHeaderWidth+=(0,s.outerWidth)(e),e=e.nextSibling):this.rowHeaderWidth+=50}else this.rowHeaderWidth=0;return this.rowHeaderWidth=this.wtSettings.getSetting("onModifyRowHeaderWidth",this.rowHeaderWidth)||this.rowHeaderWidth,this.rowHeaderWidth}getViewportWidth(){const e=this.getWorkspaceWidth();if(e===1/0)return e;const t=this.getRowHeaderWidth();return t>0?e-t:e}createRowsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:o}=this;let n,r,l=this.getViewportHeight();this.rowHeaderWidth=NaN;let a=this.dataAccessObject.topScrollPosition-this.dataAccessObject.topParentOffset;const h=t.getSetting("fixedRowsTop"),c=t.getSetting("fixedRowsBottom"),u=t.getSetting("totalRows");return h&&a>=0&&(r=this.dataAccessObject.topOverlay.sumCellSizes(0,h),a+=r,l-=r),c&&this.dataAccessObject.bottomOverlay.clone&&(r=this.dataAccessObject.bottomOverlay.sumCellSizes(u-c,u),l-=r),n=o.holder.clientHeight===o.holder.offsetHeight?0:(0,s.getScrollbarWidth)(this.domBindings.rootDocument),new i.ViewportRowsCalculator({calculationTypes:e.map((e=>[e,this.rowsCalculatorTypes.get(e)()])),viewportHeight:l,scrollOffset:a,totalRows:t.getSetting("totalRows"),rowHeightFn:e=>o.getRowHeight(e),overrideFn:t.getSettingPure("viewportRowCalculatorOverride"),horizontalScrollbarHeight:n})}createColumnsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:o}=this;let n=this.getViewportWidth(),r=Math.abs(this.dataAccessObject.inlineStartScrollPosition)-this.dataAccessObject.inlineStartParentOffset;this.columnHeaderHeight=NaN;const l=t.getSetting("fixedColumnsStart");if(l&&r>=0){const e=this.dataAccessObject.inlineStartOverlay.sumCellSizes(0,l);r+=e,n-=e}return o.holder.clientWidth!==o.holder.offsetWidth&&(n-=(0,s.getScrollbarWidth)(this.domBindings.rootDocument)),new i.ViewportColumnsCalculator({calculationTypes:e.map((e=>[e,this.columnsCalculatorTypes.get(e)()])),viewportWidth:n,scrollOffset:r,totalColumns:t.getSetting("totalColumns"),columnWidthFn:e=>o.getColumnWidth(e),overrideFn:t.getSettingPure("viewportColumnCalculatorOverride"),inlineStartOffset:this.dataAccessObject.inlineStartParentOffset})}createCalculators(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,o=this.createRowsCalculator(),s=this.createColumnsCalculator();if(e&&!t.getSetting("renderAllRows")){const t=o.getResultsFor("fullyVisible");e=this.areAllProposedVisibleRowsAlreadyRendered(t)}if(e&&!t.getSetting("renderAllColumns")){const t=s.getResultsFor("fullyVisible");e=this.areAllProposedVisibleColumnsAlreadyRendered(t)}return e||(this.rowsRenderCalculator=o.getResultsFor("rendered"),this.columnsRenderCalculator=s.getResultsFor("rendered")),this.rowsVisibleCalculator=o.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=s.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=o.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=s.getResultsFor("partiallyVisible"),e}createVisibleCalculators(){const e=this.createRowsCalculator(["fullyVisible","partiallyVisible"]),t=this.createColumnsCalculator(["fullyVisible","partiallyVisible"]);this.rowsVisibleCalculator=e.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=t.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=e.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=t.getResultsFor("partiallyVisible")}areAllProposedVisibleRowsAlreadyRendered(e){if(!this.rowsVisibleCalculator)return!1;let{startRow:t,endRow:o}=e;if(null===t&&null===o){if(!e.isVisibleInTrimmingContainer)return!0;t=this.rowsPartiallyVisibleCalculator.startRow,o=this.rowsPartiallyVisibleCalculator.endRow}const{startRow:s,endRow:n}=this.rowsRenderCalculator;return!(t<s||t===s&&t>0)&&!(o>n||o===n&&o<this.wtSettings.getSetting("totalRows")-1)}areAllProposedVisibleColumnsAlreadyRendered(e){if(!this.columnsVisibleCalculator)return!1;let{startColumn:t,endColumn:o}=e;if(null===t&&null===o){if(!e.isVisibleInTrimmingContainer)return!0;t=this.columnsPartiallyVisibleCalculator.startColumn,o=this.columnsPartiallyVisibleCalculator.endColumn}const{startColumn:s,endColumn:n}=this.columnsRenderCalculator;return!(t<s||t===s&&t>0)&&!(o>n||o===n&&o<this.wtSettings.getSetting("totalColumns")-1)}resetHasOversizedColumnHeadersMarked(){(0,n.objectEach)(this.hasOversizedColumnHeadersMarked,((e,t,o)=>{o[t]=void 0}))}}},38715:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(6254),o(20512),o(23844),o(38594);var n=s(o(87789)),i=o(11015),r=o(71757),l=s(o(56937)),a=o(74174),h=o(34299),c=o(49676),u=o(52618),d=o(90);function g(e,t){const o=new n.default(e,t||{},i.rootInstanceSymbol);return o.init(),o}t.CellCoords=d.CellCoords,t.CellRange=d.CellRange,(0,h.registerCellType)(c.TextCellType),g.editors={BaseEditor:u.BaseEditor},g.Core=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new n.default(e,t,i.rootInstanceSymbol)},g.DefaultSettings=(0,r.metaSchemaFactory)(),g.hooks=l.default.getSingleton(),g.CellCoords=d.CellCoords,g.CellRange=d.CellRange,g.packageName="handsontable",g.buildDate="30/09/2024 12:35:03",g.version="14.6.0",g.languages={dictionaryKeys:a.dictionaryKeys,getLanguageDictionary:a.getLanguageDictionary,getLanguagesDictionaries:a.getLanguagesDictionaries,registerLanguageDictionary:a.registerLanguageDictionary,getTranslatedPhrase:a.getTranslatedPhrase};t.default=g},16531:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(80115),n=o(80827),i=o(93307);const r=t.CELL_TYPE="autocomplete";t.AutocompleteCellType={CELL_TYPE:r,editor:s.AutocompleteEditor,renderer:n.autocompleteRenderer,validator:i.autocompleteValidator}},95211:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(16531);t.AutocompleteCellType=s.AutocompleteCellType,t.CELL_TYPE=s.CELL_TYPE},29529:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(39626),n=o(80730);const i=t.CELL_TYPE="checkbox";t.CheckboxCellType={CELL_TYPE:i,editor:s.CheckboxEditor,renderer:n.checkboxRenderer}},55286:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(29529);t.CELL_TYPE=s.CELL_TYPE,t.CheckboxCellType=s.CheckboxCellType},40395:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(59127),n=o(48075),i=o(70323);const r=t.CELL_TYPE="date";t.DateCellType={CELL_TYPE:r,editor:s.DateEditor,renderer:n.dateRenderer,validator:i.dateValidator}},15347:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(40395);t.CELL_TYPE=s.CELL_TYPE,t.DateCellType=s.DateCellType},85769:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(50486),n=o(82070),i=o(7628);const r=t.CELL_TYPE="dropdown";t.DropdownCellType={CELL_TYPE:r,editor:s.DropdownEditor,renderer:n.dropdownRenderer,validator:i.dropdownValidator}},98614:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(85769);t.CELL_TYPE=s.CELL_TYPE,t.DropdownCellType=s.DropdownCellType},63297:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(56138),n=o(8218);const i=t.CELL_TYPE="handsontable";t.HandsontableCellType={CELL_TYPE:i,editor:s.HandsontableEditor,renderer:n.handsontableRenderer}},37334:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(63297);t.CELL_TYPE=s.CELL_TYPE,t.HandsontableCellType=s.HandsontableCellType},10426:(e,t,o)=>{"use strict";t.__esModule=!0,t.registerAllCellTypes=function(){(0,g.registerCellType)(s.AutocompleteCellType),(0,g.registerCellType)(n.CheckboxCellType),(0,g.registerCellType)(i.DateCellType),(0,g.registerCellType)(r.DropdownCellType),(0,g.registerCellType)(l.HandsontableCellType),(0,g.registerCellType)(a.NumericCellType),(0,g.registerCellType)(h.PasswordCellType),(0,g.registerCellType)(c.SelectCellType),(0,g.registerCellType)(u.TextCellType),(0,g.registerCellType)(d.TimeCellType)};var s=o(95211);t.AutocompleteCellType=s.AutocompleteCellType,t.AUTOCOMPLETE_TYPE=s.CELL_TYPE;var n=o(55286);t.CheckboxCellType=n.CheckboxCellType,t.CHECKBOX_TYPE=n.CELL_TYPE;var i=o(15347);t.DateCellType=i.DateCellType,t.DATE_TYPE=i.CELL_TYPE;var r=o(98614);t.DropdownCellType=r.DropdownCellType,t.DROPDOWN_TYPE=r.CELL_TYPE;var l=o(37334);t.HandsontableCellType=l.HandsontableCellType,t.HANDSONTABLE_TYPE=l.CELL_TYPE;var a=o(85506);t.NumericCellType=a.NumericCellType,t.NUMERIC_TYPE=a.CELL_TYPE;var h=o(1774);t.PasswordCellType=h.PasswordCellType,t.PASSWORD_TYPE=h.CELL_TYPE;var c=o(85183);t.SelectCellType=c.SelectCellType,t.SELECT_TYPE=c.CELL_TYPE;var u=o(49676);t.TextCellType=u.TextCellType,t.TEXT_TYPE=u.CELL_TYPE;var d=o(37574);t.TimeCellType=d.TimeCellType,t.TIME_TYPE=d.CELL_TYPE;var g=o(34299);t.registerCellType=g.registerCellType,t.getCellType=g.getCellType,t.getRegisteredCellTypeNames=g.getRegisteredCellTypeNames,t.getRegisteredCellTypes=g.getRegisteredCellTypes,t.hasCellType=g.hasCellType},85506:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(78625);t.CELL_TYPE=s.CELL_TYPE,t.NumericCellType=s.NumericCellType},78625:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(33972),n=o(89760),i=o(66640);const r=t.CELL_TYPE="numeric";t.NumericCellType={CELL_TYPE:r,editor:s.NumericEditor,renderer:n.numericRenderer,validator:i.numericValidator,dataType:"number"}},1774:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(2401);t.CELL_TYPE=s.CELL_TYPE,t.PasswordCellType=s.PasswordCellType},2401:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(46138),n=o(15074);const i=t.CELL_TYPE="password";t.PasswordCellType={CELL_TYPE:i,editor:s.PasswordEditor,renderer:n.passwordRenderer,copyable:!1}},34299:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.getCellType=function(e){if(!c(e))throw Error(`You declared cell type "${e}" as a string that is not mapped to a known object.\n                 Cell type must be an object or a string mapped to an object registered by\n                 "Handsontable.cellTypes.registerCellType" method`);return h(e)},t.registerCellType=function(e,t){"string"!=typeof e&&(e=(t=e).CELL_TYPE);const{editor:o,renderer:s,validator:n}=t;o&&(0,i.registerEditor)(e,o);s&&(0,r.registerRenderer)(e,s);n&&(0,l.registerValidator)(e,n);a(e,t)},o(67834);var n=s(o(71263)),i=o(84558),r=o(44288),l=o(51255);const{register:a,getItem:h,hasItem:c,getNames:u,getValues:d}=(0,n.default)("cellTypes");t.getRegisteredCellTypes=d,t.getRegisteredCellTypeNames=u,t.hasCellType=c},85183:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9771);t.CELL_TYPE=s.CELL_TYPE,t.SelectCellType=s.SelectCellType},9771:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(7507),n=o(31151);const i=t.CELL_TYPE="select";t.SelectCellType={CELL_TYPE:i,editor:s.SelectEditor,renderer:n.selectRenderer}},49676:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(18645);t.CELL_TYPE=s.CELL_TYPE,t.TextCellType=s.TextCellType},18645:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952),n=o(36748);const i=t.CELL_TYPE="text";t.TextCellType={CELL_TYPE:i,editor:s.TextEditor,renderer:n.textRenderer}},37574:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(4385);t.CELL_TYPE=s.CELL_TYPE,t.TimeCellType=s.TimeCellType},4385:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(14902),n=o(19698),i=o(51284);const r=t.CELL_TYPE="time";t.TimeCellType={CELL_TYPE:r,editor:s.TimeEditor,renderer:n.timeRenderer,validator:i.timeValidator}},87789:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.default=function(e,t){var o,s=this;let k=arguments.length>2&&void 0!==arguments[2]&&arguments[2],V=this;const F=new h.default(V);let W,B,U,j,Y,z,G=!0;(0,b.hasValidParameter)(k)&&(0,b.registerAsRootInstance)(this);this.rootElement=e,this.rootDocument=e.ownerDocument,this.rootWindow=this.rootDocument.defaultView,this.isDestroyed=!1,this.renderSuspendedCounter=0,this.executionSuspendedCounter=0;const $=null!==(o=null==t?void 0:t.layoutDirection)&&void 0!==o?o:"inherit",K=["rtl","ltr"].includes($)?$:this.rootWindow.getComputedStyle(this.rootElement).direction;this.rootElement.setAttribute("dir",K),this.isRtl=function(){return"rtl"===K},this.isLtr=function(){return!V.isRtl()},this.getDirectionFactor=function(){return V.isLtr()?1:-1},t.language=(0,M.getValidLanguageCode)(t.language);const X=new N.MetaManager(V,t,[N.DynamicCellMetaMod,N.ExtendMetaPropertiesMod]),q=X.getTableMeta(),Q=X.getGlobalMeta(),J=(0,P.createUniqueMap)();this.container=this.rootDocument.createElement("div"),this.renderCall=!1,e.insertBefore(this.container,e.firstChild),(0,b.isRootInstance)(this)&&(0,r._injectProductInfo)(t.licenseKey,e);this.guid=`ht_${(0,C.randomString)()}`,L.set(this.guid,this),this.columnIndexMapper=new R.IndexMapper,this.rowIndexMapper=new R.IndexMapper,this.columnIndexMapper.addLocalHook("indexesSequenceChange",(e=>{V.runHooks("afterColumnSequenceChange",e)})),this.rowIndexMapper.addLocalHook("indexesSequenceChange",(e=>{V.runHooks("afterRowSequenceChange",e)})),B=new E.default(V),this.rootElement.id&&"ht_"!==this.rootElement.id.substring(0,3)||(this.rootElement.id=this.guid);let Z=new I.Selection(q,{rowIndexMapper:V.rowIndexMapper,columnIndexMapper:V.columnIndexMapper,countCols:()=>V.countCols(),countRows:()=>V.countRows(),propToCol:e=>W.propToCol(e),isEditorOpened:()=>!!V.getActiveEditor()&&V.getActiveEditor().isOpened(),countRenderableColumns:()=>this.view.countRenderableColumns(),countRenderableRows:()=>this.view.countRenderableRows(),countRowHeaders:()=>this.countRowHeaders(),countColHeaders:()=>this.countColHeaders(),countRenderableRowsInRange:function(){return s.view.countRenderableRowsInRange(...arguments)},countRenderableColumnsInRange:function(){return s.view.countRenderableColumnsInRange(...arguments)},getShortcutManager:()=>V.getShortcutManager(),createCellCoords:(e,t)=>V._createCellCoords(e,t),createCellRange:(e,t,o)=>V._createCellRange(e,t,o),visualToRenderableCoords:e=>{const{row:t,col:o}=e;return V._createCellCoords(t>=0?V.rowIndexMapper.getRenderableFromVisualIndex(t):t,o>=0?V.columnIndexMapper.getRenderableFromVisualIndex(o):o)},renderableToVisualCoords:e=>{const{row:t,col:o}=e;return V._createCellCoords(t>=0?V.rowIndexMapper.getVisualFromRenderableIndex(t):t,o>=0?V.columnIndexMapper.getVisualFromRenderableIndex(o):o)},findFirstNonHiddenRenderableRow:(e,t)=>{const o=t>e?1:-1,s=Math.min(e,t),n=Math.max(e,t),i=V.rowIndexMapper.getNearestNotHiddenIndex(e,o);return null===i||1===o&&i>n||-1===o&&i<s?null:i>=0?V.rowIndexMapper.getRenderableFromVisualIndex(i):i},findFirstNonHiddenRenderableColumn:(e,t)=>{const o=t>e?1:-1,s=Math.min(e,t),n=Math.max(e,t),i=V.columnIndexMapper.getNearestNotHiddenIndex(e,o);return null===i||1===o&&i>n||-1===o&&i<s?null:i>=0?V.columnIndexMapper.getRenderableFromVisualIndex(i):i},isDisabledCellSelection:(e,t)=>e<0||t<0?V.getSettings().disableVisualSelection:V.getCellMeta(e,t).disableVisualSelection});this.selection=Z;const ee=e=>{let{hiddenIndexesChanged:t}=e;t&&this.selection.commit()};function te(e){const t=(0,O.normalizeLanguageCode)(e);(0,M.hasLanguageDictionary)(t)?(V.runHooks("beforeLanguageChange",t),Q.language=t,V.runHooks("afterLanguageChange",t)):(0,O.warnUserAboutLanguageRegistration)(e)}function oe(e,t){const o="className"===e?V.rootElement:V.table;if(G)(0,n.addClass)(o,t);else{let s=[],i=[];Q[e]&&(s=Array.isArray(Q[e])?Q[e]:(0,d.stringToArray)(Q[e])),t&&(i=Array.isArray(t)?t:(0,d.stringToArray)(t));const r=(0,d.getDifferenceOfArrays)(s,i),l=(0,d.getDifferenceOfArrays)(i,s);r.length&&(0,n.removeClass)(o,r),l.length&&(0,n.addClass)(o,l)}Q[e]=t}function se(){let e=!1;return{validatorsInQueue:0,valid:!0,addValidatorToQueue(){this.validatorsInQueue+=1,e=!1},removeValidatorFormQueue(){this.validatorsInQueue=this.validatorsInQueue-1<0?0:this.validatorsInQueue-1,this.checkIfQueueIsEmpty()},onQueueEmpty(){},checkIfQueueIsEmpty(){0===this.validatorsInQueue&&!1===e&&(e=!0,this.onQueueEmpty(this.valid))}}}function ne(e){const t=e.replace(",",".");return!1===isNaN(parseFloat(t))?parseFloat(t):e}function ie(e,t,o){if(!e.length)return void o();const s=V.getActiveEditor(),n=new se;let i=!0;n.onQueueEmpty=()=>{s&&i&&s.cancelChanges(),o()};for(let o=e.length-1;o>=0;o--){const[s,r,,l]=e[o],a=W.propToCol(r);let h;h=Number.isInteger(a)?V.getCellMeta(s,a):{...Object.getPrototypeOf(q),...q},"numeric"===h.type&&"string"==typeof l&&(0,v.isNumericLike)(l)&&(e[o][3]=ne(l)),V.getCellValidator(h)&&(n.addValidatorToQueue(),V.validateCell(e[o][3],h,function(t,o){return function(s){if("boolean"!=typeof s)throw new Error("Validation error: result is not boolean");!1===s&&!1===o.allowInvalid&&(i=!1,e.splice(t,1),o.valid=!0),n.removeValidatorFormQueue()}}(o,h),t))}n.checkIfQueueIsEmpty()}function re(e,t){for(let o=e.length-1;o>=0;o--){let s=!1;if(null!==e[o]){if(null!==e[o][2]&&void 0!==e[o][2]||null!==e[o][3]&&void 0!==e[o][3]){if(q.allowInsertRow)for(;e[o][0]>V.countRows()-1;){const{delta:e}=W.createRow(void 0,void 0,{source:t});if(0===e){s=!0;break}}if("array"===V.dataType&&(!q.columns||0===q.columns.length)&&q.allowInsertColumn)for(;W.propToCol(e[o][1])>V.countCols()-1;){const{delta:e}=W.createCol(void 0,void 0,{source:t});if(0===e){s=!0;break}}s||W.set(e[o][0],e[o][1],e[o][3])}}else e.splice(o,1)}const o=e.length>0;if(V.forceFullRender=!0,o){U.adjustRowsAndCols(),V.runHooks("beforeChangeRender",e,t),j.closeEditor(),V.view.render(),j.prepareEditor(),V.view.adjustElementsSize(),V.runHooks("afterChange",e,t||"edit");const o=V.getActiveEditor();o&&(0,r.isDefined)(o.refreshValue)&&o.refreshValue()}else V.view.render()}function le(e,t,o){return Array.isArray(e)?e:[[e,t,o]]}function ae(e,t){const o=V.getActiveEditor(),s=V.runHooks("beforeChange",e,t||"edit"),n=e.filter((e=>null!==e));return!1===s||0===n.length?(o&&o.cancelChanges(),[]):n}this.columnIndexMapper.addLocalHook("cacheUpdated",ee),this.rowIndexMapper.addLocalHook("cacheUpdated",ee),this.selection.addLocalHook("afterSetRangeEnd",((e,t)=>{const o=(0,c.createObjectPropListener)(!1),s=this.selection.getSelectedRange(),{from:i,to:r}=s.current(),l=s.size()-1;this.runHooks("afterSelection",i.row,i.col,r.row,r.col,o,l),this.runHooks("afterSelectionByProp",i.row,V.colToProp(i.col),r.row,V.colToProp(r.col),o,l),t&&(!o.isTouched()||o.isTouched()&&!o.value)&&z.scrollTo(e);const a=Z.isSelectedByRowHeader(),h=Z.isSelectedByColumnHeader();a&&h?(0,n.addClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]):a?((0,n.removeClass)(this.rootElement,"ht__selection--columns"),(0,n.addClass)(this.rootElement,"ht__selection--rows")):h?((0,n.removeClass)(this.rootElement,"ht__selection--rows"),(0,n.addClass)(this.rootElement,"ht__selection--columns")):(0,n.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),"shift"!==Z.getSelectionSource()&&j.closeEditor(null),V.view.render(),j.prepareEditor()})),this.selection.addLocalHook("beforeSetFocus",(e=>{this.runHooks("beforeSelectionFocusSet",e.row,e.col)})),this.selection.addLocalHook("afterSetFocus",(e=>{const t=(0,c.createObjectPropListener)(!1);this.runHooks("afterSelectionFocusSet",e.row,e.col,t),(!t.isTouched()||t.isTouched()&&!t.value)&&z.scrollTo(e),j.closeEditor(),V.view.render(),j.prepareEditor()})),this.selection.addLocalHook("afterSelectionFinished",(e=>{const t=e.length-1,{from:o,to:s}=e[t];this.runHooks("afterSelectionEnd",o.row,o.col,s.row,s.col,t),this.runHooks("afterSelectionEndByProp",o.row,V.colToProp(o.col),s.row,V.colToProp(s.col),t)})),this.selection.addLocalHook("afterIsMultipleSelection",(e=>{const t=this.runHooks("afterIsMultipleSelection",e.value);e.value&&(e.value=t)})),this.selection.addLocalHook("afterDeselect",(()=>{j.closeEditor(),V.view.render(),(0,n.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),this.runHooks("afterDeselect")})),this.selection.addLocalHook("beforeHighlightSet",(()=>this.runHooks("beforeSelectionHighlightSet"))).addLocalHook("beforeSetRangeStart",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSetRangeStart",...t)})).addLocalHook("beforeSetRangeStartOnly",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSetRangeStartOnly",...t)})).addLocalHook("beforeSetRangeEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSetRangeEnd",...t)})).addLocalHook("beforeSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSelectColumns",...t)})).addLocalHook("afterSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterSelectColumns",...t)})).addLocalHook("beforeSelectRows",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSelectRows",...t)})).addLocalHook("afterSelectRows",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterSelectRows",...t)})).addLocalHook("beforeModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("modifyTransformStart",...t)})).addLocalHook("afterModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterModifyTransformStart",...t)})).addLocalHook("beforeModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("modifyTransformFocus",...t)})).addLocalHook("afterModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterModifyTransformFocus",...t)})).addLocalHook("beforeModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("modifyTransformEnd",...t)})).addLocalHook("afterModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterModifyTransformEnd",...t)})).addLocalHook("beforeRowWrap",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeRowWrap",...t)})).addLocalHook("beforeColumnWrap",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeColumnWrap",...t)})).addLocalHook("insertRowRequire",(e=>this.alter("insert_row_above",e,1,"auto"))).addLocalHook("insertColRequire",(e=>this.alter("insert_col_start",e,1,"auto"))),U={alter(e,t){var o,s;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;const a=e=>{if(0===e.length)return[];const t=[...e];t.sort(((e,t)=>{let[o]=e,[s]=t;return o===s?0:o>s?1:-1}));return(0,d.arrayReduce)(t,((e,t)=>{let[o,s]=t;const n=e[e.length-1],[i,r]=n,l=i+r;if(o<=l){const e=Math.max(s-(l-o),0);n[1]+=e}else e.push([o,s]);return e}),[t[0]])};switch(e){case"insert_row_below":case"insert_row_above":const l=V.countSourceRows();if(q.maxRows===l)return;const h="insert_row_below"===e?"below":"above";t=null!==(o=t)&&void 0!==o?o:"below"===h?l:0;const{delta:c,startPhysicalIndex:u}=W.createRow(t,n,{source:i,mode:h});Z.shiftRows(V.toVisualRow(u),c);break;case"insert_col_start":case"insert_col_end":const g="insert_col_end"===e?"end":"start";t=null!==(s=t)&&void 0!==s?s:"end"===g?V.countSourceCols():0;const{delta:f,startPhysicalIndex:p}=W.createCol(t,n,{source:i,mode:g});if(f){if(Array.isArray(q.colHeaders)){const e=[V.toVisualColumn(p),0];e.length+=f,Array.prototype.splice.apply(q.colHeaders,e)}Z.shiftColumns(V.toVisualColumn(p),f)}break;case"remove_row":const m=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[o,s]=e;const n=(0,r.isEmpty)(o)?V.countRows()-1:Math.max(o-t,0);Number.isInteger(o)&&(o=Math.max(o-t,0));if(!W.removeRow(o,s,i))return;if(Z.isSelected()){const{row:e}=V.getSelectedRangeLast().highlight;e>=o&&e<=o+s-1&&j.closeEditor(!0)}const l=V.countRows();0===l?Z.deselect():"ContextMenu.removeRow"===i?Z.refresh():Z.shiftRows(o,-s);const a=q.fixedRowsTop;a>=n+1&&(q.fixedRowsTop-=Math.min(s,a-n));const h=q.fixedRowsBottom;h&&n>=l-h&&(q.fixedRowsBottom-=Math.min(s,h)),t+=s}))};Array.isArray(t)?m(a(t)):m([[t,n]]);break;case"remove_col":const w=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[o,s]=e;const n=(0,r.isEmpty)(o)?V.countCols()-1:Math.max(o-t,0);let l=V.toPhysicalColumn(n);Number.isInteger(o)&&(o=Math.max(o-t,0));if(!W.removeCol(o,s,i))return;if(Z.isSelected()){const{col:e}=V.getSelectedRangeLast().highlight;e>=o&&e<=o+s-1&&j.closeEditor(!0)}0===V.countCols()?Z.deselect():"ContextMenu.removeColumn"===i?Z.refresh():Z.shiftColumns(o,-s);const a=q.fixedColumnsStart;a>=n+1&&(q.fixedColumnsStart-=Math.min(s,a-n)),Array.isArray(q.colHeaders)&&(void 0===l&&(l=-1),q.colHeaders.splice(l,s)),t+=s}))};Array.isArray(t)?w(a(t)):w([[t,n]]);break;default:throw new Error(`There is no such action "${e}"`)}V.view.render(),l||U.adjustRowsAndCols()},adjustRowsAndCols(){const e=q.minRows,t=q.minSpareRows,o=q.minCols,s=q.minSpareCols;if(e){const t=V.countRows();t<e&&W.createRow(t,e-t,{source:"auto"})}if(t){const e=V.countEmptyRows(!0);if(e<t){const o=t-e,s=Math.min(o,q.maxRows-V.countSourceRows());W.createRow(V.countRows(),s,{source:"auto"})}}{let e;(o||s)&&(e=V.countEmptyCols(!0));let t=V.countCols();if(o&&!q.columns&&t<o){const s=o-t;e+=s,W.createCol(t,s,{source:"auto"})}if(s&&!q.columns&&"array"===V.dataType&&e<s){t=V.countCols();const o=s-e,n=Math.min(o,q.maxCols-t);W.createCol(t,n,{source:"auto"})}}V.view&&V.view.adjustElementsSize()},populateFromArray(e,t,o,s,n){let i,r,l,a;const h=[],u={},g=[],f=e.row,p=e.col;if(r=t.length,0===r)return!1;let m=0,w=0;switch((0,c.isObject)(o)&&(m=o.col-p+1,w=o.row-f+1),n){case"shift_down":const n=(0,d.pivot)(t),C=n.length,v=Math.max(C,m),y=V.getData().slice(f),E=(0,d.pivot)(y).slice(p,p+v);for(l=0;l<v;l+=1)if(l<C){for(i=0,r=n[l].length;i<w-r;i+=1)n[l].push(n[l][i%r]);l<E.length?g.push(n[l].concat(E[l])):g.push(n[l].concat(new Array(y.length).fill(null)))}else g.push(n[l%C].concat(E[l]));V.populateFromArray(f,p,(0,d.pivot)(g));break;case"shift_right":const S=t.length,R=Math.max(S,w),b=V.getData().slice(f).map((e=>e.slice(p)));for(i=0;i<R;i+=1)if(i<S){for(l=0,a=t[i].length;l<m-a;l+=1)t[i].push(t[i][l%a]);if(i<b.length)for(let e=0;e<b[i].length;e+=1)t[i].push(b[i][e]);else t[i].push(...new Array(b[0].length).fill(null))}else t.push(t[i%r].slice(0,R).concat(b[i]));V.populateFromArray(f,p,t);break;default:u.row=e.row,u.col=e.col;let _,T=0,M=0,O=!0;const I=function(e){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const s=t[e%t.length];return null!==o?s[o%s.length]:s},N=t.length,A=o?o.row-e.row+1:0;for(r=o?A:Math.max(N,A),i=0;i<r&&!(o&&u.row>o.row&&A>N||!q.allowInsertRow&&u.row>V.countRows()-1||u.row>=q.maxRows);i++){const t=i-T,n=I(t).length,d=o?o.col-e.col+1:0;if(a=o?d:Math.max(n,d),u.col=e.col,_=V.getCellMeta(u.row,u.col),"CopyPaste.paste"!==s&&"Autofill.fill"!==s||!_.skipRowOnPaste){for(M=0,l=0;l<a&&!(o&&u.col>o.col&&d>n||!q.allowInsertColumn&&u.col>V.countCols()-1||u.col>=q.maxCols);l++){if(_=V.getCellMeta(u.row,u.col),("CopyPaste.paste"===s||"Autofill.fill"===s)&&_.skipColumnOnPaste){M+=1,u.col+=1,a+=1;continue}if(_.readOnly&&"UndoRedo.undo"!==s){u.col+=1;continue}let e=I(t,l-M),o=V.getDataAtCell(u.row,u.col);if(null!==e&&"object"==typeof e)if(Array.isArray(e)&&null===o&&(o=[]),null===o||"object"!=typeof o)O=!1;else{const t=(0,c.duckSchema)(Array.isArray(o)?o:o[0]||o),s=(0,c.duckSchema)(Array.isArray(e)?e:e[0]||e);(0,c.isObjectEqual)(t,s)||Array.isArray(t)&&Array.isArray(s)?e=(0,c.deepClone)(e):O=!1}else null!==o&&"object"==typeof o&&(O=!1);O&&h.push([u.row,u.col,e]),O=!0,u.col+=1}u.row+=1}else T+=1,u.row+=1,r+=1}V.setDataAtCell(h,null,null,s||"populateFromArray")}}},this.init=function(){B.setData(q.data),V.runHooks("beforeInit"),((0,l.isMobileBrowser)()||(0,l.isIpadOS)())&&(0,n.addClass)(V.rootElement,"mobile"),this.updateSettings(q,!0),this.view=new y.default(this),j=a.default.getInstance(V,q,Z),z=(0,A.createViewportScroller)(V),Y=new u.FocusManager(V),(0,b.isRootInstance)(this)&&(0,A.installFocusCatcher)(V),V.runHooks("init"),this.forceFullRender=!0,this.view.render(),G&&null===V.rootElement.offsetParent&&(0,n.observeVisibilityChangeOnce)(V.rootElement,(()=>{V.view._wt.wtOverlays.updateLastSpreaderSize(),V.render(),V.view.adjustElementsSize()})),"object"==typeof G&&(V.runHooks("afterChange",G[0],G[1]),G=!1),V.runHooks("afterInit")},this._createCellCoords=function(e,t){return V.view._wt.createCellCoords(e,t)},this._createCellRange=function(e,t,o){return V.view._wt.createCellRange(e,t,o)},this.validateCell=function(e,t,o,s){let n=V.getCellValidator(t);function l(e){if(!(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])||!0===t.hidden)return void o(e);const s=t.visualCol,n=t.visualRow,i=V.getCell(n,s,!0);if(i&&"TH"!==i.nodeName){const e=V.rowIndexMapper.getRenderableFromVisualIndex(n),t=V.columnIndexMapper.getRenderableFromVisualIndex(s);V.view._wt.getSetting("cellRenderer",e,t,i)}o(e)}var a;(0,r.isRegExp)(n)&&(a=n,n=function(e,t){t(a.test(e))}),(0,i.isFunction)(n)?(e=V.runHooks("beforeValidate",e,t.visualRow,t.prop,s),V._registerImmediate((()=>{n.call(t,e,(o=>{V&&(o=V.runHooks("afterValidate",o,e,t.visualRow,t.prop,s),t.valid=o,l(o),V.runHooks("postAfterValidate",o,e,t.visualRow,t.prop,s))}))}))):V._registerImmediate((()=>{t.valid=!0,l(t.valid,!1)}))},this.setDataAtCell=function(e,t,o,s){const n=le(e,t,o),i=[];let r,l,a,h=s;for(r=0,l=n.length;r<l;r++){if("object"!=typeof n[r])throw new Error("Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter");if("number"!=typeof n[r][1])throw new Error("Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`");a=n[r][1]>=this.countCols()?n[r][1]:W.colToProp(n[r][1]),i.push([n[r][0],a,B.getAtCell(this.toPhysicalRow(n[r][0]),n[r][1]),n[r][2]])}h||"object"!=typeof e||(h=t);const c=ae(i,s);V.runHooks("afterSetDataAtCell",c,h),ie(c,h,(()=>{re(c,h)}))},this.setDataAtRowProp=function(e,t,o,s){const n=le(e,t,o),i=[];let r,l,a=s;for(r=0,l=n.length;r<l;r++)i.push([n[r][0],n[r][1],B.getAtCell(this.toPhysicalRow(n[r][0]),n[r][1]),n[r][2]]);a||"object"!=typeof e||(a=t);const h=ae(i,s);V.runHooks("afterSetDataAtRowProp",h,a),ie(h,a,(()=>{re(h,a)}))},this.listen=function(){V&&!V.isListening()&&(L.forEach((e=>{V!==e&&e.unlisten()})),D=V.guid,V.runHooks("afterListen"))},this.unlisten=function(){this.isListening()&&(D=null,V.runHooks("afterUnlisten"))},this.isListening=function(){return D===V.guid},this.destroyEditor=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];j.closeEditor(e),V.view.render(),t&&Z.isSelected()&&j.prepareEditor()},this.populateFromArray=function(e,t,o,s,n,i,r){if("object"!=typeof o||"object"!=typeof o[0])throw new Error("populateFromArray parameter `input` must be an array of arrays");const l="number"==typeof s?V._createCellCoords(s,n):null;return U.populateFromArray(V._createCellCoords(e,t),o,l,i,r)},this.spliceCol=function(e,t,o){for(var s=arguments.length,n=new Array(s>3?s-3:0),i=3;i<s;i++)n[i-3]=arguments[i];return W.spliceCol(e,t,o,...n)},this.spliceRow=function(e,t,o){for(var s=arguments.length,n=new Array(s>3?s-3:0),i=3;i<s;i++)n[i-3]=arguments[i];return W.spliceRow(e,t,o,...n)},this.getSelected=function(){if(Z.isSelected())return(0,d.arrayMap)(Z.getSelectedRange(),(e=>{let{from:t,to:o}=e;return[t.row,t.col,o.row,o.col]}))},this.getSelectedLast=function(){const e=this.getSelected();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.getSelectedRange=function(){if(Z.isSelected())return Array.from(Z.getSelectedRange())},this.getSelectedRangeLast=function(){const e=this.getSelectedRange();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.emptySelectedCells=function(e){if(!Z.isSelected()||0===this.countRows()||0===this.countCols())return;const t=[];(0,d.arrayEach)(Z.getSelectedRange(),(e=>{if(e.isSingleHeader())return;const o=e.getTopStartCorner(),s=e.getBottomEndCorner();(0,v.rangeEach)(o.row,s.row,(e=>{(0,v.rangeEach)(o.col,s.col,(o=>{this.getCellMeta(e,o).readOnly||t.push([e,o,null])}))}))})),t.length>0&&this.setDataAtCell(t,e)},this.isRenderSuspended=function(){return this.renderSuspendedCounter>0},this.suspendRender=function(){this.renderSuspendedCounter+=1},this.resumeRender=function(){const e=this.renderSuspendedCounter-1;this.renderSuspendedCounter=Math.max(e,0),this.isRenderSuspended()||e!==this.renderSuspendedCounter||(this.renderCall?this.render():V.view.render())},this.render=function(){this.view&&(this.renderCall=!0,this.forceFullRender=!0,this.isRenderSuspended()||V.view.render())},this.batchRender=function(e){this.suspendRender();const t=e();return this.resumeRender(),t},this.isExecutionSuspended=function(){return this.executionSuspendedCounter>0},this.suspendExecution=function(){this.executionSuspendedCounter+=1,this.columnIndexMapper.suspendOperations(),this.rowIndexMapper.suspendOperations()},this.resumeExecution=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.executionSuspendedCounter-1;this.executionSuspendedCounter=Math.max(t,0),(!this.isExecutionSuspended()&&t===this.executionSuspendedCounter||e)&&(this.columnIndexMapper.resumeOperations(),this.rowIndexMapper.resumeOperations())},this.batchExecution=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.suspendExecution();const o=e();return this.resumeExecution(t),o},this.batch=function(e){this.suspendRender(),this.suspendExecution();const t=e();return this.resumeExecution(),this.resumeRender(),t},this.refreshDimensions=function(){if(!V.view)return;const{width:e,height:t}=V.view.getLastSize(),{width:o,height:s}=V.rootElement.getBoundingClientRect(),n=o!==e||s!==t;!1===V.runHooks("beforeRefreshDimensions",{width:e,height:t},{width:o,height:s},n)||((n||V.view._wt.wtOverlays.scrollableElement===V.rootWindow)&&(V.view.setLastSize(o,s),V.render()),V.runHooks("afterRefreshDimensions",{width:e,height:t},{width:o,height:s},n))},this.updateData=function(e,t){(0,N.replaceData)(e,(e=>{W=e}),(e=>{W=e,V.columnIndexMapper.fitToLength(this.getInitialColumnCount()),V.rowIndexMapper.fitToLength(this.countSourceRows()),U.adjustRowsAndCols(),Z.refresh()}),{hotInstance:V,dataMap:W,dataSource:B,internalSource:"updateData",source:t,metaManager:X,firstRun:G})},this.loadData=function(e,t){(0,N.replaceData)(e,(e=>{W=e}),(()=>{X.clearCellsCache(),V.initIndexMappers(),U.adjustRowsAndCols(),Z.refresh(),G&&(G=[null,"loadData"])}),{hotInstance:V,dataMap:W,dataSource:B,internalSource:"loadData",source:t,metaManager:X,firstRun:G})},this.getInitialColumnCount=function(){const e=q.columns;let t=0;if(Array.isArray(e))t=e.length;else if((0,i.isFunction)(e))if("array"===V.dataType){const o=this.countSourceCols();for(let s=0;s<o;s+=1)e(s)&&(t+=1)}else"object"!==V.dataType&&"function"!==V.dataType||(t=W.colToPropCache.length);else if((0,r.isDefined)(q.dataSchema)){const e=W.getSchema();t=Array.isArray(e)?e.length:(0,c.deepObjectSize)(e)}else t=this.countSourceCols();return t},this.initIndexMappers=function(){this.columnIndexMapper.initToLength(this.getInitialColumnCount()),this.rowIndexMapper.initToLength(this.countSourceRows())},this.getData=function(e,t,o,s){return(0,r.isUndefined)(e)?W.getAll():W.getRange(V._createCellCoords(e,t),V._createCellCoords(o,s),W.DESTINATION_RENDERER)},this.getCopyableText=function(e,t,o,s){return W.getCopyableText(V._createCellCoords(e,t),V._createCellCoords(o,s))},this.getCopyableData=function(e,t){return W.getCopyable(e,W.colToProp(t))},this.getSchema=function(){return W.getSchema()},this.updateSettings=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const o=(G?V.loadData:V.updateData).bind(this);let s,n,l=!1;if((0,r.isDefined)(e.rows))throw new Error('The "rows" setting is no longer supported. Do you mean startRows, minRows or maxRows?');if((0,r.isDefined)(e.cols))throw new Error('The "cols" setting is no longer supported. Do you mean startCols, minCols or maxCols?');if((0,r.isDefined)(e.ganttChart))throw new Error('Since 8.0.0 the "ganttChart" setting is no longer supported.');for(s in e)"data"===s||("language"===s?te(e.language):"className"===s?oe("className",e.className):"tableClassName"===s&&V.table?(oe("tableClassName",e.tableClassName),V.view._wt.wtOverlays.syncOverlayTableClassNames()):T.default.getSingleton().isRegistered(s)||T.default.getSingleton().isDeprecated(s)?((0,i.isFunction)(e[s])||Array.isArray(e[s]))&&(e[s].initialHook=!0,V.addHook(s,e[s])):!t&&(0,c.hasOwnProperty)(e,s)&&(Q[s]=e[s]));void 0===e.data&&void 0===q.data?o(null,"updateSettings"):void 0!==e.data?o(e.data,"updateSettings"):void 0!==e.columns&&(W.createMap(),V.initIndexMappers());const a=V.countCols(),h=q.columns;if(h&&(0,i.isFunction)(h)&&(l=!0),void 0===e.cell&&void 0===e.cells&&void 0===e.columns||X.clearCache(),a>0)for(s=0,n=0;s<a;s++){if(h){const e=l?h(s):h[n];e&&X.updateColumnMeta(n,e)}n+=1}(0,r.isDefined)(e.cell)&&(0,c.objectEach)(e.cell,(e=>{V.setCellMetaObject(e.row,e.col,e)})),V.runHooks("afterCellMetaReset");let u=V.rootElement.style.height;""!==u&&(u=parseInt(V.rootElement.style.height,10));let d=e.height;if((0,i.isFunction)(d)&&(d=d()),t){V.rootElement.getAttribute("style")&&V.rootElement.setAttribute("data-initialstyle",V.rootElement.getAttribute("style"))}if(null===d){const e=V.rootElement.getAttribute("data-initialstyle");e&&(e.indexOf("height")>-1||e.indexOf("overflow")>-1)?V.rootElement.setAttribute("style",e):(V.rootElement.style.height="",V.rootElement.style.overflow="")}else void 0!==d&&(V.rootElement.style.height=isNaN(d)?`${d}`:`${d}px`,V.rootElement.style.overflow="hidden");if(void 0!==e.width){let t=e.width;(0,i.isFunction)(t)&&(t=t()),V.rootElement.style.width=isNaN(t)?`${t}`:`${t}px`}t||(V.view&&(V.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked(),V.view._wt.exportSettingsAsClassNames()),V.runHooks("afterUpdateSettings",e)),U.adjustRowsAndCols(),V.view&&!G&&(V.forceFullRender=!0,V.view.render(),V.view._wt.wtOverlays.adjustElementsSize()),t||!V.view||""!==u&&""!==d&&void 0!==d||u===d||V.view._wt.wtOverlays.updateMainScrollableElements()},this.getValue=function(){const e=V.getSelectedLast();if(q.getValue){if((0,i.isFunction)(q.getValue))return q.getValue.call(V);if(e)return V.getData()[e[0][0]][q.getValue]}else if(e)return V.getDataAtCell(e[0],e[1])},this.getSettings=function(){return q},this.clear=function(){this.selectAll(),this.emptySelectedCells()},this.alter=function(e,t,o,s,n){U.alter(e,t,o,s,n)},this.getCell=function(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=t,n=e;if(t>=0){if(this.columnIndexMapper.isHidden(this.toPhysicalColumn(t)))return null;s=this.columnIndexMapper.getRenderableFromVisualIndex(t)}if(e>=0){if(this.rowIndexMapper.isHidden(this.toPhysicalRow(e)))return null;n=this.rowIndexMapper.getRenderableFromVisualIndex(e)}return null===n||null===s||void 0===n||void 0===s?null:V.view.getCellAtCoords(V._createCellCoords(n,s),o)},this.getCoords=function(e){const t=this.view._wt.wtTable.getCoords(e);if(null===t)return null;const{row:o,col:s}=t;let n=o,i=s;return o>=0&&(n=this.rowIndexMapper.getVisualFromRenderableIndex(o)),s>=0&&(i=this.columnIndexMapper.getVisualFromRenderableIndex(s)),V._createCellCoords(n,i)},this.colToProp=function(e){return W.colToProp(e)},this.propToCol=function(e){return W.propToCol(e)},this.toVisualRow=e=>this.rowIndexMapper.getVisualFromPhysicalIndex(e),this.toVisualColumn=e=>this.columnIndexMapper.getVisualFromPhysicalIndex(e),this.toPhysicalRow=e=>this.rowIndexMapper.getPhysicalFromVisualIndex(e),this.toPhysicalColumn=e=>this.columnIndexMapper.getPhysicalFromVisualIndex(e),this.getDataAtCell=function(e,t){return W.get(e,W.colToProp(t))},this.getDataAtRowProp=function(e,t){return W.get(e,t)},this.getDataAtCol=function(e){const t=[],o=W.getRange(V._createCellCoords(0,e),V._createCellCoords(q.data.length-1,e),W.DESTINATION_RENDERER);for(let e=0;e<o.length;e+=1)for(let s=0;s<o[e].length;s+=1)t.push(o[e][s]);return t},this.getDataAtProp=function(e){const t=[],o=W.getRange(V._createCellCoords(0,W.propToCol(e)),V._createCellCoords(q.data.length-1,W.propToCol(e)),W.DESTINATION_RENDERER);for(let e=0;e<o.length;e+=1)for(let s=0;s<o[e].length;s+=1)t.push(o[e][s]);return t},this.getSourceData=function(e,t,o,s){let n;return n=void 0===e?B.getData():B.getByRange(V._createCellCoords(e,t),V._createCellCoords(o,s)),n},this.getSourceDataArray=function(e,t,o,s){let n;return n=void 0===e?B.getData(!0):B.getByRange(V._createCellCoords(e,t),V._createCellCoords(o,s),!0),n},this.getSourceDataAtCol=function(e){return B.getAtColumn(e)},this.setSourceDataAtCell=function(e,t,o,s){const n=le(e,t,o),i=this.hasHook("afterSetSourceDataAtCell"),l=[];i&&(0,d.arrayEach)(n,(e=>{let[t,o,s]=e;l.push([t,o,B.getAtCell(t,o),s])})),(0,d.arrayEach)(n,(e=>{let[t,o,s]=e;B.setAtCell(t,o,s)})),i&&this.runHooks("afterSetSourceDataAtCell",l,s),this.render();const a=V.getActiveEditor();a&&(0,r.isDefined)(a.refreshValue)&&a.refreshValue()},this.getSourceDataAtRow=function(e){return B.getAtRow(e)},this.getSourceDataAtCell=function(e,t){return B.getAtCell(e,t)},this.getDataAtRow=function(e){return W.getRange(V._createCellCoords(e,0),V._createCellCoords(e,this.countCols()-1),W.DESTINATION_RENDERER)[0]||[]},this.getDataType=function(e,t,o,s){const n=void 0===e?[0,0,this.countRows(),this.countCols()]:[e,t,o,s],[i,r]=n;let[,,l,a]=n,h=null,c=null;void 0===l&&(l=i),void 0===a&&(a=r);let u="mixed";return(0,v.rangeEach)(Math.max(Math.min(i,l),0),Math.max(i,l),(e=>{let t=!0;return(0,v.rangeEach)(Math.max(Math.min(r,a),0),Math.max(r,a),(o=>{const s=this.getCellMeta(e,o);return c=s.type,h?t=h===c:h=c,t})),u=t?c:"mixed",t})),u},this.removeCellMeta=function(e,t,o){const[s,n]=[this.toPhysicalRow(e),this.toPhysicalColumn(t)];let i=X.getCellMetaKeyValue(s,n,o);!1!==V.runHooks("beforeRemoveCellMeta",e,t,o,i)&&(X.removeCellMeta(s,n,o),V.runHooks("afterRemoveCellMeta",e,t,o,i)),i=null},this.spliceCellsMeta=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var o=arguments.length,s=new Array(o>2?o-2:0),n=2;n<o;n++)s[n-2]=arguments[n];if(s.length>0&&!Array.isArray(s[0]))throw new Error("The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.");t>0&&X.removeRow(this.toPhysicalRow(e),t),s.length>0&&(0,d.arrayEach)(s.reverse(),(t=>{X.createRow(this.toPhysicalRow(e)),(0,d.arrayEach)(t,((t,o)=>this.setCellMetaObject(e,o,t)))})),V.render()},this.setCellMetaObject=function(e,t,o){"object"==typeof o&&(0,c.objectEach)(o,((o,s)=>{this.setCellMeta(e,t,s,o)}))},this.setCellMeta=function(e,t,o,s){if(!1===V.runHooks("beforeSetCellMeta",e,t,o,s))return;let n=e,i=t;e<this.countRows()&&(n=this.toPhysicalRow(e)),t<this.countCols()&&(i=this.toPhysicalColumn(t)),X.setCellMeta(n,i,o,s),V.runHooks("afterSetCellMeta",e,t,o,s)},this.getCellsMeta=function(){return X.getCellsMeta()},this.getCellMeta=function(e,t){let o=this.toPhysicalRow(e),s=this.toPhysicalColumn(t);return null===o&&(o=e),null===s&&(s=t),X.getCellMeta(o,s,{visualRow:e,visualColumn:t})},this.getColumnMeta=function(e){return X.getColumnMeta(this.toPhysicalColumn(e))},this.getCellMetaAtRow=function(e){return X.getCellsMetaAtRow(e)},this.isColumnModificationAllowed=function(){return!("object"===V.dataType||q.columns)},this.getCellRenderer=function(e,t){const o="number"==typeof e?V.getCellMeta(e,t).renderer:e.renderer;return"string"==typeof o?(0,p.getRenderer)(o):(0,r.isUndefined)(o)?(0,p.getRenderer)("text"):o},this.getCellEditor=function(e,t){const o="number"==typeof e?V.getCellMeta(e,t).editor:e.editor;return"string"==typeof o?(0,m.getEditor)(o):(0,r.isUndefined)(o)?(0,m.getEditor)("text"):o},this.getCellValidator=function(e,t){const o="number"==typeof e?V.getCellMeta(e,t).validator:e.validator;return"string"==typeof o?(0,w.getValidator)(o):o},this.validateCells=function(e){this._validateCells(e)},this.validateRows=function(e,t){if(!Array.isArray(e))throw new Error("validateRows parameter `rows` must be an array");this._validateCells(t,e)},this.validateColumns=function(e,t){if(!Array.isArray(e))throw new Error("validateColumns parameter `columns` must be an array");this._validateCells(t,void 0,e)},this._validateCells=function(e,t,o){const s=new se;e&&(s.onQueueEmpty=e);let n=V.countRows()-1;for(;n>=0;){if(void 0!==t&&-1===t.indexOf(n)){n-=1;continue}let e=V.countCols()-1;for(;e>=0;)void 0===o||-1!==o.indexOf(e)?(s.addValidatorToQueue(),V.validateCell(V.getDataAtCell(n,e),V.getCellMeta(n,e),(e=>{if("boolean"!=typeof e)throw new Error("Validation error: result is not boolean");!1===e&&(s.valid=!1),s.removeValidatorFormQueue()}),"validateCells"),e-=1):e-=1;n-=1}s.checkIfQueueIsEmpty()},this.getRowHeader=function(e){let t=q.rowHeaders,o=e;return void 0!==o&&(o=V.runHooks("modifyRowHeader",o)),void 0===o?(t=[],(0,v.rangeEach)(V.countRows()-1,(e=>{t.push(V.getRowHeader(e))}))):Array.isArray(t)&&void 0!==t[o]?t=t[o]:(0,i.isFunction)(t)?t=t(o):t&&"string"!=typeof t&&"number"!=typeof t&&(t=o+1),t},this.hasRowHeaders=function(){return!!q.rowHeaders},this.hasColHeaders=function(){if(void 0!==q.colHeaders&&null!==q.colHeaders)return!!q.colHeaders;for(let e=0,t=V.countCols();e<t;e++)if(V.getColHeader(e))return!0;return!1},this.getColHeader=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;const o=V.runHooks("modifyColHeader",e);if(void 0===o){const e=[],t=V.countCols();for(let o=0;o<t;o++)e.push(V.getColHeader(o));return e}let s=q.colHeaders;const n=V.toPhysicalColumn(o),r=function(e){const t=[],o=V.countCols();let s=0;for(;s<o;s++)(0,i.isFunction)(q.columns)&&q.columns(s)&&t.push(s);return t[e]}(n);return!1===q.colHeaders?s=null:q.columns&&(0,i.isFunction)(q.columns)&&q.columns(r)&&q.columns(r).title?s=q.columns(r).title:q.columns&&q.columns[n]&&q.columns[n].title?s=q.columns[n].title:Array.isArray(q.colHeaders)&&void 0!==q.colHeaders[n]?s=q.colHeaders[n]:(0,i.isFunction)(q.colHeaders)?s=q.colHeaders(n):q.colHeaders&&"string"!=typeof q.colHeaders&&"number"!=typeof q.colHeaders&&(s=(0,S.spreadsheetColumnLabel)(o)),s=V.runHooks("modifyColumnHeaderValue",s,e,t),s},this._getColWidthFromSettings=function(e){let t;if(e>=0){t=V.getCellMeta(0,e).width}if(void 0!==t&&t!==q.width||(t=q.colWidths),null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getColWidth=function(e){let t=V._getColWidthFromSettings(e);return t=V.runHooks("modifyColWidth",t,e),void 0===t&&(t=_.DEFAULT_COLUMN_WIDTH),t},this._getRowHeightFromSettings=function(e){let t=q.rowHeights;if(null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getRowHeight=function(e){let t=V._getRowHeightFromSettings(e);return t=V.runHooks("modifyRowHeight",t,e),t},this.countSourceRows=function(){return B.countRows()},this.countSourceCols=function(){return B.countFirstRowKeys()},this.countRows=function(){return W.getLength()},this.countCols=function(){const e=q.maxCols,t=this.columnIndexMapper.getNotTrimmedIndexesLength();return Math.min(e,t)},this.countRenderedRows=function(){return V.view._wt.drawn?V.view._wt.wtTable.getRenderedRowsCount():-1},this.countVisibleRows=function(){return V.view._wt.drawn?V.view._wt.wtTable.getVisibleRowsCount():-1},this.countRenderedCols=function(){return V.view._wt.drawn?V.view._wt.wtTable.getRenderedColumnsCount():-1},this.countVisibleCols=function(){return V.view._wt.drawn?V.view._wt.wtTable.getVisibleColumnsCount():-1},this.countRowHeaders=function(){return this.view.getRowHeadersCount()},this.countColHeaders=function(){return this.view.getColumnHeadersCount()},this.countEmptyRows=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,v.rangeEachReverse)(V.countRows()-1,(o=>{if(V.isEmptyRow(o))t+=1;else if(!0===e)return!1})),t},this.countEmptyCols=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,v.rangeEachReverse)(V.countCols()-1,(o=>{if(V.isEmptyCol(o))t+=1;else if(!0===e)return!1})),t},this.isEmptyRow=function(e){return q.isEmptyRow.call(V,e)},this.isEmptyCol=function(e){return q.isEmptyCol.call(V,e)},this.selectCell=function(e,t,o,s){let n=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return!(0,r.isUndefined)(e)&&!(0,r.isUndefined)(t)&&this.selectCells([[e,t,o,s]],n,i)},this.selectCells=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[[]],t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&z.suspend();const o=Z.selectCells(e);return o&&t&&V.listen(),z.resume(),o},this.selectColumns=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=arguments.length>2?arguments[2]:void 0;return Z.selectColumns(e,t,o)},this.selectRows=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=arguments.length>2?arguments[2]:void 0;return Z.selectRows(e,t,o)},this.deselectCell=function(){Z.deselect()},this.selectAll=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=arguments.length>2?arguments[2]:void 0;z.skipNextScrollCycle(),Z.selectAll(e,t,o)};const he=(e,t)=>e.getNearestNotHiddenIndex(t,1,!0);this.scrollViewportTo=function(e){var t,o;"number"==typeof e&&(e={row:arguments[0],col:arguments[1],verticalSnap:arguments[2]?"bottom":"top",horizontalSnap:arguments[3]?"end":"start",considerHiddenIndexes:null===(o=arguments[4])||void 0===o||o});const{row:s,col:n,verticalSnap:i,horizontalSnap:r,considerHiddenIndexes:l}=null!==(t=e)&&void 0!==t?t:{};let a,h,c,u;void 0!==i&&(a="top"===i,h=!a),void 0!==r&&(c="start"===r,u=!c);let d=s,g=n;if(void 0===l||l){const e=Number.isInteger(s)&&s>=0,t=Number.isInteger(n)&&n>=0,o=e?he(this.rowIndexMapper,s):void 0,i=t?he(this.columnIndexMapper,n):void 0;if(null===o||null===i)return!1;d=e?V.rowIndexMapper.getRenderableFromVisualIndex(o):s,g=t?V.columnIndexMapper.getRenderableFromVisualIndex(i):n}const f=Number.isInteger(d),p=Number.isInteger(g);return f&&d>=0&&p&&g>=0?V.view.scrollViewport(V._createCellCoords(d,g),a,u,h,c):f&&d>=0&&(p&&g<0||!p)?V.view.scrollViewportVertically(d,a,h):!!(p&&g>=0&&(f&&d<0||!f))&&V.view.scrollViewportHorizontally(g,u,c)},this.scrollToFocusedCell=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>{};if(!this.selection.isSelected())return;this.addHookOnce("afterScroll",e);const{highlight:t}=this.getSelectedRangeLast();this.scrollViewportTo(t.toObject())?this.view.render():(this.removeHook("afterScroll",e),this._registerImmediate((()=>e())))},this.destroy=function(){if(V._clearTimeouts(),V._clearImmediates(),V.view&&V.view.destroy(),B&&B.destroy(),B=null,this.getShortcutManager().destroy(),X.clearCache(),L.delete(this.guid),(0,b.isRootInstance)(V)){const e=this.rootDocument.querySelector(".hot-display-license-info");e&&e.parentNode.removeChild(e)}(0,n.empty)(V.rootElement),F.destroy(),j&&j.destroy(),V.batchExecution((()=>{V.rowIndexMapper.unregisterAll(),V.columnIndexMapper.unregisterAll(),J.getItems().forEach((e=>{let[,t]=e;t.destroy()})),J.clear(),V.runHooks("afterDestroy")}),!0),T.default.getSingleton().destroy(V),(0,c.objectEach)(V,((e,t,o)=>{var s;(0,i.isFunction)(e)?o[t]=(s=t,()=>{throw new Error(`The "${s}" method cannot be called because this Handsontable instance has been destroyed`)}):"guid"!==t&&(o[t]=null)})),V.isDestroyed=!0,W&&W.destroy(),W=null,U=null,Z=null,j=null,V=null},this.getActiveEditor=function(){return j.getActiveEditor()},this.getFirstRenderedVisibleRow=function(){return V.view.getFirstRenderedVisibleRow()},this.getLastRenderedVisibleRow=function(){return V.view.getLastRenderedVisibleRow()},this.getFirstRenderedVisibleColumn=function(){return V.view.getFirstRenderedVisibleColumn()},this.getLastRenderedVisibleColumn=function(){return V.view.getLastRenderedVisibleColumn()},this.getFirstFullyVisibleRow=function(){return V.view.getFirstFullyVisibleRow()},this.getLastFullyVisibleRow=function(){return V.view.getLastFullyVisibleRow()},this.getFirstFullyVisibleColumn=function(){return V.view.getFirstFullyVisibleColumn()},this.getLastFullyVisibleColumn=function(){return V.view.getLastFullyVisibleColumn()},this.getFirstPartiallyVisibleRow=function(){return V.view.getFirstPartiallyVisibleRow()},this.getLastPartiallyVisibleRow=function(){return V.view.getLastPartiallyVisibleRow()},this.getFirstPartiallyVisibleColumn=function(){return V.view.getFirstPartiallyVisibleColumn()},this.getLastPartiallyVisibleColumn=function(){return V.view.getLastPartiallyVisibleColumn()},this.getPlugin=function(e){const t=(0,C.toUpperCaseFirst)(e);return"UndoRedo"===t?this.undoRedo:J.getItem(t)},this.getPluginName=function(e){return e===this.undoRedo?this.undoRedo.constructor.PLUGIN_KEY:J.getId(e)},this.getInstance=function(){return V},this.addHook=function(e,t,o){T.default.getSingleton().add(e,t,V,o)},this.hasHook=function(e){return T.default.getSingleton().has(e,V)||T.default.getSingleton().has(e)},this.addHookOnce=function(e,t,o){T.default.getSingleton().once(e,t,V,o)},this.removeHook=function(e,t){T.default.getSingleton().remove(e,t,V)},this.runHooks=function(e,t,o,s,n,i,r){return T.default.getSingleton().run(V,e,t,o,s,n,i,r)},this.getTranslatedPhrase=function(e,t){return(0,M.getTranslatedPhrase)(q.language,e,t)},this.toHTML=()=>(0,g.instanceToHTML)(this),this.toTableElement=()=>{const e=this.rootDocument.createElement("div");return e.insertAdjacentHTML("afterbegin",(0,g.instanceToHTML)(this)),e.firstElementChild},this.timeouts=[],this._registerTimeout=function(e){let t=e;"function"==typeof t&&(t=setTimeout(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0)),this.timeouts.push(t)},this._clearTimeouts=function(){(0,d.arrayEach)(this.timeouts,(e=>{clearTimeout(e)}))},this.immediates=[],this._registerImmediate=function(e){this.immediates.push(setImmediate(e))},this._clearImmediates=function(){(0,d.arrayEach)(this.immediates,(e=>{clearImmediate(e)}))},this._getEditorManager=function(){return j},this.isRtl=function(){return"rtl"===V.rootWindow.getComputedStyle(V.rootElement).direction},this.isLtr=function(){return!V.isRtl()},this.getDirectionFactor=function(){return V.isLtr()?1:-1};const ce=(0,x.createShortcutManager)({handleEvent:()=>V.isListening(),beforeKeyDown:e=>this.runHooks("beforeKeyDown",e),afterKeyDown:e=>{this.isDestroyed||V.runHooks("afterDocumentKeyDown",e)},ownerWindow:this.rootWindow});this.addHook("beforeOnCellMouseDown",(e=>{!1===e.ctrlKey&&!1===e.metaKey&&ce.releasePressedKeys()})),this.getShortcutManager=function(){return ce},this.getFocusManager=function(){return Y},(0,f.getPluginsNames)().forEach((e=>{const t=(0,f.getPlugin)(e);J.addItem(e,new t(this))})),(0,H.registerAllShortcutContexts)(V),ce.setActiveContextName("grid"),T.default.getSingleton().run(V,"construct")},o(67834),o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620),o(71766);var n=o(9893),i=o(78832),r=o(38893),l=o(28890),a=s(o(18344)),h=s(o(82629)),c=o(13911),u=o(26505),d=o(9175),g=o(74737),f=o(90532),p=o(44288),m=o(84558),w=o(51255),C=o(59777),v=o(87485),y=s(o(66801)),E=s(o(12248)),S=o(56216),R=o(93969),b=o(11015),_=o(90),T=s(o(56937)),M=o(74174),O=o(75032),I=o(73497),N=o(71757),A=o(48246),P=o(84134),x=o(57660),H=o(37947);let D=null;const L=new Map;new Set},63745:(e,t,o)=>{"use strict";t.__esModule=!0,t.installFocusDetector=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=e.rootElement,s=i(e),n=i(e);return s.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromTop())),n.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromBottom())),o.firstChild.before(s),o.lastChild.after(n),{activate(){e._registerTimeout((()=>{s.tabIndex=0,n.tabIndex=0}),10)},deactivate(){e._registerTimeout((()=>{s.tabIndex=-1,n.tabIndex=-1}),10)}}};var s=o(9893),n=o(92692);function i(e){const t=e.rootDocument.createElement("input");return t.type="text",t.classList.add("htFocusCatcher"),e.getSettings().ariaTags&&(0,s.setAttribute)(t,[(0,n.A11Y_PRESENTATION)(),(0,n.A11Y_HIDDEN)()]),t}},71563:(e,t,o)=>{"use strict";t.__esModule=!0,t.installFocusCatcher=function(e){const t=function(e){return t=>{if(!t)return null;const o=i(e),s=r(e);return t.col<o.col&&(t.col=o.col),t.col>s.col&&(t.col=s.col),t.row<o.row&&(t.row=o.row),t.row>s.row&&(t.row=s.row),t}}(e);let o;const{activate:l,deactivate:a}=(0,n.installFocusDetector)(e,{onFocusFromTop(){var s;const n=null!==(s=t(o))&&void 0!==s?s:i(e);n&&(e.runHooks("modifyFocusOnTabNavigation","from_above",n),e.selectCell(n.row,n.col)),e.listen()},onFocusFromBottom(){var s;const n=null!==(s=t(o))&&void 0!==s?s:r(e);n&&(e.runHooks("modifyFocusOnTabNavigation","from_below",n),e.selectCell(n.row,n.col)),e.listen()}}),h={wrapped:!1,flipped:!1};let c=!0,u=!1,d=!1;e.addHook("afterListen",(()=>a())),e.addHook("afterUnlisten",(()=>l())),e.addHook("afterSelection",((t,s,n,i,r)=>{var l;(u&&(h.wrapped&&h.flipped||d)&&(d=!1,r.value=!0),c)&&(o=null===(l=e.getSelectedRangeLast())||void 0===l?void 0:l.highlight)})),e.addHook("beforeRowWrap",((e,t,o)=>{h.wrapped=!0,h.flipped=o}));const g={keys:[["Tab"],["Shift","Tab"]],preventDefault:!1,stopPropagation:!1,relativeToGroup:s.GRID_GROUP,group:"focusCatcher"};e.getShortcutManager().getContext("grid").addShortcuts([{...g,callback:()=>{const{tabNavigation:t}=e.getSettings();u=!0,e.getSelectedRangeLast()&&!t&&(c=!1),t||(d=!0)},position:"before"},{...g,callback:t=>{const{tabNavigation:s,autoWrapRow:n}=e.getSettings();if(u=!1,c=!0,!s||!e.selection.isSelected()||n&&h.wrapped&&h.flipped||!n&&h.wrapped)return n&&h.wrapped&&h.flipped&&(o=t.shiftKey?i(e):r(e)),h.wrapped=!1,h.flipped=!1,e.deselectCell(),e.unlisten(),!1;t.preventDefault()},position:"after"}])};var s=o(37947),n=o(63745);function i(e){const{rowIndexMapper:t,columnIndexMapper:o}=e,{navigableHeaders:s}=e.getSettings();let n=s&&e.countColHeaders()>0?-e.countColHeaders():0,i=s&&e.countRowHeaders()>0?-e.countRowHeaders():0;return 0===n&&(n=t.getVisualFromRenderableIndex(n)),0===i&&(i=o.getVisualFromRenderableIndex(i)),null===n||null===i?null:e._createCellCoords(n,i)}function r(e){var t,o;const{rowIndexMapper:s,columnIndexMapper:n}=e,{navigableHeaders:i}=e.getSettings();let r=s.getRenderableIndexesLength()-1,l=n.getRenderableIndexesLength()-1;if(r<0){if(!i||0===e.countColHeaders())return null;r=-1}if(l<0){if(!i||0===e.countColHeaders())return null;l=-1}return e._createCellCoords(null!==(t=s.getVisualFromRenderableIndex(r))&&void 0!==t?t:r,null!==(o=n.getVisualFromRenderableIndex(l))&&void 0!==o?o:l)}},48246:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(71563);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===s[e]||(t[e]=s[e]))}));var n=o(44428);Object.keys(n).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===n[e]||(t[e]=n[e]))}))},44428:(e,t,o)=>{"use strict";t.__esModule=!0,t.createViewportScroller=function(e){const{selection:t}=e;let o=!1,c=!1;return{resume(){c=!1},suspend(){c=!0},skipNextScrollCycle(){o=!0},scrollTo(u){var d;if(o||c)return void(o=!1);let g;t.isFocusSelectionChanged()?g=(0,i.focusScrollStrategy)(e):t.isSelectedByCorner()?g=(0,n.cornerHeaderScrollStrategy)(e):t.isSelectedByRowHeader()?g=(0,a.rowHeaderScrollStrategy)(e):t.isSelectedByColumnHeader()?g=(0,s.columnHeaderScrollStrategy)(e):1===t.getSelectedRange().size()&&t.isMultiple()?g=(0,r.multipleScrollStrategy)(e):1!==t.getSelectedRange().size()||t.isMultiple()?t.getSelectedRange().size()>1&&(g=(0,l.noncontiguousScrollStrategy)(e)):g=(0,h.singleScrollStrategy)(e),null===(d=g)||void 0===d||d(u)}}};var s=o(9635),n=o(5696),i=o(88948),r=o(29980),l=o(3011),a=o(44745),h=o(8248)},9635:(e,t)=>{"use strict";t.__esModule=!0,t.columnHeaderScrollStrategy=function(e){return t=>{let{col:o}=t;e.scrollViewportTo({col:o})}}},5696:(e,t)=>{"use strict";t.__esModule=!0,t.cornerHeaderScrollStrategy=function(){return()=>{}}},88948:(e,t)=>{"use strict";t.__esModule=!0,t.focusScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},29980:(e,t)=>{"use strict";t.__esModule=!0,t.multipleScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},3011:(e,t)=>{"use strict";t.__esModule=!0,t.noncontiguousScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},44745:(e,t)=>{"use strict";t.__esModule=!0,t.rowHeaderScrollStrategy=function(e){return t=>{let{row:o}=t;e.scrollViewportTo({row:o})}}},8248:(e,t)=>{"use strict";t.__esModule=!0,t.singleScrollStrategy=function(e){return t=>{const o=e.selection.getSelectionSource(),{row:s,col:n}=t;if(s<0&&n>=0)e.scrollViewportTo({col:n});else if(n<0&&s>=0)e.scrollViewportTo({row:s});else{if("mouse"===o&&(n===e.view.getLastPartiallyVisibleColumn()||s===e.view.getLastPartiallyVisibleRow()))return;e.scrollViewportTo({row:s,col:n})}}}},87727:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=o(55518),r=o(56216),l=o(13911),a=o(9175),h=o(87485),c=o(38893);class u{static get DESTINATION_RENDERER(){return 1}static get DESTINATION_CLIPBOARD_GENERATOR(){return 2}constructor(e,t,o){(0,n.default)(this,"hot",void 0),(0,n.default)(this,"metaManager",void 0),(0,n.default)(this,"tableMeta",void 0),(0,n.default)(this,"dataSource",void 0),(0,n.default)(this,"duckSchema",void 0),(0,n.default)(this,"colToPropCache",void 0),(0,n.default)(this,"propToColCache",void 0),this.hot=e,this.metaManager=o,this.tableMeta=o.getTableMeta(),this.dataSource=t,this.duckSchema=this.createDuckSchema(),this.createMap()}createMap(){const e=this.getSchema();if(void 0===e)throw new Error("trying to create `columns` definition but you didn't provide `schema` nor `data`");const t=this.tableMeta.columns;let o;if(this.colToPropCache=[],this.propToColCache=new Map,t){let s=0,n=0,i=!1;if("function"==typeof t){const t=(0,l.deepObjectSize)(e);s=t>0?t:this.countFirstRowKeys(),i=!0}else{const e=this.tableMeta.maxCols;s=Math.min(e,t.length)}for(o=0;o<s;o++){const e=i?t(o):t[o];if((0,l.isObject)(e)){if(void 0!==e.data){const t=i?n:o;this.colToPropCache[t]=e.data,this.propToColCache.set(e.data,t)}n+=1}}}else this.recursiveDuckColumns(e)}countFirstRowKeys(){return(0,r.countFirstRowKeys)(this.dataSource)}recursiveDuckColumns(e,t,o){let s,n=t,i=o;return void 0===n&&(n=0,i=""),"object"!=typeof e||Array.isArray(e)||(0,l.objectEach)(e,((e,t)=>{null===e?(s=i+t,this.colToPropCache.push(s),this.propToColCache.set(s,n),n+=1):n=this.recursiveDuckColumns(e,n,`${t}.`)})),n}colToProp(e){if(!1===Number.isInteger(e))return e;const t=this.hot.toPhysicalColumn(e);return null===t?e:this.colToPropCache&&(0,c.isDefined)(this.colToPropCache[t])?this.colToPropCache[t]:t}propToCol(e){const t=this.propToColCache.get(e);if((0,c.isDefined)(t))return this.hot.toVisualColumn(t);const o=this.hot.toVisualColumn(e);return null===o?e:o}getSchema(){const e=this.tableMeta.dataSchema;return e?"function"==typeof e?e():e:this.duckSchema}createDuckSchema(){return this.dataSource&&this.dataSource[0]?(0,l.duckSchema)(this.dataSource[0]):{}}refreshDuckSchema(){this.duckSchema=this.createDuckSchema()}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:o,mode:s="above"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=this.hot.countSourceRows();let i=n,r=0,a=e;("number"!=typeof a||a>=n)&&(a=n),a<this.hot.countRows()&&(i=this.hot.toPhysicalRow(a));if(!1===this.hot.runHooks("beforeCreateRow",a,t,o)||null===i)return{delta:0};const c=this.tableMeta.maxRows,u=this.getSchema().length,d=[];for(;r<t&&n+r<c;){let e=null;"array"===this.hot.dataType?this.tableMeta.dataSchema?e=(0,l.deepClone)(this.getSchema()):(e=[],(0,h.rangeEach)(u-1,(()=>e.push(null)))):"function"===this.hot.dataType?e=this.tableMeta.dataSchema(a+r):(e={},(0,l.deepExtend)(e,this.getSchema())),d.push(e),r+=1}this.hot.rowIndexMapper.insertIndexes(a,r),"below"===s&&(i=Math.min(i+1,n)),this.spliceData(i,0,d);const g=this.hot.toVisualRow(i);return this.hot.countSourceRows()===d.length&&this.hot.columnIndexMapper.initToLength(this.hot.getInitialColumnCount()),r>0&&(null==e?this.metaManager.createRow(null,r):"auto"!==o&&this.metaManager.createRow(i,t)),this.hot.runHooks("afterCreateRow",g,r,o),this.hot.forceFullRender=!0,{delta:r,startPhysicalIndex:i}}createCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:o,mode:s="start"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this.hot.isColumnModificationAllowed())throw new Error("Cannot create new column. When data source in an object, you can only have as much columns as defined in first data row, data schema or in the 'columns' setting.If you want to be able to add new columns, you have to use array datasource.");const n=this.dataSource,i=this.tableMeta.maxCols,r=this.hot.countSourceCols();let l=e;("number"!=typeof l||l>=r)&&(l=r);if(!1===this.hot.runHooks("beforeCreateCol",l,t,o))return{delta:0};let a=r;l<this.hot.countCols()&&(a=this.hot.toPhysicalColumn(l));const h=this.hot.countSourceRows();let c=this.hot.countCols(),u=0,d=a;"end"===s&&(d=Math.min(d+1,r));const g=d;for(;u<t&&c<i;){if("number"!=typeof l||l>=c)if(h>0)for(let e=0;e<h;e+=1)void 0===n[e]&&(n[e]=[]),n[e].push(null);else n.push([null]);else for(let e=0;e<h;e++)n[e].splice(d,0,null);u+=1,d+=1,c+=1}this.hot.columnIndexMapper.insertIndexes(l,u),u>0&&(null==e?this.metaManager.createColumn(null,u):"auto"!==o&&this.metaManager.createColumn(g,t));const f=this.hot.toVisualColumn(g);return this.hot.runHooks("afterCreateCol",f,u,o),this.hot.forceFullRender=!0,this.refreshDuckSchema(),{delta:u,startPhysicalIndex:g}}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,o=arguments.length>2?arguments[2]:void 0,s=Number.isInteger(e)?e:-t;const n=this.visualRowsToPhysical(s,t),i=this.hot.countSourceRows();s=(i+s)%i;if(!1===this.hot.runHooks("beforeRemoveRow",s,n.length,n,o))return!1;const r=n.length;if(this.filterData(s,r,n),s<this.hot.countRows()){this.hot.rowIndexMapper.removeIndexes(n);const e=(0,c.isDefined)(this.tableMeta.columns)||(0,c.isDefined)(this.tableMeta.dataSchema);0===this.hot.rowIndexMapper.getNotTrimmedIndexesLength()&&!1===e&&this.hot.columnIndexMapper.setIndexesSequence([])}return n.slice(0).sort(((e,t)=>t-e)).forEach((e=>{this.metaManager.removeRow(e,1)})),this.hot.runHooks("afterRemoveRow",s,r,n,o),this.hot.forceFullRender=!0,!0}removeCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,o=arguments.length>2?arguments[2]:void 0;if("object"===this.hot.dataType||this.tableMeta.columns)throw new Error("cannot remove column with object data source or columns option specified");let s="number"!=typeof e?-t:e;s=(this.hot.countCols()+s)%this.hot.countCols();const n=this.visualColumnsToPhysical(s,t),i=n.slice(0).sort(((e,t)=>t-e));if(!1===this.hot.runHooks("beforeRemoveCol",s,t,n,o))return!1;let r=!0;const l=i.length,a=this.dataSource;for(let e=0;e<l;e++)r&&n[0]!==n[e]-e&&(r=!1);if(r)for(let e=0,o=this.hot.countSourceRows();e<o;e++)a[e].splice(n[0],t),0===e&&this.metaManager.removeColumn(n[0],t);else for(let e=0,t=this.hot.countSourceRows();e<t;e++)for(let t=0;t<l;t++)a[e].splice(i[t],1),0===e&&this.metaManager.removeColumn(i[t],1);return s<this.hot.countCols()&&(this.hot.columnIndexMapper.removeIndexes(n),0===this.hot.columnIndexMapper.getNotTrimmedIndexesLength()&&this.hot.rowIndexMapper.setIndexesSequence([])),this.hot.runHooks("afterRemoveCol",s,t,n,o),this.hot.forceFullRender=!0,this.refreshDuckSchema(),!0}spliceCol(e,t,o){const s=this.hot.getDataAtCol(e),n=s.slice(t,t+o),i=s.slice(t+o);for(var r=arguments.length,l=new Array(r>3?r-3:0),h=3;h<r;h++)l[h-3]=arguments[h];(0,a.extendArray)(l,i);let c=0;for(;c<o;)l.push(null),c+=1;return(0,a.to2dArray)(l),this.hot.populateFromArray(t,e,l,null,null,"spliceCol"),n}spliceRow(e,t,o){const s=this.hot.getSourceDataAtRow(e),n=s.slice(t,t+o),i=s.slice(t+o);for(var r=arguments.length,l=new Array(r>3?r-3:0),h=3;h<r;h++)l[h-3]=arguments[h];(0,a.extendArray)(l,i);let c=0;for(;c<o;)l.push(null),c+=1;return this.hot.populateFromArray(e,t,[l],null,null,"spliceRow"),n}spliceData(e,t,o){if(!1!==this.hot.runHooks("beforeDataSplice",e,t,o)){const t=[...this.dataSource.slice(0,e),...o,...this.dataSource.slice(e)];this.dataSource.length=0,t.forEach((e=>this.dataSource.push(e)))}}filterData(e,t,o){let s=this.hot.runHooks("filterData",e,t,o);!1===Array.isArray(s)&&(s=this.dataSource.filter(((e,t)=>-1===o.indexOf(t)))),this.dataSource.length=0,Array.prototype.push.apply(this.dataSource,s)}get(e,t){const o=this.hot.toPhysicalRow(e);let s=this.dataSource[o];const n=this.hot.runHooks("modifyRowData",o);s=isNaN(n)?n:s;const{dataDotNotation:i}=this.hot.getSettings();let r=null;if(s&&s.hasOwnProperty&&(0,l.hasOwnProperty)(s,t))r=s[t];else if(i&&"string"==typeof t&&t.indexOf(".")>-1){let e=s;if(!e)return null;const o=t.split(".");for(let t=0,s=o.length;t<s;t++)if(e=e[o[t]],void 0===e)return null;r=e}else"function"==typeof t&&(r=t(this.dataSource.slice(o,o+1)[0]));if(this.hot.hasHook("modifyData")){const e=(0,l.createObjectPropListener)(r);this.hot.runHooks("modifyData",o,this.propToCol(t),e,"get"),e.isTouched()&&(r=e.value)}return r}getCopyable(e,t){return this.hot.getCellMeta(e,this.propToCol(t)).copyable?this.get(e,t):""}set(e,t,o){const s=this.hot.toPhysicalRow(e);let n=o,i=this.dataSource[s];const r=this.hot.runHooks("modifyRowData",s);if(i=isNaN(r)?r:i,this.hot.hasHook("modifyData")){const e=(0,l.createObjectPropListener)(n);this.hot.runHooks("modifyData",s,this.propToCol(t),e,"set"),e.isTouched()&&(n=e.value)}const{dataDotNotation:a}=this.hot.getSettings();if(i&&i.hasOwnProperty&&(0,l.hasOwnProperty)(i,t))i[t]=n;else if(a&&"string"==typeof t&&t.indexOf(".")>-1){let e,o=i,s=0;const r=t.split(".");for(s=0,e=r.length-1;s<e;s++)void 0===o[r[s]]&&(o[r[s]]={}),o=o[r[s]];o[r[s]]=n}else"function"==typeof t?t(this.dataSource.slice(s,s+1)[0],n):i[t]=n}visualRowsToPhysical(e,t){const o=this.hot.countSourceRows(),s=[];let n,i=(o+e)%o,r=t;for(;i<o&&r;)n=this.hot.toPhysicalRow(i),s.push(n),r-=1,i+=1;return s}visualColumnsToPhysical(e,t){const o=this.hot.countCols(),s=[];let n=(o+e)%o,i=t;for(;n<o&&i;){const e=this.hot.toPhysicalColumn(n);s.push(e),i-=1,n+=1}return s}clear(){for(let e=0;e<this.hot.countSourceRows();e++)for(let t=0;t<this.hot.countCols();t++)this.set(e,this.colToProp(t),"")}getLength(){const e=this.tableMeta.maxRows;let t;t=e<0||0===e?0:e||1/0;const o=this.hot.rowIndexMapper.getNotTrimmedIndexesLength();return Math.min(o,t)}getAll(){const e={row:0,col:0},t={row:Math.max(this.hot.countRows()-1,0),col:Math.max(this.hot.countCols()-1,0)};return e.row-t.row!=0||this.hot.countSourceRows()?this.getRange(e,t,u.DESTINATION_RENDERER):[]}countCachedColumns(){return this.colToPropCache.length}getRange(e,t,o){const s=[];let n,i,r;const l=this.tableMeta.maxRows,a=this.tableMeta.maxCols;if(0===l||0===a)return[];const h=o===u.DESTINATION_CLIPBOARD_GENERATOR?this.getCopyable:this.get,c=Math.min(Math.max(l-1,0),Math.max(e.row,t.row)),d=Math.min(Math.max(a-1,0),Math.max(e.col,t.col));for(n=Math.min(e.row,t.row);n<=c;n++){r=[];const o=n>=0?this.hot.toPhysicalRow(n):n;for(i=Math.min(e.col,t.col);i<=d&&null!==o;i++)r.push(h.call(this,n,this.colToProp(i)));null!==o&&s.push(r)}return s}getText(e,t){return(0,i.stringify)(this.getRange(e,t,u.DESTINATION_RENDERER))}getCopyableText(e,t){return(0,i.stringify)(this.getRange(e,t,u.DESTINATION_CLIPBOARD_GENERATOR))}destroy(){this.hot=null,this.metaManager=null,this.dataSource=null,this.duckSchema=null,this.colToPropCache.length=0,this.propToColCache.clear(),this.propToColCache=void 0}}t.default=u},12248:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(13911),r=o(56216),l=o(9175),a=o(87485),h=o(78832);t.default=class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];(0,n.default)(this,"hot",void 0),(0,n.default)(this,"data",void 0),(0,n.default)(this,"dataType","array"),(0,n.default)(this,"colToProp",(()=>{})),(0,n.default)(this,"propToCol",(()=>{})),this.hot=e,this.data=t}modifyRowData(e){let t;return this.hot.hasHook("modifyRowData")&&(t=this.hot.runHooks("modifyRowData",e)),void 0===t||Number.isInteger(t)?this.data[e]:t}getData(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.data&&0!==this.data.length?this.getByRange(null,null,e):this.data}setData(e){this.data=e}getAtColumn(e){const t=[];return(0,l.arrayEach)(this.data,((o,s)=>{const n=this.getAtCell(s,e);t.push(n)})),t}getAtRow(e,t,o){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const n=void 0===t&&void 0===o,{dataDotNotation:r}=this.hot.getSettings();let l=null,c=null;if(l=this.modifyRowData(e),Array.isArray(l))c=[],n?l.forEach(((t,o)=>{c[o]=this.getAtPhysicalCell(e,o,l)})):(0,a.rangeEach)(t,o,(o=>{c[o-t]=this.getAtPhysicalCell(e,o,l)}));else if((0,i.isObject)(l)||(0,h.isFunction)(l))if(c=s?[]:{},!n||s){const n=0,h=this.countFirstRowKeys()-1;(0,a.rangeEach)(n,h,(a=>{const u=this.colToProp(a);if(a>=(t||n)&&a<=(o||h)&&!Number.isInteger(u)){const t=this.getAtPhysicalCell(e,u,l);s?c.push(t):r?(0,i.setProperty)(c,u,t):c[u]=t}}))}else(0,i.objectEach)(l,((t,o)=>{const s=this.getAtPhysicalCell(e,o,l);r?(0,i.setProperty)(c,o,s):c[o]=s}));return c}setAtCell(e,t,o){if(!(e>=this.countRows()||t>=this.countFirstRowKeys())){if(this.hot.hasHook("modifySourceData")){const s=(0,i.createObjectPropListener)(o);this.hot.runHooks("modifySourceData",e,t,s,"set"),s.isTouched()&&(o=s.value)}Number.isInteger(t)?this.data[e][t]=o:(0,i.setProperty)(this.data[e],t,o)}}getAtPhysicalCell(e,t,o){let s=null;if(o)if("string"==typeof t){const{dataDotNotation:e}=this.hot.getSettings();s=e?(0,i.getProperty)(o,t):o[t]}else s="function"==typeof t?t(o):o[t];if(this.hot.hasHook("modifySourceData")){const o=(0,i.createObjectPropListener)(s);this.hot.runHooks("modifySourceData",e,t,o,"get"),o.isTouched()&&(s=o.value)}return s}getAtCell(e,t){const o=this.modifyRowData(e);return this.getAtPhysicalCell(e,this.colToProp(t),o)}getByRange(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=!1,n=null,i=null,r=null,l=null;null===e||null===t?(s=!0,n=0,r=this.countRows()-1):(n=Math.min(e.row,t.row),i=Math.min(e.col,t.col),r=Math.max(e.row,t.row),l=Math.max(e.col,t.col));const h=[];return(0,a.rangeEach)(n,r,(e=>{h.push(s?this.getAtRow(e,void 0,void 0,o):this.getAtRow(e,i,l,o))})),h}countRows(){if(this.hot.hasHook("modifySourceLength")){const e=this.hot.runHooks("modifySourceLength");if(Number.isInteger(e))return e}return this.data.length}countFirstRowKeys(){return(0,r.countFirstRowKeys)(this.data)}destroy(){this.data=null,this.hot=null}}},71757:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(87727));t.DataMap=n.default;var i=s(o(36102));t.MetaManager=i.default;var r=s(o(32054));t.metaSchemaFactory=r.default;var l=o(21781);t.replaceData=l.replaceData;var a=o(74870);t.DynamicCellMetaMod=a.DynamicCellMetaMod;var h=o(88884);t.ExtendMetaPropertiesMod=h.ExtendMetaPropertiesMod},36102:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85252)),i=s(o(47441)),r=s(o(5065)),l=s(o(25779)),a=s(o(63870)),h=o(13911);class c{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];this.hot=e,this.globalMeta=new n.default(e),this.tableMeta=new i.default(this.globalMeta),this.columnMeta=new r.default(this.globalMeta),this.cellMeta=new l.default(this.columnMeta),o.forEach((e=>new e(this))),this.globalMeta.updateMeta(t)}getGlobalMeta(){return this.globalMeta.getMeta()}updateGlobalMeta(e){this.globalMeta.updateMeta(e)}getTableMeta(){return this.tableMeta.getMeta()}updateTableMeta(e){this.tableMeta.updateMeta(e)}getColumnMeta(e){return this.columnMeta.getMeta(e)}updateColumnMeta(e,t){this.columnMeta.updateMeta(e,t)}getCellMeta(e,t,o){let{visualRow:s,visualColumn:n}=o;const i=this.cellMeta.getMeta(e,t);return i.visualRow=s,i.visualCol=n,i.row=e,i.col=t,this.runLocalHooks("afterGetCellMeta",i),i}getCellMetaKeyValue(e,t,o){if("string"!=typeof o)throw new Error("The passed cell meta object key is not a string");return this.cellMeta.getMeta(e,t,o)}setCellMeta(e,t,o,s){this.cellMeta.setMeta(e,t,o,s)}updateCellMeta(e,t,o){this.cellMeta.updateMeta(e,t,o)}removeCellMeta(e,t,o){this.cellMeta.removeMeta(e,t,o)}getCellsMeta(){return this.cellMeta.getMetas()}getCellsMetaAtRow(e){return this.cellMeta.getMetasAtRow(e)}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createRow(e,t)}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeRow(e,t)}createColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createColumn(e,t),this.columnMeta.createColumn(e,t)}removeColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeColumn(e,t),this.columnMeta.removeColumn(e,t)}clearCellsCache(){this.cellMeta.clearCache()}clearCache(){this.cellMeta.clearCache(),this.columnMeta.clearCache()}}t.default=c,(0,h.mixin)(c,a.default)},47586:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=s(o(85707)),i=o(9175),r=o(34471);class l{constructor(e){(0,n.default)(this,"valueFactory",void 0),(0,n.default)(this,"data",[]),(0,n.default)(this,"index",[]),(0,n.default)(this,"holes",new Set),this.valueFactory=e}obtain(e){(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=this._getStorageIndexByKey(e);let o;if(t>=0)o=this.data[t],void 0===o&&(o=this.valueFactory(e),this.data[t]=o);else if(o=this.valueFactory(e),this.holes.size>0){const t=this.holes.values().next().value;this.holes.delete(t),this.data[t]=o,this.index[e]=t}else this.data.push(o),this.index[e]=this.data.length-1;return o}insert(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)||(0,r.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const o=[],s=this.data.length;for(let e=0;e<t;e++)o.push(s+e),this.data.push(void 0);const n=(0,r.isNullish)(e)?this.index.length:e;this.index=[...this.index.slice(0,n),...o,...this.index.slice(n)]}remove(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)||(0,r.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const o=this.index.splice((0,r.isNullish)(e)?this.index.length-t:e,t);for(let e=0;e<o.length;e++){const t=o[e];"number"==typeof t&&this.holes.add(t)}}size(){return this.data.length-this.holes.size}values(){return(0,i.arrayFilter)(this.data,((e,t)=>!this.holes.has(t)))[Symbol.iterator]()}entries(){const e=[];for(let t=0;t<this.data.length;t++){const o=this._getKeyByStorageIndex(t);-1!==o&&e.push([o,this.data[t]])}let t=0;return{next:()=>{if(t<e.length){const o=e[t];return t+=1,{value:o,done:!1}}return{done:!0}}}}clear(){this.data=[],this.index=[],this.holes.clear()}_getStorageIndexByKey(e){return this.index.length>e?this.index[e]:-1}_getKeyByStorageIndex(e){return this.index.indexOf(e)}[Symbol.iterator](){return this.entries()}}t.default=l},25779:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(13911),r=o(34471),l=s(o(47586)),a=o(38893);t.default=class{constructor(e){(0,n.default)(this,"columnMeta",void 0),(0,n.default)(this,"metas",new l.default((()=>this._createRow()))),this.columnMeta=e}updateMeta(e,t,o){const s=this.getMeta(e,t);(0,i.extend)(s,o),(0,r.extendByMetaType)(s,o)}createRow(e,t){this.metas.insert(e,t)}createColumn(e,t){for(let o=0;o<this.metas.size();o++)this.metas.obtain(o).insert(e,t)}removeRow(e,t){this.metas.remove(e,t)}removeColumn(e,t){for(let o=0;o<this.metas.size();o++)this.metas.obtain(o).remove(e,t)}getMeta(e,t,o){const s=this.metas.obtain(e).obtain(t);return void 0===o?s:s[o]}setMeta(e,t,o,s){var n;const i=this.metas.obtain(e).obtain(t);null===(n=i._automaticallyAssignedMetaProps)||void 0===n||n.delete(o),i[o]=s}removeMeta(e,t,o){delete this.metas.obtain(e).obtain(t)[o]}getMetas(){const e=[],t=Array.from(this.metas.values());for(let o=0;o<t.length;o++)(0,a.isDefined)(t[o])&&e.push(...t[o].values());return e}getMetasAtRow(e){(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=new Map(this.metas);return t.has(e)?Array.from(t.get(e).values()):[]}clearCache(){this.metas.clear()}_createRow(){return new l.default((e=>this._createMeta(e)))}_createMeta(e){return new(this.columnMeta.getMetaConstructor(e))}}},5065:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(13911),r=o(34471),l=s(o(47586));const a=["data","width"];t.default=class{constructor(e){(0,n.default)(this,"globalMeta",void 0),(0,n.default)(this,"metas",new l.default((()=>this._createMeta()))),this.globalMeta=e,this.metas=new l.default((()=>this._createMeta()))}updateMeta(e,t){const o=this.getMeta(e);(0,i.extend)(o,t),(0,r.extendByMetaType)(o,t)}createColumn(e,t){this.metas.insert(e,t)}removeColumn(e,t){this.metas.remove(e,t)}getMeta(e){return this.metas.obtain(e)}getMetaConstructor(e){return this.metas.obtain(e).constructor}clearCache(){this.metas.clear()}_createMeta(){return(0,r.columnFactory)(this.globalMeta.getMetaConstructor(),a).prototype}}},85252:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(13911),r=o(34471),l=s(o(32054));t.default=class{constructor(e){(0,n.default)(this,"metaCtor",class{}),(0,n.default)(this,"meta",void 0),this.meta=this.metaCtor.prototype,(0,i.extend)(this.meta,(0,l.default)()),this.meta.instance=e}getMetaConstructor(){return this.metaCtor}getMeta(){return this.meta}updateMeta(e){var t;(0,i.extend)(this.meta,e),(0,r.extendByMetaType)(this.meta,{...e,type:null!==(t=e.type)&&void 0!==t?t:this.meta.type},e)}}},47441:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(13911),r=o(34471);t.default=class{constructor(e){(0,n.default)(this,"meta",void 0);const t=e.getMetaConstructor();this.meta=new t}getMeta(){return this.meta}updateMeta(e){(0,i.extend)(this.meta,e),(0,r.extendByMetaType)(this.meta,e,e)}}},32054:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(38893),n=o(13911);t.default=()=>({_automaticallyAssignedMetaProps:void 0,activeHeaderClassName:"ht__active_highlight",allowEmpty:!0,allowHtml:!1,allowInsertColumn:!0,allowInsertRow:!0,allowInvalid:!0,allowRemoveColumn:!0,allowRemoveRow:!0,ariaTags:!0,autoColumnSize:void 0,autoRowSize:void 0,autoWrapCol:!1,autoWrapRow:!1,bindRowsWithHeaders:void 0,cell:[],cells:void 0,checkedTemplate:void 0,className:void 0,colHeaders:null,collapsibleColumns:void 0,columnHeaderHeight:void 0,columns:void 0,columnSorting:void 0,columnSummary:void 0,colWidths:void 0,commentedCellClassName:"htCommentCell",comments:!1,contextMenu:void 0,copyable:!0,copyPaste:!0,correctFormat:!1,currentColClassName:void 0,currentHeaderClassName:"ht__highlight",currentRowClassName:void 0,customBorders:!1,data:void 0,dataDotNotation:!0,dataSchema:void 0,dateFormat:"DD/MM/YYYY",timeFormat:"h:mm:ss a",datePickerConfig:void 0,defaultDate:void 0,disableVisualSelection:!1,dragToScroll:!0,dropdownMenu:void 0,editor:void 0,enterBeginsEditing:!0,enterMoves:{col:0,row:1},fillHandle:{autoInsertRow:!1},filter:!0,filteringCaseSensitive:!1,filters:void 0,fixedColumnsLeft:0,fixedColumnsStart:0,fixedRowsBottom:0,fixedRowsTop:0,formulas:void 0,fragmentSelection:!1,headerClassName:void 0,height:void 0,hiddenColumns:void 0,hiddenRows:void 0,invalidCellClassName:"htInvalid",imeFastEdit:!1,isEmptyCol(e){let t,o,n;for(t=0,o=this.countRows();t<o;t++)if(n=this.getDataAtCell(t,e),!1===(0,s.isEmpty)(n))return!1;return!0},isEmptyRow(e){let t,o,i,r;for(t=0,o=this.countCols();t<o;t++)if(i=this.getDataAtCell(e,t),!1===(0,s.isEmpty)(i))return"object"==typeof i&&(r=this.getCellMeta(e,t),(0,n.isObjectEqual)(this.getSchema()[r.prop],i));return!0},label:void 0,language:"en-US",layoutDirection:"inherit",licenseKey:void 0,locale:"en-US",manualColumnFreeze:void 0,manualColumnMove:void 0,manualColumnResize:void 0,manualRowMove:void 0,manualRowResize:void 0,maxCols:1/0,maxRows:1/0,mergeCells:!1,minCols:0,minRows:0,minSpareCols:0,minSpareRows:0,multiColumnSorting:void 0,navigableHeaders:!1,tabNavigation:!0,nestedHeaders:void 0,nestedRows:void 0,noWordWrapClassName:"htNoWrap",numericFormat:void 0,observeDOMVisibility:!0,outsideClickDeselects:!0,persistentState:void 0,placeholder:void 0,placeholderCellClassName:"htPlaceholder",preventOverflow:!1,preventWheel:!1,readOnly:!1,readOnlyCellClassName:"htDimmed",renderAllRows:!1,renderAllColumns:!1,renderer:void 0,rowHeaders:void 0,rowHeaderWidth:void 0,rowHeights:void 0,search:!1,selectionMode:"multiple",selectOptions:void 0,skipColumnOnPaste:!1,skipRowOnPaste:!1,sortByRelevance:!0,source:void 0,startCols:5,startRows:5,stretchH:"none",strict:void 0,tableClassName:void 0,tabMoves:{row:0,col:1},title:void 0,trimDropdown:!0,trimRows:void 0,trimWhitespace:!0,type:"text",uncheckedTemplate:void 0,undo:void 0,validator:void 0,viewportColumnRenderingOffset:"auto",viewportRowRenderingOffset:"auto",visibleRows:10,width:void 0,wordWrap:!0})},74870:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=s(o(85707)),i=s(o(56937)),r=o(13911),l=o(78832);t.DynamicCellMetaMod=class{constructor(e){(0,n.default)(this,"metaManager",void 0),(0,n.default)(this,"metaSyncMemo",new Map),this.metaManager=e,e.addLocalHook("afterGetCellMeta",(e=>this.extendCellMeta(e))),i.default.getSingleton().add("beforeRender",(e=>{e&&this.metaSyncMemo.clear()}),this.metaManager.hot)}extendCellMeta(e){var t;const{row:o,col:s}=e;if(null!==(t=this.metaSyncMemo.get(o))&&void 0!==t&&t.has(s))return;const{visualRow:n,visualCol:i}=e,a=this.metaManager.hot,h=a.colToProp(i);e.prop=h,a.runHooks("beforeGetCellMeta",n,i,e);const c=(0,r.hasOwnProperty)(e,"type")?e.type:null;let u=(0,l.isFunction)(e.cells)?e.cells(o,s,h):null;var d;c&&(u?u.type=null!==(d=u.type)&&void 0!==d?d:c:u={type:c});u&&this.metaManager.updateCellMeta(o,s,u),a.runHooks("afterGetCellMeta",n,i,e),this.metaSyncMemo.has(o)||this.metaSyncMemo.set(o,new Set),this.metaSyncMemo.get(o).add(s)}}},88884:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=s(o(85707));function i(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function r(e,t){return e.get(function(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}(e,t))}var l=new WeakMap;t.ExtendMetaPropertiesMod=class{constructor(e){(0,n.default)(this,"metaManager",void 0),(0,n.default)(this,"usageTracker",new Set),(0,n.default)(this,"propDescriptors",new Map([["ariaTags",{initOnly:!0}],["fixedColumnsLeft",{target:"fixedColumnsStart",onChange(e){if(this.metaManager.hot.isRtl()&&"fixedColumnsLeft"===e)throw new Error("The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.");if(this.usageTracker.has("fixedColumnsLeft")&&this.usageTracker.has("fixedColumnsStart"))throw new Error("The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. Please use only the option `fixedColumnsStart`.")}}],["layoutDirection",{initOnly:!0}],["renderAllColumns",{initOnly:!0}],["renderAllRows",{initOnly:!0}]])),i(this,l,((e,t,o)=>{if(!o)throw new Error(`The \`${e}\` option can not be updated after the Handsontable is initialized.`)})),this.metaManager=e,this.extendMetaProps()}extendMetaProps(){this.propDescriptors.forEach(((e,t)=>{const{initOnly:o,target:s,onChange:n}=e,i="string"==typeof s,a=i?s:t,h=`_${a}`;this.metaManager.globalMeta.meta[h]=this.metaManager.globalMeta.meta[a],n?(this.installPropWatcher(t,h,n),i&&this.installPropWatcher(s,h,n)):o&&(this.installPropWatcher(t,h,r(l,this)),this.metaManager.globalMeta.meta._initOnlySettings||(this.metaManager.globalMeta.meta._initOnlySettings=[]),this.metaManager.globalMeta.meta._initOnlySettings.push(t))}))}installPropWatcher(e,t,o){const s=this;Object.defineProperty(this.metaManager.globalMeta.meta,e,{get(){return this[t]},set(n){const i=!s.usageTracker.has(e);s.usageTracker.add(e),o.call(s,e,n,i),this[t]=n},enumerable:!0,configurable:!0})}}},34471:(e,t,o)=>{"use strict";t.__esModule=!0,t.assert=function(e,t){if(!e())throw new Error(`Assertion failed: ${t}`)},t.columnFactory=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];function o(){}(0,s.inherit)(o,e);for(let e=0;e<t.length;e++)o.prototype[t[e]]=void 0;return o},t.extendByMetaType=function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;const i="string"==typeof t.type?(0,n.getCellType)(t.type):t.type;e._automaticallyAssignedMetaProps&&(0,s.objectEach)(t,((t,o)=>{e._automaticallyAssignedMetaProps.delete(o)}));if(!(0,s.isObject)(i))return;o!==e||e._automaticallyAssignedMetaProps||(e._automaticallyAssignedMetaProps=new Set);const r={};(0,s.objectEach)(i,((t,n)=>{var i;(function(e,t){var o;if("CELL_TYPE"===e)return!1;return(null===(o=t._automaticallyAssignedMetaProps)||void 0===o?void 0:o.has(e))||!(0,s.hasOwnProperty)(t,e)})(n,o)&&(r[n]=t,null===(i=e._automaticallyAssignedMetaProps)||void 0===i||i.add(n))})),(0,s.extend)(e,r)},t.isNullish=function(e){return null==e},t.isUnsignedNumber=function(e){return Number.isInteger(e)&&e>=0},o(67834),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var s=o(13911),n=o(34299)},21781:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.replaceData=function(e,t,o,s){const{hotInstance:c,dataMap:u,dataSource:d,internalSource:g,source:f,metaManager:p,firstRun:m}=s,w=(0,n.toUpperCaseFirst)(g),C=c.getSettings();Array.isArray(C.dataSchema)?c.dataType="array":(0,i.isFunction)(C.dataSchema)?c.dataType="function":c.dataType="object";u&&u.destroy();e=c.runHooks(`before${w}`,e,m,f);const v=new r.default(c,e,p);if(t(v),"object"==typeof e&&null!==e)e.push&&e.splice||(e=[e]);else{if(null!==e)throw new Error(`${g} only accepts array of objects or array of arrays (${typeof e} given)`);{const t=v.getSchema();let o;e=[];let s=0,n=0;for(s=0,n=C.startRows;s<n;s++)if("object"!==c.dataType&&"function"!==c.dataType||!C.dataSchema)if("array"===c.dataType)o=(0,l.deepClone)(t[0]),e.push(o);else{o=[];for(let e=0,t=C.startCols;e<t;e++)o.push(null);e.push(o)}else o=(0,l.deepClone)(t),e.push(o)}}Array.isArray(e[0])&&(c.dataType="array");C.data=e,v.dataSource=e,d.data=e,d.dataType=c.dataType,d.colToProp=v.colToProp.bind(v),d.propToCol=v.propToCol.bind(v),d.countCachedColumns=v.countCachedColumns.bind(v),o(v),c.runHooks(`after${w}`,e,m,f),m||(c.runHooks("afterChange",null,g),c.render());c.getSettings().ariaTags&&(0,a.setAttribute)(c.rootElement,[(0,h.A11Y_ROWCOUNT)(-1),(0,h.A11Y_COLCOUNT)(c.countCols()+(c.view?c.countRowHeaders():0))])},o(67834),o(15724);var n=o(59777),i=o(78832),r=s(o(87727)),l=o(13911),a=o(9893),h=o(92692)},18344:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(71257),r=o(79729),l=o(84558),a=s(o(82629));function h(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function c(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var u=new WeakSet;class d{constructor(e,t,o){h(this,u),(0,n.default)(this,"hot",void 0),(0,n.default)(this,"tableMeta",void 0),(0,n.default)(this,"selection",void 0),(0,n.default)(this,"eventManager",void 0),(0,n.default)(this,"destroyed",!1),(0,n.default)(this,"activeEditor",void 0),(0,n.default)(this,"cellProperties",void 0),this.hot=e,this.tableMeta=t,this.selection=o,this.eventManager=new a.default(e),this.hot.addHook("afterDocumentKeyDown",(e=>c(u,this,g).call(this,e))),this.eventManager.addEventListener(this.hot.rootDocument.documentElement,"compositionstart",(e=>{!this.destroyed&&this.hot.isListening()&&this.openEditor("",e)})),this.hot.view._wt.update("onCellDblClick",((e,t,o)=>c(u,this,f).call(this,e,t,o)))}getActiveEditor(){return this.activeEditor}prepareEditor(){var e;if(this.activeEditor&&this.activeEditor.isWaiting())return void this.closeEditor(!1,!1,(e=>{e&&this.prepareEditor()}));const t=null===(e=this.hot.getSelectedRangeLast())||void 0===e?void 0:e.highlight;if(!t||t.isHeader())return;const{row:o,col:s}=t,n=this.hot.runHooks("modifyGetCellCoords",o,s);let i=o,r=s;if(Array.isArray(n)&&([i,r]=n),this.cellProperties=this.hot.getCellMeta(i,r),!this.isCellEditable())return void this.clearActiveEditor();const a=this.hot.getCell(o,s,!0);if(a){const e=this.hot.getCellEditor(this.cellProperties),t=this.hot.colToProp(r),n=this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(i),r);this.activeEditor=(0,l.getEditorInstance)(e,this.hot),this.activeEditor.prepare(o,s,t,a,n,this.cellProperties)}}isEditorOpened(){return this.activeEditor&&this.activeEditor.isOpened()}openEditor(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!this.isCellEditable())return void this.clearActiveEditor();const s=this.hot.getSelectedRangeLast();let n=this.hot.runHooks("beforeBeginEditing",s.highlight.row,s.highlight.col,e,t,o);t instanceof MouseEvent&&"boolean"!=typeof n&&(n=0===this.hot.selection.getLayerLevel()&&s.isSingle()),!1!==n?(this.activeEditor||(this.hot.scrollToFocusedCell(),this.prepareEditor()),this.activeEditor&&(o&&this.activeEditor.enableFullEditMode(),this.activeEditor.beginEditing(e,t))):this.clearActiveEditor()}closeEditor(e,t,o){this.activeEditor?this.activeEditor.finishEditing(e,t,o):o&&o(!1)}closeEditorAndSaveChanges(e){this.closeEditor(!1,e)}closeEditorAndRestoreOriginalValue(e){this.closeEditor(!0,e)}clearActiveEditor(){this.activeEditor=void 0}isCellEditable(){const e=this.hot.getSelectedRangeLast();if(!e)return!1;const t=this.hot.getCellEditor(this.cellProperties),{row:o,col:s}=e.highlight,{rowIndexMapper:n,columnIndexMapper:i}=this.hot,r=n.isHidden(this.hot.toPhysicalRow(o))||i.isHidden(this.hot.toPhysicalColumn(s));return!(this.cellProperties.readOnly||!t||r)}moveSelectionAfterEnter(e){const t={..."function"==typeof this.tableMeta.enterMoves?this.tableMeta.enterMoves(e):this.tableMeta.enterMoves};e.shiftKey&&(t.row=-t.row,t.col=-t.col),this.hot.selection.isMultiple()?this.selection.transformFocus(t.row,t.col):this.selection.transformStart(t.row,t.col,!0)}destroy(){this.destroyed=!0,this.eventManager.destroy()}}function g(e){const t=this.hot.getSelectedRangeLast();if(!this.hot.isListening()||!t||t.highlight.isHeader()||(0,r.isImmediatePropagationStopped)(e))return;const{keyCode:o}=e,s=(e.ctrlKey||e.metaKey)&&!e.altKey;(!this.activeEditor||this.activeEditor&&!this.activeEditor.isWaiting())&&((0,i.isFunctionKey)(o)||(0,i.isCtrlMetaKey)(o)||s||this.isEditorOpened()||this.openEditor("",e))}function f(e,t){t.isCell()&&this.openEditor(null,e,!0)}const p=new WeakMap;d.getInstance=function(e,t,o){let s=p.get(e);return s||(s=new d(e,t,o),p.set(e,s)),s};t.default=d},36854:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=o(56138),r=o(9175),l=o(9893),a=o(38893),h=o(59777),c=o(71257),u=o(28890),d=o(36748),g=o(92692);function f(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function p(e,t){return e.get(function(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}(e,t))}const m=t.EDITOR_TYPE="autocomplete";var w=new WeakMap;class C extends i.HandsontableEditor{constructor(){super(...arguments),(0,n.default)(this,"query",null),(0,n.default)(this,"strippedChoices",[]),(0,n.default)(this,"rawChoices",[]),f(this,w,this.hot.guid.slice(0,9)),(0,n.default)(this,"sortByRelevance",(function(e,t,o){const s=[],n=[],i=e.length;let r,l,c,u,d=t.length;if(0===i){for(c=0;c<d;c++)n.push(c);return n}for(c=0;c<d;c++){if(l=(0,h.stripTags)((0,a.stringify)(t[c])),o)u=l.indexOf(e);else{const t=this.cellProperties.locale;u=l.toLocaleLowerCase(t).indexOf(e.toLocaleLowerCase(t))}-1!==u&&(r=l.length-u-i,s.push({baseIndex:c,index:u,charsLeft:r,value:l}))}for(s.sort(((e,t)=>{if(-1===t.index)return-1;if(-1===e.index)return 1;if(e.index<t.index)return-1;if(t.index<e.index)return 1;if(e.index===t.index){if(e.charsLeft<t.charsLeft)return-1;if(e.charsLeft>t.charsLeft)return 1}return 0})),c=0,d=s.length;c<d;c++)n.push(s[c].baseIndex);return n}))}static get EDITOR_TYPE(){return m}getValue(){const e=this.rawChoices.find((e=>this.stripValueIfNeeded(e)===this.TEXTAREA.value));return(0,a.isDefined)(e)?e:this.TEXTAREA.value}createElements(){super.createElements(),(0,l.addClass)(this.htContainer,"autocompleteEditor"),(0,l.addClass)(this.htContainer,-1===this.hot.rootWindow.navigator.platform.indexOf("Mac")?"":"htMacScroll"),this.hot.getSettings().ariaTags&&(0,l.setAttribute)(this.TEXTAREA,[(0,g.A11Y_TEXT)(),(0,g.A11Y_COMBOBOX)(),(0,g.A11Y_HASPOPUP)("listbox"),(0,g.A11Y_AUTOCOMPLETE)()])}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i),this.hot.getSettings().ariaTags&&(0,l.setAttribute)(this.TEXTAREA,[(0,g.A11Y_EXPANDED)("false"),(0,g.A11Y_CONTROLS)(`${p(w,this)}-listbox-${e}-${t}`)])}open(){super.open();const e=void 0===this.cellProperties.trimDropdown||this.cellProperties.trimDropdown,t=this.hot.getSettings().ariaTags,o=Array.isArray(this.cellProperties.source)?this.cellProperties.source:null,s=null==o?void 0:o.length,{row:n,col:i}=this;this.showEditableElement(),this.focus();let r=(0,l.getScrollbarWidth)();0===r&&(0,u.isMacOS)()&&(r+=15),this.addHook("beforeKeyDown",(e=>this.onBeforeKeyDown(e))),this.htEditor.updateSettings({colWidths:e?[(0,l.outerWidth)(this.TEXTAREA)-2]:void 0,width:e?(0,l.outerWidth)(this.TEXTAREA)+r:void 0,autoColumnSize:!0,renderer:(e,n,i,r,h,c,u)=>{(0,d.textRenderer)(e,n,i,r,h,c,u);const{filteringCaseSensitive:f,allowHtml:p,locale:m}=this.cellProperties,w=this.query;let C,v,y=(0,a.stringify)(c);y&&!p&&(C=!0===f?y.indexOf(w):y.toLocaleLowerCase(m).indexOf(w.toLocaleLowerCase(m)),-1!==C&&(v=y.substr(C,w.length),y=y.replace(v,`<strong>${v}</strong>`))),t&&(0,l.setAttribute)(n,[(0,g.A11Y_OPTION)(),...o?[(0,g.A11Y_SETSIZE)(s)]:[],...o?[(0,g.A11Y_POSINSET)(o.indexOf(c)+1)]:[],["id",`${this.htEditor.rootElement.id}_${i}-${r}`]]),n.innerHTML=y},afterSelectionEnd:(e,o)=>{if(t){const t=this.htEditor.getCell(e,o,!0);(0,l.setAttribute)(t,[(0,g.A11Y_SELECTED)()]),(0,l.setAttribute)(this.TEXTAREA,...(0,g.A11Y_ACTIVEDESCENDANT)(t.id))}}}),t&&((0,l.setAttribute)(this.htEditor.view._wt.wtOverlays.wtTable.TABLE,...(0,g.A11Y_PRESENTATION)()),(0,l.setAttribute)(this.htEditor.rootElement,[(0,g.A11Y_LISTBOX)(),(0,g.A11Y_LIVE)("polite"),(0,g.A11Y_RELEVANT)("text"),["id",`${p(w,this)}-listbox-${n}-${i}`]]),(0,l.setAttribute)(this.TEXTAREA,...(0,g.A11Y_EXPANDED)("true"))),this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}))}close(){this.removeHooksByKey("beforeKeyDown"),super.close(),this.hot.getSettings().ariaTags&&(0,l.setAttribute)(this.TEXTAREA,[(0,g.A11Y_EXPANDED)("false")])}discardEditor(e){super.discardEditor(e),this.hot.view.render()}queryChoices(e){const t=this.cellProperties.source;this.query=e,"function"==typeof t?t.call(this.cellProperties,e,(e=>{this.rawChoices=e,this.updateChoicesList(this.stripValuesIfNeeded(e))})):Array.isArray(t)?(this.rawChoices=t,this.updateChoicesList(this.stripValuesIfNeeded(t))):this.updateChoicesList([])}updateChoicesList(e){const t=(0,l.getCaretPosition)(this.TEXTAREA),o=(0,l.getSelectionEndPosition)(this.TEXTAREA),s=this.cellProperties.sortByRelevance,n=this.cellProperties.filter;let i=null,a=null,h=e;s&&(i=this.sortByRelevance(this.stripValueIfNeeded(this.getValue()),h,this.cellProperties.filteringCaseSensitive));const c=Array.isArray(i)?i.length:0;if(!1===n)c&&(a=i[0]);else{const e=[];for(let t=0,o=h.length;t<o&&!(s&&c<=t);t++)c?e.push(h[i[t]]):e.push(h[t]);a=0,h=e}this.strippedChoices=h,0===h.length?this.htEditor.rootElement.style.display="none":this.htEditor.rootElement.style.display="",this.htEditor.loadData((0,r.pivot)([h])),h.length>0&&(this.updateDropdownDimensions(),this.flipDropdownIfNeeded(),!0===this.cellProperties.strict&&this.highlightBestMatchingChoice(a)),this.hot.listen(),(0,l.setCaretPosition)(this.TEXTAREA,t,t===o?void 0:o)}flipDropdownIfNeeded(){const e=(0,l.getTrimmingContainer)(this.hot.view._wt.wtTable.TABLE),t=e===this.hot.rootWindow,o=this.cellProperties.preventOverflow;if(t||!t&&(o||"horizontal"===o))return!1;const s=(0,l.offset)(this.TEXTAREA),n=(0,l.outerHeight)(this.TEXTAREA),i=this.getDropdownHeight(),r=e.scrollTop,a=(0,l.outerHeight)(this.hot.view._wt.wtTable.THEAD),h=(0,l.offset)(e),c=s.top-h.top-a+r,u=e.scrollHeight-c-a-n,d=i>u&&c>u;return d?this.flipDropdown(i):this.unflipDropdown(),this.limitDropdownIfNeeded(d?c:u,i),d}limitDropdownIfNeeded(e,t){if(t>e){let o=0,s=0,n=0,i=null;do{n=this.htEditor.getRowHeight(s)||this.htEditor.view._wt.getSetting("defaultRowHeight"),o+=n,s+=1}while(o<e);i=o-n,this.htEditor.flipped&&(this.htEditor.rootElement.style.top=parseInt(this.htEditor.rootElement.style.top,10)+t-i+"px"),this.setDropdownHeight(o-n)}}flipDropdown(e){const t=this.htEditor.rootElement.style;t.position="absolute",t.top=-e+"px",this.htEditor.flipped=!0}unflipDropdown(){const e=this.htEditor.rootElement.style;e.position="absolute",e.top="",this.htEditor.flipped=void 0}updateDropdownDimensions(){const e=this.htEditor.getColWidth(0)+(0,l.getScrollbarWidth)(this.hot.rootDocument)+2,t=this.cellProperties.trimDropdown;this.htEditor.updateSettings({height:this.getDropdownHeight(),width:t?void 0:e}),this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer()}setDropdownHeight(e){this.htEditor.updateSettings({height:e})}highlightBestMatchingChoice(e){"number"==typeof e?this.htEditor.selectCell(e,0,void 0,void 0,void 0,!1):this.htEditor.deselectCell()}getDropdownHeight(){const e=this.htEditor.getRowHeight(0)||23,t=this.cellProperties.visibleRows;return this.strippedChoices.length>=t?t*e:this.strippedChoices.length*e+8}stripValueIfNeeded(e){return this.stripValuesIfNeeded([e])[0]}stripValuesIfNeeded(e){const{allowHtml:t}=this.cellProperties,o=(0,r.arrayMap)(e,(e=>(0,a.stringify)(e)));return(0,r.arrayMap)(o,(e=>t?e:(0,h.stripTags)(e)))}allowKeyEventPropagation(e){const t=this.htEditor.getSelectedRangeLast(),o=t?t.from.row:-1;let s=!1;return e===c.KEY_CODES.ARROW_DOWN&&o>0&&o<this.htEditor.countRows()-1&&(s=!0),e===c.KEY_CODES.ARROW_UP&&o>-1&&(s=!0),s}onBeforeKeyDown(e){if((0,c.isPrintableChar)(e.keyCode)||e.keyCode===c.KEY_CODES.BACKSPACE||e.keyCode===c.KEY_CODES.DELETE||e.keyCode===c.KEY_CODES.INSERT){let t=10;if(e.keyCode===c.KEY_CODES.C&&(e.ctrlKey||e.metaKey))return;this.isOpened()||(t+=10),this.htEditor&&this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}),t)}}}t.AutocompleteEditor=C},80115:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(36854);t.EDITOR_TYPE=s.EDITOR_TYPE,t.AutocompleteEditor=s.AutocompleteEditor},63180:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(38893),r=o(13911),l=s(o(31872)),a=o(9893);const h=t.EDITOR_TYPE="base",c=t.EDITOR_STATE=Object.freeze({VIRGIN:"STATE_VIRGIN",EDITING:"STATE_EDITING",WAITING:"STATE_WAITING",FINISHED:"STATE_FINISHED"});class u{static get EDITOR_TYPE(){return h}constructor(e){(0,n.default)(this,"hot",void 0),(0,n.default)(this,"state",c.VIRGIN),(0,n.default)(this,"_opened",!1),(0,n.default)(this,"_fullEditMode",!1),(0,n.default)(this,"_closeCallback",null),(0,n.default)(this,"TD",null),(0,n.default)(this,"row",null),(0,n.default)(this,"col",null),(0,n.default)(this,"prop",null),(0,n.default)(this,"originalValue",null),(0,n.default)(this,"cellProperties",null),this.hot=e,this.init()}_fireCallbacks(e){this._closeCallback&&(this._closeCallback(e),this._closeCallback=null)}init(){}getValue(){throw Error("Editor getValue() method unimplemented")}setValue(){throw Error("Editor setValue() method unimplemented")}open(){throw Error("Editor open() method unimplemented")}close(){throw Error("Editor close() method unimplemented")}prepare(e,t,o,s,n,i){this.TD=s,this.row=e,this.col=t,this.prop=o,this.originalValue=n,this.cellProperties=i,this.state=this.isOpened()?this.state:c.VIRGIN}extend(){return class extends this.constructor{}}saveValue(e,t){let o,s,n,i;if(t){const e=this.hot.getSelectedLast();o=Math.max(Math.min(e[0],e[2]),0),s=Math.max(Math.min(e[1],e[3]),0),n=Math.max(e[0],e[2]),i=Math.max(e[1],e[3])}else[o,s,n,i]=[this.row,this.col,null,null];const r=this.hot.runHooks("modifyGetCellCoords",o,s);Array.isArray(r)&&([o,s]=r),this.hot.populateFromArray(o,s,e,n,i,"edit")}beginEditing(e,t){if(this.state!==c.VIRGIN)return;const o=this.hot,s=o.rowIndexMapper.getRenderableFromVisualIndex(this.row),n=o.columnIndexMapper.getRenderableFromVisualIndex(this.col);if(o.view.scrollViewport(o._createCellCoords(s,n)),this.state=c.EDITING,this.isInFullEditMode()){const t="string"==typeof e?e:(0,i.stringify)(this.originalValue);this.setValue(t)}this.open(t),this._opened=!0,this.focus(),o.view.render(),o.runHooks("afterBeginEditing",this.row,this.col)}finishEditing(e,t,o){let s;if(o){const e=this._closeCallback;this._closeCallback=t=>{e&&e(t),o(t),this.hot.view.render()}}if(!this.isWaiting())if(this.state!==c.VIRGIN){if(this.state===c.EDITING){if(e)return this.cancelChanges(),void this.hot.view.render();const o=this.getValue();s=this.cellProperties.trimWhitespace?[["string"==typeof o?String.prototype.trim.call(o||""):o]]:[[o]],this.state=c.WAITING,this.saveValue(s,t),this.hot.getCellValidator(this.cellProperties)?this.hot.addHookOnce("postAfterValidate",(e=>{this.state=c.FINISHED,this.discardEditor(e)})):(this.state=c.FINISHED,this.discardEditor(!0))}}else this.hot._registerTimeout((()=>{this._fireCallbacks(!0)}))}cancelChanges(){this.state=c.FINISHED,this.discardEditor()}discardEditor(e){if(this.state===c.FINISHED)if(!1===e&&!0!==this.cellProperties.allowInvalid)this.hot.selectCell(this.row,this.col),this.focus(),this.state=c.EDITING,this._fireCallbacks(!1);else{this.close(),this._opened=!1,this._fullEditMode=!1,this.state=c.VIRGIN,this._fireCallbacks(!0);this.hot.getShortcutManager().setActiveContextName("grid")}}enableFullEditMode(){this._fullEditMode=!0}isInFullEditMode(){return this._fullEditMode}isOpened(){return this._opened}isWaiting(){return this.state===c.WAITING}getEditedCellRect(){var e;const t=this.getEditedCell();if(!t)return;const{wtOverlays:o,wtViewport:s}=this.hot.view._wt,n=this.hot.rootWindow,i=(0,a.offset)(t),r=(0,a.outerWidth)(t),l=(0,a.offset)(this.hot.rootElement),h=(0,a.outerWidth)(this.hot.rootElement),c=o.topOverlay.holder,u=o.inlineStartOverlay.holder,d=c!==n?c.scrollTop:0,g=u!==n?u.scrollLeft:0,f=n.innerWidth-l.left-h,{wtTable:p}=null!==(e=o.getParentOverlay(t))&&void 0!==e?e:this.hot.view._wt,m=p.name,w=["master","inline_start"].includes(m)?d:0,C=["master","top","bottom"].includes(m)?g:0,v=i.top===l.top?0:1;let y=i.top-l.top-v-w,E=0;E=this.hot.isRtl()?n.innerWidth-i.left-r-f-1+C:i.left-l.left-1-C,["top","top_inline_start_corner"].includes(m)&&(y+=o.topOverlay.getOverlayOffset()),["inline_start","top_inline_start_corner"].includes(m)&&(E+=Math.abs(o.inlineStartOverlay.getOverlayOffset()));const S=this.hot.hasColHeaders(),R=this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row),b=this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col),_=this.hot.rowIndexMapper.getRenderableIndexesLength()-this.hot.view._wt.getSetting("fixedRowsBottom");(S&&R<=0||R===_)&&(y+=1),b<=0&&(E+=1);const T=s.rowsRenderCalculator.startPosition,M=s.columnsRenderCalculator.startPosition,O=Math.abs(o.inlineStartOverlay.getScrollPosition()),I=o.topOverlay.getScrollPosition(),N=(0,a.getScrollbarWidth)(this.hot.rootDocument);let A=t.offsetTop;if(["inline_start","master"].includes(m)&&(A+=T-I),["bottom","bottom_inline_start_corner"].includes(m)){const{wtViewport:e,wtTable:t}=o.bottomOverlay.clone;A+=e.getWorkspaceHeight()-t.getHeight()-N}let P=t.offsetLeft;this.hot.isRtl()?(P=P>=0?p.getWidth()-t.offsetLeft:Math.abs(P),P+=M-O-r):["top","master","bottom"].includes(m)&&(P+=M-O);const x=(0,a.getComputedStyle)(this.TD,this.hot.rootWindow),H=this.hot.isRtl()?"borderRightWidth":"borderLeftWidth",D=parseInt(x[H],10)>0?0:1,L=parseInt(x.borderTopWidth,10)>0?0:1,k=(0,a.outerWidth)(t)+D,V=(0,a.outerHeight)(t)+L,F=(0,a.hasVerticalScrollbar)(c)?N:0,W=(0,a.hasHorizontalScrollbar)(u)?N:0,B=this.hot.view.maximumVisibleElementWidth(P)-F+D;return{top:y,start:E,height:V,maxHeight:Math.max(this.hot.view.maximumVisibleElementHeight(A)-W+L,23),width:k,maxWidth:B}}getEditedCellsLayerClass(){switch(this.checkEditorSection()){case"inline-start":return"ht_clone_left ht_clone_inline_start";case"bottom":return"ht_clone_bottom";case"bottom-inline-start-corner":return"ht_clone_bottom_left_corner ht_clone_bottom_inline_start_corner";case"top":return"ht_clone_top";case"top-inline-start-corner":return"ht_clone_top_left_corner ht_clone_top_inline_start_corner";default:return"ht_clone_master"}}getEditedCell(){return this.hot.getCell(this.row,this.col,!0)}checkEditorSection(){const e=this.hot.countRows();let t="";return this.row<this.hot.getSettings().fixedRowsTop?t=this.col<this.hot.getSettings().fixedColumnsStart?"top-inline-start-corner":"top":this.hot.getSettings().fixedRowsBottom&&this.row>=e-this.hot.getSettings().fixedRowsBottom?t=this.col<this.hot.getSettings().fixedColumnsStart?"bottom-inline-start-corner":"bottom":this.col<this.hot.getSettings().fixedColumnsStart&&(t="inline-start"),t}}t.BaseEditor=u,(0,r.mixin)(u,l.default)},52618:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(63180);t.EDITOR_STATE=s.EDITOR_STATE,t.EDITOR_TYPE=s.EDITOR_TYPE,t.BaseEditor=s.BaseEditor},11936:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(52618),n=o(9893);const i=t.EDITOR_TYPE="checkbox";class r extends s.BaseEditor{static get EDITOR_TYPE(){return i}beginEditing(e,t){if(t&&"mouseup"===t.type&&"TD"===t.target.nodeName){const e=this.TD.querySelector('input[type="checkbox"]');(0,n.hasClass)(e,"htBadValue")||e.click()}}finishEditing(){}init(){}open(){}close(){}getValue(){}setValue(){}focus(){}}t.CheckboxEditor=r},39626:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(11936);t.EDITOR_TYPE=s.EDITOR_TYPE,t.CheckboxEditor=s.CheckboxEditor},10978:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=s(o(86798)),r=s(o(75972)),l=o(52618),a=o(64952),h=o(9893),c=o(13911),u=o(71257);o(17728);const d=t.EDITOR_TYPE="date",g="dateEditor";class f extends a.TextEditor{constructor(){super(...arguments),(0,n.default)(this,"defaultDateFormat","DD/MM/YYYY"),(0,n.default)(this,"parentDestroyed",!1),(0,n.default)(this,"$datePicker",null)}static get EDITOR_TYPE(){return d}init(){if("function"!=typeof i.default)throw new Error("You need to include moment.js to your project.");if("function"!=typeof r.default)throw new Error("You need to include Pikaday to your project.");super.init(),this.hot.addHook("afterDestroy",(()=>{this.parentDestroyed=!0,this.destroyElements()}))}createElements(){super.createElements(),this.datePicker=this.hot.rootDocument.createElement("DIV"),this.datePickerStyle=this.datePicker.style,this.datePickerStyle.position="absolute",this.datePickerStyle.top=0,this.datePickerStyle.left=0,this.datePickerStyle.zIndex=9999,this.datePicker.setAttribute("dir",this.hot.isRtl()?"rtl":"ltr"),(0,h.addClass)(this.datePicker,"htDatepickerHolder"),this.hot.rootDocument.body.appendChild(this.datePicker),this.eventManager.addEventListener(this.datePicker,"mousedown",(e=>{(0,h.hasClass)(e.target,"pika-day")&&this.hideDatepicker(),e.stopPropagation()}))}destroyElements(){const e=this.datePicker.parentNode;this.$datePicker&&this.$datePicker.destroy(),e&&e.removeChild(this.datePicker)}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i)}open(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;const t=this.hot.getShortcutManager().getContext("editor");this.showDatepicker(e),super.open(),t.addShortcuts([{keys:[["ArrowLeft"]],callback:()=>{this.$datePicker.adjustDate("subtract",1)}},{keys:[["ArrowRight"]],callback:()=>{this.$datePicker.adjustDate("add",1)}},{keys:[["ArrowUp"]],callback:()=>{this.$datePicker.adjustDate("subtract",7)}},{keys:[["ArrowDown"]],callback:()=>{this.$datePicker.adjustDate("add",7)}}],{group:g})}close(){var e;this._opened=!1,null!==(e=this.$datePicker)&&void 0!==e&&e.destroy&&this.$datePicker.destroy(),this.hot._registerTimeout((()=>{const e=this.hot._getEditorManager();e.closeEditor(),this.hot.view.render(),e.prepareEditor()}));this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(g),super.close()}finishEditing(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super.finishEditing(e,t)}showDatepicker(e){const t=this.cellProperties.dateFormat||this.defaultDateFormat,o=this.hot.view.isMouseDown(),s=!!e&&(0,u.isFunctionKey)(e.keyCode);let n;this.datePicker.style.display="block",this.$datePicker=new r.default(this.getDatePickerConfig()),"function"==typeof this.$datePicker.useMoment&&this.$datePicker.useMoment(i.default),this.$datePicker._onInputFocus=function(){},this.originalValue?(n=this.originalValue,(0,i.default)(n,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(n,t),!0),this.getValue()!==this.originalValue&&this.setValue(this.originalValue),s||o||this.setValue("")):this.cellProperties.defaultDate?(n=this.cellProperties.defaultDate,(0,i.default)(n,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(n,t),!0),s||o||this.setValue("")):this.$datePicker.gotoToday()}hideDatepicker(){this.datePickerStyle.display="none",this.$datePicker.hide()}getDatePickerConfig(){const e=this.TEXTAREA,t={};this.cellProperties&&this.cellProperties.datePickerConfig&&(0,c.deepExtend)(t,this.cellProperties.datePickerConfig);const o=t.onSelect,s=t.onClose;return t.field=e,t.trigger=e,t.container=this.datePicker,t.bound=!1,t.keyboardInput=!1,t.format=t.format||this.defaultDateFormat,t.reposition=t.reposition||!1,t.isRTL=!1,t.onSelect=e=>{let t=e;isNaN(t.getTime())||(t=(0,i.default)(t).format(this.cellProperties.dateFormat||this.defaultDateFormat)),this.setValue(t),o&&o()},t.onClose=()=>{this.parentDestroyed||this.finishEditing(!1),s&&s()},t}refreshDimensions(e){var t;if(super.refreshDimensions(e),this.state!==l.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.hideDatepicker();const{rowIndexMapper:o,columnIndexMapper:s}=this.hot,{wtOverlays:n}=this.hot.view._wt,{wtTable:i}=null!==(t=n.getParentOverlay(this.TD))&&void 0!==t?t:this.hot.view._wt,r=o.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleRow()),a=o.getVisualFromRenderableIndex(i.getLastPartiallyVisibleRow()),c=s.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleColumn()),u=s.getVisualFromRenderableIndex(i.getLastPartiallyVisibleColumn());if(this.row>=r&&this.row<=a&&this.col>=c&&this.col<=u){const e=this.TD.getBoundingClientRect();this.datePickerStyle.top=`${this.hot.rootWindow.pageYOffset+e.top+(0,h.outerHeight)(this.TD)}px`;let t=this.hot.rootWindow.pageXOffset;this.hot.isRtl()?t+=e.right-(0,h.outerWidth)(this.datePicker):t+=e.left,this.datePickerStyle.left=`${t}px`}else this.hideDatepicker()}}t.DateEditor=f},59127:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(10978);t.EDITOR_TYPE=s.EDITOR_TYPE,t.DateEditor=s.DateEditor},52236:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(80115),i=s(o(56937));const r=t.EDITOR_TYPE="dropdown";class l extends n.AutocompleteEditor{static get EDITOR_TYPE(){return r}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i),this.cellProperties.filter=!1,this.cellProperties.strict=!0}}t.DropdownEditor=l,i.default.getSingleton().add("beforeValidate",(function(e,t,o){const s=this.propToCol(o);if(Number.isInteger(s)){const e=this.getCellMeta(t,s);e.editor===l&&void 0===e.strict&&(e.filter=!1,e.strict=!0)}}))},50486:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(52236);t.EDITOR_TYPE=s.EDITOR_TYPE,t.DropdownEditor=s.DropdownEditor},29408:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952),n=o(9893),i=o(79729),r=o(13911),l=o(37947);const a="handsontableEditor",h=t.EDITOR_TYPE="handsontable";class c extends s.TextEditor{static get EDITOR_TYPE(){return h}open(){super.open(),this.htEditor&&this.htEditor.destroy(),"none"===this.htContainer.style.display&&(this.htContainer.style.display=""),this.htEditor=new this.hot.constructor(this.htContainer,this.htOptions),this.htEditor.init(),this.htEditor.rootElement.style.display="",this.cellProperties.strict?this.htEditor.selectCell(0,0):this.htEditor.deselectCell(),(0,n.setCaretPosition)(this.TEXTAREA,0,this.TEXTAREA.value.length),this.refreshDimensions()}close(){this.htEditor&&(this.htEditor.rootElement.style.display="none"),this.removeHooksByKey("beforeKeyDown"),super.close()}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i);const l=this,a={startRows:0,startCols:0,minRows:0,minCols:0,className:"listbox",copyPaste:!1,autoColumnSize:!1,autoRowSize:!1,readOnly:!0,fillHandle:!1,autoWrapCol:!1,autoWrapRow:!1,ariaTags:!1,afterOnCellMouseDown(e,t){const o=this.getSourceData(t.row,t.col);void 0!==o&&l.setValue(o),l.hot.destroyEditor()},preventWheel:!0,layoutDirection:this.hot.isRtl()?"rtl":"ltr"};this.cellProperties.handsontable&&(0,r.extend)(a,i.handsontable),this.htOptions=a}beginEditing(e,t){const o=this.hot.getSettings().onBeginEditing;o&&!1===o()||super.beginEditing(e,t)}createElements(){super.createElements();const e=this.hot.rootDocument.createElement("DIV");e.className="handsontableEditor",this.TEXTAREA_PARENT.appendChild(e),this.htContainer=e,this.assignHooks()}finishEditing(e,t,o){if(this.htEditor&&this.htEditor.isListening()&&this.hot.listen(),this.htEditor&&this.htEditor.getSelectedLast()){const e=this.htEditor.getValue();void 0!==e&&this.setValue(e)}super.finishEditing(e,t,o)}assignHooks(){this.hot.addHook("afterDestroy",(()=>{this.htEditor&&this.htEditor.destroy()}))}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor");super.registerShortcuts();const t={group:a,relativeToGroup:l.EDITOR_EDIT_GROUP,position:"before"},o=(e,t)=>{const o=this.htEditor;if(void 0!==e&&(e<0||o.flipped&&e>o.countRows()-1?o.deselectCell():o.selectCell(e,0),o.getData().length))return t.preventDefault(),(0,i.stopImmediatePropagation)(t),this.hot.listen(),this.TEXTAREA.focus(),!1};e.addShortcuts([{keys:[["ArrowUp"]],callback:e=>{const t=this.htEditor;let s,n;return!t.getSelectedLast()&&t.flipped?s=t.countRows()-1:t.getSelectedLast()&&(t.flipped?(n=t.getSelectedLast()[0],s=Math.max(0,n-1)):(n=t.getSelectedLast()[0],s=n-1)),o(s,e)},preventDefault:!1},{keys:[["ArrowDown"]],callback:e=>{const t=this.htEditor;let s,n;if(t.getSelectedLast()||t.flipped){if(t.getSelectedLast())if(t.flipped)s=t.getSelectedLast()[0]+1;else if(!t.flipped){const e=t.countRows()-1;n=t.getSelectedLast()[0],s=Math.min(e,n+1)}}else s=0;return o(s,e)},preventDefault:!1}],t)}unregisterShortcuts(){super.unregisterShortcuts();this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(a)}}t.HandsontableEditor=c},56138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(29408);t.EDITOR_TYPE=s.EDITOR_TYPE,t.HandsontableEditor=s.HandsontableEditor},83645:(e,t,o)=>{"use strict";t.__esModule=!0,t.registerAllEditors=function(){(0,f.registerEditor)(n.BaseEditor),(0,f.registerEditor)(s.AutocompleteEditor),(0,f.registerEditor)(i.CheckboxEditor),(0,f.registerEditor)(r.DateEditor),(0,f.registerEditor)(l.DropdownEditor),(0,f.registerEditor)(a.HandsontableEditor),(0,f.registerEditor)(h.NumericEditor),(0,f.registerEditor)(c.PasswordEditor),(0,f.registerEditor)(u.SelectEditor),(0,f.registerEditor)(d.TextEditor),(0,f.registerEditor)(g.TimeEditor)};var s=o(80115);t.AutocompleteEditor=s.AutocompleteEditor,t.AUTOCOMPLETE_EDITOR=s.EDITOR_TYPE;var n=o(52618);t.BaseEditor=n.BaseEditor,t.BASE_EDITOR=n.EDITOR_TYPE;var i=o(39626);t.CheckboxEditor=i.CheckboxEditor,t.CHECKBOX_EDITOR=i.EDITOR_TYPE;var r=o(59127);t.DateEditor=r.DateEditor,t.DATE_EDITOR=r.EDITOR_TYPE;var l=o(50486);t.DropdownEditor=l.DropdownEditor,t.DROPDOWN_EDITOR=l.EDITOR_TYPE;var a=o(56138);t.HandsontableEditor=a.HandsontableEditor,t.HANDSONTABLE_EDITOR=a.EDITOR_TYPE;var h=o(33972);t.NumericEditor=h.NumericEditor,t.NUMERIC_EDITOR=h.EDITOR_TYPE;var c=o(46138);t.PasswordEditor=c.PasswordEditor,t.PASSWORD_EDITOR=c.EDITOR_TYPE;var u=o(7507);t.SelectEditor=u.SelectEditor,t.SELECT_EDITOR=u.EDITOR_TYPE;var d=o(64952);t.TextEditor=d.TextEditor,t.TEXT_EDITOR=d.EDITOR_TYPE;var g=o(14902);t.TimeEditor=g.TimeEditor,t.TIME_EDITOR=g.EDITOR_TYPE;var f=o(84558);t.registerEditor=f.registerEditor,t.RegisteredEditor=f.RegisteredEditor,t._getEditorInstance=f._getEditorInstance,t.getEditor=f.getEditor,t.getEditorInstance=f.getEditorInstance,t.getRegisteredEditorNames=f.getRegisteredEditorNames,t.getRegisteredEditors=f.getRegisteredEditors,t.hasEditor=f.hasEditor},33972:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(29230);t.EDITOR_TYPE=s.EDITOR_TYPE,t.NumericEditor=s.NumericEditor},29230:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952);const n=t.EDITOR_TYPE="numeric";class i extends s.TextEditor{static get EDITOR_TYPE(){return n}}t.NumericEditor=i},46138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(99896);t.EDITOR_TYPE=s.EDITOR_TYPE,t.PasswordEditor=s.PasswordEditor},99896:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952),n=o(9893),i=o(92692);const r=t.EDITOR_TYPE="password";class l extends s.TextEditor{static get EDITOR_TYPE(){return r}createElements(){super.createElements(),this.TEXTAREA=this.hot.rootDocument.createElement("input"),this.TEXTAREA.setAttribute("type","password"),this.TEXTAREA.setAttribute("data-hot-input",""),this.TEXTAREA.className="handsontableInput",this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.hot.getSettings().ariaTags&&(0,n.setAttribute)(this.TEXTAREA,[(0,i.A11Y_HIDDEN)()]),(0,n.empty)(this.TEXTAREA_PARENT),this.TEXTAREA_PARENT.appendChild(this.TEXTAREA)}}t.PasswordEditor=l},84558:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.RegisteredEditor=d,t.getEditorInstance=t._getEditorInstance=function(e,t){let o;if("function"==typeof e)r.get(e)||g(null,e),o=r.get(e);else{if("string"!=typeof e)throw Error('Only strings and functions can be passed as "editor" parameter');o=a(e)}if(!o)throw Error(`No editor registered under name "${e}"`);return o.getInstance(t)},t.getEditor=function(e){if("function"==typeof e)return e;if(!h(e))throw Error(`No registered editor found under "${e}" name`);return a(e).getConstructor()},t.registerEditor=g,o(67834);var n=s(o(56937)),i=s(o(71263));const r=new WeakMap,{register:l,getItem:a,hasItem:h,getNames:c,getValues:u}=(0,i.default)("editors");function d(e){const t={},o=e;this.getConstructor=function(){return e},this.getInstance=function(e){return e.guid in t||(t[e.guid]=new o(e)),t[e.guid]},n.default.getSingleton().add("afterDestroy",(function(){t[this.guid]=null}))}function g(e,t){e&&"string"!=typeof e&&(e=(t=e).EDITOR_TYPE);const o=new d(t);"string"==typeof e&&l(e,o),r.set(t,o)}t.getRegisteredEditors=u,t.getRegisteredEditorNames=c,t.hasEditor=h},7507:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(24138);t.EDITOR_TYPE=s.EDITOR_TYPE,t.SelectEditor=s.SelectEditor},24138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(52618),n=o(9893),i=o(13911);const r="ht_editor_visible",l="selectEditor",a=t.EDITOR_TYPE="select";class h extends s.BaseEditor{static get EDITOR_TYPE(){return a}init(){this.select=this.hot.rootDocument.createElement("select"),this.select.setAttribute("data-hot-input","true"),this.select.style.display="none",(0,n.addClass)(this.select,"htSelectEditor"),this.hot.rootElement.appendChild(this.select),this.registerHooks()}getValue(){return this.select.value}setValue(e){this.select.value=e}open(){this._opened=!0,this.refreshDimensions(),this.select.style.display="";this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this._opened=!1,this.select.style.display="none",(0,n.hasClass)(this.select,r)&&(0,n.removeClass)(this.select,r),this.unregisterShortcuts(),this.clearHooks()}focus(){this.select.focus()}registerHooks(){this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>this.refreshDimensions())),this.addHook("afterRowResize",(()=>this.refreshDimensions()))}prepare(e,t,o,s,r,l){super.prepare(e,t,o,s,r,l);const a=this.cellProperties.selectOptions;let h;h="function"==typeof a?this.prepareOptions(a(this.row,this.col,this.prop)):this.prepareOptions(a),(0,n.empty)(this.select),(0,i.objectEach)(h,((e,t)=>{const o=this.hot.rootDocument.createElement("OPTION");o.value=t,(0,n.fastInnerHTML)(o,e),this.select.appendChild(o)}))}prepareOptions(e){let t={};if(Array.isArray(e))for(let o=0,s=e.length;o<s;o++)t[e[o]]=e[o];else"object"==typeof e&&(t=e);return t}refreshValue(){const e=this.hot.getSourceDataAtCell(this.row,this.prop);this.originalValue=e,this.setValue(e),this.refreshDimensions()}refreshDimensions(){if(this.state!==s.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.close();const{top:e,start:t,width:o,height:i}=this.getEditedCellRect(),l=this.select.style;l.height=`${i}px`,l.width=`${o}px`,l.top=`${e}px`,l[this.hot.isRtl()?"right":"left"]=`${t}px`,l.margin="0px",(0,n.addClass)(this.select,r)}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={group:l};this.isInFullEditMode()&&e.addShortcuts([{keys:[["ArrowUp"]],callback:()=>{const e=this.select.selectedIndex-1;e>=0&&(this.select[e].selected=!0)}},{keys:[["ArrowDown"]],callback:()=>{const e=this.select.selectedIndex+1;e<=this.select.length-1&&(this.select[e].selected=!0)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(l)}}t.SelectEditor=h},40559:(e,t,o)=>{"use strict";t.__esModule=!0,t.updateCaretPosition=function(e,t){const o=(0,s.getCaretPosition)(t),n=t.value.split("\n");let i=o,r=0;for(let t=0;t<n.length;t++){const s=n[t];0!==t&&(r+=n[t-1].length+1);const l=r+s.length;if("home"===e?i=r:"end"===e&&(i=l),o<=l)break}(0,s.setCaretPosition)(t,i)};var s=o(9893)},64952:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(82540);t.EDITOR_TYPE=s.EDITOR_TYPE,t.TextEditor=s.TextEditor},82540:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(52618),r=s(o(82629)),l=o(28890),a=o(9893),h=o(87485),c=o(11139),u=o(38893),d=o(40559),g=o(92692);const f="ht_editor_hidden",p="textEditor",m=t.EDITOR_TYPE="text";class w extends i.BaseEditor{static get EDITOR_TYPE(){return m}constructor(e){super(e),(0,n.default)(this,"eventManager",new r.default(this)),(0,n.default)(this,"autoResize",(0,c.createInputElementResizer)(this.hot.rootDocument)),(0,n.default)(this,"TEXTAREA",void 0),(0,n.default)(this,"textareaStyle",void 0),(0,n.default)(this,"TEXTAREA_PARENT",void 0),(0,n.default)(this,"textareaParentStyle",void 0),(0,n.default)(this,"layerClass",void 0),this.eventManager=new r.default(this),this.createElements(),this.bindEvents(),this.hot.addHookOnce("afterDestroy",(()=>this.destroy()))}getValue(){return this.TEXTAREA.value}setValue(e){this.TEXTAREA.value=e}open(){this.refreshDimensions(),this.showEditableElement(),this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this.autoResize.unObserve(),(0,a.isThisHotChild)(this.hot.rootDocument.activeElement,this.hot.rootElement)&&this.hot.listen(),this.hideEditableElement(),this.unregisterShortcuts()}prepare(e,t,o,s,n,r){const l=this.state;if(super.prepare(e,t,o,s,n,r),!r.readOnly){this.refreshDimensions(!0);const{allowInvalid:e}=r;e&&!this.isOpened()&&(this.TEXTAREA.value=""),l===i.EDITOR_STATE.FINISHED||this.isOpened()||this.hideEditableElement()}}beginEditing(e,t){this.state===i.EDITOR_STATE.VIRGIN&&(this.TEXTAREA.value="",super.beginEditing(e,t))}focus(){this.TEXTAREA.select(),(0,a.setCaretPosition)(this.TEXTAREA,this.TEXTAREA.value.length)}createElements(){const{rootDocument:e}=this.hot;this.TEXTAREA=e.createElement("TEXTAREA"),(0,a.setAttribute)(this.TEXTAREA,[["data-hot-input",""],(0,g.A11Y_TABINDEX)(-1)]),this.hot.getSettings().ariaTags&&(0,a.setAttribute)(this.TEXTAREA,[(0,g.A11Y_HIDDEN)()]),(0,a.addClass)(this.TEXTAREA,"handsontableInput"),this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.textareaStyle.overflowY="visible",this.TEXTAREA_PARENT=e.createElement("DIV"),(0,a.addClass)(this.TEXTAREA_PARENT,"handsontableInputHolder"),(0,a.hasClass)(this.TEXTAREA_PARENT,this.layerClass)&&(0,a.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,a.addClass)(this.TEXTAREA_PARENT,f),this.textareaParentStyle=this.TEXTAREA_PARENT.style,this.TEXTAREA_PARENT.appendChild(this.TEXTAREA),this.hot.rootElement.appendChild(this.TEXTAREA_PARENT)}hideEditableElement(){(0,l.isEdge)()&&(this.textareaStyle.textIndent="-99999px"),this.textareaStyle.overflowY="visible",this.textareaParentStyle.opacity="0",this.textareaParentStyle.height="1px",(0,a.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,a.addClass)(this.TEXTAREA_PARENT,f)}showEditableElement(){this.textareaParentStyle.height="",this.textareaParentStyle.overflow="",this.textareaParentStyle.position="",this.textareaParentStyle[this.hot.isRtl()?"left":"right"]="auto",this.textareaParentStyle.opacity="1",this.textareaStyle.textIndent="";const e=this.TEXTAREA_PARENT.childNodes;let t=!1;(0,h.rangeEach)(e.length-1,(o=>{const s=e[o];if((0,a.hasClass)(s,"handsontableEditor"))return t=!0,!1})),(0,a.hasClass)(this.TEXTAREA_PARENT,f)&&(0,a.removeClass)(this.TEXTAREA_PARENT,f),t?(this.layerClass="ht_editor_visible",(0,a.addClass)(this.TEXTAREA_PARENT,this.layerClass)):(this.layerClass=this.getEditedCellsLayerClass(),(0,a.addClass)(this.TEXTAREA_PARENT,this.layerClass))}refreshValue(){const e=this.hot.toPhysicalRow(this.row),t=this.hot.getSourceDataAtCell(e,this.col);this.originalValue=t,this.setValue(t),this.refreshDimensions()}refreshDimensions(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.state!==i.EDITOR_STATE.EDITING&&!e)return;if(this.TD=this.getEditedCell(),!this.TD)return void(e||this.close());const{top:t,start:o,width:s,maxWidth:n,height:r,maxHeight:l}=this.getEditedCellRect();this.textareaParentStyle.top=`${t}px`,this.textareaParentStyle[this.hot.isRtl()?"right":"left"]=`${o}px`,this.showEditableElement();const h=(0,a.getComputedStyle)(this.TD,this.hot.rootWindow);this.TEXTAREA.style.fontSize=h.fontSize,this.TEXTAREA.style.fontFamily=h.fontFamily,this.TEXTAREA.style.backgroundColor=this.TD.style.backgroundColor;const c=(0,a.getComputedStyle)(this.TEXTAREA),u=parseInt(c.paddingLeft,10)+parseInt(c.paddingRight,10),d=parseInt(c.paddingTop,10)+parseInt(c.paddingBottom,10),g=s-u,f=r-d,p=n-u,m=l-d;this.autoResize.init(this.TEXTAREA,{minWidth:Math.min(g,p),minHeight:Math.min(f,m),maxWidth:p,maxHeight:m},!0)}bindEvents(){(0,l.isIOS)()&&this.eventManager.addEventListener(this.TEXTAREA,"focusout",(()=>this.finishEditing(!1))),this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()})),this.addHook("afterRowResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()}))}allowKeyEventPropagation(){}destroy(){this.eventManager.destroy(),this.clearHooks()}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={runOnlyIf:()=>(0,u.isDefined)(this.hot.getSelected()),group:p},o=()=>{this.hot.rootDocument.execCommand("insertText",!1,"\n")};e.addShortcuts([{keys:[["Control","Enter"]],callback:()=>(o(),!1),runOnlyIf:e=>!this.hot.selection.isMultiple()&&!e.altKey},{keys:[["Meta","Enter"]],callback:()=>(o(),!1),runOnlyIf:()=>!this.hot.selection.isMultiple()},{keys:[["Alt","Enter"]],callback:()=>(o(),!1)},{keys:[["Home"]],callback:(e,t)=>{let[o]=t;(0,d.updateCaretPosition)(o,this.TEXTAREA)}},{keys:[["End"]],callback:(e,t)=>{let[o]=t;(0,d.updateCaretPosition)(o,this.TEXTAREA)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(p)}}t.TextEditor=w},14902:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9412);t.EDITOR_TYPE=s.EDITOR_TYPE,t.TimeEditor=s.TimeEditor},9412:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952);const n=t.EDITOR_TYPE="time";class i extends s.TextEditor{static get EDITOR_TYPE(){return n}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i),this.TEXTAREA.dir="ltr"}}t.TimeEditor=i},82629:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.getListenersCounter=function(){return r},o(15724);var n=s(o(85707)),i=o(79729);let r=0;t.default=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;(0,n.default)(this,"context",void 0),this.context=e||this,this.context.eventListeners||(this.context.eventListeners=[])}addEventListener(e,t,o){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];function n(e){o.call(this,function(e){const t=e.stopImmediatePropagation;return e.stopImmediatePropagation=function(){t.apply(this),(0,i.stopImmediatePropagation)(this)},e}(e))}return this.context.eventListeners.push({element:e,event:t,callback:o,callbackProxy:n,options:s,eventManager:this}),e.addEventListener(t,n,s),r+=1,()=>{this.removeEventListener(e,t,o)}}removeEventListener(e,t,o){let s,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=this.context.eventListeners.length;for(;i;)if(i-=1,s=this.context.eventListeners[i],s.event===t&&s.element===e){if(o&&o!==s.callback)continue;if(n&&s.eventManager!==this)continue;this.context.eventListeners.splice(i,1),s.element.removeEventListener(s.event,s.callbackProxy,s.options),r-=1}}clearEvents(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.context)return;let t=this.context.eventListeners.length;for(;t;){t-=1;const o=this.context.eventListeners[t];e&&o.eventManager!==this||(this.context.eventListeners.splice(t,1),o.element.removeEventListener(o.event,o.callbackProxy,o.options),r-=1)}}clear(){this.clearEvents()}destroy(){this.clearEvents(),this.context=null}destroyWithOwnEventsOnly(){this.clearEvents(!0),this.context=null}fireEvent(e,t){let o=e.document,s=e;o||(o=e.ownerDocument?e.ownerDocument:e,s=o.defaultView);const n={bubbles:!0,cancelable:"mousemove"!==t,view:s,detail:0,screenX:0,screenY:0,clientX:1,clientY:1,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:void 0};let i;o.createEvent?(i=o.createEvent("MouseEvents"),i.initMouseEvent(t,n.bubbles,n.cancelable,n.view,n.detail,n.screenX,n.screenY,n.clientX,n.clientY,n.ctrlKey,n.altKey,n.shiftKey,n.metaKey,n.button,n.relatedTarget||o.body.parentNode)):i=o.createEventObject(),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent(`on${t}`,i)}}},26505:(e,t,o)=>{"use strict";t.__esModule=!0,o(67834);var s=o(83119),n=o(9893),i=o(78832);function r(e,t,o){l(e,t),t.set(e,o)}function l(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function a(e,t){return e.get(c(e,t))}function h(e,t,o){return e.set(c(e,t),o),o}function c(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}const u=Object.freeze({CELL:"cell",MIXED:"mixed"});var d=new WeakMap,g=new WeakMap,f=new WeakMap,p=new WeakMap,m=new WeakMap,w=new WeakSet;function C(e){var t;const o=null===(t=a(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!o||!a(d,this).selection.isCellVisible(o))return void e(null);const s=a(d,this).getCell(o.row,o.col,!0);null===s?a(d,this).addHookOnce("afterScroll",(()=>{e(a(d,this).getCell(o.row,o.col,!0))})):e(s)}function v(){c(w,this,C).call(this,(e=>{const{activeElement:t}=a(d,this).rootDocument;t&&(0,n.isOutsideInput)(t)&&t.blur(),this.focusOnHighlightedCell(e)}))}function y(){c(w,this,C).call(this,(e=>{this.getFocusMode()===u.MIXED&&"TD"===e.nodeName&&this.refocusToEditorTextarea()}))}function E(e){"boolean"==typeof e.imeFastEdit&&this.setFocusMode(e.imeFastEdit?u.MIXED:u.CELL)}t.FocusManager=class{constructor(e){var t,o,s=this;l(t=this,o=w),o.add(t),r(this,d,void 0),r(this,g,void 0),r(this,f,1),r(this,p,null),r(this,m,new Map);const n=e.getSettings();h(d,this,e),h(g,this,n.imeFastEdit?u.MIXED:u.CELL),a(d,this).addHook("afterUpdateSettings",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,E).call(s,...t)})),a(d,this).addHook("afterSelection",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,v).call(s,...t)})),a(d,this).addHook("afterSelectionFocusSet",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,v).call(s,...t)})),a(d,this).addHook("afterSelectionEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,y).call(s,...t)}))}getFocusMode(){return a(g,this)}setFocusMode(e){Object.values(u).includes(e)?h(g,this,e):(0,s.warn)(`"${e}" is not a valid focus mode.`)}getRefocusDelay(){return a(f,this)}setRefocusDelay(e){h(f,this,e)}setRefocusElementGetter(e){h(p,this,e)}getRefocusElement(){return"function"==typeof a(p,this)?a(p,this).call(this):null===(e=a(d,this).getActiveEditor())||void 0===e?void 0:e.TEXTAREA;var e}focusOnHighlightedCell(e){const t=e=>{var t,o;const s=null===(t=a(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!s)return;let n=a(d,this).runHooks("modifyFocusedElement",s.row,s.col,e);n instanceof HTMLElement||(n=e),!n||null!==(o=a(d,this).getActiveEditor())&&void 0!==o&&o.isOpened()||n.focus({preventScroll:!0})};e?t(e):c(w,this,C).call(this,(e=>t(e)))}refocusToEditorTextarea(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a(f,this);const o=this.getRefocusElement();!a(d,this).getSettings().imeFastEdit||null!==(e=a(d,this).getActiveEditor())&&void 0!==e&&e.isOpened()||!o||(a(m,this).has(t)||a(m,this).set(t,(0,i.debounce)((()=>{o.select()}),t)),a(m,this).get(t)())}}},92692:(e,t)=>{"use strict";t.__esModule=!0;t.A11Y_TABINDEX=e=>["tabindex",e];t.A11Y_TREEGRID=()=>["role","treegrid"];t.A11Y_PRESENTATION=()=>["role","presentation"];t.A11Y_GRIDCELL=()=>["role","gridcell"];t.A11Y_ROWHEADER=()=>["role","rowheader"];t.A11Y_ROWGROUP=()=>["role","rowgroup"];t.A11Y_COLUMNHEADER=()=>["role","columnheader"];t.A11Y_ROW=()=>["role","row"];t.A11Y_MENU=()=>["role","menu"];t.A11Y_MENU_ITEM=()=>["role","menuitem"];t.A11Y_MENU_ITEM_CHECKBOX=()=>["role","menuitemcheckbox"];t.A11Y_COMBOBOX=()=>["role","combobox"];t.A11Y_LISTBOX=()=>["role","listbox"];t.A11Y_OPTION=()=>["role","option"];t.A11Y_CHECKBOX=()=>["role","checkbox"];t.A11Y_SCOPE_COL=()=>["scope","col"];t.A11Y_SCOPE_ROW=()=>["scope","row"];t.A11Y_TEXT=()=>["type","text"];t.A11Y_LABEL=e=>["aria-label",e];t.A11Y_HIDDEN=()=>["aria-hidden","true"];t.A11Y_DISABLED=()=>["aria-disabled","true"];t.A11Y_MULTISELECTABLE=()=>["aria-multiselectable","true"];t.A11Y_HASPOPUP=e=>["aria-haspopup",e];t.A11Y_ROWCOUNT=e=>["aria-rowcount",e];t.A11Y_COLCOUNT=e=>["aria-colcount",e];t.A11Y_ROWINDEX=e=>["aria-rowindex",e];t.A11Y_COLINDEX=e=>["aria-colindex",e];t.A11Y_EXPANDED=e=>["aria-expanded",e];t.A11Y_SORT=e=>["aria-sort",e];t.A11Y_READONLY=()=>["aria-readonly","true"];t.A11Y_INVALID=()=>["aria-invalid","true"];t.A11Y_CHECKED=e=>["aria-checked",e];t.A11Y_SELECTED=()=>["aria-selected","true"];t.A11Y_AUTOCOMPLETE=()=>["aria-autocomplete","list"];t.A11Y_CONTROLS=e=>["aria-controls",e];t.A11Y_ACTIVEDESCENDANT=e=>["aria-activedescendant",e];t.A11Y_LIVE=e=>["aria-live",e];t.A11Y_RELEVANT=e=>["aria-relevant",e];t.A11Y_SETSIZE=e=>["aria-setsize",e];t.A11Y_POSINSET=e=>["aria-posinset",e]},9175:(e,t,o)=>{"use strict";function s(e,t,o,s){let n=-1,i=e,r=o;Array.isArray(e)||(i=Array.from(e));const l=i.length;for(s&&l&&(n+=1,r=i[n]),n+=1;n<l;)r=t(r,i[n],n,i),n+=1;return r}function n(e,t){let o=0,s=e;Array.isArray(e)||(s=Array.from(e));const n=s.length;for(;o<n&&!1!==t(s[o],o,s);)o+=1;return e}function i(e){return s(e,((e,t)=>e+t),0)}t.__esModule=!0,t.arrayAvg=function(e){if(!e.length)return 0;return i(e)/e.length},t.arrayEach=n,t.arrayFilter=function(e,t){let o=0,s=e;Array.isArray(e)||(s=Array.from(e));const n=s.length,i=[];let r=-1;for(;o<n;){const e=s[o];t(e,o,s)&&(r+=1,i[r]=e),o+=1}return i},t.arrayFlatten=function e(t){return s(t,((t,o)=>t.concat(Array.isArray(o)?e(o):o)),[])},t.arrayMap=function(e,t){let o=0,s=e;Array.isArray(e)||(s=Array.from(e));const n=s.length,i=[];let r=-1;for(;o<n;){const e=s[o];r+=1,i[r]=t(e,o,s),o+=1}return i},t.arrayMax=function(e){return s(e,((e,t)=>e>t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayMin=function(e){return s(e,((e,t)=>e<t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayReduce=s,t.arraySum=i,t.arrayUnique=function(e){const t=[];return n(e,(e=>{-1===t.indexOf(e)&&t.push(e)})),t},t.extendArray=function(e,t){const o=t.length;let s=0;for(;s<o;)e.push(t[s]),s+=1},t.getDifferenceOfArrays=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[s,...i]=[...t];let r=s;return n(i,(e=>{r=r.filter((t=>!e.includes(t)))})),r},t.getIntersectionOfArrays=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[s,...i]=[...t];let r=s;return n(i,(e=>{r=r.filter((t=>e.includes(t)))})),r},t.getUnionOfArrays=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[s,...i]=[...t],r=new Set(s);return n(i,(e=>{n(e,(e=>{r.has(e)||r.add(e)}))})),Array.from(r)},t.pivot=function(e){const t=[];if(!e||0===e.length||!e[0]||0===e[0].length)return t;const o=e.length,s=e[0].length;for(let n=0;n<o;n++)for(let o=0;o<s;o++)t[o]||(t[o]=[]),t[o][n]=e[n][o];return t},t.stringToArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";return e.split(t)},t.to2dArray=function(e){const t=e.length;let o=0;for(;o<t;)e[o]=[e[o]],o+=1},o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620)},28890:(e,t,o)=>{"use strict";t.__esModule=!0,t.isChrome=function(){return r.chrome.value},t.isChromeWebKit=function(){return r.chromeWebKit.value},t.isEdge=function(){return r.edge.value},t.isEdgeWebKit=function(){return r.edgeWebKit.value},t.isFirefox=function(){return r.firefox.value},t.isFirefoxWebKit=function(){return r.firefoxWebKit.value},t.isIOS=function(){return l.ios.value},t.isIpadOS=function(){let{maxTouchPoints:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator;return e>2&&l.mac.value},t.isLinuxOS=function(){return l.linux.value},t.isMacOS=function(){return l.mac.value},t.isMobileBrowser=function(){return r.mobile.value},t.isSafari=function(){return r.safari.value},t.isWindowsOS=function(){return l.win.value},t.setBrowserMeta=a,t.setPlatformMeta=h;var s=o(13911),n=o(93980);const i=e=>{const t={value:!1,test:(o,s)=>{t.value=e(o,s)}};return t},r={chrome:i(((e,t)=>/Chrome/.test(e)&&/Google/.test(t))),chromeWebKit:i((e=>/CriOS/.test(e))),edge:i((e=>/Edge/.test(e))),edgeWebKit:i((e=>/EdgiOS/.test(e))),firefox:i((e=>/Firefox/.test(e))),firefoxWebKit:i((e=>/FxiOS/.test(e))),mobile:i((e=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(e))),safari:i(((e,t)=>/Safari/.test(e)&&/Apple Computer/.test(t)))},l={mac:i((e=>/^Mac/.test(e))),win:i((e=>/^Win/.test(e))),linux:i((e=>/^Linux/.test(e))),ios:i((e=>/iPhone|iPad|iPod/i.test(e)))};function a(){let{userAgent:e=navigator.userAgent,vendor:t=navigator.vendor}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,s.objectEach)(r,(o=>{let{test:s}=o;s(e,t)}))}function h(){let{platform:e=navigator.platform}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,s.objectEach)(l,(t=>{let{test:o}=t;o(e)}))}(0,n.isCSR)()&&(a(),h())},83119:(e,t,o)=>{"use strict";t.__esModule=!0,t.error=function(){(0,s.isDefined)(console)&&console.error(...arguments)},t.info=function(){(0,s.isDefined)(console)&&console.info(...arguments)},t.log=function(){(0,s.isDefined)(console)&&console.log(...arguments)},t.warn=function(){(0,s.isDefined)(console)&&console.warn(...arguments)};var s=o(38893)},56216:(e,t,o)=>{"use strict";t.__esModule=!0,t.countFirstRowKeys=function(e){let t=0;Array.isArray(e)&&(e[0]&&Array.isArray(e[0])?t=e[0].length:e[0]&&(0,s.isObject)(e[0])&&(t=(0,s.deepObjectSize)(e[0])));return t},t.createEmptySpreadsheetData=function(e,t){const o=[];let s;for(let n=0;n<e;n++){s=[];for(let e=0;e<t;e++)s.push("");o.push(s)}return o},t.createSpreadsheetData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const o=[];let s,n;for(s=0;s<e;s++){const e=[];for(n=0;n<t;n++)e.push(r(n)+(s+1));o.push(e)}return o},t.createSpreadsheetObjectData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const o=[];let s,n;for(s=0;s<e;s++){const e={};for(n=0;n<t;n++)e[`prop${n}`]=r(n)+(s+1);o.push(e)}return o},t.dataRowToChangesArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=e;const s=[];Array.isArray(e)&&Array.isArray(e[0])||(o=[e]);return o.forEach(((e,o)=>{Array.isArray(e)?e.forEach(((e,n)=>{s.push([o+t,n,e])})):Object.keys(e).forEach((n=>{s.push([o+t,n,e[n]])}))})),s},t.isArrayOfArrays=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>Array.isArray(e))))},t.isArrayOfObjects=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>"object"==typeof e&&!Array.isArray(e)&&null!==e)))},t.spreadsheetColumnIndex=function(e){let t=0;if(e)for(let o=0,s=e.length-1;o<e.length;o+=1,s-=1)t+=i**s*(n.indexOf(e[o])+1);return t-=1,t},t.spreadsheetColumnLabel=r,o(15724);var s=o(13911);const n="ABCDEFGHIJKLMNOPQRSTUVWXYZ",i=n.length;function r(e){let t,o=e+1,s="";for(;o>0;)t=(o-1)%i,s=String.fromCharCode(65+t)+s,o=parseInt((o-t)/i,10);return s}},72484:(e,t)=>{"use strict";t.__esModule=!0,t.getNormalizedDate=function(e){const t=new Date(e);if(!isNaN(new Date(`${e}T00:00`).getDate()))return new Date(t.getTime()+6e4*t.getTimezoneOffset());return t}},9893:(e,t,o)=>{"use strict";t.__esModule=!0,t.addClass=h,t.addEvent=function(e,t,o){e.addEventListener(t,o,!1)},t.clearTextSelection=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;e.getSelection&&(e.getSelection().empty?e.getSelection().empty():e.getSelection().removeAllRanges&&e.getSelection().removeAllRanges())},t.closest=r,t.closestDown=function(e,t,o){const s=[];let n=e;for(;n&&(n=r(n,t,o),n&&(!o||o.contains(n)));)s.push(n),n=n.host&&n.nodeType===Node.DOCUMENT_FRAGMENT_NODE?n.host:n.parentNode;const i=s.length;return i?s[i-1]:null},t.empty=d,t.fastInnerHTML=function(e,t){let o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];g.test(t)?e.innerHTML=o?(0,s.sanitize)(t):t:f(e,t)},t.fastInnerText=f,t.getCaretPosition=function(e){if(e.selectionStart)return e.selectionStart;return 0},t.getComputedStyle=w,t.getCssTransform=function(e){let t;if(e.style.transform&&""!==(t=e.style.transform))return["transform",t];return-1},t.getFrameElement=i,t.getMaximumScrollLeft=function(e){return e.scrollWidth-e.clientWidth},t.getMaximumScrollTop=function(e){return e.scrollHeight-e.clientHeight},t.getParent=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=-1,s=null,n=e;for(;null!==n;){if(o===t){s=n;break}n.host&&n.nodeType===Node.DOCUMENT_FRAGMENT_NODE?n=n.host:(o+=1,n=n.parentNode)}return s},t.getParentWindow=function(e){return i(e)&&e.parent},t.getScrollLeft=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return m(t);return e.scrollLeft},t.getScrollTop=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return p(t);return e.scrollTop},t.getScrollableElement=function(e){let t=e.ownerDocument,o=t?t.defaultView:void 0;t||(t=e.document?e.document:e,o=t.defaultView);const s=["auto","scroll"];let n=e.parentNode;for(;n&&n.style&&t.body!==n;){let{overflow:e,overflowX:t,overflowY:i}=n.style;if([e,t,i].includes("scroll"))return n;if(({overflow:e,overflowX:t,overflowY:i}=o.getComputedStyle(n)),s.includes(e)||s.includes(t)||s.includes(i))return n;if(n.clientHeight<=n.scrollHeight+1&&(s.includes(i)||s.includes(e)))return n;if(n.clientWidth<=n.scrollWidth+1&&(s.includes(t)||s.includes(e)))return n;n=n.parentNode}return o},t.getScrollbarWidth=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;void 0===C&&(C=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;const t=e.createElement("div");t.style.height="200px",t.style.width="100%";const o=e.createElement("div");o.style.boxSizing="content-box",o.style.height="150px",o.style.left="0px",o.style.overflow="hidden",o.style.position="absolute",o.style.top="0px",o.style.width="200px",o.style.visibility="hidden",o.appendChild(t),(e.body||e.documentElement).appendChild(o);const s=t.offsetWidth;o.style.overflow="scroll";let n=t.offsetWidth;s===n&&(n=o.clientWidth);return(e.body||e.documentElement).removeChild(o),s-n}(e));return C},t.getSelectionEndPosition=function(e){if(e.selectionEnd)return e.selectionEnd;return 0},t.getSelectionText=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;const t=e.document;let o="";e.getSelection?o=e.getSelection().toString():t.selection&&"Control"!==t.selection.type&&(o=t.selection.createRange().text);return o},t.getStyle=function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window;if(!e)return;if(e===o)return"width"===t?`${o.innerWidth}px`:"height"===t?`${o.innerHeight}px`:void 0;const s=e.style[t];if(""!==s&&void 0!==s)return s;const n=w(e,o);if(""!==n[t]&&void 0!==n[t])return n[t]},t.getTrimmingContainer=function(e){const t=e.ownerDocument,o=t.defaultView;let s=e.parentNode;for(;s&&s.style&&t.body!==s;){if("visible"!==s.style.overflow&&""!==s.style.overflow)return s;const e=w(s,o),t=["scroll","hidden","auto"],n=e.getPropertyValue("overflow"),i=e.getPropertyValue("overflow-y"),r=e.getPropertyValue("overflow-x");if(t.includes(n)||t.includes(i)||t.includes(r))return s;s=s.parentNode}return o},t.getWindowScrollLeft=m,t.getWindowScrollTop=p,t.hasAccessToParentWindow=function(e){return!!Object.getPrototypeOf(e.parent)},t.hasClass=function(e,t){if(void 0===e.classList||"string"!=typeof t||""===t)return!1;return e.classList.contains(t)},t.hasHorizontalScrollbar=function(e){return e.offsetHeight!==e.clientHeight},t.hasVerticalScrollbar=function(e){return e.offsetWidth!==e.clientWidth},t.index=function(e){let t=0,o=e;if(o.previousSibling)for(;o=o.previousSibling;)t+=1;return t},t.innerHeight=function(e){return e.clientHeight||e.innerHeight},t.innerWidth=function(e){return e.clientWidth||e.innerWidth},t.isChildOf=function(e,t){let o=e.parentNode,s=[];"string"==typeof t?s=e.defaultView?Array.prototype.slice.call(e.querySelectorAll(t),0):Array.prototype.slice.call(e.ownerDocument.querySelectorAll(t),0):s.push(t);for(;null!==o;){if(s.indexOf(o)>-1)return!0;o=o.parentNode}return!1},t.isDetached=function(e){return!e.parentNode},t.isInput=v,t.isOutsideInput=y,t.isThisHotChild=function(e,t){const o=e.closest(".handsontable");return!!o&&(o.parentNode===t||o===t)},t.isVisible=function e(t){const o=t.ownerDocument.documentElement;let s=t;for(;s!==o;){if(null===s)return!1;if(s.nodeType===Node.DOCUMENT_FRAGMENT_NODE){if(s.host){if(s.host.impl)return e(s.host.impl);if(s.host)return e(s.host);throw new Error("Lost in Web Components world")}return!1}if("none"===w(s).display)return!1;s=s.parentNode}return!0},t.makeElementContentEditableAndSelectItsContent=E,t.matchesCSSRules=function(e,t){const{selectorText:o}=t;let s=!1;t.type===CSSRule.STYLE_RULE&&o&&(e.msMatchesSelector?s=e.msMatchesSelector(o):e.matches&&(s=e.matches(o)));return s},t.observeVisibilityChangeOnce=function(e,t){new IntersectionObserver(((o,s)=>{o.forEach((o=>{o.isIntersecting&&null!==e.offsetParent&&(t(),s.unobserve(e))}))}),{root:e.ownerDocument.body}).observe(e)},t.offset=function(e){const t=e.ownerDocument,o=t.defaultView,s=t.documentElement;let n,i,r,l=e;n=l.offsetLeft,i=l.offsetTop,r=l;for(;(l=l.offsetParent)&&l!==t.body&&"offsetLeft"in l;)n+=l.offsetLeft,i+=l.offsetTop,r=l;r&&"fixed"===r.style.position&&(n+=o.pageXOffset||s.scrollLeft,i+=o.pageYOffset||s.scrollTop);return{left:n,top:i}},t.outerHeight=function(e){return e.offsetHeight},t.outerWidth=function(e){return e.offsetWidth},t.overlayContainsElement=function(e,t,o){const s=o.parentElement.querySelector(`.ht_clone_${e}`);return s?s.contains(t):null},t.removeAttribute=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);const{regexFree:o,regexes:s}=a(t,!0);o.forEach((t=>{""!==t&&e.removeAttribute(t)})),s.forEach((t=>{e.getAttributeNames().forEach((o=>{t.test(o)&&e.removeAttribute(o)}))}))},t.removeClass=c,t.removeContentEditableFromElementAndDeselect=S,t.removeEvent=function(e,t,o){e.removeEventListener(t,o,!1)},t.removeTextNodes=function e(t){if(3===t.nodeType)t.parentNode.removeChild(t);else if(["TABLE","THEAD","TBODY","TFOOT","TR"].indexOf(t.nodeName)>-1){const o=t.childNodes;for(let t=o.length-1;t>=0;t--)e(o[t])}},t.resetCssTransform=function(e){e.style.transform&&""!==e.style.transform&&(e.style.transform="")},t.runWithSelectedContendEditableElement=function(e,t){let o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];E(e,o),t(),S(e,o)},t.selectElementIfAllowed=function(e){y(e.ownerDocument.activeElement)||e.select()},t.setAttribute=u,t.setCaretPosition=function(e,t,o){void 0===o&&(o=t);if(e.setSelectionRange){e.focus();try{e.setSelectionRange(t,o)}catch(s){const n=e.parentNode,i=n.style.display;n.style.display="block",e.setSelectionRange(t,o),n.style.display=i}}},t.setOverlayPosition=function(e,t,o){e.style.transform=`translate3d(${t},${o},0)`},o(67834),o(15724);var s=o(59777),n=o(92692);function i(e){return Object.getPrototypeOf(e.parent)&&e.frameElement}function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2?arguments[2]:void 0;const{ELEMENT_NODE:s,DOCUMENT_FRAGMENT_NODE:n}=Node;let i=e;for(;null!=i&&i!==o;){const{nodeType:e,nodeName:o}=i;if(e===s&&(t.includes(o)||t.includes(i)))return i;const{host:r}=i;i=r&&e===n?r:i.parentNode}return null}function l(e){return e&&e.length?e.filter((e=>!!e)):[]}function a(e,t){if(!e||!e.length)return t?{regexFree:[],regexes:[]}:[];const o=[],s=[];return s.push(...e.filter((e=>{const s=e instanceof RegExp;return s&&t&&o.push(e),!s}))),t?{regexFree:s,regexes:o}:s}function h(e,t){"string"==typeof t&&(t=t.split(" ")),(t=l(t)).length>0&&e.classList.add(...t)}function c(e,t){"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);let{regexFree:o,regexes:s}=a(t,!0);o=l(o),o.length>0&&e.classList.remove(...o),s.forEach((t=>{e.classList.forEach((o=>{t.test(o)&&e.classList.remove(o)}))}))}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2?arguments[2]:void 0;Array.isArray(t)||(t=[[t,o]]),t.forEach((t=>{Array.isArray(t)&&""!==t[0]&&e.setAttribute(...t)}))}function d(e){let t;for(;t=e.lastChild;)e.removeChild(t)}const g=t.HTML_CHARACTERS=/(<(.*)>|&(.*);)/;function f(e,t){const o=e.firstChild;o&&3===o.nodeType&&null===o.nextSibling?o.textContent=t:(d(e),e.appendChild(e.ownerDocument.createTextNode(t)))}function p(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollY}function m(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollX}function w(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;return e.currentStyle||t.getComputedStyle(e)}let C;function v(e){return e&&(["INPUT","SELECT","TEXTAREA"].indexOf(e.nodeName)>-1||"true"===e.contentEditable)}function y(e){return v(e)&&!1===e.hasAttribute("data-hot-input")}function E(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const s=e.ownerDocument,i=s.createRange(),r=s.defaultView.getSelection();u(e,"contenteditable",!0),o&&u(e,...(0,n.A11Y_HIDDEN)()),t&&h(e,"invisibleSelection"),i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i)}function S(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const o=e.ownerDocument.defaultView.getSelection();e.hasAttribute("aria-hidden")&&e.removeAttribute("aria-hidden"),o.removeAllRanges(),t&&c(e,"invisibleSelection"),e.removeAttribute("contenteditable")}},79729:(e,t)=>{"use strict";t.__esModule=!0,t.isImmediatePropagationStopped=function(e){return!1===e.isImmediatePropagationEnabled},t.isLeftClick=function(e){return 0===e.button},t.isRightClick=function(e){return 2===e.button},t.isTouchEvent=function(e){return e instanceof TouchEvent},t.offsetRelativeTo=function(e,t){const o={x:e.offsetX,y:e.offsetY};let s=e.target;if(!(t instanceof HTMLElement)||s!==t&&s.contains(t))return o;for(;s!==t;)o.x+=s.offsetLeft,o.y+=s.offsetTop,s=s.offsetParent;return o},t.stopImmediatePropagation=function(e){e.isImmediatePropagationEnabled=!1,e.cancelBubble=!0}},93980:(e,t)=>{"use strict";let o;t.__esModule=!0,t.cancelAnimationFrame=function(e){window.cancelAnimationFrame(e)},t.getComparisonFunction=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(o)return o;o="object"==typeof Intl?new Intl.Collator(e,t).compare:"function"==typeof String.prototype.localeCompare?(e,t)=>`${e}`.localeCompare(t):(e,t)=>e===t?0:e>t?-1:1;return o},t.isCSR=function(){return"undefined"!=typeof window},t.isTouchSupported=function(){return"ontouchstart"in window},t.requestAnimationFrame=function(e){return window.requestAnimationFrame(e)}},78832:(e,t,o)=>{"use strict";t.__esModule=!0,t.curry=function(e){const t=e.length;return function o(s){return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];const l=s.concat(i);let a;return a=l.length>=t?e.apply(this,l):o(l),a}}([])},t.curryRight=function(e){const t=e.length;return function o(s){return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];const l=s.concat(i.reverse());let a;return a=l.length>=t?e.apply(this,l):o(l),a}}([])},t.debounce=function(e){let t,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,s=null;return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return s&&clearTimeout(s),s=setTimeout((()=>{t=e.apply(this,i)}),o),t}},t.fastCall=function(e,t,o,s,i,r,l,a){if((0,n.isDefined)(a))return e.call(t,o,s,i,r,l,a);if((0,n.isDefined)(l))return e.call(t,o,s,i,r,l);if((0,n.isDefined)(r))return e.call(t,o,s,i,r);if((0,n.isDefined)(i))return e.call(t,o,s,i);if((0,n.isDefined)(s))return e.call(t,o,s);if((0,n.isDefined)(o))return e.call(t,o);return e.call(t)},t.isFunction=function(e){return"function"==typeof e},t.partial=function(e){for(var t=arguments.length,o=new Array(t>1?t-1:0),s=1;s<t;s++)o[s-1]=arguments[s];return function(){for(var t=arguments.length,s=new Array(t),n=0;n<t;n++)s[n]=arguments[n];return e.apply(this,o.concat(s))}},t.pipe=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[n,...i]=t;return function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return(0,s.arrayReduce)(i,((e,t)=>t(e)),n.apply(this,t))}},t.throttle=i,t.throttleAfterHits=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;const s=i(e,t);let n=o;function r(){for(var t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return n?(n-=1,e.apply(this,o)):s.apply(this,o)}return r.clearHits=function(){n=o},r};var s=o(9175),n=o(38893);function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,o=0;const s={lastCallThrottled:!0};let n=null;return function(){for(var i=arguments.length,r=new Array(i),l=0;l<i;l++)r[l]=arguments[l];const a=Date.now();let h=!1;s.lastCallThrottled=!0,o||(o=a,h=!0);const c=t-(a-o);return h?(s.lastCallThrottled=!1,e.apply(this,r)):(n&&clearTimeout(n),n=setTimeout((()=>{s.lastCallThrottled=!1,e.apply(this,r),o=0,n=void 0}),c)),s}}},38893:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t._injectProductInfo=function(e,t){const o=!l(e),s="string"==typeof e&&"non-commercial-and-evaluation"===e.toLowerCase(),i="14.6.0";let r,v="invalid",y="invalid";const E=function(e){let t=[][a],o=t;if(e[a]!==d("Z"))return!1;for(let t="",s="B<H4P+".split(""),n=d(s.shift());n;n=d(s.shift()||"A"))--n<""[a]?o|=(c(`${c(h(t)+(h(u(e,Math.abs(n),2))+[]).padStart(2,"0"))}`)%97||2)>>1:t=u(e,n,n?1===s[a]?9:8:6);return o===t}(e=g(e||""));if(o||s||E)if(E){const t=(0,n.default)("01/10/2024","DD/MM/YYYY"),o=Math.floor(t.toDate().getTime()/864e5),s=f(e);r=(0,n.default)(864e5*(s+1),"x").format("MMMM DD, YYYY"),o>s?(v="expired",y="expired"):(v="valid",y="valid")}else s?(v="non_commercial",y="valid"):(v="invalid",y="invalid");else v="missing",y="missing";p()&&(v="valid",y="valid");if(!m&&"valid"!==v){w[v]({keyValidityDate:r,hotVersion:i})&&console["non_commercial"===v?"info":"warn"](w[v]({keyValidityDate:r,hotVersion:i})),m=!0}if("valid"!==y&&t.parentNode){if(C[y]({keyValidityDate:r,hotVersion:i})){const e=document.createElement("div");e.className="hot-display-license-info",e.innerHTML=C[y]({keyValidityDate:r,hotVersion:i}),t.parentNode.insertBefore(e,t.nextSibling)}}},t.isDefined=function(e){return void 0!==e},t.isEmpty=l,t.isRegExp=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},t.isUndefined=r,t.stringify=function(e){let t;switch(typeof e){case"string":case"number":t=`${e}`;break;case"object":t=null===e?"":e.toString();break;case"undefined":t="";break;default:t=e.toString()}return t};var n=s(o(86798)),i=o(28927);function r(e){return void 0===e}function l(e){return null===e||""===e||r(e)}const a="length",h=e=>parseInt(e,16),c=e=>parseInt(e,10),u=(e,t,o)=>e.substr(t,o),d=e=>e.codePointAt(0)-65,g=e=>`${e}`.replace(/\-/g,""),f=e=>h(u(g(e),h("12"),d("F")))/(h(u(g(e),d("B"),~~![][a]))||9),p=()=>"undefined"!=typeof location&&/^([a-z0-9\-]+\.)?\x68\x61\x6E\x64\x73\x6F\x6E\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6D$/i.test(location.host);let m=!1;const w={invalid:()=>i.toSingleLine`
+        turning off the "renderAllRows" option.`)),this.table.isAriaEnabled()&&(0,h.setAttribute)(this.rootNode,[(0,c.A11Y_ROWGROUP)()]),this.orderView.setSize(e).setOffset(this.table.renderedRowToSource(0)).start();for(let s=0;s<e;s++){this.orderView.render();const e=this.orderView.getCurrentNode(),n=this.table.renderedRowToSource(s);var t,o;if(this.table.isAriaEnabled())(0,h.setAttribute)(e,[(0,c.A11Y_ROW)(),(0,c.A11Y_ROWINDEX)(n+(null!==(t=null===(o=this.table.rowUtils)||void 0===o||null===(o=o.dataAccessObject)||void 0===o?void 0:o.columnHeaders.length)&&void 0!==t?t:0)+1)]);(0,h.removeClass)(e,[u,d]),(n+1)%2==0?(0,h.addClass)(e,u):(0,h.addClass)(e,d)}this.orderView.end()}}t.default=f},67016:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e){let{cellRenderer:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};(0,n.default)(this,"rootNode",void 0),(0,n.default)(this,"rootDocument",void 0),(0,n.default)(this,"rowHeaders",null),(0,n.default)(this,"columnHeaders",null),(0,n.default)(this,"colGroup",null),(0,n.default)(this,"rows",null),(0,n.default)(this,"cells",null),(0,n.default)(this,"rowFilter",null),(0,n.default)(this,"columnFilter",null),(0,n.default)(this,"rowUtils",null),(0,n.default)(this,"columnUtils",null),(0,n.default)(this,"rowsToRender",0),(0,n.default)(this,"columnsToRender",0),(0,n.default)(this,"rowHeaderFunctions",[]),(0,n.default)(this,"rowHeadersCount",0),(0,n.default)(this,"columnHeaderFunctions",[]),(0,n.default)(this,"columnHeadersCount",0),(0,n.default)(this,"cellRenderer",void 0),(0,n.default)(this,"activeOverlayName",void 0),this.rootNode=e,this.rootDocument=this.rootNode.ownerDocument,this.cellRenderer=t}setActiveOverlayName(e){this.activeOverlayName=e}setAxisUtils(e,t){this.rowUtils=e,this.columnUtils=t}setViewportSize(e,t){this.rowsToRender=e,this.columnsToRender=t}setFilters(e,t){this.rowFilter=e,this.columnFilter=t}setHeaderContentRenderers(e,t){this.rowHeaderFunctions=e,this.rowHeadersCount=e.length,this.columnHeaderFunctions=t,this.columnHeadersCount=t.length}setRenderers(){let{rowHeaders:e,columnHeaders:t,colGroup:o,rows:s,cells:n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.setTable(this),t.setTable(this),o.setTable(this),s.setTable(this),n.setTable(this),this.rowHeaders=e,this.columnHeaders=t,this.colGroup=o,this.rows=s,this.cells=n}renderedRowToSource(e){return this.rowFilter.renderedToSource(e)}renderedColumnToSource(e){return this.columnFilter.renderedToSource(e)}isAriaEnabled(){return this.rowUtils.wtSettings.getSetting("ariaTags")}render(){this.colGroup.adjust(),this.columnHeaders.adjust(),this.rows.adjust(),this.rowHeaders.adjust(),this.columnHeaders.render(),this.rows.render(),this.rowHeaders.render(),this.cells.render(),this.columnUtils.calculateWidths(),this.colGroup.render();const{rowsToRender:e,rows:t}=this;for(let o=0;o<e;o++){const e=t.getRenderedNode(o);if(e.firstChild){const t=this.renderedRowToSource(o),s=this.rowUtils.getHeightByOverlayName(t,this.activeOverlayName);e.firstChild.style.height=s?s-1+"px":""}}}}},61677:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(9893);function r(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function l(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var a=new WeakSet;function h(e){const{wtSettings:t,inlineStartOverlay:o,wtTable:s,wtViewport:n,totalColumns:r,rootWindow:l}=this.dataAccessObject;if(o.mainTableScrollableElement===l){let a=null;if(t.getSetting("rtlMode")){const e=s.TABLE.getBoundingClientRect(),t=this.dataAccessObject.rootWindow.document.documentElement.offsetWidth;a=Math.abs(e.right-t)}else{a=(0,i.offset)(s.wtRootElement).left}const h=Math.abs((0,i.getScrollLeft)(l,l));if(a>h){const t=(0,i.innerWidth)(l);let s=n.getRowHeaderWidth();for(let n=1;n<=r;n++)if(s+=o.sumCellSizes(n-1,n),a+s-h>=t){e=n-2;break}}}return e}function c(e){const{topOverlay:t,wtTable:o,wtViewport:s,totalRows:n,rootWindow:r}=this.dataAccessObject;if(t.mainTableScrollableElement===r){const l=(0,i.offset)(o.wtRootElement),a=(0,i.getScrollTop)(r,r);if(l.top>a){const o=(0,i.innerHeight)(r);let h=s.getColumnHeaderHeight();for(let s=1;s<=n;s++)if(h+=t.sumCellSizes(s-1,s),l.top+h-a>=o){e=s-2;break}}}return e}t.default=class{constructor(e){r(this,a),(0,n.default)(this,"dataAccessObject",void 0),this.dataAccessObject=e}scrollViewport(e,t,o,s,n){const i=this.scrollViewportHorizontally(e.col,o,n),r=this.scrollViewportVertically(e.row,t,s);return i||r}scrollViewportHorizontally(e,t,o){const{drawn:s,totalColumns:n}=this.dataAccessObject;if(!s||!Number.isInteger(e)||e<0||e>n)return!1;const i=void 0===t&&void 0===o,{fixedColumnsStart:r,inlineStartOverlay:l}=this.dataAccessObject;if(i&&e<r)return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollHorizontally",e),!Number.isInteger(e)||e<0||e>n)return!1;const a=this.getFirstVisibleColumn(),h=this.getLastVisibleColumn();let c=!1;return(i&&(e<a||e>h)||!i)&&(c=l.scrollTo(e,i?e>=this.getLastPartiallyVisibleColumn():t)),c}scrollViewportVertically(e,t,o){const{drawn:s,totalRows:n}=this.dataAccessObject;if(!s||!Number.isInteger(e)||e<0||e>n)return!1;const i=void 0===t&&void 0===o,{fixedRowsBottom:r,fixedRowsTop:l,topOverlay:a}=this.dataAccessObject;if(i&&(e<l||e>n-r-1))return!1;if(e=this.dataAccessObject.wtSettings.getSetting("onBeforeViewportScrollVertically",e),!Number.isInteger(e)||e<0||e>n)return!1;const h=this.getFirstVisibleRow(),c=this.getLastVisibleRow();let u=!1;return(i&&(e<h||e>c)||!i)&&(u=a.scrollTo(e,i?e>=this.getLastPartiallyVisibleRow():o)),u}getFirstVisibleRow(){return this.dataAccessObject.wtTable.getFirstVisibleRow()}getLastVisibleRow(){return l(a,this,c).call(this,this.dataAccessObject.wtTable.getLastVisibleRow())}getFirstPartiallyVisibleRow(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleRow()}getLastPartiallyVisibleRow(){return l(a,this,c).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleRow())}getFirstVisibleColumn(){return this.dataAccessObject.wtTable.getFirstVisibleColumn()}getLastVisibleColumn(){return l(a,this,h).call(this,this.dataAccessObject.wtTable.getLastVisibleColumn())}getFirstPartiallyVisibleColumn(){return this.dataAccessObject.wtTable.getFirstPartiallyVisibleColumn()}getLastPartiallyVisibleColumn(){return l(a,this,h).call(this,this.dataAccessObject.wtTable.getLastPartiallyVisibleColumn())}}},15934:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9893),n=o(79729),i=o(13911),r=o(28890),l=o(30563);t.default=class{constructor(e,t){t&&(this.eventManager=e.eventManager,this.instance=e,this.wot=e,this.settings=t,this.mouseDown=!1,this.main=null,this.top=null,this.bottom=null,this.start=null,this.end=null,this.topStyle=null,this.bottomStyle=null,this.startStyle=null,this.endStyle=null,this.cornerDefaultStyle=l.CORNER_DEFAULT_STYLE,this.cornerCenterPointOffset=-parseInt(this.cornerDefaultStyle.width,10)/2,this.corner=null,this.cornerStyle=null,this.createBorders(t),this.registerListeners())}registerListeners(){const e=this.wot.rootDocument.body;this.eventManager.addEventListener(e,"mousedown",(()=>this.onMouseDown())),this.eventManager.addEventListener(e,"mouseup",(()=>this.onMouseUp()));for(let e=0,t=this.main.childNodes.length;e<t;e++){const t=this.main.childNodes[e];this.eventManager.addEventListener(t,"mouseenter",(t=>this.onMouseEnter(t,this.main.childNodes[e])))}}onMouseDown(){this.mouseDown=!0}onMouseUp(){this.mouseDown=!1}onMouseEnter(e,t){if(!this.mouseDown||!this.wot.getSetting("hideBorderOnMouseDownOver"))return;e.preventDefault(),(0,n.stopImmediatePropagation)(e);const o=this,s=this.wot.rootDocument.body,i=t.getBoundingClientRect();t.style.display="none",this.eventManager.addEventListener(s,"mousemove",(function e(n){var r;((r=n).clientY<Math.floor(i.top)||r.clientY>Math.ceil(i.top+i.height)||r.clientX<Math.floor(i.left)||r.clientX>Math.ceil(i.left+i.width))&&(o.eventManager.removeEventListener(s,"mousemove",e),t.style.display="block")}))}createBorders(e){const{rootDocument:t}=this.wot;this.main=t.createElement("div");const o=["top","start","bottom","end","corner"];let s=this.main.style;s.position="absolute",s.top=0,s.left=0;for(let n=0;n<5;n++){const i=o[n],r=t.createElement("div");r.className=`wtBorder ${this.settings.className||""}`,this.settings[i]&&this.settings[i].hide&&(r.className+=" hidden"),s=r.style,s.backgroundColor=this.settings[i]&&this.settings[i].color?this.settings[i].color:e.border.color,s.height=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,s.width=this.settings[i]&&this.settings[i].width?`${this.settings[i].width}px`:`${e.border.width}px`,this.main.appendChild(r)}this.top=this.main.childNodes[0],this.start=this.main.childNodes[1],this.bottom=this.main.childNodes[2],this.end=this.main.childNodes[3],this.topStyle=this.top.style,this.startStyle=this.start.style,this.bottomStyle=this.bottom.style,this.endStyle=this.end.style,this.corner=this.main.childNodes[4],this.corner.className+=" corner",this.cornerStyle=this.corner.style,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.height=this.cornerDefaultStyle.height,this.cornerStyle.border=[this.cornerDefaultStyle.borderWidth,this.cornerDefaultStyle.borderStyle,this.cornerDefaultStyle.borderColor].join(" "),(0,r.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.createMultipleSelectorHandles(),this.disappear();const{wtTable:n}=this.wot;let i=n.bordersHolder;i||(i=t.createElement("div"),i.className="htBorders",n.bordersHolder=i,n.spreader.appendChild(i)),i.appendChild(this.main)}createMultipleSelectorHandles(){const{rootDocument:e}=this.wot;this.selectionHandles={top:e.createElement("DIV"),topHitArea:e.createElement("DIV"),bottom:e.createElement("DIV"),bottomHitArea:e.createElement("DIV")};this.selectionHandles.top.className="topSelectionHandle topLeftSelectionHandle",this.selectionHandles.topHitArea.className="topSelectionHandle-HitArea topLeftSelectionHandle-HitArea",this.selectionHandles.bottom.className="bottomSelectionHandle bottomRightSelectionHandle",this.selectionHandles.bottomHitArea.className="bottomSelectionHandle-HitArea bottomRightSelectionHandle-HitArea",this.selectionHandles.styles={top:this.selectionHandles.top.style,topHitArea:this.selectionHandles.topHitArea.style,bottom:this.selectionHandles.bottom.style,bottomHitArea:this.selectionHandles.bottomHitArea.style};const t={position:"absolute",height:"40px",width:"40px","border-radius":`${parseInt(40/1.5,10)}px`};(0,i.objectEach)(t,((e,t)=>{this.selectionHandles.styles.bottomHitArea[t]=e,this.selectionHandles.styles.topHitArea[t]=e}));const o={position:"absolute",height:"10px",width:"10px","border-radius":`${parseInt(10/1.5,10)}px`,background:"#F5F5FF",border:"1px solid #4285c8"};(0,i.objectEach)(o,((e,t)=>{this.selectionHandles.styles.bottom[t]=e,this.selectionHandles.styles.top[t]=e})),this.main.appendChild(this.selectionHandles.top),this.main.appendChild(this.selectionHandles.bottom),this.main.appendChild(this.selectionHandles.topHitArea),this.main.appendChild(this.selectionHandles.bottomHitArea)}isPartRange(e,t){const o=this.wot.selectionManager.getAreaSelection();return!(!o.cellRange||e===o.cellRange.to.row&&t===o.cellRange.to.col)}updateMultipleSelectionHandlesPosition(e,t,o,s,n,i){const r=this.wot.wtSettings.getSetting("rtlMode")?"right":"left",{top:l,topHitArea:a,bottom:h,bottomHitArea:c}=this.selectionHandles.styles,u=parseInt(l.borderWidth,10),d=parseInt(l.width,10),g=parseInt(a.width,10),f=this.wot.wtTable.getWidth(),p=this.wot.wtTable.getHeight();l.top=`${parseInt(o-d-1,10)}px`,l[r]=`${parseInt(s-d-1,10)}px`,a.top=`${parseInt(o-g/4*3,10)}px`,a[r]=`${parseInt(s-g/4*3,10)}px`;const m=Math.min(parseInt(s+n,10),f-d-2*u),w=Math.min(parseInt(s+n-g/4,10),f-g-2*u);h[r]=`${m}px`,c[r]=`${w}px`;const C=Math.min(parseInt(o+i,10),p-d-2*u),v=Math.min(parseInt(o+i-g/4,10),p-g-2*u);h.top=`${C}px`,c.top=`${v}px`,this.settings.border.cornerVisible&&this.settings.border.cornerVisible()?(l.display="block",a.display="block",this.isPartRange(e,t)?(h.display="none",c.display="none"):(h.display="block",c.display="block")):(l.display="none",h.display="none",a.display="none",c.display="none"),e===this.wot.wtSettings.getSetting("fixedRowsTop")||t===this.wot.wtSettings.getSetting("fixedColumnsStart")?(l.zIndex="9999",a.zIndex="9999"):(l.zIndex="",a.zIndex="")}appear(e){if(this.disabled)return;const{wtTable:t,rootDocument:o,rootWindow:n}=this.wot;let i,l,a,h,c,u;const d=t.getRenderedRowsCount();for(let o=0;o<d;o+=1){const s=t.rowFilter.renderedToSource(o);if(s>=e[0]&&s<=e[2]){i=s,c=e[0];break}}for(let o=d-1;o>=0;o-=1){const s=t.rowFilter.renderedToSource(o);if(s>=e[0]&&s<=e[2]){l=s;break}}const g=t.getRenderedColumnsCount();for(let o=0;o<g;o+=1){const s=t.columnFilter.renderedToSource(o);if(s>=e[1]&&s<=e[3]){a=s,u=e[1];break}}for(let o=g-1;o>=0;o-=1){const s=t.columnFilter.renderedToSource(o);if(s>=e[1]&&s<=e[3]){h=s;break}}if(void 0===i||void 0===a)return void this.disappear();let f=t.getCell(this.wot.createCellCoords(i,a));const p=i!==l||a!==h,m=p?t.getCell(this.wot.createCellCoords(l,h)):f,w=(0,s.offset)(f),C=p?(0,s.offset)(m):w,v=(0,s.offset)(t.TABLE),y=(0,s.outerWidth)(t.TABLE),E=w.top,S=w.left,R=this.wot.wtSettings.getSetting("rtlMode");let b=0,_=0;if(R){const e=(0,s.outerWidth)(f),t=n.innerWidth-v.left-y;_=S+e-C.left,b=n.innerWidth-S-e-t-1}else _=C.left+(0,s.outerWidth)(m)-S,b=S-v.left-1;if(this.isEntireColumnSelected(i,l)){const e=this.getDimensionsFromHeader("columns",a,h,c,v);let t=null;e&&([t,b,_]=e),t&&(f=t)}let T=E-v.top-1,M=C.top+(0,s.outerHeight)(m)-E;if(this.isEntireRowSelected(a,h)){const e=this.getDimensionsFromHeader("rows",i,l,u,v);let t=null;e&&([t,T,M]=e),t&&(f=t)}const O=(0,s.getComputedStyle)(f,n);parseInt(O.borderTopWidth,10)>0&&(T+=1,M=M>0?M-1:0),parseInt(O[R?"borderRightWidth":"borderLeftWidth"],10)>0&&(b+=1,_=_>0?_-1:0);const I=R?"right":"left";this.topStyle.top=`${T}px`,this.topStyle[I]=`${b}px`,this.topStyle.width=`${_}px`,this.topStyle.display="block",this.startStyle.top=`${T}px`,this.startStyle[I]=`${b}px`,this.startStyle.height=`${M}px`,this.startStyle.display="block";const N=Math.floor(this.settings.border.width/2);this.bottomStyle.top=T+M-N+"px",this.bottomStyle[I]=`${b}px`,this.bottomStyle.width=`${_}px`,this.bottomStyle.display="block",this.endStyle.top=`${T}px`,this.endStyle[I]=b+_-N+"px",this.endStyle.height=`${M+1}px`,this.endStyle.display="block";let A=this.settings.border.cornerVisible;A="function"==typeof A?A(this.settings.layerLevel):A;const P=this.wot.getSetting("onModifyGetCellCoords",l,h);let[x,H]=[l,h];if(P&&Array.isArray(P)&&([,,x,H]=P),(0,r.isMobileBrowser)()||!A||this.isPartRange(x,H))this.cornerStyle.display="none";else{this.cornerStyle.top=T+M+this.cornerCenterPointOffset-1+"px",this.cornerStyle[I]=b+_+this.cornerCenterPointOffset-1+"px",this.cornerStyle.borderRightWidth=this.cornerDefaultStyle.borderWidth,this.cornerStyle.width=this.cornerDefaultStyle.width,this.cornerStyle.display="none";let e=(0,s.getTrimmingContainer)(t.TABLE);const i=e===n;i&&(e=o.documentElement);const r=parseInt(this.cornerDefaultStyle.width,10)/2,a=parseInt(this.cornerDefaultStyle.height,10)/2;if(h===this.wot.getSetting("totalColumns")-1){const t=i?m.getBoundingClientRect().left:m.offsetLeft;let o=!1,n=0;R?(n=t-parseInt(this.cornerDefaultStyle.width,10)/2,o=n<0):(n=t+(0,s.outerWidth)(m)+parseInt(this.cornerDefaultStyle.width,10)/2,o=n>=(0,s.innerWidth)(e)),o&&(this.cornerStyle[I]=`${Math.floor(b+_+this.cornerCenterPointOffset-r)}px`,this.cornerStyle[R?"borderLeftWidth":"borderRightWidth"]=0)}if(l===this.wot.getSetting("totalRows")-1){(i?m.getBoundingClientRect().top:m.offsetTop)+(0,s.outerHeight)(m)+parseInt(this.cornerDefaultStyle.height,10)/2>=(0,s.innerHeight)(e)&&(this.cornerStyle.top=`${Math.floor(T+M+this.cornerCenterPointOffset-a)}px`,this.cornerStyle.borderBottomWidth=0)}this.cornerStyle.display="block"}(0,r.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&this.updateMultipleSelectionHandlesPosition(l,h,T,b,_,M)}isEntireColumnSelected(e,t){return e===this.wot.wtTable.getFirstRenderedRow()&&t===this.wot.wtTable.getLastRenderedRow()}isEntireRowSelected(e,t){return e===this.wot.wtTable.getFirstRenderedColumn()&&t===this.wot.wtTable.getLastRenderedColumn()}getDimensionsFromHeader(e,t,o,n,i){const{wtTable:r}=this.wot,l=r.wtRootElement.parentNode;let a=null,h=null,c=null,u=null,d=null,g=null,f=null,p=null;switch(e){case"rows":a=function(){return r.getRowHeader(...arguments)},h=function(){return(0,s.outerHeight)(...arguments)},c="ht__selection--rows",g="top";break;case"columns":a=function(){return r.getColumnHeader(...arguments)},h=function(){return(0,s.outerWidth)(...arguments)},c="ht__selection--columns",g="left"}if(l.classList.contains(c)){const e=this.wot.getSetting("columnHeaders").length;if(f=a(t,e-n),p=a(o,e-n),!f||!p)return!1;const r=(0,s.offset)(f),l=(0,s.offset)(p);return f&&p&&(u=r[g]-i[g]-1,d=l[g]+h(p)-r[g]),[f,u,d]}return!1}changeBorderStyle(e,t){const o=this[e].style,n=t[e];!n||n.hide?(0,s.addClass)(this[e],"hidden"):((0,s.hasClass)(this[e],"hidden")&&(0,s.removeClass)(this[e],"hidden"),o.backgroundColor=n.color,"top"!==e&&"bottom"!==e||(o.height=`${n.width}px`),"start"!==e&&"end"!==e||(o.width=`${n.width}px`))}changeBorderToDefaultStyle(e){const t=1,o="#000",s=this[e].style;s.backgroundColor=o,s.width=`${t}px`,s.height=`${t}px`}toggleHiddenClass(e,t){this.changeBorderToDefaultStyle(e),t?(0,s.addClass)(this[e],"hidden"):(0,s.removeClass)(this[e],"hidden")}disappear(){this.topStyle.display="none",this.bottomStyle.display="none",this.startStyle.display="none",this.endStyle.display="none",this.cornerStyle.display="none",(0,r.isMobileBrowser)()&&this.instance.getSetting("isDataViewInstance")&&(this.selectionHandles.styles.top.display="none",this.selectionHandles.styles.topHitArea.display="none",this.selectionHandles.styles.bottom.display="none",this.selectionHandles.styles.bottomHitArea.display="none")}destroy(){this.eventManager.destroyWithOwnEventsOnly(),this.main.parentNode.removeChild(this.main)}}},30563:(e,t)=>{"use strict";t.__esModule=!0;t.CORNER_DEFAULT_STYLE=Object.freeze({width:"6px",height:"6px",borderWidth:"1px",borderStyle:"solid",borderColor:"#FFF"})},30782:(e,t)=>{"use strict";t.__esModule=!0;t.ACTIVE_HEADER_TYPE="active-header",t.HEADER_TYPE="header",t.AREA_TYPE="area",t.FOCUS_TYPE="focus",t.FILL_TYPE="fill",t.ROW_TYPE="row",t.COLUMN_TYPE="column",t.CUSTOM_SELECTION_TYPE="custom-selection"},98779:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n={SelectionManager:!0,Selection:!0},i=s(o(8313));t.Selection=i.default;var r=o(30782);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===r[e]||(t[e]=r[e]))}));var l=o(30563);Object.keys(l).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(n,e)||e in t&&t[e]===l[e]||(t[e]=l[e]))}));var a=o(42492);t.SelectionManager=a.SelectionManager},42492:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724),o(25352),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=o(9893),i=o(51785),r=s(o(15934));function l(e,t,o){a(e,t),t.set(e,o)}function a(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function h(e,t){return e.get(u(e,t))}function c(e,t,o){return e.set(u(e,t),o),o}function u(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var d=new WeakMap,g=new WeakMap,f=new WeakMap,p=new WeakMap,m=new WeakMap,w=new WeakMap,C=new WeakSet;function v(){const e=h(p,this).get(h(d,this)),t=h(d,this).wtSettings.getSetting("onBeforeRemoveCellClassNames");if(Array.isArray(t))for(let o=0;o<t.length;o++)e.add(t[o]);e.forEach((e=>{var t,o;const s=h(d,this).wtTable.TABLE.querySelectorAll(`.${e}`);let i=[];Array.isArray(null===(t=h(g,this).options)||void 0===t?void 0:t.cellAttributes)&&(i=h(g,this).options.cellAttributes.map((e=>e[0]))),Array.isArray(null===(o=h(g,this).options)||void 0===o?void 0:o.headerAttributes)&&(i=[...i,...h(g,this).options.headerAttributes.map((e=>e[0]))]);for(let t=0,o=s.length;t<o;t++)(0,n.removeClass)(s[t],e),(0,n.removeAttribute)(s[t],i)})),e.clear()}t.SelectionManager=class{constructor(e){var t,o;a(t=this,o=C),o.add(t),l(this,d,void 0),l(this,g,void 0),l(this,f,new i.SelectionScanner),l(this,p,new WeakMap),l(this,m,new WeakSet),l(this,w,new Map),c(g,this,e)}setActiveOverlay(e){return c(d,this,e),h(f,this).setActiveOverlay(h(d,this)),h(p,this).has(h(d,this))||h(p,this).set(h(d,this),new Set),this}getFocusSelection(){return null!==h(g,this)?h(g,this).getFocus():null}getAreaSelection(){return null!==h(g,this)?h(g,this).createLayeredArea():null}getBorderInstance(e){if(!e.settings.border)return null;if(h(w,this).has(e)){const t=h(w,this).get(e);if(t.has(h(d,this)))return t.get(h(d,this));const o=new r.default(h(d,this),e.settings);return t.set(h(d,this),o),o}const t=new r.default(h(d,this),e.settings);return h(w,this).set(e,new Map([[h(d,this),t]])),t}getBorderInstances(e){var t,o;return Array.from(null!==(t=null===(o=h(w,this).get(e))||void 0===o?void 0:o.values())&&void 0!==t?t:[])}destroyBorders(e){h(w,this).get(e).forEach((e=>e.destroy())),h(w,this).delete(e)}render(e){if(null===h(g,this))return;e&&u(C,this,v).call(this);const t=Array.from(h(g,this)),o=new Map,s=new Map;for(let e=0;e<t.length;e++){const n=t[e],{className:i,headerAttributes:r,createLayers:l,selectionType:a}=n.settings;h(m,this).has(n)||(h(m,this).add(n),n.addLocalHook("destroy",(()=>this.destroyBorders(n))));const c=this.getBorderInstance(n);if(n.isEmpty()){null==c||c.disappear();continue}if(i){h(f,this).setActiveSelection(n).scan().forEach((e=>{if(o.has(e)){const t=o.get(e);t.has(i)&&!0===l?t.set(i,t.get(i)+1):t.set(i,1)}else o.set(e,new Map([[i,1]]));r&&(s.has(e)||s.set(e,[]),"TH"===e.nodeName&&s.get(e).push(...r))}))}const u=n.getCorners();h(d,this).getSetting("onBeforeDrawBorders",u,a),null==c||c.appear(u)}o.forEach(((e,t)=>{var o;const s=Array.from(e).map((e=>{let[t,o]=e;return 1===o?t:[t,...Array.from({length:o-1},((e,o)=>`${t}-${o+1}`))]})).flat();s.forEach((e=>h(p,this).get(h(d,this)).add(e))),(0,n.addClass)(t,s),"TD"===t.nodeName&&Array.isArray(null===(o=h(g,this).options)||void 0===o?void 0:o.cellAttributes)&&(0,n.setAttribute)(t,h(g,this).options.cellAttributes)})),Array.from(s.keys()).forEach((e=>{(0,n.setAttribute)(e,[...s.get(e)])}))}}},51785:(e,t,o)=>{"use strict";t.__esModule=!0,o(67834),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var s=o(9893);function n(e,t,o){i(e,t),t.set(e,o)}function i(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function r(e,t){return e.get(a(e,t))}function l(e,t,o){return e.set(a(e,t),o),o}function a(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var h=new WeakMap,c=new WeakMap,u=new WeakSet;function d(e){const{wtTable:t}=r(c,this),o=t.getRenderedRowsCount(),s=t.getRenderedColumnsCount();for(let n=0;n<o;n+=1){const o=t.rowFilter.renderedToSource(n);for(let n=0;n<s;n+=1)e(o,t.columnFilter.renderedToSource(n))}}t.SelectionScanner=class{constructor(){var e,t;i(e=this,t=u),t.add(e),n(this,h,void 0),n(this,c,void 0)}setActiveOverlay(e){return l(c,this,e),this}setActiveSelection(e){return l(h,this,e),this}scan(){const e=r(h,this).settings.selectionType,t=new Set;return"active-header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"area"===e?this.scanCellsRange((e=>t.add(e))):"focus"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e))),this.scanCellsRange((e=>t.add(e)))):"fill"===e?this.scanCellsRange((e=>t.add(e))):"header"===e?(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanRowsInHeadersRange((e=>t.add(e)))):"row"===e?(this.scanRowsInHeadersRange((e=>t.add(e))),this.scanRowsInCellsRange((e=>t.add(e)))):"column"===e&&(this.scanColumnsInHeadersRange((e=>t.add(e))),this.scanColumnsInCellsRange((e=>t.add(e)))),t}scanColumnsInHeadersRange(e){const[t,o,s,n]=r(h,this).getCorners(),{wtTable:i}=r(c,this),l=i.getRenderedColumnsCount(),a=i.getColumnHeadersCount();let u=0;for(let d=-i.getRowHeadersCount();d<l;d++){const l=i.columnFilter.renderedToSource(d);if(!(l<o||l>n)){for(let d=-a;d<0;d++){if(d<t||d>s)continue;const g=d+a;let f=i.getColumnHeader(l,g);const p=r(c,this).getSetting("onBeforeHighlightingColumnHeader",l,g,{selectionType:r(h,this).settings.selectionType,columnCursor:u,selectionWidth:n-o+1});null!==p&&(p!==l&&(f=i.getColumnHeader(p,g)),e(f))}u+=1}}}scanRowsInHeadersRange(e){const[t,o,s,n]=r(h,this).getCorners(),{wtTable:i}=r(c,this),l=i.getRenderedRowsCount(),a=i.getRowHeadersCount();let u=0;for(let d=-i.getColumnHeadersCount();d<l;d++){const l=i.rowFilter.renderedToSource(d);if(!(l<t||l>s)){for(let d=-a;d<0;d++){if(d<o||d>n)continue;const g=d+a;let f=i.getRowHeader(l,g);const p=r(c,this).getSetting("onBeforeHighlightingRowHeader",l,g,{selectionType:r(h,this).settings.selectionType,rowCursor:u,selectionHeight:s-t+1});null!==p&&(p!==l&&(f=i.getRowHeader(p,g)),e(f))}u+=1}}}scanCellsRange(e){const[t,o,n,i]=r(h,this).getCorners(),{wtTable:l}=r(c,this);a(u,this,d).call(this,((a,u)=>{if(a>=t&&a<=n&&u>=o&&u<=i){const t=l.getCell(r(c,this).createCellCoords(a,u)),o=r(c,this).getSetting("onAfterDrawSelection",a,u,r(h,this).settings.layerLevel);"string"==typeof o&&(0,s.addClass)(t,o),e(t)}}))}scanRowsInCellsRange(e){const[t,,o]=r(h,this).getCorners(),{wtTable:s}=r(c,this);a(u,this,d).call(this,((n,i)=>{if(n>=t&&n<=o){const t=s.getCell(r(c,this).createCellCoords(n,i));e(t)}}))}scanColumnsInCellsRange(e){const[,t,,o]=r(h,this).getCorners(),{wtTable:s}=r(c,this);a(u,this,d).call(this,((n,i)=>{if(i>=t&&i<=o){const t=s.getCell(r(c,this).createCellCoords(n,i));e(t)}}))}}},8313:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(13911),i=s(o(63870));class r{constructor(e,t){this.settings=e,this.cellRange=t||null}isEmpty(){return null===this.cellRange}add(e){return this.isEmpty()?this.cellRange=this.settings.createCellRange(e):this.cellRange.expand(e),this}replace(e,t){if(!this.isEmpty()){if(this.cellRange.from.isEqual(e))return this.cellRange.from=t,!0;if(this.cellRange.to.isEqual(e))return this.cellRange.to=t,!0}return!1}clear(){return this.cellRange=null,this}getCorners(){const e=this.cellRange.getOuterTopStartCorner(),t=this.cellRange.getOuterBottomEndCorner();return[e.row,e.col,t.row,t.col]}destroy(){this.runLocalHooks("destroy")}}(0,n.mixin)(r,i.default);t.default=r},47241:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(9893),r=o(13911);t.default=class{constructor(e){(0,n.default)(this,"settings",{}),(0,n.default)(this,"defaults",Object.freeze(this.getDefaults())),(0,r.objectEach)(this.defaults,((t,o)=>{if(void 0!==e[o])this.settings[o]=e[o];else{if(void 0===t)throw new Error(`A required setting "${o}" was not provided`);this.settings[o]=t}}))}getDefaults(){return{facade:void 0,table:void 0,isDataViewInstance:!0,externalRowCalculator:!1,stretchH:"none",currentRowClassName:null,currentColumnClassName:null,preventOverflow:()=>!1,preventWheel:!1,data:void 0,freezeOverlays:!1,fixedColumnsStart:0,fixedRowsTop:0,fixedRowsBottom:0,shouldRenderInlineStartOverlay:()=>this.getSetting("fixedColumnsStart")>0||this.getSetting("rowHeaders").length>0,shouldRenderTopOverlay:()=>this.getSetting("fixedRowsTop")>0||this.getSetting("columnHeaders").length>0,shouldRenderBottomOverlay:()=>this.getSetting("fixedRowsBottom")>0,minSpareRows:0,rowHeaders:()=>[],columnHeaders:()=>[],totalRows:void 0,totalColumns:void 0,cellRenderer:(e,t,o)=>{const s=this.getSetting("data",e,t);(0,i.fastInnerText)(o,null==s?"":s)},columnWidth(){},rowHeight(){},rowHeightByOverlayName(){},defaultRowHeight:23,defaultColumnWidth:50,selections:null,hideBorderOnMouseDownOver:!1,viewportRowCalculatorOverride:null,viewportColumnCalculatorOverride:null,onCellMouseDown:null,onCellContextMenu:null,onCellMouseOver:null,onCellMouseOut:null,onCellMouseUp:null,onCellDblClick:null,onCellCornerMouseDown:null,onCellCornerDblClick:null,beforeDraw:null,onDraw:null,onBeforeRemoveCellClassNames:null,onAfterDrawSelection:null,onBeforeDrawBorders:null,onBeforeViewportScrollHorizontally:e=>e,onBeforeViewportScrollVertically:e=>e,onScrollHorizontally:null,onScrollVertically:null,onBeforeTouchScroll:null,onAfterMomentumScroll:null,onBeforeStretchingColumnWidth:e=>e,onModifyRowHeaderWidth:null,onModifyGetCellCoords:null,onBeforeHighlightingRowHeader:e=>e,onBeforeHighlightingColumnHeader:e=>e,onWindowResize:null,onContainerElementResize:null,renderAllColumns:!1,renderAllRows:!1,groups:!1,rowHeaderWidth:null,columnHeaderHeight:null,headerClassName:null,rtlMode:!1,ariaTags:!0}}update(e,t){return void 0===t?(0,r.objectEach)(e,((e,t)=>{this.settings[t]=e})):this.settings[e]=t,this}getSetting(e,t,o,s,n){return"function"==typeof this.settings[e]?this.settings[e](t,o,s,n):void 0!==t&&Array.isArray(this.settings[e])?this.settings[e][t]:this.settings[e]}getSettingPure(e){return this.settings[e]}has(e){return!!this.settings[e]}}},63646:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=o(9893),r=o(78832),l=s(o(16979)),a=s(o(39277)),h=o(20524),c=s(o(87736)),u=s(o(46372)),d=o(34009),g=o(92692);t.default=class{constructor(e,t,o,s,r){(0,n.default)(this,"wtSettings",null),(0,n.default)(this,"domBindings",void 0),(0,n.default)(this,"TBODY",null),(0,n.default)(this,"THEAD",null),(0,n.default)(this,"COLGROUP",null),(0,n.default)(this,"hasTableHeight",!0),(0,n.default)(this,"hasTableWidth",!0),(0,n.default)(this,"isTableVisible",!1),(0,n.default)(this,"tableOffset",0),(0,n.default)(this,"holderOffset",0),this.domBindings=o,this.isMaster="master"===r,this.name=r,this.dataAccessObject=e,this.facadeGetter=t,this.wtSettings=s,this.instance=this.dataAccessObject.wot,this.wot=this.dataAccessObject.wot,this.TABLE=o.rootTable,(0,i.removeTextNodes)(this.TABLE),this.spreader=this.createSpreader(this.TABLE),this.hider=this.createHider(this.spreader),this.holder=this.createHolder(this.hider),this.wtRootElement=this.holder.parentNode,this.isMaster&&this.alignOverlaysWithTrimmingContainer(),this.fixTableDomTree(),this.rowFilter=null,this.columnFilter=null,this.correctHeaderWidth=!1;const l=this.wtSettings.getSettingPure("rowHeaderWidth");this.wtSettings.update("rowHeaderWidth",(()=>this._modifyRowHeaderWidth(l))),this.rowUtils=new u.default(this.dataAccessObject,this.wtSettings),this.columnUtils=new c.default(this.dataAccessObject,this.wtSettings),this.tableRenderer=new h.Renderer({TABLE:this.TABLE,THEAD:this.THEAD,COLGROUP:this.COLGROUP,TBODY:this.TBODY,rowUtils:this.rowUtils,columnUtils:this.columnUtils,cellRenderer:this.wtSettings.getSettingPure("cellRenderer")})}is(e){return this.name===e}fixTableDomTree(){const e=this.domBindings.rootDocument;this.TBODY=this.TABLE.querySelector("tbody"),this.TBODY||(this.TBODY=e.createElement("tbody"),this.TABLE.appendChild(this.TBODY)),this.THEAD=this.TABLE.querySelector("thead"),this.THEAD||(this.THEAD=e.createElement("thead"),this.TABLE.insertBefore(this.THEAD,this.TBODY)),this.COLGROUP=this.TABLE.querySelector("colgroup"),this.COLGROUP||(this.COLGROUP=e.createElement("colgroup"),this.TABLE.insertBefore(this.COLGROUP,this.THEAD))}createSpreader(e){const t=e.parentNode;let o;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(o=this.domBindings.rootDocument.createElement("div"),o.className="wtSpreader",t&&t.insertBefore(o,e),o.appendChild(e)),o.style.position="relative",this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o,[(0,g.A11Y_PRESENTATION)()]),o}createHider(e){const t=e.parentNode;let o;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(o=this.domBindings.rootDocument.createElement("div"),o.className="wtHider",t&&t.insertBefore(o,e),o.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o,[(0,g.A11Y_PRESENTATION)()]),o}createHolder(e){const t=e.parentNode;let o;return t&&t.nodeType===Node.ELEMENT_NODE&&(0,i.hasClass)(t,"wtHolder")||(o=this.domBindings.rootDocument.createElement("div"),o.style.position="relative",o.className="wtHolder",t&&t.insertBefore(o,e),this.isMaster&&(o.parentNode.className+="ht_master handsontable",o.parentNode.setAttribute("dir",this.wtSettings.getSettingPure("rtlMode")?"rtl":"ltr"),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o.parentNode,[(0,g.A11Y_PRESENTATION)()])),o.appendChild(e)),this.wtSettings.getSetting("ariaTags")&&(0,i.setAttribute)(o,[(0,g.A11Y_PRESENTATION)()]),o}draw(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,{wtOverlays:o,wtViewport:s}=this.dataAccessObject,n=t.getSetting("totalRows"),r=t.getSetting("totalColumns"),h=t.getSetting("rowHeaders"),c=h.length,u=t.getSetting("columnHeaders"),g=u.length;let f=e;if(this.isMaster&&(o.beforeDraw(),this.holderOffset=(0,i.offset)(this.holder),f=s.createCalculators(f),c&&!t.getSetting("fixedColumnsStart"))){const e=o.inlineStartOverlay.getScrollPosition(),t=this.correctHeaderWidth;this.correctHeaderWidth=0!==e,t!==this.correctHeaderWidth&&(f=!1)}if(f)this.isMaster&&o.refresh(!0);else{this.isMaster?this.tableOffset=(0,i.offset)(this.TABLE):this.tableOffset=this.dataAccessObject.parentTableOffset;const e=n>0?this.getFirstRenderedRow():0,t=r>0?this.getFirstRenderedColumn():0;this.rowFilter=new a.default(e,n,g),this.columnFilter=new l.default(t,r,c);let f=!0;if(this.isMaster){this.alignOverlaysWithTrimmingContainer();const e={};this.wtSettings.getSetting("beforeDraw",!0,e),f=!0!==e.skipRender}if(f){let e;if(this.tableRenderer.setHeaderContentRenderers(h,u),(this.is(d.CLONE_BOTTOM)||this.is(d.CLONE_BOTTOM_INLINE_START_CORNER))&&this.tableRenderer.setHeaderContentRenderers(h,[]),this.resetOversizedRows(),this.tableRenderer.setActiveOverlayName(this.name).setViewportSize(this.getRenderedRowsCount(),this.getRenderedColumnsCount()).setFilters(this.rowFilter,this.columnFilter).render(),this.isMaster&&(e=this.dataAccessObject.workspaceWidth,s.containerWidth=null,this.markOversizedColumnHeaders()),this.adjustColumnHeaderHeights(),(this.isMaster||this.is(d.CLONE_BOTTOM))&&this.markOversizedRows(),this.isMaster){this.wtSettings.getSetting("externalRowCalculator")||s.createVisibleCalculators(),o.refresh(!1),o.applyToDOM();const t=(0,i.outerWidth)(this.hider),n=(0,i.outerWidth)(this.TABLE);0!==t&&n!==t&&(this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),e!==s.getWorkspaceWidth()&&(s.containerWidth=null,this.columnUtils.calculateWidths(),this.tableRenderer.renderer.colGroup.render()),this.wtSettings.getSetting("onDraw",!0)}else this.is(d.CLONE_BOTTOM)&&this.dataAccessObject.cloneSource.wtOverlays.adjustElementsSize()}}let p=!1;return this.isMaster&&(p=o.topOverlay.resetFixedPosition(),o.bottomOverlay.clone&&(p=o.bottomOverlay.resetFixedPosition()||p),p=o.inlineStartOverlay.resetFixedPosition()||p,o.topInlineStartCornerOverlay&&o.topInlineStartCornerOverlay.resetFixedPosition(),o.bottomInlineStartCornerOverlay&&o.bottomInlineStartCornerOverlay.clone&&o.bottomInlineStartCornerOverlay.resetFixedPosition()),p?(o.refreshAll(),o.adjustElementsSize()):this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(f),this.isMaster&&o.afterDraw(),this.dataAccessObject.drawn=!0,this}markIfOversizedColumnHeader(e){const t=this.columnFilter.renderedToSource(e);let o=this.wtSettings.getSetting("columnHeaders").length;const s=this.wtSettings.getSetting("defaultRowHeight");let n,r,l;const a=this.wtSettings.getSetting("columnHeaderHeight")||[];for(;o;)o-=1,n=this.getColumnHeaderHeight(o),r=this.getColumnHeader(t,o),r&&(l=(0,i.innerHeight)(r),(!n&&s<l||n<l)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=l),Array.isArray(a)?null!==a[o]&&void 0!==a[o]&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=a[o]):isNaN(a)||(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=a),this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]<(a[o]||a)&&(this.dataAccessObject.wtViewport.oversizedColumnHeaders[o]=a[o]||a))}adjustColumnHeaderHeights(){const{wtSettings:e}=this,t=this.THEAD.childNodes,o=this.dataAccessObject.wtViewport.oversizedColumnHeaders;for(let s=0,n=e.getSetting("columnHeaders").length;s<n;s++)if(o[s]){if(!t[s]||0===t[s].childNodes.length)return;t[s].childNodes[0].style.height=`${o[s]}px`}}resetOversizedRows(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject;if((this.isMaster||this.is(d.CLONE_BOTTOM))&&!e.getSetting("externalRowCalculator")){const e=this.getRenderedRowsCount();for(let o=0;o<e;o++){const e=this.rowFilter.renderedToSource(o);t.oversizedRows&&t.oversizedRows[e]&&(t.oversizedRows[e]=void 0)}}}getCell(e){let t=e.row,o=e.col;const s=this.wtSettings.getSetting("onModifyGetCellCoords",t,o);if(s&&Array.isArray(s)&&([t,o]=s),this.isRowBeforeRenderedRows(t))return-1;if(this.isRowAfterRenderedRows(t))return-2;if(this.isColumnBeforeRenderedColumns(o))return-3;if(this.isColumnAfterRenderedColumns(o))return-4;const n=this.getRow(t);if(!n&&t>=0)throw new Error("TR was expected to be rendered but is not");const i=n.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(o)];if(!i&&o>=0)throw new Error("TD or TH was expected to be rendered but is not");return i}getRow(e){let t=null,o=null;var s,n;e<0?(t=null===(s=this.rowFilter)||void 0===s?void 0:s.sourceRowToVisibleColHeadedRow(e),o=this.THEAD):(t=null===(n=this.rowFilter)||void 0===n?void 0:n.sourceToRendered(e),o=this.TBODY);return void 0!==t&&void 0!==o&&(!(o.childNodes.length<t+1)&&o.childNodes[t])}getColumnHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const o=this.THEAD.childNodes[t];return null==o?void 0:o.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e)]}getColumnHeaders(e){const t=[],o=this.columnFilter.sourceColumnToVisibleRowHeadedColumn(e);return this.THEAD.childNodes.forEach((e=>{const s=e.childNodes[o];s&&t.push(s)})),t}getRowHeader(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t>=this.wtSettings.getSetting("rowHeaders").length)return;const o=this.rowFilter.sourceToRendered(e),s=o<0?this.rowFilter.sourceRowToVisibleColHeadedRow(e):o,n=(o<0?this.THEAD:this.TBODY).childNodes[s];return null==n?void 0:n.childNodes[t]}getRowHeaders(e){const t=[],o=this.wtSettings.getSetting("rowHeaders").length;for(let s=0;s<o;s++){const o=this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)],n=null==o?void 0:o.childNodes[s];n&&t.push(n)}return t}getCoords(e){let t=e;if("TD"!==t.nodeName&&"TH"!==t.nodeName&&(t=(0,i.closest)(t,["TD","TH"])),null===t)return null;const o=t.parentNode,s=o.parentNode;let n=(0,i.index)(o),r=t.cellIndex;if((0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_TOP,t,this.wtRootElement))"THEAD"===s.nodeName&&(n-=s.childNodes.length);else if((0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM,t,this.wtRootElement)){n=this.wtSettings.getSetting("totalRows")-s.childNodes.length+n}else n=s===this.THEAD?this.rowFilter.visibleColHeadedRowToSourceRow(n):this.rowFilter.renderedToSource(n);return r=(0,i.overlayContainsElement)(d.CLONE_TOP_INLINE_START_CORNER,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_INLINE_START,t,this.wtRootElement)||(0,i.overlayContainsElement)(d.CLONE_BOTTOM_INLINE_START_CORNER,t,this.wtRootElement)?this.columnFilter.offsettedTH(r):this.columnFilter.visibleRowHeadedColumnToSourceColumn(r),this.wot.createCellCoords(n,r)}markOversizedRows(){if(this.wtSettings.getSetting("externalRowCalculator"))return;let e=this.TBODY.childNodes.length;let t,o,s,n,r;if(e*this.wtSettings.getSetting("defaultRowHeight")!==(0,i.innerHeight)(this.TBODY)-1||this.wtSettings.getSetting("fixedRowsBottom"))for(;e;)e-=1,s=this.rowFilter.renderedToSource(e),t=this.getRowHeight(s),n=this.getTrForRow(s),r=n.querySelector("th"),o=r?(0,i.innerHeight)(r):(0,i.innerHeight)(n)-1,(!t&&this.wtSettings.getSetting("defaultRowHeight")<o||t<o)&&(o+=1,this.dataAccessObject.wtViewport.oversizedRows[s]=o)}getTrForRow(e){return this.TBODY.childNodes[this.rowFilter.sourceToRendered(e)]}isColumnHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("rowHeaders").length;return Math.abs(e)<=t}isRowHeaderRendered(e){if(e>=0)return!1;const t=this.wtSettings.getSetting("columnHeaders").length;return Math.abs(e)<=t}isRowBeforeRenderedRows(e){const t=this.getFirstRenderedRow();return e<0&&t<=0?!this.isRowHeaderRendered(e):e<t}isRowAfterRenderedRows(e){return e>this.getLastRenderedRow()}isColumnBeforeRenderedColumns(e){const t=this.getFirstRenderedColumn();return e<0&&t<=0?!this.isColumnHeaderRendered(e):e<t}isColumnAfterRenderedColumns(e){return this.columnFilter&&e>this.getLastRenderedColumn()}isColumnAfterViewport(e){return this.columnFilter&&e>this.getLastVisibleColumn()}isRowAfterViewport(e){return this.rowFilter&&e>this.getLastVisibleRow()}isColumnBeforeViewport(e){return this.columnFilter&&this.columnFilter.sourceToRendered(e)<0&&e>=0}isLastRowFullyVisible(){return this.getLastVisibleRow()===this.getLastRenderedRow()}isLastColumnFullyVisible(){return this.getLastVisibleColumn()===this.getLastRenderedColumn()}allRowsInViewport(){return this.wtSettings.getSetting("totalRows")===this.getVisibleRowsCount()}allColumnsInViewport(){return this.wtSettings.getSetting("totalColumns")===this.getVisibleColumnsCount()}getRowHeight(e){return this.rowUtils.getHeight(e)}getColumnHeaderHeight(e){return this.columnUtils.getHeaderHeight(e)}getColumnWidth(e){return this.columnUtils.getWidth(e)}getStretchedColumnWidth(e){return this.columnUtils.getStretchedColumnWidth(e)}hasDefinedSize(){return this.hasTableHeight&&this.hasTableWidth}getWidth(){return(0,i.outerWidth)(this.TABLE)}getHeight(){return(0,i.outerHeight)(this.TABLE)}getTotalWidth(){const e=(0,i.outerWidth)(this.hider);return 0!==e?e:this.getWidth()}getTotalHeight(){const e=(0,i.outerHeight)(this.hider);return 0!==e?e:this.getHeight()}isVisible(){return(0,i.isVisible)(this.TABLE)}_modifyRowHeaderWidth(e){let t=(0,r.isFunction)(e)?e():null;return Array.isArray(t)?(t=[...t],t[t.length-1]=this._correctRowHeaderWidth(t[t.length-1])):t=this._correctRowHeaderWidth(t),t}_correctRowHeaderWidth(e){let t=e;return"number"!=typeof e&&(t=this.wtSettings.getSetting("defaultColumnWidth")),this.correctHeaderWidth&&(t+=1),t}}},31542:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(58166)),r=s(o(17800)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_BOTTOM)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},93638:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(58166)),r=s(o(85449)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_BOTTOM_INLINE_START_CORNER)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},14658:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(95374)),r=s(o(85449)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_INLINE_START)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},26235:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(9893),i=s(o(63646)),r=s(o(95374)),l=s(o(17800)),a=o(13911);class h extends i.default{constructor(e,t,o,s){super(e,t,o,s,"master")}alignOverlaysWithTrimmingContainer(){const e=(0,n.getTrimmingContainer)(this.wtRootElement),{rootWindow:t}=this.domBindings;if(e===t){this.wtSettings.getSetting("preventOverflow")||(this.holder.style.overflow="visible",this.wtRootElement.style.overflow="visible")}else{const o=e.parentElement,s=(0,n.getStyle)(e,"height",t),i=(0,n.getStyle)(e,"overflow",t),r=this.holder.style,{scrollWidth:l,scrollHeight:a}=e;let h=e.offsetWidth,c=e.offsetHeight;if(o&&["auto","hidden","scroll"].includes(i)){const s=e.cloneNode(!1);s.style.overflow="auto",s.style.position="absolute",e.nextElementSibling?o.insertBefore(s,e.nextElementSibling):o.appendChild(s);const i=parseInt((0,n.getComputedStyle)(s,t).height,10);o.removeChild(s),0===i&&(c=0)}c=Math.min(c,a),r.height="auto"===s?"auto":`${c}px`,h=Math.min(h,l),r.width=`${h}px`,r.overflow="",this.hasTableHeight="auto"===r.height||c>0,this.hasTableWidth=h>0}this.isTableVisible=(0,n.isVisible)(this.TABLE)}markOversizedColumnHeaders(){const{wtSettings:e}=this,{wtViewport:t}=this.dataAccessObject,o="master",s=e.getSetting("columnHeaders").length;if(s&&!t.hasOversizedColumnHeadersMarked[o]){const n=e.getSetting("rowHeaders").length,i=this.getRenderedColumnsCount();for(let e=0;e<s;e++)for(let e=-1*n;e<i;e++)this.markIfOversizedColumnHeader(e);t.hasOversizedColumnHeadersMarked[o]=!0}}}(0,a.mixin)(h,r.default),(0,a.mixin)(h,l.default);t.default=h},17800:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedColumn(){const e=this.dataAccessObject.startColumnRendered;return null===e?-1:e},getFirstVisibleColumn(){const e=this.dataAccessObject.startColumnVisible;return null===e?-1:e},getFirstPartiallyVisibleColumn(){const e=this.dataAccessObject.startColumnPartiallyVisible;return null===e?-1:e},getLastRenderedColumn(){const e=this.dataAccessObject.endColumnRendered;return null===e?-1:e},getLastVisibleColumn(){const e=this.dataAccessObject.endColumnVisible;return null===e?-1:e},getLastPartiallyVisibleColumn(){const e=this.dataAccessObject.endColumnPartiallyVisible;return null===e?-1:e},getRenderedColumnsCount(){return this.dataAccessObject.countColumnsRendered},getVisibleColumnsCount(){return this.dataAccessObject.countColumnsVisible},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","calculatedColumns",{writable:!1,enumerable:!1});t.default=n},95374:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedRow(){const e=this.dataAccessObject.startRowRendered;return null===e?-1:e},getFirstVisibleRow(){const e=this.dataAccessObject.startRowVisible;return null===e?-1:e},getFirstPartiallyVisibleRow(){const e=this.dataAccessObject.startRowPartiallyVisible;return null===e?-1:e},getLastRenderedRow(){const e=this.dataAccessObject.endRowRendered;return null===e?-1:e},getLastVisibleRow(){const e=this.dataAccessObject.endRowVisible;return null===e?-1:e},getLastPartiallyVisibleRow(){const e=this.dataAccessObject.endRowPartiallyVisible;return null===e?-1:e},getRenderedRowsCount(){return this.dataAccessObject.countRowsRendered},getVisibleRowsCount(){return this.dataAccessObject.countRowsVisible},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","calculatedRows",{writable:!1,enumerable:!1});t.default=n},85449:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedColumn(){return 0===this.wtSettings.getSetting("totalColumns")?-1:0},getFirstVisibleColumn(){return this.getFirstRenderedColumn()},getFirstPartiallyVisibleColumn(){return this.getFirstRenderedColumn()},getLastRenderedColumn(){return this.getRenderedColumnsCount()-1},getLastVisibleColumn(){return this.getLastRenderedColumn()},getLastPartiallyVisibleColumn(){return this.getLastRenderedColumn()},getRenderedColumnsCount(){const e=this.wtSettings.getSetting("totalColumns");return Math.min(this.wtSettings.getSetting("fixedColumnsStart"),e)},getVisibleColumnsCount(){return this.getRenderedColumnsCount()},getRowHeadersCount(){return this.dataAccessObject.rowHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","stickyColumnsStart",{writable:!1,enumerable:!1});t.default=n},58166:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedRow(){const e=this.wtSettings.getSetting("totalRows"),t=this.wtSettings.getSetting("fixedRowsBottom"),o=e-t;return 0===e||0===t?-1:o<0?0:o},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.wtSettings.getSetting("totalRows")-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsBottom"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount:()=>0};(0,s.defineGetter)(n,"MIXIN_NAME","stickyRowsBottom",{writable:!1,enumerable:!1});t.default=n},61138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(13911);const n={getFirstRenderedRow(){return 0===this.wtSettings.getSetting("totalRows")?-1:0},getFirstVisibleRow(){return this.getFirstRenderedRow()},getFirstPartiallyVisibleRow(){return this.getFirstRenderedRow()},getLastRenderedRow(){return this.getRenderedRowsCount()-1},getLastVisibleRow(){return this.getLastRenderedRow()},getLastPartiallyVisibleRow(){return this.getLastRenderedRow()},getRenderedRowsCount(){const e=this.wtSettings.getSetting("totalRows");return Math.min(this.wtSettings.getSetting("fixedRowsTop"),e)},getVisibleRowsCount(){return this.getRenderedRowsCount()},getColumnHeadersCount(){return this.dataAccessObject.columnHeaders.length}};(0,s.defineGetter)(n,"MIXIN_NAME","stickyRowsTop",{writable:!1,enumerable:!1});t.default=n},61234:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(61138)),r=s(o(17800)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_TOP)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},60882:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(63646)),i=s(o(61138)),r=s(o(85449)),l=o(13911),a=o(34009);class h extends n.default{constructor(e,t,o,s){super(e,t,o,s,a.CLONE_TOP_INLINE_START_CORNER)}}(0,l.mixin)(h,i.default),(0,l.mixin)(h,r.default);t.default=h},87736:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(9893),r=o(61311);t.default=class{constructor(e,t){(0,n.default)(this,"dataAccessObject",void 0),(0,n.default)(this,"wtSettings",void 0),(0,n.default)(this,"headerWidths",new Map),(0,n.default)(this,"stretching",void 0),this.dataAccessObject=e,this.wtSettings=t,this.stretching=new r.ColumnStretching({totalColumns:()=>this.wtSettings.getSetting("totalColumns"),stretchMode:()=>this.wtSettings.getSetting("stretchH"),stretchingColumnWidthFn:(e,t)=>this.wtSettings.getSetting("onBeforeStretchingColumnWidth",e,t),columnWidthFn:e=>this.dataAccessObject.wtTable.getColumnWidth(e)})}getWidth(e){return this.wtSettings.getSetting("columnWidth",e)||this.wtSettings.getSetting("defaultColumnWidth")}getStretchedColumnWidth(e){let t=this.getWidth(e);const o=this.stretching.getStretchedColumnWidth(e,t);return o&&(t=o),t}getHeaderHeight(e){let t=this.wtSettings.getSetting("defaultRowHeight");const o=this.dataAccessObject.wtViewport.oversizedColumnHeaders[e];return void 0!==o&&(t=t?Math.max(t,o):o),t}getHeaderWidth(e){return this.headerWidths.get(this.dataAccessObject.wtTable.columnFilter.sourceToRendered(e))}refreshStretching(){const{wtTable:e,wtViewport:t,cloneSource:o}=this.dataAccessObject,s=o?o.wtTable.holder:e.holder,n=s.offsetHeight<s.scrollHeight?(0,i.getScrollbarWidth)():0;this.stretching.refreshStretching(t.getViewportWidth()-n)}calculateWidths(){const{wtSettings:e}=this;let t=e.getSetting("rowHeaderWidth");if(this.refreshStretching(),t=e.getSetting("onModifyRowHeaderWidth",t),null!=t){const o=e.getSetting("rowHeaders").length,s=e.getSetting("defaultColumnWidth");for(let e=0;e<o;e++){let o=Array.isArray(t)?t[e]:t;o=null==o?s:o,this.headerWidths.set(e,o)}}}}},61311:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(26679);function r(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function l(e,t){return e.get(h(e,t))}function a(e,t,o){return e.set(h(e,t),o),o}function h(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var c=new WeakMap,u=new WeakMap,d=new WeakMap,g=new WeakMap,f=new WeakMap;t.ColumnStretching=class{constructor(e){let{totalColumns:t,stretchMode:o,stretchingColumnWidthFn:s,columnWidthFn:i}=e;(0,n.default)(this,"stretchAllRatio",0),(0,n.default)(this,"stretchLastWidth",0),(0,n.default)(this,"stretchAllColumnsWidth",[]),r(this,c,0),(0,n.default)(this,"needVerifyLastColumnWidth",!0),r(this,u,(()=>0)),r(this,d,(e=>e)),r(this,g,(e=>e)),r(this,f,(()=>"none")),a(u,this,t),a(f,this,o),a(d,this,null!=s?s:l(d,this)),a(g,this,null!=i?i:l(g,this))}refreshStretching(e){if("none"===l(f,this).call(this))return;this.stretchAllRatio=0,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0,this.stretchLastWidth=0,a(c,this,e);let t=0;for(let o=0;o<l(u,this).call(this);o++){const s=this._getColumnWidth(o),n=l(d,this).call(this,void 0,o);"number"==typeof n?e-=n:t+=s}const o=e-t;if("all"===l(f,this).call(this)&&o>0)this.stretchAllRatio=e/t,this.stretchAllColumnsWidth=[],this.needVerifyLastColumnWidth=!0;else if("last"===l(f,this).call(this)&&e!==1/0){const e=this._getColumnWidth(l(u,this).call(this)-1),t=o+e;this.stretchLastWidth=t>=0?t:e}}getStretchedColumnWidth(e,t){let o=null;return"all"===l(f,this).call(this)&&0!==this.stretchAllRatio?o=this._getStretchedAllColumnWidth(e,t):"last"===l(f,this).call(this)&&0!==this.stretchLastWidth&&(o=this._getStretchedLastColumnWidth(e)),o}_getStretchedAllColumnWidth(e,t){let o=0;if(!this.stretchAllColumnsWidth[e]){const o=Math.round(t*this.stretchAllRatio),s=l(d,this).call(this,o,e);this.stretchAllColumnsWidth[e]=void 0===s?o:isNaN(s)?this._getColumnWidth(e):s}if(this.stretchAllColumnsWidth.length===l(u,this).call(this)&&this.needVerifyLastColumnWidth){this.needVerifyLastColumnWidth=!1;for(let e=0;e<this.stretchAllColumnsWidth.length;e++)o+=this.stretchAllColumnsWidth[e];o!==l(c,this)&&(this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length-1]+=l(c,this)-o)}return this.stretchAllColumnsWidth[e]}_getStretchedLastColumnWidth(e){return e===l(u,this).call(this)-1?this.stretchLastWidth:null}_getColumnWidth(e){let t=l(g,this).call(this,e);return isNaN(t)&&(t=i.DEFAULT_COLUMN_WIDTH),t}}},42715:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e){(0,n.default)(this,"nodeType",void 0),this.nodeType=e.toUpperCase()}setRootDocument(e){this.rootDocument=e}obtain(){return this.rootDocument.createElement(this.nodeType)}}},60739:(e,t)=>{"use strict";t.__esModule=!0;t.WORKING_SPACE_ALL=0,t.WORKING_SPACE_TOP=1,t.WORKING_SPACE_BOTTOM=2},21682:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(23225));t.OrderView=n.default;var i=s(o(47664));t.SharedOrderView=i.default},47664:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(23225));class i extends n.default{prependView(e){return this.sizeSet.prepend(e.sizeSet),e.sizeSet.append(this.sizeSet),this}appendView(e){return this.sizeSet.append(e.sizeSet),e.sizeSet.prepend(this.sizeSet),this}}t.default=i},23225:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(60739),r=s(o(83638));t.default=class{constructor(e,t,o){(0,n.default)(this,"rootNode",void 0),(0,n.default)(this,"nodesPool",void 0),(0,n.default)(this,"sizeSet",new r.default),(0,n.default)(this,"childNodeType",void 0),(0,n.default)(this,"visualIndex",0),(0,n.default)(this,"collectedNodes",[]),this.rootNode=e,this.nodesPool=t,this.childNodeType=o.toUpperCase()}setSize(e){return this.sizeSet.setSize(e),this}setOffset(e){return this.sizeSet.setOffset(e),this}isSharedViewSet(){return this.sizeSet.isShared()}getNode(e){return e<this.collectedNodes.length?this.collectedNodes[e]:null}getCurrentNode(){const e=this.collectedNodes.length;return e>0?this.collectedNodes[e-1]:null}getRenderedChildCount(){const{rootNode:e,sizeSet:t}=this;let o=0;if(this.isSharedViewSet()){let s=e.firstElementChild;for(;s;){if(s.tagName===this.childNodeType)o+=1;else if(t.isPlaceOn(i.WORKING_SPACE_TOP))break;s=s.nextElementSibling}}else o=e.childElementCount;return o}start(){this.collectedNodes.length=0,this.visualIndex=0;const{rootNode:e,sizeSet:t}=this,o=this.isSharedViewSet(),{nextSize:s}=t.getViewSize();let n=this.getRenderedChildCount();for(;n<s;){const s=this.nodesPool();!o||o&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)?e.appendChild(s):e.insertBefore(s,e.firstChild),n+=1}const r=o&&t.isPlaceOn(i.WORKING_SPACE_TOP);for(;n>s;)e.removeChild(r?e.firstChild:e.lastChild),n-=1}render(){const{rootNode:e,sizeSet:t}=this;let o=this.visualIndex;this.isSharedViewSet()&&t.isPlaceOn(i.WORKING_SPACE_BOTTOM)&&(o+=t.sharedSize.nextSize);let s=e.childNodes[o];if(s.tagName!==this.childNodeType){const t=this.nodesPool();e.replaceChild(t,s),s=t}this.collectedNodes.push(s),this.visualIndex+=1}end(){}}},92820:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(){(0,n.default)(this,"currentSize",0),(0,n.default)(this,"nextSize",0),(0,n.default)(this,"currentOffset",0),(0,n.default)(this,"nextOffset",0)}setSize(e){this.currentSize=this.nextSize,this.nextSize=e}setOffset(e){this.currentOffset=this.nextOffset,this.nextOffset=e}}},83638:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=s(o(92820)),r=o(60739);t.default=class{constructor(){(0,n.default)(this,"size",new i.default),(0,n.default)(this,"workingSpace",r.WORKING_SPACE_ALL),(0,n.default)(this,"sharedSize",null)}setSize(e){this.size.setSize(e)}setOffset(e){this.size.setOffset(e)}getViewSize(){return this.size}isShared(){return this.sharedSize instanceof i.default}isPlaceOn(e){return this.workingSpace===e}append(e){this.workingSpace=r.WORKING_SPACE_TOP,e.workingSpace=r.WORKING_SPACE_BOTTOM,this.sharedSize=e.getViewSize()}prepend(e){this.workingSpace=r.WORKING_SPACE_BOTTOM,e.workingSpace=r.WORKING_SPACE_TOP,this.sharedSize=e.getViewSize()}}},46372:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707));t.default=class{constructor(e,t){(0,n.default)(this,"dataAccessObject",void 0),(0,n.default)(this,"wtSettings",void 0),this.dataAccessObject=e,this.wtSettings=t}getHeight(e){let t=this.wtSettings.getSetting("rowHeight",e);const o=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==o&&(t=void 0===t?o:Math.max(t,o)),t}getHeightByOverlayName(e,t){let o=this.wtSettings.getSetting("rowHeightByOverlayName",e,t);const s=this.dataAccessObject.wtViewport.oversizedRows[e];return void 0!==s&&(o=void 0===o?s:Math.max(o,s)),o}}},85690:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9893),n=o(13911),i=o(26679);t.default=class{constructor(e,t,o,s,n){this.dataAccessObject=e,this.wot=e.wot,this.instance=this.wot,this.domBindings=t,this.wtSettings=o,this.wtTable=n,this.oversizedRows=[],this.oversizedColumnHeaders=[],this.hasOversizedColumnHeadersMarked={},this.clientHeight=0,this.containerWidth=NaN,this.rowHeaderWidth=NaN,this.rowsVisibleCalculator=null,this.columnsVisibleCalculator=null,this.rowsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllRows")?new i.RenderedAllRowsCalculationType:new i.RenderedRowsCalculationType],["fullyVisible",()=>new i.FullyVisibleRowsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleRowsCalculationType]]),this.columnsCalculatorTypes=new Map([["rendered",()=>this.wtSettings.getSetting("renderAllColumns")?new i.RenderedAllColumnsCalculationType:new i.RenderedColumnsCalculationType],["fullyVisible",()=>new i.FullyVisibleColumnsCalculationType],["partiallyVisible",()=>new i.PartiallyVisibleColumnsCalculationType]]),this.eventManager=s,this.eventManager.addEventListener(this.domBindings.rootWindow,"resize",(()=>{this.clientHeight=this.getWorkspaceHeight()}))}getWorkspaceHeight(){const e=this.domBindings.rootDocument,t=this.dataAccessObject.topOverlayTrimmingContainer;let o=0;if(t===this.domBindings.rootWindow)o=e.documentElement.clientHeight;else{o=(0,s.outerHeight)(t)>0&&t.clientHeight>0?t.clientHeight:1/0}return o}getWorkspaceWidth(){const{wtSettings:e}=this,{rootDocument:t,rootWindow:o}=this.domBindings,n=this.dataAccessObject.inlineStartOverlayTrimmingContainer,i=t.documentElement.offsetWidth,r=e.getSetting("totalColumns"),l=e.getSetting("preventOverflow"),a=e.getSetting("rtlMode"),h=this.wtTable.TABLE.getBoundingClientRect(),c=i-(a?h.right-i:h.left);let u,d;if(l)return(0,s.outerWidth)(this.wtTable.wtRootElement);if(u=e.getSetting("freezeOverlays")?Math.min(c,i):Math.min(this.getContainerFillWidth(),c,i),n===o&&r>0&&this.sumColumnWidths(0,r-1)>u)return t.documentElement.clientWidth;if(n!==o&&(d=(0,s.getStyle)(this.dataAccessObject.inlineStartOverlayTrimmingContainer,"overflow",o),"scroll"===d||"hidden"===d||"auto"===d))return Math.max(u,n.clientWidth);const g=e.getSetting("stretchH");return"none"!==g&&g?u:Math.max(u,(0,s.outerWidth)(this.wtTable.TABLE))}hasVerticalScroll(){return this.wtTable.hider.offsetHeight>this.getWorkspaceHeight()}hasHorizontalScroll(){return this.wtTable.hider.offsetWidth>this.getWorkspaceWidth()}sumColumnWidths(e,t){let o=0,s=e;for(;s<t;)o+=this.wtTable.getColumnWidth(s),s+=1;return o}getContainerFillWidth(){if(this.containerWidth)return this.containerWidth;const e=this.wtTable.holder,t=this.domBindings.rootDocument.createElement("div");t.style.width="100%",t.style.height="1px",e.appendChild(t);const o=t.offsetWidth;return this.containerWidth=o,e.removeChild(t),o}getWorkspaceOffset(){return(0,s.offset)(this.wtTable.TABLE)}getColumnHeaderHeight(){return this.wtSettings.getSetting("columnHeaders").length?isNaN(this.columnHeaderHeight)&&(this.columnHeaderHeight=(0,s.outerHeight)(this.wtTable.THEAD)):this.columnHeaderHeight=0,this.columnHeaderHeight}getViewportHeight(){let e=this.getWorkspaceHeight();if(e===1/0)return e;const t=this.getColumnHeaderHeight();return t>0&&(e-=t),e}getRowHeaderWidth(){const e=this.wtSettings.getSetting("rowHeaderWidth"),t=this.wtSettings.getSetting("rowHeaders");if(e){this.rowHeaderWidth=0;for(let o=0,s=t.length;o<s;o++)this.rowHeaderWidth+=e[o]||e}if(isNaN(this.rowHeaderWidth))if(t.length){let e=this.wtTable.TABLE.querySelector("TH");this.rowHeaderWidth=0;for(let o=0,n=t.length;o<n;o++)e?(this.rowHeaderWidth+=(0,s.outerWidth)(e),e=e.nextSibling):this.rowHeaderWidth+=50}else this.rowHeaderWidth=0;return this.rowHeaderWidth=this.wtSettings.getSetting("onModifyRowHeaderWidth",this.rowHeaderWidth)||this.rowHeaderWidth,this.rowHeaderWidth}getViewportWidth(){const e=this.getWorkspaceWidth();if(e===1/0)return e;const t=this.getRowHeaderWidth();return t>0?e-t:e}createRowsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:o}=this;let n,r,l=this.getViewportHeight();this.rowHeaderWidth=NaN;let a=this.dataAccessObject.topScrollPosition-this.dataAccessObject.topParentOffset;const h=t.getSetting("fixedRowsTop"),c=t.getSetting("fixedRowsBottom"),u=t.getSetting("totalRows");return h&&a>=0&&(r=this.dataAccessObject.topOverlay.sumCellSizes(0,h),a+=r,l-=r),c&&this.dataAccessObject.bottomOverlay.clone&&(r=this.dataAccessObject.bottomOverlay.sumCellSizes(u-c,u),l-=r),n=o.holder.clientHeight===o.holder.offsetHeight?0:(0,s.getScrollbarWidth)(this.domBindings.rootDocument),new i.ViewportRowsCalculator({calculationTypes:e.map((e=>[e,this.rowsCalculatorTypes.get(e)()])),viewportHeight:l,scrollOffset:a,totalRows:t.getSetting("totalRows"),rowHeightFn:e=>o.getRowHeight(e),overrideFn:t.getSettingPure("viewportRowCalculatorOverride"),horizontalScrollbarHeight:n})}createColumnsCalculator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["rendered","fullyVisible","partiallyVisible"];const{wtSettings:t,wtTable:o}=this;let n=this.getViewportWidth(),r=Math.abs(this.dataAccessObject.inlineStartScrollPosition)-this.dataAccessObject.inlineStartParentOffset;this.columnHeaderHeight=NaN;const l=t.getSetting("fixedColumnsStart");if(l&&r>=0){const e=this.dataAccessObject.inlineStartOverlay.sumCellSizes(0,l);r+=e,n-=e}return o.holder.clientWidth!==o.holder.offsetWidth&&(n-=(0,s.getScrollbarWidth)(this.domBindings.rootDocument)),new i.ViewportColumnsCalculator({calculationTypes:e.map((e=>[e,this.columnsCalculatorTypes.get(e)()])),viewportWidth:n,scrollOffset:r,totalColumns:t.getSetting("totalColumns"),columnWidthFn:e=>o.getColumnWidth(e),overrideFn:t.getSettingPure("viewportColumnCalculatorOverride"),inlineStartOffset:this.dataAccessObject.inlineStartParentOffset})}createCalculators(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{wtSettings:t}=this,o=this.createRowsCalculator(),s=this.createColumnsCalculator();if(e&&!t.getSetting("renderAllRows")){const t=o.getResultsFor("fullyVisible");e=this.areAllProposedVisibleRowsAlreadyRendered(t)}if(e&&!t.getSetting("renderAllColumns")){const t=s.getResultsFor("fullyVisible");e=this.areAllProposedVisibleColumnsAlreadyRendered(t)}return e||(this.rowsRenderCalculator=o.getResultsFor("rendered"),this.columnsRenderCalculator=s.getResultsFor("rendered")),this.rowsVisibleCalculator=o.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=s.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=o.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=s.getResultsFor("partiallyVisible"),e}createVisibleCalculators(){const e=this.createRowsCalculator(["fullyVisible","partiallyVisible"]),t=this.createColumnsCalculator(["fullyVisible","partiallyVisible"]);this.rowsVisibleCalculator=e.getResultsFor("fullyVisible"),this.columnsVisibleCalculator=t.getResultsFor("fullyVisible"),this.rowsPartiallyVisibleCalculator=e.getResultsFor("partiallyVisible"),this.columnsPartiallyVisibleCalculator=t.getResultsFor("partiallyVisible")}areAllProposedVisibleRowsAlreadyRendered(e){if(!this.rowsVisibleCalculator)return!1;let{startRow:t,endRow:o}=e;if(null===t&&null===o){if(!e.isVisibleInTrimmingContainer)return!0;t=this.rowsPartiallyVisibleCalculator.startRow,o=this.rowsPartiallyVisibleCalculator.endRow}const{startRow:s,endRow:n}=this.rowsRenderCalculator;return!(t<s||t===s&&t>0)&&!(o>n||o===n&&o<this.wtSettings.getSetting("totalRows")-1)}areAllProposedVisibleColumnsAlreadyRendered(e){if(!this.columnsVisibleCalculator)return!1;let{startColumn:t,endColumn:o}=e;if(null===t&&null===o){if(!e.isVisibleInTrimmingContainer)return!0;t=this.columnsPartiallyVisibleCalculator.startColumn,o=this.columnsPartiallyVisibleCalculator.endColumn}const{startColumn:s,endColumn:n}=this.columnsRenderCalculator;return!(t<s||t===s&&t>0)&&!(o>n||o===n&&o<this.wtSettings.getSetting("totalColumns")-1)}resetHasOversizedColumnHeadersMarked(){(0,n.objectEach)(this.hasOversizedColumnHeadersMarked,((e,t,o)=>{o[t]=void 0}))}}},38715:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(6254),o(20512),o(23844),o(38594);var n=s(o(87789)),i=o(11015),r=o(71757),l=s(o(56937)),a=o(74174),h=o(34299),c=o(49676),u=o(52618),d=o(90);function g(e,t){const o=new n.default(e,t||{},i.rootInstanceSymbol);return o.init(),o}t.CellCoords=d.CellCoords,t.CellRange=d.CellRange,(0,h.registerCellType)(c.TextCellType),g.editors={BaseEditor:u.BaseEditor},g.Core=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new n.default(e,t,i.rootInstanceSymbol)},g.DefaultSettings=(0,r.metaSchemaFactory)(),g.hooks=l.default.getSingleton(),g.CellCoords=d.CellCoords,g.CellRange=d.CellRange,g.packageName="handsontable",g.buildDate="15/10/2024 15:43:38",g.version="14.6.1",g.languages={dictionaryKeys:a.dictionaryKeys,getLanguageDictionary:a.getLanguageDictionary,getLanguagesDictionaries:a.getLanguagesDictionaries,registerLanguageDictionary:a.registerLanguageDictionary,getTranslatedPhrase:a.getTranslatedPhrase};t.default=g},16531:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(80115),n=o(80827),i=o(93307);const r=t.CELL_TYPE="autocomplete";t.AutocompleteCellType={CELL_TYPE:r,editor:s.AutocompleteEditor,renderer:n.autocompleteRenderer,validator:i.autocompleteValidator}},95211:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(16531);t.AutocompleteCellType=s.AutocompleteCellType,t.CELL_TYPE=s.CELL_TYPE},29529:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(39626),n=o(80730);const i=t.CELL_TYPE="checkbox";t.CheckboxCellType={CELL_TYPE:i,editor:s.CheckboxEditor,renderer:n.checkboxRenderer}},55286:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(29529);t.CELL_TYPE=s.CELL_TYPE,t.CheckboxCellType=s.CheckboxCellType},40395:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(59127),n=o(48075),i=o(70323);const r=t.CELL_TYPE="date";t.DateCellType={CELL_TYPE:r,editor:s.DateEditor,renderer:n.dateRenderer,validator:i.dateValidator}},15347:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(40395);t.CELL_TYPE=s.CELL_TYPE,t.DateCellType=s.DateCellType},85769:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(50486),n=o(82070),i=o(7628);const r=t.CELL_TYPE="dropdown";t.DropdownCellType={CELL_TYPE:r,editor:s.DropdownEditor,renderer:n.dropdownRenderer,validator:i.dropdownValidator}},98614:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(85769);t.CELL_TYPE=s.CELL_TYPE,t.DropdownCellType=s.DropdownCellType},63297:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(56138),n=o(8218);const i=t.CELL_TYPE="handsontable";t.HandsontableCellType={CELL_TYPE:i,editor:s.HandsontableEditor,renderer:n.handsontableRenderer}},37334:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(63297);t.CELL_TYPE=s.CELL_TYPE,t.HandsontableCellType=s.HandsontableCellType},10426:(e,t,o)=>{"use strict";t.__esModule=!0,t.registerAllCellTypes=function(){(0,g.registerCellType)(s.AutocompleteCellType),(0,g.registerCellType)(n.CheckboxCellType),(0,g.registerCellType)(i.DateCellType),(0,g.registerCellType)(r.DropdownCellType),(0,g.registerCellType)(l.HandsontableCellType),(0,g.registerCellType)(a.NumericCellType),(0,g.registerCellType)(h.PasswordCellType),(0,g.registerCellType)(c.SelectCellType),(0,g.registerCellType)(u.TextCellType),(0,g.registerCellType)(d.TimeCellType)};var s=o(95211);t.AutocompleteCellType=s.AutocompleteCellType,t.AUTOCOMPLETE_TYPE=s.CELL_TYPE;var n=o(55286);t.CheckboxCellType=n.CheckboxCellType,t.CHECKBOX_TYPE=n.CELL_TYPE;var i=o(15347);t.DateCellType=i.DateCellType,t.DATE_TYPE=i.CELL_TYPE;var r=o(98614);t.DropdownCellType=r.DropdownCellType,t.DROPDOWN_TYPE=r.CELL_TYPE;var l=o(37334);t.HandsontableCellType=l.HandsontableCellType,t.HANDSONTABLE_TYPE=l.CELL_TYPE;var a=o(85506);t.NumericCellType=a.NumericCellType,t.NUMERIC_TYPE=a.CELL_TYPE;var h=o(1774);t.PasswordCellType=h.PasswordCellType,t.PASSWORD_TYPE=h.CELL_TYPE;var c=o(85183);t.SelectCellType=c.SelectCellType,t.SELECT_TYPE=c.CELL_TYPE;var u=o(49676);t.TextCellType=u.TextCellType,t.TEXT_TYPE=u.CELL_TYPE;var d=o(37574);t.TimeCellType=d.TimeCellType,t.TIME_TYPE=d.CELL_TYPE;var g=o(34299);t.registerCellType=g.registerCellType,t.getCellType=g.getCellType,t.getRegisteredCellTypeNames=g.getRegisteredCellTypeNames,t.getRegisteredCellTypes=g.getRegisteredCellTypes,t.hasCellType=g.hasCellType},85506:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(78625);t.CELL_TYPE=s.CELL_TYPE,t.NumericCellType=s.NumericCellType},78625:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(33972),n=o(89760),i=o(66640);const r=t.CELL_TYPE="numeric";t.NumericCellType={CELL_TYPE:r,editor:s.NumericEditor,renderer:n.numericRenderer,validator:i.numericValidator,dataType:"number"}},1774:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(2401);t.CELL_TYPE=s.CELL_TYPE,t.PasswordCellType=s.PasswordCellType},2401:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(46138),n=o(15074);const i=t.CELL_TYPE="password";t.PasswordCellType={CELL_TYPE:i,editor:s.PasswordEditor,renderer:n.passwordRenderer,copyable:!1}},34299:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.getCellType=function(e){if(!c(e))throw Error(`You declared cell type "${e}" as a string that is not mapped to a known object.\n                 Cell type must be an object or a string mapped to an object registered by\n                 "Handsontable.cellTypes.registerCellType" method`);return h(e)},t.registerCellType=function(e,t){"string"!=typeof e&&(e=(t=e).CELL_TYPE);const{editor:o,renderer:s,validator:n}=t;o&&(0,i.registerEditor)(e,o);s&&(0,r.registerRenderer)(e,s);n&&(0,l.registerValidator)(e,n);a(e,t)},o(67834);var n=s(o(71263)),i=o(84558),r=o(44288),l=o(51255);const{register:a,getItem:h,hasItem:c,getNames:u,getValues:d}=(0,n.default)("cellTypes");t.getRegisteredCellTypes=d,t.getRegisteredCellTypeNames=u,t.hasCellType=c},85183:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9771);t.CELL_TYPE=s.CELL_TYPE,t.SelectCellType=s.SelectCellType},9771:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(7507),n=o(31151);const i=t.CELL_TYPE="select";t.SelectCellType={CELL_TYPE:i,editor:s.SelectEditor,renderer:n.selectRenderer}},49676:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(18645);t.CELL_TYPE=s.CELL_TYPE,t.TextCellType=s.TextCellType},18645:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952),n=o(36748);const i=t.CELL_TYPE="text";t.TextCellType={CELL_TYPE:i,editor:s.TextEditor,renderer:n.textRenderer}},37574:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(4385);t.CELL_TYPE=s.CELL_TYPE,t.TimeCellType=s.TimeCellType},4385:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(14902),n=o(19698),i=o(51284);const r=t.CELL_TYPE="time";t.TimeCellType={CELL_TYPE:r,editor:s.TimeEditor,renderer:n.timeRenderer,validator:i.timeValidator}},87789:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.default=function(e,t){var o,s=this;let k=arguments.length>2&&void 0!==arguments[2]&&arguments[2],V=this;const F=new h.default(V);let W,B,U,j,Y,z,G=!0;(0,b.hasValidParameter)(k)&&(0,b.registerAsRootInstance)(this);this.rootElement=e,this.rootDocument=e.ownerDocument,this.rootWindow=this.rootDocument.defaultView,this.isDestroyed=!1,this.renderSuspendedCounter=0,this.executionSuspendedCounter=0;const $=null!==(o=null==t?void 0:t.layoutDirection)&&void 0!==o?o:"inherit",K=["rtl","ltr"].includes($)?$:this.rootWindow.getComputedStyle(this.rootElement).direction;this.rootElement.setAttribute("dir",K),this.isRtl=function(){return"rtl"===K},this.isLtr=function(){return!V.isRtl()},this.getDirectionFactor=function(){return V.isLtr()?1:-1},t.language=(0,M.getValidLanguageCode)(t.language);const X=new N.MetaManager(V,t,[N.DynamicCellMetaMod,N.ExtendMetaPropertiesMod]),q=X.getTableMeta(),Q=X.getGlobalMeta(),J=(0,P.createUniqueMap)();this.container=this.rootDocument.createElement("div"),this.renderCall=!1,e.insertBefore(this.container,e.firstChild),(0,b.isRootInstance)(this)&&(0,r._injectProductInfo)(t.licenseKey,e);this.guid=`ht_${(0,C.randomString)()}`,L.set(this.guid,this),this.columnIndexMapper=new R.IndexMapper,this.rowIndexMapper=new R.IndexMapper,this.columnIndexMapper.addLocalHook("indexesSequenceChange",(e=>{V.runHooks("afterColumnSequenceChange",e)})),this.rowIndexMapper.addLocalHook("indexesSequenceChange",(e=>{V.runHooks("afterRowSequenceChange",e)})),B=new E.default(V),this.rootElement.id&&"ht_"!==this.rootElement.id.substring(0,3)||(this.rootElement.id=this.guid);let Z=new I.Selection(q,{rowIndexMapper:V.rowIndexMapper,columnIndexMapper:V.columnIndexMapper,countCols:()=>V.countCols(),countRows:()=>V.countRows(),propToCol:e=>W.propToCol(e),isEditorOpened:()=>!!V.getActiveEditor()&&V.getActiveEditor().isOpened(),countRenderableColumns:()=>this.view.countRenderableColumns(),countRenderableRows:()=>this.view.countRenderableRows(),countRowHeaders:()=>this.countRowHeaders(),countColHeaders:()=>this.countColHeaders(),countRenderableRowsInRange:function(){return s.view.countRenderableRowsInRange(...arguments)},countRenderableColumnsInRange:function(){return s.view.countRenderableColumnsInRange(...arguments)},getShortcutManager:()=>V.getShortcutManager(),createCellCoords:(e,t)=>V._createCellCoords(e,t),createCellRange:(e,t,o)=>V._createCellRange(e,t,o),visualToRenderableCoords:e=>{const{row:t,col:o}=e;return V._createCellCoords(t>=0?V.rowIndexMapper.getRenderableFromVisualIndex(t):t,o>=0?V.columnIndexMapper.getRenderableFromVisualIndex(o):o)},renderableToVisualCoords:e=>{const{row:t,col:o}=e;return V._createCellCoords(t>=0?V.rowIndexMapper.getVisualFromRenderableIndex(t):t,o>=0?V.columnIndexMapper.getVisualFromRenderableIndex(o):o)},findFirstNonHiddenRenderableRow:(e,t)=>{const o=t>e?1:-1,s=Math.min(e,t),n=Math.max(e,t),i=V.rowIndexMapper.getNearestNotHiddenIndex(e,o);return null===i||1===o&&i>n||-1===o&&i<s?null:i>=0?V.rowIndexMapper.getRenderableFromVisualIndex(i):i},findFirstNonHiddenRenderableColumn:(e,t)=>{const o=t>e?1:-1,s=Math.min(e,t),n=Math.max(e,t),i=V.columnIndexMapper.getNearestNotHiddenIndex(e,o);return null===i||1===o&&i>n||-1===o&&i<s?null:i>=0?V.columnIndexMapper.getRenderableFromVisualIndex(i):i},isDisabledCellSelection:(e,t)=>e<0||t<0?V.getSettings().disableVisualSelection:V.getCellMeta(e,t).disableVisualSelection});this.selection=Z;const ee=e=>{let{hiddenIndexesChanged:t}=e;t&&this.selection.commit()};function te(e){const t=(0,O.normalizeLanguageCode)(e);(0,M.hasLanguageDictionary)(t)?(V.runHooks("beforeLanguageChange",t),Q.language=t,V.runHooks("afterLanguageChange",t)):(0,O.warnUserAboutLanguageRegistration)(e)}function oe(e,t){const o="className"===e?V.rootElement:V.table;if(G)(0,n.addClass)(o,t);else{let s=[],i=[];Q[e]&&(s=Array.isArray(Q[e])?Q[e]:(0,d.stringToArray)(Q[e])),t&&(i=Array.isArray(t)?t:(0,d.stringToArray)(t));const r=(0,d.getDifferenceOfArrays)(s,i),l=(0,d.getDifferenceOfArrays)(i,s);r.length&&(0,n.removeClass)(o,r),l.length&&(0,n.addClass)(o,l)}Q[e]=t}function se(){let e=!1;return{validatorsInQueue:0,valid:!0,addValidatorToQueue(){this.validatorsInQueue+=1,e=!1},removeValidatorFormQueue(){this.validatorsInQueue=this.validatorsInQueue-1<0?0:this.validatorsInQueue-1,this.checkIfQueueIsEmpty()},onQueueEmpty(){},checkIfQueueIsEmpty(){0===this.validatorsInQueue&&!1===e&&(e=!0,this.onQueueEmpty(this.valid))}}}function ne(e){const t=e.replace(",",".");return!1===isNaN(parseFloat(t))?parseFloat(t):e}function ie(e,t,o){if(!e.length)return void o();const s=V.getActiveEditor(),n=new se;let i=!0;n.onQueueEmpty=()=>{s&&i&&s.cancelChanges(),o()};for(let o=e.length-1;o>=0;o--){const[s,r,,l]=e[o],a=W.propToCol(r);let h;h=Number.isInteger(a)?V.getCellMeta(s,a):{...Object.getPrototypeOf(q),...q},"numeric"===h.type&&"string"==typeof l&&(0,v.isNumericLike)(l)&&(e[o][3]=ne(l)),V.getCellValidator(h)&&(n.addValidatorToQueue(),V.validateCell(e[o][3],h,function(t,o){return function(s){if("boolean"!=typeof s)throw new Error("Validation error: result is not boolean");!1===s&&!1===o.allowInvalid&&(i=!1,e.splice(t,1),o.valid=!0),n.removeValidatorFormQueue()}}(o,h),t))}n.checkIfQueueIsEmpty()}function re(e,t){for(let o=e.length-1;o>=0;o--){let s=!1;if(null!==e[o]){if(null!==e[o][2]&&void 0!==e[o][2]||null!==e[o][3]&&void 0!==e[o][3]){if(q.allowInsertRow)for(;e[o][0]>V.countRows()-1;){const{delta:e}=W.createRow(void 0,void 0,{source:t});if(0===e){s=!0;break}}if("array"===V.dataType&&(!q.columns||0===q.columns.length)&&q.allowInsertColumn)for(;W.propToCol(e[o][1])>V.countCols()-1;){const{delta:e}=W.createCol(void 0,void 0,{source:t});if(0===e){s=!0;break}}s||W.set(e[o][0],e[o][1],e[o][3])}}else e.splice(o,1)}const o=e.length>0;if(V.forceFullRender=!0,o){U.adjustRowsAndCols(),V.runHooks("beforeChangeRender",e,t),j.closeEditor(),V.view.render(),j.prepareEditor(),V.view.adjustElementsSize(),V.runHooks("afterChange",e,t||"edit");const o=V.getActiveEditor();o&&(0,r.isDefined)(o.refreshValue)&&o.refreshValue()}else V.view.render()}function le(e,t,o){return Array.isArray(e)?e:[[e,t,o]]}function ae(e,t){const o=V.getActiveEditor(),s=V.runHooks("beforeChange",e,t||"edit"),n=e.filter((e=>null!==e));return!1===s||0===n.length?(o&&o.cancelChanges(),[]):n}this.columnIndexMapper.addLocalHook("cacheUpdated",ee),this.rowIndexMapper.addLocalHook("cacheUpdated",ee),this.selection.addLocalHook("afterSetRangeEnd",((e,t)=>{const o=(0,c.createObjectPropListener)(!1),s=this.selection.getSelectedRange(),{from:i,to:r}=s.current(),l=s.size()-1;this.runHooks("afterSelection",i.row,i.col,r.row,r.col,o,l),this.runHooks("afterSelectionByProp",i.row,V.colToProp(i.col),r.row,V.colToProp(r.col),o,l),t&&(!o.isTouched()||o.isTouched()&&!o.value)&&z.scrollTo(e);const a=Z.isSelectedByRowHeader(),h=Z.isSelectedByColumnHeader();a&&h?(0,n.addClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]):a?((0,n.removeClass)(this.rootElement,"ht__selection--columns"),(0,n.addClass)(this.rootElement,"ht__selection--rows")):h?((0,n.removeClass)(this.rootElement,"ht__selection--rows"),(0,n.addClass)(this.rootElement,"ht__selection--columns")):(0,n.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),"shift"!==Z.getSelectionSource()&&j.closeEditor(null),V.view.render(),j.prepareEditor()})),this.selection.addLocalHook("beforeSetFocus",(e=>{this.runHooks("beforeSelectionFocusSet",e.row,e.col)})),this.selection.addLocalHook("afterSetFocus",(e=>{const t=(0,c.createObjectPropListener)(!1);this.runHooks("afterSelectionFocusSet",e.row,e.col,t),(!t.isTouched()||t.isTouched()&&!t.value)&&z.scrollTo(e),j.closeEditor(),V.view.render(),j.prepareEditor()})),this.selection.addLocalHook("afterSelectionFinished",(e=>{const t=e.length-1,{from:o,to:s}=e[t];this.runHooks("afterSelectionEnd",o.row,o.col,s.row,s.col,t),this.runHooks("afterSelectionEndByProp",o.row,V.colToProp(o.col),s.row,V.colToProp(s.col),t)})),this.selection.addLocalHook("afterIsMultipleSelection",(e=>{const t=this.runHooks("afterIsMultipleSelection",e.value);e.value&&(e.value=t)})),this.selection.addLocalHook("afterDeselect",(()=>{j.closeEditor(),V.view.render(),(0,n.removeClass)(this.rootElement,["ht__selection--rows","ht__selection--columns"]),this.runHooks("afterDeselect")})),this.selection.addLocalHook("beforeHighlightSet",(()=>this.runHooks("beforeSelectionHighlightSet"))).addLocalHook("beforeSetRangeStart",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSetRangeStart",...t)})).addLocalHook("beforeSetRangeStartOnly",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSetRangeStartOnly",...t)})).addLocalHook("beforeSetRangeEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSetRangeEnd",...t)})).addLocalHook("beforeSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSelectColumns",...t)})).addLocalHook("afterSelectColumns",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterSelectColumns",...t)})).addLocalHook("beforeSelectRows",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeSelectRows",...t)})).addLocalHook("afterSelectRows",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterSelectRows",...t)})).addLocalHook("beforeModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("modifyTransformStart",...t)})).addLocalHook("afterModifyTransformStart",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterModifyTransformStart",...t)})).addLocalHook("beforeModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("modifyTransformFocus",...t)})).addLocalHook("afterModifyTransformFocus",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterModifyTransformFocus",...t)})).addLocalHook("beforeModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("modifyTransformEnd",...t)})).addLocalHook("afterModifyTransformEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("afterModifyTransformEnd",...t)})).addLocalHook("beforeRowWrap",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeRowWrap",...t)})).addLocalHook("beforeColumnWrap",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return s.runHooks("beforeColumnWrap",...t)})).addLocalHook("insertRowRequire",(e=>this.alter("insert_row_above",e,1,"auto"))).addLocalHook("insertColRequire",(e=>this.alter("insert_col_start",e,1,"auto"))),U={alter(e,t){var o,s;let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0;const a=e=>{if(0===e.length)return[];const t=[...e];t.sort(((e,t)=>{let[o]=e,[s]=t;return o===s?0:o>s?1:-1}));return(0,d.arrayReduce)(t,((e,t)=>{let[o,s]=t;const n=e[e.length-1],[i,r]=n,l=i+r;if(o<=l){const e=Math.max(s-(l-o),0);n[1]+=e}else e.push([o,s]);return e}),[t[0]])};switch(e){case"insert_row_below":case"insert_row_above":const l=V.countSourceRows();if(q.maxRows===l)return;const h="insert_row_below"===e?"below":"above";t=null!==(o=t)&&void 0!==o?o:"below"===h?l:0;const{delta:c,startPhysicalIndex:u}=W.createRow(t,n,{source:i,mode:h});Z.shiftRows(V.toVisualRow(u),c);break;case"insert_col_start":case"insert_col_end":const g="insert_col_end"===e?"end":"start";t=null!==(s=t)&&void 0!==s?s:"end"===g?V.countSourceCols():0;const{delta:f,startPhysicalIndex:p}=W.createCol(t,n,{source:i,mode:g});if(f){if(Array.isArray(q.colHeaders)){const e=[V.toVisualColumn(p),0];e.length+=f,Array.prototype.splice.apply(q.colHeaders,e)}Z.shiftColumns(V.toVisualColumn(p),f)}break;case"remove_row":const m=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[o,s]=e;const n=(0,r.isEmpty)(o)?V.countRows()-1:Math.max(o-t,0);Number.isInteger(o)&&(o=Math.max(o-t,0));if(!W.removeRow(o,s,i))return;if(Z.isSelected()){const{row:e}=V.getSelectedRangeLast().highlight;e>=o&&e<=o+s-1&&j.closeEditor(!0)}const l=V.countRows();0===l?Z.deselect():"ContextMenu.removeRow"===i?Z.refresh():Z.shiftRows(o,-s);const a=q.fixedRowsTop;a>=n+1&&(q.fixedRowsTop-=Math.min(s,a-n));const h=q.fixedRowsBottom;h&&n>=l-h&&(q.fixedRowsBottom-=Math.min(s,h)),t+=s}))};Array.isArray(t)?m(a(t)):m([[t,n]]);break;case"remove_col":const w=e=>{let t=0;(0,d.arrayEach)(e,(e=>{let[o,s]=e;const n=(0,r.isEmpty)(o)?V.countCols()-1:Math.max(o-t,0);let l=V.toPhysicalColumn(n);Number.isInteger(o)&&(o=Math.max(o-t,0));if(!W.removeCol(o,s,i))return;if(Z.isSelected()){const{col:e}=V.getSelectedRangeLast().highlight;e>=o&&e<=o+s-1&&j.closeEditor(!0)}0===V.countCols()?Z.deselect():"ContextMenu.removeColumn"===i?Z.refresh():Z.shiftColumns(o,-s);const a=q.fixedColumnsStart;a>=n+1&&(q.fixedColumnsStart-=Math.min(s,a-n)),Array.isArray(q.colHeaders)&&(void 0===l&&(l=-1),q.colHeaders.splice(l,s)),t+=s}))};Array.isArray(t)?w(a(t)):w([[t,n]]);break;default:throw new Error(`There is no such action "${e}"`)}V.view.render(),l||U.adjustRowsAndCols()},adjustRowsAndCols(){const e=q.minRows,t=q.minSpareRows,o=q.minCols,s=q.minSpareCols;if(e){const t=V.countRows();t<e&&W.createRow(t,e-t,{source:"auto"})}if(t){const e=V.countEmptyRows(!0);if(e<t){const o=t-e,s=Math.min(o,q.maxRows-V.countSourceRows());W.createRow(V.countRows(),s,{source:"auto"})}}{let e;(o||s)&&(e=V.countEmptyCols(!0));let t=V.countCols();if(o&&!q.columns&&t<o){const s=o-t;e+=s,W.createCol(t,s,{source:"auto"})}if(s&&!q.columns&&"array"===V.dataType&&e<s){t=V.countCols();const o=s-e,n=Math.min(o,q.maxCols-t);W.createCol(t,n,{source:"auto"})}}V.view&&V.view.adjustElementsSize()},populateFromArray(e,t,o,s,n){let i,r,l,a;const h=[],u={},g=[],f=e.row,p=e.col;if(r=t.length,0===r)return!1;let m=0,w=0;switch((0,c.isObject)(o)&&(m=o.col-p+1,w=o.row-f+1),n){case"shift_down":const n=(0,d.pivot)(t),C=n.length,v=Math.max(C,m),y=V.getData().slice(f),E=(0,d.pivot)(y).slice(p,p+v);for(l=0;l<v;l+=1)if(l<C){for(i=0,r=n[l].length;i<w-r;i+=1)n[l].push(n[l][i%r]);l<E.length?g.push(n[l].concat(E[l])):g.push(n[l].concat(new Array(y.length).fill(null)))}else g.push(n[l%C].concat(E[l]));V.populateFromArray(f,p,(0,d.pivot)(g));break;case"shift_right":const S=t.length,R=Math.max(S,w),b=V.getData().slice(f).map((e=>e.slice(p)));for(i=0;i<R;i+=1)if(i<S){for(l=0,a=t[i].length;l<m-a;l+=1)t[i].push(t[i][l%a]);if(i<b.length)for(let e=0;e<b[i].length;e+=1)t[i].push(b[i][e]);else t[i].push(...new Array(b[0].length).fill(null))}else t.push(t[i%r].slice(0,R).concat(b[i]));V.populateFromArray(f,p,t);break;default:u.row=e.row,u.col=e.col;let _,T=0,M=0,O=!0;const I=function(e){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const s=t[e%t.length];return null!==o?s[o%s.length]:s},N=t.length,A=o?o.row-e.row+1:0;for(r=o?A:Math.max(N,A),i=0;i<r&&!(o&&u.row>o.row&&A>N||!q.allowInsertRow&&u.row>V.countRows()-1||u.row>=q.maxRows);i++){const t=i-T,n=I(t).length,d=o?o.col-e.col+1:0;if(a=o?d:Math.max(n,d),u.col=e.col,_=V.getCellMeta(u.row,u.col),"CopyPaste.paste"!==s&&"Autofill.fill"!==s||!_.skipRowOnPaste){for(M=0,l=0;l<a&&!(o&&u.col>o.col&&d>n||!q.allowInsertColumn&&u.col>V.countCols()-1||u.col>=q.maxCols);l++){if(_=V.getCellMeta(u.row,u.col),("CopyPaste.paste"===s||"Autofill.fill"===s)&&_.skipColumnOnPaste){M+=1,u.col+=1,a+=1;continue}if(_.readOnly&&"UndoRedo.undo"!==s){u.col+=1;continue}let e=I(t,l-M),o=V.getDataAtCell(u.row,u.col);if(null!==e&&"object"==typeof e)if(Array.isArray(e)&&null===o&&(o=[]),null===o||"object"!=typeof o)O=!1;else{const t=(0,c.duckSchema)(Array.isArray(o)?o:o[0]||o),s=(0,c.duckSchema)(Array.isArray(e)?e:e[0]||e);(0,c.isObjectEqual)(t,s)||Array.isArray(t)&&Array.isArray(s)?e=(0,c.deepClone)(e):O=!1}else null!==o&&"object"==typeof o&&(O=!1);O&&h.push([u.row,u.col,e]),O=!0,u.col+=1}u.row+=1}else T+=1,u.row+=1,r+=1}V.setDataAtCell(h,null,null,s||"populateFromArray")}}},this.init=function(){B.setData(q.data),V.runHooks("beforeInit"),((0,l.isMobileBrowser)()||(0,l.isIpadOS)())&&(0,n.addClass)(V.rootElement,"mobile"),this.updateSettings(q,!0),this.view=new y.default(this),j=a.default.getInstance(V,q,Z),z=(0,A.createViewportScroller)(V),Y=new u.FocusManager(V),(0,b.isRootInstance)(this)&&(0,A.installFocusCatcher)(V),V.runHooks("init"),this.forceFullRender=!0,this.view.render(),G&&null===V.rootElement.offsetParent&&(0,n.observeVisibilityChangeOnce)(V.rootElement,(()=>{V.view._wt.wtOverlays.updateLastSpreaderSize(),V.render(),V.view.adjustElementsSize()})),"object"==typeof G&&(V.runHooks("afterChange",G[0],G[1]),G=!1),V.runHooks("afterInit")},this._createCellCoords=function(e,t){return V.view._wt.createCellCoords(e,t)},this._createCellRange=function(e,t,o){return V.view._wt.createCellRange(e,t,o)},this.validateCell=function(e,t,o,s){let n=V.getCellValidator(t);function l(e){if(!(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])||!0===t.hidden)return void o(e);const s=t.visualCol,n=t.visualRow,i=V.getCell(n,s,!0);if(i&&"TH"!==i.nodeName){const e=V.rowIndexMapper.getRenderableFromVisualIndex(n),t=V.columnIndexMapper.getRenderableFromVisualIndex(s);V.view._wt.getSetting("cellRenderer",e,t,i)}o(e)}var a;(0,r.isRegExp)(n)&&(a=n,n=function(e,t){t(a.test(e))}),(0,i.isFunction)(n)?(e=V.runHooks("beforeValidate",e,t.visualRow,t.prop,s),V._registerImmediate((()=>{n.call(t,e,(o=>{V&&(o=V.runHooks("afterValidate",o,e,t.visualRow,t.prop,s),t.valid=o,l(o),V.runHooks("postAfterValidate",o,e,t.visualRow,t.prop,s))}))}))):V._registerImmediate((()=>{t.valid=!0,l(t.valid,!1)}))},this.setDataAtCell=function(e,t,o,s){const n=le(e,t,o),i=[];let r,l,a,h=s;for(r=0,l=n.length;r<l;r++){if("object"!=typeof n[r])throw new Error("Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter");if("number"!=typeof n[r][1])throw new Error("Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`");a=n[r][1]>=this.countCols()?n[r][1]:W.colToProp(n[r][1]),i.push([n[r][0],a,B.getAtCell(this.toPhysicalRow(n[r][0]),n[r][1]),n[r][2]])}h||"object"!=typeof e||(h=t);const c=ae(i,s);V.runHooks("afterSetDataAtCell",c,h),ie(c,h,(()=>{re(c,h)}))},this.setDataAtRowProp=function(e,t,o,s){const n=le(e,t,o),i=[];let r,l,a=s;for(r=0,l=n.length;r<l;r++)i.push([n[r][0],n[r][1],B.getAtCell(this.toPhysicalRow(n[r][0]),n[r][1]),n[r][2]]);a||"object"!=typeof e||(a=t);const h=ae(i,s);V.runHooks("afterSetDataAtRowProp",h,a),ie(h,a,(()=>{re(h,a)}))},this.listen=function(){V&&!V.isListening()&&(L.forEach((e=>{V!==e&&e.unlisten()})),D=V.guid,V.runHooks("afterListen"))},this.unlisten=function(){this.isListening()&&(D=null,V.runHooks("afterUnlisten"))},this.isListening=function(){return D===V.guid},this.destroyEditor=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];j.closeEditor(e),V.view.render(),t&&Z.isSelected()&&j.prepareEditor()},this.populateFromArray=function(e,t,o,s,n,i,r){if("object"!=typeof o||"object"!=typeof o[0])throw new Error("populateFromArray parameter `input` must be an array of arrays");const l="number"==typeof s?V._createCellCoords(s,n):null;return U.populateFromArray(V._createCellCoords(e,t),o,l,i,r)},this.spliceCol=function(e,t,o){for(var s=arguments.length,n=new Array(s>3?s-3:0),i=3;i<s;i++)n[i-3]=arguments[i];return W.spliceCol(e,t,o,...n)},this.spliceRow=function(e,t,o){for(var s=arguments.length,n=new Array(s>3?s-3:0),i=3;i<s;i++)n[i-3]=arguments[i];return W.spliceRow(e,t,o,...n)},this.getSelected=function(){if(Z.isSelected())return(0,d.arrayMap)(Z.getSelectedRange(),(e=>{let{from:t,to:o}=e;return[t.row,t.col,o.row,o.col]}))},this.getSelectedLast=function(){const e=this.getSelected();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.getSelectedRange=function(){if(Z.isSelected())return Array.from(Z.getSelectedRange())},this.getSelectedRangeLast=function(){const e=this.getSelectedRange();let t;return e&&e.length>0&&(t=e[e.length-1]),t},this.emptySelectedCells=function(e){if(!Z.isSelected()||0===this.countRows()||0===this.countCols())return;const t=[];(0,d.arrayEach)(Z.getSelectedRange(),(e=>{if(e.isSingleHeader())return;const o=e.getTopStartCorner(),s=e.getBottomEndCorner();(0,v.rangeEach)(o.row,s.row,(e=>{(0,v.rangeEach)(o.col,s.col,(o=>{this.getCellMeta(e,o).readOnly||t.push([e,o,null])}))}))})),t.length>0&&this.setDataAtCell(t,e)},this.isRenderSuspended=function(){return this.renderSuspendedCounter>0},this.suspendRender=function(){this.renderSuspendedCounter+=1},this.resumeRender=function(){const e=this.renderSuspendedCounter-1;this.renderSuspendedCounter=Math.max(e,0),this.isRenderSuspended()||e!==this.renderSuspendedCounter||(this.renderCall?this.render():V.view.render())},this.render=function(){this.view&&(this.renderCall=!0,this.forceFullRender=!0,this.isRenderSuspended()||V.view.render())},this.batchRender=function(e){this.suspendRender();const t=e();return this.resumeRender(),t},this.isExecutionSuspended=function(){return this.executionSuspendedCounter>0},this.suspendExecution=function(){this.executionSuspendedCounter+=1,this.columnIndexMapper.suspendOperations(),this.rowIndexMapper.suspendOperations()},this.resumeExecution=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.executionSuspendedCounter-1;this.executionSuspendedCounter=Math.max(t,0),(!this.isExecutionSuspended()&&t===this.executionSuspendedCounter||e)&&(this.columnIndexMapper.resumeOperations(),this.rowIndexMapper.resumeOperations())},this.batchExecution=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.suspendExecution();const o=e();return this.resumeExecution(t),o},this.batch=function(e){this.suspendRender(),this.suspendExecution();const t=e();return this.resumeExecution(),this.resumeRender(),t},this.refreshDimensions=function(){if(!V.view)return;const{width:e,height:t}=V.view.getLastSize(),{width:o,height:s}=V.rootElement.getBoundingClientRect(),n=o!==e||s!==t;!1===V.runHooks("beforeRefreshDimensions",{width:e,height:t},{width:o,height:s},n)||((n||V.view._wt.wtOverlays.scrollableElement===V.rootWindow)&&(V.view.setLastSize(o,s),V.render()),V.runHooks("afterRefreshDimensions",{width:e,height:t},{width:o,height:s},n))},this.updateData=function(e,t){(0,N.replaceData)(e,(e=>{W=e}),(e=>{W=e,V.columnIndexMapper.fitToLength(this.getInitialColumnCount()),V.rowIndexMapper.fitToLength(this.countSourceRows()),U.adjustRowsAndCols(),Z.refresh()}),{hotInstance:V,dataMap:W,dataSource:B,internalSource:"updateData",source:t,metaManager:X,firstRun:G})},this.loadData=function(e,t){(0,N.replaceData)(e,(e=>{W=e}),(()=>{X.clearCellsCache(),V.initIndexMappers(),U.adjustRowsAndCols(),Z.refresh(),G&&(G=[null,"loadData"])}),{hotInstance:V,dataMap:W,dataSource:B,internalSource:"loadData",source:t,metaManager:X,firstRun:G})},this.getInitialColumnCount=function(){const e=q.columns;let t=0;if(Array.isArray(e))t=e.length;else if((0,i.isFunction)(e))if("array"===V.dataType){const o=this.countSourceCols();for(let s=0;s<o;s+=1)e(s)&&(t+=1)}else"object"!==V.dataType&&"function"!==V.dataType||(t=W.colToPropCache.length);else if((0,r.isDefined)(q.dataSchema)){const e=W.getSchema();t=Array.isArray(e)?e.length:(0,c.deepObjectSize)(e)}else t=this.countSourceCols();return t},this.initIndexMappers=function(){this.columnIndexMapper.initToLength(this.getInitialColumnCount()),this.rowIndexMapper.initToLength(this.countSourceRows())},this.getData=function(e,t,o,s){return(0,r.isUndefined)(e)?W.getAll():W.getRange(V._createCellCoords(e,t),V._createCellCoords(o,s),W.DESTINATION_RENDERER)},this.getCopyableText=function(e,t,o,s){return W.getCopyableText(V._createCellCoords(e,t),V._createCellCoords(o,s))},this.getCopyableData=function(e,t){return W.getCopyable(e,W.colToProp(t))},this.getSchema=function(){return W.getSchema()},this.updateSettings=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const o=(G?V.loadData:V.updateData).bind(this);let s,n,l=!1;if((0,r.isDefined)(e.rows))throw new Error('The "rows" setting is no longer supported. Do you mean startRows, minRows or maxRows?');if((0,r.isDefined)(e.cols))throw new Error('The "cols" setting is no longer supported. Do you mean startCols, minCols or maxCols?');if((0,r.isDefined)(e.ganttChart))throw new Error('Since 8.0.0 the "ganttChart" setting is no longer supported.');for(s in e)"data"===s||("language"===s?te(e.language):"className"===s?oe("className",e.className):"tableClassName"===s&&V.table?(oe("tableClassName",e.tableClassName),V.view._wt.wtOverlays.syncOverlayTableClassNames()):T.default.getSingleton().isRegistered(s)||T.default.getSingleton().isDeprecated(s)?((0,i.isFunction)(e[s])||Array.isArray(e[s]))&&(e[s].initialHook=!0,V.addHook(s,e[s])):!t&&(0,c.hasOwnProperty)(e,s)&&(Q[s]=e[s]));void 0===e.data&&void 0===q.data?o(null,"updateSettings"):void 0!==e.data?o(e.data,"updateSettings"):void 0!==e.columns&&(W.createMap(),V.initIndexMappers());const a=V.countCols(),h=q.columns;if(h&&(0,i.isFunction)(h)&&(l=!0),void 0===e.cell&&void 0===e.cells&&void 0===e.columns||X.clearCache(),a>0)for(s=0,n=0;s<a;s++){if(h){const e=l?h(s):h[n];e&&X.updateColumnMeta(n,e)}n+=1}(0,r.isDefined)(e.cell)&&(0,c.objectEach)(e.cell,(e=>{V.setCellMetaObject(e.row,e.col,e)})),V.runHooks("afterCellMetaReset");let u=V.rootElement.style.height;""!==u&&(u=parseInt(V.rootElement.style.height,10));let d=e.height;if((0,i.isFunction)(d)&&(d=d()),t){V.rootElement.getAttribute("style")&&V.rootElement.setAttribute("data-initialstyle",V.rootElement.getAttribute("style"))}if(null===d){const e=V.rootElement.getAttribute("data-initialstyle");e&&(e.indexOf("height")>-1||e.indexOf("overflow")>-1)?V.rootElement.setAttribute("style",e):(V.rootElement.style.height="",V.rootElement.style.overflow="")}else void 0!==d&&(V.rootElement.style.height=isNaN(d)?`${d}`:`${d}px`,V.rootElement.style.overflow="hidden");if(void 0!==e.width){let t=e.width;(0,i.isFunction)(t)&&(t=t()),V.rootElement.style.width=isNaN(t)?`${t}`:`${t}px`}t||(V.view&&(V.view._wt.wtViewport.resetHasOversizedColumnHeadersMarked(),V.view._wt.exportSettingsAsClassNames()),V.runHooks("afterUpdateSettings",e)),U.adjustRowsAndCols(),V.view&&!G&&(V.forceFullRender=!0,V.view.render(),V.view._wt.wtOverlays.adjustElementsSize()),t||!V.view||""!==u&&""!==d&&void 0!==d||u===d||V.view._wt.wtOverlays.updateMainScrollableElements()},this.getValue=function(){const e=V.getSelectedLast();if(q.getValue){if((0,i.isFunction)(q.getValue))return q.getValue.call(V);if(e)return V.getData()[e[0][0]][q.getValue]}else if(e)return V.getDataAtCell(e[0],e[1])},this.getSettings=function(){return q},this.clear=function(){this.selectAll(),this.emptySelectedCells()},this.alter=function(e,t,o,s,n){U.alter(e,t,o,s,n)},this.getCell=function(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=t,n=e;if(t>=0){if(this.columnIndexMapper.isHidden(this.toPhysicalColumn(t)))return null;s=this.columnIndexMapper.getRenderableFromVisualIndex(t)}if(e>=0){if(this.rowIndexMapper.isHidden(this.toPhysicalRow(e)))return null;n=this.rowIndexMapper.getRenderableFromVisualIndex(e)}return null===n||null===s||void 0===n||void 0===s?null:V.view.getCellAtCoords(V._createCellCoords(n,s),o)},this.getCoords=function(e){const t=this.view._wt.wtTable.getCoords(e);if(null===t)return null;const{row:o,col:s}=t;let n=o,i=s;return o>=0&&(n=this.rowIndexMapper.getVisualFromRenderableIndex(o)),s>=0&&(i=this.columnIndexMapper.getVisualFromRenderableIndex(s)),V._createCellCoords(n,i)},this.colToProp=function(e){return W.colToProp(e)},this.propToCol=function(e){return W.propToCol(e)},this.toVisualRow=e=>this.rowIndexMapper.getVisualFromPhysicalIndex(e),this.toVisualColumn=e=>this.columnIndexMapper.getVisualFromPhysicalIndex(e),this.toPhysicalRow=e=>this.rowIndexMapper.getPhysicalFromVisualIndex(e),this.toPhysicalColumn=e=>this.columnIndexMapper.getPhysicalFromVisualIndex(e),this.getDataAtCell=function(e,t){return W.get(e,W.colToProp(t))},this.getDataAtRowProp=function(e,t){return W.get(e,t)},this.getDataAtCol=function(e){const t=[],o=W.getRange(V._createCellCoords(0,e),V._createCellCoords(q.data.length-1,e),W.DESTINATION_RENDERER);for(let e=0;e<o.length;e+=1)for(let s=0;s<o[e].length;s+=1)t.push(o[e][s]);return t},this.getDataAtProp=function(e){const t=[],o=W.getRange(V._createCellCoords(0,W.propToCol(e)),V._createCellCoords(q.data.length-1,W.propToCol(e)),W.DESTINATION_RENDERER);for(let e=0;e<o.length;e+=1)for(let s=0;s<o[e].length;s+=1)t.push(o[e][s]);return t},this.getSourceData=function(e,t,o,s){let n;return n=void 0===e?B.getData():B.getByRange(V._createCellCoords(e,t),V._createCellCoords(o,s)),n},this.getSourceDataArray=function(e,t,o,s){let n;return n=void 0===e?B.getData(!0):B.getByRange(V._createCellCoords(e,t),V._createCellCoords(o,s),!0),n},this.getSourceDataAtCol=function(e){return B.getAtColumn(e)},this.setSourceDataAtCell=function(e,t,o,s){const n=le(e,t,o),i=this.hasHook("afterSetSourceDataAtCell"),l=[];i&&(0,d.arrayEach)(n,(e=>{let[t,o,s]=e;l.push([t,o,B.getAtCell(t,o),s])})),(0,d.arrayEach)(n,(e=>{let[t,o,s]=e;B.setAtCell(t,o,s)})),i&&this.runHooks("afterSetSourceDataAtCell",l,s),this.render();const a=V.getActiveEditor();a&&(0,r.isDefined)(a.refreshValue)&&a.refreshValue()},this.getSourceDataAtRow=function(e){return B.getAtRow(e)},this.getSourceDataAtCell=function(e,t){return B.getAtCell(e,t)},this.getDataAtRow=function(e){return W.getRange(V._createCellCoords(e,0),V._createCellCoords(e,this.countCols()-1),W.DESTINATION_RENDERER)[0]||[]},this.getDataType=function(e,t,o,s){const n=void 0===e?[0,0,this.countRows(),this.countCols()]:[e,t,o,s],[i,r]=n;let[,,l,a]=n,h=null,c=null;void 0===l&&(l=i),void 0===a&&(a=r);let u="mixed";return(0,v.rangeEach)(Math.max(Math.min(i,l),0),Math.max(i,l),(e=>{let t=!0;return(0,v.rangeEach)(Math.max(Math.min(r,a),0),Math.max(r,a),(o=>{const s=this.getCellMeta(e,o);return c=s.type,h?t=h===c:h=c,t})),u=t?c:"mixed",t})),u},this.removeCellMeta=function(e,t,o){const[s,n]=[this.toPhysicalRow(e),this.toPhysicalColumn(t)];let i=X.getCellMetaKeyValue(s,n,o);!1!==V.runHooks("beforeRemoveCellMeta",e,t,o,i)&&(X.removeCellMeta(s,n,o),V.runHooks("afterRemoveCellMeta",e,t,o,i)),i=null},this.spliceCellsMeta=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;for(var o=arguments.length,s=new Array(o>2?o-2:0),n=2;n<o;n++)s[n-2]=arguments[n];if(s.length>0&&!Array.isArray(s[0]))throw new Error("The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.");t>0&&X.removeRow(this.toPhysicalRow(e),t),s.length>0&&(0,d.arrayEach)(s.reverse(),(t=>{X.createRow(this.toPhysicalRow(e)),(0,d.arrayEach)(t,((t,o)=>this.setCellMetaObject(e,o,t)))})),V.render()},this.setCellMetaObject=function(e,t,o){"object"==typeof o&&(0,c.objectEach)(o,((o,s)=>{this.setCellMeta(e,t,s,o)}))},this.setCellMeta=function(e,t,o,s){if(!1===V.runHooks("beforeSetCellMeta",e,t,o,s))return;let n=e,i=t;e<this.countRows()&&(n=this.toPhysicalRow(e)),t<this.countCols()&&(i=this.toPhysicalColumn(t)),X.setCellMeta(n,i,o,s),V.runHooks("afterSetCellMeta",e,t,o,s)},this.getCellsMeta=function(){return X.getCellsMeta()},this.getCellMeta=function(e,t){let o=this.toPhysicalRow(e),s=this.toPhysicalColumn(t);return null===o&&(o=e),null===s&&(s=t),X.getCellMeta(o,s,{visualRow:e,visualColumn:t})},this.getColumnMeta=function(e){return X.getColumnMeta(this.toPhysicalColumn(e))},this.getCellMetaAtRow=function(e){return X.getCellsMetaAtRow(e)},this.isColumnModificationAllowed=function(){return!("object"===V.dataType||q.columns)},this.getCellRenderer=function(e,t){const o="number"==typeof e?V.getCellMeta(e,t).renderer:e.renderer;return"string"==typeof o?(0,p.getRenderer)(o):(0,r.isUndefined)(o)?(0,p.getRenderer)("text"):o},this.getCellEditor=function(e,t){const o="number"==typeof e?V.getCellMeta(e,t).editor:e.editor;return"string"==typeof o?(0,m.getEditor)(o):(0,r.isUndefined)(o)?(0,m.getEditor)("text"):o},this.getCellValidator=function(e,t){const o="number"==typeof e?V.getCellMeta(e,t).validator:e.validator;return"string"==typeof o?(0,w.getValidator)(o):o},this.validateCells=function(e){this._validateCells(e)},this.validateRows=function(e,t){if(!Array.isArray(e))throw new Error("validateRows parameter `rows` must be an array");this._validateCells(t,e)},this.validateColumns=function(e,t){if(!Array.isArray(e))throw new Error("validateColumns parameter `columns` must be an array");this._validateCells(t,void 0,e)},this._validateCells=function(e,t,o){const s=new se;e&&(s.onQueueEmpty=e);let n=V.countRows()-1;for(;n>=0;){if(void 0!==t&&-1===t.indexOf(n)){n-=1;continue}let e=V.countCols()-1;for(;e>=0;)void 0===o||-1!==o.indexOf(e)?(s.addValidatorToQueue(),V.validateCell(V.getDataAtCell(n,e),V.getCellMeta(n,e),(e=>{if("boolean"!=typeof e)throw new Error("Validation error: result is not boolean");!1===e&&(s.valid=!1),s.removeValidatorFormQueue()}),"validateCells"),e-=1):e-=1;n-=1}s.checkIfQueueIsEmpty()},this.getRowHeader=function(e){let t=q.rowHeaders,o=e;return void 0!==o&&(o=V.runHooks("modifyRowHeader",o)),void 0===o?(t=[],(0,v.rangeEach)(V.countRows()-1,(e=>{t.push(V.getRowHeader(e))}))):Array.isArray(t)&&void 0!==t[o]?t=t[o]:(0,i.isFunction)(t)?t=t(o):t&&"string"!=typeof t&&"number"!=typeof t&&(t=o+1),t},this.hasRowHeaders=function(){return!!q.rowHeaders},this.hasColHeaders=function(){if(void 0!==q.colHeaders&&null!==q.colHeaders)return!!q.colHeaders;for(let e=0,t=V.countCols();e<t;e++)if(V.getColHeader(e))return!0;return!1},this.getColHeader=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;const o=V.runHooks("modifyColHeader",e);if(void 0===o){const e=[],t=V.countCols();for(let o=0;o<t;o++)e.push(V.getColHeader(o));return e}let s=q.colHeaders;const n=V.toPhysicalColumn(o),r=function(e){const t=[],o=V.countCols();let s=0;for(;s<o;s++)(0,i.isFunction)(q.columns)&&q.columns(s)&&t.push(s);return t[e]}(n);return!1===q.colHeaders?s=null:q.columns&&(0,i.isFunction)(q.columns)&&q.columns(r)&&q.columns(r).title?s=q.columns(r).title:q.columns&&q.columns[n]&&q.columns[n].title?s=q.columns[n].title:Array.isArray(q.colHeaders)&&void 0!==q.colHeaders[n]?s=q.colHeaders[n]:(0,i.isFunction)(q.colHeaders)?s=q.colHeaders(n):q.colHeaders&&"string"!=typeof q.colHeaders&&"number"!=typeof q.colHeaders&&(s=(0,S.spreadsheetColumnLabel)(o)),s=V.runHooks("modifyColumnHeaderValue",s,e,t),s},this._getColWidthFromSettings=function(e){let t;if(e>=0){t=V.getCellMeta(0,e).width}if(void 0!==t&&t!==q.width||(t=q.colWidths),null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getColWidth=function(e){let t=V._getColWidthFromSettings(e);return t=V.runHooks("modifyColWidth",t,e),void 0===t&&(t=_.DEFAULT_COLUMN_WIDTH),t},this._getRowHeightFromSettings=function(e){let t=q.rowHeights;if(null!=t){switch(typeof t){case"object":t=t[e];break;case"function":t=t(e)}"string"==typeof t&&(t=parseInt(t,10))}return t},this.getRowHeight=function(e){let t=V._getRowHeightFromSettings(e);return t=V.runHooks("modifyRowHeight",t,e),t},this.countSourceRows=function(){return B.countRows()},this.countSourceCols=function(){return B.countFirstRowKeys()},this.countRows=function(){return W.getLength()},this.countCols=function(){const e=q.maxCols,t=this.columnIndexMapper.getNotTrimmedIndexesLength();return Math.min(e,t)},this.countRenderedRows=function(){return V.view._wt.drawn?V.view._wt.wtTable.getRenderedRowsCount():-1},this.countVisibleRows=function(){return V.view._wt.drawn?V.view._wt.wtTable.getVisibleRowsCount():-1},this.countRenderedCols=function(){return V.view._wt.drawn?V.view._wt.wtTable.getRenderedColumnsCount():-1},this.countVisibleCols=function(){return V.view._wt.drawn?V.view._wt.wtTable.getVisibleColumnsCount():-1},this.countRowHeaders=function(){return this.view.getRowHeadersCount()},this.countColHeaders=function(){return this.view.getColumnHeadersCount()},this.countEmptyRows=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,v.rangeEachReverse)(V.countRows()-1,(o=>{if(V.isEmptyRow(o))t+=1;else if(!0===e)return!1})),t},this.countEmptyCols=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=0;return(0,v.rangeEachReverse)(V.countCols()-1,(o=>{if(V.isEmptyCol(o))t+=1;else if(!0===e)return!1})),t},this.isEmptyRow=function(e){return q.isEmptyRow.call(V,e)},this.isEmptyCol=function(e){return q.isEmptyCol.call(V,e)},this.selectCell=function(e,t,o,s){let n=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];return!(0,r.isUndefined)(e)&&!(0,r.isUndefined)(t)&&this.selectCells([[e,t,o,s]],n,i)},this.selectCells=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[[]],t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&z.suspend();const o=Z.selectCells(e);return o&&t&&V.listen(),z.resume(),o},this.selectColumns=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=arguments.length>2?arguments[2]:void 0;return Z.selectColumns(e,t,o)},this.selectRows=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=arguments.length>2?arguments[2]:void 0;return Z.selectRows(e,t,o)},this.deselectCell=function(){Z.deselect()},this.selectAll=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,o=arguments.length>2?arguments[2]:void 0;z.skipNextScrollCycle(),Z.selectAll(e,t,o)};const he=(e,t)=>e.getNearestNotHiddenIndex(t,1,!0);this.scrollViewportTo=function(e){var t,o;"number"==typeof e&&(e={row:arguments[0],col:arguments[1],verticalSnap:arguments[2]?"bottom":"top",horizontalSnap:arguments[3]?"end":"start",considerHiddenIndexes:null===(o=arguments[4])||void 0===o||o});const{row:s,col:n,verticalSnap:i,horizontalSnap:r,considerHiddenIndexes:l}=null!==(t=e)&&void 0!==t?t:{};let a,h,c,u;void 0!==i&&(a="top"===i,h=!a),void 0!==r&&(c="start"===r,u=!c);let d=s,g=n;if(void 0===l||l){const e=Number.isInteger(s)&&s>=0,t=Number.isInteger(n)&&n>=0,o=e?he(this.rowIndexMapper,s):void 0,i=t?he(this.columnIndexMapper,n):void 0;if(null===o||null===i)return!1;d=e?V.rowIndexMapper.getRenderableFromVisualIndex(o):s,g=t?V.columnIndexMapper.getRenderableFromVisualIndex(i):n}const f=Number.isInteger(d),p=Number.isInteger(g);return f&&d>=0&&p&&g>=0?V.view.scrollViewport(V._createCellCoords(d,g),a,u,h,c):f&&d>=0&&(p&&g<0||!p)?V.view.scrollViewportVertically(d,a,h):!!(p&&g>=0&&(f&&d<0||!f))&&V.view.scrollViewportHorizontally(g,u,c)},this.scrollToFocusedCell=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>{};if(!this.selection.isSelected())return;this.addHookOnce("afterScroll",e);const{highlight:t}=this.getSelectedRangeLast();this.scrollViewportTo(t.toObject())?this.view.render():(this.removeHook("afterScroll",e),this._registerImmediate((()=>e())))},this.destroy=function(){if(V._clearTimeouts(),V._clearImmediates(),V.view&&V.view.destroy(),B&&B.destroy(),B=null,this.getShortcutManager().destroy(),X.clearCache(),L.delete(this.guid),(0,b.isRootInstance)(V)){const e=this.rootDocument.querySelector(".hot-display-license-info");e&&e.parentNode.removeChild(e)}(0,n.empty)(V.rootElement),F.destroy(),j&&j.destroy(),V.batchExecution((()=>{V.rowIndexMapper.unregisterAll(),V.columnIndexMapper.unregisterAll(),J.getItems().forEach((e=>{let[,t]=e;t.destroy()})),J.clear(),V.runHooks("afterDestroy")}),!0),T.default.getSingleton().destroy(V),(0,c.objectEach)(V,((e,t,o)=>{var s;(0,i.isFunction)(e)?o[t]=(s=t,()=>{throw new Error(`The "${s}" method cannot be called because this Handsontable instance has been destroyed`)}):"guid"!==t&&(o[t]=null)})),V.isDestroyed=!0,W&&W.destroy(),W=null,U=null,Z=null,j=null,V=null},this.getActiveEditor=function(){return j.getActiveEditor()},this.getFirstRenderedVisibleRow=function(){return V.view.getFirstRenderedVisibleRow()},this.getLastRenderedVisibleRow=function(){return V.view.getLastRenderedVisibleRow()},this.getFirstRenderedVisibleColumn=function(){return V.view.getFirstRenderedVisibleColumn()},this.getLastRenderedVisibleColumn=function(){return V.view.getLastRenderedVisibleColumn()},this.getFirstFullyVisibleRow=function(){return V.view.getFirstFullyVisibleRow()},this.getLastFullyVisibleRow=function(){return V.view.getLastFullyVisibleRow()},this.getFirstFullyVisibleColumn=function(){return V.view.getFirstFullyVisibleColumn()},this.getLastFullyVisibleColumn=function(){return V.view.getLastFullyVisibleColumn()},this.getFirstPartiallyVisibleRow=function(){return V.view.getFirstPartiallyVisibleRow()},this.getLastPartiallyVisibleRow=function(){return V.view.getLastPartiallyVisibleRow()},this.getFirstPartiallyVisibleColumn=function(){return V.view.getFirstPartiallyVisibleColumn()},this.getLastPartiallyVisibleColumn=function(){return V.view.getLastPartiallyVisibleColumn()},this.getPlugin=function(e){const t=(0,C.toUpperCaseFirst)(e);return"UndoRedo"===t?this.undoRedo:J.getItem(t)},this.getPluginName=function(e){return e===this.undoRedo?this.undoRedo.constructor.PLUGIN_KEY:J.getId(e)},this.getInstance=function(){return V},this.addHook=function(e,t,o){T.default.getSingleton().add(e,t,V,o)},this.hasHook=function(e){return T.default.getSingleton().has(e,V)||T.default.getSingleton().has(e)},this.addHookOnce=function(e,t,o){T.default.getSingleton().once(e,t,V,o)},this.removeHook=function(e,t){T.default.getSingleton().remove(e,t,V)},this.runHooks=function(e,t,o,s,n,i,r){return T.default.getSingleton().run(V,e,t,o,s,n,i,r)},this.getTranslatedPhrase=function(e,t){return(0,M.getTranslatedPhrase)(q.language,e,t)},this.toHTML=()=>(0,g.instanceToHTML)(this),this.toTableElement=()=>{const e=this.rootDocument.createElement("div");return e.insertAdjacentHTML("afterbegin",(0,g.instanceToHTML)(this)),e.firstElementChild},this.timeouts=[],this._registerTimeout=function(e){let t=e;"function"==typeof t&&(t=setTimeout(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0)),this.timeouts.push(t)},this._clearTimeouts=function(){(0,d.arrayEach)(this.timeouts,(e=>{clearTimeout(e)}))},this.immediates=[],this._registerImmediate=function(e){this.immediates.push(setImmediate(e))},this._clearImmediates=function(){(0,d.arrayEach)(this.immediates,(e=>{clearImmediate(e)}))},this._getEditorManager=function(){return j},this.isRtl=function(){return"rtl"===V.rootWindow.getComputedStyle(V.rootElement).direction},this.isLtr=function(){return!V.isRtl()},this.getDirectionFactor=function(){return V.isLtr()?1:-1};const ce=(0,x.createShortcutManager)({handleEvent:()=>V.isListening(),beforeKeyDown:e=>this.runHooks("beforeKeyDown",e),afterKeyDown:e=>{this.isDestroyed||V.runHooks("afterDocumentKeyDown",e)},ownerWindow:this.rootWindow});this.addHook("beforeOnCellMouseDown",(e=>{!1===e.ctrlKey&&!1===e.metaKey&&ce.releasePressedKeys()})),this.getShortcutManager=function(){return ce},this.getFocusManager=function(){return Y},(0,f.getPluginsNames)().forEach((e=>{const t=(0,f.getPlugin)(e);J.addItem(e,new t(this))})),(0,H.registerAllShortcutContexts)(V),ce.setActiveContextName("grid"),T.default.getSingleton().run(V,"construct")},o(67834),o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620),o(71766);var n=o(9893),i=o(78832),r=o(38893),l=o(28890),a=s(o(18344)),h=s(o(82629)),c=o(13911),u=o(26505),d=o(9175),g=o(74737),f=o(90532),p=o(44288),m=o(84558),w=o(51255),C=o(59777),v=o(87485),y=s(o(66801)),E=s(o(12248)),S=o(56216),R=o(93969),b=o(11015),_=o(90),T=s(o(56937)),M=o(74174),O=o(75032),I=o(73497),N=o(71757),A=o(48246),P=o(84134),x=o(57660),H=o(37947);let D=null;const L=new Map;new Set},63745:(e,t,o)=>{"use strict";t.__esModule=!0,t.installFocusDetector=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=e.rootElement,s=i(e),n=i(e);return s.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromTop())),n.addEventListener("focus",(()=>null==t?void 0:t.onFocusFromBottom())),o.firstChild.before(s),o.lastChild.after(n),{activate(){e._registerTimeout((()=>{s.tabIndex=0,n.tabIndex=0}),10)},deactivate(){e._registerTimeout((()=>{s.tabIndex=-1,n.tabIndex=-1}),10)}}};var s=o(9893),n=o(92692);function i(e){const t=e.rootDocument.createElement("input");return t.type="text",t.classList.add("htFocusCatcher"),e.getSettings().ariaTags&&(0,s.setAttribute)(t,[(0,n.A11Y_PRESENTATION)(),(0,n.A11Y_HIDDEN)()]),t}},71563:(e,t,o)=>{"use strict";t.__esModule=!0,t.installFocusCatcher=function(e){const t=function(e){return t=>{if(!t)return null;const o=i(e),s=r(e);return t.col<o.col&&(t.col=o.col),t.col>s.col&&(t.col=s.col),t.row<o.row&&(t.row=o.row),t.row>s.row&&(t.row=s.row),t}}(e);let o;const{activate:l,deactivate:a}=(0,n.installFocusDetector)(e,{onFocusFromTop(){var s;const n=null!==(s=t(o))&&void 0!==s?s:i(e);n&&(e.runHooks("modifyFocusOnTabNavigation","from_above",n),e.selectCell(n.row,n.col)),e.listen()},onFocusFromBottom(){var s;const n=null!==(s=t(o))&&void 0!==s?s:r(e);n&&(e.runHooks("modifyFocusOnTabNavigation","from_below",n),e.selectCell(n.row,n.col)),e.listen()}}),h={wrapped:!1,flipped:!1};let c=!0,u=!1,d=!1;e.addHook("afterListen",(()=>a())),e.addHook("afterUnlisten",(()=>l())),e.addHook("afterSelection",((t,s,n,i,r)=>{var l;(u&&(h.wrapped&&h.flipped||d)&&(d=!1,r.value=!0),c)&&(o=null===(l=e.getSelectedRangeLast())||void 0===l?void 0:l.highlight)})),e.addHook("beforeRowWrap",((e,t,o)=>{h.wrapped=!0,h.flipped=o}));const g={keys:[["Tab"],["Shift","Tab"]],preventDefault:!1,stopPropagation:!1,relativeToGroup:s.GRID_GROUP,group:"focusCatcher"};e.getShortcutManager().getContext("grid").addShortcuts([{...g,callback:()=>{const{tabNavigation:t}=e.getSettings();u=!0,e.getSelectedRangeLast()&&!t&&(c=!1),t||(d=!0)},position:"before"},{...g,callback:t=>{const{tabNavigation:s,autoWrapRow:n}=e.getSettings();if(u=!1,c=!0,!s||!e.selection.isSelected()||n&&h.wrapped&&h.flipped||!n&&h.wrapped)return n&&h.wrapped&&h.flipped&&(o=t.shiftKey?i(e):r(e)),h.wrapped=!1,h.flipped=!1,e.deselectCell(),e.unlisten(),!1;t.preventDefault()},position:"after"}])};var s=o(37947),n=o(63745);function i(e){const{rowIndexMapper:t,columnIndexMapper:o}=e,{navigableHeaders:s}=e.getSettings();let n=s&&e.countColHeaders()>0?-e.countColHeaders():0,i=s&&e.countRowHeaders()>0?-e.countRowHeaders():0;return 0===n&&(n=t.getVisualFromRenderableIndex(n)),0===i&&(i=o.getVisualFromRenderableIndex(i)),null===n||null===i?null:e._createCellCoords(n,i)}function r(e){var t,o;const{rowIndexMapper:s,columnIndexMapper:n}=e,{navigableHeaders:i}=e.getSettings();let r=s.getRenderableIndexesLength()-1,l=n.getRenderableIndexesLength()-1;if(r<0){if(!i||0===e.countColHeaders())return null;r=-1}if(l<0){if(!i||0===e.countColHeaders())return null;l=-1}return e._createCellCoords(null!==(t=s.getVisualFromRenderableIndex(r))&&void 0!==t?t:r,null!==(o=n.getVisualFromRenderableIndex(l))&&void 0!==o?o:l)}},48246:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(71563);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===s[e]||(t[e]=s[e]))}));var n=o(44428);Object.keys(n).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===n[e]||(t[e]=n[e]))}))},44428:(e,t,o)=>{"use strict";t.__esModule=!0,t.createViewportScroller=function(e){const{selection:t}=e;let o=!1,c=!1;return{resume(){c=!1},suspend(){c=!0},skipNextScrollCycle(){o=!0},scrollTo(u){var d;if(o||c)return void(o=!1);let g;t.isFocusSelectionChanged()?g=(0,i.focusScrollStrategy)(e):t.isSelectedByCorner()?g=(0,n.cornerHeaderScrollStrategy)(e):t.isSelectedByRowHeader()?g=(0,a.rowHeaderScrollStrategy)(e):t.isSelectedByColumnHeader()?g=(0,s.columnHeaderScrollStrategy)(e):1===t.getSelectedRange().size()&&t.isMultiple()?g=(0,r.multipleScrollStrategy)(e):1!==t.getSelectedRange().size()||t.isMultiple()?t.getSelectedRange().size()>1&&(g=(0,l.noncontiguousScrollStrategy)(e)):g=(0,h.singleScrollStrategy)(e),null===(d=g)||void 0===d||d(u)}}};var s=o(9635),n=o(5696),i=o(88948),r=o(29980),l=o(3011),a=o(44745),h=o(8248)},9635:(e,t)=>{"use strict";t.__esModule=!0,t.columnHeaderScrollStrategy=function(e){return t=>{let{col:o}=t;e.scrollViewportTo({col:o})}}},5696:(e,t)=>{"use strict";t.__esModule=!0,t.cornerHeaderScrollStrategy=function(){return()=>{}}},88948:(e,t)=>{"use strict";t.__esModule=!0,t.focusScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},29980:(e,t)=>{"use strict";t.__esModule=!0,t.multipleScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},3011:(e,t)=>{"use strict";t.__esModule=!0,t.noncontiguousScrollStrategy=function(e){return t=>{e.scrollViewportTo(t.toObject())}}},44745:(e,t)=>{"use strict";t.__esModule=!0,t.rowHeaderScrollStrategy=function(e){return t=>{let{row:o}=t;e.scrollViewportTo({row:o})}}},8248:(e,t)=>{"use strict";t.__esModule=!0,t.singleScrollStrategy=function(e){return t=>{const o=e.selection.getSelectionSource(),{row:s,col:n}=t;if(s<0&&n>=0)e.scrollViewportTo({col:n});else if(n<0&&s>=0)e.scrollViewportTo({row:s});else{if("mouse"===o&&(n===e.view.getLastPartiallyVisibleColumn()||s===e.view.getLastPartiallyVisibleRow()))return;e.scrollViewportTo({row:s,col:n})}}}},87727:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=o(55518),r=o(56216),l=o(13911),a=o(9175),h=o(87485),c=o(38893);class u{static get DESTINATION_RENDERER(){return 1}static get DESTINATION_CLIPBOARD_GENERATOR(){return 2}constructor(e,t,o){(0,n.default)(this,"hot",void 0),(0,n.default)(this,"metaManager",void 0),(0,n.default)(this,"tableMeta",void 0),(0,n.default)(this,"dataSource",void 0),(0,n.default)(this,"duckSchema",void 0),(0,n.default)(this,"colToPropCache",void 0),(0,n.default)(this,"propToColCache",void 0),this.hot=e,this.metaManager=o,this.tableMeta=o.getTableMeta(),this.dataSource=t,this.duckSchema=this.createDuckSchema(),this.createMap()}createMap(){const e=this.getSchema();if(void 0===e)throw new Error("trying to create `columns` definition but you didn't provide `schema` nor `data`");const t=this.tableMeta.columns;let o;if(this.colToPropCache=[],this.propToColCache=new Map,t){let s=0,n=0,i=!1;if("function"==typeof t){const t=(0,l.deepObjectSize)(e);s=t>0?t:this.countFirstRowKeys(),i=!0}else{const e=this.tableMeta.maxCols;s=Math.min(e,t.length)}for(o=0;o<s;o++){const e=i?t(o):t[o];if((0,l.isObject)(e)){if(void 0!==e.data){const t=i?n:o;this.colToPropCache[t]=e.data,this.propToColCache.set(e.data,t)}n+=1}}}else this.recursiveDuckColumns(e)}countFirstRowKeys(){return(0,r.countFirstRowKeys)(this.dataSource)}recursiveDuckColumns(e,t,o){let s,n=t,i=o;return void 0===n&&(n=0,i=""),"object"!=typeof e||Array.isArray(e)||(0,l.objectEach)(e,((e,t)=>{null===e?(s=i+t,this.colToPropCache.push(s),this.propToColCache.set(s,n),n+=1):n=this.recursiveDuckColumns(e,n,`${t}.`)})),n}colToProp(e){if(!1===Number.isInteger(e))return e;const t=this.hot.toPhysicalColumn(e);return null===t?e:this.colToPropCache&&(0,c.isDefined)(this.colToPropCache[t])?this.colToPropCache[t]:t}propToCol(e){const t=this.propToColCache.get(e);if((0,c.isDefined)(t))return this.hot.toVisualColumn(t);const o=this.hot.toVisualColumn(e);return null===o?e:o}getSchema(){const e=this.tableMeta.dataSchema;return e?"function"==typeof e?e():e:this.duckSchema}createDuckSchema(){return this.dataSource&&this.dataSource[0]?(0,l.duckSchema)(this.dataSource[0]):{}}refreshDuckSchema(){this.duckSchema=this.createDuckSchema()}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:o,mode:s="above"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=this.hot.countSourceRows();let i=n,r=0,a=e;("number"!=typeof a||a>=n)&&(a=n),a<this.hot.countRows()&&(i=this.hot.toPhysicalRow(a));if(!1===this.hot.runHooks("beforeCreateRow",a,t,o)||null===i)return{delta:0};const c=this.tableMeta.maxRows,u=this.getSchema().length,d=[];for(;r<t&&n+r<c;){let e=null;"array"===this.hot.dataType?this.tableMeta.dataSchema?e=(0,l.deepClone)(this.getSchema()):(e=[],(0,h.rangeEach)(u-1,(()=>e.push(null)))):"function"===this.hot.dataType?e=this.tableMeta.dataSchema(a+r):(e={},(0,l.deepExtend)(e,this.getSchema())),d.push(e),r+=1}this.hot.rowIndexMapper.insertIndexes(a,r),"below"===s&&(i=Math.min(i+1,n)),this.spliceData(i,0,d);const g=this.hot.toVisualRow(i);return this.hot.countSourceRows()===d.length&&this.hot.columnIndexMapper.initToLength(this.hot.getInitialColumnCount()),r>0&&(null==e?this.metaManager.createRow(null,r):"auto"!==o&&this.metaManager.createRow(i,t)),this.hot.runHooks("afterCreateRow",g,r,o),this.hot.forceFullRender=!0,{delta:r,startPhysicalIndex:i}}createCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,{source:o,mode:s="start"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this.hot.isColumnModificationAllowed())throw new Error("Cannot create new column. When data source in an object, you can only have as much columns as defined in first data row, data schema or in the 'columns' setting.If you want to be able to add new columns, you have to use array datasource.");const n=this.dataSource,i=this.tableMeta.maxCols,r=this.hot.countSourceCols();let l=e;("number"!=typeof l||l>=r)&&(l=r);if(!1===this.hot.runHooks("beforeCreateCol",l,t,o))return{delta:0};let a=r;l<this.hot.countCols()&&(a=this.hot.toPhysicalColumn(l));const h=this.hot.countSourceRows();let c=this.hot.countCols(),u=0,d=a;"end"===s&&(d=Math.min(d+1,r));const g=d;for(;u<t&&c<i;){if("number"!=typeof l||l>=c)if(h>0)for(let e=0;e<h;e+=1)void 0===n[e]&&(n[e]=[]),n[e].push(null);else n.push([null]);else for(let e=0;e<h;e++)n[e].splice(d,0,null);u+=1,d+=1,c+=1}this.hot.columnIndexMapper.insertIndexes(l,u),u>0&&(null==e?this.metaManager.createColumn(null,u):"auto"!==o&&this.metaManager.createColumn(g,t));const f=this.hot.toVisualColumn(g);return this.hot.runHooks("afterCreateCol",f,u,o),this.hot.forceFullRender=!0,this.refreshDuckSchema(),{delta:u,startPhysicalIndex:g}}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,o=arguments.length>2?arguments[2]:void 0,s=Number.isInteger(e)?e:-t;const n=this.visualRowsToPhysical(s,t),i=this.hot.countSourceRows();s=(i+s)%i;if(!1===this.hot.runHooks("beforeRemoveRow",s,n.length,n,o))return!1;const r=n.length;if(this.filterData(s,r,n),s<this.hot.countRows()){this.hot.rowIndexMapper.removeIndexes(n);const e=(0,c.isDefined)(this.tableMeta.columns)||(0,c.isDefined)(this.tableMeta.dataSchema);0===this.hot.rowIndexMapper.getNotTrimmedIndexesLength()&&!1===e&&this.hot.columnIndexMapper.setIndexesSequence([])}return n.slice(0).sort(((e,t)=>t-e)).forEach((e=>{this.metaManager.removeRow(e,1)})),this.hot.runHooks("afterRemoveRow",s,r,n,o),this.hot.forceFullRender=!0,!0}removeCol(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,o=arguments.length>2?arguments[2]:void 0;if("object"===this.hot.dataType||this.tableMeta.columns)throw new Error("cannot remove column with object data source or columns option specified");let s="number"!=typeof e?-t:e;s=(this.hot.countCols()+s)%this.hot.countCols();const n=this.visualColumnsToPhysical(s,t),i=n.slice(0).sort(((e,t)=>t-e));if(!1===this.hot.runHooks("beforeRemoveCol",s,t,n,o))return!1;let r=!0;const l=i.length,a=this.dataSource;for(let e=0;e<l;e++)r&&n[0]!==n[e]-e&&(r=!1);if(r)for(let e=0,o=this.hot.countSourceRows();e<o;e++)a[e].splice(n[0],t),0===e&&this.metaManager.removeColumn(n[0],t);else for(let e=0,t=this.hot.countSourceRows();e<t;e++)for(let t=0;t<l;t++)a[e].splice(i[t],1),0===e&&this.metaManager.removeColumn(i[t],1);return s<this.hot.countCols()&&(this.hot.columnIndexMapper.removeIndexes(n),0===this.hot.columnIndexMapper.getNotTrimmedIndexesLength()&&this.hot.rowIndexMapper.setIndexesSequence([])),this.hot.runHooks("afterRemoveCol",s,t,n,o),this.hot.forceFullRender=!0,this.refreshDuckSchema(),!0}spliceCol(e,t,o){const s=this.hot.getDataAtCol(e),n=s.slice(t,t+o),i=s.slice(t+o);for(var r=arguments.length,l=new Array(r>3?r-3:0),h=3;h<r;h++)l[h-3]=arguments[h];(0,a.extendArray)(l,i);let c=0;for(;c<o;)l.push(null),c+=1;return(0,a.to2dArray)(l),this.hot.populateFromArray(t,e,l,null,null,"spliceCol"),n}spliceRow(e,t,o){const s=this.hot.getSourceDataAtRow(e),n=s.slice(t,t+o),i=s.slice(t+o);for(var r=arguments.length,l=new Array(r>3?r-3:0),h=3;h<r;h++)l[h-3]=arguments[h];(0,a.extendArray)(l,i);let c=0;for(;c<o;)l.push(null),c+=1;return this.hot.populateFromArray(e,t,[l],null,null,"spliceRow"),n}spliceData(e,t,o){if(!1!==this.hot.runHooks("beforeDataSplice",e,t,o)){const t=[...this.dataSource.slice(0,e),...o,...this.dataSource.slice(e)];this.dataSource.length=0,t.forEach((e=>this.dataSource.push(e)))}}filterData(e,t,o){let s=this.hot.runHooks("filterData",e,t,o);!1===Array.isArray(s)&&(s=this.dataSource.filter(((e,t)=>-1===o.indexOf(t)))),this.dataSource.length=0,Array.prototype.push.apply(this.dataSource,s)}get(e,t){const o=this.hot.toPhysicalRow(e);let s=this.dataSource[o];const n=this.hot.runHooks("modifyRowData",o);s=isNaN(n)?n:s;const{dataDotNotation:i}=this.hot.getSettings();let r=null;if(s&&s.hasOwnProperty&&(0,l.hasOwnProperty)(s,t))r=s[t];else if(i&&"string"==typeof t&&t.indexOf(".")>-1){let e=s;if(!e)return null;const o=t.split(".");for(let t=0,s=o.length;t<s;t++)if(e=e[o[t]],void 0===e)return null;r=e}else"function"==typeof t&&(r=t(this.dataSource.slice(o,o+1)[0]));if(this.hot.hasHook("modifyData")){const e=(0,l.createObjectPropListener)(r);this.hot.runHooks("modifyData",o,this.propToCol(t),e,"get"),e.isTouched()&&(r=e.value)}return r}getCopyable(e,t){return this.hot.getCellMeta(e,this.propToCol(t)).copyable?this.get(e,t):""}set(e,t,o){const s=this.hot.toPhysicalRow(e);let n=o,i=this.dataSource[s];const r=this.hot.runHooks("modifyRowData",s);if(i=isNaN(r)?r:i,this.hot.hasHook("modifyData")){const e=(0,l.createObjectPropListener)(n);this.hot.runHooks("modifyData",s,this.propToCol(t),e,"set"),e.isTouched()&&(n=e.value)}const{dataDotNotation:a}=this.hot.getSettings();if(i&&i.hasOwnProperty&&(0,l.hasOwnProperty)(i,t))i[t]=n;else if(a&&"string"==typeof t&&t.indexOf(".")>-1){let e,o=i,s=0;const r=t.split(".");for(s=0,e=r.length-1;s<e;s++)void 0===o[r[s]]&&(o[r[s]]={}),o=o[r[s]];o[r[s]]=n}else"function"==typeof t?t(this.dataSource.slice(s,s+1)[0],n):i[t]=n}visualRowsToPhysical(e,t){const o=this.hot.countSourceRows(),s=[];let n,i=(o+e)%o,r=t;for(;i<o&&r;)n=this.hot.toPhysicalRow(i),s.push(n),r-=1,i+=1;return s}visualColumnsToPhysical(e,t){const o=this.hot.countCols(),s=[];let n=(o+e)%o,i=t;for(;n<o&&i;){const e=this.hot.toPhysicalColumn(n);s.push(e),i-=1,n+=1}return s}clear(){for(let e=0;e<this.hot.countSourceRows();e++)for(let t=0;t<this.hot.countCols();t++)this.set(e,this.colToProp(t),"")}getLength(){const e=this.tableMeta.maxRows;let t;t=e<0||0===e?0:e||1/0;const o=this.hot.rowIndexMapper.getNotTrimmedIndexesLength();return Math.min(o,t)}getAll(){const e={row:0,col:0},t={row:Math.max(this.hot.countRows()-1,0),col:Math.max(this.hot.countCols()-1,0)};return e.row-t.row!=0||this.hot.countSourceRows()?this.getRange(e,t,u.DESTINATION_RENDERER):[]}countCachedColumns(){return this.colToPropCache.length}getRange(e,t,o){const s=[];let n,i,r;const l=this.tableMeta.maxRows,a=this.tableMeta.maxCols;if(0===l||0===a)return[];const h=o===u.DESTINATION_CLIPBOARD_GENERATOR?this.getCopyable:this.get,c=Math.min(Math.max(l-1,0),Math.max(e.row,t.row)),d=Math.min(Math.max(a-1,0),Math.max(e.col,t.col));for(n=Math.min(e.row,t.row);n<=c;n++){r=[];const o=n>=0?this.hot.toPhysicalRow(n):n;for(i=Math.min(e.col,t.col);i<=d&&null!==o;i++)r.push(h.call(this,n,this.colToProp(i)));null!==o&&s.push(r)}return s}getText(e,t){return(0,i.stringify)(this.getRange(e,t,u.DESTINATION_RENDERER))}getCopyableText(e,t){return(0,i.stringify)(this.getRange(e,t,u.DESTINATION_CLIPBOARD_GENERATOR))}destroy(){this.hot=null,this.metaManager=null,this.dataSource=null,this.duckSchema=null,this.colToPropCache.length=0,this.propToColCache.clear(),this.propToColCache=void 0}}t.default=u},12248:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(13911),r=o(56216),l=o(9175),a=o(87485),h=o(78832);t.default=class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];(0,n.default)(this,"hot",void 0),(0,n.default)(this,"data",void 0),(0,n.default)(this,"dataType","array"),(0,n.default)(this,"colToProp",(()=>{})),(0,n.default)(this,"propToCol",(()=>{})),this.hot=e,this.data=t}modifyRowData(e){let t;return this.hot.hasHook("modifyRowData")&&(t=this.hot.runHooks("modifyRowData",e)),void 0===t||Number.isInteger(t)?this.data[e]:t}getData(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.data&&0!==this.data.length?this.getByRange(null,null,e):this.data}setData(e){this.data=e}getAtColumn(e){const t=[];return(0,l.arrayEach)(this.data,((o,s)=>{const n=this.getAtCell(s,e);t.push(n)})),t}getAtRow(e,t,o){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const n=void 0===t&&void 0===o,{dataDotNotation:r}=this.hot.getSettings();let l=null,c=null;if(l=this.modifyRowData(e),Array.isArray(l))c=[],n?l.forEach(((t,o)=>{c[o]=this.getAtPhysicalCell(e,o,l)})):(0,a.rangeEach)(t,o,(o=>{c[o-t]=this.getAtPhysicalCell(e,o,l)}));else if((0,i.isObject)(l)||(0,h.isFunction)(l))if(c=s?[]:{},!n||s){const n=0,h=this.countFirstRowKeys()-1;(0,a.rangeEach)(n,h,(a=>{const u=this.colToProp(a);if(a>=(t||n)&&a<=(o||h)&&!Number.isInteger(u)){const t=this.getAtPhysicalCell(e,u,l);s?c.push(t):r?(0,i.setProperty)(c,u,t):c[u]=t}}))}else(0,i.objectEach)(l,((t,o)=>{const s=this.getAtPhysicalCell(e,o,l);r?(0,i.setProperty)(c,o,s):c[o]=s}));return c}setAtCell(e,t,o){if(!(e>=this.countRows()||t>=this.countFirstRowKeys())){if(this.hot.hasHook("modifySourceData")){const s=(0,i.createObjectPropListener)(o);this.hot.runHooks("modifySourceData",e,t,s,"set"),s.isTouched()&&(o=s.value)}Number.isInteger(t)?this.data[e][t]=o:(0,i.setProperty)(this.data[e],t,o)}}getAtPhysicalCell(e,t,o){let s=null;if(o)if("string"==typeof t){const{dataDotNotation:e}=this.hot.getSettings();s=e?(0,i.getProperty)(o,t):o[t]}else s="function"==typeof t?t(o):o[t];if(this.hot.hasHook("modifySourceData")){const o=(0,i.createObjectPropListener)(s);this.hot.runHooks("modifySourceData",e,t,o,"get"),o.isTouched()&&(s=o.value)}return s}getAtCell(e,t){const o=this.modifyRowData(e);return this.getAtPhysicalCell(e,this.colToProp(t),o)}getByRange(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=!1,n=null,i=null,r=null,l=null;null===e||null===t?(s=!0,n=0,r=this.countRows()-1):(n=Math.min(e.row,t.row),i=Math.min(e.col,t.col),r=Math.max(e.row,t.row),l=Math.max(e.col,t.col));const h=[];return(0,a.rangeEach)(n,r,(e=>{h.push(s?this.getAtRow(e,void 0,void 0,o):this.getAtRow(e,i,l,o))})),h}countRows(){if(this.hot.hasHook("modifySourceLength")){const e=this.hot.runHooks("modifySourceLength");if(Number.isInteger(e))return e}return this.data.length}countFirstRowKeys(){return(0,r.countFirstRowKeys)(this.data)}destroy(){this.data=null,this.hot=null}}},71757:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(87727));t.DataMap=n.default;var i=s(o(36102));t.MetaManager=i.default;var r=s(o(32054));t.metaSchemaFactory=r.default;var l=o(21781);t.replaceData=l.replaceData;var a=o(74870);t.DynamicCellMetaMod=a.DynamicCellMetaMod;var h=o(88884);t.ExtendMetaPropertiesMod=h.ExtendMetaPropertiesMod},36102:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85252)),i=s(o(47441)),r=s(o(5065)),l=s(o(25779)),a=s(o(63870)),h=o(13911);class c{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];this.hot=e,this.globalMeta=new n.default(e),this.tableMeta=new i.default(this.globalMeta),this.columnMeta=new r.default(this.globalMeta),this.cellMeta=new l.default(this.columnMeta),o.forEach((e=>new e(this))),this.globalMeta.updateMeta(t)}getGlobalMeta(){return this.globalMeta.getMeta()}updateGlobalMeta(e){this.globalMeta.updateMeta(e)}getTableMeta(){return this.tableMeta.getMeta()}updateTableMeta(e){this.tableMeta.updateMeta(e)}getColumnMeta(e){return this.columnMeta.getMeta(e)}updateColumnMeta(e,t){this.columnMeta.updateMeta(e,t)}getCellMeta(e,t,o){let{visualRow:s,visualColumn:n}=o;const i=this.cellMeta.getMeta(e,t);return i.visualRow=s,i.visualCol=n,i.row=e,i.col=t,this.runLocalHooks("afterGetCellMeta",i),i}getCellMetaKeyValue(e,t,o){if("string"!=typeof o)throw new Error("The passed cell meta object key is not a string");return this.cellMeta.getMeta(e,t,o)}setCellMeta(e,t,o,s){this.cellMeta.setMeta(e,t,o,s)}updateCellMeta(e,t,o){this.cellMeta.updateMeta(e,t,o)}removeCellMeta(e,t,o){this.cellMeta.removeMeta(e,t,o)}getCellsMeta(){return this.cellMeta.getMetas()}getCellsMetaAtRow(e){return this.cellMeta.getMetasAtRow(e)}createRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createRow(e,t)}removeRow(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeRow(e,t)}createColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.createColumn(e,t),this.columnMeta.createColumn(e,t)}removeColumn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cellMeta.removeColumn(e,t),this.columnMeta.removeColumn(e,t)}clearCellsCache(){this.cellMeta.clearCache()}clearCache(){this.cellMeta.clearCache(),this.columnMeta.clearCache()}}t.default=c,(0,h.mixin)(c,a.default)},47586:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=s(o(85707)),i=o(9175),r=o(34471);class l{constructor(e){(0,n.default)(this,"valueFactory",void 0),(0,n.default)(this,"data",[]),(0,n.default)(this,"index",[]),(0,n.default)(this,"holes",new Set),this.valueFactory=e}obtain(e){(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=this._getStorageIndexByKey(e);let o;if(t>=0)o=this.data[t],void 0===o&&(o=this.valueFactory(e),this.data[t]=o);else if(o=this.valueFactory(e),this.holes.size>0){const t=this.holes.values().next().value;this.holes.delete(t),this.data[t]=o,this.index[e]=t}else this.data.push(o),this.index[e]=this.data.length-1;return o}insert(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)||(0,r.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const o=[],s=this.data.length;for(let e=0;e<t;e++)o.push(s+e),this.data.push(void 0);const n=(0,r.isNullish)(e)?this.index.length:e;this.index=[...this.index.slice(0,n),...o,...this.index.slice(n)]}remove(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)||(0,r.isNullish)(e)),"Expecting an unsigned number or null/undefined argument.");const o=this.index.splice((0,r.isNullish)(e)?this.index.length-t:e,t);for(let e=0;e<o.length;e++){const t=o[e];"number"==typeof t&&this.holes.add(t)}}size(){return this.data.length-this.holes.size}values(){return(0,i.arrayFilter)(this.data,((e,t)=>!this.holes.has(t)))[Symbol.iterator]()}entries(){const e=[];for(let t=0;t<this.data.length;t++){const o=this._getKeyByStorageIndex(t);-1!==o&&e.push([o,this.data[t]])}let t=0;return{next:()=>{if(t<e.length){const o=e[t];return t+=1,{value:o,done:!1}}return{done:!0}}}}clear(){this.data=[],this.index=[],this.holes.clear()}_getStorageIndexByKey(e){return this.index.length>e?this.index[e]:-1}_getKeyByStorageIndex(e){return this.index.indexOf(e)}[Symbol.iterator](){return this.entries()}}t.default=l},25779:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(15724);var n=s(o(85707)),i=o(13911),r=o(34471),l=s(o(47586)),a=o(38893);t.default=class{constructor(e){(0,n.default)(this,"columnMeta",void 0),(0,n.default)(this,"metas",new l.default((()=>this._createRow()))),this.columnMeta=e}updateMeta(e,t,o){const s=this.getMeta(e,t);(0,i.extend)(s,o),(0,r.extendByMetaType)(s,o)}createRow(e,t){this.metas.insert(e,t)}createColumn(e,t){for(let o=0;o<this.metas.size();o++)this.metas.obtain(o).insert(e,t)}removeRow(e,t){this.metas.remove(e,t)}removeColumn(e,t){for(let o=0;o<this.metas.size();o++)this.metas.obtain(o).remove(e,t)}getMeta(e,t,o){const s=this.metas.obtain(e).obtain(t);return void 0===o?s:s[o]}setMeta(e,t,o,s){var n;const i=this.metas.obtain(e).obtain(t);null===(n=i._automaticallyAssignedMetaProps)||void 0===n||n.delete(o),i[o]=s}removeMeta(e,t,o){delete this.metas.obtain(e).obtain(t)[o]}getMetas(){const e=[],t=Array.from(this.metas.values());for(let o=0;o<t.length;o++)(0,a.isDefined)(t[o])&&e.push(...t[o].values());return e}getMetasAtRow(e){(0,r.assert)((()=>(0,r.isUnsignedNumber)(e)),"Expecting an unsigned number.");const t=new Map(this.metas);return t.has(e)?Array.from(t.get(e).values()):[]}clearCache(){this.metas.clear()}_createRow(){return new l.default((e=>this._createMeta(e)))}_createMeta(e){return new(this.columnMeta.getMetaConstructor(e))}}},5065:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(13911),r=o(34471),l=s(o(47586));const a=["data","width"];t.default=class{constructor(e){(0,n.default)(this,"globalMeta",void 0),(0,n.default)(this,"metas",new l.default((()=>this._createMeta()))),this.globalMeta=e,this.metas=new l.default((()=>this._createMeta()))}updateMeta(e,t){const o=this.getMeta(e);(0,i.extend)(o,t),(0,r.extendByMetaType)(o,t)}createColumn(e,t){this.metas.insert(e,t)}removeColumn(e,t){this.metas.remove(e,t)}getMeta(e){return this.metas.obtain(e)}getMetaConstructor(e){return this.metas.obtain(e).constructor}clearCache(){this.metas.clear()}_createMeta(){return(0,r.columnFactory)(this.globalMeta.getMetaConstructor(),a).prototype}}},85252:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(13911),r=o(34471),l=s(o(32054));t.default=class{constructor(e){(0,n.default)(this,"metaCtor",class{}),(0,n.default)(this,"meta",void 0),this.meta=this.metaCtor.prototype,(0,i.extend)(this.meta,(0,l.default)()),this.meta.instance=e}getMetaConstructor(){return this.metaCtor}getMeta(){return this.meta}updateMeta(e){var t;(0,i.extend)(this.meta,e),(0,r.extendByMetaType)(this.meta,{...e,type:null!==(t=e.type)&&void 0!==t?t:this.meta.type},e)}}},47441:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(13911),r=o(34471);t.default=class{constructor(e){(0,n.default)(this,"meta",void 0);const t=e.getMetaConstructor();this.meta=new t}getMeta(){return this.meta}updateMeta(e){(0,i.extend)(this.meta,e),(0,r.extendByMetaType)(this.meta,e,e)}}},32054:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(38893),n=o(13911);t.default=()=>({_automaticallyAssignedMetaProps:void 0,activeHeaderClassName:"ht__active_highlight",allowEmpty:!0,allowHtml:!1,allowInsertColumn:!0,allowInsertRow:!0,allowInvalid:!0,allowRemoveColumn:!0,allowRemoveRow:!0,ariaTags:!0,autoColumnSize:void 0,autoRowSize:void 0,autoWrapCol:!1,autoWrapRow:!1,bindRowsWithHeaders:void 0,cell:[],cells:void 0,checkedTemplate:void 0,className:void 0,colHeaders:null,collapsibleColumns:void 0,columnHeaderHeight:void 0,columns:void 0,columnSorting:void 0,columnSummary:void 0,colWidths:void 0,commentedCellClassName:"htCommentCell",comments:!1,contextMenu:void 0,copyable:!0,copyPaste:!0,correctFormat:!1,currentColClassName:void 0,currentHeaderClassName:"ht__highlight",currentRowClassName:void 0,customBorders:!1,data:void 0,dataDotNotation:!0,dataSchema:void 0,dateFormat:"DD/MM/YYYY",timeFormat:"h:mm:ss a",datePickerConfig:void 0,defaultDate:void 0,disableVisualSelection:!1,dragToScroll:!0,dropdownMenu:void 0,editor:void 0,enterBeginsEditing:!0,enterMoves:{col:0,row:1},fillHandle:{autoInsertRow:!1},filter:!0,filteringCaseSensitive:!1,filters:void 0,fixedColumnsLeft:0,fixedColumnsStart:0,fixedRowsBottom:0,fixedRowsTop:0,formulas:void 0,fragmentSelection:!1,headerClassName:void 0,height:void 0,hiddenColumns:void 0,hiddenRows:void 0,invalidCellClassName:"htInvalid",imeFastEdit:!1,isEmptyCol(e){let t,o,n;for(t=0,o=this.countRows();t<o;t++)if(n=this.getDataAtCell(t,e),!1===(0,s.isEmpty)(n))return!1;return!0},isEmptyRow(e){let t,o,i,r;for(t=0,o=this.countCols();t<o;t++)if(i=this.getDataAtCell(e,t),!1===(0,s.isEmpty)(i))return"object"==typeof i&&(r=this.getCellMeta(e,t),(0,n.isObjectEqual)(this.getSchema()[r.prop],i));return!0},label:void 0,language:"en-US",layoutDirection:"inherit",licenseKey:void 0,locale:"en-US",manualColumnFreeze:void 0,manualColumnMove:void 0,manualColumnResize:void 0,manualRowMove:void 0,manualRowResize:void 0,maxCols:1/0,maxRows:1/0,mergeCells:!1,minCols:0,minRows:0,minSpareCols:0,minSpareRows:0,multiColumnSorting:void 0,navigableHeaders:!1,tabNavigation:!0,nestedHeaders:void 0,nestedRows:void 0,noWordWrapClassName:"htNoWrap",numericFormat:void 0,observeDOMVisibility:!0,outsideClickDeselects:!0,persistentState:void 0,placeholder:void 0,placeholderCellClassName:"htPlaceholder",preventOverflow:!1,preventWheel:!1,readOnly:!1,readOnlyCellClassName:"htDimmed",renderAllRows:!1,renderAllColumns:!1,renderer:void 0,rowHeaders:void 0,rowHeaderWidth:void 0,rowHeights:void 0,search:!1,selectionMode:"multiple",selectOptions:void 0,skipColumnOnPaste:!1,skipRowOnPaste:!1,sortByRelevance:!0,source:void 0,startCols:5,startRows:5,stretchH:"none",strict:void 0,tableClassName:void 0,tabMoves:{row:0,col:1},title:void 0,trimDropdown:!0,trimRows:void 0,trimWhitespace:!0,type:"text",uncheckedTemplate:void 0,undo:void 0,validator:void 0,viewportColumnRenderingOffset:"auto",viewportRowRenderingOffset:"auto",visibleRows:10,width:void 0,wordWrap:!0})},74870:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=s(o(85707)),i=s(o(56937)),r=o(13911),l=o(78832);t.DynamicCellMetaMod=class{constructor(e){(0,n.default)(this,"metaManager",void 0),(0,n.default)(this,"metaSyncMemo",new Map),this.metaManager=e,e.addLocalHook("afterGetCellMeta",(e=>this.extendCellMeta(e))),i.default.getSingleton().add("beforeRender",(e=>{e&&this.metaSyncMemo.clear()}),this.metaManager.hot)}extendCellMeta(e){var t;const{row:o,col:s}=e;if(null!==(t=this.metaSyncMemo.get(o))&&void 0!==t&&t.has(s))return;const{visualRow:n,visualCol:i}=e,a=this.metaManager.hot,h=a.colToProp(i);e.prop=h,a.runHooks("beforeGetCellMeta",n,i,e);const c=(0,r.hasOwnProperty)(e,"type")?e.type:null;let u=(0,l.isFunction)(e.cells)?e.cells(o,s,h):null;var d;c&&(u?u.type=null!==(d=u.type)&&void 0!==d?d:c:u={type:c});u&&this.metaManager.updateCellMeta(o,s,u),a.runHooks("afterGetCellMeta",n,i,e),this.metaSyncMemo.has(o)||this.metaSyncMemo.set(o,new Set),this.metaSyncMemo.get(o).add(s)}}},88884:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var n=s(o(85707));function i(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function r(e,t){return e.get(function(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}(e,t))}var l=new WeakMap;t.ExtendMetaPropertiesMod=class{constructor(e){(0,n.default)(this,"metaManager",void 0),(0,n.default)(this,"usageTracker",new Set),(0,n.default)(this,"propDescriptors",new Map([["ariaTags",{initOnly:!0}],["fixedColumnsLeft",{target:"fixedColumnsStart",onChange(e){if(this.metaManager.hot.isRtl()&&"fixedColumnsLeft"===e)throw new Error("The `fixedColumnsLeft` is not supported for RTL. Please use option `fixedColumnsStart`.");if(this.usageTracker.has("fixedColumnsLeft")&&this.usageTracker.has("fixedColumnsStart"))throw new Error("The `fixedColumnsLeft` and `fixedColumnsStart` should not be used together. Please use only the option `fixedColumnsStart`.")}}],["layoutDirection",{initOnly:!0}],["renderAllColumns",{initOnly:!0}],["renderAllRows",{initOnly:!0}]])),i(this,l,((e,t,o)=>{if(!o)throw new Error(`The \`${e}\` option can not be updated after the Handsontable is initialized.`)})),this.metaManager=e,this.extendMetaProps()}extendMetaProps(){this.propDescriptors.forEach(((e,t)=>{const{initOnly:o,target:s,onChange:n}=e,i="string"==typeof s,a=i?s:t,h=`_${a}`;this.metaManager.globalMeta.meta[h]=this.metaManager.globalMeta.meta[a],n?(this.installPropWatcher(t,h,n),i&&this.installPropWatcher(s,h,n)):o&&(this.installPropWatcher(t,h,r(l,this)),this.metaManager.globalMeta.meta._initOnlySettings||(this.metaManager.globalMeta.meta._initOnlySettings=[]),this.metaManager.globalMeta.meta._initOnlySettings.push(t))}))}installPropWatcher(e,t,o){const s=this;Object.defineProperty(this.metaManager.globalMeta.meta,e,{get(){return this[t]},set(n){const i=!s.usageTracker.has(e);s.usageTracker.add(e),o.call(s,e,n,i),this[t]=n},enumerable:!0,configurable:!0})}}},34471:(e,t,o)=>{"use strict";t.__esModule=!0,t.assert=function(e,t){if(!e())throw new Error(`Assertion failed: ${t}`)},t.columnFactory=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];function o(){}(0,s.inherit)(o,e);for(let e=0;e<t.length;e++)o.prototype[t[e]]=void 0;return o},t.extendByMetaType=function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e;const i="string"==typeof t.type?(0,n.getCellType)(t.type):t.type;e._automaticallyAssignedMetaProps&&(0,s.objectEach)(t,((t,o)=>{e._automaticallyAssignedMetaProps.delete(o)}));if(!(0,s.isObject)(i))return;o!==e||e._automaticallyAssignedMetaProps||(e._automaticallyAssignedMetaProps=new Set);const r={};(0,s.objectEach)(i,((t,n)=>{var i;(function(e,t){var o;if("CELL_TYPE"===e)return!1;return(null===(o=t._automaticallyAssignedMetaProps)||void 0===o?void 0:o.has(e))||!(0,s.hasOwnProperty)(t,e)})(n,o)&&(r[n]=t,null===(i=e._automaticallyAssignedMetaProps)||void 0===i||i.add(n))})),(0,s.extend)(e,r)},t.isNullish=function(e){return null==e},t.isUnsignedNumber=function(e){return Number.isInteger(e)&&e>=0},o(67834),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620);var s=o(13911),n=o(34299)},21781:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.replaceData=function(e,t,o,s){const{hotInstance:c,dataMap:u,dataSource:d,internalSource:g,source:f,metaManager:p,firstRun:m}=s,w=(0,n.toUpperCaseFirst)(g),C=c.getSettings();Array.isArray(C.dataSchema)?c.dataType="array":(0,i.isFunction)(C.dataSchema)?c.dataType="function":c.dataType="object";u&&u.destroy();e=c.runHooks(`before${w}`,e,m,f);const v=new r.default(c,e,p);if(t(v),"object"==typeof e&&null!==e)e.push&&e.splice||(e=[e]);else{if(null!==e)throw new Error(`${g} only accepts array of objects or array of arrays (${typeof e} given)`);{const t=v.getSchema();let o;e=[];let s=0,n=0;for(s=0,n=C.startRows;s<n;s++)if("object"!==c.dataType&&"function"!==c.dataType||!C.dataSchema)if("array"===c.dataType)o=(0,l.deepClone)(t[0]),e.push(o);else{o=[];for(let e=0,t=C.startCols;e<t;e++)o.push(null);e.push(o)}else o=(0,l.deepClone)(t),e.push(o)}}Array.isArray(e[0])&&(c.dataType="array");C.data=e,v.dataSource=e,d.data=e,d.dataType=c.dataType,d.colToProp=v.colToProp.bind(v),d.propToCol=v.propToCol.bind(v),d.countCachedColumns=v.countCachedColumns.bind(v),o(v),c.runHooks(`after${w}`,e,m,f),m||(c.runHooks("afterChange",null,g),c.render());c.getSettings().ariaTags&&(0,a.setAttribute)(c.rootElement,[(0,h.A11Y_ROWCOUNT)(-1),(0,h.A11Y_COLCOUNT)(c.countCols()+(c.view?c.countRowHeaders():0))])},o(67834),o(15724);var n=o(59777),i=o(78832),r=s(o(87727)),l=o(13911),a=o(9893),h=o(92692)},18344:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(71257),r=o(79729),l=o(84558),a=s(o(82629));function h(e,t){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.add(e)}function c(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}var u=new WeakSet;class d{constructor(e,t,o){h(this,u),(0,n.default)(this,"hot",void 0),(0,n.default)(this,"tableMeta",void 0),(0,n.default)(this,"selection",void 0),(0,n.default)(this,"eventManager",void 0),(0,n.default)(this,"destroyed",!1),(0,n.default)(this,"activeEditor",void 0),(0,n.default)(this,"cellProperties",void 0),this.hot=e,this.tableMeta=t,this.selection=o,this.eventManager=new a.default(e),this.hot.addHook("afterDocumentKeyDown",(e=>c(u,this,g).call(this,e))),this.eventManager.addEventListener(this.hot.rootDocument.documentElement,"compositionstart",(e=>{!this.destroyed&&this.hot.isListening()&&this.openEditor("",e)})),this.hot.view._wt.update("onCellDblClick",((e,t,o)=>c(u,this,f).call(this,e,t,o)))}getActiveEditor(){return this.activeEditor}prepareEditor(){var e;if(this.activeEditor&&this.activeEditor.isWaiting())return void this.closeEditor(!1,!1,(e=>{e&&this.prepareEditor()}));const t=null===(e=this.hot.getSelectedRangeLast())||void 0===e?void 0:e.highlight;if(!t||t.isHeader())return;const{row:o,col:s}=t,n=this.hot.runHooks("modifyGetCellCoords",o,s);let i=o,r=s;if(Array.isArray(n)&&([i,r]=n),this.cellProperties=this.hot.getCellMeta(i,r),!this.isCellEditable())return void this.clearActiveEditor();const a=this.hot.getCell(o,s,!0);if(a){const e=this.hot.getCellEditor(this.cellProperties),t=this.hot.colToProp(r),n=this.hot.getSourceDataAtCell(this.hot.toPhysicalRow(i),r);this.activeEditor=(0,l.getEditorInstance)(e,this.hot),this.activeEditor.prepare(o,s,t,a,n,this.cellProperties)}}isEditorOpened(){return this.activeEditor&&this.activeEditor.isOpened()}openEditor(e,t){let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!this.isCellEditable())return void this.clearActiveEditor();const s=this.hot.getSelectedRangeLast();let n=this.hot.runHooks("beforeBeginEditing",s.highlight.row,s.highlight.col,e,t,o);t instanceof MouseEvent&&"boolean"!=typeof n&&(n=0===this.hot.selection.getLayerLevel()&&s.isSingle()),!1!==n?(this.activeEditor||(this.hot.scrollToFocusedCell(),this.prepareEditor()),this.activeEditor&&(o&&this.activeEditor.enableFullEditMode(),this.activeEditor.beginEditing(e,t))):this.clearActiveEditor()}closeEditor(e,t,o){this.activeEditor?this.activeEditor.finishEditing(e,t,o):o&&o(!1)}closeEditorAndSaveChanges(e){this.closeEditor(!1,e)}closeEditorAndRestoreOriginalValue(e){this.closeEditor(!0,e)}clearActiveEditor(){this.activeEditor=void 0}isCellEditable(){const e=this.hot.getSelectedRangeLast();if(!e)return!1;const t=this.hot.getCellEditor(this.cellProperties),{row:o,col:s}=e.highlight,{rowIndexMapper:n,columnIndexMapper:i}=this.hot,r=n.isHidden(this.hot.toPhysicalRow(o))||i.isHidden(this.hot.toPhysicalColumn(s));return!(this.cellProperties.readOnly||!t||r)}moveSelectionAfterEnter(e){const t={..."function"==typeof this.tableMeta.enterMoves?this.tableMeta.enterMoves(e):this.tableMeta.enterMoves};e.shiftKey&&(t.row=-t.row,t.col=-t.col),this.hot.selection.isMultiple()?this.selection.transformFocus(t.row,t.col):this.selection.transformStart(t.row,t.col,!0)}destroy(){this.destroyed=!0,this.eventManager.destroy()}}function g(e){const t=this.hot.getSelectedRangeLast();if(!this.hot.isListening()||!t||t.highlight.isHeader()||(0,r.isImmediatePropagationStopped)(e))return;const{keyCode:o}=e,s=(e.ctrlKey||e.metaKey)&&!e.altKey;(!this.activeEditor||this.activeEditor&&!this.activeEditor.isWaiting())&&((0,i.isFunctionKey)(o)||(0,i.isCtrlMetaKey)(o)||s||this.isEditorOpened()||this.openEditor("",e))}function f(e,t){t.isCell()&&this.openEditor(null,e,!0)}const p=new WeakMap;d.getInstance=function(e,t,o){let s=p.get(e);return s||(s=new d(e,t,o),p.set(e,s)),s};t.default=d},36854:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834),o(15724);var n=s(o(85707)),i=o(56138),r=o(9175),l=o(9893),a=o(38893),h=o(59777),c=o(71257),u=o(28890),d=o(36748),g=o(92692);function f(e,t,o){(function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")})(e,t),t.set(e,o)}function p(e,t){return e.get(function(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}(e,t))}const m=t.EDITOR_TYPE="autocomplete";var w=new WeakMap;class C extends i.HandsontableEditor{constructor(){super(...arguments),(0,n.default)(this,"query",null),(0,n.default)(this,"strippedChoices",[]),(0,n.default)(this,"rawChoices",[]),f(this,w,this.hot.guid.slice(0,9)),(0,n.default)(this,"sortByRelevance",(function(e,t,o){const s=[],n=[],i=e.length;let r,l,c,u,d=t.length;if(0===i){for(c=0;c<d;c++)n.push(c);return n}for(c=0;c<d;c++){if(l=(0,h.stripTags)((0,a.stringify)(t[c])),o)u=l.indexOf(e);else{const t=this.cellProperties.locale;u=l.toLocaleLowerCase(t).indexOf(e.toLocaleLowerCase(t))}-1!==u&&(r=l.length-u-i,s.push({baseIndex:c,index:u,charsLeft:r,value:l}))}for(s.sort(((e,t)=>{if(-1===t.index)return-1;if(-1===e.index)return 1;if(e.index<t.index)return-1;if(t.index<e.index)return 1;if(e.index===t.index){if(e.charsLeft<t.charsLeft)return-1;if(e.charsLeft>t.charsLeft)return 1}return 0})),c=0,d=s.length;c<d;c++)n.push(s[c].baseIndex);return n}))}static get EDITOR_TYPE(){return m}getValue(){const e=this.rawChoices.find((e=>this.stripValueIfNeeded(e)===this.TEXTAREA.value));return(0,a.isDefined)(e)?e:this.TEXTAREA.value}createElements(){super.createElements(),(0,l.addClass)(this.htContainer,"autocompleteEditor"),(0,l.addClass)(this.htContainer,-1===this.hot.rootWindow.navigator.platform.indexOf("Mac")?"":"htMacScroll"),this.hot.getSettings().ariaTags&&(0,l.setAttribute)(this.TEXTAREA,[(0,g.A11Y_TEXT)(),(0,g.A11Y_COMBOBOX)(),(0,g.A11Y_HASPOPUP)("listbox"),(0,g.A11Y_AUTOCOMPLETE)()])}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i),this.hot.getSettings().ariaTags&&(0,l.setAttribute)(this.TEXTAREA,[(0,g.A11Y_EXPANDED)("false"),(0,g.A11Y_CONTROLS)(`${p(w,this)}-listbox-${e}-${t}`)])}open(){super.open();const e=void 0===this.cellProperties.trimDropdown||this.cellProperties.trimDropdown,t=this.hot.getSettings().ariaTags,o=Array.isArray(this.cellProperties.source)?this.cellProperties.source:null,s=null==o?void 0:o.length,{row:n,col:i}=this;this.showEditableElement(),this.focus();let r=(0,l.getScrollbarWidth)();0===r&&(0,u.isMacOS)()&&(r+=15),this.addHook("beforeKeyDown",(e=>this.onBeforeKeyDown(e))),this.htEditor.updateSettings({colWidths:e?[(0,l.outerWidth)(this.TEXTAREA)-2]:void 0,width:e?(0,l.outerWidth)(this.TEXTAREA)+r:void 0,autoColumnSize:!0,renderer:(e,n,i,r,h,c,u)=>{(0,d.textRenderer)(e,n,i,r,h,c,u);const{filteringCaseSensitive:f,allowHtml:p,locale:m}=this.cellProperties,w=this.query;let C,v,y=(0,a.stringify)(c);y&&!p&&(C=!0===f?y.indexOf(w):y.toLocaleLowerCase(m).indexOf(w.toLocaleLowerCase(m)),-1!==C&&(v=y.substr(C,w.length),y=y.replace(v,`<strong>${v}</strong>`))),t&&(0,l.setAttribute)(n,[(0,g.A11Y_OPTION)(),...o?[(0,g.A11Y_SETSIZE)(s)]:[],...o?[(0,g.A11Y_POSINSET)(o.indexOf(c)+1)]:[],["id",`${this.htEditor.rootElement.id}_${i}-${r}`]]),n.innerHTML=y},afterSelectionEnd:(e,o)=>{if(t){const t=this.htEditor.getCell(e,o,!0);(0,l.setAttribute)(t,[(0,g.A11Y_SELECTED)()]),(0,l.setAttribute)(this.TEXTAREA,...(0,g.A11Y_ACTIVEDESCENDANT)(t.id))}}}),t&&((0,l.setAttribute)(this.htEditor.view._wt.wtOverlays.wtTable.TABLE,...(0,g.A11Y_PRESENTATION)()),(0,l.setAttribute)(this.htEditor.rootElement,[(0,g.A11Y_LISTBOX)(),(0,g.A11Y_LIVE)("polite"),(0,g.A11Y_RELEVANT)("text"),["id",`${p(w,this)}-listbox-${n}-${i}`]]),(0,l.setAttribute)(this.TEXTAREA,...(0,g.A11Y_EXPANDED)("true"))),this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}))}close(){this.removeHooksByKey("beforeKeyDown"),super.close(),this.hot.getSettings().ariaTags&&(0,l.setAttribute)(this.TEXTAREA,[(0,g.A11Y_EXPANDED)("false")])}discardEditor(e){super.discardEditor(e),this.hot.view.render()}queryChoices(e){const t=this.cellProperties.source;this.query=e,"function"==typeof t?t.call(this.cellProperties,e,(e=>{this.rawChoices=e,this.updateChoicesList(this.stripValuesIfNeeded(e))})):Array.isArray(t)?(this.rawChoices=t,this.updateChoicesList(this.stripValuesIfNeeded(t))):this.updateChoicesList([])}updateChoicesList(e){const t=(0,l.getCaretPosition)(this.TEXTAREA),o=(0,l.getSelectionEndPosition)(this.TEXTAREA),s=this.cellProperties.sortByRelevance,n=this.cellProperties.filter;let i=null,a=null,h=e;s&&(i=this.sortByRelevance(this.stripValueIfNeeded(this.getValue()),h,this.cellProperties.filteringCaseSensitive));const c=Array.isArray(i)?i.length:0;if(!1===n)c&&(a=i[0]);else{const e=[];for(let t=0,o=h.length;t<o&&!(s&&c<=t);t++)c?e.push(h[i[t]]):e.push(h[t]);a=0,h=e}this.strippedChoices=h,0===h.length?this.htEditor.rootElement.style.display="none":this.htEditor.rootElement.style.display="",this.htEditor.loadData((0,r.pivot)([h])),h.length>0&&(this.updateDropdownDimensions(),this.flipDropdownIfNeeded(),!0===this.cellProperties.strict&&this.highlightBestMatchingChoice(a)),this.hot.listen(),(0,l.setCaretPosition)(this.TEXTAREA,t,t===o?void 0:o)}flipDropdownIfNeeded(){const e=(0,l.getTrimmingContainer)(this.hot.view._wt.wtTable.TABLE),t=e===this.hot.rootWindow,o=this.cellProperties.preventOverflow;if(t||!t&&(o||"horizontal"===o))return!1;const s=(0,l.offset)(this.TEXTAREA),n=(0,l.outerHeight)(this.TEXTAREA),i=this.getDropdownHeight(),r=e.scrollTop,a=(0,l.outerHeight)(this.hot.view._wt.wtTable.THEAD),h=(0,l.offset)(e),c=s.top-h.top-a+r,u=e.scrollHeight-c-a-n,d=i>u&&c>u;return d?this.flipDropdown(i):this.unflipDropdown(),this.limitDropdownIfNeeded(d?c:u,i),d}limitDropdownIfNeeded(e,t){if(t>e){let o=0,s=0,n=0,i=null;do{n=this.htEditor.getRowHeight(s)||this.htEditor.view._wt.getSetting("defaultRowHeight"),o+=n,s+=1}while(o<e);i=o-n,this.htEditor.flipped&&(this.htEditor.rootElement.style.top=parseInt(this.htEditor.rootElement.style.top,10)+t-i+"px"),this.setDropdownHeight(o-n)}}flipDropdown(e){const t=this.htEditor.rootElement.style;t.position="absolute",t.top=-e+"px",this.htEditor.flipped=!0}unflipDropdown(){const e=this.htEditor.rootElement.style;e.position="absolute",e.top="",this.htEditor.flipped=void 0}updateDropdownDimensions(){const e=this.htEditor.getColWidth(0)+(0,l.getScrollbarWidth)(this.hot.rootDocument)+2,t=this.cellProperties.trimDropdown;this.htEditor.updateSettings({height:this.getDropdownHeight(),width:t?void 0:e}),this.htEditor.view._wt.wtTable.alignOverlaysWithTrimmingContainer()}setDropdownHeight(e){this.htEditor.updateSettings({height:e})}highlightBestMatchingChoice(e){"number"==typeof e?this.htEditor.selectCell(e,0,void 0,void 0,void 0,!1):this.htEditor.deselectCell()}getDropdownHeight(){const e=this.htEditor.getRowHeight(0)||23,t=this.cellProperties.visibleRows;return this.strippedChoices.length>=t?t*e:this.strippedChoices.length*e+8}stripValueIfNeeded(e){return this.stripValuesIfNeeded([e])[0]}stripValuesIfNeeded(e){const{allowHtml:t}=this.cellProperties,o=(0,r.arrayMap)(e,(e=>(0,a.stringify)(e)));return(0,r.arrayMap)(o,(e=>t?e:(0,h.stripTags)(e)))}allowKeyEventPropagation(e){const t=this.htEditor.getSelectedRangeLast(),o=t?t.from.row:-1;let s=!1;return e===c.KEY_CODES.ARROW_DOWN&&o>0&&o<this.htEditor.countRows()-1&&(s=!0),e===c.KEY_CODES.ARROW_UP&&o>-1&&(s=!0),s}onBeforeKeyDown(e){if((0,c.isPrintableChar)(e.keyCode)||e.keyCode===c.KEY_CODES.BACKSPACE||e.keyCode===c.KEY_CODES.DELETE||e.keyCode===c.KEY_CODES.INSERT){let t=10;if(e.keyCode===c.KEY_CODES.C&&(e.ctrlKey||e.metaKey))return;this.isOpened()||(t+=10),this.htEditor&&this.hot._registerTimeout((()=>{this.queryChoices(this.TEXTAREA.value)}),t)}}}t.AutocompleteEditor=C},80115:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(36854);t.EDITOR_TYPE=s.EDITOR_TYPE,t.AutocompleteEditor=s.AutocompleteEditor},63180:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=o(38893),r=o(13911),l=s(o(31872)),a=o(9893);const h=t.EDITOR_TYPE="base",c=t.EDITOR_STATE=Object.freeze({VIRGIN:"STATE_VIRGIN",EDITING:"STATE_EDITING",WAITING:"STATE_WAITING",FINISHED:"STATE_FINISHED"});class u{static get EDITOR_TYPE(){return h}constructor(e){(0,n.default)(this,"hot",void 0),(0,n.default)(this,"state",c.VIRGIN),(0,n.default)(this,"_opened",!1),(0,n.default)(this,"_fullEditMode",!1),(0,n.default)(this,"_closeCallback",null),(0,n.default)(this,"TD",null),(0,n.default)(this,"row",null),(0,n.default)(this,"col",null),(0,n.default)(this,"prop",null),(0,n.default)(this,"originalValue",null),(0,n.default)(this,"cellProperties",null),this.hot=e,this.init()}_fireCallbacks(e){this._closeCallback&&(this._closeCallback(e),this._closeCallback=null)}init(){}getValue(){throw Error("Editor getValue() method unimplemented")}setValue(){throw Error("Editor setValue() method unimplemented")}open(){throw Error("Editor open() method unimplemented")}close(){throw Error("Editor close() method unimplemented")}prepare(e,t,o,s,n,i){this.TD=s,this.row=e,this.col=t,this.prop=o,this.originalValue=n,this.cellProperties=i,this.state=this.isOpened()?this.state:c.VIRGIN}extend(){return class extends this.constructor{}}saveValue(e,t){let o,s,n,i;if(t){const e=this.hot.getSelectedLast();o=Math.max(Math.min(e[0],e[2]),0),s=Math.max(Math.min(e[1],e[3]),0),n=Math.max(e[0],e[2]),i=Math.max(e[1],e[3])}else[o,s,n,i]=[this.row,this.col,null,null];const r=this.hot.runHooks("modifyGetCellCoords",o,s);Array.isArray(r)&&([o,s]=r),this.hot.populateFromArray(o,s,e,n,i,"edit")}beginEditing(e,t){if(this.state!==c.VIRGIN)return;const o=this.hot,s=o.rowIndexMapper.getRenderableFromVisualIndex(this.row),n=o.columnIndexMapper.getRenderableFromVisualIndex(this.col);if(o.view.scrollViewport(o._createCellCoords(s,n)),this.state=c.EDITING,this.isInFullEditMode()){const t="string"==typeof e?e:(0,i.stringify)(this.originalValue);this.setValue(t)}this.open(t),this._opened=!0,this.focus(),o.view.render(),o.runHooks("afterBeginEditing",this.row,this.col)}finishEditing(e,t,o){let s;if(o){const e=this._closeCallback;this._closeCallback=t=>{e&&e(t),o(t),this.hot.view.render()}}if(!this.isWaiting())if(this.state!==c.VIRGIN){if(this.state===c.EDITING){if(e)return this.cancelChanges(),void this.hot.view.render();const o=this.getValue();s=this.cellProperties.trimWhitespace?[["string"==typeof o?String.prototype.trim.call(o||""):o]]:[[o]],this.state=c.WAITING,this.saveValue(s,t),this.hot.getCellValidator(this.cellProperties)?this.hot.addHookOnce("postAfterValidate",(e=>{this.state=c.FINISHED,this.discardEditor(e)})):(this.state=c.FINISHED,this.discardEditor(!0))}}else this.hot._registerTimeout((()=>{this._fireCallbacks(!0)}))}cancelChanges(){this.state=c.FINISHED,this.discardEditor()}discardEditor(e){if(this.state===c.FINISHED)if(!1===e&&!0!==this.cellProperties.allowInvalid)this.hot.selectCell(this.row,this.col),this.focus(),this.state=c.EDITING,this._fireCallbacks(!1);else{this.close(),this._opened=!1,this._fullEditMode=!1,this.state=c.VIRGIN,this._fireCallbacks(!0);this.hot.getShortcutManager().setActiveContextName("grid")}}enableFullEditMode(){this._fullEditMode=!0}isInFullEditMode(){return this._fullEditMode}isOpened(){return this._opened}isWaiting(){return this.state===c.WAITING}getEditedCellRect(){var e;const t=this.getEditedCell();if(!t)return;const{wtOverlays:o,wtViewport:s}=this.hot.view._wt,n=this.hot.rootWindow,i=(0,a.offset)(t),r=(0,a.outerWidth)(t),l=(0,a.offset)(this.hot.rootElement),h=(0,a.outerWidth)(this.hot.rootElement),c=o.topOverlay.holder,u=o.inlineStartOverlay.holder,d=c!==n?c.scrollTop:0,g=u!==n?u.scrollLeft:0,f=n.innerWidth-l.left-h,{wtTable:p}=null!==(e=o.getParentOverlay(t))&&void 0!==e?e:this.hot.view._wt,m=p.name,w=["master","inline_start"].includes(m)?d:0,C=["master","top","bottom"].includes(m)?g:0,v=i.top===l.top?0:1;let y=i.top-l.top-v-w,E=0;E=this.hot.isRtl()?n.innerWidth-i.left-r-f-1+C:i.left-l.left-1-C,["top","top_inline_start_corner"].includes(m)&&(y+=o.topOverlay.getOverlayOffset()),["inline_start","top_inline_start_corner"].includes(m)&&(E+=Math.abs(o.inlineStartOverlay.getOverlayOffset()));const S=this.hot.hasColHeaders(),R=this.hot.rowIndexMapper.getRenderableFromVisualIndex(this.row),b=this.hot.columnIndexMapper.getRenderableFromVisualIndex(this.col),_=this.hot.rowIndexMapper.getRenderableIndexesLength()-this.hot.view._wt.getSetting("fixedRowsBottom");(S&&R<=0||R===_)&&(y+=1),b<=0&&(E+=1);const T=s.rowsRenderCalculator.startPosition,M=s.columnsRenderCalculator.startPosition,O=Math.abs(o.inlineStartOverlay.getScrollPosition()),I=o.topOverlay.getScrollPosition(),N=(0,a.getScrollbarWidth)(this.hot.rootDocument);let A=t.offsetTop;if(["inline_start","master"].includes(m)&&(A+=T-I),["bottom","bottom_inline_start_corner"].includes(m)){const{wtViewport:e,wtTable:t}=o.bottomOverlay.clone;A+=e.getWorkspaceHeight()-t.getHeight()-N}let P=t.offsetLeft;this.hot.isRtl()?(P=P>=0?p.getWidth()-t.offsetLeft:Math.abs(P),P+=M-O-r):["top","master","bottom"].includes(m)&&(P+=M-O);const x=(0,a.getComputedStyle)(this.TD,this.hot.rootWindow),H=this.hot.isRtl()?"borderRightWidth":"borderLeftWidth",D=parseInt(x[H],10)>0?0:1,L=parseInt(x.borderTopWidth,10)>0?0:1,k=(0,a.outerWidth)(t)+D,V=(0,a.outerHeight)(t)+L,F=(0,a.hasVerticalScrollbar)(c)?N:0,W=(0,a.hasHorizontalScrollbar)(u)?N:0,B=this.hot.view.maximumVisibleElementWidth(P)-F+D;return{top:y,start:E,height:V,maxHeight:Math.max(this.hot.view.maximumVisibleElementHeight(A)-W+L,23),width:k,maxWidth:B}}getEditedCellsLayerClass(){switch(this.checkEditorSection()){case"inline-start":return"ht_clone_left ht_clone_inline_start";case"bottom":return"ht_clone_bottom";case"bottom-inline-start-corner":return"ht_clone_bottom_left_corner ht_clone_bottom_inline_start_corner";case"top":return"ht_clone_top";case"top-inline-start-corner":return"ht_clone_top_left_corner ht_clone_top_inline_start_corner";default:return"ht_clone_master"}}getEditedCell(){return this.hot.getCell(this.row,this.col,!0)}checkEditorSection(){const e=this.hot.countRows();let t="";return this.row<this.hot.getSettings().fixedRowsTop?t=this.col<this.hot.getSettings().fixedColumnsStart?"top-inline-start-corner":"top":this.hot.getSettings().fixedRowsBottom&&this.row>=e-this.hot.getSettings().fixedRowsBottom?t=this.col<this.hot.getSettings().fixedColumnsStart?"bottom-inline-start-corner":"bottom":this.col<this.hot.getSettings().fixedColumnsStart&&(t="inline-start"),t}}t.BaseEditor=u,(0,r.mixin)(u,l.default)},52618:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(63180);t.EDITOR_STATE=s.EDITOR_STATE,t.EDITOR_TYPE=s.EDITOR_TYPE,t.BaseEditor=s.BaseEditor},11936:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(52618),n=o(9893);const i=t.EDITOR_TYPE="checkbox";class r extends s.BaseEditor{static get EDITOR_TYPE(){return i}beginEditing(e,t){if(t&&"mouseup"===t.type&&"TD"===t.target.nodeName){const e=this.TD.querySelector('input[type="checkbox"]');(0,n.hasClass)(e,"htBadValue")||e.click()}}finishEditing(){}init(){}open(){}close(){}getValue(){}setValue(){}focus(){}}t.CheckboxEditor=r},39626:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(11936);t.EDITOR_TYPE=s.EDITOR_TYPE,t.CheckboxEditor=s.CheckboxEditor},10978:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,o(67834);var n=s(o(85707)),i=s(o(86798)),r=s(o(75972)),l=o(52618),a=o(64952),h=o(9893),c=o(13911),u=o(71257);o(17728);const d=t.EDITOR_TYPE="date",g="dateEditor";class f extends a.TextEditor{constructor(){super(...arguments),(0,n.default)(this,"defaultDateFormat","DD/MM/YYYY"),(0,n.default)(this,"parentDestroyed",!1),(0,n.default)(this,"$datePicker",null)}static get EDITOR_TYPE(){return d}init(){if("function"!=typeof i.default)throw new Error("You need to include moment.js to your project.");if("function"!=typeof r.default)throw new Error("You need to include Pikaday to your project.");super.init(),this.hot.addHook("afterDestroy",(()=>{this.parentDestroyed=!0,this.destroyElements()}))}createElements(){super.createElements(),this.datePicker=this.hot.rootDocument.createElement("DIV"),this.datePickerStyle=this.datePicker.style,this.datePickerStyle.position="absolute",this.datePickerStyle.top=0,this.datePickerStyle.left=0,this.datePickerStyle.zIndex=9999,this.datePicker.setAttribute("dir",this.hot.isRtl()?"rtl":"ltr"),(0,h.addClass)(this.datePicker,"htDatepickerHolder"),this.hot.rootDocument.body.appendChild(this.datePicker),this.eventManager.addEventListener(this.datePicker,"mousedown",(e=>{(0,h.hasClass)(e.target,"pika-day")&&this.hideDatepicker(),e.stopPropagation()}))}destroyElements(){const e=this.datePicker.parentNode;this.$datePicker&&this.$datePicker.destroy(),e&&e.removeChild(this.datePicker)}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i)}open(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;const t=this.hot.getShortcutManager().getContext("editor");this.showDatepicker(e),super.open(),t.addShortcuts([{keys:[["ArrowLeft"]],callback:()=>{this.$datePicker.adjustDate("subtract",1)}},{keys:[["ArrowRight"]],callback:()=>{this.$datePicker.adjustDate("add",1)}},{keys:[["ArrowUp"]],callback:()=>{this.$datePicker.adjustDate("subtract",7)}},{keys:[["ArrowDown"]],callback:()=>{this.$datePicker.adjustDate("add",7)}}],{group:g})}close(){var e;this._opened=!1,null!==(e=this.$datePicker)&&void 0!==e&&e.destroy&&this.$datePicker.destroy(),this.hot._registerTimeout((()=>{const e=this.hot._getEditorManager();e.closeEditor(),this.hot.view.render(),e.prepareEditor()}));this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(g),super.close()}finishEditing(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super.finishEditing(e,t)}showDatepicker(e){const t=this.cellProperties.dateFormat||this.defaultDateFormat,o=this.hot.view.isMouseDown(),s=!!e&&(0,u.isFunctionKey)(e.keyCode);let n;this.datePicker.style.display="block",this.$datePicker=new r.default(this.getDatePickerConfig()),"function"==typeof this.$datePicker.useMoment&&this.$datePicker.useMoment(i.default),this.$datePicker._onInputFocus=function(){},this.originalValue?(n=this.originalValue,(0,i.default)(n,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(n,t),!0),this.getValue()!==this.originalValue&&this.setValue(this.originalValue),s||o||this.setValue("")):this.cellProperties.defaultDate?(n=this.cellProperties.defaultDate,(0,i.default)(n,t,!0).isValid()&&this.$datePicker.setMoment((0,i.default)(n,t),!0),s||o||this.setValue("")):this.$datePicker.gotoToday()}hideDatepicker(){this.datePickerStyle.display="none",this.$datePicker.hide()}getDatePickerConfig(){const e=this.TEXTAREA,t={};this.cellProperties&&this.cellProperties.datePickerConfig&&(0,c.deepExtend)(t,this.cellProperties.datePickerConfig);const o=t.onSelect,s=t.onClose;return t.field=e,t.trigger=e,t.container=this.datePicker,t.bound=!1,t.keyboardInput=!1,t.format=t.format||this.defaultDateFormat,t.reposition=t.reposition||!1,t.isRTL=!1,t.onSelect=e=>{let t=e;isNaN(t.getTime())||(t=(0,i.default)(t).format(this.cellProperties.dateFormat||this.defaultDateFormat)),this.setValue(t),o&&o()},t.onClose=()=>{this.parentDestroyed||this.finishEditing(!1),s&&s()},t}refreshDimensions(e){var t;if(super.refreshDimensions(e),this.state!==l.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.hideDatepicker();const{rowIndexMapper:o,columnIndexMapper:s}=this.hot,{wtOverlays:n}=this.hot.view._wt,{wtTable:i}=null!==(t=n.getParentOverlay(this.TD))&&void 0!==t?t:this.hot.view._wt,r=o.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleRow()),a=o.getVisualFromRenderableIndex(i.getLastPartiallyVisibleRow()),c=s.getVisualFromRenderableIndex(i.getFirstPartiallyVisibleColumn()),u=s.getVisualFromRenderableIndex(i.getLastPartiallyVisibleColumn());if(this.row>=r&&this.row<=a&&this.col>=c&&this.col<=u){const e=this.TD.getBoundingClientRect();this.datePickerStyle.top=`${this.hot.rootWindow.pageYOffset+e.top+(0,h.outerHeight)(this.TD)}px`;let t=this.hot.rootWindow.pageXOffset;this.hot.isRtl()?t+=e.right-(0,h.outerWidth)(this.datePicker):t+=e.left,this.datePickerStyle.left=`${t}px`}else this.hideDatepicker()}}t.DateEditor=f},59127:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(10978);t.EDITOR_TYPE=s.EDITOR_TYPE,t.DateEditor=s.DateEditor},52236:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=o(80115),i=s(o(56937));const r=t.EDITOR_TYPE="dropdown";class l extends n.AutocompleteEditor{static get EDITOR_TYPE(){return r}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i),this.cellProperties.filter=!1,this.cellProperties.strict=!0}}t.DropdownEditor=l,i.default.getSingleton().add("beforeValidate",(function(e,t,o){const s=this.propToCol(o);if(Number.isInteger(s)){const e=this.getCellMeta(t,s);e.editor===l&&void 0===e.strict&&(e.filter=!1,e.strict=!0)}}))},50486:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(52236);t.EDITOR_TYPE=s.EDITOR_TYPE,t.DropdownEditor=s.DropdownEditor},29408:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952),n=o(9893),i=o(79729),r=o(13911),l=o(37947);const a="handsontableEditor",h=t.EDITOR_TYPE="handsontable";class c extends s.TextEditor{static get EDITOR_TYPE(){return h}open(){super.open(),this.htEditor&&this.htEditor.destroy(),"none"===this.htContainer.style.display&&(this.htContainer.style.display=""),this.htEditor=new this.hot.constructor(this.htContainer,this.htOptions),this.htEditor.init(),this.htEditor.rootElement.style.display="",this.cellProperties.strict?this.htEditor.selectCell(0,0):this.htEditor.deselectCell(),(0,n.setCaretPosition)(this.TEXTAREA,0,this.TEXTAREA.value.length),this.refreshDimensions()}close(){this.htEditor&&(this.htEditor.rootElement.style.display="none"),this.removeHooksByKey("beforeKeyDown"),super.close()}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i);const l=this,a={startRows:0,startCols:0,minRows:0,minCols:0,className:"listbox",copyPaste:!1,autoColumnSize:!1,autoRowSize:!1,readOnly:!0,fillHandle:!1,autoWrapCol:!1,autoWrapRow:!1,ariaTags:!1,afterOnCellMouseDown(e,t){const o=this.getSourceData(t.row,t.col);void 0!==o&&l.setValue(o),l.hot.destroyEditor()},preventWheel:!0,layoutDirection:this.hot.isRtl()?"rtl":"ltr"};this.cellProperties.handsontable&&(0,r.extend)(a,i.handsontable),this.htOptions=a}beginEditing(e,t){const o=this.hot.getSettings().onBeginEditing;o&&!1===o()||super.beginEditing(e,t)}createElements(){super.createElements();const e=this.hot.rootDocument.createElement("DIV");e.className="handsontableEditor",this.TEXTAREA_PARENT.appendChild(e),this.htContainer=e,this.assignHooks()}finishEditing(e,t,o){if(this.htEditor&&this.htEditor.isListening()&&this.hot.listen(),this.htEditor&&this.htEditor.getSelectedLast()){const e=this.htEditor.getValue();void 0!==e&&this.setValue(e)}super.finishEditing(e,t,o)}assignHooks(){this.hot.addHook("afterDestroy",(()=>{this.htEditor&&this.htEditor.destroy()}))}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor");super.registerShortcuts();const t={group:a,relativeToGroup:l.EDITOR_EDIT_GROUP,position:"before"},o=(e,t)=>{const o=this.htEditor;if(void 0!==e&&(e<0||o.flipped&&e>o.countRows()-1?o.deselectCell():o.selectCell(e,0),o.getData().length))return t.preventDefault(),(0,i.stopImmediatePropagation)(t),this.hot.listen(),this.TEXTAREA.focus(),!1};e.addShortcuts([{keys:[["ArrowUp"]],callback:e=>{const t=this.htEditor;let s,n;return!t.getSelectedLast()&&t.flipped?s=t.countRows()-1:t.getSelectedLast()&&(t.flipped?(n=t.getSelectedLast()[0],s=Math.max(0,n-1)):(n=t.getSelectedLast()[0],s=n-1)),o(s,e)},preventDefault:!1},{keys:[["ArrowDown"]],callback:e=>{const t=this.htEditor;let s,n;if(t.getSelectedLast()||t.flipped){if(t.getSelectedLast())if(t.flipped)s=t.getSelectedLast()[0]+1;else if(!t.flipped){const e=t.countRows()-1;n=t.getSelectedLast()[0],s=Math.min(e,n+1)}}else s=0;return o(s,e)},preventDefault:!1}],t)}unregisterShortcuts(){super.unregisterShortcuts();this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(a)}}t.HandsontableEditor=c},56138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(29408);t.EDITOR_TYPE=s.EDITOR_TYPE,t.HandsontableEditor=s.HandsontableEditor},83645:(e,t,o)=>{"use strict";t.__esModule=!0,t.registerAllEditors=function(){(0,f.registerEditor)(n.BaseEditor),(0,f.registerEditor)(s.AutocompleteEditor),(0,f.registerEditor)(i.CheckboxEditor),(0,f.registerEditor)(r.DateEditor),(0,f.registerEditor)(l.DropdownEditor),(0,f.registerEditor)(a.HandsontableEditor),(0,f.registerEditor)(h.NumericEditor),(0,f.registerEditor)(c.PasswordEditor),(0,f.registerEditor)(u.SelectEditor),(0,f.registerEditor)(d.TextEditor),(0,f.registerEditor)(g.TimeEditor)};var s=o(80115);t.AutocompleteEditor=s.AutocompleteEditor,t.AUTOCOMPLETE_EDITOR=s.EDITOR_TYPE;var n=o(52618);t.BaseEditor=n.BaseEditor,t.BASE_EDITOR=n.EDITOR_TYPE;var i=o(39626);t.CheckboxEditor=i.CheckboxEditor,t.CHECKBOX_EDITOR=i.EDITOR_TYPE;var r=o(59127);t.DateEditor=r.DateEditor,t.DATE_EDITOR=r.EDITOR_TYPE;var l=o(50486);t.DropdownEditor=l.DropdownEditor,t.DROPDOWN_EDITOR=l.EDITOR_TYPE;var a=o(56138);t.HandsontableEditor=a.HandsontableEditor,t.HANDSONTABLE_EDITOR=a.EDITOR_TYPE;var h=o(33972);t.NumericEditor=h.NumericEditor,t.NUMERIC_EDITOR=h.EDITOR_TYPE;var c=o(46138);t.PasswordEditor=c.PasswordEditor,t.PASSWORD_EDITOR=c.EDITOR_TYPE;var u=o(7507);t.SelectEditor=u.SelectEditor,t.SELECT_EDITOR=u.EDITOR_TYPE;var d=o(64952);t.TextEditor=d.TextEditor,t.TEXT_EDITOR=d.EDITOR_TYPE;var g=o(14902);t.TimeEditor=g.TimeEditor,t.TIME_EDITOR=g.EDITOR_TYPE;var f=o(84558);t.registerEditor=f.registerEditor,t.RegisteredEditor=f.RegisteredEditor,t._getEditorInstance=f._getEditorInstance,t.getEditor=f.getEditor,t.getEditorInstance=f.getEditorInstance,t.getRegisteredEditorNames=f.getRegisteredEditorNames,t.getRegisteredEditors=f.getRegisteredEditors,t.hasEditor=f.hasEditor},33972:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(29230);t.EDITOR_TYPE=s.EDITOR_TYPE,t.NumericEditor=s.NumericEditor},29230:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952);const n=t.EDITOR_TYPE="numeric";class i extends s.TextEditor{static get EDITOR_TYPE(){return n}}t.NumericEditor=i},46138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(99896);t.EDITOR_TYPE=s.EDITOR_TYPE,t.PasswordEditor=s.PasswordEditor},99896:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952),n=o(9893);const i=t.EDITOR_TYPE="password";class r extends s.TextEditor{static get EDITOR_TYPE(){return i}createElements(){super.createElements(),this.TEXTAREA=this.hot.rootDocument.createElement("input"),this.TEXTAREA.setAttribute("type","password"),this.TEXTAREA.setAttribute("data-hot-input",""),this.TEXTAREA.className="handsontableInput",this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,(0,n.empty)(this.TEXTAREA_PARENT),this.TEXTAREA_PARENT.appendChild(this.TEXTAREA)}}t.PasswordEditor=r},84558:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.RegisteredEditor=d,t.getEditorInstance=t._getEditorInstance=function(e,t){let o;if("function"==typeof e)r.get(e)||g(null,e),o=r.get(e);else{if("string"!=typeof e)throw Error('Only strings and functions can be passed as "editor" parameter');o=a(e)}if(!o)throw Error(`No editor registered under name "${e}"`);return o.getInstance(t)},t.getEditor=function(e){if("function"==typeof e)return e;if(!h(e))throw Error(`No registered editor found under "${e}" name`);return a(e).getConstructor()},t.registerEditor=g,o(67834);var n=s(o(56937)),i=s(o(71263));const r=new WeakMap,{register:l,getItem:a,hasItem:h,getNames:c,getValues:u}=(0,i.default)("editors");function d(e){const t={},o=e;this.getConstructor=function(){return e},this.getInstance=function(e){return e.guid in t||(t[e.guid]=new o(e)),t[e.guid]},n.default.getSingleton().add("afterDestroy",(function(){t[this.guid]=null}))}function g(e,t){e&&"string"!=typeof e&&(e=(t=e).EDITOR_TYPE);const o=new d(t);"string"==typeof e&&l(e,o),r.set(t,o)}t.getRegisteredEditors=u,t.getRegisteredEditorNames=c,t.hasEditor=h},7507:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(24138);t.EDITOR_TYPE=s.EDITOR_TYPE,t.SelectEditor=s.SelectEditor},24138:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(52618),n=o(9893),i=o(13911);const r="ht_editor_visible",l="selectEditor",a=t.EDITOR_TYPE="select";class h extends s.BaseEditor{static get EDITOR_TYPE(){return a}init(){this.select=this.hot.rootDocument.createElement("select"),this.select.setAttribute("data-hot-input","true"),this.select.style.display="none",(0,n.addClass)(this.select,"htSelectEditor"),this.hot.rootElement.appendChild(this.select),this.registerHooks()}getValue(){return this.select.value}setValue(e){this.select.value=e}open(){this._opened=!0,this.refreshDimensions(),this.select.style.display="";this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this._opened=!1,this.select.style.display="none",(0,n.hasClass)(this.select,r)&&(0,n.removeClass)(this.select,r),this.unregisterShortcuts(),this.clearHooks()}focus(){this.select.focus()}registerHooks(){this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>this.refreshDimensions())),this.addHook("afterRowResize",(()=>this.refreshDimensions()))}prepare(e,t,o,s,r,l){super.prepare(e,t,o,s,r,l);const a=this.cellProperties.selectOptions;let h;h="function"==typeof a?this.prepareOptions(a(this.row,this.col,this.prop)):this.prepareOptions(a),(0,n.empty)(this.select),(0,i.objectEach)(h,((e,t)=>{const o=this.hot.rootDocument.createElement("OPTION");o.value=t,(0,n.fastInnerHTML)(o,e),this.select.appendChild(o)}))}prepareOptions(e){let t={};if(Array.isArray(e))for(let o=0,s=e.length;o<s;o++)t[e[o]]=e[o];else"object"==typeof e&&(t=e);return t}refreshValue(){const e=this.hot.getSourceDataAtCell(this.row,this.prop);this.originalValue=e,this.setValue(e),this.refreshDimensions()}refreshDimensions(){if(this.state!==s.EDITOR_STATE.EDITING)return;if(this.TD=this.getEditedCell(),!this.TD)return void this.close();const{top:e,start:t,width:o,height:i}=this.getEditedCellRect(),l=this.select.style;l.height=`${i}px`,l.width=`${o}px`,l.top=`${e}px`,l[this.hot.isRtl()?"right":"left"]=`${t}px`,l.margin="0px",(0,n.addClass)(this.select,r)}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={group:l};this.isInFullEditMode()&&e.addShortcuts([{keys:[["ArrowUp"]],callback:()=>{const e=this.select.selectedIndex-1;e>=0&&(this.select[e].selected=!0)}},{keys:[["ArrowDown"]],callback:()=>{const e=this.select.selectedIndex+1;e<=this.select.length-1&&(this.select[e].selected=!0)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(l)}}t.SelectEditor=h},40559:(e,t,o)=>{"use strict";t.__esModule=!0,t.updateCaretPosition=function(e,t){const o=(0,s.getCaretPosition)(t),n=t.value.split("\n");let i=o,r=0;for(let t=0;t<n.length;t++){const s=n[t];0!==t&&(r+=n[t-1].length+1);const l=r+s.length;if("home"===e?i=r:"end"===e&&(i=l),o<=l)break}(0,s.setCaretPosition)(t,i)};var s=o(9893)},64952:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(82540);t.EDITOR_TYPE=s.EDITOR_TYPE,t.TextEditor=s.TextEditor},82540:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0;var n=s(o(85707)),i=o(52618),r=s(o(82629)),l=o(28890),a=o(9893),h=o(87485),c=o(11139),u=o(38893),d=o(40559),g=o(92692);const f="ht_editor_hidden",p="textEditor",m=t.EDITOR_TYPE="text";class w extends i.BaseEditor{static get EDITOR_TYPE(){return m}constructor(e){super(e),(0,n.default)(this,"eventManager",new r.default(this)),(0,n.default)(this,"autoResize",(0,c.createInputElementResizer)(this.hot.rootDocument)),(0,n.default)(this,"TEXTAREA",void 0),(0,n.default)(this,"textareaStyle",void 0),(0,n.default)(this,"TEXTAREA_PARENT",void 0),(0,n.default)(this,"textareaParentStyle",void 0),(0,n.default)(this,"layerClass",void 0),this.eventManager=new r.default(this),this.createElements(),this.bindEvents(),this.hot.addHookOnce("afterDestroy",(()=>this.destroy()))}getValue(){return this.TEXTAREA.value}setValue(e){this.TEXTAREA.value=e}open(){this.refreshDimensions(),this.showEditableElement(),this.hot.getShortcutManager().setActiveContextName("editor"),this.registerShortcuts()}close(){this.autoResize.unObserve(),(0,a.isThisHotChild)(this.hot.rootDocument.activeElement,this.hot.rootElement)&&this.hot.listen(),this.hideEditableElement(),this.unregisterShortcuts()}prepare(e,t,o,s,n,r){const l=this.state;if(super.prepare(e,t,o,s,n,r),!r.readOnly){this.refreshDimensions(!0);const{allowInvalid:e}=r;e&&!this.isOpened()&&(this.TEXTAREA.value=""),l===i.EDITOR_STATE.FINISHED||this.isOpened()||this.hideEditableElement()}}beginEditing(e,t){this.state===i.EDITOR_STATE.VIRGIN&&(this.TEXTAREA.value="",super.beginEditing(e,t))}focus(){this.TEXTAREA.select(),(0,a.setCaretPosition)(this.TEXTAREA,this.TEXTAREA.value.length)}createElements(){const{rootDocument:e}=this.hot;this.TEXTAREA=e.createElement("TEXTAREA"),(0,a.setAttribute)(this.TEXTAREA,[["data-hot-input",""],(0,g.A11Y_TABINDEX)(-1)]),(0,a.addClass)(this.TEXTAREA,"handsontableInput"),this.textareaStyle=this.TEXTAREA.style,this.textareaStyle.width=0,this.textareaStyle.height=0,this.textareaStyle.overflowY="visible",this.TEXTAREA_PARENT=e.createElement("DIV"),(0,a.addClass)(this.TEXTAREA_PARENT,"handsontableInputHolder"),(0,a.hasClass)(this.TEXTAREA_PARENT,this.layerClass)&&(0,a.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,a.addClass)(this.TEXTAREA_PARENT,f),this.textareaParentStyle=this.TEXTAREA_PARENT.style,this.TEXTAREA_PARENT.appendChild(this.TEXTAREA),this.hot.rootElement.appendChild(this.TEXTAREA_PARENT)}hideEditableElement(){(0,l.isEdge)()&&(this.textareaStyle.textIndent="-99999px"),this.textareaStyle.overflowY="visible",this.textareaParentStyle.opacity="0",this.textareaParentStyle.height="1px",(0,a.removeClass)(this.TEXTAREA_PARENT,this.layerClass),(0,a.addClass)(this.TEXTAREA_PARENT,f)}showEditableElement(){this.textareaParentStyle.height="",this.textareaParentStyle.overflow="",this.textareaParentStyle.position="",this.textareaParentStyle[this.hot.isRtl()?"left":"right"]="auto",this.textareaParentStyle.opacity="1",this.textareaStyle.textIndent="";const e=this.TEXTAREA_PARENT.childNodes;let t=!1;(0,h.rangeEach)(e.length-1,(o=>{const s=e[o];if((0,a.hasClass)(s,"handsontableEditor"))return t=!0,!1})),(0,a.hasClass)(this.TEXTAREA_PARENT,f)&&(0,a.removeClass)(this.TEXTAREA_PARENT,f),t?(this.layerClass="ht_editor_visible",(0,a.addClass)(this.TEXTAREA_PARENT,this.layerClass)):(this.layerClass=this.getEditedCellsLayerClass(),(0,a.addClass)(this.TEXTAREA_PARENT,this.layerClass))}refreshValue(){const e=this.hot.toPhysicalRow(this.row),t=this.hot.getSourceDataAtCell(e,this.col);this.originalValue=t,this.setValue(t),this.refreshDimensions()}refreshDimensions(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.state!==i.EDITOR_STATE.EDITING&&!e)return;if(this.TD=this.getEditedCell(),!this.TD)return void(e||this.close());const{top:t,start:o,width:s,maxWidth:n,height:r,maxHeight:l}=this.getEditedCellRect();this.textareaParentStyle.top=`${t}px`,this.textareaParentStyle[this.hot.isRtl()?"right":"left"]=`${o}px`,this.showEditableElement();const h=(0,a.getComputedStyle)(this.TD,this.hot.rootWindow);this.TEXTAREA.style.fontSize=h.fontSize,this.TEXTAREA.style.fontFamily=h.fontFamily,this.TEXTAREA.style.backgroundColor=this.TD.style.backgroundColor;const c=(0,a.getComputedStyle)(this.TEXTAREA),u=parseInt(c.paddingLeft,10)+parseInt(c.paddingRight,10),d=parseInt(c.paddingTop,10)+parseInt(c.paddingBottom,10),g=s-u,f=r-d,p=n-u,m=l-d;this.autoResize.init(this.TEXTAREA,{minWidth:Math.min(g,p),minHeight:Math.min(f,m),maxWidth:p,maxHeight:m},!0)}bindEvents(){(0,l.isIOS)()&&this.eventManager.addEventListener(this.TEXTAREA,"focusout",(()=>this.finishEditing(!1))),this.addHook("afterScrollHorizontally",(()=>this.refreshDimensions())),this.addHook("afterScrollVertically",(()=>this.refreshDimensions())),this.addHook("afterColumnResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()})),this.addHook("afterRowResize",(()=>{this.refreshDimensions(),this.state===i.EDITOR_STATE.EDITING&&this.focus()}))}allowKeyEventPropagation(){}destroy(){this.eventManager.destroy(),this.clearHooks()}registerShortcuts(){const e=this.hot.getShortcutManager().getContext("editor"),t={runOnlyIf:()=>(0,u.isDefined)(this.hot.getSelected()),group:p},o=()=>{this.hot.rootDocument.execCommand("insertText",!1,"\n")};e.addShortcuts([{keys:[["Control","Enter"]],callback:()=>(o(),!1),runOnlyIf:e=>!this.hot.selection.isMultiple()&&!e.altKey},{keys:[["Meta","Enter"]],callback:()=>(o(),!1),runOnlyIf:()=>!this.hot.selection.isMultiple()},{keys:[["Alt","Enter"]],callback:()=>(o(),!1)},{keys:[["Home"]],callback:(e,t)=>{let[o]=t;(0,d.updateCaretPosition)(o,this.TEXTAREA)}},{keys:[["End"]],callback:(e,t)=>{let[o]=t;(0,d.updateCaretPosition)(o,this.TEXTAREA)}}],t)}unregisterShortcuts(){this.hot.getShortcutManager().getContext("editor").removeShortcutsByGroup(p)}}t.TextEditor=w},14902:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(9412);t.EDITOR_TYPE=s.EDITOR_TYPE,t.TimeEditor=s.TimeEditor},9412:(e,t,o)=>{"use strict";t.__esModule=!0;var s=o(64952);const n=t.EDITOR_TYPE="time";class i extends s.TextEditor{static get EDITOR_TYPE(){return n}prepare(e,t,o,s,n,i){super.prepare(e,t,o,s,n,i),this.TEXTAREA.dir="ltr"}}t.TimeEditor=i},82629:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t.getListenersCounter=function(){return r},o(15724);var n=s(o(85707)),i=o(79729);let r=0;t.default=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;(0,n.default)(this,"context",void 0),this.context=e||this,this.context.eventListeners||(this.context.eventListeners=[])}addEventListener(e,t,o){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];function n(e){o.call(this,function(e){const t=e.stopImmediatePropagation;return e.stopImmediatePropagation=function(){t.apply(this),(0,i.stopImmediatePropagation)(this)},e}(e))}return this.context.eventListeners.push({element:e,event:t,callback:o,callbackProxy:n,options:s,eventManager:this}),e.addEventListener(t,n,s),r+=1,()=>{this.removeEventListener(e,t,o)}}removeEventListener(e,t,o){let s,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=this.context.eventListeners.length;for(;i;)if(i-=1,s=this.context.eventListeners[i],s.event===t&&s.element===e){if(o&&o!==s.callback)continue;if(n&&s.eventManager!==this)continue;this.context.eventListeners.splice(i,1),s.element.removeEventListener(s.event,s.callbackProxy,s.options),r-=1}}clearEvents(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.context)return;let t=this.context.eventListeners.length;for(;t;){t-=1;const o=this.context.eventListeners[t];e&&o.eventManager!==this||(this.context.eventListeners.splice(t,1),o.element.removeEventListener(o.event,o.callbackProxy,o.options),r-=1)}}clear(){this.clearEvents()}destroy(){this.clearEvents(),this.context=null}destroyWithOwnEventsOnly(){this.clearEvents(!0),this.context=null}fireEvent(e,t){let o=e.document,s=e;o||(o=e.ownerDocument?e.ownerDocument:e,s=o.defaultView);const n={bubbles:!0,cancelable:"mousemove"!==t,view:s,detail:0,screenX:0,screenY:0,clientX:1,clientY:1,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:void 0};let i;o.createEvent?(i=o.createEvent("MouseEvents"),i.initMouseEvent(t,n.bubbles,n.cancelable,n.view,n.detail,n.screenX,n.screenY,n.clientX,n.clientY,n.ctrlKey,n.altKey,n.shiftKey,n.metaKey,n.button,n.relatedTarget||o.body.parentNode)):i=o.createEventObject(),e.dispatchEvent?e.dispatchEvent(i):e.fireEvent(`on${t}`,i)}}},26505:(e,t,o)=>{"use strict";t.__esModule=!0,o(67834);var s=o(83119),n=o(9893),i=o(78832);function r(e,t,o){l(e,t),t.set(e,o)}function l(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function a(e,t){return e.get(c(e,t))}function h(e,t,o){return e.set(c(e,t),o),o}function c(e,t,o){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:o;throw new TypeError("Private element is not present on this object")}const u=Object.freeze({CELL:"cell",MIXED:"mixed"});var d=new WeakMap,g=new WeakMap,f=new WeakMap,p=new WeakMap,m=new WeakMap,w=new WeakSet;function C(e){var t;const o=null===(t=a(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!o||!a(d,this).selection.isCellVisible(o))return void e(null);const s=a(d,this).getCell(o.row,o.col,!0);null===s?a(d,this).addHookOnce("afterScroll",(()=>{e(a(d,this).getCell(o.row,o.col,!0))})):e(s)}function v(){c(w,this,C).call(this,(e=>{const{activeElement:t}=a(d,this).rootDocument;t&&(0,n.isOutsideInput)(t)&&t.blur(),this.focusOnHighlightedCell(e)}))}function y(){c(w,this,C).call(this,(e=>{this.getFocusMode()===u.MIXED&&"TD"===e.nodeName&&this.refocusToEditorTextarea()}))}function E(e){"boolean"==typeof e.imeFastEdit&&this.setFocusMode(e.imeFastEdit?u.MIXED:u.CELL)}t.FocusManager=class{constructor(e){var t,o,s=this;l(t=this,o=w),o.add(t),r(this,d,void 0),r(this,g,void 0),r(this,f,1),r(this,p,null),r(this,m,new Map);const n=e.getSettings();h(d,this,e),h(g,this,n.imeFastEdit?u.MIXED:u.CELL),a(d,this).addHook("afterUpdateSettings",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,E).call(s,...t)})),a(d,this).addHook("afterSelection",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,v).call(s,...t)})),a(d,this).addHook("afterSelectionFocusSet",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,v).call(s,...t)})),a(d,this).addHook("afterSelectionEnd",(function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return c(w,s,y).call(s,...t)}))}getFocusMode(){return a(g,this)}setFocusMode(e){Object.values(u).includes(e)?h(g,this,e):(0,s.warn)(`"${e}" is not a valid focus mode.`)}getRefocusDelay(){return a(f,this)}setRefocusDelay(e){h(f,this,e)}setRefocusElementGetter(e){h(p,this,e)}getRefocusElement(){return"function"==typeof a(p,this)?a(p,this).call(this):null===(e=a(d,this).getActiveEditor())||void 0===e?void 0:e.TEXTAREA;var e}focusOnHighlightedCell(e){const t=e=>{var t,o;const s=null===(t=a(d,this).getSelectedRangeLast())||void 0===t?void 0:t.highlight;if(!s)return;let n=a(d,this).runHooks("modifyFocusedElement",s.row,s.col,e);n instanceof HTMLElement||(n=e),!n||null!==(o=a(d,this).getActiveEditor())&&void 0!==o&&o.isOpened()||n.focus({preventScroll:!0})};e?t(e):c(w,this,C).call(this,(e=>t(e)))}refocusToEditorTextarea(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a(f,this);const o=this.getRefocusElement();!a(d,this).getSettings().imeFastEdit||null!==(e=a(d,this).getActiveEditor())&&void 0!==e&&e.isOpened()||!o||(a(m,this).has(t)||a(m,this).set(t,(0,i.debounce)((()=>{o.select()}),t)),a(m,this).get(t)())}}},92692:(e,t)=>{"use strict";t.__esModule=!0;t.A11Y_TABINDEX=e=>["tabindex",e];t.A11Y_TREEGRID=()=>["role","treegrid"];t.A11Y_PRESENTATION=()=>["role","presentation"];t.A11Y_GRIDCELL=()=>["role","gridcell"];t.A11Y_ROWHEADER=()=>["role","rowheader"];t.A11Y_ROWGROUP=()=>["role","rowgroup"];t.A11Y_COLUMNHEADER=()=>["role","columnheader"];t.A11Y_ROW=()=>["role","row"];t.A11Y_MENU=()=>["role","menu"];t.A11Y_MENU_ITEM=()=>["role","menuitem"];t.A11Y_MENU_ITEM_CHECKBOX=()=>["role","menuitemcheckbox"];t.A11Y_COMBOBOX=()=>["role","combobox"];t.A11Y_LISTBOX=()=>["role","listbox"];t.A11Y_OPTION=()=>["role","option"];t.A11Y_CHECKBOX=()=>["role","checkbox"];t.A11Y_SCOPE_COL=()=>["scope","col"];t.A11Y_SCOPE_ROW=()=>["scope","row"];t.A11Y_TEXT=()=>["type","text"];t.A11Y_LABEL=e=>["aria-label",e];t.A11Y_HIDDEN=()=>["aria-hidden","true"];t.A11Y_DISABLED=()=>["aria-disabled","true"];t.A11Y_MULTISELECTABLE=()=>["aria-multiselectable","true"];t.A11Y_HASPOPUP=e=>["aria-haspopup",e];t.A11Y_ROWCOUNT=e=>["aria-rowcount",e];t.A11Y_COLCOUNT=e=>["aria-colcount",e];t.A11Y_ROWINDEX=e=>["aria-rowindex",e];t.A11Y_COLINDEX=e=>["aria-colindex",e];t.A11Y_EXPANDED=e=>["aria-expanded",e];t.A11Y_SORT=e=>["aria-sort",e];t.A11Y_READONLY=()=>["aria-readonly","true"];t.A11Y_INVALID=()=>["aria-invalid","true"];t.A11Y_CHECKED=e=>["aria-checked",e];t.A11Y_SELECTED=()=>["aria-selected","true"];t.A11Y_AUTOCOMPLETE=()=>["aria-autocomplete","list"];t.A11Y_CONTROLS=e=>["aria-controls",e];t.A11Y_ACTIVEDESCENDANT=e=>["aria-activedescendant",e];t.A11Y_LIVE=e=>["aria-live",e];t.A11Y_RELEVANT=e=>["aria-relevant",e];t.A11Y_SETSIZE=e=>["aria-setsize",e];t.A11Y_POSINSET=e=>["aria-posinset",e]},9175:(e,t,o)=>{"use strict";function s(e,t,o,s){let n=-1,i=e,r=o;Array.isArray(e)||(i=Array.from(e));const l=i.length;for(s&&l&&(n+=1,r=i[n]),n+=1;n<l;)r=t(r,i[n],n,i),n+=1;return r}function n(e,t){let o=0,s=e;Array.isArray(e)||(s=Array.from(e));const n=s.length;for(;o<n&&!1!==t(s[o],o,s);)o+=1;return e}function i(e){return s(e,((e,t)=>e+t),0)}t.__esModule=!0,t.arrayAvg=function(e){if(!e.length)return 0;return i(e)/e.length},t.arrayEach=n,t.arrayFilter=function(e,t){let o=0,s=e;Array.isArray(e)||(s=Array.from(e));const n=s.length,i=[];let r=-1;for(;o<n;){const e=s[o];t(e,o,s)&&(r+=1,i[r]=e),o+=1}return i},t.arrayFlatten=function e(t){return s(t,((t,o)=>t.concat(Array.isArray(o)?e(o):o)),[])},t.arrayMap=function(e,t){let o=0,s=e;Array.isArray(e)||(s=Array.from(e));const n=s.length,i=[];let r=-1;for(;o<n;){const e=s[o];r+=1,i[r]=t(e,o,s),o+=1}return i},t.arrayMax=function(e){return s(e,((e,t)=>e>t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayMin=function(e){return s(e,((e,t)=>e<t?e:t),Array.isArray(e)?e[0]:void 0)},t.arrayReduce=s,t.arraySum=i,t.arrayUnique=function(e){const t=[];return n(e,(e=>{-1===t.indexOf(e)&&t.push(e)})),t},t.extendArray=function(e,t){const o=t.length;let s=0;for(;s<o;)e.push(t[s]),s+=1},t.getDifferenceOfArrays=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[s,...i]=[...t];let r=s;return n(i,(e=>{r=r.filter((t=>!e.includes(t)))})),r},t.getIntersectionOfArrays=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[s,...i]=[...t];let r=s;return n(i,(e=>{r=r.filter((t=>e.includes(t)))})),r},t.getUnionOfArrays=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[s,...i]=[...t],r=new Set(s);return n(i,(e=>{n(e,(e=>{r.has(e)||r.add(e)}))})),Array.from(r)},t.pivot=function(e){const t=[];if(!e||0===e.length||!e[0]||0===e[0].length)return t;const o=e.length,s=e[0].length;for(let n=0;n<o;n++)for(let o=0;o<s;o++)t[o]||(t[o]=[]),t[o][n]=e[n][o];return t},t.stringToArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";return e.split(t)},t.to2dArray=function(e){const t=e.length;let o=0;for(;o<t;)e[o]=[e[o]],o+=1},o(15724),o(71336),o(41558),o(17663),o(68630),o(79645),o(89858),o(8620)},28890:(e,t,o)=>{"use strict";t.__esModule=!0,t.isChrome=function(){return r.chrome.value},t.isChromeWebKit=function(){return r.chromeWebKit.value},t.isEdge=function(){return r.edge.value},t.isEdgeWebKit=function(){return r.edgeWebKit.value},t.isFirefox=function(){return r.firefox.value},t.isFirefoxWebKit=function(){return r.firefoxWebKit.value},t.isIOS=function(){return l.ios.value},t.isIpadOS=function(){let{maxTouchPoints:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:navigator;return e>2&&l.mac.value},t.isLinuxOS=function(){return l.linux.value},t.isMacOS=function(){return l.mac.value},t.isMobileBrowser=function(){return r.mobile.value},t.isSafari=function(){return r.safari.value},t.isWindowsOS=function(){return l.win.value},t.setBrowserMeta=a,t.setPlatformMeta=h;var s=o(13911),n=o(93980);const i=e=>{const t={value:!1,test:(o,s)=>{t.value=e(o,s)}};return t},r={chrome:i(((e,t)=>/Chrome/.test(e)&&/Google/.test(t))),chromeWebKit:i((e=>/CriOS/.test(e))),edge:i((e=>/Edge/.test(e))),edgeWebKit:i((e=>/EdgiOS/.test(e))),firefox:i((e=>/Firefox/.test(e))),firefoxWebKit:i((e=>/FxiOS/.test(e))),mobile:i((e=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(e))),safari:i(((e,t)=>/Safari/.test(e)&&/Apple Computer/.test(t)))},l={mac:i((e=>/^Mac/.test(e))),win:i((e=>/^Win/.test(e))),linux:i((e=>/^Linux/.test(e))),ios:i((e=>/iPhone|iPad|iPod/i.test(e)))};function a(){let{userAgent:e=navigator.userAgent,vendor:t=navigator.vendor}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,s.objectEach)(r,(o=>{let{test:s}=o;s(e,t)}))}function h(){let{platform:e=navigator.platform}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,s.objectEach)(l,(t=>{let{test:o}=t;o(e)}))}(0,n.isCSR)()&&(a(),h())},83119:(e,t,o)=>{"use strict";t.__esModule=!0,t.error=function(){(0,s.isDefined)(console)&&console.error(...arguments)},t.info=function(){(0,s.isDefined)(console)&&console.info(...arguments)},t.log=function(){(0,s.isDefined)(console)&&console.log(...arguments)},t.warn=function(){(0,s.isDefined)(console)&&console.warn(...arguments)};var s=o(38893)},56216:(e,t,o)=>{"use strict";t.__esModule=!0,t.countFirstRowKeys=function(e){let t=0;Array.isArray(e)&&(e[0]&&Array.isArray(e[0])?t=e[0].length:e[0]&&(0,s.isObject)(e[0])&&(t=(0,s.deepObjectSize)(e[0])));return t},t.createEmptySpreadsheetData=function(e,t){const o=[];let s;for(let n=0;n<e;n++){s=[];for(let e=0;e<t;e++)s.push("");o.push(s)}return o},t.createSpreadsheetData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const o=[];let s,n;for(s=0;s<e;s++){const e=[];for(n=0;n<t;n++)e.push(r(n)+(s+1));o.push(e)}return o},t.createSpreadsheetObjectData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4;const o=[];let s,n;for(s=0;s<e;s++){const e={};for(n=0;n<t;n++)e[`prop${n}`]=r(n)+(s+1);o.push(e)}return o},t.dataRowToChangesArray=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=e;const s=[];Array.isArray(e)&&Array.isArray(e[0])||(o=[e]);return o.forEach(((e,o)=>{Array.isArray(e)?e.forEach(((e,n)=>{s.push([o+t,n,e])})):Object.keys(e).forEach((n=>{s.push([o+t,n,e[n]])}))})),s},t.isArrayOfArrays=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>Array.isArray(e))))},t.isArrayOfObjects=function(e){return!!(Array.isArray(e)&&e.length&&e.every((e=>"object"==typeof e&&!Array.isArray(e)&&null!==e)))},t.spreadsheetColumnIndex=function(e){let t=0;if(e)for(let o=0,s=e.length-1;o<e.length;o+=1,s-=1)t+=i**s*(n.indexOf(e[o])+1);return t-=1,t},t.spreadsheetColumnLabel=r,o(15724);var s=o(13911);const n="ABCDEFGHIJKLMNOPQRSTUVWXYZ",i=n.length;function r(e){let t,o=e+1,s="";for(;o>0;)t=(o-1)%i,s=String.fromCharCode(65+t)+s,o=parseInt((o-t)/i,10);return s}},72484:(e,t)=>{"use strict";t.__esModule=!0,t.getNormalizedDate=function(e){const t=new Date(e);if(!isNaN(new Date(`${e}T00:00`).getDate()))return new Date(t.getTime()+6e4*t.getTimezoneOffset());return t}},9893:(e,t,o)=>{"use strict";t.__esModule=!0,t.addClass=h,t.addEvent=function(e,t,o){e.addEventListener(t,o,!1)},t.clearTextSelection=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;e.getSelection&&(e.getSelection().empty?e.getSelection().empty():e.getSelection().removeAllRanges&&e.getSelection().removeAllRanges())},t.closest=r,t.closestDown=function(e,t,o){const s=[];let n=e;for(;n&&(n=r(n,t,o),n&&(!o||o.contains(n)));)s.push(n),n=n.host&&n.nodeType===Node.DOCUMENT_FRAGMENT_NODE?n.host:n.parentNode;const i=s.length;return i?s[i-1]:null},t.empty=d,t.fastInnerHTML=function(e,t){let o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];g.test(t)?e.innerHTML=o?(0,s.sanitize)(t):t:f(e,t)},t.fastInnerText=f,t.getCaretPosition=function(e){if(e.selectionStart)return e.selectionStart;return 0},t.getComputedStyle=w,t.getCssTransform=function(e){let t;if(e.style.transform&&""!==(t=e.style.transform))return["transform",t];return-1},t.getFrameElement=i,t.getMaximumScrollLeft=function(e){return e.scrollWidth-e.clientWidth},t.getMaximumScrollTop=function(e){return e.scrollHeight-e.clientHeight},t.getParent=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=-1,s=null,n=e;for(;null!==n;){if(o===t){s=n;break}n.host&&n.nodeType===Node.DOCUMENT_FRAGMENT_NODE?n=n.host:(o+=1,n=n.parentNode)}return s},t.getParentWindow=function(e){return i(e)&&e.parent},t.getScrollLeft=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return m(t);return e.scrollLeft},t.getScrollTop=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;if(e===t)return p(t);return e.scrollTop},t.getScrollableElement=function(e){let t=e.ownerDocument,o=t?t.defaultView:void 0;t||(t=e.document?e.document:e,o=t.defaultView);const s=["auto","scroll"];let n=e.parentNode;for(;n&&n.style&&t.body!==n;){let{overflow:e,overflowX:t,overflowY:i}=n.style;if([e,t,i].includes("scroll"))return n;if(({overflow:e,overflowX:t,overflowY:i}=o.getComputedStyle(n)),s.includes(e)||s.includes(t)||s.includes(i))return n;if(n.clientHeight<=n.scrollHeight+1&&(s.includes(i)||s.includes(e)))return n;if(n.clientWidth<=n.scrollWidth+1&&(s.includes(t)||s.includes(e)))return n;n=n.parentNode}return o},t.getScrollbarWidth=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;void 0===C&&(C=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;const t=e.createElement("div");t.style.height="200px",t.style.width="100%";const o=e.createElement("div");o.style.boxSizing="content-box",o.style.height="150px",o.style.left="0px",o.style.overflow="hidden",o.style.position="absolute",o.style.top="0px",o.style.width="200px",o.style.visibility="hidden",o.appendChild(t),(e.body||e.documentElement).appendChild(o);const s=t.offsetWidth;o.style.overflow="scroll";let n=t.offsetWidth;s===n&&(n=o.clientWidth);return(e.body||e.documentElement).removeChild(o),s-n}(e));return C},t.getSelectionEndPosition=function(e){if(e.selectionEnd)return e.selectionEnd;return 0},t.getSelectionText=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window;const t=e.document;let o="";e.getSelection?o=e.getSelection().toString():t.selection&&"Control"!==t.selection.type&&(o=t.selection.createRange().text);return o},t.getStyle=function(e,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window;if(!e)return;if(e===o)return"width"===t?`${o.innerWidth}px`:"height"===t?`${o.innerHeight}px`:void 0;const s=e.style[t];if(""!==s&&void 0!==s)return s;const n=w(e,o);if(""!==n[t]&&void 0!==n[t])return n[t]},t.getTrimmingContainer=function(e){const t=e.ownerDocument,o=t.defaultView;let s=e.parentNode;for(;s&&s.style&&t.body!==s;){if("visible"!==s.style.overflow&&""!==s.style.overflow)return s;const e=w(s,o),t=["scroll","hidden","auto"],n=e.getPropertyValue("overflow"),i=e.getPropertyValue("overflow-y"),r=e.getPropertyValue("overflow-x");if(t.includes(n)||t.includes(i)||t.includes(r))return s;s=s.parentNode}return o},t.getWindowScrollLeft=m,t.getWindowScrollTop=p,t.hasAccessToParentWindow=function(e){return!!Object.getPrototypeOf(e.parent)},t.hasClass=function(e,t){if(void 0===e.classList||"string"!=typeof t||""===t)return!1;return e.classList.contains(t)},t.hasHorizontalScrollbar=function(e){return e.offsetHeight!==e.clientHeight},t.hasVerticalScrollbar=function(e){return e.offsetWidth!==e.clientWidth},t.index=function(e){let t=0,o=e;if(o.previousSibling)for(;o=o.previousSibling;)t+=1;return t},t.innerHeight=function(e){return e.clientHeight||e.innerHeight},t.innerWidth=function(e){return e.clientWidth||e.innerWidth},t.isChildOf=function(e,t){let o=e.parentNode,s=[];"string"==typeof t?s=e.defaultView?Array.prototype.slice.call(e.querySelectorAll(t),0):Array.prototype.slice.call(e.ownerDocument.querySelectorAll(t),0):s.push(t);for(;null!==o;){if(s.indexOf(o)>-1)return!0;o=o.parentNode}return!1},t.isDetached=function(e){return!e.parentNode},t.isInput=v,t.isOutsideInput=y,t.isThisHotChild=function(e,t){const o=e.closest(".handsontable");return!!o&&(o.parentNode===t||o===t)},t.isVisible=function e(t){const o=t.ownerDocument.documentElement;let s=t;for(;s!==o;){if(null===s)return!1;if(s.nodeType===Node.DOCUMENT_FRAGMENT_NODE){if(s.host){if(s.host.impl)return e(s.host.impl);if(s.host)return e(s.host);throw new Error("Lost in Web Components world")}return!1}if("none"===w(s).display)return!1;s=s.parentNode}return!0},t.makeElementContentEditableAndSelectItsContent=E,t.matchesCSSRules=function(e,t){const{selectorText:o}=t;let s=!1;t.type===CSSRule.STYLE_RULE&&o&&(e.msMatchesSelector?s=e.msMatchesSelector(o):e.matches&&(s=e.matches(o)));return s},t.observeVisibilityChangeOnce=function(e,t){new IntersectionObserver(((o,s)=>{o.forEach((o=>{o.isIntersecting&&null!==e.offsetParent&&(t(),s.unobserve(e))}))}),{root:e.ownerDocument.body}).observe(e)},t.offset=function(e){const t=e.ownerDocument,o=t.defaultView,s=t.documentElement;let n,i,r,l=e;n=l.offsetLeft,i=l.offsetTop,r=l;for(;(l=l.offsetParent)&&l!==t.body&&"offsetLeft"in l;)n+=l.offsetLeft,i+=l.offsetTop,r=l;r&&"fixed"===r.style.position&&(n+=o.pageXOffset||s.scrollLeft,i+=o.pageYOffset||s.scrollTop);return{left:n,top:i}},t.outerHeight=function(e){return e.offsetHeight},t.outerWidth=function(e){return e.offsetWidth},t.overlayContainsElement=function(e,t,o){const s=o.parentElement.querySelector(`.ht_clone_${e}`);return s?s.contains(t):null},t.removeAttribute=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);const{regexFree:o,regexes:s}=a(t,!0);o.forEach((t=>{""!==t&&e.removeAttribute(t)})),s.forEach((t=>{e.getAttributeNames().forEach((o=>{t.test(o)&&e.removeAttribute(o)}))}))},t.removeClass=c,t.removeContentEditableFromElementAndDeselect=S,t.removeEvent=function(e,t,o){e.removeEventListener(t,o,!1)},t.removeTextNodes=function e(t){if(3===t.nodeType)t.parentNode.removeChild(t);else if(["TABLE","THEAD","TBODY","TFOOT","TR"].indexOf(t.nodeName)>-1){const o=t.childNodes;for(let t=o.length-1;t>=0;t--)e(o[t])}},t.resetCssTransform=function(e){e.style.transform&&""!==e.style.transform&&(e.style.transform="")},t.runWithSelectedContendEditableElement=function(e,t){let o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];E(e,o),t(),S(e,o)},t.selectElementIfAllowed=function(e){y(e.ownerDocument.activeElement)||e.select()},t.setAttribute=u,t.setCaretPosition=function(e,t,o){void 0===o&&(o=t);if(e.setSelectionRange){e.focus();try{e.setSelectionRange(t,o)}catch(s){const n=e.parentNode,i=n.style.display;n.style.display="block",e.setSelectionRange(t,o),n.style.display=i}}},t.setOverlayPosition=function(e,t,o){e.style.transform=`translate3d(${t},${o},0)`},o(67834),o(15724);var s=o(59777),n=o(92692);function i(e){return Object.getPrototypeOf(e.parent)&&e.frameElement}function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2?arguments[2]:void 0;const{ELEMENT_NODE:s,DOCUMENT_FRAGMENT_NODE:n}=Node;let i=e;for(;null!=i&&i!==o;){const{nodeType:e,nodeName:o}=i;if(e===s&&(t.includes(o)||t.includes(i)))return i;const{host:r}=i;i=r&&e===n?r:i.parentNode}return null}function l(e){return e&&e.length?e.filter((e=>!!e)):[]}function a(e,t){if(!e||!e.length)return t?{regexFree:[],regexes:[]}:[];const o=[],s=[];return s.push(...e.filter((e=>{const s=e instanceof RegExp;return s&&t&&o.push(e),!s}))),t?{regexFree:s,regexes:o}:s}function h(e,t){"string"==typeof t&&(t=t.split(" ")),(t=l(t)).length>0&&e.classList.add(...t)}function c(e,t){"string"==typeof t?t=t.split(" "):t instanceof RegExp&&(t=[t]);let{regexFree:o,regexes:s}=a(t,!0);o=l(o),o.length>0&&e.classList.remove(...o),s.forEach((t=>{e.classList.forEach((o=>{t.test(o)&&e.classList.remove(o)}))}))}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2?arguments[2]:void 0;Array.isArray(t)||(t=[[t,o]]),t.forEach((t=>{Array.isArray(t)&&""!==t[0]&&e.setAttribute(...t)}))}function d(e){let t;for(;t=e.lastChild;)e.removeChild(t)}const g=t.HTML_CHARACTERS=/(<(.*)>|&(.*);)/;function f(e,t){const o=e.firstChild;o&&3===o.nodeType&&null===o.nextSibling?o.textContent=t:(d(e),e.appendChild(e.ownerDocument.createTextNode(t)))}function p(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollY}function m(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window).scrollX}function w(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window;return e.currentStyle||t.getComputedStyle(e)}let C;function v(e){return e&&(["INPUT","SELECT","TEXTAREA"].indexOf(e.nodeName)>-1||"true"===e.contentEditable)}function y(e){return v(e)&&!1===e.hasAttribute("data-hot-input")}function E(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const s=e.ownerDocument,i=s.createRange(),r=s.defaultView.getSelection();u(e,"contenteditable",!0),o&&u(e,...(0,n.A11Y_HIDDEN)()),t&&h(e,"invisibleSelection"),i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i)}function S(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const o=e.ownerDocument.defaultView.getSelection();e.hasAttribute("aria-hidden")&&e.removeAttribute("aria-hidden"),o.removeAllRanges(),t&&c(e,"invisibleSelection"),e.removeAttribute("contenteditable")}},79729:(e,t)=>{"use strict";t.__esModule=!0,t.isImmediatePropagationStopped=function(e){return!1===e.isImmediatePropagationEnabled},t.isLeftClick=function(e){return 0===e.button},t.isRightClick=function(e){return 2===e.button},t.isTouchEvent=function(e){return e instanceof TouchEvent},t.offsetRelativeTo=function(e,t){const o={x:e.offsetX,y:e.offsetY};let s=e.target;if(!(t instanceof HTMLElement)||s!==t&&s.contains(t))return o;for(;s!==t;)o.x+=s.offsetLeft,o.y+=s.offsetTop,s=s.offsetParent;return o},t.stopImmediatePropagation=function(e){e.isImmediatePropagationEnabled=!1,e.cancelBubble=!0}},93980:(e,t)=>{"use strict";let o;t.__esModule=!0,t.cancelAnimationFrame=function(e){window.cancelAnimationFrame(e)},t.getComparisonFunction=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(o)return o;o="object"==typeof Intl?new Intl.Collator(e,t).compare:"function"==typeof String.prototype.localeCompare?(e,t)=>`${e}`.localeCompare(t):(e,t)=>e===t?0:e>t?-1:1;return o},t.isCSR=function(){return"undefined"!=typeof window},t.isTouchSupported=function(){return"ontouchstart"in window},t.requestAnimationFrame=function(e){return window.requestAnimationFrame(e)}},78832:(e,t,o)=>{"use strict";t.__esModule=!0,t.curry=function(e){const t=e.length;return function o(s){return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];const l=s.concat(i);let a;return a=l.length>=t?e.apply(this,l):o(l),a}}([])},t.curryRight=function(e){const t=e.length;return function o(s){return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];const l=s.concat(i.reverse());let a;return a=l.length>=t?e.apply(this,l):o(l),a}}([])},t.debounce=function(e){let t,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,s=null;return function(){for(var n=arguments.length,i=new Array(n),r=0;r<n;r++)i[r]=arguments[r];return s&&clearTimeout(s),s=setTimeout((()=>{t=e.apply(this,i)}),o),t}},t.fastCall=function(e,t,o,s,i,r,l,a){if((0,n.isDefined)(a))return e.call(t,o,s,i,r,l,a);if((0,n.isDefined)(l))return e.call(t,o,s,i,r,l);if((0,n.isDefined)(r))return e.call(t,o,s,i,r);if((0,n.isDefined)(i))return e.call(t,o,s,i);if((0,n.isDefined)(s))return e.call(t,o,s);if((0,n.isDefined)(o))return e.call(t,o);return e.call(t)},t.isFunction=function(e){return"function"==typeof e},t.partial=function(e){for(var t=arguments.length,o=new Array(t>1?t-1:0),s=1;s<t;s++)o[s-1]=arguments[s];return function(){for(var t=arguments.length,s=new Array(t),n=0;n<t;n++)s[n]=arguments[n];return e.apply(this,o.concat(s))}},t.pipe=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];const[n,...i]=t;return function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];return(0,s.arrayReduce)(i,((e,t)=>t(e)),n.apply(this,t))}},t.throttle=i,t.throttleAfterHits=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10;const s=i(e,t);let n=o;function r(){for(var t=arguments.length,o=new Array(t),i=0;i<t;i++)o[i]=arguments[i];return n?(n-=1,e.apply(this,o)):s.apply(this,o)}return r.clearHits=function(){n=o},r};var s=o(9175),n=o(38893);function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:200,o=0;const s={lastCallThrottled:!0};let n=null;return function(){for(var i=arguments.length,r=new Array(i),l=0;l<i;l++)r[l]=arguments[l];const a=Date.now();let h=!1;s.lastCallThrottled=!0,o||(o=a,h=!0);const c=t-(a-o);return h?(s.lastCallThrottled=!1,e.apply(this,r)):(n&&clearTimeout(n),n=setTimeout((()=>{s.lastCallThrottled=!1,e.apply(this,r),o=0,n=void 0}),c)),s}}},38893:(e,t,o)=>{"use strict";var s=o(96784);t.__esModule=!0,t._injectProductInfo=function(e,t){const o=!l(e),s="string"==typeof e&&"non-commercial-and-evaluation"===e.toLowerCase(),i="14.6.1";let r,v="invalid",y="invalid";const E=function(e){let t=[][a],o=t;if(e[a]!==d("Z"))return!1;for(let t="",s="B<H4P+".split(""),n=d(s.shift());n;n=d(s.shift()||"A"))--n<""[a]?o|=(c(`${c(h(t)+(h(u(e,Math.abs(n),2))+[]).padStart(2,"0"))}`)%97||2)>>1:t=u(e,n,n?1===s[a]?9:8:6);return o===t}(e=g(e||""));if(o||s||E)if(E){const t=(0,n.default)("17/10/2024","DD/MM/YYYY"),o=Math.floor(t.toDate().getTime()/864e5),s=f(e);r=(0,n.default)(864e5*(s+1),"x").format("MMMM DD, YYYY"),o>s?(v="expired",y="expired"):(v="valid",y="valid")}else s?(v="non_commercial",y="valid"):(v="invalid",y="invalid");else v="missing",y="missing";p()&&(v="valid",y="valid");if(!m&&"valid"!==v){w[v]({keyValidityDate:r,hotVersion:i})&&console["non_commercial"===v?"info":"warn"](w[v]({keyValidityDate:r,hotVersion:i})),m=!0}if("valid"!==y&&t.parentNode){if(C[y]({keyValidityDate:r,hotVersion:i})){const e=document.createElement("div");e.className="hot-display-license-info",e.innerHTML=C[y]({keyValidityDate:r,hotVersion:i}),t.parentNode.insertBefore(e,t.nextSibling)}}},t.isDefined=function(e){return void 0!==e},t.isEmpty=l,t.isRegExp=function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},t.isUndefined=r,t.stringify=function(e){let t;switch(typeof e){case"string":case"number":t=`${e}`;break;case"object":t=null===e?"":e.toString();break;case"undefined":t="";break;default:t=e.toString()}return t};var n=s(o(86798)),i=o(28927);function r(e){return void 0===e}function l(e){return null===e||""===e||r(e)}const a="length",h=e=>parseInt(e,16),c=e=>parseInt(e,10),u=(e,t,o)=>e.substr(t,o),d=e=>e.codePointAt(0)-65,g=e=>`${e}`.replace(/\-/g,""),f=e=>h(u(g(e),h("12"),d("F")))/(h(u(g(e),d("B"),~~![][a]))||9),p=()=>"undefined"!=typeof location&&/^([a-z0-9\-]+\.)?\x68\x61\x6E\x64\x73\x6F\x6E\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6D$/i.test(location.host);let m=!1;const w={invalid:()=>i.toSingleLine`
     The license key for Handsontable is invalid.\x20
     If you need any help, contact us at support@handsontable.com.`,expired:e=>{let{keyValidityDate:t,hotVersion:o}=e;return i.toSingleLine`
     The license key for Handsontable expired on ${t}, and is not valid for the installed\x20
diff --git a/handsontable/package.json b/handsontable/package.json
index 1f4b01d7d1..9f40e26151 100644
--- a/handsontable/package.json
+++ b/handsontable/package.json
@@ -10,7 +10,7 @@
     "url": "https://github.com/handsontable/handsontable/issues"
   },
   "author": "Handsoncode <hello@handsontable.com>",
-  "version": "14.6.0",
+  "version": "14.6.1",
   "main": "index",
   "module": "index.mjs",
   "jsnext:main": "index.mjs",
diff --git a/hot.config.js b/hot.config.js
index 7c0e7f3b22..c2cefd26d3 100644
--- a/hot.config.js
+++ b/hot.config.js
@@ -2,8 +2,8 @@ const moment = require('moment');

 module.exports = {
   HOT_FILENAME: 'handsontable',
-  HOT_VERSION: '14.6.0',
+  HOT_VERSION: '14.6.1',
   HOT_PACKAGE_NAME: 'handsontable',
   HOT_BUILD_DATE: moment().format('DD/MM/YYYY HH:mm:ss'),
-  HOT_RELEASE_DATE: '01/10/2024',
+  HOT_RELEASE_DATE: '17/10/2024',
 };
diff --git a/package-lock.json b/package-lock.json
index 20f7457bb6..50dea6cbcb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -51,10 +51,10 @@
     },
     "examples": {
       "name": "handsontable-examples-internal",
-      "version": "14.6.0"
+      "version": "14.6.1"
     },
     "handsontable": {
-      "version": "14.6.0",
+      "version": "14.6.1",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@handsontable/pikaday": "^1.0.0",
@@ -172,32 +172,6 @@
         }
       }
     },
-    "handsontable/node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "handsontable/node_modules/loader-utils": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
-      "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-      "dev": true,
-      "dependencies": {
-        "big.js": "^5.2.2",
-        "emojis-list": "^3.0.0",
-        "json5": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
     "handsontable/node_modules/moment": {
       "version": "2.30.1",
       "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
@@ -208,14 +182,24 @@
       }
     },
     "node_modules/@actions/core": {
-      "version": "1.10.1",
-      "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz",
-      "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==",
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz",
+      "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@actions/http-client": "^2.0.1",
-        "uuid": "^8.3.2"
+        "@actions/exec": "^1.1.1",
+        "@actions/http-client": "^2.0.1"
+      }
+    },
+    "node_modules/@actions/exec": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
+      "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@actions/io": "^1.0.1"
       }
     },
     "node_modules/@actions/github": {
@@ -252,6 +236,13 @@
         "undici": "^5.25.4"
       }
     },
+    "node_modules/@actions/io": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz",
+      "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@ampproject/remapping": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
@@ -267,13 +258,13 @@
       }
     },
     "node_modules/@angular-devkit/architect": {
-      "version": "0.1703.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.9.tgz",
-      "integrity": "sha512-kEPfTOVnzrJxPGTvaXy8653HU9Fucxttx9gVfQR1yafs+yIEGx3fKGKe89YPmaEay32bIm7ZUpxDF1FO14nkdQ==",
+      "version": "0.1703.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.10.tgz",
+      "integrity": "sha512-wmjx5GspSPprdUGryK5+9vNawbEO7p8h9dxgX3uoeFwPAECcHC+/KK3qPhX2NiGcM6MDsyt25SrbSktJp6PRsA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "17.3.9",
+        "@angular-devkit/core": "17.3.10",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -283,13 +274,13 @@
       }
     },
     "node_modules/@angular-devkit/build-webpack": {
-      "version": "0.1703.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.9.tgz",
-      "integrity": "sha512-3b0LND39Nc+DwCQ0N7Tbsd7RAFWTeIc4VDwk/7RO8EMYTP5Kfgr/TK66nwTBypHsjmD69IMKHZZaZuiDfGfx2A==",
+      "version": "0.1703.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.10.tgz",
+      "integrity": "sha512-m6dDgzKLW+c3z9/TUxYmbJEtEhrdYNQ4ogdtAgEYA/FRrKueDU0WztLNr+dVbvwNP99Skovtr8sAQfN6twproQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1703.9",
+        "@angular-devkit/architect": "0.1703.10",
         "rxjs": "7.8.1"
       },
       "engines": {
@@ -303,9 +294,9 @@
       }
     },
     "node_modules/@angular-devkit/core": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.9.tgz",
-      "integrity": "sha512-/iKyn5YT7NW5ylrg9yufUydS8byExeQ2HHIwFC4Ebwb/JYYCz+k4tBf2LdP+zXpemDpLznXTQGWia0/yJjG8Vg==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.10.tgz",
+      "integrity": "sha512-czdl54yxU5DOAGy/uUPNjJruoBDTgwi/V+eOgLNybYhgrc+TsY0f7uJ11yEk/pz5sCov7xIiS7RdRv96waS7vg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -331,13 +322,13 @@
       }
     },
     "node_modules/@angular-devkit/schematics": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.9.tgz",
-      "integrity": "sha512-9qg+uWywgAtaQlvbnCQv47hcL6ZuA+d9ucgZ0upZftBllZ2vp5WIthCPb2mB0uBkj84Csmtz9MsErFjOQtTj4g==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.10.tgz",
+      "integrity": "sha512-FHcNa1ktYRd0SKExCsNJpR75RffsyuPIV8kvBXzXnLHmXMqvl25G2te3yYJ9yYqy9OLy/58HZznZTxWRyUdHOg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "17.3.9",
+        "@angular-devkit/core": "17.3.10",
         "jsonc-parser": "3.2.1",
         "magic-string": "0.30.8",
         "ora": "5.4.1",
@@ -465,9 +456,9 @@
       }
     },
     "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/type-utils/node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "peer": true,
@@ -536,9 +527,9 @@
       }
     },
     "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/typescript-estree/node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "peer": true,
@@ -721,9 +712,9 @@
       }
     },
     "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree/node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "peer": true,
@@ -955,9 +946,9 @@
       }
     },
     "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/typescript-estree/node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "peer": true,
@@ -1082,16 +1073,16 @@
       }
     },
     "node_modules/@angular/cli": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.9.tgz",
-      "integrity": "sha512-b5RGu5RO4VKZlMQDatwABAn1qocgD9u4IrGN2dvHDcrz5apTKYftUdGyG42vngyDNBCg1mWkSDQEWK4f2HfuGg==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.10.tgz",
+      "integrity": "sha512-lA0kf4Cpo8Jcuennq6wGyBTP/UG1oX4xsM9uLRZ2vkPoisjHCk46rWaVP7vfAqdUH39vbATFXftpy1SiEmAI4w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/architect": "0.1703.9",
-        "@angular-devkit/core": "17.3.9",
-        "@angular-devkit/schematics": "17.3.9",
-        "@schematics/angular": "17.3.9",
+        "@angular-devkit/architect": "0.1703.10",
+        "@angular-devkit/core": "17.3.10",
+        "@angular-devkit/schematics": "17.3.10",
+        "@schematics/angular": "17.3.10",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.3",
         "ini": "4.1.2",
@@ -1640,9 +1631,9 @@
       }
     },
     "node_modules/@babel/cli": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.25.6.tgz",
-      "integrity": "sha512-Z+Doemr4VtvSD2SNHTrkiFZ1LX+JI6tyRXAAOb4N9khIuPyoEPmTPJarPm8ljJV1D6bnMQjyHMWTT9NeKbQuXA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.25.7.tgz",
+      "integrity": "sha512-vQw4QjrqjLSuL0Tt3gfVXbxEHOfsCcHN8tKyTclpSMYLq3Bp0BTzWYZfMKBs3PQ+to8q3BnumBIAsMdOqDJ6nw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1680,13 +1671,13 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
-      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz",
+      "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/highlight": "^7.24.7",
+        "@babel/highlight": "^7.25.7",
         "picocolors": "^1.0.0"
       },
       "engines": {
@@ -1694,9 +1685,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
-      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz",
+      "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -1704,22 +1695,22 @@
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
-      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz",
+      "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "^2.2.0",
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-module-transforms": "^7.25.2",
-        "@babel/helpers": "^7.25.0",
-        "@babel/parser": "^7.25.0",
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.2",
-        "@babel/types": "^7.25.2",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helpers": "^7.25.7",
+        "@babel/parser": "^7.25.8",
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.8",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -1745,9 +1736,9 @@
       }
     },
     "node_modules/@babel/eslint-parser": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
-      "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.8.tgz",
+      "integrity": "sha512-Po3VLMN7fJtv0nsOjBDSbO1J71UhzShE9MuOSkWEV9IZQXzhZklYtzKZ8ZD/Ij3a0JBv1AG3Ny2L3jvAHQVOGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1774,9 +1765,9 @@
       }
     },
     "node_modules/@babel/eslint-plugin": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.25.1.tgz",
-      "integrity": "sha512-jF04YOsrCbEeQk4s+FwsuRddwBiAHooMDG9/nrV83HiYQwEuQppbXTeXyydxCoH5oEWmVBI51wHuZrcIXMkPfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.25.7.tgz",
+      "integrity": "sha512-cwa16ALyUdac3n3VC3R+isKENyjLsJmFY6+cX0wuLsKlwB50Jv/xwqyH9tV8EEH0IUCAL5Y0Y1gP0HuCEDDDeQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1791,58 +1782,58 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
-      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz",
+      "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6",
+        "@babel/types": "^7.25.7",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
-        "jsesc": "^2.5.1"
+        "jsesc": "^3.0.2"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
-      "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz",
+      "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
-      "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz",
+      "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
-      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz",
+      "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
-        "@babel/helper-validator-option": "^7.24.8",
-        "browserslist": "^4.23.1",
+        "@babel/compat-data": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "browserslist": "^4.24.0",
         "lru-cache": "^5.1.1",
         "semver": "^6.3.1"
       },
@@ -1861,18 +1852,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
-      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -1893,14 +1884,14 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
-      "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz",
+      "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "regexpu-core": "^5.3.1",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "regexpu-core": "^6.1.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -1951,44 +1942,44 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
-      "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz",
+      "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.8",
-        "@babel/types": "^7.24.8"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
-      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz",
+      "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
-      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz",
+      "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-simple-access": "^7.24.7",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.2"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1998,22 +1989,22 @@
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
-      "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz",
+      "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.7"
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
-      "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+      "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2021,15 +2012,15 @@
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
-      "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-wrap-function": "^7.25.0",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-wrap-function": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2039,15 +2030,15 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
-      "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz",
+      "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-member-expression-to-functions": "^7.24.8",
-        "@babel/helper-optimise-call-expression": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-member-expression-to-functions": "^7.25.7",
+        "@babel/helper-optimise-call-expression": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2057,28 +2048,28 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
-      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz",
+      "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
-      "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz",
+      "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/traverse": "^7.24.7",
-        "@babel/types": "^7.24.7"
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2098,9 +2089,9 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
-      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
+      "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2108,9 +2099,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
-      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
+      "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2118,9 +2109,9 @@
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
-      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz",
+      "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2128,42 +2119,42 @@
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
-      "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz",
+      "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/template": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
-      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz",
+      "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6"
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
-      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz",
+      "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
@@ -2251,13 +2242,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
-      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
+      "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.6"
+        "@babel/types": "^7.25.8"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -2267,14 +2258,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
-      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz",
+      "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2284,13 +2275,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
-      "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz",
+      "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2300,13 +2291,13 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
-      "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz",
+      "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2316,15 +2307,15 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
-      "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz",
+      "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-transform-optional-chaining": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2334,14 +2325,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
-      "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz",
+      "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2484,13 +2475,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
-      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz",
+      "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2500,13 +2491,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
-      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz",
+      "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2542,13 +2533,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
-      "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz",
+      "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2668,13 +2659,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz",
-      "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz",
+      "integrity": "sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2701,13 +2692,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
-      "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz",
+      "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2717,16 +2708,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
-      "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz",
+      "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-remap-async-to-generator": "^7.25.0",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.4"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2736,15 +2726,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
-      "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz",
+      "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-remap-async-to-generator": "^7.24.7"
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-remap-async-to-generator": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2754,13 +2744,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
-      "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz",
+      "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2770,13 +2760,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
-      "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz",
+      "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2786,14 +2776,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
-      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz",
+      "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2803,15 +2793,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-static-block": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
-      "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz",
+      "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2821,17 +2810,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
-      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz",
+      "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.4",
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7",
+        "@babel/traverse": "^7.25.7",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -2842,14 +2831,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
-      "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz",
+      "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/template": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/template": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2859,13 +2848,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
-      "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz",
+      "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2875,14 +2864,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
-      "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz",
+      "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2892,13 +2881,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
-      "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz",
+      "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2908,14 +2897,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
-      "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2925,14 +2914,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dynamic-import": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
-      "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz",
+      "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2942,14 +2930,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
-      "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz",
+      "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2959,14 +2947,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-export-namespace-from": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
-      "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz",
+      "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2976,14 +2963,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
-      "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz",
+      "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2993,15 +2980,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.25.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
-      "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz",
+      "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.1"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3011,14 +2998,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-json-strings": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
-      "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz",
+      "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-json-strings": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3028,13 +3014,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
-      "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz",
+      "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3044,14 +3030,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-logical-assignment-operators": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
-      "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz",
+      "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3061,13 +3046,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
-      "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz",
+      "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3077,14 +3062,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
-      "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz",
+      "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3094,15 +3079,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
-      "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz",
+      "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.8",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-simple-access": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-simple-access": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3112,16 +3097,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
-      "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz",
+      "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
-        "@babel/traverse": "^7.25.0"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
+        "@babel/traverse": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3131,14 +3116,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
-      "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz",
+      "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-module-transforms": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3148,14 +3133,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
-      "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz",
+      "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3165,13 +3150,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
-      "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz",
+      "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3181,14 +3166,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
-      "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz",
+      "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3198,14 +3182,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-numeric-separator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
-      "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz",
+      "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3215,16 +3198,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
-      "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz",
+      "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.24.7"
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-transform-parameters": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3234,14 +3216,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
-      "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz",
+      "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-replace-supers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-replace-supers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3251,14 +3233,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-catch-binding": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
-      "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz",
+      "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3268,15 +3249,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-optional-chaining": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
-      "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz",
+      "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3286,13 +3266,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
-      "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz",
+      "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3302,14 +3282,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
-      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz",
+      "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.25.4",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3319,16 +3299,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-property-in-object": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
-      "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz",
+      "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3338,13 +3317,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
-      "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz",
+      "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3354,13 +3333,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-display-name": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz",
-      "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz",
+      "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3370,17 +3349,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz",
-      "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz",
+      "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/plugin-syntax-jsx": "^7.24.7",
-        "@babel/types": "^7.25.2"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/plugin-syntax-jsx": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3390,13 +3369,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx-development": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz",
-      "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz",
+      "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/plugin-transform-react-jsx": "^7.24.7"
+        "@babel/plugin-transform-react-jsx": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3406,14 +3385,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz",
-      "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz",
+      "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3423,13 +3402,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
-      "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz",
+      "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "regenerator-transform": "^0.15.2"
       },
       "engines": {
@@ -3440,13 +3419,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
-      "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz",
+      "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3456,14 +3435,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz",
-      "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz",
+      "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/helper-module-imports": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
@@ -3487,13 +3466,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
-      "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz",
+      "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3503,14 +3482,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
-      "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz",
+      "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3520,13 +3499,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
-      "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz",
+      "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3536,13 +3515,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
-      "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz",
+      "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3552,13 +3531,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.24.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
-      "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz",
+      "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3568,17 +3547,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz",
-      "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz",
+      "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-create-class-features-plugin": "^7.25.0",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/plugin-syntax-typescript": "^7.24.7"
+        "@babel/helper-annotate-as-pure": "^7.25.7",
+        "@babel/helper-create-class-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7",
+        "@babel/plugin-syntax-typescript": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3588,13 +3567,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
-      "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz",
+      "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3604,14 +3583,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-property-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
-      "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz",
+      "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3621,14 +3600,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
-      "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz",
+      "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3638,14 +3617,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
-      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz",
+      "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3676,94 +3655,79 @@
       "license": "MIT"
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
-      "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz",
+      "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.4",
-        "@babel/helper-compilation-targets": "^7.25.2",
-        "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
-        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
-        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
+        "@babel/compat-data": "^7.25.8",
+        "@babel/helper-compilation-targets": "^7.25.7",
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7",
+        "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7",
         "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-class-properties": "^7.12.13",
-        "@babel/plugin-syntax-class-static-block": "^7.14.5",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
-        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-import-assertions": "^7.24.7",
-        "@babel/plugin-syntax-import-attributes": "^7.24.7",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
-        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-import-assertions": "^7.25.7",
+        "@babel/plugin-syntax-import-attributes": "^7.25.7",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
-        "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.4",
-        "@babel/plugin-transform-async-to-generator": "^7.24.7",
-        "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
-        "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.25.4",
-        "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.4",
-        "@babel/plugin-transform-computed-properties": "^7.24.7",
-        "@babel/plugin-transform-destructuring": "^7.24.8",
-        "@babel/plugin-transform-dotall-regex": "^7.24.7",
-        "@babel/plugin-transform-duplicate-keys": "^7.24.7",
-        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
-        "@babel/plugin-transform-dynamic-import": "^7.24.7",
-        "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
-        "@babel/plugin-transform-export-namespace-from": "^7.24.7",
-        "@babel/plugin-transform-for-of": "^7.24.7",
-        "@babel/plugin-transform-function-name": "^7.25.1",
-        "@babel/plugin-transform-json-strings": "^7.24.7",
-        "@babel/plugin-transform-literals": "^7.25.2",
-        "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
-        "@babel/plugin-transform-member-expression-literals": "^7.24.7",
-        "@babel/plugin-transform-modules-amd": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.8",
-        "@babel/plugin-transform-modules-systemjs": "^7.25.0",
-        "@babel/plugin-transform-modules-umd": "^7.24.7",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
-        "@babel/plugin-transform-new-target": "^7.24.7",
-        "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
-        "@babel/plugin-transform-numeric-separator": "^7.24.7",
-        "@babel/plugin-transform-object-rest-spread": "^7.24.7",
-        "@babel/plugin-transform-object-super": "^7.24.7",
-        "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
-        "@babel/plugin-transform-optional-chaining": "^7.24.8",
-        "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.25.4",
-        "@babel/plugin-transform-private-property-in-object": "^7.24.7",
-        "@babel/plugin-transform-property-literals": "^7.24.7",
-        "@babel/plugin-transform-regenerator": "^7.24.7",
-        "@babel/plugin-transform-reserved-words": "^7.24.7",
-        "@babel/plugin-transform-shorthand-properties": "^7.24.7",
-        "@babel/plugin-transform-spread": "^7.24.7",
-        "@babel/plugin-transform-sticky-regex": "^7.24.7",
-        "@babel/plugin-transform-template-literals": "^7.24.7",
-        "@babel/plugin-transform-typeof-symbol": "^7.24.8",
-        "@babel/plugin-transform-unicode-escapes": "^7.24.7",
-        "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
+        "@babel/plugin-transform-arrow-functions": "^7.25.7",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.8",
+        "@babel/plugin-transform-async-to-generator": "^7.25.7",
+        "@babel/plugin-transform-block-scoped-functions": "^7.25.7",
+        "@babel/plugin-transform-block-scoping": "^7.25.7",
+        "@babel/plugin-transform-class-properties": "^7.25.7",
+        "@babel/plugin-transform-class-static-block": "^7.25.8",
+        "@babel/plugin-transform-classes": "^7.25.7",
+        "@babel/plugin-transform-computed-properties": "^7.25.7",
+        "@babel/plugin-transform-destructuring": "^7.25.7",
+        "@babel/plugin-transform-dotall-regex": "^7.25.7",
+        "@babel/plugin-transform-duplicate-keys": "^7.25.7",
+        "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-dynamic-import": "^7.25.8",
+        "@babel/plugin-transform-exponentiation-operator": "^7.25.7",
+        "@babel/plugin-transform-export-namespace-from": "^7.25.8",
+        "@babel/plugin-transform-for-of": "^7.25.7",
+        "@babel/plugin-transform-function-name": "^7.25.7",
+        "@babel/plugin-transform-json-strings": "^7.25.8",
+        "@babel/plugin-transform-literals": "^7.25.7",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.25.8",
+        "@babel/plugin-transform-member-expression-literals": "^7.25.7",
+        "@babel/plugin-transform-modules-amd": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-modules-systemjs": "^7.25.7",
+        "@babel/plugin-transform-modules-umd": "^7.25.7",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7",
+        "@babel/plugin-transform-new-target": "^7.25.7",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8",
+        "@babel/plugin-transform-numeric-separator": "^7.25.8",
+        "@babel/plugin-transform-object-rest-spread": "^7.25.8",
+        "@babel/plugin-transform-object-super": "^7.25.7",
+        "@babel/plugin-transform-optional-catch-binding": "^7.25.8",
+        "@babel/plugin-transform-optional-chaining": "^7.25.8",
+        "@babel/plugin-transform-parameters": "^7.25.7",
+        "@babel/plugin-transform-private-methods": "^7.25.7",
+        "@babel/plugin-transform-private-property-in-object": "^7.25.8",
+        "@babel/plugin-transform-property-literals": "^7.25.7",
+        "@babel/plugin-transform-regenerator": "^7.25.7",
+        "@babel/plugin-transform-reserved-words": "^7.25.7",
+        "@babel/plugin-transform-shorthand-properties": "^7.25.7",
+        "@babel/plugin-transform-spread": "^7.25.7",
+        "@babel/plugin-transform-sticky-regex": "^7.25.7",
+        "@babel/plugin-transform-template-literals": "^7.25.7",
+        "@babel/plugin-transform-typeof-symbol": "^7.25.7",
+        "@babel/plugin-transform-unicode-escapes": "^7.25.7",
+        "@babel/plugin-transform-unicode-property-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-regex": "^7.25.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.7",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
         "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
-        "core-js-compat": "^3.37.1",
+        "core-js-compat": "^3.38.1",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -3799,18 +3763,18 @@
       }
     },
     "node_modules/@babel/preset-react": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz",
-      "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz",
+      "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-validator-option": "^7.24.7",
-        "@babel/plugin-transform-react-display-name": "^7.24.7",
-        "@babel/plugin-transform-react-jsx": "^7.24.7",
-        "@babel/plugin-transform-react-jsx-development": "^7.24.7",
-        "@babel/plugin-transform-react-pure-annotations": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-transform-react-display-name": "^7.25.7",
+        "@babel/plugin-transform-react-jsx": "^7.25.7",
+        "@babel/plugin-transform-react-jsx-development": "^7.25.7",
+        "@babel/plugin-transform-react-pure-annotations": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3820,17 +3784,17 @@
       }
     },
     "node_modules/@babel/preset-typescript": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz",
-      "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz",
+      "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7",
-        "@babel/helper-validator-option": "^7.24.7",
-        "@babel/plugin-syntax-jsx": "^7.24.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.24.7",
-        "@babel/plugin-transform-typescript": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.25.7",
+        "@babel/helper-validator-option": "^7.25.7",
+        "@babel/plugin-syntax-jsx": "^7.25.7",
+        "@babel/plugin-transform-modules-commonjs": "^7.25.7",
+        "@babel/plugin-transform-typescript": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -3840,9 +3804,9 @@
       }
     },
     "node_modules/@babel/register": {
-      "version": "7.24.6",
-      "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz",
-      "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.7.tgz",
+      "integrity": "sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3859,17 +3823,10 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/regjsgen": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@babel/runtime": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
-      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz",
+      "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3887,32 +3844,32 @@
       "license": "MIT"
     },
     "node_modules/@babel/template": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
-      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz",
+      "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/parser": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/code-frame": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/types": "^7.25.7"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
-      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+      "version": "7.25.7",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz",
+      "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.6",
-        "@babel/parser": "^7.25.6",
-        "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.6",
+        "@babel/code-frame": "^7.25.7",
+        "@babel/generator": "^7.25.7",
+        "@babel/parser": "^7.25.7",
+        "@babel/template": "^7.25.7",
+        "@babel/types": "^7.25.7",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -3921,14 +3878,14 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.6",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
-      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+      "version": "7.25.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
+      "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-string-parser": "^7.24.8",
-        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/helper-string-parser": "^7.25.7",
+        "@babel/helper-validator-identifier": "^7.25.7",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -3998,9 +3955,9 @@
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.1.tgz",
-      "integrity": "sha512-lSquqZCHxDfuTg/Sk2hiS0mcSFCEBuj49JfzPHJogDBT0mGCyY5A1AQzBWngitrp7i1/HAZpIgzF/VjhOEIJIg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.2.tgz",
+      "integrity": "sha512-6tC/MnlEvs5suR4Ahef4YlBccJDHZuxGsAlxXmybWjZ5jPxlzLSMlRZ9mVHSRvlD+CmtE7+hJ+UQbfXrws/rUQ==",
       "dev": true,
       "funding": [
         {
@@ -4017,13 +3974,13 @@
         "node": ">=18"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^3.0.1"
+        "@csstools/css-tokenizer": "^3.0.2"
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.1.tgz",
-      "integrity": "sha512-UBqaiu7kU0lfvaP982/o3khfXccVlHPWp0/vwwiIgDF0GmqqqxoiXC/6FCjlS9u92f7CoEz6nXKQnrn1kIAkOw==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.2.tgz",
+      "integrity": "sha512-IuTRcD53WHsXPCZ6W7ubfGqReTJ9Ra0yRRFmXYP/Re8hFYYfoIYIK4080X5luslVLWimhIeFq0hj09urVMQzTw==",
       "dev": true,
       "funding": [
         {
@@ -7503,6 +7460,292 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@parcel/watcher": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz",
+      "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "detect-libc": "^1.0.3",
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "node-addon-api": "^7.0.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "@parcel/watcher-android-arm64": "2.4.1",
+        "@parcel/watcher-darwin-arm64": "2.4.1",
+        "@parcel/watcher-darwin-x64": "2.4.1",
+        "@parcel/watcher-freebsd-x64": "2.4.1",
+        "@parcel/watcher-linux-arm-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-glibc": "2.4.1",
+        "@parcel/watcher-linux-arm64-musl": "2.4.1",
+        "@parcel/watcher-linux-x64-glibc": "2.4.1",
+        "@parcel/watcher-linux-x64-musl": "2.4.1",
+        "@parcel/watcher-win32-arm64": "2.4.1",
+        "@parcel/watcher-win32-ia32": "2.4.1",
+        "@parcel/watcher-win32-x64": "2.4.1"
+      }
+    },
+    "node_modules/@parcel/watcher-android-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz",
+      "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz",
+      "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-darwin-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz",
+      "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-freebsd-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz",
+      "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz",
+      "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz",
+      "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-arm64-musl": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz",
+      "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-glibc": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz",
+      "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-linux-x64-musl": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz",
+      "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-arm64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz",
+      "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-ia32": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz",
+      "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/@parcel/watcher-win32-x64": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz",
+      "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
     "node_modules/@pkgjs/parseargs": {
       "version": "0.11.0",
       "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -7802,9 +8045,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
-      "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz",
+      "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==",
       "cpu": [
         "arm"
       ],
@@ -7816,9 +8059,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
-      "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz",
+      "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==",
       "cpu": [
         "arm64"
       ],
@@ -7830,9 +8073,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
-      "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz",
+      "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==",
       "cpu": [
         "arm64"
       ],
@@ -7844,9 +8087,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
-      "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
+      "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
       "cpu": [
         "x64"
       ],
@@ -7858,9 +8101,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
-      "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz",
+      "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==",
       "cpu": [
         "arm"
       ],
@@ -7872,9 +8115,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
-      "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz",
+      "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==",
       "cpu": [
         "arm"
       ],
@@ -7886,9 +8129,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
-      "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz",
+      "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==",
       "cpu": [
         "arm64"
       ],
@@ -7900,9 +8143,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
-      "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz",
+      "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==",
       "cpu": [
         "arm64"
       ],
@@ -7914,9 +8157,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
-      "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz",
+      "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==",
       "cpu": [
         "ppc64"
       ],
@@ -7928,9 +8171,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
-      "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz",
+      "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==",
       "cpu": [
         "riscv64"
       ],
@@ -7942,9 +8185,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
-      "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz",
+      "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==",
       "cpu": [
         "s390x"
       ],
@@ -7956,9 +8199,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
-      "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz",
+      "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==",
       "cpu": [
         "x64"
       ],
@@ -7970,9 +8213,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
-      "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz",
+      "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==",
       "cpu": [
         "x64"
       ],
@@ -7984,9 +8227,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
-      "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz",
+      "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==",
       "cpu": [
         "arm64"
       ],
@@ -7998,9 +8241,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
-      "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz",
+      "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==",
       "cpu": [
         "ia32"
       ],
@@ -8012,9 +8255,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
-      "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz",
+      "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==",
       "cpu": [
         "x64"
       ],
@@ -8026,13 +8269,13 @@
       ]
     },
     "node_modules/@rollup/wasm-node": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.22.4.tgz",
-      "integrity": "sha512-2AXpNT2gtSyGangSWTwmspOnu0wVMBLC6U/wJ8fs58JhtlAy+B3jNOuaN+7x9blilAoiwBk9187ybhrs7kaCpg==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.24.0.tgz",
+      "integrity": "sha512-LL6oALR6fKG6GihtH0K0uWLAl19Q/QJst+oKJT1VWwFo4sPLA0/7JeZaSqrpFWq8OPloiKx/NDG4BWppFSX2vQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/estree": "1.0.5"
+        "@types/estree": "1.0.6"
       },
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -8045,13 +8288,6 @@
         "fsevents": "~2.3.2"
       }
     },
-    "node_modules/@rollup/wasm-node/node_modules/@types/estree": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@rtsao/scc": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -8060,14 +8296,14 @@
       "license": "MIT"
     },
     "node_modules/@schematics/angular": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.9.tgz",
-      "integrity": "sha512-q6N8mbcYC6cgPyjTrMH7ehULQoUUwEYN4g7uo4ylZ/PFklSLJvpSp4BuuxANgW449qHSBvQfdIoui9ayAUXQzA==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.10.tgz",
+      "integrity": "sha512-cI+VB/WXlOeAMamni932lE/AZgui8o81dMyEXNXqCuYagNAMuKXliW79Mi5BwYQEABv/BUb4hB4zYtbQqHyACA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@angular-devkit/core": "17.3.9",
-        "@angular-devkit/schematics": "17.3.9",
+        "@angular-devkit/core": "17.3.10",
+        "@angular-devkit/schematics": "17.3.10",
         "jsonc-parser": "3.2.1"
       },
       "engines": {
@@ -8548,9 +8784,22 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.19.5",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-      "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+      "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
+      }
+    },
+    "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
+      "version": "4.19.6",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+      "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8729,9 +8978,9 @@
       "license": "MIT"
     },
     "node_modules/@types/react": {
-      "version": "18.3.8",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz",
-      "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==",
+      "version": "18.3.11",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz",
+      "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8740,9 +8989,9 @@
       }
     },
     "node_modules/@types/react-dom": {
-      "version": "18.3.0",
-      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
-      "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+      "version": "18.3.1",
+      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
+      "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9448,42 +9697,42 @@
       "license": "ISC"
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.8.tgz",
-      "integrity": "sha512-Uzlxp91EPjfbpeO5KtC0KnXPkuTfGsNDeaKQJxQN718uz+RqDYarEf7UhQJGK+ZYloD2taUbHTI2J4WrUaZQNA==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz",
+      "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.8",
+        "@vue/shared": "3.5.12",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.8.tgz",
-      "integrity": "sha512-GUNHWvoDSbSa5ZSHT9SnV5WkStWfzJwwTd6NMGzilOE/HM5j+9EB9zGXdtu/fCNEmctBqMs6C9SvVPpVPuk1Eg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz",
+      "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-core": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.8.tgz",
-      "integrity": "sha512-taYpngQtSysrvO9GULaOSwcG5q821zCoIQBtQQSx7Uf7DxpR6CIHR90toPr9QfDD2mqHQPCSgoWBvJu0yV9zjg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz",
+      "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.8",
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/compiler-ssr": "3.5.8",
-        "@vue/shared": "3.5.8",
+        "@vue/compiler-core": "3.5.12",
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/compiler-ssr": "3.5.12",
+        "@vue/shared": "3.5.12",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.47",
@@ -9491,9 +9740,9 @@
       }
     },
     "node_modules/@vue/compiler-sfc/node_modules/magic-string": {
-      "version": "0.30.11",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
-      "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
+      "version": "0.30.12",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz",
+      "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9501,14 +9750,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.8.tgz",
-      "integrity": "sha512-W96PtryNsNG9u0ZnN5Q5j27Z/feGrFV6zy9q5tzJVyJaLiwYxvC0ek4IXClZygyhjm+XKM7WD9pdKi/wIRVC/Q==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz",
+      "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/component-compiler": {
@@ -9594,43 +9843,43 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.8.tgz",
-      "integrity": "sha512-mlgUyFHLCUZcAYkqvzYnlBRCh0t5ZQfLYit7nukn1GR96gc48Bp4B7OIcSfVSvlG1k3BPfD+p22gi1t2n9tsXg==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz",
+      "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.8"
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.8.tgz",
-      "integrity": "sha512-fJuPelh64agZ8vKkZgp5iCkPaEqFJsYzxLk9vSC0X3G8ppknclNDr61gDc45yBGTaN5Xqc1qZWU3/NoaBMHcjQ==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz",
+      "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/reactivity": "3.5.12",
+        "@vue/shared": "3.5.12"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.8.tgz",
-      "integrity": "sha512-DpAUz+PKjTZPUOB6zJgkxVI3GuYc2iWZiNeeHQUw53kdrparSTG6HeXUrYDjaam8dVsCdvQxDz6ZWxnyjccUjQ==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz",
+      "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.8",
-        "@vue/runtime-core": "3.5.8",
-        "@vue/shared": "3.5.8",
+        "@vue/reactivity": "3.5.12",
+        "@vue/runtime-core": "3.5.12",
+        "@vue/shared": "3.5.12",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.8.tgz",
-      "integrity": "sha512-mJleSWbAGySd2RJdX1RBtcrUBX6snyOc0qHpgk3lGi4l9/P/3ny3ELqFWqYdkXIwwNN/kdm8nD9ky8o6l/Lx2A==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz",
+      "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==",
       "dev": true,
       "license": "MIT"
     },
@@ -10589,9 +10838,9 @@
       }
     },
     "node_modules/b4a": {
-      "version": "1.6.6",
-      "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
-      "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
+      "version": "1.6.7",
+      "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
+      "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
       "dev": true,
       "license": "Apache-2.0"
     },
@@ -10877,9 +11126,9 @@
       "license": "MIT"
     },
     "node_modules/bare-events": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
-      "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz",
+      "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==",
       "dev": true,
       "license": "Apache-2.0",
       "optional": true
@@ -11308,9 +11557,9 @@
       "license": "BSD-2-Clause"
     },
     "node_modules/browserslist": {
-      "version": "4.23.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+      "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
       "dev": true,
       "funding": [
         {
@@ -11328,8 +11577,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001646",
-        "electron-to-chromium": "^1.5.4",
+        "caniuse-lite": "^1.0.30001663",
+        "electron-to-chromium": "^1.5.28",
         "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
@@ -11606,9 +11855,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001663",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-      "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+      "version": "1.0.30001668",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz",
+      "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==",
       "dev": true,
       "funding": [
         {
@@ -12435,9 +12684,9 @@
       }
     },
     "node_modules/cookie": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
-      "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -13335,9 +13584,9 @@
       }
     },
     "node_modules/css-functions-list": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
-      "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+      "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -13498,13 +13747,13 @@
       }
     },
     "node_modules/css-tree": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
-      "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.0.0.tgz",
+      "integrity": "sha512-o88DVQ6GzsABn1+6+zo2ct801dBO5OASVyxbbvA2W20ue2puSh/VOuqUj90eUeMSX/xqGqBmOKiRQN7tJOuBXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "mdn-data": "2.0.30",
+        "mdn-data": "2.10.0",
         "source-map-js": "^1.0.1"
       },
       "engines": {
@@ -14089,13 +14338,16 @@
       }
     },
     "node_modules/detect-libc": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
-      "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
       "dev": true,
       "license": "Apache-2.0",
+      "bin": {
+        "detect-libc": "bin/detect-libc.js"
+      },
       "engines": {
-        "node": ">=8"
+        "node": ">=0.10"
       }
     },
     "node_modules/detect-newline": {
@@ -14313,9 +14565,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "2.5.6",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz",
-      "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==",
+      "version": "2.5.7",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz",
+      "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==",
       "license": "(MPL-2.0 OR Apache-2.0)"
     },
     "node_modules/domutils": {
@@ -14489,9 +14741,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.28",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz",
-      "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==",
+      "version": "1.5.38",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.38.tgz",
+      "integrity": "sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==",
       "dev": true,
       "license": "ISC"
     },
@@ -14571,9 +14823,9 @@
       }
     },
     "node_modules/engine.io": {
-      "version": "6.6.1",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz",
-      "integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==",
+      "version": "6.6.2",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz",
+      "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14582,7 +14834,7 @@
         "@types/node": ">=10.0.0",
         "accepts": "~1.3.4",
         "base64id": "2.0.0",
-        "cookie": "~0.4.1",
+        "cookie": "~0.7.2",
         "cors": "~2.8.5",
         "debug": "~4.3.1",
         "engine.io-parser": "~5.2.1",
@@ -15137,6 +15389,7 @@
       "version": "7.32.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
       "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15233,9 +15486,9 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.11.1",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.1.tgz",
-      "integrity": "sha512-EwcbfLOhwVMAfatfqLecR2yv3dE5+kQ8kx+Rrt0DvDXEVwW86KQ/xbMDQhtp5l42VXukD5SOF8mQQHbaNtO0CQ==",
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15265,9 +15518,9 @@
       "link": true
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.30.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
-      "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
+      "version": "2.31.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15279,7 +15532,7 @@
         "debug": "^3.2.7",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.9.0",
+        "eslint-module-utils": "^2.12.0",
         "hasown": "^2.0.2",
         "is-core-module": "^2.15.1",
         "is-glob": "^4.0.3",
@@ -15288,13 +15541,14 @@
         "object.groupby": "^1.0.3",
         "object.values": "^1.2.0",
         "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.8",
         "tsconfig-paths": "^3.15.0"
       },
       "engines": {
         "node": ">=4"
       },
       "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
       }
     },
     "node_modules/eslint-plugin-import/node_modules/debug": {
@@ -15410,9 +15664,9 @@
       }
     },
     "node_modules/eslint-scope": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
-      "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
+      "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -15939,9 +16193,9 @@
       "license": "Apache-2.0"
     },
     "node_modules/express": {
-      "version": "4.21.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
-      "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+      "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15950,7 +16204,7 @@
         "body-parser": "1.20.3",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
-        "cookie": "0.6.0",
+        "cookie": "0.7.1",
         "cookie-signature": "1.0.6",
         "debug": "2.6.9",
         "depd": "2.0.0",
@@ -15982,9 +16236,9 @@
       }
     },
     "node_modules/express/node_modules/cookie": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
-      "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+      "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -16572,9 +16826,9 @@
       }
     },
     "node_modules/form-data": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
-      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+      "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -19094,15 +19348,15 @@
       }
     },
     "node_modules/jasmine": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.3.0.tgz",
-      "integrity": "sha512-Vrv5VWTXVZ/5xcNawlYCmE24pOaZu3KduLr9iAaENoMJ8W8Ryvhfpw2cf3rI4Unc2ajvu2t4tCKjS72TnraBGQ==",
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.4.0.tgz",
+      "integrity": "sha512-E2u4ylX5tgGYvbynImU6EUBKKrSVB1L72FEPjGh4M55ov1VsxR26RA2JU91L9YSPFgcjo4mCLyKn/QXvEYGBkA==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
         "glob": "^10.2.2",
-        "jasmine-core": "~5.3.0"
+        "jasmine-core": "~5.4.0"
       },
       "bin": {
         "jasmine": "bin/jasmine.js"
@@ -19374,9 +19628,9 @@
       }
     },
     "node_modules/jasmine/node_modules/jasmine-core": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.3.0.tgz",
-      "integrity": "sha512-zsOmeBKESky4toybvWEikRiZ0jHoBEu79wNArLfMdSnlLMZx3Xcp6CSm2sUcYyoJC+Uyj8LBJap/MUbVSfJ27g==",
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.4.0.tgz",
+      "integrity": "sha512-T4fio3W++llLd7LGSGsioriDHgWyhoL6YTu4k37uwJLF7DzOzspz7mNxRoM3cQdLWtL/ebazQpIf/yZGJx/gzg==",
       "dev": true,
       "license": "MIT",
       "peer": true
@@ -20888,9 +21142,9 @@
       }
     },
     "node_modules/jest-environment-jsdom/node_modules/form-data": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
-      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz",
+      "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -24067,16 +24321,16 @@
       }
     },
     "node_modules/jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+      "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
       "dev": true,
       "license": "MIT",
       "bin": {
         "jsesc": "bin/jsesc"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       }
     },
     "node_modules/json-buffer": {
@@ -25005,9 +25259,9 @@
       }
     },
     "node_modules/mdn-data": {
-      "version": "2.0.30",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
-      "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.10.0.tgz",
+      "integrity": "sha512-qq7C3EtK3yJXMwz1zAab65pjl+UhohqMOctTgcqjLOWABqmwj+me02LSsCuEUxnst9X1lCBpoE0WArGKgdGDzw==",
       "dev": true,
       "license": "CC0-1.0"
     },
@@ -25720,9 +25974,9 @@
       }
     },
     "node_modules/node-abi": {
-      "version": "3.68.0",
-      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.68.0.tgz",
-      "integrity": "sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==",
+      "version": "3.70.0",
+      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.70.0.tgz",
+      "integrity": "sha512-xMTIZdvAyzGyxwOwxXv/8V/f/KAqKWNCeNIIFu2doEtQp9wvMUTam036At/iVtJqum6n5ljbAhUmXAUOhyivSA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -25746,9 +26000,9 @@
       }
     },
     "node_modules/node-addon-api": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
-      "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -26289,9 +26543,9 @@
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.12",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
-      "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==",
+      "version": "2.2.13",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
+      "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -27061,9 +27315,9 @@
       }
     },
     "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
       "dev": true,
       "license": "BlueOak-1.0.0"
     },
@@ -27360,13 +27614,13 @@
       }
     },
     "node_modules/parse5": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.0.tgz",
+      "integrity": "sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "entities": "^4.4.0"
+        "entities": "^4.5.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -28030,9 +28284,9 @@
       }
     },
     "node_modules/postcss-loader/node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "optional": true,
@@ -28456,9 +28710,9 @@
       "license": "MIT"
     },
     "node_modules/postcss-safe-parser": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz",
-      "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+      "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
       "dev": true,
       "funding": [
         {
@@ -28570,6 +28824,16 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/prebuild-install/node_modules/detect-libc": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+      "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/prebuild-install/node_modules/tar-fs": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
@@ -29173,9 +29437,9 @@
       }
     },
     "node_modules/puppeteer/node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "optional": true,
@@ -29806,16 +30070,16 @@
       "optional": true
     },
     "node_modules/regexp.prototype.flags": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
-      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+      "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.6",
+        "call-bind": "^1.0.7",
         "define-properties": "^1.2.1",
         "es-errors": "^1.3.0",
-        "set-function-name": "^2.0.1"
+        "set-function-name": "^2.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -29838,16 +30102,16 @@
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz",
+      "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
+        "regenerate-unicode-properties": "^10.2.0",
+        "regjsgen": "^0.8.0",
+        "regjsparser": "^0.11.0",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
       },
@@ -29894,28 +30158,26 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.1.tgz",
+      "integrity": "sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "jsesc": "~3.0.2"
       },
       "bin": {
         "regjsparser": "bin/parser"
       }
     },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
-      "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
-    },
     "node_modules/relateurl": {
       "version": "0.2.7",
       "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -30260,13 +30522,13 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.22.4",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
-      "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
+      "version": "4.24.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz",
+      "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/estree": "1.0.5"
+        "@types/estree": "1.0.6"
       },
       "bin": {
         "rollup": "dist/bin/rollup"
@@ -30276,22 +30538,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.22.4",
-        "@rollup/rollup-android-arm64": "4.22.4",
-        "@rollup/rollup-darwin-arm64": "4.22.4",
-        "@rollup/rollup-darwin-x64": "4.22.4",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
-        "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
-        "@rollup/rollup-linux-arm64-gnu": "4.22.4",
-        "@rollup/rollup-linux-arm64-musl": "4.22.4",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
-        "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
-        "@rollup/rollup-linux-s390x-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-gnu": "4.22.4",
-        "@rollup/rollup-linux-x64-musl": "4.22.4",
-        "@rollup/rollup-win32-arm64-msvc": "4.22.4",
-        "@rollup/rollup-win32-ia32-msvc": "4.22.4",
-        "@rollup/rollup-win32-x64-msvc": "4.22.4",
+        "@rollup/rollup-android-arm-eabi": "4.24.0",
+        "@rollup/rollup-android-arm64": "4.24.0",
+        "@rollup/rollup-darwin-arm64": "4.24.0",
+        "@rollup/rollup-darwin-x64": "4.24.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.24.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.24.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.24.0",
+        "@rollup/rollup-linux-arm64-musl": "4.24.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.24.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-gnu": "4.24.0",
+        "@rollup/rollup-linux-x64-musl": "4.24.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.24.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.24.0",
+        "@rollup/rollup-win32-x64-msvc": "4.24.0",
         "fsevents": "~2.3.2"
       }
     },
@@ -30527,13 +30789,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/rollup/node_modules/@types/estree": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/rrweb-cssom": {
       "version": "0.7.1",
       "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
@@ -30966,12 +31221,13 @@
       }
     },
     "node_modules/sass": {
-      "version": "1.79.3",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz",
-      "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==",
+      "version": "1.79.5",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.5.tgz",
+      "integrity": "sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
+        "@parcel/watcher": "^2.4.1",
         "chokidar": "^4.0.0",
         "immutable": "^4.0.0",
         "source-map-js": ">=0.6.2 <2.0.0"
@@ -31104,9 +31360,9 @@
       }
     },
     "node_modules/sass/node_modules/readdirp": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz",
-      "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==",
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
+      "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -31546,6 +31802,23 @@
         "url": "https://opencollective.com/libvips"
       }
     },
+    "node_modules/sharp/node_modules/detect-libc": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+      "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/sharp/node_modules/node-addon-api": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
+      "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/sharp/node_modules/semver": {
       "version": "7.6.3",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -32773,9 +33046,9 @@
       }
     },
     "node_modules/stylelint": {
-      "version": "16.9.0",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.9.0.tgz",
-      "integrity": "sha512-31Nm3WjxGOBGpQqF43o3wO9L5AC36TPIe6030Lnm13H3vDMTcS21DrLh69bMX+DBilKqMMVLian4iG6ybBoNRQ==",
+      "version": "16.10.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz",
+      "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==",
       "dev": true,
       "funding": [
         {
@@ -32797,17 +33070,17 @@
         "balanced-match": "^2.0.0",
         "colord": "^2.9.3",
         "cosmiconfig": "^9.0.0",
-        "css-functions-list": "^3.2.2",
-        "css-tree": "^2.3.1",
-        "debug": "^4.3.6",
+        "css-functions-list": "^3.2.3",
+        "css-tree": "^3.0.0",
+        "debug": "^4.3.7",
         "fast-glob": "^3.3.2",
         "fastest-levenshtein": "^1.0.16",
-        "file-entry-cache": "^9.0.0",
+        "file-entry-cache": "^9.1.0",
         "global-modules": "^2.0.0",
         "globby": "^11.1.0",
         "globjoin": "^0.1.4",
         "html-tags": "^3.3.1",
-        "ignore": "^5.3.2",
+        "ignore": "^6.0.2",
         "imurmurhash": "^0.1.4",
         "is-plain-object": "^5.0.0",
         "known-css-properties": "^0.34.0",
@@ -32816,14 +33089,13 @@
         "micromatch": "^4.0.8",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.0.1",
-        "postcss": "^8.4.41",
+        "postcss": "^8.4.47",
         "postcss-resolve-nested-selector": "^0.1.6",
-        "postcss-safe-parser": "^7.0.0",
+        "postcss-safe-parser": "^7.0.1",
         "postcss-selector-parser": "^6.1.2",
         "postcss-value-parser": "^4.2.0",
         "resolve-from": "^5.0.0",
         "string-width": "^4.2.3",
-        "strip-ansi": "^7.1.0",
         "supports-hyperlinks": "^3.1.0",
         "svg-tags": "^1.0.0",
         "table": "^6.8.2",
@@ -32836,19 +33108,6 @@
         "node": ">=18.12.0"
       }
     },
-    "node_modules/stylelint/node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
-      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
     "node_modules/stylelint/node_modules/argparse": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -32918,9 +33177,9 @@
       }
     },
     "node_modules/stylelint/node_modules/ignore": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
-      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+      "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -32953,26 +33212,10 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/stylelint/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
     "node_modules/stylelint/node_modules/typescript": {
-      "version": "5.6.2",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
-      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+      "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
       "dev": true,
       "license": "Apache-2.0",
       "optional": true,
@@ -33155,6 +33398,20 @@
         "url": "https://github.com/sponsors/fb55"
       }
     },
+    "node_modules/svgo/node_modules/css-tree": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+      "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mdn-data": "2.0.30",
+        "source-map-js": "^1.0.1"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+      }
+    },
     "node_modules/svgo/node_modules/dom-serializer": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
@@ -33201,6 +33458,13 @@
         "url": "https://github.com/fb55/domutils?sponsor=1"
       }
     },
+    "node_modules/svgo/node_modules/mdn-data": {
+      "version": "2.0.30",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+      "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
     "node_modules/symbol-observable": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
@@ -33356,9 +33620,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.33.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz",
-      "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==",
+      "version": "5.34.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz",
+      "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -34552,9 +34816,9 @@
       "license": "MIT"
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
       "dev": true,
       "funding": [
         {
@@ -34572,8 +34836,8 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.1.2",
-        "picocolors": "^1.0.1"
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.0"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
@@ -35077,9 +35341,9 @@
       }
     },
     "node_modules/webpack": {
-      "version": "5.94.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
-      "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+      "version": "5.95.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz",
+      "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -35972,7 +36236,7 @@
     },
     "visual-tests": {
       "name": "handsontable-visual-tests",
-      "version": "14.6.0",
+      "version": "14.6.1",
       "license": "CC BY 4.0",
       "devDependencies": {
         "@argos-ci/cli": "^1.0.3",
@@ -36229,7 +36493,7 @@
     },
     "wrappers/angular": {
       "name": "@handsontable/angular",
-      "version": "14.6.0",
+      "version": "14.6.1",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "handsontable": "^14.0.0",
@@ -36289,16 +36553,16 @@
       }
     },
     "wrappers/angular/node_modules/@angular-devkit/build-angular": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.9.tgz",
-      "integrity": "sha512-EuAPSC4c2DSJLlL4ieviKLx1faTyY+ymWycq6KFwoxu1FgWly/dqBeWyXccYinLhPVZmoh6+A/5S4YWXlOGSnA==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.10.tgz",
+      "integrity": "sha512-syz7xgzmp8/0tPJWwQIKZt7KNJfp9U7hkqNacXz4XTYz6YM0oyBXlqk2claSxywWBEkc0eJVSMD9e2ArusZBuA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@ampproject/remapping": "2.3.0",
-        "@angular-devkit/architect": "0.1703.9",
-        "@angular-devkit/build-webpack": "0.1703.9",
-        "@angular-devkit/core": "17.3.9",
+        "@angular-devkit/architect": "0.1703.10",
+        "@angular-devkit/build-webpack": "0.1703.10",
+        "@angular-devkit/core": "17.3.10",
         "@babel/core": "7.24.0",
         "@babel/generator": "7.23.6",
         "@babel/helper-annotate-as-pure": "7.22.5",
@@ -36309,7 +36573,7 @@
         "@babel/preset-env": "7.24.0",
         "@babel/runtime": "7.24.0",
         "@discoveryjs/json-ext": "0.5.7",
-        "@ngtools/webpack": "17.3.9",
+        "@ngtools/webpack": "17.3.10",
         "@vitejs/plugin-basic-ssl": "1.1.0",
         "ansi-colors": "4.1.3",
         "autoprefixer": "10.4.18",
@@ -36351,7 +36615,7 @@
         "tree-kill": "1.2.2",
         "tslib": "2.6.2",
         "undici": "6.11.1",
-        "vite": "5.1.7",
+        "vite": "5.1.8",
         "watchpack": "2.4.0",
         "webpack": "5.94.0",
         "webpack-dev-middleware": "6.1.2",
@@ -36419,9 +36683,9 @@
       }
     },
     "wrappers/angular/node_modules/@angular-devkit/build-angular/node_modules/@types/node": {
-      "version": "22.6.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz",
-      "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==",
+      "version": "22.7.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
+      "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -36444,9 +36708,9 @@
       }
     },
     "wrappers/angular/node_modules/@angular-devkit/build-angular/node_modules/vite": {
-      "version": "5.1.7",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.7.tgz",
-      "integrity": "sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==",
+      "version": "5.1.8",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.8.tgz",
+      "integrity": "sha512-mB8ToUuSmzODSpENgvpFk2fTiU/YQ1tmcVJJ4WZbq4fPdGJkFNVcmVL5k7iDug6xzWjjuGDKAuSievIsD6H7Xw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -37418,9 +37682,9 @@
       "license": "BSD-3-Clause"
     },
     "wrappers/angular/node_modules/@ngtools/webpack": {
-      "version": "17.3.9",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.9.tgz",
-      "integrity": "sha512-2+NvEQuYKRWdZaJbRJWEnR48tpW0uYbhwfHBHLDI9Kazb3mb0oAwYBVXdq+TtDLBypXnMsFpCewjRHTvkVx4/A==",
+      "version": "17.3.10",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.10.tgz",
+      "integrity": "sha512-yPKmdbTJzxROAl2NS8P8eHB2mU0BqV2I0ZiKmX6oTetY2Ea4i2WzlTK39pPpG7atmdF2NPWYLXdJWAup+JxSyw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -37826,6 +38090,16 @@
         "node": ">=0.4.0"
       }
     },
+    "wrappers/angular/node_modules/acorn-import-attributes": {
+      "version": "1.9.5",
+      "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
+      "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "acorn": "^8"
+      }
+    },
     "wrappers/angular/node_modules/argparse": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -38060,6 +38334,7 @@
       "version": "8.57.1",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
       "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+      "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -38407,6 +38682,26 @@
         "js-yaml": "bin/js-yaml.js"
       }
     },
+    "wrappers/angular/node_modules/jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "wrappers/angular/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,
+      "license": "MIT"
+    },
     "wrappers/angular/node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -39255,6 +39550,63 @@
         "node": ">=10.13.0"
       }
     },
+    "wrappers/angular/node_modules/webpack": {
+      "version": "5.94.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
+      "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.5",
+        "@webassemblyjs/ast": "^1.12.1",
+        "@webassemblyjs/wasm-edit": "^1.12.1",
+        "@webassemblyjs/wasm-parser": "^1.12.1",
+        "acorn": "^8.7.1",
+        "acorn-import-attributes": "^1.9.5",
+        "browserslist": "^4.21.10",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.17.1",
+        "es-module-lexer": "^1.2.1",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.11",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^3.2.0",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.3.10",
+        "watchpack": "^2.4.1",
+        "webpack-sources": "^3.2.3"
+      },
+      "bin": {
+        "webpack": "bin/webpack.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
+        }
+      }
+    },
+    "wrappers/angular/node_modules/webpack-sources": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
     "wrappers/angular/node_modules/webpack-subresource-integrity": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz",
@@ -39277,6 +39629,90 @@
         }
       }
     },
+    "wrappers/angular/node_modules/webpack/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,
+      "license": "MIT",
+      "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"
+      }
+    },
+    "wrappers/angular/node_modules/webpack/node_modules/ajv-keywords": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "ajv": "^6.9.1"
+      }
+    },
+    "wrappers/angular/node_modules/webpack/node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "wrappers/angular/node_modules/webpack/node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "wrappers/angular/node_modules/webpack/node_modules/schema-utils": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.8",
+        "ajv": "^6.12.5",
+        "ajv-keywords": "^3.5.2"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      }
+    },
+    "wrappers/angular/node_modules/webpack/node_modules/watchpack": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
+      "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.1.2"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
     "wrappers/angular/node_modules/wrap-ansi": {
       "version": "6.2.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
@@ -39355,7 +39791,7 @@
     },
     "wrappers/react": {
       "name": "@handsontable/react",
-      "version": "14.6.0",
+      "version": "14.6.1",
       "license": "SEE LICENSE IN LICENSE.txt",
       "devDependencies": {
         "@babel/cli": "^7.8.4",
@@ -39398,7 +39834,7 @@
     },
     "wrappers/vue": {
       "name": "@handsontable/vue",
-      "version": "14.6.0",
+      "version": "14.6.1",
       "license": "SEE LICENSE IN LICENSE.txt",
       "devDependencies": {
         "@babel/cli": "^7.4.4",
@@ -40720,7 +41156,7 @@
     },
     "wrappers/vue3": {
       "name": "@handsontable/vue3",
-      "version": "14.6.0",
+      "version": "14.6.1",
       "license": "SEE LICENSE IN LICENSE.txt",
       "devDependencies": {
         "@babel/cli": "^7.11.0",
@@ -41118,17 +41554,17 @@
       }
     },
     "wrappers/vue3/node_modules/@vue/server-renderer": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.8.tgz",
-      "integrity": "sha512-7AmC9/mEeV9mmXNVyUIm1a1AjUhyeeGNbkLh39J00E7iPeGks8OGRB5blJiMmvqSh8SkaS7jkLWSpXtxUCeagA==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz",
+      "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-ssr": "3.5.12",
+        "@vue/shared": "3.5.12"
       },
       "peerDependencies": {
-        "vue": "3.5.8"
+        "vue": "3.5.12"
       }
     },
     "wrappers/vue3/node_modules/@vue/test-utils": {
@@ -41937,17 +42373,17 @@
       }
     },
     "wrappers/vue3/node_modules/vue": {
-      "version": "3.5.8",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.8.tgz",
-      "integrity": "sha512-hvuvuCy51nP/1fSRvrrIqTLSvrSyz2Pq+KQ8S8SXCxTWVE0nMaOnSDnSOxV1eYmGfvK7mqiwvd1C59CEEz7dAQ==",
+      "version": "3.5.12",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz",
+      "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.8",
-        "@vue/compiler-sfc": "3.5.8",
-        "@vue/runtime-dom": "3.5.8",
-        "@vue/server-renderer": "3.5.8",
-        "@vue/shared": "3.5.8"
+        "@vue/compiler-dom": "3.5.12",
+        "@vue/compiler-sfc": "3.5.12",
+        "@vue/runtime-dom": "3.5.12",
+        "@vue/server-renderer": "3.5.12",
+        "@vue/shared": "3.5.12"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/visual-tests/package.json b/visual-tests/package.json
index e9ec55d151..d096663273 100644
--- a/visual-tests/package.json
+++ b/visual-tests/package.json
@@ -1,7 +1,7 @@
 {
   "name": "handsontable-visual-tests",
   "private": true,
-  "version": "14.6.0",
+  "version": "14.6.1",
   "description": "",
   "main": "index.js",
   "scripts": {
diff --git a/wrappers/angular/package.json b/wrappers/angular/package.json
index 2406ac9f04..961f41d1e4 100644
--- a/wrappers/angular/package.json
+++ b/wrappers/angular/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@handsontable/angular",
-  "version": "14.6.0",
+  "version": "14.6.1",
   "description": "Best Data Grid for Angular with Spreadsheet Look and Feel.",
   "author": "Handsoncode <hello@handsoncode.net> (https://handsoncode.net)",
   "license": "SEE LICENSE IN LICENSE.txt",
diff --git a/wrappers/react/package.json b/wrappers/react/package.json
index dcc2435fe7..d476e3ff4c 100644
--- a/wrappers/react/package.json
+++ b/wrappers/react/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@handsontable/react",
-  "version": "14.6.0",
+  "version": "14.6.1",
   "description": "Best Data Grid for React with Spreadsheet Look and Feel.",
   "author": "Handsoncode <hello@handsoncode.net> (https://handsoncode.net)",
   "homepage": "https://handsontable.com",
diff --git a/wrappers/vue/package.json b/wrappers/vue/package.json
index e09e37cbc5..77a33efd99 100644
--- a/wrappers/vue/package.json
+++ b/wrappers/vue/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@handsontable/vue",
-  "version": "14.6.0",
+  "version": "14.6.1",
   "description": "Best Data Grid for Vue with Spreadsheet Look and Feel.",
   "author": "Handsoncode <hello@handsoncode.net> (https://handsoncode.net)",
   "homepage": "https://handsontable.com",
diff --git a/wrappers/vue3/package.json b/wrappers/vue3/package.json
index 5a32fdf97e..8ade8ac798 100644
--- a/wrappers/vue3/package.json
+++ b/wrappers/vue3/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@handsontable/vue3",
-  "version": "14.6.0",
+  "version": "14.6.1",
   "description": "Best Data Grid for Vue with Spreadsheet Look and Feel.",
   "author": "Handsoncode <hello@handsoncode.net> (https://handsoncode.net)",
   "homepage": "https://handsontable.com",